看了神经网络许久,开始自己训练一些网络,用的只是deeplearning toolbox中的一些样例,发现在实际过程中,训练网络达到最优解需要很多的tricks,实际上神经网络的调参比理论更难,记得某篇文章中说过,调参实际上more than the art of theory,这篇文章是1998年Yann LeCun的应用文章,讲解了许多调参经验,对初学者帮助很大。


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A few practical tricks

1. Stochastic vs Batch learning
在最小值附近震荡的幅度与学习速率成比例,为了减小震荡,可以减小学习速率或者使用自适应的batch size。
有理论证明以下这种形式的学习速率最好:
其中t是类别数,c是一个常量,实际上,这个速率可能太快。
另一种消除噪声的方法是用mini-batch,就是开始用一个小的batch size,然后随着训练进行增加。但是如何增加和调整学习速率一样困难。
2. Shuffling the examples
网络从未知样本学习最快,因此要在每一次迭代选择最不熟悉的样本。这个方法只适用于SGD,最简单的方式是选择连续的不同类的样本。
3. Normalizing the inputs
4. The Sigmoid
用对称的sigmoid函数有一个潜在的问题,那就是误差平面会变得很平坦,因此应该避免用很小的值初始化weights。
5. Choosing Target Values
6. Initializing the weights
7. Choosing Learning Rates
一般情况下权重向量震荡时减小学习速率,而始终保持稳定的方向则增加,但是不适用于SGD和online learning,因为他们始终在震荡。
Momentum:
其中u是momentum的强度,当误差平面是非球形(nonspherical),它增加了收敛速度因为它减小了高曲率方向的step,从而在低曲率部分增加了学习速率的影响。它通常在batch learning中比SGD更有效。
Adaptive Learning Rates:
这个方法实际上很容易实现,其实就是track公式18中的矩阵,平均梯度r。这个矩阵的norm控制学习速率的大小。
8. Radial Basis Functions vs Sigmoid Units
RBF神经网络:
输出是隐单元的线性加权和,隐单元激活函数使用径向基函数(一般高斯函数),是第i个高斯核的中心。
sigmoid单元可以覆盖整个输入空间,但是一个RBF单元只能覆盖一个小的局部空间,因此它的学习更快。但是在高维空间中它需要更多的单元去覆盖整个空间,因此RBF适合作为高层而sigmoid适合作为低层单元。
Convergence of Gradient Descent

1. A little theory
具体理论分析见文章。
理论内容包括:特征向量和特征值,Hessian矩阵,协方差矩阵
结论:
如果对所有的weight约定一个学习速率,那么
其中为Hessian矩阵H的最大特征值。
2. Two examples
a. Two Gaussian distributed classes, eigenvalues of the covariance matrix are 0.84 and 0.036.
b. Multilayer Network
3. 以上的理论可以证明这几个tricks: