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