2、神经网络技巧和贴士
2.1 梯度检查
我们讨论了用微分来计算神经网络模型中参数的误差梯度,这里讨论另一种近似技巧,不需要误差反向传播。
其中
这种方法计算成本极其高,要使用两次前向传播,但是一种验证反向传播的好方法。
一个简单的梯度检查可以用以下方法实现
2.2 正则
我们使用L2正则防止过拟合
是Frobenius范数。
使用这样的约束可以解释为先验贝叶斯信任,优化的权重接近0。
2.3 神经单元
常用的激活函数有以下几种
Sigmoid
梯度为
Tanh
梯度为
Hard tanh
计算代价更小,但对于z级数大于1时饱和
导数可表达为
Soft sign
导数可表达为
sgn是signum函数,返回1或-1,依赖于z的符号。
ReLU
导数为
Leaky ReLU
导数为
2.4 Xavier参数初始化
Xavier等发现,对于sigmoid和tanh激活单元,更低的误差率和更快的聚合可以通过将矩阵权重W随机初始化为下列范围内的均匀分布
n_(l)是输入单元,n_(l+1)是输出单元
这里bias单元初始化为0
这种方法试图在层之间保持激活振动和反向传播梯度振动,否则梯度振动(信息的代理)一般会随着层间反向传播递减。
2.5 学习速率
我们碰到的大多数模型是non-convex模型,大的学习速率难以预测因为很大机会损失函数会发散。
Ronan等提出了,其中a0是初始速率,t是何时速率开始递减。
2.6使用AdaGrad
与标准随机梯度下降的区别在于学习速率可对每个参数不同。每个参数的学习速率依赖于这个参数的梯度更新历史,对于此前更新少的参数使用更大的学习速率以使它更快更新。
如果梯度的历史RMS非常低,则学习速率会非常高,简单实现如下