目录
Vanishing Gradient Problem 梯度消失问题
将 Activation Function 替换为 ReLU ( Rectified Linear Unit )
一个问题:都是线性的,那有什么用?我们做NN不就是为了更复杂的 Function 吗?
Maxout (自动学习的 activation function ,再某种特定情况下可以学出 ReLU )
感谢B站up主搬运的课程:
【李宏毅2020机器学习深度学习(完整版)国语】 https://www.bilibili.com/video/BV1JE411g7XF/?share_source=copy_web&vd_source=262e561fe1b31fc2fea4d09d310b466d
对于 NN ,在 Training data 上表现好,在 Testing data 上表现不好即 Overfiting 。
但也不是 Testing data 上的不好的表现就是 Overfiting ,也有可能在 Training data 上就已经表现不好了,即 Not well trained 。
解决 Traning Data 表现不好
Vanishing Gradient Problem 梯度消失问题
前面的 layer 拥有较小的 Gradients ,后面的 layer 拥有较大的 Gradients ,在相同的 Learning rate 下,后面的参数会更新得更快,前面的参数还是 random 的时候(一开始的参数是随机选择的)后面就已经收敛了。
前面都还是 random 的,那结果自然还是很差的。
Why?
假设前面的参数有了一个变化 ,在经过 sigmoid function 时,再大的变化也都会被压缩到0到1之间,再经过后续的多个 sigmoid function ,这个变化的影响只会越来越小。
Solution
将 Activation Function 替换为 ReLU ( Rectified Linear Unit )
Neuron 使用 ReLU 之后
要么input<0,output=0;
要么input>0,output=input,是线性的。
=0的 Neuron 对神经网络没有影响,可以摘除~
便得到了一个更加细长的NN,且由于是线性的,不会像 sigmoid 那样出现 Vanishing Gradient Problem
一个问题:都是线性的,那有什么用?我们做NN不就是为了更复杂的 Function 吗?
其实,当参数变化小时,z的定义域没有跨过>0、<0的边界, Function 没有变化,那就是 Linear 的,如果变化较大,z的取值使得进入了另一段分段函数的定义域,那NN就是 non-linear 的。
ReLU 的改进
Leaky ReLU(<0处有了斜率,不再等于0,参数得以更新)、Parametric ReLU(斜率自动学习)
Maxout (自动学习的 activation function ,再某种特定情况下可以学出 ReLU )
原理如下,选出每组里最大的向后传(一组可以不止两个)
那为什么能模拟 ReLU 函数呢?
一个问题:那些不是 max 的值不会被 train 到?
其实不然,要么参数变化后,定义域越过了;要么不同样本的 max 是不一样的,都会被 train 到。
Adapative Learning Rate
- AdaGrad
- RMSProp
- Momentum
- Adam
前面的笔记有讲过,具体参考
李宏毅2020机器学习 【学习笔记】 P8 Optimization for Deep Learning__bh的博客-CSDN博客
解决 Training Data 表现不好
Early Stopping
将 Validation Set ,视作 Testing Set (不是真的 Testing Set ,我们是知道其 Loss function 的)
如此可以在更合理的地方停止 Training 。
Regularization 正则化
每次都先给参数缩小一下。
每次都减去一个固定值。
区别,L2按比例减(大参数减很快,小参数减很慢,结果都平均很小),L1以固定值减;
Dropout ( DNN 特色的处理方法 )
每次更新参数前,每个 Neuron 都有 的概率被丢弃
在测试时则不需要 Dropout ,但参数要乘上 。
但注意, Dropout 后 Training Data 的表现是会变差的(训练的时候神经元总是莫名奇妙地消失),不过在 Testing Data 上的表现会变好。
Why?
Intuitive Reason
表现变好?
traning 时给予了重重阻碍,则放下重负时会表现更好。
每次训练的部分神经元能更好地得到训练。
Why 再乘上
?
假设训练的时候总是丢掉一部分的 Neuron ( ),剩下
的 Neuron ,那测试时不丢弃,输出会是不丢弃时的表现,那么自然就要乘上一个
来等同于训练时的表现。