Deep Learning (Ian Goodfellow, Yoshua Bengio and Aaron Courville) 阅读笔记

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时泛化错误率最低,但也意味着需要更长的训练时间。

你可能感兴趣的:(深度学习)