权重初始化需要注意的有:
1. Fancier optimization
随机梯度下降的问题:
损失在一个方向很敏感,另一个方向的改变很小! 锯齿形状
并且saddle points在高纬度情况下更常见。根据minibatch计算的梯度可能有噪声,仅依赖当前batch的数据,更新很不稳定。
解决方法:
1. Momentum
不是梯度方向,而是速度方向。Momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样可以增加稳定性,从而学习地更快,并且具有摆脱局部最优的能力。
红色点是当前的点,红色的向量是梯度的方向,绿色是速度矢量的方向,动量更新是红色绿色两个的加权平均。
其中Nesterov Momentum方法的思想是:按照原来的更新方向更新一步(绿色线),然后在该位置计算梯度值(红色线),然后用这个梯度值修正最终的更新方向(蓝色线)
2. AdaGrad
平方。遇到变化缓慢的纬度,它可以增速,遇到变化快的纬度,可以减速其改变。其训练时间增加时,它的改变会越来愈小。对于凸的问题时,是好的,应为收敛并且变化越来越小,然而对于非凸的问题,可能会陷入到局部最优点。一个解决方法就是RMSProp
3. RMSProp
好像SGD+Momentum过于兴奋了,哈哈哈哈。小哥有说在使用Adagrad的时候可能需要增加学习速率,不过现在好像不怎么用了。
4. Adam
结合了动量中速度的想法和AdaGrad和RMSProp中的平方思想。
在第一个时刻的问题:beta2是0.9或0.99,所以second_moment很接近零。所以第一个时刻可能会走很大一步。1e-7是为了保证分母不是0
解决起始为0的问题:使用无偏估计,并且下页ppt中给出了常用的参数设置。
学习速率:
一阶优化:线性近似,不能走太远
二阶优化:
一些改进的方法:
L-BFGS:近似H,但是在很多深度学习问题上表现并不好,在实际中,通常使用一下两种方法:
在实际中,希望增强模型的泛化能力:
2. 正则化
增强模型的泛化能力
Dropout的思想:每次前向的时候,随机设置一些神经元的值为0,通常概率为0.5。
1. Forces the network to have a redundant representation,prevents co-adaptation of features。2. Dropout is training a large ensemble of models(that share parameters)
Data Augmentation:
图像的水平平移,旋转,随机选取等,color jitter
训练阶段:增加一些随机性的噪音
测试阶段:边缘化噪声。
Fractional Max Pooling: suggests a method for performing the pooling operation with filters smaller than 2x2. This is done by randomly generating pooling regions with a combination of 1x1, 1x2, 2x1 or 2x2 filters to tile the input activation map. The grids are generated randomly on each forward pass, and at test time the predictions can be averaged across several grids.
3. Transfer Learning:
可能不需要太多的数据,在大的数据集上训练好模型,然后将其他参数冻结,接着重新初始化最后一个参数
现在很多图像相关的任务都是在ImageNet上做预训练,然后再做Fine tune微调。
文本相关的:word vectors pretrained with word2vec