基於多層感知機的反向傳播算法推導

機器學習課的作業,由於latex的公式編輯我很不熟悉,很多公式都沒有編輯好,不過先發出來算了。後續我可能還會更新基於卷積神經網絡的反向傳播算法推導。

  1. 前饋神經網絡的反向傳播推導

定義如下記號描述網絡:

LL:神經網絡的層數

nln^{l}:表示第ll層神經元的個數

fl()f_{l}(): 第ll層神經元激活函數

W(l)Rnl×nl1W^{\left( l \right)} \in R^{n^{l} \times n^{l - 1}}:表示第l1l - 1層到第ll層的權重矩陣

b(l)Rnlb^{(l)} \in R^{n^{l}}:表示第l1l - 1層到第ll層的偏置

z(l)Rnlz^{(l)} \in R^{n^{l}}:表示第ll層的神經元狀態

a(l)Rnla^{(l)} \in R^{n^{l}}:表示第ll層的神經元活性值

前饋神經網絡通過下面公式進行信息傳播:

z(l)=W(l)a(l1)+b(l) z^{\left( l \right)} = W^{\left( l \right)} \bullet a^{\left( l - 1 \right)} + b^{\left( l \right)}

a(l)=fl(z(l)) a^{\left( l \right)} = f_{l}\left( z^{\left( l \right)} \right)

公式也可以寫成:

z(l)=W(l)fl(z(l1))+b(l) z^{\left( l \right)} = W^{\left( l \right)} \cdot f_{l}\left( z^{\left( l - 1 \right)} \right) + b^{\left( l \right)}

給定一組樣本(X(i),y(i)),1iN(X(i),y(i)),1 \leq i \leq N,前饋神經網絡的輸出f(XW,b)f(X|W,b)目標函數爲:
J(W,b)=i=1NL(y(i),f(X(i)W,b))+12λWF2=i=1N(W,b;X(i),y(i))+12λWF2 \begin{matrix} J(W,b) & = \sum_{i = 1}^{N}{L(y^{(i)},f(X^{(i)}|W,b)) + \frac{1}{2}\lambda||W||_{F}^{2}} \\ & = \sum_{i = 1}^{N}{(W,b;X(i),y^{\left( i \right)}) + \frac{1}{2}\lambda||W||_{F}^{2}} \\ \end{matrix}

這裏的WWbb包含了每一層的權重矩陣和偏置向量,WF2=l=1Lj=1nl+1i=1nlWij(l)||W||_{F}^{2} = \sum_{l = 1}^{L}{\sum_{j = 1}^{n^{l + 1}}{\sum_{i = 1}^{n^{l}}W_{\text{ij}}^{\left( l \right)}}}

如果使用梯度下降來最小化目標函數,使用如下方法更新參數:

W(l)=W(l)αJ(W,b)W(l),=W(l)αi=1N(J(W,b;X(i),y(i))W(l))λWb(l)=b(l)αJ(W,b)b(l),=b(l)αi=1N(J(W,b;X(i),y(i))b(l)) \begin{matrix} W^{(l)} & = W^{(l)} - \alpha\frac{\partial J(W,b)}{\partial W^{(l)}}, \\ & = W^{(l)} - \alpha\sum_{i = 1}^{N}{(\frac{J(W,b;X^{(i)},y^{(i)})}{\partial W^{(l)}}) - \lambda W} \\ b^{(l)} & = b^{(l)} - \alpha\frac{\partial J(W,b)}{\partial b^{(l)}}, \\ & = b^{(l)} - \alpha\sum_{i = 1}^{N}{(\frac{J(W,b;X^{(i)},y^{(i)})}{\partial b^{(l)}})} \\ \end{matrix}

其中λ\lambda是參數更新率。

J(W,b;X,y)Wij(l)=tr((J(W,b;X,y)z(l))Tz(l)Wij(l)) \frac{\partial J\left( W,b;X,y \right)}{\partial W_{\text{ij}}^{\left( l \right)}} = tr((\frac{J\left( W,b;X,y \right)}{\partial z^{\left( l \right)}})^{T}\frac{\partial z^{\left( l \right)}}{\partial W_{\text{ij}}^{\left( l \right)}})

對於第ll層,定義一個誤差項δ(l)=J(W,b;X,y)z(l)Rn(l)\delta^{(l)} = \frac{J(W,b;X,y)}{\partial z^{(l)}} \in R^{n^{(l)}}是目前目標函數關於第l層的神經元z(l)z^{(l)}的偏導數。δ(l)\delta^{(l)}也反映了最終的輸出對第l層神經元對最終誤差的敏感程度。
J(W,b;X,y)W(l)=δi(l)(aj(l1))TJ(W,b;X,y)b(l)=δi(l) \begin{matrix} \frac{\partial J\left( W,b;X,y \right)}{\partial W^{\left( l \right)}} & = \delta_{i}^{\left( l \right)}(a_{j}^{\left( l - 1 \right)})^{T} \\ \frac{\partial J\left( W,b;X,y \right)}{\partial b^{\left( l \right)}} & = \delta_{i}^{\left( l \right)} \\ \end{matrix}

現在來看第l層的誤差項δ(l)\delta^{(l)}

δ(l)J(W,b;X,y)z(l)=a(l)z(l)z(l+1)a(l)J(W,b;X,y)z(l+1)=diag(fl(z(l)))(W(l+1))Tδ(l+1)=fl(z(l))((W(l+1))Tδ(l+1)) \begin{matrix} \delta^{(l)} & \triangleq \frac{J(W,b;X,y)}{\partial z^{(l)}} \\ & = \frac{\partial a^{(l)}}{\partial z^{(l)}} \cdot \frac{\partial z^{(l + 1)}}{\partial a^{(l)}} \cdot \frac{J(W,b;X,y)}{\partial z^{(l + 1)}} \\ & = diag(f_{l}^{'}(z^{(l)})) \cdot (W^{(l + 1)})^{T} \cdot \delta^{(l + 1)} \\ & = f_{l}^{'}(z^{(l)}) \odot ((W^{(l + 1)})^{T}\delta^{(l + 1)}) \\ \end{matrix}

\odot是向量點積運算符,表示每個元素相乘。

因此,前饋神經網絡的訓練過程可以分爲以下步驟:

Forward pass中計算每一層的狀態和激活值,直到最後一層,

Backward pass中計算每一層的誤差,計算每一層參數的偏導數,並更新參數。

本篇博客絕大部分參考了這個博客,大家可以去他的原博客看,十分感謝這位博主

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章