神經網路簡介 加速學習

2021-07-24 12:50:57 字數 4123 閱讀 7199

在訓練神經網路過程中,網路訓練速度是比較引人關注的乙個問題。我們希望在訓練過程中網路代價函式會快速收斂,準確率會快速提公升,下面來說說一些常見的方法。

1.代價函式更換

1.1. quadratic-cost functionj(

w,b)

=12n

∑i=1

n(yi

−h(w

,b)(

xi))

2+r(

w)上式中,r(

w)是正則項,對於第乙個代價函式,我們由第二節的知識可知,最後一層w更新公式為 w(

l)=w

(l)−

α⋅∂j

(w,b

)w(l

)=w(

l)−α

⋅δ(l

+1)⋅

a(l)

其中 δ(

l+1)

=−(y

−a(l

+1))

f′(z

(l))

而f′(z(l

))是啟用函式的導數,之前的實驗中我們選取的啟用函式為sigmod函式,其對應的函式曲線為

從上圖中可以看出,在曲線的兩端,sigmod函式導數幾乎為0,也就是δ(

l+1)

中的f′(

z(l)

) 幾乎為0,所以導致權重更新得到的值很小,導致網路學習很慢。

1.2. cross-entropy cost function

對於上面提到的問題,如果能讓δ(

l+1)

中的f′

(⋅) 消失,那麼w和

b 的更新程度將會增大,網路學習速度就會提示。而cross-entropy函式正好可以實現這樣的期盼。 j(

w,b)

=−1n

∑i=1

n[yi

⋅ln(

h(w,

b)(x

))+(

1−yi

)⋅ln

(1−h

(w,b

)(x)

)]此時,對於cross-entropy代價函式,有 ∂j

∂w(l

)=∂j

∂h⋅∂

h∂z(

l)⋅∂

z(l)

w(l)

其中∂j

∂h=−

(yh−

1−y1

−h)=

−(y−

hh(1

−h))

,我們根據第二接的定義可知,對於最後一層輸出h=

a(l+

1),而∂h∂

z(l)

=f′(

z(l)

) ,當

f 為sigmod函式時,∂h

∂z(l

)=a(

l+1)

⋅(1−

a(l+

1)),而

z(l)

w(l)

=a(l

) ,那麼 ∂j

∂w(l

)=−(

y−a(

l+1)

)⋅a(

l)可以看到,由於沒有了f′

(⋅) 項,w 和

b的更新將會比之前的quadratic函式快。

然而對於非最後一層的w 和

b,其殘差項 δ(

l)=δ

(l+1

)⋅w(

l)⋅f

′(z(

l−1)

) 也會隨著bp演算法向前傳播而迅速趨近於0,導致底層引數更新慢。下圖是基於quadratic cost和cross-entropy cost函式在mnist上執行後得到的結果比較。

可以看出,cross-entropy函式收斂速度快於quadratic cost函式。

2.引數初始化

對於初始的

w 和

b,通常都是有標準正態分佈隨機產生,例如第

l 層網路有n(

l)個神經元,那麼其對應到第l+

1 層第

k 個神經元,有 z(

l+1)

k=∑i

=1n(

l)w(

l+1)

k,i⋅

a(l+

1)i假設輸入a(

l+1)

i 都為1,那麼由於n(

l)個w(l

+1)k

,i服從標準正態分佈,因此z(

l+1)

k∼n(

0,n(

l)) 的正態分佈,其分布如下:

其中藍色是標準正態分佈,紅色是n(0,100)的正態分佈,可以看到,當n(

l)=100

時,z(

l+1)

有很大概率落到值很大的地方,對於到之前的sigmod函式就可看到落在了梯度很小幾乎為0的地方概率很大。而我們常用的網路n(

l)遠遠大於100,那麼f′

(z) 等於0的概率就更大,因此我們要對

w 的初始化做一些限制,使得z服從標準正態分佈。我們在產生w和

b 時使其服從n(

0,1n

(l)√

)的正態分佈,最後z(

l+1)

k∼n(

0,1)

,梯度比之前遠遠要大。

下圖是利用隨機初始化和服從n(

0,1n

(l)√

) 產生的結果對比

可以看出,改善權重更新後,網路更新速度得以提公升,結果也更好。

3.relu啟用函式

因為之前的啟用函式在函式兩端梯度幾乎為0,所以如果能換其他函式使得其在輸入很大的情況下梯度不會非常小,那麼網路收斂速度就不會受太大影響。relu啟用函式就具備這樣的性質,relu函式為 z=

max(

0,z)

下圖是三種啟用函式的對比

可以看出,在橫軸大於5時,sigmod和tanh函式梯度幾乎為零,但是relu函式梯度不變一直為1.

4.momentum-based gradient descent(動量梯度下降)

該方法出發點為,既然梯度每次都會下降,拿我們對其在其下降方向上對下降程度進行累加,如果每次下降方向相同,那麼下降速度會越來越快。有 w=

w+v

v=μ⋅

v−α⋅

∂j∂w

這樣,每次下降都會考慮到上次下降的程度(由

μ 控制),這樣梯度會沿著下降最快的方向行進。下圖是利用動量梯度下降和原始梯度下降的對比效果。

python專案 功能

函式隨機初始化函式

reset_qinit()

cross-entropy代價函式

backppg_cs()

momentum-based gradient decent

在呼叫trainnet()時新增第二個引數」mo」以及最後一行輸入」-p x」設定活躍神經元的比例

參考 [1] michael nielsen

神經網路簡介 多層神經網路

如上圖所示,該神經網路有三層。我們標記第一層 也就是輸入層 為a 1 第一層與第二層連線權重為w 1 然後第一層輸入與第一層權重的線性和為z 1 第一層神經元個數為n 1 並依次標記剩餘網路層。可以看出,存在 z l j i 1 n l a l i w l i,j a l w l j a l 1 f...

神經網路加速指南

分析各步驟耗時 1 cpu上的操作耗時 嘗試將操作放在gpu上進行,如np.argmax的操作 2 cpu 耗時 嘗試減少傳輸tensor的大小 3 資料預處理耗時 1 resample操作嘗試放到gpu上處理?2 先crop後resample?4 呼叫不同的包耗時不同 如scipy skimage...

神經網路加速理論

1 gpu計算神經網路加速原理 2 脈動陣列計算神經網路原理 3 谷歌tpu架構 4 脈動陣列 參考文獻 gpu實現神經網路加速優化的關鍵方式是並行化與向量化,一種最常見的gpu加速神經網路的模式為通用矩陣相乘 general matrix multiply 即將各類神經網路核心計算展開為矩陣計算的...