反向传播算法推导

Posted nowgood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向传播算法推导相关的知识,希望对你有一定的参考价值。

技术分享图片?
神经网络中权重 \\(w^{(l)}_{ij}\\) 的改变将影响到一个个下一层,到达输出层,最终影响代价函数
技术分享图片?

\\(\\color{red}{公式推导符号说明}\\)

符号 说明
\\(n_l\\) 网络层数
\\(y_j\\) 输出层第 \\(j\\) 类 label
\\(S_l\\) \\(l\\) 层神经元个数(不包括偏置)
\\(g(x)\\) 激励函数
\\(w^{(l)}_{ij}\\) \\(l\\) 层第 \\(j\\) 个单元与第 \\(l+1\\) 层第 \\(i\\) 个单元之间的链接参数
\\(b^{(l)}_i\\) \\(l+1\\) 层第 \\(i\\) 个单元的偏置
\\(z^{(l)}_i\\) \\(l\\) 层第 \\(i\\) 个单元的输入加权和(包含偏置)
\\(a^{(l)}_i\\) \\(l\\) 层第 \\(i\\) 个单元的激活值(输出值)
\\(\\delta^{(l)}_i\\) \\(l\\) 层第 \\(i\\) 个单元的局部梯度(或称为残差)

\\(\\color{red}{基本公式}\\)

\\[ \\begin{align*} z^{(l)}_i &= b^{(l-1)}_i + \\sum^{S_l}_{j=1}{w^{(l-1)}_{ij}a^{(l-1)}_i} \\tag{1} \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\quad \\ g(x) &= \\frac{1}{1 + e^{-x}} \\tag{2}\\ a^{(l)}_i &= g(z^{(l)}_i) \\tag{3} \\ J(\\theta) &= \\frac12{{\\sum^{S_l}_{j=1}\\big ({y_j - a^{(l)}_j}}}\\big)^2 \\tag{4}\\ \\delta^{(l)}_i &=\\frac{\\partial{J(\\theta)}}{\\partial{z^{(l)}_i}} \\tag{5} \\ \\ \\delta ^{ (n_{ l }) }_{ i }&=\\frac { \\partial { J(\\theta ) } }{ \\partial { z^{ (n_{ l }) }_{ i } } } \\\\ &=\\frac { 1 }{ 2 } \\frac { \\partial { } }{ \\partial { z^{ (n_{ l }) }_{ i } } } \\sum _{ j=1 }^{ S_{ n_l } } \\left( y_{ j }-a^{ (n_{ l }) }_{ j } \\right) ^{ 2 }\\\\ &=\\frac { 1 }{ 2 } \\frac { \\partial { } }{ \\partial { z^{ (n_{ l }) }_{ i } } } \\sum _{ j=1 }^{ S_{ n_l } } \\left( y_{ j }-g(z^{ (n_{ l }) }_{ j }) \\right) ^{ 2 }\\\\ &=\\frac { 1 }{ 2 } \\frac { \\partial { } }{ \\partial { z^{ (n_{ l }) }_{ i } } } \\left( y_{ i }-g(z^{ (n_{ l }) }_{ i }) \\right) ^{ 2 }\\\\ &=-\\left( y_{ i }-a^{ (n_{ l }) }_{ i } \\right) g\\prime (z^{ (n_{ l }) }_{ i })\\\\ \\\\delta ^{ (l) }_{ i }&=\\frac { \\partial { J(\\theta ) } }{ \\partial { z^{ (l) }_{ i } } } \\\\ &=\\sum _{ j=1 }^{ S_{ l+1 } } \\frac { \\partial { J(\\theta ) } }{ \\partial { z^{ (l+1) }_{ j } } } \\frac { \\partial { z^{ (l+1) }_{ j } } }{ \\partial { z^{ (l) }_{ i } } } \\\\ &=\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }\\frac { \\partial { z^{ (l+1) }_{ j } } }{ \\partial { z^{ (l) }_{ i } } } \\\\ &=\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }\\frac { \\partial { } }{ \\partial { z^{ (l) }_{ i } } } \\left( b^{ (l) }_{ i }+\\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }a^{ (l) }_{ k }) \\right) \\\\ &=\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }\\frac { \\partial { } }{ \\partial { z^{ (l) }_{ i } } } \\left( b^{ (l) }_{ i }+\\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ jk }g(z^{ (l) }_{ k }) \\right) \\\\ &=\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }\\frac { \\partial { } }{ \\partial { z^{ (l) }_{ i } } } \\left( w^{ (l) }_{ ji } g(z^{ (l) }_{ i }) \\right) \\&=\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }\\left( w^{ (l) }_{ ji }g\\prime (z^{ (l) }_{ i }) \\right) \\\\ &=g\\prime (z^{ (l) }_{ i })\\sum _{ j=1 }^{ S_{ l+1 } } \\delta ^{ (l) }_{ i }w^{ (l) }_{ ji }\\\\\\frac { \\partial { J(\\theta ) } }{ \\partial { w^{ (l) }_{ ij } } } &=\\frac { \\partial { J(\\theta ) } }{ \\partial { z^{ (l+1) }_{ i } } } \\frac { \\partial { z^{ (l+1) }_{ i } } }{ \\partial { w^{ (l) }_{ ij } } } \\\\ &=\\delta ^{ (l+1) }_{ i }\\frac { \\partial { z^{ (l+1) }_{ j } } }{ \\partial { w^{ (l) }_{ ij } } } \\\\ &=\\delta ^{ (l+1) }_{ i }\\frac { \\partial { } }{ \\partial { w^{ (l) }_{ ij } } } \\left( b^{ (l) }_{ i }+\\sum _{ k=1 }^{ S_{ l } } w^{ (l) }_{ ik }a^{ (l) }_{ k }) \\right) \\\\ &=\\delta ^{ (l+1) }_{ i }a^{ (l) }_{ j }\\\\frac { \\partial { J(\\theta ) } }{ \\partial { b^{ (l) }_{ i } } } &=\\delta ^{ (l+1) }_{ i } \\end{align*} \\]

以上是关于反向传播算法推导的主要内容,如果未能解决你的问题,请参考以下文章

反向传播算法推导

反向传播算法数学推导

如何理解神经网络里面的反向传播算法

经典反向传播算法公式详细推导

经典反向传播算法公式详细推导

卷积神经网络(CNN)反向传播算法公式详细推导