:今天我们来学习反向传播算法。
:为什么你一脸严肃哦?
:咳咳,有吗……可能因为当初被 Backpropagation 这个词吓得不轻吧…… 反向传播算法是深度学习的核心之一,不过也没有很难,放轻松~
:你是说你还是说我
:来,我们先回忆一下,对多层神经网络,我们用梯度下降法去训练。之前已经学过如何计算输出节点的误差项,借助梯度下降算法,用误差项训练隐层到输出层的权重。
:隐层到输出层。我记得最简单的神经网络应该有 3 层——是不是还有输入层到隐层?
:没错。
:那该怎么求隐层节点对应的误差项呢?
:在神经网络里,输出节点的误差项,跟隐层的权重是成比例的。
:意思是误差项越大,隐层节点的权重也越大?
:可以这么理解。既然我们知道输出的误差项,就可以用它来「反向传播」,求出隐层的误差项,再用于求输入节点的权重。
:咦,那不是反过来了?先知道输出结果,再反推输入权重?
:对的,所以叫做「反向」呀。
比如,输出层 k 个节点对应的误差项是。隐层有 j 个节点,那么隐层节点到输出节点的 j 个误差项是:
:等等!先让我复习一下误差项是什么……
:嗯!误差项 δ 表示 ,。对比一下,看看有什么不同?
:隐层到输出层的误差 (y-y^) 变成了
:很棒!你发现了吧,成为了 wx + b 中的变量 x:
:啊,又要来算这个了……
:没关系,虽然看上去麻烦一些,但是跟正向传播的做法很类似,权重的更新为。
:每次都要来一遍,要死不少脑细胞啊……
:那我给你列个清单吧,每次照着做就好。
假设我们考虑最简单的神经网络:只有一个隐层节点,只有一个输出节点。用反向传播算法更新权重的算法如下:
:天!看上去好复杂。
:练习两次就能熟悉起来了,别担心。下一次我带你用 Python 实现反向传播算法。
Ref
Deep Learning Nanodegree Udacity - https://www.udacity.com/course/deep-learning-nanodegree-foundation--nd101
Yes you should understand backprop – Medium - https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b
CS231n Winter 2016 Lecture 4 Backpropagation, Neural Networks 1 - YouTube - https://www.youtube.com/watch?v=59Hbtz7XgjM
00 的 DeepLearning 笔记
领取专属 10元无门槛券
私享最新 技术干货