神經(jīng)網(wǎng)絡(luò)的反向傳播算法的使用

參數(shù)展開

在神經(jīng)網(wǎng)絡(luò)中,我們有一些參數(shù)矩陣,例如:
\Theta^{(1)},\Theta^{(2)},\Theta^{(3)}...
D^{(1)},D^{(2)},D^{(3)}...

有時為了使用方便,需要將這些矩陣統(tǒng)一到一個向量中去

thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]
deltaVector = [ D1(:); D2(:); D3(:) ]

這樣就合并了三個矩陣,
假如\Theta^{(1)} 是一個5 \times 6的矩陣,\Theta^{(2)}是一個5 \times 6的矩陣,\Theta^{(3)}是一個1 \times 6的矩陣
則 thetaVector 是一個66 \times 1的矩陣

當要使用時,同樣要將這一個向量,拆分成三個矩陣:

Theta1 = reshape(thetaVector(1:30),5,6)
Theta2 = reshape(thetaVector(31:60),5,6)
Theta3 = reshape(thetaVector(61:66),1,6)

隨機初始化

在邏輯回歸里,使用梯度下降算法時,需要初始化\Theta,這里可以設(shè)置成零向量n\times 1,元素全為0的向量。
但是在神經(jīng)網(wǎng)絡(luò)里,這樣做不行。

舉例說明,假設(shè)\Theta_{i,j}^{(l)}=0
a_1^{(2)} = g(\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)}x_3)=g(0)
a_2^{(2)} = g(\theta_{20}^{(1)}x_0+\theta_{21}^{(1)}x_1+\theta_{22}^{(1)}x_2+\theta_{23}^{(1)}x_3)=g(0)
...

這樣a_1^{(2)}=a_2^{(2)}=a_{s_l}^{(2)}

當反向傳播時\delta^{(l)}會發(fā)現(xiàn)每層的每個節(jié)點都是一樣的,這樣算法就會出現(xiàn)對稱問題。
因此初始化的時候要隨機一些初始值。初始化不同的隨機址會打破對稱問題。

\Theta_{i,j}^{(l)}內(nèi)每個值都隨機在[-\epsilon, \epsilon] 之間。(-\epsilon \leq \Theta_{i,j}^{(l)} \leq \epsilon

例如:
Theta1 = rand(10,11) * (2init_epsilon) - init_epsilon;
Theta2 = rand(1,11) * (2
init_epsilon) - init_epsilon;

rand(x,y)是一個初始化一個x \times y 維的,其內(nèi)之在0, 1之間的隨機值。

梯度檢驗(Gradient Checking)

在使用反向傳播算法時,因為反向傳播有很多復(fù)雜的細節(jié),這些細節(jié)會導(dǎo)致一些bug,雖然代價函數(shù)的值在減小,但是可能的結(jié)果和實際的還是有很大誤差。
梯度檢驗可以減少這種錯誤的概率。

在數(shù)學上
\frac{\partial}{\partial \Theta} J(\Theta) \approx \frac{J(\Theta+\epsilon) + J(\Theta-\epsilon)}{2\epsilon}

PS:\epsilon這個和初始化隨機的參數(shù)不一樣

\epsilon 是一個很小的值,例如10^{-4}

對于多個\Theta

\frac{\partial}{\partial \Theta_j^{(l)}} J(\Theta) \approx \frac{J(\Theta_1,...,\Theta_j+\epsilon,...,\Theta_n) + J(\Theta_1,...,\Theta_j-\epsilon,...,\Theta_n)}{2\epsilon}

epsilon = 1e-4;
for i = 1:n,
  thetaPlus = theta;
  thetaPlus(i) += epsilon;
  thetaMinus = theta;
  thetaMinus(i) -= epsilon;
  gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon)
end;

將反向傳播計算的DVec和梯度校驗計算的gradApprox比較一下,兩者一致則說明算法沒有問題。但是在最終使用反向傳播取訓(xùn)練樣本集時,關(guān)掉梯度校驗,因為這個非常耗時。

隱藏層

每個隱藏層的單元數(shù)理論上越多準確度越好,但是實際上為了和計算成本平衡,需要選擇何時的隱藏層單元數(shù)量。一般隱藏層單元數(shù)目稍大于輸入層的特征值數(shù)。
隱藏層的數(shù)量越多,算法準確度越高,相應(yīng)的計算成本也會增高,一般來說1個隱藏層。如果有多個隱藏層,建議在每個隱藏層中使用相同數(shù)量的單元。

轉(zhuǎn)載自:
https://codeeper.com/2020/01/20/tech/machine_learning/neural_network_backpropagation.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容