前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络与反向传播算法

神经网络与反向传播算法

作者头像
企鹅号小编
发布2018-01-08 11:44:58
5320
发布2018-01-08 11:44:58
举报
文章被收录于专栏:人工智能人工智能

1、前言

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

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

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

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

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

输出端输出预算结果

举个例子,

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

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

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

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

2、原理

学习

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

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

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

运算公式是合理的呢?

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

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

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

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

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

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

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

运算公式

好了,下面是需要一定的数学基础的人才能看懂的了,非作战人员请默默地关注下本公众号,然后可以关闭页面了。。。

作战人员请继续。。。

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

假设

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

那么,

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

,我们定义运算规则为:

为sigmod函数。也就是说:

其中和

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

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

和为何值时,神经网络的输出最为合理。

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

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

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

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

和是合理的了吗?

我们假设

是输入,是实际结果。是计算结果,那么C为损失函数,于是我们有:

其中,

表示输入的样本,

表示实际的分类,

表示预测的输出,

表示神经网络的最大层数。

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

反向传播算法

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

和呢?

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

下面是它的公式推导:

首先,将第

层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

其中,z在上面定义了。

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

其中,

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

我们有必要来看下

到底是个什么东西:

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

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

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

推导过程:

既然我都以及知道了

的值了,通过公式1可以算出来了,

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

求解出来了吗?那么我们就运用到下面的公式3和公式4了

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

推导过程:

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

推导过程:

4.反向传播算法伪代码

·输入训练集

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

·前向传播:

·

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

·

·反向传播错误:

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

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档