随着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. air手势代码

    //下列2句谁放上面谁生效要么触控生效,要么手势生效 Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; Multitouch.inputM ...

  2. 第三百零八至三百二十天 how can I 坚持

    十三天..2月4号至2月16号,好快,假期还没开始就结束了.一一回忆下. 2月4号,腊月二十六,最后一天上班,没多大事,好像是玩了一天,东月回家,貌似路上好折腾,晚上D401,和她聊了一路,也聊了好多 ...

  3. vim编辑十六进制文件

    首先用二进制方式打开 vim file -b 之后输入 :%!xxd 还原为二进制文件 :%!xxd -r

  4. spring MVC 如何查找URL对应的处理类

    在spring 3.1之前,查找URL相应的处理方法,需要分两步,第一步是调用DefaultAnnotationHandlerMapping,查找到相应的controller类,第二步,再调用Anno ...

  5. 在VSTO界面中,调用xll中的函数

    最近研究各种有点迷茫了,原来Xll的加载宏直接可以在C#中调用的,我又各种Out了. 先说明一下,在VBA中,如何调用吧 XLLFound = Application.RegisterXLL(This ...

  6. C#中自定义消息,与MFc对比

    在C#中采用的是事件驱动方式,但在我们使用的过程中,有时候通过调用系统原有的消息,处理起来会比较简单一些,特别是在处理与DLL文件的交互时,的确是非常的方便.    在C#中使用自定义消息      ...

  7. C++中回调函数(CallBack)的使用

    如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而 ...

  8. IP报文解析及基于IP 数据包的洪水攻击

    版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验 ...

  9. Mahalanobis Distance(马氏距离)

    (from:http://en.wikipedia.org/wiki/Mahalanobis_distance) Mahalanobis distance In statistics, Mahalan ...

  10. android 三种弹出框之一PopupWindow

    PopupWindow 在android的弹出框我目前了解到的是有三种:AlertDialog,PopupWindow,Activity伪弹框, AlertDialog太熟悉了,这里就不介绍了 就先看 ...