参考自资料,戳此处
J(W,b;x,y)=12||hW,b(x)−y||2
符号说明:
lSlL=神经网络的某一层=第l层神经元的数目=神经网络的总层数
如下图中:
S1=2;SL=S3=2
推导之前先列出几个用到的等式:
zlj=∑k=1Sl−1f(zl−1k)⋅Wl−1jk=f(zl−11)⋅Wl−1j1+f(zl−12)⋅Wl−1j2+⋯+f(zl−1Sl−1)⋅Wl−1jSl−1⋯⋯⋯(1)=al−11⋅Wl−1j1+al−12⋅Wl−1j2+⋯+al−1Sl−1⋅Wl−1jSl−1⋯⋯⋯⋯⋯(2)
例如:
z21=∑k=13f(z1k)⋅W11k=a11⋅W111+a12⋅W112+a13⋅W113
h(xi)=aLi=f(zLi);zli=∑j=1S(l−1)Wl−1ij⋅al−1j⋯⋯⋯⋯(3)
定义:δli=∂J∂zli;这只是定义的一个称之为“残差”的中间变量
推导:
公式一:∂J∂Wlij=δl+1i⋅alj
∂J∂Wlij=∑k=1Sl+1∂J∂zl+1k⋅∂zl+1k∂Wlij=∂J∂zl+1i⋅∂zl+1i∂Wlij⋯⋯其中只有当k等于i时,∂zl+1i∂Wlij才不为零=δl+1i⋅∂zl+1i∂Wlij=δl+1i⋅∂∂Wlij[al1Wli1+al2Wli2+⋯+al1WliSl]⋯⋯红色部分由(2)可知=δl+1i⋅alj⋯⋯观察可知,当al?Wlij等于上面红色部分中的某一项时,问号处刚好为j,注意观察角标
矢量化形式为:∂J∂Wl=δl+1⋅(al)T怎么来的?看下面例子
由上面的网络图可知:
∂JW211=δ31a21;∂JW212=δ31a22;∂JW221=δ32a21;∂JW222=δ32a22;⟹∂JW2=[δ31δ32]⋅[a21a22]T=[δ31δ32]⋅[a21a22]=[δ31a21δ32a21δ31a22δ32a22]=δl+1⋅(al)T
公式二:δLi=−[yi−aLi]⋅f′(zLi)
δLi=∂J∂zLi=∂∂zLi⋅[12⋅∑k=1SL(yk−h(x)k)2]=∂∂zLi⋅[12⋅∑k=1SL(yk−f(zLk))2]⋯⋯红色部分由(3)可知=∂∂zLi⋅12⋅{[y1−f(zL1)]2+[y2−f(zL2)]2+⋯+[yi−f(zLi)]2+⋯+[ySL−f(zLSL)]2}=−[yi−f(zLi)]⋅∂f(zLi)∂zLi⋯⋯⋯因为上面式子中只有红色项含有zLi这一因子,所以其他项对zLi求导均为0=−[yi−f(zLi)]⋅f′(zLi)=−[yi−aLi]⋅f′(zLi)⋯⋯红色部分由(3)可知
矢量化形式:δL=−[y−aL]⋅f′(zL)
这个表达式是根据一个特定的代价函数推导出来的,更为一般的形式如下:(另,本文所有的公式推导均不依赖任何具体的代价函数)
δLi=∂J∂zLi=∂J∂aLi⋅∂aLi∂zLi=∂J∂aLi⋅∂f(zLi)∂zLi=∂J∂aLi⋅f′(zLi)
例如对于代价函数
J(Θ)=−1m∑i=1m∑k=1K[y(i)klog((hΘ(x(i)))k)+(1−y(i)k)log(1−(hΘ(x(i)))k)]+λ2m∑l=1L−1∑i=1sl∑j=1sl+1(Θ(l)j,i)2
求导时只考虑一个训练数据即可即m=1,且regular term对aLi求导均为0
δLi=∂J∂aLi⋅f′(zLi)=∂∂aLi−∑k=1SL[yk⋅log(h(x)k)+(1−yk)⋅log(1−h(x)k)]⋅f′(zLi)=−∑k=1SL∂∂aLi[yk⋅log(aLk)+(1−yk)⋅log(1−aLk)]⋅f′(zLi)=−∑k=1SL[yk⋅1aLk⋅∂aLk∂aLi+(1−yk)⋅−11−aLk⋅∂aLk∂aLi]⋅f′(zLi)⋯⋯此处的log就是ln,即loge=lne=1=−[yi⋅1aLi⋅1+(1−yi)⋅−11−aLi⋅1]⋅f′(zLi)⋯⋯当k等于i时,∂aLk∂aLi=1,其他情况为0=[−yiaLi+1−yi1−aLi]⋅[aLi⋅(1−aLi)]=aLi−yi⋯⋯这就是coursera中AngdrewNg直接给出来的公式
公式三:δl=(Wl)Tδl+1.∗f′(zl)
δL−1i=∂J∂zL−1i=∂J∂zL1⋅∂zL1∂zL−1i+∂J∂zL2⋅∂zL2∂zL−1i+⋯+∂J∂zLSL⋅∂zLSL∂zL−1i=∑k=1SL∂J∂zLk⋅∂zLk∂zL−1i=∑k=1SLδLk⋅∂∂zL−1i∑j=1S(L−1)f(zL−1j)WL−1kj⋯⋯⋯红色部分是由zLk展开而来=∑k=1SLδLk⋅WL−1ki⋅f′(zL−1i)⋯⋯注意观察角标,之后当j等于i的时候,f′(zL−1j)才不为0,所以其他项也就都没了
把L−1替换为l,L替换为l+1即:δli=∑k=1Sl+1δl+1k⋅Wlki⋅f′(zli)⋯从表达式可知,要求第l层残差,必须先求l+1层残差,所以称为反向传播
矢量化形式为:δl=(Wl)Tδl+1.∗f′(zl)⋯⋯怎么来的?像公式一中一样,举个例子就明白了
公式四:∂J∂bli=δl+1i
注意:敲黑板!!!
在Michael Nielsen 的笔记NeuralNetworkandDeepLearning中,∂J∂bli=δli,到底哪个对呢?当然是都对,只是在定义参数时候用的角标指代不同。在Michael Nielsen 笔记中Wlij指的是第l−1层的第j个神经元指向第l层的第i个神经元之间的权重,当然bli也就指的是第l−l到第l层之间的偏置,所以它定义了zl=wlal−1+bl
而
在其它一些地方包括此处,Wlij指的是第l层第j个神经元指向第l+1层的第i个神经元之间的权重,bli同理,所以定义了zl+1=wlal+bl
先证明第一种:
∂J∂bli=∂J∂zl1⋅∂zl1∂bli+∂J∂zl2⋅∂zl2∂bli+⋯+∂J∂zlSl⋅∂zlSl∂bli=δl1⋅∂zl1∂bli+δl2⋅∂zl2∂bli+⋯+δli⋅∂zli∂bli+⋯+δlSl⋅∂zlSl∂bli=δl1⋅0+δl2⋅0+⋯+δli⋅1+⋯+δlSl⋅0⋯⋯由zl=Wla(l−1)+bl可知=δli
第二种
∂J∂bli=∂J∂zl+11⋅∂zl+11∂bli+∂J∂zl+12⋅∂zl+12∂bli+⋯+∂J∂zl+1Sl⋅∂zl+1Sl∂bli=δl+11⋅∂zl+11∂bli+δl+12⋅∂zl+12∂bli+⋯+δl+1i⋅∂zl+1i∂bli+⋯+δl+1Sl⋅∂zl+1Sl∂bli=δl+11⋅0+δl+12⋅0+⋯+δl+1i⋅1+⋯+δl+1Sl⋅0⋯⋯由zl+1=Wlal+bl可知=δl+1i
公式五:f′(z)=f(z)⋅(1−f(z))
f(z)⟹=11+e−z⟹f(z)⋅e−z=1−f(z)f′(z)=e−z(1+e−z)2=f2(z)⋅e−z=f(z)⋅(1−f(z))