台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning

注:本博客主要参照
http://blog.csdn.net/xzy_thu/article/details/69680951改写。
此小节课讲的是在做深度学习过程中,提升模型效果的方法。
从训练模型到最后应用,流程图如下图所示。

注意:在实际训练深度学习模型的过程中,并不容易overfittingoverfitting。
判断overfitting需要看两个数据集上的结果(training set → good, testing set → bad)。
在试图解决overfitting之后仍要再看一下training set上的结果!
不能看见所有不好的performance都归因到overfitting。如只看下右图,不能断言56-layer有overfitting,要看training set上的表现。根据下左图,可以发现原因是train的时候没有train好(也不能叫underfitting,underfitting:参数不够多,模型能力不足)。

对症下药
在读到deep learning的方法时,要思考该方法是解决什么问题。是解决training set上的performance不好,还是解决testing set上的performance不好。比如,Dropout是为了解决testing set上结果不好的问题,如果是training set上结果不好而用Dropout,不会有好的结果。
解决方法与对应的问题:

New activation function (for good results on training data)

MNIST手写数字识别,激活函数用sigmoid,training data上的accuracy与层数的关系曲线:

层数>7时,performance下降,原因不是overfitting! train的时候就没train好。
梯度消失的问题:

用sigmoid会出现梯度消失的问题(参数的变化经过sigmoid会逐层衰减,对最后的loss影响很小),改用ReLU(计算快,相当于无数sigmoid叠加,解决梯度消失问题)。
ReLU输出0或x,输出0的ReLU神经元相当于不存在,网络变得瘦长,但是整个网络仍然是非线性的,只有当input改变十分微小的时候才是线性的,因为input不同,输出为0的ReLU神经元也不同。

ReLU是Maxout的特例,Maxout可以学出激活函数。



Adaptive Learning Rate (for good results on training data)

1.RMSProp
现回顾下Adagrad的计算公式。

RMSProp的详细计算过程如下。

α 小,则倾向于相信新的gradient。
2.Momentum
在Momentum的方法中,参数下降的方向可以理解为是当前点梯度方向与前一步的速度方向这两个矢量的矢量和的方向。
而传统的梯度下降法可以理解为参数到达某一点后先停稳了,然后环顾四周,挑一个最陡的方向(该点的梯度方向)往下走。


3.Adam
算法如下:

Early Stopping (for good results on testing data)

这里的testing set指的是有label的testing set。
如果learning rate设的对的话,training set的loss会逐渐降低,而testing set与training set可能分布不同,所以testing set的loss可能先降后升,这时就不要一直train下去,而是要在testing loss最小的地方停止train。这里的testing set 实际指的是validation set。

Regularization (for good results on testing data)

L2正则化过程

L2正则化让function更平滑,而bias与函数平滑程度没有关系,故不考虑偏置项。
参数更新:

正则化在NN中虽有用但不明显。
NN参数初始值一般接近0,update参数即是要参数原理0。L2正则化(让参数接近0)的作用可能与early stopping类似。
L1正则化

L1 update的速度是|ηλ|(划横线那项每次改变量是一定的)。而 L2 update 的速度与wtw^t有关(如果wtw^t很大,那么改变量也很大)。
用L1做training,结果比较sparse,参数中有很多接近0的值,也有很多很大的值。
L2 learn的结果:参数值平均来讲比较小。

Dropout (for good results on testing data)


input layer中每个element也算是一个neuron.
每次更新参数之前都要resample.
用dropout,在training上的结果会变差,但在testing上的结果会变好。

在testing的时候不做dropout,所有neuron都要用。
如果training时dropout rate = p%, 得参数a, 那么testing时参数a要乘(1 - p%).
Dropout是ensemble的一种方式。

一个复杂model, bias准,但variance大,把多个复杂model ensemble起来,variance变小。
每个dropout后的结构由一个batch来train,但是权重是共享的,每个权重是由多个batch 来train的。

在testing的时候,把多个结构的结果取平均,与把所有参数乘以(1 - p%),效果是近似的。
Dropout用在ReLU、Maxout上效果较好。

台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning相关推荐

  1. 台大李宏毅Machine Learning 2017Fall学习笔记 (7)Introduction of Deep Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (7)Introduction of Deep Learning 最近几年,deep learning发展的越来越快,其应用也越来 ...

  2. 台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

    台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

  3. 台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction

    台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction 本博客整理自: http ...

  4. 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...

  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep?

    台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep? 本博客整理自: http://blog.csdn.net/xzy_thu/article/detail ...

  6. 台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network

    台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network 本博客主要整理自: http://blog.csdn.net/x ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (9)Keras

    台大李宏毅Machine Learning 2017Fall学习笔记 (9)Keras 本节课主要讲述了如何利用Keras搭建深度学习模型.Keras是基于TensorFlow封装的上层API,看上去 ...

  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (8)Backpropagation

    台大李宏毅Machine Learning 2017Fall学习笔记 (8)Backpropagation 当网络结构很复杂时,会有大量的参数.∇L(θ)\nabla L(\theta)是百万维的向量 ...

  9. 台大李宏毅Machine Learning 2017Fall学习笔记 (6)Logistic Regression

    台大李宏毅Machine Learning 2017Fall学习笔记 (6)Logistic Regression 做Logistic Regression回归,需要3步. Step 1: Funct ...

最新文章

  1. c#泛型的使用[转]
  2. Pwnium CTF2014 – MatterOfCombination writeup
  3. 音频降噪在58直播中的研究与实现
  4. h.265编码库x265实例
  5. 国内是否可以安装alexa_Alexa可以听到您无法听到的命令,哪些黑客可以利用
  6. 机器学习 —— 浅谈贝叶斯和MCMC
  7. (转) Arcgis for js加载百度地图
  8. 接口的mime类型ajax,Ajax的原生实现关于MIME类型的使用方法
  9. c语言随机产生10个30 100,c语言编写随机产生10个100~200之间整数,幷按从大到小排序...
  10. java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...
  11. Android_View,ViewGroup,Window之间的关系
  12. 百度地图坐标转换的异步回调事件
  13. oppo升级android,OPPO Real R807升级Android4.0教程
  14. android在体检报告叫什么,体检报告分析app-体检报告分析软件-最火手机站
  15. 【音视频处理】为什么MP3不是无损音乐?音频参数详解,码率、采样率、音频帧、位深度、声道、编码格式的关系
  16. 11g新增加的后台进程
  17. python和c 情侣网名_可爱超萌的情侣网名 超可爱的情侣网名
  18. Android概述与发展
  19. 推荐10本EEG领域值得阅读的书籍
  20. Input输入框的验证

热门文章

  1. 《算法导论》之hash表
  2. 收集的图像处理网站http://blog.csdn.net/chief1985/article/details/1898358
  3. php cannot bind port to socket,PHP基于socket实现客户端和服务端通讯功能
  4. 达梦系统录音服务器是哪个,达梦服务器安装及使用教程
  5. java attributes用法_C#中的Attributes的用法
  6. 注册规划师 计算机科学与技术,关于公布2018年度注册城乡规划师考试合格人员名单的通知...
  7. 安卓c语言文档下载,C语言.NET技术09.doc
  8. android回收内存保存变量,android基础之onSaveInstanceState用法(一)保存容易被回收的自定义类的静态全局变量...
  9. linux列出组_如何列出Linux中的所有组?
  10. java io教程_Java IO教程