两本书作者跟广大流程员那样,在开始诗歌创作前须要去来一碗红酒。他们跳入车准备出发,Alex掏出他的Android要不然“OK Google”唤起语言副手,Mu操着他的法式英文指示到“去弯果红酒店”。手机这时马上显示出辨识的指示,并且晓得他们须要导航系统。接着它移出地图应用领域并给出多条路线计划,每一计划旁边会有估计的到达时间并自动选择最慢的公交线路。
好吧,这是两个假想的范例,因为他们一般在办公室喝自己的手磨红酒。但那个范例展示了在短短的几秒里,他们跟多个机器学习数学模型进行了可视化。
假如你从来没采用过机器学习,你会想,那个不就是程式设计吗?或是,到底机器学习是什么?首先,他们确实是采用C语言来同时实现机器学习数学模型,他们跟计算机其他领域那样,采用同样的C语言和硬体。但并非每一流程都用了机器学习。对第二个难题,准确表述机器学习就像表述什么是数学那样难,但他们试图在第一章提供一些简单的解释。
两个范例
他们日常可视化的绝大部分计算机流程可以采用最基本上的指示来同时实现。当你把两个货品加到科季夫时,你促发了B2C的电商流程来把两个货品ID和你的用户ID填入到两个叫做科季夫的资料库表单中。你能在没见到任何真正客户前来用最基本上的流程命令来实现那个功能。假如你发现你能这么做,所以你就不应该采用机器学习。
对机器学习科学家来说,幸运地的是绝大部分应用领域没所以容易。回到前面那个范例,想象下如何写两个流程来澄清唤起词例如“Okay, Google”,“Siri”,和“Alexa”。假如你在两个只有你和代码GUI的房间里写那个流程,你该怎么办?你可能会想象下面的流程
if input_command == Okey, Google: run_voice_assistant()
但实际上你能拿到的只是话筒里搜集到的原始音频讯号,可能是每秒钟44,000个样本点。所以须要些什么样的规则才能把那些样本点转成两个数组呢?或是简单点,判断那些讯号里是不是也就是说了唤起词。
假如你被那个难题赶跑了,不用担心。这就是他们为什么要机器学习。
虽然他们不晓得怎么告诉机器去把音频讯号转成相关联的数组,但他们自己能。他们能搜集两个巨大的数据季中包含了大量音频讯号,以及每一音频机型呢相关联他们要的唤起词。在机器学习里,他们不间接设计两个系统去鉴别唤起词,而要写两个灵活的流程,它的行为能根据在抹除集的时候改变。所以他们并非去间接写两个唤起词鉴别器,而要一个流程,当提供两个巨大的有标注的数据集的时候它能鉴别唤起词。你能认为这种方式是利用数据程式设计。换言之,他们须要用数据训练机器学习数学模型,其过程通常如下:
初始化两个几乎什么也不能做的数学模型;抓一些有标注的数据集(例如音频段落及其是否为唤起词的标注);修改数学模型使得它在抓取的数据集上能够更准确执行任务(例如使得它在判断那些抓取的音频段落是否为唤起词上判断更准确);重复以上步骤2和3,直到数学模型看起来不错。眼花缭乱的机器学习应用领域
机器学习背后的核心思想是,设计流程使得它能在执行的时候提升它在某任务上的能力,而并非有着固定行为的流程。机器学习包括多种难题的表述,提供很多不同的算法,能解决不同领域的各种难题。我们之前讲到的是两个讲监督学习应用领域到语言辨识的范例。
正因为机器学习提供多种工具能利用数据来解决简单规则不能或是难以解决的难题,它被广泛应用领域在了搜索引擎、无人驾驶、机器翻译、医疗诊断、垃圾邮件过滤、玩游戏、人脸辨识、数据匹配、信用评级和给图片加滤镜等任务中。
虽然那些难题各式各样,但他们有着共同的模式从而能被机器学习数学模型解决。最常见的描述那些难题的方法是通过数学,但不像其他机器学习和神经网络的书那样
用代码程式设计和用数据程式设计
那个范例灵感来自 Joel Grus 的一次 应聘面试. 面试官让他写个流程来玩Fizz Buzz. 这是两个小孩子游戏。玩家从1数到100,假如数字被3整除,所以喊’fizz’,假如被5整除就喊’buzz’,假如两个都满足就喊’fizzbuzz’,不然就间接说数字。那个游戏玩起来就像是:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 …传统的同时实现是这样的:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizzbuzz 31 32 fizz 34 buzz fizz 37 38 fizz buzz 41 fizz 43 44 fizzbuzz 46 47 fizz 49 buzz fizz 52 53 fizz buzz 56 fizz 58 59 fizzbuzz 61 62 fizz 64 buzz fizz 67 68 fizz buzz 71 fizz 73 74 fizzbuzz 76 77 fizz 79 buzz fizz 82 83 fizz buzz 86 fizz 88 89 fizzbuzz 91 92 fizz 94 buzz fizz 97 98 fizz buzz
对经验丰富的流程员来说那个太不够一颗赛艇了。所以Joel尝试用机器学习来同时实现那个。为了让流程能学,他须要准备下面那个数据集:
数据 X [1, 2, 3, 4, …] 和标注Y [fizz, buzz, fizzbuzz, identity]训练数据,也就是系统输入输出的实例。例如 [(2, 2), (6, fizz), (15, fizzbuzz), (23, 23), (40, buzz)]从输入数据中抽取的特征,例如 x -> [(x % 3), (x % 5), (x % 15)].有了那些,Jeol利用TensorFlow写了两个分类器。对不按常理出牌的Jeol,面试官一脸黑线。而且那个分类器并非总是对的。
显然,用原子弹杀鸡了。为什么不间接写几行简单而且保证结果正确的Python代码呢?当然,这里有很多两个简单Python脚本不能分类的范例,即使简单的3岁小孩解决起来毫无压力。
喵vs汪
幸运地的是,那个正是机器学习的用武之地。他们通过提供大量的含有猫和狗的图片来程式设计两个猫狗检测器,一般来说它就是两个函数,它会输出两个大的正数假如图片里面是猫,一个大的负数假如是狗,假如不确信就输出两个0附近的。当然,这是机器学习能做的最简单范例。
机器学习最简要素
成功的机器学习有四个要素:数据、转换数据的数学模型、衡量数学模型好坏的损失函数和两个调整数学模型权重来最小化损失函数的算法。
数据。越多越好。事实上,数据是深度学习复兴的核心,因为复杂的非线性数学模型比其他机器学习须要更多的数据。数据的范例包括图片:例如你的手机图片,里面可能包含猫、狗、恐龙、高中同学聚会或是昨天的晚饭文本:邮件、新闻和微信聊天记录声音:有声书籍和电话记录结构数据:Jupyter notebook(里面有文本,图片和代码)、网页、租车单和电费表数学模型。通常数据和他们最终想要的相差很远,例如他们想知道照片中的人呢在高兴,所以他们须要把一千万像素变成两个高兴度的概率值。通常他们须要在数据上应用领域多个非线性函数(例如神经网络)损失函数。他们须要对比数学模型的输出和真实值之间的误差。损失函数帮助他们决定2017年底亚马逊股票会不会价值1500美元。取决于他们想短线还是长线,那个函数能很不那样。训练。通常两个数学模型里面有很多参数。他们通过最小化损失函数来学那些参数。不幸的是,即使他们做得很好也不能保证在新的没见过的数据上他们能仍然做很好。训练误差。这是数学模型在评估用来训练数学模型的数据集上的误差。那个类似于考试前他们在模拟试卷上拿到的分数。有一定的指向性,但不一定保证真实考试分数。测试误差。这是数学模型在没见过的新数据上的误差,可能会跟训练误差不很那样(统计上叫过拟合)。那个类似于考前模考次次拿高分,但实际考起来却失误了。(笔者之一曾经做GRE真题时次次拿高分,高兴之下背了一遍红宝书就真上阵考试了,结果最终拿了两个刚刚够用的低分。后来意识到这是因为红宝书里包含了大量的真题。)下面他们详细讨论一些不同的机器学习应用领域。
监督学习
监督学习描述的任务是,当给定输入x,如何通过在有标注输入和输出的数据上训练模译;给定本月公司财报数据,预测下个月该公司股票价格。
回归分析
回归分析也许是监督学习里最简单的一类任务。在该项任务里,输入是任意离散或连续的、单一或多个的变量,而输出是连续的数值。例如他们能把本月公司财报数据抽取出若干特征,如营收总额、支出总额以及是否有负面报道,利用回归分析预测下个月该公司股票价格。
假如他们把数学模型预测的输出值和真实的输出值之间的差别表述为残差,常见的回归分析的损失函数包括训练数据的残差的平方和或是绝对值的和。机器学习的任务是找到一组数学模型参数使得损失函数最小化。他们会在之后的章节里详细介绍回归分析。
分类
输出是离散的类别时,那个监督学习任务就叫做分类。分类在他们日常生活中很常见。例如他们能把本月公司财报数据抽取出若干特征,如营收总额、支出总额以及是否有负面报道,利用分类预测下个月该公司的CEO是否会离职。在计算机视觉领域,把一张图片辨识成众多物品类别中的某一类,例如猫、狗等。
动物的分类
给定两个实例被抽取出的若干特征作为输入,他们的分类数学模型能输出实例为各个类别的概率,并将概率最大的类别作为分类的结果。
标注
事实上,有一些看似分类的难题在实际中却难以归于分类。例如,把下面这张图无论分类成猫还是狗看上去都有些难题。
正如你所见,上图里既有猫又有狗。其实还没完呢,里面还有草啊、轮胎啊、石头啊等等。与其将上图仅仅分类为其中一类,倒不如把这张图里面他们所关心的类别都标注出来。比如,给定一张图片,他们希望晓得里面是否有猫、是否有狗、是否有草等。给定两个输入,输出不定量的类别,那个就叫做标注任务。
这类任务有时候也叫做多标签分类。想象一下,人们可能会把多个标签同时标注在自己的某篇技术类博客文章上,例如“机器学习”、“科技”、“C语言”、“云计算”、“安全与隐私”和“AWS”。这里面的标签其实有时候相互关联,比如“云计算”和“安全与隐私”。当一篇文章可能被标注的数量很大时,人力标注就显得很吃力。这就须要采用机器学习了。
搜索与排序
于特定的用户检索条目。那些排序结果能更好地为所包含检索条目的网页进行排序。
推荐系统
推荐系统与搜索排序关系紧密,并广泛应用领域于购物网站、搜索引擎、新闻门户网站等等。推荐系统的主要目标是把用户可能感兴趣的东西推荐给用户。推荐算法用到的信息多种多样,例如用户的自我描述、对过往推荐的反应、社交网络、喜好等等。下图展现了亚马逊网站对笔者之一有关深度学习类书籍的推荐结果。
搜索引擎的搜索条目自动补全系统也是个好范例。它可根据用户输入的前几个字符把用户可能搜索的条目实时推荐自动补全。在笔者之一的某项工作里,假如系统发现用户刚刚开启了体育类的手机应用领域,当用户在搜索框拼出”real”时,搜索条目自动补全系统会把”real madrid”(皇家马德里,足球球队)推荐在比通常更频繁被检索的”real estate”(房地产)更靠前的位置,而并非总像下图中这样。
序列学习
这类难题中,输入和输出不仅限于固定的数量。这类数学模型通常能处理任意长度的输入序列,或是输出任意长度的序列。当输入和输出都是不定长的序列时,他们也把这类数学模型叫做seq2seq,例如语言翻译数学模型和音频转录文本数学模型。以下列举了一些常见的序列学习案例。
语法分析
两个常见语法分析的范例是,给定两个本文序列,如何找出其中的命名实体,例如人物姓名、城市名称等。以下是两个这样的范例。其中Tom、Washington和Sally都是命名实体。
Tom wants to have dinner in Washington with Sally.
E – – – – – E – E
音频辨识
在音频辨识的难题里,输入序列通常都是话筒的声音,而输出是对通过话筒所说的话的文本转录。这类难题通常有两个难点,例如声音通常都在特定的采样率采样,因为声音和文本之间不存在一一相关联。换言之,音频辨识是一类序列转换难题。这里的输出往往比输入短很多。
—-D—-e–e–e—–p———– L—-ea——-r———ni—–ng–
文本转音频
这是音频辨识难题的逆难题。这里的输入是两个文本序列,而输出才是声音序列。因此,这类难题的输出比输入长。
机器翻译
机器翻译的目标是把一段话从一种语言翻译成另一种语言。目前,机器翻译时常会翻译出令人啼笑皆非的结果。主要来说,机器翻译的复杂程度非常高。同两个词在两种不同语言下的相关联有时候是多对多。另外,符合语法或是语言习惯的语序调整也另难题更加复杂。
非监督学习
上述的机器学习难题和应用领域场景都是基于监督学习的。与监督学习不同,非监督学习不须要训练数据被标识。以图片分析为例,对监督学习来说,训练数据里的图片须要被标识为狗、猫或是别的动物,如此一来,两个分类数学模型被训练后就能把一张新图片辨识为某种动物。而对非监督学习而言,例如聚类学习,能把一堆无标识的图片自动聚合成若干类,其中每类分别相关联一种动物。
以下他们简要介绍一些常见的非监督学习任务。
聚类难题通常研究如何把一堆数据点分成若干类,从而使得同类数据点相似而非同类数据点不似。根据实际难题,他们须要表述相似性。子空间估计难题通常研究如何将原始数据向量在更低维度下表示。理想情况下,子空间的表示要具有代表性从而才能与原始数据接近。两个常用方法叫做主成分分析。表征学习希望在欧几里得空间中找到原始对象的表示方式,从而能在欧几里得空间里表示出原始对象的符号性质。例如他们希望找到城市的向量表示,从而使得他们能进行这样的向量运算:罗马 – 意大利 + 法国 = 巴黎。生成对抗网络是最近两个很火的领域。这里描述数据的生成过程,并检查真实与生成的数据是否统计上相似。小结
机器学习是两个庞大的领域。他们在此无法也无需介绍有关它的全部。有了那些背景知识铺垫,你是否对接下来的学习更有兴趣了呢?
原文地址:机器学习概要 – 动手学深度学习 0.1 documentation
讨论欢迎来:MXNet/Gluon
欢迎转载