精读西瓜书(第五章-神经网络)-深度学习

写在前面

  • 众所周知, 深度学习是目前比较火的一门学科, 老周的西瓜书里面也仅仅是用了一小节来对深度学习这个领域做了一个大致的介绍, 如果大家想要深入学习有关深度学习相关的一些内容的话, 笔者推荐你去看看花书.

深度学习

  • 理论上来说, 参数越多的模型复杂度越高, '容量'(Capacity)越大, 这意味着它能完成更复杂的学习任务. 但一般情形下, 复杂模型的训练效率低, 易陷入过拟合, 因此难以收到人们青睐. 而随着云计算, 大数据时代的到来, 计算能力的大幅提高可环节训练低效性, 训练数据的答复增加则可降低过拟合风险, 因此, 以'深度学习'(Deep Learning)为代表的复杂模型开始受到人们的关注.
  • 典型的深度学习模型就是很深层的神经网络. 显然, 对神经网络模型, 提高容量的一个简单办法就是增加隐层的数目. 隐层多了, 相应的神经元连接权, 阈值等参数就会更多. 模型复杂度也可通过单纯增加隐层神经元的数目来实现, 前面, 我们谈到过, 但隐层的多层前馈网络已具有很强大的学习能力; 但从增加模型复杂度的角度来看, 增加隐层的数目显然比增加隐层神经元的数目更有效, 因为增加隐层数不仅增加了拥有激活函数的神经元数目, 还增加了激活函数嵌套的层数. 然而, 多层神经网络难以直接用经典算法(例如, 标准BP算法)进行训练, 因为误差在多隐层内逆传播时, 往往会'发散'(Diverge)而不能收敛到稳定状态.
  • 无监督逐层训练(Unsupervised Layer-Wise Training)是多隐层网络训练的有效手段, 其基本思想是每次训练一层隐结点, 训练时将上一层隐结点的输出作为输入, 而本层隐结点的输出作为下一层隐结点的输入, 这称为'预训练'(Pre-Training); 在预训练全部完成后, 再对整个网络进行'微调'(Fine-Tunning)训练. 事实上, '预训练 微调'的做法可视为将大量参数分组, 对每组先找到局部看来比较好的设置, 然后再基于这些局部较优的结果联合起来进行全局寻优. 这样就在利用了模型大量参数所提供的自由度的同事, 有效地节省了训练开销.
  • 另一种节省训练开销的策略是'权共享'(Weight Sharing), 即让一组神经元使用相同的连接权. 这个策略在卷积神经网络(Convolutional Neutal Network, 简称CNN)中发挥了重要作用.
  • 我们可以从另一个角度来理解深度学习. 无论是DBN还是CNN, 其多隐层堆叠, 每层对上一层的输出进行处理的机制, 可看作是在对输入信号进行逐层加工, 从而把初始的, 与输出目标之间联系不太密切的输入表示, 转化成的任务成为可能. 换言之, 通过多层处理, 逐渐将初始的'低层'特征表示转化为'高层'特征表示后, 用'简单模型'即可完成复杂的分类等学习任务. 由此可将深度学习理解为进行'特征学习'(Feature Learning)或'表示学习'(Representation Learning).
  • 以往在机器学习用于现实任务时, 描述样本的特征通常需由人类专家来设计, 这称为'特征工程'(Feature Engineering). 总所周知, 特征的好坏对泛化性能有至关重要的影响, 人类专家设计出好特征也非易事; 特征学习则通过机器学习技术自身来产生好特征, 这使机器学习向'全自动数据分析'又前进了一步.

写在后面

  • 本文中, 对神经网络做了大致的介绍. 如果有兴趣深究的话, 可以深入读一下花书-<深度学习>.
  • 明天, 我们将会继续学习下一章的内容, 支持向量机-间隔与支持向量.

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据