深度网络训练技巧|深度学习(李宏毅)笔记(三)
1. 过拟合和欠拟合
- 过拟合:训练集效果好,测试集效果不好。
- 提前停止
- 正则化
- Dropout
- 欠拟合:训练集与测试集效果都不好。
- 切换**函数
- 自适应学习率
2. 梯度消失问题
问题:随着越来越多的**函数加到神经网络中,损失函数的梯度趋近于0,使得网络结构很难训练。
举个例子,如下图所示,神经网络使用sigmoid函数作为**函数,由于sigmoid函数将函数的输入压缩到0和1之间,所以导致到浅层网络处的w变化很大时loss变化很小,即损失函数对w的梯度几乎为0。
3. ReLU**函数
ReLU**函数图像如下:
应注意ReLU**函数不是线性函数。ReLU**函数不像sigmoid函数那样压缩输入,可以有效地缓解梯度消失问题,但是ReLU也有可能产生梯度消失问题,在z小于0的时候,**函数梯度为零,梯度消失,神经元不更新,变成了死亡节点。
ReLU**函数也有其他多个变种:
1. Leaky ReLU
2. Parametric ReLU
4. Maxout
使用Maxout使得**函数不是定义的**函数,而是通过神经网络自己学习到的**函数。在使用Maxout的隐藏层中将神经元进行分组,每组输出该组内神经元输出值得最大值作为Maxout层的输出。
在下图中可以看到该种情况下(有一个神经元对应的权重和偏量均为零)相当于使用了ReLU作为**函数。
当所有的神经元的权重和偏量值均不为零的时候就相当于**函数是通过学习来得到的。下图展示了当组内神经元数为2或3时的**函数的图像。
5. 自适应学习率
参考链接:回归|深度学习(李宏毅)笔记(一)
6. 早停法
7. 正则化
L2正则化:
L1正则化:
L2正则化会在每次梯度更新时将权重乘以一个小于1但接近1的数实现权重衰减,权重越大则减得越多,而L1正则化则会在每次梯度更新时将权重减去一个固定大小的值。
8. Dropout
在训练时设置每个神经元有p%的概率被丢掉,即将输出设置为零,相当于从神经网络中去掉该神经元。在测试时将每个权重乘以1-p%。
Dropout相当于训练多个不同网络结构的神经网络,每一个mini-batch就会训练一种结构的神经网络,但是在这些不同的神经网络中参数是共享的。
关于测试时权重乘以1-p%的解释: