DL-BP神经网络及其数学原理


引言

最近博主学习了Coursera上面Andrew Ng老师的机器学习课程。其中对BP神经网络有一定的介绍,但是在课程中老师略过了数学推到过程。经过博主在网络上的搜索,大部分的资料内容缺乏条理性,并且与Coursera上面的课程对应不起来,所以只能自己整理一下啦,在此与大家分享一下。

假设大家掌握以下内容:
1.了解什么是神经网络
2.了解什么是Fp(前向)神经网络
3.了解什么是sigmoid函数以及梯度下降方法
如果您对上述概念还很模糊的话,还请查阅相关资料学习一下,以上都是很简单的内容,学习上述基础内容并不会耗费您太多的时间。

Bp神经网络

首先我们来约定一些符号:
1.a表示每个神经单元的输出
2.Z表示每个神经单元的输入
3.g表示sigmoid函数
4.L表示神经层的数量
5.K表示输出层神经单元的数量
6.sl表示第l层神经元的数量
7.\(\theta\)表示各层之间的参数向量
我们可以将一个神经元理解成如下图所示的样子拥有输入、sigmoid函数和输出:

假设我们拥有一个如下图所示的简单神经网络:
其中Z11-a11表示这个神经元的输入是Z11,输出是a11,其中蕴含着\( g(Z_{11})=a_{11}\)
下面我们来思考损失函数,那么如何定义损失函数呢?我们知道输出层的输出即是我们预测出来的结果,通过与真正结果进行对比,很自然的就能得到损失函数,为了函数的连续性,我们这里取均方差,那么问题就转换为了求神经网络各层之间的权重,找到能够使损失函数最小的那个权重。损失函数如下: \[ L=\frac{1}{2}\sum_{i=0}^{K} (a^{(L)} - \vec{y})_i^2 \] 其中\(a^{(L)}\)表示输出层的出处向量,y向量则对应着当前这个训练数据的结果向量。为了使L最小化,我们可以使用随机梯度下降方法。使用随机梯度下降方法的话只需要我们求出L对参数的梯度即可,求梯度又可以转换为求L对\(\theta\)的偏导数问题,因此我们只需要求偏导数。由于ghost编辑公式十分繁琐,因此博主在线下使用LaTeX写完求解过程后,以下列图片的形式展示给大家:

显然我们可以看出每一项\(\delta^{(l)}\)依赖于他的后一项\(\delta^{(l+1)}\),这就是Bp(后向)神经网络的由来。输出层每个节点都会得到一个误差(即我们预测的与实际结果的误差),把误差作为输出层反向输入,这时候就像是输出层当输入层一样把误差往回传播,先得到输出层\(\delta\),然后将输出层\(\delta\)根据连接权重往隐层传输。

总结一下

当我们遇到Bp神经网络问题的时候,我们可以按照以下步骤来考虑问题:
1.令\(a^1=x^{(test)}\)
2.使用前向神经网络算法求出每一层的\(a^{(l)}\)
3.使用\(y^{(test)}\)计算\(\delta^{(L)}=a^{(L)}-y^{(test)}\)
4.根据公式\(\delta^{(l)}=(\theta^{(l)})^T\cdot \delta^{(l+1)}\cdot g^\prime(Z^{(l)})\)计算剩下的每一层的\(\delta\)
5.最后根据上一节得出的相应公式计算\(D^{(l)}\),并将其应用于随机梯度下降的方法中即可,迭代结束时得到的\(\theta\)即是我们最终训练出来的理想的模型的参数。


分享博文


评论博文


Last one :   TF-Windows10安装TensorFlow-GPU版

Next article :   MLps1-正规方程组和梯度下降的联系与不同