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

Ian Goodfellow, Yoshua Bengio and Aaron Courville 合著的《Deep Learning》 终于写完了,并且放在网上可以在线免费阅读。网址:http://www.deeplearningbook.org
目前只看了2章,收获很大,一些笔记整理于此。

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 无法获取更多数据:
       对领域做更深入的研究。
要加多少数据合适:
通常,加已有数据的一个分数倍数据,无法看到什么提升。推荐指数级增长,比如每次训练集大小扩大一倍。

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