1、前言

先简单的说下神经网络吧。

简单来说就是模拟大脑的神经元。

前端会有一大批数据输入,例如,前端输入了一张图像的所有像素点。

中间层会有成千上万个网络数据节点,我们可以称之为神经元。

一系列的神经元经过各种复杂运算。

输出端 输出预算结果

 

 

神经网络与反向传播算法_人工智能

 

举个例子,

前端输入了一张图像的所有像素点数据(数据来源可以通过摄像头获取),中间层

经过层层运算,最后输出 这张照片上面的是两只天鹅。

 

这就是神经网络宏观上面的解释。上面的例子就是图像识别上面的应用了。

 

那么我们来看下这背后的算法原理吧。

神经网络与反向传播算法_深度学习_02

 

2、原理

 

学习

我们来看下一个简单的神经网络模型吧:

神经网络与反向传播算法_人工智能_03

 

假设输入是3个数据,最后输出是两个数据,中间有4个神经元。

那么问题来了,我们中间的运算是如何展开的?怎么样才能确定我们的

运算公式是合理的呢?

这个时候,我们可以一开始随便设置我们的运算参数,然后输入数据,

看下输出结果如何?如果输出结果不满意?我们再改变一下运算的参数。

反复对比,总之,我们进过几万次运算,

修改了几万次参数。最终得到一个合理的参数。

这就是一个学习的过程了。

google 的 阿尔法狗,也正是基于深度学习的设计思想,设计出来了的。一开始的阿尔法狗参数

不太合理,但是经过学习,慢慢的完善,最终击败了所有棋手。

 

运算公式

好了,下面是需要一定的数学基础的人才能看懂的了,非作战人员请默默地关注下本公众号,然后可以关闭页面了神经网络与反向传播算法_深度学习_04神经网络与反向传播算法_深度学习_05神经网络与反向传播算法_人工智能_06。。。

作战人员请继续。。。

首先,我们看上面的三层结构的网络,输入层,中间层,输出层。

假设 

神经网络与反向传播算法_人工智能_07

为第 l  层的数据,注意,这里是向量形式的,也就是说

神经网络与反向传播算法_人工智能_08

 

那么,

神经网络与反向传播算法_神经网络_09

就是 l +1 层的数据了。对于

神经网络与反向传播算法_神经网络_09

 和 

神经网络与反向传播算法_人工智能_07

,我们定义运算规则为:

神经网络与反向传播算法_人工智能_12

神经网络与反向传播算法_神经网络_13

 

 

神经网络与反向传播算法_人工智能_14为sigmod函数。也就是说:

神经网络与反向传播算法_神经网络_15

 

其中神经网络与反向传播算法_深度学习_16神经网络与反向传播算法_深度学习_17

就是改层的运算参数了~~~~~~~~我们前面说什么来的?我们要找到合适的参数。

是的,神经网络整个过程中最终就是要求得

神经网络与反向传播算法_深度学习_16神经网络与反向传播算法_深度学习_17为何值时,神经网络的输出最为合理。

那么,我们就要问了,什么是合理?

我们不是最终有输出层吗?

假设我们手头上有一万张照片,我当做输入,最终会有一万个计算结果。

我们就拿这1万个计算结果和实际结果做对比,只要计算结果和实际结果相差越来越小,错误率越来越低,我们不就可以认为

神经网络与反向传播算法_深度学习_16神经网络与反向传播算法_深度学习_17是合理的了吗?

 

我们假设

 

神经网络与反向传播算法_神经网络_22是输入, 神经网络与反向传播算法_神经网络_23是实际结果。神经网络与反向传播算法_人工智能_24是计算结果,那么C为损失函数,于是我们有:

 

神经网络与反向传播算法_人工智能_25

 

其中,

神经网络与反向传播算法_神经网络_22表示输入的样本,

神经网络与反向传播算法_神经网络_23表示实际的分类,

神经网络与反向传播算法_人工智能_24表示预测的输出,

神经网络与反向传播算法_人工智能_29表示神经网络的最大层数。

对于上面的表达式,不熟悉的,请回顾下线性回归。

 

 

反向传播算法

这就是我们最核心的地方了,怎么求解出

神经网络与反向传播算法_深度学习_16神经网络与反向传播算法_深度学习_17呢?

我们需要用到一个反向传播算法。

下面是它的公式推导:

首先,将第

神经网络与反向传播算法_神经网络_32层第神经网络与反向传播算法_AI_33个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

神经网络与反向传播算法_神经网络_34

 

其中,z在上面定义了。

公式1(计算最后一层神经网络产生的错误):

 

神经网络与反向传播算法_神经网络_35

其中,

神经网络与反向传播算法_神经网络_36

表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。

我们有必要来看下

神经网络与反向传播算法_AI_37

到底是个什么东西:

事实上他就是C对a的偏导。

神经网络与反向传播算法_AI_38

公式1的推导过程如下,运用链式法则。

神经网络与反向传播算法_人工智能_39

公式2(由后往前,计算每一层神经网络产生的错误):

神经网络与反向传播算法_神经网络_40

推导过程:

神经网络与反向传播算法_人工智能_41

既然我都以及知道了

神经网络与反向传播算法_深度学习_42的值了,通过公式1可以算出来了,

然后我们又知道了公式2,那不就可以把所有的

神经网络与反向传播算法_AI_43求解出来了吗?那么我们就运用到下面的公式3和公式4了

公式3(计算权重的梯度):

神经网络与反向传播算法_人工智能_44

        推导过程:

 

神经网络与反向传播算法_人工智能_45

 

 

公式4(计算偏置的梯度):

神经网络与反向传播算法_深度学习_46

        推导过程:

神经网络与反向传播算法_神经网络_47

4. 反向传播算法伪代码

 

· 输入训练集

 

· 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值

神经网络与反向传播算法_AI_48

· 前向传播:

神经网络与反向传播算法_人工智能_49

, 

神经网络与反向传播算法_AI_50

 

· 

· 计算输出层产生的错误:

神经网络与反向传播算法_深度学习_51

· 

· 反向传播错误:

神经网络与反向传播算法_深度学习_52

 

· 使用梯度下降(gradient descent),训练参数:

 

 

神经网络与反向传播算法_人工智能_53

 

 

神经网络与反向传播算法_人工智能_54