深度学习常见优化方法
数据的标准化
当 $\mathrm{x[i]}$ 与 $\mathrm{x[j]}$ 这两个维度的数值范围偏差过大时梯度下降会难以进行.
梯度下降算法在输入向量的每个维度取值范围相近时更容易找到最低点.
$\mu = \frac{1}{m} \sum_{i =1}^{m} x^{(i)}$
$x:=x - \mu$
$\sigma ^2 = \frac{1}{m} \sum_{i = 1}^{m} x^{(i)}* x^{(i)}$
$x/=\sigma ^2$
注意:不仅要对训练数据进行标准化,对于测试数据也要用同样的参数初始化.
初始化 $\mathrm{w}$
对于深层神经网络,即使 $\mathrm{w}$ 略微大于 1 乘起来也是指数级的.
所以对于 $\mathrm{w}$ 的初始化就十分关键,避免造成梯度爆炸或梯度消失.
一般来说,对于第 $l$ 层的节点来说,$w$ 的初始化如下:
$\mathrm{relu}:$ $\sqrt{\frac{2}{n[l-1]}}$
$\mathrm{tanh}:$ $\sqrt{\frac{1}{n[l-1]}}$
其他:$\sqrt{\frac{2}{n[l-1]n[l]}}$
这些就是在 $\mathrm{random}$ 后面乘上的系数
激活函数的选取
$\mathrm{sigmoid}:$ 效果较差,一般只会在二元分类输出层用.
$\mathrm{tanh}:$ 在 $0$ 点附近效果很好,但是数值太大则会逼近 $-1$ 或 $1$
$\mathrm{relu}:$ 效果很好,用的很多
正则化
如果模型过于复杂会产生过拟合现象,如果不进行正则化训练次数不宜过多.
加入正则化的手段,虽然训练数据会更好的拟合,但是正则化项会产生额外代价,故可以长期训练
$\mathrm{L2}$ 正则化:代价加上 $\frac{\lambda}{2m} \sum w^2$
加深神经网络层数
如果模型对于训练数据都无法达到高准确率时说明模型太简单了,可以考虑增加层数.
数值检验
虽然基于向量实现的反向传播算法很快,但是公式是容易出错的.
可以用暴力求导的方式来对结果进行检验