深度学习之DNN与反向传播算法

2017 年 9 月 11 日 机器学习算法与Python学习

微信公众号

关键字全网搜索最新排名

【机器学习算法】:排名第一

【机器学习】:排名第二

【Python】:排名第三

【算法】:排名第四

前言

深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结。


反向传播需要解决的问题

在了解DNN的反向传播算法前,我们先要知道DNN反向传播算法要解决的问题,也就是说,什么时候我们需要这个反向传播算法? 


回到我们监督学习的一般问题,假设我们有m个训练样本:{(x1,y1),(x2,y2),...,(xm,ym)},其中x为输入向量特征维度为n_in,而y为输出向量,特征维度为n_out。我们需要利用这m个样本训练出一个模型,当有一个新的测试样本(xtest,?)来到时, 我们可以预测ytest向量的输出。 


如果我们采用DNN的模型,即我们使输入层有n_in个神经元,而输出层有n_out个神经元。再加上一些含有若干神经元的隐藏层。此时我们需要找到合适的所有隐藏层和输出层对应的线性系数矩阵W,偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或很接近样本输出。怎么找到合适的参数呢?


如果大家对传统的机器学习的算法优化过程熟悉的话,这里就很容易联想到我们可以用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,对应的一系列线性系数矩阵W,偏倚向量b即为我们的最终结果。在DNN中,损失函数优化极值求解的过程最常见的一般是通过梯度下降法来一步步迭代完成的,当然也可以是其他的迭代方法比如牛顿法与拟牛顿法。对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程即为我们的反向传播算法。


反向传播的基本思路

在进行DNN反向传播算法前,我们需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。DNN可选择的损失函数有不少,为了专注算法,这里我们使用最常见的均方差来度量损失。即对于每个样本,我们期望最小化下式:

其中,aL和y为特征维度为n_out的向量,而||S||2为S的L2范数。现在我们开始用梯度下降法迭代求解每一层的W,b。首先是输出层第L层。注意到输出层的W,b满足下式:

这样对于输出层的参数,我们的损失函数变为:

求解W,b的梯度:

现在我们把输出层的梯度算出来了,那么如何计算上一层L−1层的梯度,上上层L−2层的梯度呢?这里我们需要一步步的递推,注意到对于第l层的未激活输出zl,它的梯度可以表示为:

如果我们可以依次计算出第l层的δl,则该层的Wl,bl很容易计算?为什么呢?注意到根据前向传播算法,我们有:

可以很方便的计算出第l层的Wl,bl的梯度如下:

很容易求出:

将上式带入上面δl+1和δl关系式我们得到:


算法过程

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里我们以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。不过区别仅仅在于迭代时训练样本的选择而已。

输入: 总层数L各隐藏层与输出层的神经元个数激活函数损失函数迭代步长α,最大迭代次数MAX停止迭代阈值ϵ

输出:各隐藏层与输出层的线性关系系数矩阵W和偏倚向量

1 ) 初始化各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b的值为一个随机值。

2)for iter to 1 to MAX:

  2-1) for i =1 to m:

    a) 将DNN输入a1设置为xi

            b) for l=2 to L,进行前向传播算法计算

               c) 通过损失函数计算输出层的δi,L

    d) for l= L to 2, 进行反向传播算法计算

       2-2) for l = 2 to L,更新第l层的Wl,bl:

      2-3) 如果所有W,b的变化值都小于停止迭代阈值ϵ,则跳出迭代循环到步骤3。

3)输出各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b。


小结

有了DNN反向传播算法,我们就可以很方便的用DNN的模型去解决各种监督学习的分类回归问题。当然DNN的参数众多,矩阵运算量也很大,直接使用会有各种各样的问题。有哪些问题以及如何尝试解决这些问题并优化DNN模型与算法,我们在以后涉及。

欢迎分享给他人让更多的人受益

参考:

  1. 《深度学习》第六章

  2. 博客园:刘建平

    http://www.cnblogs.com/pinard/p/6422831.html

  3. http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95

加我微信:guodongwe1991,备注姓名-单位-研究方向(加入微信机器学习交流1群)

招募 志愿者

广告、商业合作

请加QQ:357062955@qq.com

喜欢,别忘关注~

帮助你在AI领域更好的发展,期待与你相遇!

登录查看更多
4

相关内容

机器翻译深度学习最新综述
专知会员服务
98+阅读 · 2020年2月20日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
77+阅读 · 2020年2月3日
一文搞懂反向传播
机器学习与推荐算法
18+阅读 · 2020年3月12日
干货|深度神经网络(DNN)反向传播算法(BP)
全球人工智能
7+阅读 · 2018年1月12日
CNN 反向传播算法推导
统计学习与视觉计算组
30+阅读 · 2017年12月29日
干货 | 深度学习之CNN反向传播算法详解
机器学习算法与Python学习
17+阅读 · 2017年11月21日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
神经网络bp算法推导
统计学习与视觉计算组
11+阅读 · 2017年11月17日
入门 | 一文概览深度学习中的激活函数
深度学习世界
4+阅读 · 2017年11月3日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
A Modern Introduction to Online Learning
Arxiv
20+阅读 · 2019年12月31日
Bivariate Beta LSTM
Arxiv
5+阅读 · 2019年10月7日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
5+阅读 · 2018年1月29日
Arxiv
5+阅读 · 2017年9月8日
Arxiv
4+阅读 · 2016年12月29日
Arxiv
4+阅读 · 2015年8月25日
VIP会员
相关资讯
一文搞懂反向传播
机器学习与推荐算法
18+阅读 · 2020年3月12日
干货|深度神经网络(DNN)反向传播算法(BP)
全球人工智能
7+阅读 · 2018年1月12日
CNN 反向传播算法推导
统计学习与视觉计算组
30+阅读 · 2017年12月29日
干货 | 深度学习之CNN反向传播算法详解
机器学习算法与Python学习
17+阅读 · 2017年11月21日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
神经网络bp算法推导
统计学习与视觉计算组
11+阅读 · 2017年11月17日
入门 | 一文概览深度学习中的激活函数
深度学习世界
4+阅读 · 2017年11月3日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
机器学习(16)之支持向量机原理(二)软间隔最大化
机器学习算法与Python学习
6+阅读 · 2017年9月8日
相关论文
A Modern Introduction to Online Learning
Arxiv
20+阅读 · 2019年12月31日
Bivariate Beta LSTM
Arxiv
5+阅读 · 2019年10月7日
Arxiv
8+阅读 · 2018年5月15日
Arxiv
5+阅读 · 2018年1月29日
Arxiv
5+阅读 · 2017年9月8日
Arxiv
4+阅读 · 2016年12月29日
Arxiv
4+阅读 · 2015年8月25日
Top
微信扫码咨询专知VIP会员