普通程序员如何入门深度学习
摘要: 作为一名软件工程师,我们应该活到老学到老,时刻与不断发展的框架、标准和范式保持同步。同时,还要能活学活用,在工作中使用最合适的工具,以提高工作效率。随着机器学习在越来越多的应用程序中寻得了一席之地,越来越多的程序员加入AI领域,那么,入行AI领域需要哪些技能呢?
人工智能到底有多火
我相信大家之所以能来看这篇文章,也间接说明了人工智能这几年的火爆。自从基于深度学习技术的算法2012年在ImageNet比赛中获得冠军以来,深度学习先是席卷了整个学术界,后又在工业界传播开来,一瞬间各大企业如果没有AI部门都不好意思对外宣传了。BAT中,百度宣布“All In AI”,阿里建立了达摩院及AI实验室,腾讯也在前不久会议上宣布“Ai In All”,并具有腾讯优图、AI Lab和微信AI实验室。2017年7月20日,国务院发布《新一代人工智能发展规划》,将人工智能上升为国家战略,为中国人工智能产业做出战略部署,对重点任务做出明确解析,抢抓重大机遇,构筑我国人工智能发展的先发优势。
技术的发展往往遵循一个可预期的模式,即先是萌芽,然后炒作,而后幻灭,接着才是技术成熟后的稳步爬升,最后到达应用高峰。研究分析机构Gartner每年都会推出这样一个分析新兴技术发展趋势的技术炒作周期报告。前段时间,Gartner发布了2017年的新兴技术炒作周期报告,报告聚焦了前端、后端与平台发展的三大趋势,提出了AI将无所不在(人工智能),体验将透明化和沉浸式(AR、VR),以及平台全面数字化(区块链)的观点,建议企业架构师和对技术创新有追求的人员应该积极探索和关注这三大趋势,从而了解掌握这三大趋势对自己公司和自己职业发展的未来影响。简单来说这三大趋势分别对应于括号中我备注的大家平时耳熟能详的词语。从曲线图可以看出,物联网、虚拟助手、深度学习、机器学习、无人车、纳米电子、认知计算以及区块链正处在炒作的高峰。实际上AR、VR属于计算机视觉,也可以归于人工智能范畴,因此总体上来说,未来人工智能将无处不在。
Gartner把深度学习、强化学习、常规人工智能、无人车、认知计算、无人机、会话式用户接口、机器学习、智能微尘、智能机器人、智能工作环境等均列为AI技术范畴。在人机大战等吸引眼球的活动助推下,很多AI技术目前正处在炒作的高峰期。比如深度学习、机器学习、认知计算以及无人车等。对比2016年的炒作周期曲线可以发现,有些太过超前的概念仍然不愠不火,比如智能微尘。有些概念因为炒作过高已经迅速进入到了幻灭期,比如商用无人机去年还处在触发期,今年就已经接近幻灭期边缘了。相对而言,正处在炒作高峰的深度学习和机器学习技术有望在2到5年内达到技术成熟和模式成熟。
除了人工智能这么火之外,对于软件工程师,尤其是移动端开发工程师,有一点我们更要关注,那就是移动端深度学习逐渐成为新的深度学习研究趋势。未来会有越来越多的基于深度学习的移动端应用出现,作为开发者的我们了解深度学习更有助于我们开发出优秀的应用,同时提升自身能力,积极抓住机会,应对未来各种变化。
什么是机器学习(Machine Learning,ML)?
深度学习的基础是机器学习,事实上深度学习只是机器学习的一个分支。因此我们要入门深度学习就要先了解一些机器学习的基础知识。机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。
有人曾举过一个例子,很形象生动,当你使用手机的语音识别进行唤醒时,有没有想过实现这一功能的全部内部流程呢?我们日常交互的大部分计算机程序,都可以使用最基本的命令来实现,但是基于机器学习的程序却没有那么简单,想象下如何写一个程序来回应唤醒词,例如“Okay,Google”,“Siri”,和“Alexa”。如果在一个只有你自己和代码编辑器的房间里,仅使用最基本的指令编写这个程序,你该怎么做?不妨思考一下……这个问题非常困难。你可能会想像下面的程序:
ifinput_command=='Okey,Google':
run_voice_assistant()
但实际上,你能拿到的只有麦克风里采集到的原始语音信号,可能是每秒44,000个样本点。怎样才能识别出语音内容?或者简单点,判断这些信号中是否包含唤醒词。
如果你被这个问题难住了,不用担心。这就是我们为什么需要机器学习。
虽然我们不知道怎么告诉机器去把语音信号转成对应的字符串,但我们自己可以。换句话说,就算你不清楚怎么编写程序,好让机器识别出唤醒词“Alexa”,你自己完全能够 识别出“Alexa”这个词。由此,我们可以收集一个巨大的数据集(dataset),里面包含了大量语音信号,以及每个语音型号是否 对应我们需要的唤醒词。使用机器学习的解决方式,我们并非直接设计一个系统去准确地 辨别唤醒词,而是写一个灵活的程序,并带有大量的参数(parameters)。通过调整这些参数,我们能够改变程序的行为。我们将这样的程序称为模型。总体上看,我们的模型仅仅是一个机器,通过某种方式,将输入转换为输出。在上面的例子中,这个模型的输入是一段语音信号,它的输出则是一个回答{yes, no},告诉我们这段语音信号是否包含了唤醒词。
如果我们选择了正确的模型,必然有一组参数设定,每当它听见“Alexa”时,都能触发yes的回答;也会有另一组参数,针对“Apricot”触发yes。我们希望这个模型既可以辨别“Alexa”,也可以辨别“Apricot”,因为它们是类似的任务。这时候你大概能猜到了,如果我们随机地设定这些参数,模型可能无法辨别“Alexa”,“Apricot”,甚至任何英文单词。在而大多数的深度学习中,学习就是指在训练过程中更新模型的行为(通过调整参数)。
换言之,我们需要用数据训练机器学习模型,其过程通常如下:
1.初始化一个几乎什么也不能做的模型;
2.抓一些有标注的数据集(例如音频段落及其是否为唤醒词的标注);
3.修改模型使得它在抓取的数据集上能够更准确执行任务;
4.重复以上步骤2和3,直到模型看起来不错。
什么是机器学习算法?从本质上讲,机器学习采用了可以从数据中学习和预测数据的算法。这些算法通常来自于统计学,从简单的回归算法到决策树等等。
什么是机器学习模型?一般来说,它是指在训练机器学习算法后创建的模型构件。一旦有了一个经过训练的机器学习模型,你就可以用它来根据新的输入进行预测。机器学习的目的是正确训练机器学习算法来创建这样的模型。
机器学习已广泛应用于数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人等领域。虽然深度学习技术的发展,也促进了语音和文本领域的发展,但变化最显著的还是属于计算机视觉领域。而且由于作者是做计算机视觉的,因此这里也没法深入介绍语音和自然语言处理领域的过多细节,就简要介绍下计算机视觉领域的技术发展和相关的应用,后续的实验环节,大部分也会是基于深度学习的图像应用为主。
机器学习四要素
针对识别唤醒语的任务,我们将语音片段和标注(label)放在一起组成数据集。接着我们训练一个机器学习模型,给定一段语音,预测它的标注。这种给定样例预测标注的方式,仅仅是机器学习的一种,称为监督学习。深度学习包含很多不同的方法,我们会在后面的章节讨论。成功的机器学习有四个要素:数据、转换数据的模型、衡量模型好坏的损失函数和一个调整模型权重来最小化损失函数的算法。
数据(Data)
越多越好。事实上,数据是深度学习复兴的核心,因为复杂的非线性模型比其他机器学习需要更多的数据。
模型(Models)