ML From Hung Yi Lee --- Tips For Deep Learning #10
Tips for Deep Learning
Recipe of Deep Learning
- 定义你的函数集合
- 定义好的函数
- 使用gradient descent找到好的结果
- 在这个训练的过程中查看是否train data上是否表现的好
- 表现的好就继续在test data 上继续打分,如果都比较好的话
- 使用验证集打出最终的分
参数越多其实不一定导致过拟合,还有很多其他的因素会导致模型的效果好坏
- 例如手写数字识别上
- 当layer层数增加的时候,明显发现accuracy明显下降。
- overfitting: 在训练集上非常好,但在测试集上没那么好,这张图是在训练集上的图像,当层数增加的时候,准确率迅速下降
- 靠近输入层的微分会小,而输出层的微分会很大
- sigmoid函数会把正负无穷的数都压缩起来,但是你输入层变化一点,在每一层之间这个输入层的微小变化都会被缩小,这就导致最后对于输出层的影响非常小,这也就是梯度消失(Vanishing Gradient Problem),在举个例子,如果两张手写数字识别的图,只是Bias差了一点点,那么对于Sigmoid则会把梯度逐渐消失,那么最后输出就可能是同一个class,而R二LU就不会。
ReLU
- 根据前面发现的Sigmoid作为激活函数时,会出现影响之间缩小,而且计算Sigmoid相对来说比较慢,所以自然而然的提出了这个新的激活函数ReLU
- 下面是这个激活函数的优点:
- 方便计算,线性计算非常nice
- 有很多生物学上的借鉴,具有仿生物的特性
- 当各种不同bias的Sigmoid叠加起来就可以得到ReLU
- 可以解决梯度消失的问题,主要是由于Sigmoid函数会把梯度的影响逐渐消失,而使用ReLU则不会让梯度逐渐消失,而是保留下来,正对于负数输入则会使得之后的值总等于0,相当于剪去了这个神经元,整个model自动选择有效的神经元(使用Sigmoid时候,就算认为这个神经元没用,还是会对梯度造成非常严重的影响)。
- 使用ReLU的时候并不会因为ReLU是线性的时候,这个model其实还是一个非线性的模型,因为考虑到输入层与输出层,这个模型就是一个非线性的模型
其他的想法
MaxOut
Maxout可以拟合出来ReLU,和其他的上述的ReLU变种,每一层之间都可以有自己的Maxout。
- 这其实就是一个取最大值的一个函数,更具不同的区段,绘画出来最终的函数,根据组中的元素的个数还可以导出各种不同的函数,比如绝对值函数,可以预见,像Sigmoid这样的,只要足够多,多可以模拟,(以直拼出曲)
如何train maxout??
- 在做反向传播的时候,挑出来的最大值,就锁定到对应的参数更新。
- 根据每一个data 的输入,会让每一个max out 都被train到
复习
前面线性模型中,梯度大的地方就会下降的慢,梯度小的地方,learning rate 就会很大
关于自动学习Learning Rate
RMSProp
- \(\alpha\)参数是自己定的,相比于adagrad,RMSProp可以手动确定模型到低是更相信过去,还是说相信现在的参数。
关于最优解的问题
联想到现实世界的小球的下降,小球总带有一个动量,直到达到一个自己无法越过的山丘的时候,自然就停下来了,而这是大部分都是全局最优解了。
Momentum
原来的gradient descent
带有动量的梯度下降
当你快要达到local 最小值的时候,考虑到向量,就会有机会跳出这个局部解,而去找到那个全局的最优解0
Adam
结合上述的Momentum动量下降,与带有偏向的学习率选择RMSProp
Regularization
\(l1-norm\)
\(l2-norm\)
Dropout
- 随机丢掉神经节点,每次更新参数都需要再次随机选择节点,就像是给神经元难度。
- 就像是一个model是一个小组,小组里面有很多的成员,每个人都会对这个模型有自己的处理方法,每个人都有自己的道理,最后综合小组的集体的力量,集合起来,可能每个人的效果可能不大行,但是集体出来,可能就很好了。
- 联系到随机森林模型,一个森林有很多的树,每一棵树都尽量去求解这个问题,但是最后由投票决定谁是最好的结果。
- 这里的Dropout实际上也有点类似的感觉,按照一定的比例丢弃掉一定的神经元,然后使用这个残缺的神经元去解决这个问题,相当于个人尝试解决这个问题,但是最后的结果会集思广益,拿到所有人的思想。(猜想:是否有机会告诉这个神经网络某一个组合该去做什么,另外一个组合又需要做什么。emmm,感觉有点像神经树???emmm)
- 小组的所有成员各自独立提出的结果,与集体借助成员各自的经验乘上\(1-p\%\)基本上相近。
- 对于线性的,基本就是相等
- 对于非线性,那么会比较相近(使用ReLU,Maxout会更好!因为跟接近线性。)