神经网络训练技巧

1、学习速率。首先设学习速率为一个较大的值,确保training  cost在不断下降。当accuracyy在n个epoch内不再增加时,使得学习速率减小一半。重复迭代,直到学习速率变成原来的1/1024。


2、学习速率要根据训练cost调。但是网络层数和神经元数目,mini-batch size要根据验证集的acc调。


3、关于正则项系数。可以先设为0,选好learning rate,再将正则系数增大或者缩小十倍粗调。大概确定数量级后,再微调。


4、关于mini-batch,如果太小,和On-line learning很接近,加速效果可能不明显。如果太大,权重更新不够频繁,优化过程较长。因此,可以画出验证集准确率和真正时间的曲线,确定一个acceptable mini-batch。


5、避免过拟合的方法有很多:early stopping、数据集扩增(Data augmentation)、正则化(Regularization)包括L1、L2(L2 regularization也叫weight decay),dropout。


6、加上正则项之后,权重会衰减。较小的权重意味着较低的网络复杂度。因为对于过拟合的网络,权重往往振荡较大,很小的区间内函数值变化较大。由于输入可大可小,必须选择权重系数较大。正则化约束了网络的权重,降低了过拟合的情况。


7、加入l2正则化,权重衰减。加入l1正则化,若权重本身为正,会减小,本身为负,会增加。因此,使得权重趋近于零。


8、神经网络参数初始化。传统的方法是从高斯分布中初始化参数,或者全部初始化为0或者1。sigmoid函数为例,为使导数较大,保证输入大概在【-4, 4】之间。获得较快的权重更新速率。因此,可以选择初始权重,使得神经元初始激活函数值落在想要的范围之内。


9、方差损失函数,当神经元实际输出值较大时,损失函数和权重导数值较小。交叉熵损失函数,导数值中不包含损失函数和实际输出导数项,只包含误差项。误差越大,更新越快,误差越小,更新越小。


10、optimizer: adam和adadelta收敛速度都比较快,但是结果来看,sgd和rmsprop的正确率较高。


11、理论上,batch size=1  结果最优。但是验证集准确率容易振荡。


12、优化方法,不同的优化方法对学习率做了不同的变化。

adagrad:累加之前所有梯度的平方。前期可以放大梯度,后期可以约束梯度。适合处理稀疏梯度。后期可能训练提前结束。

adadelta:累加之前梯度平方时不直接加,而是乘以一个权重后再加。训练前期,加速效果很好。训练后期,在局部最小值附近抖动。不依赖全局学习率。

rmsprop:adadelta的特例。权重取0.5,对RNN效果很好。

adam:同时考虑之前梯度的一阶矩和二阶矩,参数比较平稳。


13、这就导致了tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来,但有是,在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了


为神经网络是不断反复计算,实际上变成了它在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征,结果因为稀疏特性的存在,反而这种方法变得运算得又快效果又好了




你可能感兴趣的:(神经网络训练技巧)