感知機和神經網絡及三種激活函數

《深度學習入門·基於Python的理論與實現》

*感知機*——神經網絡(深度學習)起源算法。接收多個信號,輸出一個信號【信號取值只有0/1,0代表“不傳遞信號”,1代表“傳遞信號”】

*激活函數*——連接感知機和神經網絡的橋樑

*樸素感知機*——單層網絡,激活函數使用階躍函數

*多層感知機*——神經網絡,使用sigmoid函數等平滑的激活函數的多層網絡

一、

1.激活函數

a. sigmoid函數:e=2.7182

h(x)=\frac{1}{1+exp(-x)}   

使得神經網絡中流動的是連續的實數值信號,平滑性

注:階躍函數和sigmoid函數都屬於非線性函數(線性函數h(x)=cx),神經網絡的激活函數必須使用非線性函數

b. ReLU函數(Rectified Linear Unit):輸入大於0時,直接輸出該值;小於等於0時,輸出0

h(x)=\left\{\begin{matrix} x (x>0)\\ 0(x\leq 0) \end{matrix}\right.

二、三層神經網絡的實現

輸入層(0層)有兩個神經元,第1個隱藏層(第1層)有3個神經元,第2個隱藏層(第2層)有兩個神經元,輸出層(第3層)有兩個神經元

  • 迴歸問題——可以使用恆等函數(y=x)
  • 二元分類問題——可以使用sigmoid函數
  • 多元分類問題——可以使用softmax函數
def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    sun_exp_a = np.sum(exp_a)
    y = exp_a/sun_exp_a
    return y

使用softmax出現的問題:當exp(a)中,a=1000時,結果爲inf(無限大),溢出。在超大值之間進行除法運算時,結果會出現“不確定”的情況。

在使用softmax進行運算時,加上或減去某個常數不會改變運算的結果

注意:softmax函數輸出值的總和爲1

三、神經網絡的學習

“學習”——從訓練數據中自動獲取最優權重參數的過程,引入損失函數——學習的目的,即損失函數儘可能小

  • 線性可分問題,通過有限次數的學習,可解
  • 非線性可分問題,無法通過自動學習來解決

在計算機視覺領域常用的特徵量包括:SIFT、SURF、HOG

1、損失函數

a. 均方誤差(mean squared)

E=\frac{1}{2}\sum_{k}(y_{k}-t_{k})^{2}

  • yk-神經網絡的輸出
  • tk-監督數據
  • k-數據的維數

b. 交叉熵誤差(cross entropy error)

E = - \sum_{k}t_{k}log(y_{k})

  • log-以e爲底
  • tk-正確解標籤(是爲1,錯爲0)
  • yk-神經網絡的輸出

2、數值微分

導數:表示某個瞬間的變化量

\frac{df(x)}{dx}=\lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h}

def numerical_diff(f,h):
    h=1e-4
    return (f(x+h)-f(x-h))/(2*h)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章