第1章
深度学习的发展介绍

一日清晨,朝阳未热,少年小飞未醒,接到了一个陌生的电话,电话中念到“双眸剪秋水,一手弹春风,歌尽琵琶怨,醉来入梦中。”这首诗如何?电话中是一位声音甜美,自称小鱼的女生,听到这,昏沉朦胧的少年,突然振作了,既疑惑又激动,思考一会儿,紧张又兴奋地说道“虽然我不懂诗,但感觉剪和弹用得非常妙呀。请问我认识你吗?”“哎呀,不好意思,我打错电话啦,我还以为你是我闺蜜”,电话那头娇羞地答到。机智如小飞,肯定不会错过这美丽的错误,然后就立即回道……以上故事,是我将图灵在1950年《机器与智能》中关于“模仿游戏”[1]的一段改编,而上述诗句是来自于中科院院士张钹展示的机器人所做的诗。

随着现代技术的进步,特别是深度学习(Deep Learning)[2]的发展,完成上述任务并不再是天方夜谭。我们不妨和图灵一起思考,如果机器能够完成上述的问答,那小飞怎么去判断是人或者是机器呢?那所谓的意识又是什么呢?带着这些令人头痛但又激动的思考,我们现在就开始深度学习的入门之旅。

在一百多年前,可编程计算机第一次被构想出时,人们就想象着机器是否可以变得智能。如今,人工智能已是一个欣欣向荣的领域,拥有着许多实际应用及激动人心的研究主题。我们期望智能软件能够应用到自动化家居、语音识别、图像理解、医疗诊断及辅助基本科学的研究中去。

人与计算机就像天平的两端,机器善于计算,只要问题能被一系列数学规则形式化描述出来,人们就可以编写程序让机器执行。比如求解线性方程组,计算行星轨迹等,虽然这些任务很复杂,但对于机器而言却很简单。但有些问题虽然看似简单,但人却难以描述,比如人如何识别口语,文字或脸部图像。由于人难以描述这些本能就会的任务,虽然人处理很简单,但对于机器而言却难于上青天。而人工智能的目标就是去解决人容易执行,但很难形式化描述的任务。

在早期的人工智能中,我们想要机器智能地完成某项任务,我们首先需要使用形式化语言,硬编码关于该任务的知识;然后计算机通过这些形式化语言,自动使用逻辑推理规则去推理状态。但其中根本问题在于,我们要知道如何解决某项问题。比如,我们想教机器人下棋,我们知道确定的规则,也知道某些下棋的技巧,然后我们将各种规则、各种技巧通过编程实现出来,那么机器就学会了下棋。机器棋艺的高低,其实只是编程人员棋艺的高低,机器只是比人类运算快一些罢了。但有些事情,我们是很难描述清楚的,我喜欢一朵花,一首诗,一个人,但问我为什么喜欢,我却不知道。同样地,你想让机器去赏析一首诗,一朵花,一个人,那也是很难完成的任务。

深度学习便是这些更直觉问题的一种解决方案。这种解决方案允许电脑从经验中学习并依靠层次化概念去理解世界。通过从经验中收集知识,这种方法避免了人类手工地去形式化列举电脑所需的知识,层次化概念允许电脑从更简单的概念中学习更抽象的概念。也许现在你已经有点晕眩了,那我们就先轻松地讲一个故事吧。

认识小鱼同学后,为了博取小鱼同学的欢心,小飞就想亲手做一道黄焖鸡给小鱼。于是他就翻看了一下食谱,开始了“实验”:首先,准备各种食材;然后,将各种配菜预炒,再放入鸡块爆炒;爆炒入味后再放入一碗水,用锅盖焖10分钟,最终黄焖鸡就出锅了。小飞尝了尝亲手做的黄焖鸡,如你所想,才将鸡块入口,就吐了出来,因为实在太难吃了。但小飞并没有灰心,总结了一下,少放了点水,多加了点盐,再多炒了会儿鸡块,鼓起勇气一尝。好咸啊!虽然又失败了,但总体还是挺开心的,因为至少可以吃了。一鼓作气,再次总结,再次实验,忐忑地再次试尝,总算有了黄焖鸡该有的味儿了。起锅打包,小飞开心地去找小鱼同学去了……

从以上的故事中,我们发现了什么?发现小飞买了很多鸡肉,我们知道了,小飞一开始不会做黄焖鸡,但通过不断尝试,是可以做好黄焖鸡的。在此期间,小飞做了什么事呢?其实只是在调整,放多少水,放多少盐,煮多久,炒多久等,而这个过程就是一个简单的学习行为。同理,在机器学习中,我们并不是将做黄焖鸡的整个过程,每个细节都编程给机器,相反,我们把小飞的学习过程,复制给机器。做一次黄焖鸡,我们可以将其称为一个数据,而放水,放盐,煮多久,我们可以称为数据的特征(Feature),对于学习最朴素的理解其实就是调整数据特征各自的重要性。

我们再仔细剖析一下上面的故事,有一个过程叫作食材准备阶段,我们可以简单地将该阶段作为“黄焖鸡”数据的一个特征,当然,我们也可以将这一特征再细分一下,多少姜、多少辣椒配多少鸡块呢?而酱油的多少和水的多少又如何调配呢?那这些又如何影响爆炒和黄焖的时间呢?数据的特征直接影响着学习的难度及最终结果的好坏。如果我们先学习油盐酱醋的调配,将其组成配料特征,这样就简化了整个学习过程,而这种特征到特征的学习,我们就称为表征学习或表示学习(Representation Learning[3],“表征”是一个心理学词汇,翻译成表征更贴切些,但“表示”更常用些)。如果我们将做黄焖鸡的过程,细分得非常细致,也就是特征维度(数量)很高,那么每一维度对最终学习任务好坏的影响就越小,如香菇的量对黄焖鸡的好坏影响很小,我们很难通过调整香菇的量,去调整黄焖鸡的做法,而香菇特征也相互影响着其他特征的选择。因此我们先学习配菜这一简单的概念或特征,然后再学习一些更抽象的概念,一层一层的抽象,最终仅仅去学习“选材”“黄焖”这些特别抽象的特征,这就是所谓的深度学习