深度学习(一):神经网络和反向传播

从这一节开始,将介绍神经网络的相关内容。
博客不以介绍基本概念为主,而是注重一些浅显的推到和证明过程,以帮助理解。
如果你对神经网络一窍不通,你应该去看神经网络与深度学习
该博客可以看做是对于该文章的摘要。

概念图

神经网络数据流向图
上述图片显示了神经网络的数据流动。
其中的每一个圆圈表示一个神经元。
一般对于神经元的描述如下:

一个神经元有几个输入和一个输出,多个输入和其权重相乘后在相加,其和通过和一个权重比较来决定输出的值。

这里写图片描述
用公式来表示就是:

a=σ(wx+b),x=(x1,...,xn)T,w=(w1,...,wn)bR

即x为输入,w为权重,b是一个实数,代表偏置,σ(x) 是从输入到输出的映射,a为对应的输出。
如果你阅读过前面机器学习的内容机器学习(二):逻辑回归或者机器学习(四):损失函数,就知道了可以使用跃阶函数和sigmoid函数作为判断输出值的标准,并会明白一般我们喜欢使用sigmoid函数。
同样的,一般来说,神经网络也采用sigmoid函数作为从输入到输出的决定标准。

代价函数

义同损失函数,我们需要一个标准来优化神经网络。
神经网络的代价函数如下:

C(w,b)=12nx||ya||2

y是对应于x的label,a是对应于x的神经网络输出值。
a是用过一系列的矩阵相乘,和sigmoid函数计算出来的。
目标是使得C(w,b)最小,其中w,b是参数变量,参考前一篇博客机器学习(三):梯度下降法,我们将使用梯度下降方法。
若能得到CwCb ,就能得到梯度下降的跟新规则:
wk=wkηCwkbl=blηCbl

那么接下来的重点就是对于中间的结果,如何求解梯度了。

反向传播(backpropagation)

在介绍这一节前,将详细规定一下各参数。
一个神经网络中的所有参数如下:
神经网络的各参数描述
l1 层的第i个神经元到第l 层的第j个神经元的权重是wlji
则第l 层的的第j个神经元的输出为

alj=σ(i=1kwljial1i+blj)

为了简洁,可以使用矩阵的表示形式:
al=σ(wlal1+bl)
.
同时引入一个中间变量:
zlwlal1+bl

zl 被称为带权输入。
下面将开始反向传播中梯度的推导。

梯度推导

再推倒前,先引入一个中间结果,因为最后的形式会用到这个中间结果,即:

δlj=Czlj

该定义可以理解为第l 层的第j个神经元上的误差。

公式1

δLj=CzLj=CaLjaLjzLj=CaLjσ(zLj)

注意到这里的L ,他是最后一层神经元,即结果层。

公式2

根据公式1,可以求得最后一层的误差,那么知道知道了各层误差间的关系,就能求得所有层的误差项了。

δlj=Czlj=kCzl+1kzl+1kzLj

然后展开,因为知道z之间的前后关系(具体过程可能有点复杂,这里先不贴出详细的推到了),因此可以找出最后的化简结果:
δlj=kwl+1kjδl+1kσ(zlj)

公式3

因为zlwlal1+bl ,因此可以很容易得到:

Cblj=δlj

同理可得:

公式4

Cwljk=al1kδlj

到最后根据公式3和公式4,终于可以得到梯度的公式了。
因为梯度的推到是从后往前,因此称为反向传播。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章