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

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


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并不会使得参数更新方向完全改变,因为有惯性,所以只会对原来方向有一定的影响。
在这里插入图片描述
v i v^i vi是过去所有梯度的总和

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

在这里插入图片描述
移动 = - ∂ L / ∂ w + M o m e n t u m \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相当于使用了 2 M 2^M 2M个网络来训练

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

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

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

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

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

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

amazing!
在这里插入图片描述
可以推测:
maxout和ReLU的网络相对于sigmoid来说更接近linear,所以dropout在使用maxout和ReLU的网络时候,performance确实比较好。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值