很早之前,听雷军说过一句话:“站在风口上,猪都可以飞起来!”这句话用来形容现在的深度学习非常贴切。近几年来,深度学习的发展极其迅速,其影响力已经遍地开花,在医疗、自动驾驶、机器视觉、自然语言处理等各个方面大显身手。在深度学习这个世界级的大风口上,谁能抢先进入深度学习领域,学会运用深度学习技术,谁就能真正地在AI时代“飞”起来。
对于每一个想要开始学习深度学习方法的大学生、程序员或者其他转行的人来说,最头疼也是最迫切的需求就是深度学习该如何入门呢?下面笔者谈一谈自己的看法。
没错,就是放弃海量资料!在我们想要入门深度学习的时候,往往会搜集很多资料,什么某某学院深度学习内部资源、深度学习从入门到进阶百GB资源、某某人工智能教程,等等。很多时候我们拿着十几GB、几百GB的学习资源,将其踏踏实实地存储在某云盘里,等着日后慢慢学习。殊不知,有90%的人仅仅只是搜集资料、保存资料而已,放在云盘里一年半载都忘了去学习。躺在云盘的资料很多时候只是大多数人“以后好好学习”的自我安慰和自我安全感而已。而且,面对海量的学习资料,很容易陷入一种迷茫的状态,最直接的感觉就是:天啊,有这么多东西要学!天啊,还有这么多东西没学!简单来说,就是选择越多,越容易让人陷入无从选择的困境。
所以,第一步就是要放弃海量资料!转而选择一份真正适合自己的资料,好好研读下去、消化它!最终会发现,这样做收获很大。
深度学习的初学者,总会在学习路径上遇到困惑。先是那一系列框架,就让我们不知道该从哪儿着手。一堆书籍,也让我们犹豫该如何选择。即便去咨询专业人士,他们也总会轻飘飘地告诉我们一句“先学好数学”。怎样算是学好?深度学习是一门融合概率论、线性代数、凸优化、计算机、神经科学等多方面的复杂技术。学好深度学习需要的理论知识很多,有些人可能基础不是特别扎实,就想着从最底层的知识开始学起,概率论、线性代数、凸优化公式推导,等等。但是这样做的坏处是比较耗时间,而且容易造成“懈怠学习”,打击了学习的积极性,直到自己彻底放弃学习。真要是按照他们的要求,按部就班去学,没有个几年时间,我们连数学和编程基础都学不完。可到那时候,许多“低垂的果实”还在吗?
因为啃书本和推导公式相对来说比较枯燥,远不如直接搭建一个简单的神经网络更能激发自己学习的积极性。当然,不是说不需要钻研基础知识,只是说,在入门的时候,最好先从顶层框架上开始,有个系统的认识,然后再从实践到理论,有的放矢地查漏补缺机器学习的知识点。从宏观到微观,从整体到细节,更有利于深度学习快速入门!而且从学习的积极性来说,也起到了“正反馈”的作用。
谈完了深度学习入门的两个“放弃”之后,我们来看下一步,深度学习究竟该如何快速入门?
俗话说“工欲善其事,必先利其器!”学习深度学习,掌握一门合适的编程语言非常重要!最佳的选择就是Python。为什么人工智能、深度学习会选择Python呢?一方面是因为Python作为一门解释型语言,入门简单、容易上手。另一方面是因为Python的开发效率高,Python有很多库很方便用于人工智能算法,比如NumPy做数值计算,Sklearn做机器学习,Matplotlib将数据可视化,等等。总的来说,Python既容易上手,又是功能强大的编程语言。可以毫不夸张地说,Python可以支持从航空航天器系统的开发到小游戏开发的几乎所有领域。
这里笔者要为Python疯狂打call,因为Python作为万能的胶水语言,能做的事情实在太多了,并且它还异常容易上手。笔者大概花了50个小时学习了Python的基础语法,然后就开始动手编写代码去爬小说、爬网易云音乐的评论等程序。
总之,Python是整个学习过程中并不耗费精力的环节,但是刚开始背记语法确实是很无聊、很无趣的,需要坚持一下。
对于业界的人工智能项目,一般的原则都是“不重复造轮子”:不会去从零开始编写一套机器学习的算法,往往是选择采用一些已有的算法库和算法框架。以前,我们可能会选用已有的各种算法来解决不同的机器学习问题。现在随着深度学习的流行,一套神经网络框架TensorFlow、Keras等就可以解决几乎所有的机器学习问题,进一步降低了机器学习任务的开发难度。如果说Python是我们手中的利器,那么一个好的深度学习框架就无疑给了我们更多的资源和工具,方便我们实现庞大、高级、优秀的深度学习项目。
奥卡姆剃刀定律(Occam's Razor,Ockham's Razor),又称为“奥康的剃刀”,它是由14世纪英格兰的逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。这个原理称为“如无必要,勿增实体”,即“简单有效原理”。正如他在《箴言书注》2卷15题所说“切勿浪费较多东西去做事情,用较少的东西同样可以做好的事情。”
深度学习底层的结构实际很复杂。然而,作为应用者,我们只需要几行代码就能实现神经网络,加上数据读取和模型训练,也不过寥寥十来行左右的代码。感谢科技的进步,深度学习的用户接口,越来越像搭积木。只要我们投入适当的学习成本,就总能很快学会的。
TensorFlow是可以把一个模型代码量大大减少的框架,Keras就是让模型代码量可以少到令人震惊的一种框架,当用Keras写完第一个模型后,笔者的心情真的是无比激动。
本章介绍猫和狗分类的例子,如果这个分类器模型代码在Keras框架下实现,则只要寥寥几行代码就能把一个拥有着卷积层(Convolutional Layer,简称Conv Layer)、池化层(Pooling Layer,简称Pool Layer)和全连接层(Fully Connected Layer,简称FC Layer)并且使用Adam这个较高级优化方法的深度学习网络给编写出来。后续章节会让我们感受到在Keras框架下实现深度学习算法模型有多简单。
现在很多教程和课程往往忽视了实战的重要性,将大量的精力放在了理论介绍上。我们都知道纸上谈兵的典故,重理论、轻实战的做法是非常不可取的。就像上一小节说的第2个“放弃”一样,在具备基本的理论知识之后,最好就直接实践,编写代码解决实际问题。从学习的效率上讲,这样做的速度是最快的。
作为毫无AI技术背景、只会Python编程语言、从零开始入门深度学习的同学们,不要犹豫,上车吧。深度学习入门可以很简单!