李宏毅机器学习学习笔记汇总
课程链接


文章目录

  • Recipe if Deep Learning
    • Do not always blame Overfitting
    • 针对不同的状况使用不同的方法
      • 在训练集上效果不好
        • Vanishing Gradient Problem梯度消失
        • 如何解决——ReLU
      • 在测试集上效果不好
        • Review
        • Review: Vanilla Gradient Descent
        • 加上Momentum的思想之后
        • 在training data上得到好的结果,但是在testing data上的结果依然不好。
          • Early stopping
          • Regularization
          • Dropout
            • 使用Dropout直觉的理由
            • Dropout is a kind of ensemble

Recipe if Deep Learning

不断修改模型,使其在训练集上可以达到好的结果,再把其运用到测试集上,若效果不好,则是过拟合了。

但是!

Do not always blame Overfitting

不要所有不好的performance就说overfitting
如图中,56层的performance的test erro比20层的高,这不一定是过拟合了,因为再去检查训练集上的error,可能发现56层的依然比20层的高。

56层比20层效果差,未必是因为欠拟合,他的网络层数多,未必是能力不行。

针对不同的状况使用不同的方法

dropout只有在 测试集上 模型效果不好的时候运用,而不是在训练集上 模型效果不好的时候用,那样只会越train越差。

在训练集上效果不好

更换一些新的激活函数。

在以前使用sigmoid激活函数的时候,Deeper usually does not imply better!这个在训练集上就没有训练好,所以不是过拟合。

Vanishing Gradient Problem梯度消失

上图中出现的原因就是梯度消失,在靠近输入层的地方参数对于最后loss function的微分是很小的,而在靠近输出层的地方,对于最后loss function的微分是很大的。

所以在设定同样的learning rate的时候,在靠近输入层的地方参数的更新很慢,在靠近输出层的地方参数的更新很快。

在输入几乎还是random的时候,输出就几乎已经converge收敛。在输入几乎还是random的时候,输出就根据这些random的数据找到了局部最优,然后就收敛了,loss的下降速率很慢。

此刻模型效果很差,因为他converge是基于random的参数得到的output 来converge的。

sigmoid本身就把正负无穷的数压缩在0到1之间,所以导致敏感度低,如果是指数就是放大差距,这总感觉

加上一个参数也不行

如何解决——ReLU

好处:
1、计算速度快
2、有生物学上的理由
3、无穷多的有着不同bias的sigmoid的叠加结果
4、可以解决梯度消失的问题


把output为0的neural拿掉,剩下的neural都是output=input的linear的时候,网络是一个瘦长的线性网络。

之前梯度消失是因为:sigmoid会把大的input变成小的output,线性的output=input,不会有递减的情况发生。



maxout!妙啊!
ReLU是maxout可以做到的!






在测试集上效果不好

Review

使用一阶导数来估计二阶导数

梯度大,学习率也大,每次更新的幅度就很大,比较容易跳过最优点
陡峭的地方学习率要小,平坦的地方学习率要大

给现在新的gradient大的weight,给过去的旧的gradient小的weight。

在高原很慢,卡在鞍点,卡在局部最优
局部最优在一个很大的神经网络中,可能是很平滑的,没有多少局部最优,当卡在局部最优时,多数情况就是全局最优距离,或者很接近全局最优。

真实世界中,会由于惯性,一直走,最后会走到比局部最优更好的全局最优点

Review: Vanilla Gradient Descent

加上Momentum的思想之后

有一个新的gradient并不会使得参数更新方向完全改变,因为有惯性,所以只会对原来方向有一定的影响。

viv^ivi是过去所有梯度的总和

λ\lambdaλ如果是小于0的值,越之前的gradient,他的weight越小,反而越在意现在的gradient,但是过去的gradient也会对现在有一定的影响。


移动 = -∂L/∂w+Momentum\partial{L}/\partial{w} + Momentum∂L/∂w+Momentum

可能也会跳出global minimum

在training data上得到好的结果,但是在testing data上的结果依然不好。

Early stopping

使用验证集来模拟测试集,找到合适的位置

Regularization

重新定义了要去最小化的loss function,多了一项L2 regularization,因为加regularization是为了平滑,而bias和function的平滑程度无关,所以不需要加bias。

weight不断变小,权重衰减weight decay

最后参数不会都变成0,因为还有后面的一项。



Dropout


在训练的时候,每次更新参数之前,对每一个neural(包括input layer里的element)做sampling,来决定这个neural是否被丢掉,以p的概率被丢掉。

网络结构变细长了,再用这个网络进行训练。

在每一次更新参数之前,都要重新进行sample,每次更新参数的时候拿来训练的网络结构是不一样的,所以在做重新sample的结果是不一样的。

在使用dropout的时候,在训练集上的performance是会变差的。但是测试集上的performance会变好。

在测试的时候不做dropout,如果在训练的时候dropout概率是p,则在测试的时候是1-p

使用Dropout直觉的理由



为什么训练和测试的weight不一样?

例如30%,train时w相当于过载,正常量级*10/7。test的时候要做还原,乘上7/10

Dropout is a kind of ensemble

使用dropout的时候,相当于训练了一把有着不同结构的网络,每个model可能variance很大,如果model很复杂的话,bias平均起来就很小

这个解释有问题:因为每次失活都随机产生一个NN,而且只训练了那么一次,并不是训练了固定个NN,所以应该是等分的交叉验证


如果在模型比较复杂的时候,这个方法会比较有用。
random forest随机森林也是用了这个思想。

用dropout相当于使用了2M2^M2M个网络来训练

使用一个mini-batch就相当于训练了一个网络

网络中的一些参数是共享的,即一个网络的结构只用一个batch训练,但是一个weight可能用了好几个weight训练。


把测试数据丢给一把网络,最后求平均值,但是这样在实际使用中是不可行的,因为这一把网络实在是太多了,运算量太大。

所以,当一个网络不做dropout,是一个完整的网络的时候,把权重weight全乘上1-p,和前面那种方法结果是一致的。

因为weight都接受了横向集成训练


举个例子
但是只有在激活函数是线性的时候,两种情况才会相等,但是神奇地方在于dropout没有使用线性的激活函数,但是它最终确实是work了!

amazing!

可以推测:
maxout和ReLU的网络相对于sigmoid来说更接近linear,所以dropout在使用maxout和ReLU的网络时候,performance确实比较好。

【李宏毅机器学习】Tips for Deep Learning(p14) 学习笔记相关推荐

  1. Yoshua Bengio——《Deep Learning》学习笔记1

    版权声明:此为Yoshua Bengio的新书<Deep Learning>学习笔记,本文为博主在研究工作中经验分享,包括学习笔记.摘录.研究成果,以便以后工作参考之用,欢迎交流和批评:其 ...

  2. 【李宏毅机器学习】Why Deep Learning(p15) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 这集语音部分属实听不明白了qaq 文章目录 Deep is better Fat+Short vs Thin+Tall Modularization 模块化 做d ...

  3. 机器学习(西瓜书)深度学习(Deep Learning)学习笔记

    本文为准备研究生课程Computer Vison而写,力求对机器学习与深度学习基本概念和应用实践产生一定的理解. 机器学习(西瓜书)-周志华 第1章 绪论         根据训练数据是否拥有标记信息 ...

  4. 李宏毅《Deep Learning》学习笔记 - transformer

    学习资料 视频:https://www.youtube.com/watch?v=ugWDIIOHtPA&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4& ...

  5. 《Neural network and deep learning》学习笔记(一)

    Using neural nets to recognize handwritten digits Learning with gradient descent 对于一个网络,它的代价函数: C(w, ...

  6. 【李宏毅机器学习】Transformer(p23) 学习笔记

    老二次元了... 文章目录 Transformer Sequence 用CNN取代RNN Self-Attention Self-attention is all you need. 流程 Self- ...

  7. Lan Goodfellow 《DEEP LEARNING》学习笔记 --第四章

    https://app.yinxiang.com/shard/s64/nl/22173113/a89ab8f8-3937-419c-8b81-cc913abaa35a/ 为了方便起见,我用的可手写的a ...

  8. 《deep learning》学习笔记(3)——概率与信息论

    欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 3.1 为什么要使用概率 概率法则告诉我们AI系统如何推理,据此我们 ...

  9. 李宏毅机器学习课程-Transfer Learning

    深度学习 -> 强化学习 ->迁移学习(杨强教授报告) 李宏毅机器学习课程-Transfer Learning 迁移学习-吴恩达 freeze 待处理的 理解深层神经网络中的迁移学习及Te ...

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

    台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning 注:本博客主要参照 http://blog.csdn.net/xzy_thu ...

最新文章

  1. Python OpenCV应用K均值聚类进行颜色量化
  2. 最不像地球的45个地方,你见过几个?
  3. 马凯军201771010116《面向对象程序设计(java)》第二周学习总结
  4. select count(*)和select count(1)
  5. ENVI入门系列教程---一、数据预处理---4.2 自动采集控制点的RPC正射校正
  6. 用struts拦截器实现登录验证功能AuthorizationInterceptor
  7. Vue + OpenLayers 配置多个地图数据源
  8. HDFView安装及使用教程
  9. 6-2 递归方法:汉诺塔问题 (10 分)
  10. 服务器的日常维护需要做什么?
  11. 自同步如果服务器删掉文件,linux服务器上ftp删掉的文件能找回
  12. 傲梅轻松克隆系统盘备份
  13. access_token VS refresh_token
  14. 安装Xp和Win7双系统方法(图文教程)
  15. 硬件工程师入门基础知识(一)基础元器件认识(二)
  16. Unity3D蓝牙连接Mi Band 5手环获取实时心率
  17. Laravel学习一:框架的下载安装与目录结构
  18. Java工具封装:Html、Css、Javascript文件内容压缩
  19. hdfs orc格式_HIVE存储格式ORC、PARQUET对比
  20. daphile的dsd设置_玩Daphile Digital Mus(2)

热门文章

  1. fedora27安装谷歌浏览器Chrome
  2. [转]最常用的15大Eclipse开发快捷键技巧
  3. Python 多线程进程高级指南(二)
  4. RTT线程管理篇——启动调度器函数
  5. PAT乙级(1029 旧键盘)
  6. java实现pop客户机程序_java客户机如何通过JEE服务器(如weblogic、jboss等)进行身份验证的概念...
  7. 12日直播预告丨MySQL故障诊断常用方法手册
  8. 汇总丨MySQL GTID技术点,看这一篇就够了!
  9. 分布式锁用Redis坚决不用Zookeeper?
  10. 国庆佳节,我们有好礼相送!