随着deep learning的火爆,神经网络(NN)被大家广泛研究使用。但是大部分RD对BP在NN中本质不甚清楚,对于为什这么使用以及国外大牛们是什么原因会想到用dropout/sigmoid/ReLU/change learnRate/momentum/ASGD/vanishment等问题等呢。要想了解国外大牛的思考过程,需要学习到BP在NN中的本质问题,其中涉及到NN训练对于判决边界如何形成?ASGD为什么尤其在NN中效果比二阶信息效果好?如何选择激活函数合适?为何语音识别中误差函数选择互熵?以及竞争学习和侧抑制怎样使用?等等。讨论下自己的感悟,错误和疏漏的地方请同行朋友不吝赐教,非常感谢!
    
   大家都知道DNN常有overfiting的问题,有人会想到为何有些算法(比如DT/最近邻等)在training data上很快达到100%,而NN却需要不停训练却一直达不到。原因之一是相对训练数据中模式,网络参数过多且不加合理区分,导致判决边界调谐到特定训练数据上,并非表现一般特性。由于初始weight is small, neur执行在线性范围,随着training,nonlinear才逐渐显现,decision boundary变弯。但gradient descent完成之前停止training则可避免overfiting。
 
   其实在dropout被叫响之前,它有个哥们叫weight decay技术,对于非常多weight的NN,along with training,decay all weights。小权值网络更适于做线性判别模型。weight decay具体公式有需要的可以找我。有人会问有价值的weight是不是也会decay。其实BP算法本质能对降低error function意义不大的weight变的越来越小,对于如此小的值,可以完全discard(是不是想起了dropout,呵)。而真正解决问题的weight不会随便被decay。还有些其他本质我们后续再讨论。
 
   对于activation function的选择是个技巧,但有规律可循。其实很多人忽视了sigmoid的2个参数gamma和phi,直接用“裸体的”sigmoid。想了解“穿着衣服的"sigmoid的可以再联系我。如果有prior information,比如分布有GMD引起的,则gaussian形式的函数将是个好选择(有没有想到ReLU的曲线与sigmoid的曲线分布类似,至于对x<0的y限制为0的本质下回分解吧)。没有这些prior时,有三个基本原则(但不是死的):非线性,saturability,连续光滑性(这点有待再探讨)。nonlinear是提供deep NN比shallow NN强的计算能力的必要条件。saturability限制weight和activation function的上下边界,因而是epoch可以有限。光滑连续性希望f和一阶导在自变量范围内有意义。
   
   momentum的概念来自newton第一定律,在BP算法中引入momentum的目的是允许当误差曲面中存在平坦区时,NN可以更快的速度学习。将随机反向传播中的学习规则修正为包含了之前k次权值更新量的alpha倍。具体公式表达有需要的可以找我。(是不是启发你想到了adagrad/adadelta呢,其实看到公式后你更有启发,呵)。momentum的使用"平均化"了随机学习这种weight的随机更新,增加了稳定性,在加快learning中甚至可以远离常引起错误的平坦区。
    
   误差函数常采用cross entropy,是因为它本质上度量了概率分布间的"距离"。具体公式有需要的可以联系我,一起讨论。此外,如果想得到局部性强的分类器可以考虑闵科夫斯基误差。是的,还有其他物理意义的误差函数,采用哪一种要看用来干什么了。
 
   对于batch learning,online learning, random learning(据悉msra有更多标注语音但就用了2000小时语音训练)仁者见仁智者见智,这也是为什么jeff dean设计DistBelief提供了Downpour和Sandblaster了。当training data巨大时,内存消耗很大(即使分布式的在内存中存的下但要考虑是否必要),工业界使用的NN常采用online或random协议。在batch learning中样本的重复出现提供的信息同随机情况下样本的单次出现一样多,而实际问题并不需要精确复制各个模式以及实际dataset常有高冗余度,batch learning比random learning慢。但不易嵌入到online learning的"二阶技术"却在某些问题上有其他优势。
 
   对于DNN来说,BP层层计算很耗时。二阶导数矩阵(Hesse阵)规模可能又很大。大家知道的拟合较好的方法,如LBFGS、共轭梯度法、变量度量法等,保持了较快的收敛速度。但值得一提的是,对Hesse阵的无偏近似方法Curvature Propagation可以参考ilya的论文哦。从此paper中也可理解下BP与Hesse的"秘密"。
 
   大家都头疼learningRate的选择,其实这个与上述讨论的多个方面有关系,例如NN的结构、activation function形式、momentum策略、decay方式、期望迭代的总次数、优化的方式、期望目标分类器的表现等等。有一点,我们可以利用误差的二阶导数来确定learning rate。也可以利用二阶信息对NN中unnecessary weight的消去做指导。
 
   未完待续。

关于BP算法在DNN中本质问题的几点随笔 [原创 by 白明] 微信号matthew-bai的更多相关文章

  1. DNN的BP算法Python简单实现

    BP算法是神经网络的基础,也是最重要的部分.由于误差反向传播的过程中,可能会出现梯度消失或者爆炸,所以需要调整损失函数.在LSTM中,通过sigmoid来实现三个门来解决记忆问题,用tensorflo ...

  2. 神经网络中 BP 算法的原理与 Python 实现源码解析

    最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正. 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示. 梯度下降示意图 现在,我们 ...

  3. Backpropagation反向传播算法(BP算法)

    1.Summary: Apply the chain rule to compute the gradient of the loss function with respect to the inp ...

  4. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  5. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  6. 14、RALM: 实时 look-alike 算法在推荐系统中的应用

    转载:https://zhuanlan.zhihu.com/p/71951411 RALM: 实时 look-alike 算法在推荐系统中的应用 0. 导语 本论文题为<Real-time At ...

  7. BP 算法之一种直观的解释

    0. 前言 之前上模式识别课程的时候,老师也讲过 MLP 的 BP 算法, 但是 ppt 过得太快,只有一个大概印象.后来课下自己也尝试看了一下 stanford deep learning 的 wi ...

  8. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  9. 多层感知机及其BP算法(Multi-Layer Perception)

    Deep Learning 近年来在各个领域都取得了 state-of-the-art 的效果,对于原始未加工且单独不可解释的特征尤为有效,传统的方法依赖手工选取特征,而 Neural Network ...

随机推荐

  1. 【openstack报错】【因更新包而致】IncompatibleObjectVersion: Version 1.9 of Instance is not supported

    [时间]2014年2月18日 [平台]ubuntu 12.04.3 openstack havana [日志]/var/log/upstart/nova-compute.log  内容如下: ERRO ...

  2. VMWare高可用集群在企业的应用

    650) this.width=650;" border="0" src="http://img1.51cto.com/attachment/201011/21 ...

  3. E2202 Required package 'VclJPG' not found

    xe8 [dcc32 Fatal Error] RaizeComponentsVcl_Design.dpk(40): E2202 Required package 'VclJPG' not found ...

  4. matlab 画锥体

    >> plot3(x,y,z); >> [x,y,z]=cylinder([ ],)

  5. ntpdate server时出错原因及解决

    错误1.Server dropped: Strata too high 在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronizati ...

  6. C#实现office文档转换为PDF或xps的一些方法( 转)

    源博客http://blog.csdn.net/kable999/article/details/4786654 代码支持任意office格式 需要安装office 2007 还有一个office20 ...

  7. [iOS微博项目 - 2.2] - 在app中获取授权

    github: https://github.com/hellovoidworld/HVWWeibo   A.发送授权请求 1.使用UIWebView加载请求页面 自定义一个继承UIViewContr ...

  8. svn如何回滚到之前版本

    第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R] something 其中so ...

  9. linux 课后作业

    第一章 第一单元 : 安装linux 系统:已完成 第二单元: 略 第三单元: 1) 要求以root用户登录系统,右击桌面打开终端,查看当前登陆Linux系统所使用的用户名2) 查看哪些用户在系统上工 ...

  10. IIS7 “拒绝访问临时目录”

    创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份“IIS APPPOOL\5656qp.com.rmi ...