从Caffe开始深度学习实战,徒手hack代码乐趣更多

简介: 阿里云工程师卜居接受CSDN记者专访,介绍了他在深度学习领域的实践经验和成长心得,以及完成Caffe著作背后的原因和故事。 从Geoffrey Hinton 2006年的论文算起,这一波深度学习(DL)浪潮才10年,而如果只算国内,深度学习的流行也不过5年,尽管如此,深度学习现在已经扎根中国互联网,成为BAT、京东、360、今日头条等公司的基础技术和战略技术,与之伴随的,则是深度学习技术人员

阿里云工程师卜居接受CSDN记者专访,介绍了他在深度学习领域的实践经验和成长心得,以及完成Caffe著作背后的原因和故事。

从Geoffrey Hinton 2006年的论文算起,这一波深度学习(DL)浪潮才10年,而如果只算国内,深度学习的流行也不过5年,尽管如此,深度学习现在已经扎根中国互联网,成为BAT、京东、360、今日头条等公司的基础技术和战略技术,与之伴随的,则是深度学习技术人员的快速成长,例如,阿里云工程师卜居(赵永科)(博客:http://blog.csdn.net/kkk584520 ),2014年才开始接触深度学习实战,如今已在深度学习及计算优化方面方面有很独到的见解。卜居在最近写了一本浓缩其深度学习实战经验的书——《深度学习—21天实战Caffe》,该书获得了机器学习前辈的肯定。日前,卜居接受CSDN记者专访,介绍了他在深度学习领域的实践经验和成长心得,以及完成Caffe著作背后的原因和故事。

卜居认为,深度学习具备强大的表达能力和灵活多变的模型结构,并在各种硬件加速方案的支撑下不断成熟,而Caffe具有高效的C++/CUDA实现、Matlab/Python接口、独特的网络描述方式、清晰的代码框架等优势,徒手hack代码的乐趣更多,同时Caffe框代码于稳定,掌握了阅读技巧可以事半功倍,因而可以作为初学者学习的第一个深度学习框架,由此逐步深入了解使用C++/CUDA代码实现深度学习的计算过程。

谈到新书《深度学习—21天实战Caffe》,卜居表示,这是一本透过源码解读深度学习的书,也是一本注重“实战”的书。读者可以从本书中学习Caffe设计模式、编程技巧,以及深度学习最新的进展和生产环境批量部署等内容。而书中的一些思考题需要深入实践和思考之后才能得到答案,这可以让读者养成独立思考的习惯,从而更加从容地面对实际问题。

此外,对于不同的硬件加速方案,卜居认为,深度学习本身在不断演进,没有哪个计算架构能够一劳永逸,得到某方面优势会丧失另一部分特性,最终起决定作用的仍然是应用需求,例如批量离线处理更适合利CPU/GPU集群的规模优势,而在线应用、移动端应用更适合利用FPGA/ASIC的低功耗、低延迟特性。

以下为采访实录:
卜居与深度学习
CSDN:请介绍您自己,您是如何与深度学习结缘的,它的哪些特质吸引您?

卜居:大家好,我博客笔名是卜居(出自《楚辞》),在阿里花名是以亭(《镜花缘》探花唐敖之字),真名赵永科,2014年毕业于中国科学院大学,目前就职于阿里云计算有限公司高性能计算团队,从事CPU/GPU/FPGA上的计算优化工作。

我最早接触“神经网络”、“深度学习”还是在中科院微波成像实验室从事现代信号处理工作期间,通过阅读Simon Heykin的大部头著作《Adaptive Filter Theory》《Neural Networks : A Comprehensive Foundation》,初次了解其设计理念,但当时仅仅停留在一些抽象理论上,一直希望有机会将它们应用到实际项目中。

直到2014年我到(当时我们团队的名称)阿里巴巴集团核心系统部专用计算组实习,看到周围同事在用Caffe做深度学习算法优化,而且已经有很多内部项目(即后来的拍立淘、OCR等)在使用该框架。当时首先被名字吸引:“快速特征植入的卷积结构”(Convolutional Architecture for Fast Feature Embedding),谐音“咖啡”。当时的Caffe还只是雏形,我看了一遍代码后深深被其设计所吸引,高效的C++/CUDA实现、Matlab/Python接口、独特的网络描述方式、清晰的代码框架……当时对深度学习的认识一下子从教科书上的抽象概念落地到实实在在的代码实现,甚至对其稍作修改就可以应用于线上生产环境,直接面向广大用户!也是从那个时候,我开始关注每年的ILSVRC比赛,看到计算机视觉领域逐渐接受深度学习方法,并随后在语音识别、自然语言处理取得巨大成功,意识到这次深度学习高潮不是泡沫,而是逐渐迈向成熟的标志。

现在,深度学习强大的表达能力、灵活多变的模型结构、在CPU/GPU/FPGA/ASIC上加速方案等,都是吸引我的闪光点。

CSDN:阿里巴巴的很多业务都使用了深度学习技术,能否介绍和您的工作有直接关系的技术环节包括哪些?

卜居:在阿里云我们组主要是计算平台支持和计算效率提升两个环节。

计算平台支持方面,我们的HPC支持当前大多数主流计算框架(Caffe/Torch/Theano/MxNet/TensorFlow/……),利用IB+双万兆网络实现多机互联,提供多机多卡并行训练系统,最近使用专门为深度学习定制的Tesla M40 GPU加速器将单节点计算能力提升到16 TFLOPS。

计算效率提升方面,我们自研了CUDA Native汇编器( https://bbs.aliyun.com/read/277465.html?spm=5176.bbsl355.0.0.dEWHEi ),进一步挖掘硬件计算能力,实现更高计算效率。我的同事 @念鸿 @耘路 在今年 GTC 上做了分享,得到与会同仁的广泛关注。

深度学习及实践经验
CSDN:目前深度学习的论文非常多,您会关注哪类论文?神经网络最近的哪些进展让您印象深刻?

卜居:我比较感兴趣的还是计算优化方面,包括计算体系结构优化和计算软件优化两类。

最近的ResNet实现了深达1000层的模型结构,这不禁让人思考:“深度学习”还可以多深?除了加深之外,网络结构也逐渐表现出了生物特征,例如出现了分形结构( https://arxiv.org/abs/1605.07648 ),这些让人愈发感受到自然之美、生命之美。

CSDN:ICML、CVPR上来自Deepmind等大公司的论文比较出彩,这其中不乏大公司投入比较大要求少的因素,比如LeCun说目前Facebook对FAIR还没有盈利要求,能否介绍您的团队如何要求DL研究的投入?

卜居:我不敢妄谈公司战略,单从个人角度谈下。

DL不仅是我在阿里云高性能计算团队工作时需要了解的内容,同时也是我个人爱好,对于论文和前沿的技术一般是用业余时间学习,工作时间更多是面向用户需求。在阿里云有得天独厚的研究条件,我们有大规模GPU集群可以折腾,周围许多同事自己攒机体验最新的硬件(GPU、FPGA),研发氛围浓厚,讨论问题热烈,都是自发行为。

总体来看,大公司在数据规模、基础设施方面有较大优势,初创团队一般在业务算法、模型调参方面更有优势。
_
CSDN:论文虽多,深度学习理论体系却不似SVM那么优美,在很多实际应用场景中的效果也还不尽人意,从开发人员的角度,您如何看待当前深度学习技术的缺陷?成功应用深度学习有没有一些“黄金法则”?

卜居:深度学习不需要专门特征工程师,降低了模型设计门槛,但对于调超参“黑科技”方面,经验仍然很重要,不然会经常出现使用了深度学习技术效果反而不如传统方法的尴尬局面。

模型参数远大于数据量时,相当于求解一个欠定方程,存在多解的可能性大,容易产生过拟合问题。
模型参数远小于数据量时,相当于求解超定方程,可能无解,或者有解但准确率很低,这属于欠拟合问题。
模型参数与数据量匹配时,相当于求解恰定方程,既能避免过拟合,又能兼顾准确率,但模型参数量和数据量怎样才能做到匹配,是一个工程问题。
所以,如果你选择用某个模型处理数据,那么应该考虑这个因素,越大的模型越难训练,因为需要与之匹配的数据量、一系列避免过拟合的方法才能训练得到一个较为理想的模型。幸运的是,我们可以将大模型首先在较大的数据集(如ImageNet)上预训练,得到模型,再对特定数据集(如人脸数据)进行精调(fine-tuning),即可得到较为理想的结果。

深度学习目前的应用场景只是冰山一角,对于更多传统领域的应用,一方面需要引起该领域工程师对深度学习技术的关注,另一方面要重视数据,作为待开发的矿产资源。

CSDN:您曾经做过CNN硬件加速的分享,重点谈了阿里云用到的FPGA方案,但目前还有很多ASIC的尝试,包括Google的TPU、中科院的寒武纪等,同时考虑到神经网络的应用越来越广,比如LSTM在语音、机器翻译中的应用,您认为未来DL平台应当是什么样的架构,主流的加速方案是什么,应当具备哪些特性?

卜居:阿里云HPC团队是一个既注重技术创新、又贴近用户实际业务的团队,我们在平台选择方面,会首先根据用户需求进行优化和定制,而一些通用的模块则逐渐沉淀成为公共服务。

DL本身在不断演进,没有哪个计算架构能让DL一劳永逸,得到某方面优势会丧失另一部分特性,最终起决定作用的仍然是应用需求,例如批量离线处理更适合利CPU/GPU集群的规模优势,而在线应用、移动端应用更适合利用FPGA/ASIC的低功耗、低延迟特性。

CSDN:阿里云已经在用Docker来提供DL服务,您认为DL任务中使用Docker有哪些坑需要填好?

卜居:Docker 的优点在于一次开发,处处部署,简化了开发测试环境与生产环境的迁移。目前已经有越来越多用户选择Docker,越来越多开源DL框架开始支持Docker部署,进一步降低了这些框架使用难度。Docker本身也在不断发展中,存在一些坑也是正常的,对于个人用户而言Docker基本坑都已经填好,是时候学习和掌握这门技术了。

关于“21天实战Caffe”

_

CSDN:深度学习开源工具众多,您的新书写的是Caffe,而您最近的博客在写TensorFlow,能否介绍您尝试过哪些DL框架?如何看待它们的优缺点?

卜居:在阿里云HPC平台上我们支持当前大多数主流计算框架(Caffe/Torch/Theano/MxNet/TensorFlow/……),我个人都使用过这些工具,还通读过其中几个框架的源码。

Caffe可以作为初学者学习的第一个深度学习框架,因为代码组织较规范,徒手hack代码的乐趣更多。但相比之下所需依赖库比较多,适合在固定计算平台(如服务器、带GPU的台式机)上运行。

TensorFlow提供了更灵活的设计,不仅可以部署在服务器端,对资源受限的硬件支持也更好,例如内置了定点化运算库,适合做移动、嵌入式设备上的DL应用。

CSDN:从KDnuggets的统计来看,用得最多的似乎是Pylearn2而不是Caffe,能否进一步介绍您的新书选择写Caffe的原因?

卜居:诚然,从上述统计结果看,Caffe受欢迎程度可能不及Pylearn2、Theano。但我们在企业一线生产环境统计的结果来看,直接使用Pylearn2、Theano接生产任务的应用几乎是凤毛麟角。性能是一个关键的因素。

新书选择Caffe,是希望读者不仅知其然,更要知其所以然,知道怎样使用 C++/CUDA代码实现深度学习的计算过程。

CSDN:Caffe的架构还在发展,社区文档也在不断完善,您为什么会在现在写Caffe的书?这本书适合的阅读对象是谁?读者需要一些知识基础吗?

卜居:从诞生到现在已经过去2年时间,Caffe经历过很多变化,框架代码其实变动不大,掌握了阅读技巧可以事半功倍,写这本书是希望更多读者可以加入hack Caffe、改进Caffe的行列中。

建议读者具备高等数学、线性代数、概率论等知识水平。编程方面,建议读者至少具备C++、Python、MATLAB基础。对于本科生,建议大二以上阅读本书。研究生、博士生理论基础达标,可以从本书中学习Caffe设计模式、编程技巧方面内容,充实自己的科研生活。企业一线工程师,可以通过本书了解深度学习最新的进展和生产环境批量部署等内容。

CSDN:您认为这本书的最大的亮点是什么?

卜居:这是第一本透过源码解读深度学习的书,也是一本注重“实战”的书。

CSDN:如果开发者能完全吸收书中的营养,21天之后的DL水平是怎么样的?

卜居:本书不是一部让读者从0开始,21天之后精通 Caffe 的“武林秘籍”,更像是游戏攻略,可以让读者更快地找到捷径,避免在原地徘徊。每章后面的思考题,有些是需要深入实践和思考之后才能得到答案的。相信通过这些锻炼,读者可以养成独立思考的习惯,面对实际问题时更加胸有成竹。

CSDN:开发人员在读完这本书之后,如何继续提升DL技能?还有一些DL书籍可以推荐?

卜居:DL修行道阻且长,要有扎实的数学基础、精湛的编程技术,还要有广阔的视野,不断吸取其他领域的营养。推荐继续阅读其他ML/DL大部头著作(例如Youshua Bengio的《Deep Learning》值得深入阅读),以及该领域的经典论文。

笔耕收获
CSDN:能否介绍您写这本书的最大挑战和收获?

卜居:克服惰性。写书后,我养成了早起的习惯,每天精神了许多。

CSDN:从您2008年发表第一篇CSDN博客文章,到现在已经8年,能否介绍您坚持写博客的动力和收获、心得?博客创作对您的技术工作和完成著作有多大的帮助?

卜居:2008年我还是在大一、大二刚刚学习编程的阶段,每期《程序员》、《电脑报》、《黑客 X 档案》都要细细阅读。偶然的机会看到CSDN上面的一些博客写得很好,于是也注册了一个号,尝试自己写文章。在此之前我写文章都是发表在QQ空间、人人网,发一些编程相关的文章不太“合群”,于是逐渐淡出了这些圈子,全面转向CSDN。

早期的文章不成体系,很少坚持。真正开始写系列文章是从研究生开始,结合自己学习CUDA的心得体会,整理了十篇左右,反响不错。后来又整理了关于Zynq开发的系列文章,访问量暴增,进一步增加了写博客的动力和信心。再后来毕业后参加工作,接触 DL,学习Caffe、TensorFlow,这时的博客更像笔记,比较随性。

写博客最大的收获,是查资料时可以先从自己博客中找,如果Cache命中,直接返回;否则再找其他人博客,学习后收藏。博客相比互联网上零散知识点而言更有凝聚性,可以集中解决一类问题,习惯从博客中找答案可以触类旁通。

此外,写博客也会认识更多同行者,可以在交流之间取长补短,相互促进,并打开视野,这对工作和学习有很大帮助。

原文链接:
http://geek.csdn.net/news/detail/88598?utm_source=tuicool&utm_medium=referral

阿里云 HPC 产品页:
https://www.aliyun.com/product/hpc

Nvidia Kepler GPU上的性能极致优化(念鸿):
http://www.atatech.org/articles/58029

为什么要写一个GPU的汇编器(长仁):
http://www.atatech.org/articles/58106

【阿里集团卜居深度解析】卷积神经网络的硬件加速:
https://zhuanlan.zhihu.com/p/21430333?refer=dlclass
http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324711&idx=1&sn=8d833edfa7d856f0fc8db1d82ba0ad11&scene=0#wechat_redirect

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
29天前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
37 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
53 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
27天前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
62 2
|
1月前
|
机器学习/深度学习 算法 算法框架/工具
深度学习在图像识别中的应用及代码示例
【9月更文挑战第32天】本文将深入探讨深度学习在图像识别领域的应用,包括其原理、技术、优势以及挑战。我们将通过一个简单的代码示例,展示如何使用深度学习技术进行图像识别。无论你是初学者还是有经验的开发者,都可以从中获得启发和帮助。让我们一起探索这个充满无限可能的领域吧!
66 8
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从基础到实战
【9月更文挑战第19天】本文将带你走进深度学习的世界,从基础概念入手,逐步深入到实战应用。我们将通过简单易懂的语言和生动的比喻,让你轻松理解深度学习的原理和应用场景。同时,我们还为你准备了一些实用的代码示例,帮助你快速入门深度学习,开启你的AI之旅。
59 10
|
2月前
|
机器学习/深度学习 算法框架/工具 Python
深度学习在图像识别中的应用及其代码实现
【9月更文挑战第24天】本文将探讨深度学习在图像识别领域的应用,并展示如何通过代码实现这一过程。我们将介绍深度学习的基本原理,以及它在图像识别中的优势和挑战。然后,我们将通过一个简单的代码示例,展示如何使用深度学习进行图像识别。最后,我们将讨论深度学习在未来图像识别中的潜力和可能的发展方向。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从基础到实战
【9月更文挑战第23天】本文将带你走进深度学习的世界,从基本概念到实际应用,一步步揭示深度学习的神秘面纱。我们将通过实例和代码示例,帮助你理解和掌握深度学习的核心技术和方法。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起探索深度学习的奥秘吧!
42 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
59 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】深度学习的概述及应用,附带代码示例
深度学习(Deep Learning,简称DL)是机器学习领域中的一个重要分支,其目标是通过模拟人脑神经网络的工作机制,构建多层次的抽象特征表示,使机器能够自动从原始数据中提取关键信息,从而实现高精度的任务执行。深度学习通过多层神经网络结构及其训练方式,实现了从低级像素级别到高级概念级别的递进式知识层次。 深度学习的主要组件包括输入层、隐藏层和输出层。隐藏层的数量和层数决定了模型的复杂度和表达能力。在训练过程中,权重更新和梯度下降法是关键步骤,目的是最小化损失函数,提高预测精度。深度学习主要基于反向传播算法(BP Algorithm)来优化模型参数,通过正向传播、损失计算、反向传播和梯度下降等
157 8
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
152 1