您的位置:首页 > 理论基础 > 计算机网络

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

2017-10-14 15:22 621 查看
从这一节开始,将介绍神经网络的相关内容。

博客不以介绍基本概念为主,而是注重一些浅显的推到和证明过程,以帮助理解。

如果你对神经网络一窍不通,你应该去看神经网络与深度学习

该博客可以看做是对于该文章的摘要。

概念图



上述图片显示了神经网络的数据流动。

其中的每一个圆圈表示一个神经元。

一般对于神经元的描述如下:

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



用公式来表示就是:

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

即x为输入,w为权重,b是一个实数,代表偏置,σ(x)是从输入到输出的映射,a为对应的输出。

如果你阅读过前面机器学习的内容机器学习(二):逻辑回归或者机器学习(四):损失函数,就知道了可以使用跃阶函数和sigmoid函数作为判断输出值的标准,并会明白一般我们喜欢使用sigmoid函数。

同样的,一般来说,神经网络也采用sigmoid函数作为从输入到输出的决定标准。

代价函数

义同损失函数,我们需要一个标准来优化神经网络。

神经网络的代价函数如下:

C(w,b)=12n∑x||y−a||2

y是对应于x的label,a是对应于x的神经网络输出值。

a是用过一系列的矩阵相乘,和sigmoid函数计算出来的。

目标是使得C(w,b)最小,其中w,b是参数变量,参考前一篇博客机器学习(三):梯度下降法,我们将使用梯度下降方法。

若能得到∂C∂w和∂C∂b,就能得到梯度下降的跟新规则:

w′k=wk−η∂C∂wkb′l=bl−η∂C∂bl

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

反向传播(backpropagation)

在介绍这一节前,将详细规定一下各参数。

一个神经网络中的所有参数如下:



从l−1层的第i个神经元到第l层的第j个神经元的权重是wlji。

则第l层的的第j个神经元的输出为

alj=σ(∑i=1kwljial−1i+blj)

为了简洁,可以使用矩阵的表示形式:

al=σ(wlal−1+bl).

同时引入一个中间变量:

zl≡wlal−1+bl

zl被称为带权输入。

下面将开始反向传播中梯度的推导。

梯度推导

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

δlj=∂C∂zlj

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

公式1

δLj=∂C∂zLj=∂C∂aLj∂aLj∂zLj=∂C∂aLjσ′(zLj)

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

公式2

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

δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zLj

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

δlj=∑kwl+1kjδl+1kσ′(zlj)

公式3

因为zl≡wlal−1+bl,因此可以很容易得到:

∂C∂blj=δlj

同理可得:

公式4

∂C∂wljk=al−1kδlj

到最后根据公式3和公式4,终于可以得到梯度的公式了。

因为梯度的推到是从后往前,因此称为反向传播。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息