从0到1,带你入行工程深度学习

 

我们在设计深度网络的时候有什么技巧和原则吗?...

深度学习在去年应该可以算作它的一个爆发期了,各种各样的相关成果层出不穷,笔者自己甚至都很难再将领域里的文章细致的扫一遍。越来越多的人开始关注深度学习,全国的各大高校也开始设置机器学习人工智能的相关专业与课程。

深度学习技术的发展也带来工业界传统机器学习算法的革新换代。无人驾驶、OCR、语音识别、情感分析等等,越来越多的人工智能技术被用于各种各样的领域产业中,越来越多的人选择搭上智能化发展的高速列车,投身到相关的行业中。

他们有的是刚刚迈入大学校园的学子,有的是在企业中耕耘多年的工程师。对于初入行业的人而言,都希望快速入门深度学习。

而不同于理论学习,工程实践中的深度学习更需要长时间的积累,才能够体会到其中的各种技巧和经验,比如:

  1. 我们在设计深度网络的时候有什么技巧和原则吗?
  2. VGG、ResNet 网络如何应用在实际的芯片上?
  3. BN 层应该放在哪里比较合理?
  4. 网络越深越好还是越宽越好?
  5. 训练时如此多的优化方法,一定是 SGD 吗?
  6. 学习率怎么调比较合适?
  7. 模型迁移、模型剪枝、模型压缩、模型精剪设计,这些该如何去实践?
  8. 序列问题中的 RNN 网络,怎样设计才能够确保网络更好、更快的收敛?
  9. Siamese、Triplet 这样的网络要怎样训练?样本怎么处理、挖掘?
  10. 等等......

笔者在接下来的内容中,结合自己的工程经验,谈一谈工程中的深度学习需要注意什么?

关于深度网络设计技巧

在解决实际工程任务的时候,深度网络的设计一定是轻巧型的。因为大多数人工智能产品主要是运行在终端设备中,可能是手机、机器人、车载系统等等,这些场景中,往往很难提供大的计算量和存储空间来跑一些复杂的模型、网络。

因此,虽然 Resnet、Densenet 等这样的网络虽然效果很好,但依然不会被选择用在这些低功耗、低计算量的场景下。在实际的网络设计中,一定要注意以下几点:

  1. 关注轻量级网路,例如:mobileNet、SqueezeNet、ShuffleNet 等等
  2. 使用小卷积核来代替大的卷积核
  3. 第一层卷积由于图像通道为3通道,因此可以采用大卷积核
  4. 全连接层参数量很大,可以考虑使用 dropout 来对网络进行约束
当然,在实际的使用中,往往还会选择对模型进行压缩、剪枝、量化等各种操作,来减小模型计算量。网络设计的技巧也不仅仅局限于此。

siamese、Triplet 这样的多支网络同单支网络有什么区别?

实际上,在传统的机器学习方法中,一直存在分类(回归)问题和排序问题两种不同的问题,实际上,单支网络往往对应到分类(回归)问题,而多支网络则对应到了排序问题上。

比如:Siamese 网络通过对比两支网络输出特征向量的相似度,而相似度则会用于行人再识别等问题中。

在多支网络中,参数量往往是单支网络的2倍甚至3倍,在实际中直接进行训练时会存在一定难度,因此,多支网络通常会在同级别的卷积层中采用参数共享的策略,来减少可学参数,网络相比来说会更加容易收敛。

另外,多支网络还会存在一个非常严重的问题,就是正负样本比例严重失衡的问题(负样本对数量会远远多于正样本对数量),因此通常多支网络的训练需要进行难例挖掘,且训练周期会比单支网络久一些。

更宽的网络 OR 更深的网络

不管是在学术界还是在工业界,网络更宽更好还是更深更好,一直都是一个值得探讨的问题,有研究表明更深的网络能够带来更优的性能,而更宽的网络同样也能够带来性能的提升,并且相比深度网络会更快的收敛。但是更宽的网络往往意味着更多的参数和更大的模型。

在实际的工程项目中,我们通常会更青睐于更深的网络,当然,这并不意味着更宽的网络无用,在网络太深的时候,会存在梯度消失的问题导致网络不收敛,因此,我们就需要考虑利用更宽的网络来提升性能。

当然,前提是我们要确保平台对于计算量的要求。

框架的选择问题,TensorFlow or Caffe?

再早之前,可能会存在这样的一个选择的问题,因为很多平台可能更适合去跑C代码。

而目前,很多深度学习的芯片已经安全支持 TensorFlow 的 Tensor 运算。因此,在实际的工作和学习中,无论选择 Caffe 和 TensorFlow,都是没有太大问题。
当然,如果我自己来选择,最好的情况是一定是两种框架都去掌握。如果是在没什么太多的精力,大家可以参考如下建议来选择合适自己的框架:

  1. Caffe 入门容易,但是后续想要提升会难一些,因为需要修改 cuda代码等
  2. TensorFlow 入门难,但是熟练以后后期提升会更容易。
至于选择那种框架,可以自行决定。

当然,工程实践中的深度学习相关经验、技巧还有很多,比如:网络如何进行压缩、迁移?针对不同任务如何进行网络选型?

精简网络结构如何设计?模型如何训练能够尽快收敛等等。更多的内容,关注达人课《深度学习工程快速入门》,在这里我们只讲干货。

课程优势

本课程共包括 23 个课时,分为四大部分。主要针对机器学习初学者、深度学习入门者以及其他想从事深度学习相关工作的从业者,分别涉及到深度学习的基本概念,模型原理,不同类别的网络模型,模型设计的基本原则、训练、优化、模型精简等等不同方面。

另外,本课程还通过实际的网络设计,结合相应的原则来解决分类任务、序列任务等,加上动手实践过程,带领大家深入理解网络设计的基本原则和方法,并锻炼深度学习编程能力和技巧。

主要优势可以总结一下几点:

  • 全面的内容、快速入门到实战
本课程内容涉及到工程实战深度学习中的各种概念、问题,内容全面、适合初学者从入门到快速实战,更面向工程开发。

  • 工程实战下的通俗概念阐释
本课程涵盖深度学习各个不同领域涉及到的模型基本原理,并结合工程经验,对这些核心概念进行分析、解释。针对具体的数学推导公式,深入剖析。本课程在第二部分涉及到多个概念,每个课程将配有细致的图示化解释,通俗易懂。

  • 工程实战下的设计原则和技巧
本课程重点介绍深度学习在实际工程实战时会遇到的一些问题,并针对这些问题,给出各种常用的解决技巧,另外,在设计网络时,也给出基本的设计原则,更加符合工程开发。

  • 更加直观的实战代码讲解
本课程对网络设计原则、模型讲解的过程中,会引入大量的深度学习代码,以 Python 语言为主,来对模型、设计技巧、原则等问题进行说明,更加直观。

作者寄语

相信每一个人都有一颗学习的心,任何一个人都不想被时代所抛弃。入行AI,可能是你想了多次后做下的决定。

这里笔者不言对错,但选择了就要坚持下去,为之努力才不负年华。相信,任何一个真正付出的人,都将得到回报。

也许不丰厚,但一定不亏。这里,笔者衷心的希望大家带着实践的精神去学习深度学习,用更多的创造精神和意识来利用AI技术改变世界,争取在新时代中留下你的身影。
扫码免费试读


最后,预祝每一位准备入行深度学习的朋友,均能够通过自身的学习与努力找到心仪的工作。如果大家有任何疑问和建议,也可以通过读者圈或者在我的知乎专栏【深度学习干货铺】留言与我交流,希望我们能够共同探讨、共同进步。

作者:王学宽(知乎ID:会写代码的好厨师),曾就职于海康威视研究院担任计算机视觉方向算法工程师,发表多篇学术论文、申请多项国家专利,参与多项图像、自然语言项目相关课题研发工作,在计算机视觉领域具有深厚的专业知识和工程开发经验。


    关注 CSDN大数据


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册