機器學習課的作業,由於latex的公式編輯我很不熟悉,很多公式都沒有編輯好,不過先發出來算了。後續我可能還會更新基於卷積神經網絡的反向傳播算法推導。
- 前饋神經網絡的反向傳播推導
定義如下記號描述網絡:
L:神經網絡的層數
nl:表示第l層神經元的個數
fl(): 第l層神經元激活函數
W(l)∈Rnl×nl−1:表示第l−1層到第l層的權重矩陣
b(l)∈Rnl:表示第l−1層到第l層的偏置
z(l)∈Rnl:表示第l層的神經元狀態
a(l)∈Rnl:表示第l層的神經元活性值
前饋神經網絡通過下面公式進行信息傳播:
z(l)=W(l)∙a(l−1)+b(l)
a(l)=fl(z(l))
公式也可以寫成:
z(l)=W(l)⋅fl(z(l−1))+b(l)
給定一組樣本(X(i),y(i)),1≤i≤N,前饋神經網絡的輸出f(X∣W,b)目標函數爲:
J(W,b)=∑i=1NL(y(i),f(X(i)∣W,b))+21λ∣∣W∣∣F2=∑i=1N(W,b;X(i),y(i))+21λ∣∣W∣∣F2
這裏的W和b包含了每一層的權重矩陣和偏置向量,∣∣W∣∣F2=∑l=1L∑j=1nl+1∑i=1nlWij(l)
如果使用梯度下降來最小化目標函數,使用如下方法更新參數:
W(l)b(l)=W(l)−α∂W(l)∂J(W,b),=W(l)−α∑i=1N(∂W(l)J(W,b;X(i),y(i)))−λW=b(l)−α∂b(l)∂J(W,b),=b(l)−α∑i=1N(∂b(l)J(W,b;X(i),y(i)))
其中λ是參數更新率。
∂Wij(l)∂J(W,b;X,y)=tr((∂z(l)J(W,b;X,y))T∂Wij(l)∂z(l))
對於第l層,定義一個誤差項δ(l)=∂z(l)J(W,b;X,y)∈Rn(l)是目前目標函數關於第l層的神經元z(l)的偏導數。δ(l)也反映了最終的輸出對第l層神經元對最終誤差的敏感程度。
∂W(l)∂J(W,b;X,y)∂b(l)∂J(W,b;X,y)=δi(l)(aj(l−1))T=δi(l)
現在來看第l層的誤差項δ(l)
δ(l)≜∂z(l)J(W,b;X,y)=∂z(l)∂a(l)⋅∂a(l)∂z(l+1)⋅∂z(l+1)J(W,b;X,y)=diag(fl′(z(l)))⋅(W(l+1))T⋅δ(l+1)=fl′(z(l))⊙((W(l+1))Tδ(l+1))
⊙是向量點積運算符,表示每個元素相乘。
因此,前饋神經網絡的訓練過程可以分爲以下步驟:
Forward pass中計算每一層的狀態和激活值,直到最後一層,
Backward pass中計算每一層的誤差,計算每一層參數的偏導數,並更新參數。
本篇博客絕大部分參考了這個博客,大家可以去他的原博客看,十分感謝這位博主。