Ilya Sutskever 关于深度学习的一些实用建议笔记

实用的建议:

1. Get the data:确保有高质量的输入输出数据集和高纯度的标签。
2. Preprocess:必要工作:零均值,每个维度的方差为1。有时候某维度的输入呈数量级的变化,最好实用log(1+x)来表示。
3. Minibatches:如今的电脑同时处理所有的训练样本可能效率较低,通常一次处理的批次为128个样本比较有效。批次数量减小可降低过拟合,但会增加计算负担,过大也易过拟合。实用的建议是:选择minbatch为使用在你的计算机上最有效工作的最小数量。梯度归一化:把灰度根据minbatch的尺寸分割,这个免去改变学习率的步骤。
4. Learning rate schedule:已一个正常大小的LR开始,逐步减小:


*      经典的LR值为0.1。通常往更小的方向设置。
*      使用验证集:训练集的一小部分用来决定什么时候减小LR什么时候停止训练
*      实用建议:如果验证集合上进步不明显,LR/2或LR/5,最终的LR将变得非常小直到停止训练。这          样做可确保你评价验证集合的性能时不会过拟合训练数据。并且,减小LR非常重要,上述步骤使用测试集是一个可控的有效方法。


5. Weight intialization:   随机初始化


*         通常可采用类似0.02*randn(num_params),对于较深的网络通常设置初始化权重矩阵为init_scale/sqrt(layer_width) * randn,在这种情况下init_scale应该设为0.1或1
*         对于较深的网络,通常较小的随机数不起作用
*         如果不起作用,尝试不同的初始化方法

训练RNNs或LSTMs的时候,需要使用梯度范数的强制约束(梯度需要除以batch size),15或5比较实用。将梯度除以minibatch的大小,如果范数超过15则减小到15。这个技巧可大大改善训练RNNs和LSTMs的性能。

6.  Numerical gradient checking:如果不使用Theano或Torch,使用自己设置的梯度较容易出错,检查这一步是否出错非常关键。
7. Data augmentation: 有创新性地增加训练数据。例如有图像:变换尺度、旋转。如果是语音,干净的声音和不同的噪音结合。
8. Dropout: Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。

      但Dropout会延长训练时间,在测试的时候需要关掉Dropout。

9. Ensembling:训练10个神经网络预测取平均

Reference

http://suanfazu.com/t/hinton-qin-chuan-di-zi-ilya-sutskever-de-shen-du-xue-xi-zong-shu-ji-shi-ji-jian-yi/357

你可能感兴趣的:(机器学习)