手撕反向传播算法

最近找工作需要,因此看看梯度下降法和反向传播算法,顺手来个手撕笔记。

首先来个图:

图1. 简单的神经网络

好吧,定义一下这个图
其中:

  • a_{j}^{l}表示第l层第j个输出
  • z_{j}^{l}表示第l层第j个输入
  • z_{j}^{l}a_{j}^{l}中间的竖线表示激活函数,用\sigma(z)来表示
  • w_{jk}^{l}表示第l层第j个神经元与l-1层第k个神经元的权重
  • b_{j}^{l}表示第l层第j个神经元的偏置
  • 1表示的当然是数字1

前向传播

有了以上定义后,可以描述前向传递过程。前向传播公式描述:
z_{j}^{l+1}=\Sigma_{k}w_{jk}^{l+1}a_{k}^{l}+b_{j}^{l+1}

a_{j}^{l+1}=\sigma(z_{j}^{l+1})
这个公式应该特别好理解,直观意义就是上一层的每个输出乘以对应权重得到下一层输入,然后由激活函数进行非线性变换,得到下一层的输出。前向传播过程如图2所示:

图2. 前向传播过程

反向传播

前向传播的过程比较简单,一般难的是在后面反向传播和梯度更新的部分。
1. 输出层的梯度更新过程
首先看输出层的传播过程,图3展示了输出层的传播过程:

图3. 输出层的反向传播

定义:
C=\Sigma_{j}{c_j}

\delta_{j}^{L}=\frac{\partial{C}}{\partial{c_j}}\frac{\mathrm{d}{c_j}}{\mathrm{d}{a_j^L}}\frac{\mathrm{d}{a_j^L}}{\mathrm{d}{z_j^L}}=\frac{\partial{C}}{\partial{z_j^L}}

  • C表示损失函数(总误差),为各输出误差之和
  • L表示神经网络的最大层数,即输出层
  • \delta_{j}^{L}表示反向传播到第L层第j个神经元的误差(其位置与z_{j}^{L}相同,即在竖线前)

可看到\frac{\mathrm{d}{a_j^L}}{\mathrm{d}{z_j^L}}部分实际就是对激活函数求导,因此可以将其记作\sigma'(z_j^L)
这部分应该比较好理解了,试着求最后一层(第L层)的某个权重梯度和偏置梯度,观察图3可得:
\frac{\partial{C}}{\partial{w_{jk}^L}}=\frac{\partial{C}}{\partial{c_j}}\frac{\mathrm{d}{c_j}}{\mathrm{d}{a_j^L}}\sigma'(z_j^L)\frac{\partial{z_j^L}}{\partial{w_{jk}^L}}=\delta_{j}^{L}\frac{\partial{z_j^L}}{\partial{w_{jk}^L}}
显然:
\frac{\partial{z_j^L}}{\partial{w_{jk}^L}}=a_{j}^{L-1}
于是:
\frac{\partial{C}}{\partial{w_{jk}^L}}=\delta_{j}^{L}a_{j}^{L-1}
同样地:
\frac{\partial{C}}{\partial{b_{j}^L}}=\frac{\partial{C}}{\partial{c_j}}\frac{\mathrm{d}{c_j}}{\mathrm{d}{a_j^L}}\sigma'(z_j^L)\frac{\partial{z_j^L}}{\partial{b_{j}^L}}=\delta_{j}^{L}\frac{\partial{z_j^L}}{\partial{b_{j}^L}}=\delta_{j}^{L}
这样,输出层的权重更新和偏置的梯度都求出来了,应用下面两公式来进行更新即可,其中\eta表示学习率。
w^+=w-\eta\frac{\partial{C}}{\partial{w_{jk}^L}}

b^+=b-\eta\frac{\partial{C}}{\partial{b_{j}^L}}
2. 任意层的梯度更新过程
经过了输出层的折腾后,相信任意层的就不远了,用一句话说,把上面\frac{\partial{C}}{\partial{w_{jk}^L}}\frac{\partial{C}}{\partial{b_{j}^L}}中的L换成l就是任意层的权重和偏置的更新方法。不信?下面来推导。

图4. 任意层的反向传播

现在来看任意第l层的情况,假设第l层就和输出层相连,如图4的情况,首先来求\delta_{j}^{l},简化来看,输出层就两个神经元,于是有:

\delta_{j}^{l}=(\frac{\partial{C}}{\partial{c_j}}\frac{\mathrm{d}{c_j}}{\mathrm{d}{a_j^{l+1}}}\sigma'(z_j^{l+1})\frac{\partial{z_j^{l+1}}}{\partial{a_{j}^{l}}}+\frac{\partial{C}}{\partial{c_{j+1}}}\frac{\mathrm{d}{c_{j+1}}}{\mathrm{d}{a_{j+1}^{l+1}}}\sigma'(z_{j+1}^{l+1})\frac{\partial{z_{j+1}^{l+1}}}{\partial{a_{j}^{l}}})\sigma'(z_{j}^{l})
实际上,折腾一大圈,这个不就是总代价Cz_{j}^{l}就梯度吗?
即:
\delta_{j}^{l}=\frac{\partial{C}}{\partial{z_{j}^{l}}}
好吧,这是两个神经元的情况,那如果是多个神经元咋办?其实你观察下那条很长的式子就可以得到:
\delta_{j}^{l}=\sigma'(z_{j}^{l})\Sigma_{j}(\frac{\partial{C}}{\partial{c_j}}\frac{\mathrm{d}{c_j}}{\mathrm{d}{a_j^{l+1}}}\sigma'(z_j^{l+1})\frac{\partial{z_j^{l+1}}}{\partial{a_{j}^{l}}})
这还是一个套路嘛,即还是:
\delta_{j}^{l}=\frac{\partial{C}}{\partial{z_{j}^{l}}}
既然第l层的误差都有了,权重和偏置的梯度是不是就有了?
\frac{\partial{C}}{\partial{w_{jk}^l}}=\delta_{j}^{l}\frac{\partial{z_j^l}}{\partial{w_{jk}^l}}=\delta_{j}^{l}a_{j}^{l-1}
同样地:
\frac{\partial{C}}{\partial{b_{j}^l}}=\delta_{j}^{l}\frac{\partial{z_j^l}}{\partial{b_{j}^l}}=\delta_{j}^{l}
有人会觉得这是因为第l层和输出层就隔着,所以才能得到这样的结论,其实不管第l层在哪,这个结论都是一样的,读者可以自行验证啦。

权重更新同样用梯度下降法更新即可:
w^+=w-\eta\frac{\partial{C}}{\partial{w_{jk}^l}}

b^+=b-\eta\frac{\partial{C}}{\partial{b_{j}^l}}
3. 误差传递的层间关系
先整理一下上面重要的式子
反向传递到任意层任意一个神经元的误差公式:
\delta_{j}^{l}=\frac{\partial{C}}{\partial{z_{j}^{l}}}
损失函数对任意一个权重和偏置的梯度:
\frac{\partial{C}}{\partial{w_{jk}^l}}=\delta_{j}^{l}a_{j}^{l-1}

\frac{\partial{C}}{\partial{b_{j}^l}}=\delta_{j}^{l}
有人就会想,第l层的误差得一层层从后往前求梯度,这么麻烦,如果我知道l+1层的误差的话,是否会容易些呢?于是便来探讨\delta_{j}^{l}\delta_{j}^{l+1}之间的关系。
首先要引入l+1层:
\delta_{j}^{l}=\frac{\partial{C}}{\partial{z_{j}^{l}}}=\Sigma_{k}\frac{\partial{C}}{\partial{z_{k}^{l+1}}}\frac{\partial{z_{k}^{l+1}}}{\partial{z_{j}^{l}}}=\Sigma_{k}\delta_{k}^{l+1}\frac{\partial{z_{k}^{l+1}}}{\partial{z_{j}^{l}}}
注意:
z_{k}^{l+1}=\Sigma_{j}w_{kj}^{l+1}a_{j}^{l}+b_k^{l+1}=\Sigma_{j}w_{kj}^{l+1}\sigma(z_{j}^{l})+b_k^{l+1}
因此:
\frac{\partial{z_{k}^{l+1}}}{\partial{z_{j}^{l}}}=w_{kj}^{l+1}\sigma'(z_{j}^{l})
故误差传播的层间关系式为:
\delta_{j}^{l}=\sigma'(z_{j}^{l})\Sigma_{k}\delta_{k}^{l+1}w_{kj}^{l+1}
必须注意的是,这里是w_{kj}^{l+1}而不是w_{jk}^{l+1},如果不清楚的话看看图4或者自己画个图看看就明白了。
所以最后的式子便是误差传播的层间关系式,整理前面3个式子以及层间关系式,便可以得到描述反向传播的4个重要式子,也就图5的4个式子:

图5. 反向传播重要公式

到这里,反向传播算法基本就结束了。如果有写的不好,不对的地方请猛喷!哈哈哈!

参考文献:
  1. https://blog.csdn.net/mao_xiao_feng/article/details/53048213
  2. https://www.jianshu.com/p/964345dddb70
  3. https://blog.csdn.net/xierhacker/article/details/53431207
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 虽然生命起源还是个谜,但地球生物通过进化机制从简单到复杂,直到产生出人类,这一过程已被更多的人所接受,也可以用化石...
    吴彦鹏阅读 1,218评论 0 0
  • 【每日清单】476/500,2018-3.3打卡,闷热 【三件事】 1. []【美博会一抽奖】原型制作20% 2....
    伽蓝214阅读 220评论 0 0
  • 整个窗外下午骄阳似火,来往的车辆似乎也按耐不住热的烦躁的性子来来回回吱吱哇哇的叫着。窗内的少年们却因为那场失败的篮...
    吟水莱阅读 491评论 0 1