Ian Goodfellow, Yoshua Bengio and Aaron Courville 合著的《Deep Learning》 终于写完了,并且放在网上可以在线免费阅读。网址:http://www.deeplearningbook.org
一些笔记整理于此。
Chapter 11 实践指导
1 什么问题适合用deep learning
如果一个问题是AI-complete的,就可以用。
2 明确目标任务
error metric,和 target value for this error metric。
3 尽快建一个baseline
网络结构:
if 当前任务和已经研究过的任务很像:
那么直接借用之前的模型很有可能取得较好的效果。
else:
自己设计模型,选择合适的超参。
层数,隐层节点数:“Usually the best performance comes from a large model that is regularized well, for example by using dropout。”可以先设置一个较大的模型。
regularization:除非有数千万的数据,开始的模型一定要加一些regularization(例如dropout)。
其他trick:对卷积神经网络的训练,和使用sigmoid类非线性激活函数的网络,Batch Normalization 非常有效!Batch Normalization 有时也会减少泛化错误率,甚至允许去掉dropout。
训练方法:
推荐用Adam或加momentum和decay的SGD训练。
预训练:
有监督的预训练:
比如计算机视觉的任务,经常借用CNN在ImageNet中学到的feature。
关于是否要先用无监督学习预训练:
与领域相关。NLP任务,从词向量中可以获得很大的帮助。计算机视觉,目前的无监督方法并不能带来提升,除了在半监督任务中。
如果在一个领域,已经知道无监督方法很有用,那么可以使用。否则,不要用,除非任务本身就是无监督的。
如果发现baseline overfit,那么之后可以尝试加无监督学习。
4 训练模型:
超参数的选择:
手工调整:需要理解超参数的作用和机器学习模型是怎样达到好的泛化效果的。
自动调整:更耗费计算资源,不需理解那些背后原因。
如果只有时间调整一个超参,那么选择调整学习率!(自适应的方法学习率就不用调了,并且建议使用原论文中给出的初始参数)
是否要获取更多的数据:
if 训练集准确率很低:
不需要获取更多数据。加模型复杂度(层数,隐层节点数),调整训练算法(学习率)。如果怎么调整都不行,那可能是数据质量的问题,重新获取更干净的数据和设计更好的特征。
else:
if 测试集准确率很高:
done
else:
如果测试集准确率比训练集低很多,获取更多数据是最有效的方法!
if 获取数据成本不高:
加数据。
if 获取更多数据的成本太高:
可以尝试降低模型复杂度或者提高正则项。这样调整到极致还不行,建议加数据。
if 无法获取更多数据:
对领域做更深入的研究。
要加多少数据合适:
通常,加已有数据的一个分数倍数据,无法看到什么提升。推荐指数级增长,比如每次训练集大小扩大一倍。
Chapter others
对于深度学习模型,只对W,不对b加reg。原因,相对于W而言,b 的影响没那么大,同时,对b加正则会明显的增加欠拟合。
Maximum likelihood learning with asoftmax classifier and hard targets may actually never converge—the softmax cannever predict a probability of exactly 0 or exactly 1, so it will continue to learnlarger and larger weights, making more extreme predictions forever.
有时预测结果概率分布太极端,一类为1,其他全是0,就是上述原因导致的。一种解决方法如下:
Label smoothing,regularizes a model basedon a softmax withkoutput values by replacing the hard 0 and 1 classificationtargets with targets of e and 1−e, respectively. Label smoothing has the advantage of preventing the pursuit of hard probabilities without discouraging correct classification.
多任务学习,通过共享权重和多目标的loss,也可以提高泛化性。
batch size
至少要充分利用机器多核的计算能力,不要过小,没有意义。
当用gpu时,2的幂是常见的选择,32到256最常见。
小的size可以提供正则的效果,可能是因为训练时带来的噪音。为1时泛化错误率最低,但也意味着需要更长的训练时间。
本文是Ian Goodfellow等合著的《Deep Learning》阅读笔记,主要聚焦于Chapter 11的实践指导。内容涵盖适合深度学习的问题、明确目标、建立基线模型、超参数选择、数据获取策略、正则化方法如Batch Normalization和Label Smoothing,以及多任务学习和批处理大小的影响。
3648

被折叠的 条评论
为什么被折叠?



