查看原文
其他

反向传播的意义及c++实现

2017-02-03 全球人工智能


本轮的主要内容是教会初学者如何用 c++来实现深度学习中至关重要的 一个环节----反向传播算法的实现(部分内容参考: http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm)。


主要内容:

介绍反向传播算法的作用

反向传播算法实现步骤

c++实现的一个例子


反向传播算法的作用

假设我们有一个固定的训练集,包 含 m 个训练样本。我们可以使用批量梯度下降法来训练我们的网络。    对于单个样本,我们可以将其训练误差定义为:


对于整个训练集,其误差为:

这里,后面一项是正则化项,权重衰减项。


首先需要明确的是:我们的目的是最小化误差函数J(W.b)。J是w,b的函数。训练一个伸进网络,我们会选择某种方法(可以参考《如何优雅地训练神经网络》)来初始化我们的权重。


根据梯度下降法的思想,沿着梯度的反方向是误差函数下降最快的方向。因此,可以得出更新系数的公式:


这里 ,是学习速率,可以理解为一个常数先不作讨论,特别地我们会发现 J(w.b)关于 w,b 的导数显得格外的重要。因为只要有了这两个导数 ,系数更新就易如反掌了。那么这个导数如何求呢?反向传播算法就 是来解决这个问题的。


反向传播算法的主要步骤


反向传播算法的主要步骤如下:

1、 进行一次前向传播(feedforward pass),计算出各层的输出激活 值


2 、 对于网络的输出层的每个神经元,计算:


3 、对于层:

注意 下标的顺序(可以结合“反向”二字理解下标)   


4、 计算偏导数


以上便是反向传播算法的主要步骤。


C++实现的一个例子见:https://github.com/xupeng082008/DeepLearning-Backpropagation



全球人工智能近期经典文章推荐


匹兹堡赌场的赌神——扑克牌机器人背后的理论

6亿用户的《今日头条》和它的黑科技武器

干货 | 反向传播中 什么样的梯度是有意义的

干货|如何利用 TensorFlow 创建第一个神经网络

深度学习里数学之--方差--美妙而富有韵味

备受争议的 D-Wave新型量子计算机 竟然找到了第一个买家

干获|详解深度学习框架——TensorFlow

Google|“自动机器学习”取得重大突破:机器设计的机器学习软件已达AI专家设计水平!

【南大教授】提出“超深度学习”欲颠覆“深度学习”,你怎么看?

炮灰模型:女生如何选择追求者的数学模型?





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存