请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

李沐:从头末尾引见机器学习,眼花纷乱的机器学习运用


1新智元引荐


本书作者跟广大程序员一样,在末尾写作前需求去来一杯咖啡。我们跳进车预备出发,Alex掏出他的安卓喊一声“OK Google”唤醒言语助手,Mu操着他的中式英语命令到“去蓝瓶咖啡店”。手机这时马上显示出辨认的命令,并且知道我们需求导航。接着它调出地图运用并给出数条道路方案,每条方案边上会有预估的到达工夫并自动选择最快的线路。

好吧,这是一个虚拟的例子,由于我们普通在办公室喝本人的手磨咖啡。但这个例子展现了在短短几秒钟里,我们跟数个机器学习模型停止了交互。

假如你从来没有运用过机器学习,你会想,这个不就是编程吗?或者,到底机器学习是什么?首先,我们的确是运用编程言语来完成机器学习模型,我们跟计算机其他范畴一样,运用异样的编程言语和硬件。但不是每个程序都用了机器学习。对于第二个成绩,准确定义机器学习就像定义什么是数学一样难,但我们试图在这章提供一些直观的解释。

一个例子

我们日常交互的大部分计算机程序可以运用最基本的命令来完成。当你把一个商品加进购物车时,你触发了电商的电子商务程序来把一个商品ID和你的用户ID插入到一个叫做购物车的数据库表格中。你可以在没有见到任何真正客户前来用最基本的程序指令来完成这个功能。假如你发现你可以这么做,那么你就不应该运用机器学习。

对于机器学习迷信家来说,侥幸的是大部分运用没有那么容易。回到后面那个例子,想象下如何写一个程序来回应唤醒词例如“Okay, Google”,“Siri”,和“Alexa”。假如你在一个只要你和代码编辑器的房间里写这个程序,你该怎样办?你能够会想像下面的程序
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 …

传统的完成是这样的:
In [1]:res = for i in range(1, 101): if i % 15 == 0: res.append('fizzbuzz') elif i % 3 == 0: res.append('fizz') elif i % 5 == 0: res.append('buzz') else: res.append(str(i))print(' '.join(res))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岁小孩处理起来毫无压力。









侥幸的是,这个正是机器学习的用武之地。我们经过提供大量的含有猫和狗的图片来编程一个猫狗检测器,普通来说它就是一个函数,它会输入一个大的负数假如图片外面是猫,一个大的负数假如是狗,假如不确信就输入一个0附近的。当然,这是机器学习能做的最简单例子。

机器学习最简要素

成功的机器学习有四个要素:数据、转换数据的模型、衡量模型好坏的损失函数和一个调整模型权重来最小化损失函数的算法。

    数据。越多越好。理想上,数据是深度学习复兴的核心,由于复杂的非线性模型比其他机器学习需求更多的数据。数据的例子包括


    图片:例如你的手机图片,外面能够包含猫、狗、恐龙、高中同窗聚会或者昨天的晚饭

    文本:邮件、旧事和微信聊天记录

    声响:有声书籍和电话记录

    结构数据:Jupyter notebook(外面有文本,图片和代码)、网页、租车单和电费表


    模型。通常数据和我们最终想要的相差很远,例如我们想知道照片中的人是不是在高兴,所以我们需求把一千万像素变成一个高兴度的概率值。通常我们需求在数据上运用数个非线性函数(例如神经网络)


    损失函数。我们需求对比模型的输入和真实值之间的误差。损失函数协助我们决议2017年底亚马逊股票会不会价值1500美元。取决于我们想短线还是长线,这个函数可以很不一样。


    训练。通常一个模型外面有很多参数。我们经过最小化损失函数来学这些参数。不幸的是,即便我们做得很好也不能保证在新的没见过的数据上我们可以照旧做很好。


    训练误差。这是模型在评价用来训练模型的数据集上的误差。这个相似于考试前我们在模拟试卷上拿到的分数。有一定的指向性,但不一定保证真实考试分数。

    测试误差。这是模型在没见过的新数据上的误差,能够会跟训练误差不很一样(统计上叫过拟合)。这个相似于考前模考次次拿高分,但实践考起来却失误了。(笔者之一曾经做GRE真题时次次拿高分,高兴之下背了一遍红宝书就真上阵考试了,结果最终拿了一个刚刚够用的低分。后来看法到这是由于红宝书里包含了大量的真题。)


下面我们详细讨论一些不同的机器学习运用。

监督学习

监督学习描画的义务是,当给定输入x,如何经过在有标注输入和输入的数据上训练模型而可以预测输入y。从统计角度来说,监督学习次要关注如何估计条件概率P(y|x)。在实践情形中,监督学习最为常用。例如,给定一位患者的CT图像,预测该患者能否得癌症;给定英文句子,预测出它的正确中文翻译;给定本月公司财报数据,预测下个月该公司股票价格。

回归分析

回归分析也许是监督学习里最简单的一类义务。在该项义务里,输入是恣意团圆或延续的、单一或多个的变量,而输入是延续的数值。例如我们可以把本月公司财报数据抽取出若干特征,如营收总额、支出总额以及能否有负面报道,应用回归分析预测下个月该公司股票价格。

假如我们把模型预测的输入值和真实的输入值之间的差别定义为残差,常见的回归分析的损失函数包括训练数据的残差的平方和或者相对值的和。机器学习的义务是找到一组模型参数使得损失函数最小化。我们会在之后的章节里详细引见回归分析。

分类

值得一提的是,回归分析所关注的预测往往可以解答输入为延续数值的成绩。当预测的输入是团圆的类别时,这个监督学习义务就叫做分类。分类在我们日常生活中很常见。例如我们可以把本月公司财报数据抽取出若干特征,如营收总额、支出总额以及能否有负面报道,应用分类预测下个月该公司的CEO能否会离任。在计算机视觉范畴,把一张图片辨认成众多物品类别中的某一类,例如猫、狗等。


动物的分类

给定一个实例被抽取出的若干特征作为输入,我们的分类模型可以输入实例为各个类别的概率,并将概率最大的类别作为分类的结果。

标注

理想上,有一些看似分类的成绩在实践中却难以归于分类。例如,把下面这张图无论分类成猫还是狗看上去都有些成绩。


正如你所见,上图里既有猫又有狗。其实还没完呢,外面还有草啊、轮胎啊、石头啊等等。与其将上图仅仅分类为其中一类,倒不如把这张图外面我们所关怀的类别都标注出来。比如,给定一张图片,我们希望知道外面能否有猫、能否有狗、能否有草等。给定一个输入,输入不定量的类别,这个就叫做标注义务。

这类义务有时分也叫做多标签分类。想象一下,人们能够会把多个标签同时标注在本人的某篇技术类博客文章上,例如“机器学习”、“科技”、“编程言语”、“云计算”、“安全与隐私”和“AWS”。这外面的标签其实有时分互相关联,比如“云计算”和“安全与隐私”。当一篇文章能够被标注的数量很大时,人力标注就显得很费劲。这就需求运用机器学习了。

搜索与排序

搜索与排序关注的成绩更多的是如何把一堆对象排序。例如在信息检索范畴,我们常常关注如何把一堆文档按照与检索条目的相关性排序。在互联网时代,由于搜索引擎的盛行,我们愈加关注如何对网页停止排序。互联网时代早期有一个著名的网页排序算法叫做PageRank。该算法的排序结果并不取决于特定的用户检索条目。这些排序结果可以更好地为所包含检索条目的网页停止排序。

引荐系统

引荐系统与搜索排序关系严密,并广泛运用于购物网站、搜索引擎、旧事门户网站等等。引荐系统的次要目的是把用户能够感兴味的东西引荐给用户。引荐算法用到的信息多种多样,例如用户的自我描画、对过往引荐的反应、社交网络、爱好等等。下图展现了亚马逊网站对笔者之一有关深度学习类书籍的引荐结果。


搜索引擎的搜索条目自动补全系统也是个好例子。它可根据用户输入的前几个字符把用户能够搜索的条目实时引荐自动补全。在笔者之一的某项工作里,假如系统发现用户刚刚开启了体育类的手机运用,当用户在搜索框拼出”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-----



文本转语音

这是语音辨认成绩的逆成绩。这里的输入是一个文本序列,而输入才是声响序列。因此,这类成绩的输入比输入长。

机器翻译

机器翻译的目的是把一段话从一种言语翻译成另一种言语。目前,机器翻译时常会翻译出令人啼笑皆非的结果。次要来说,机器翻译的复杂程度非常高。同一个词在两种不同言语下的对应有时分是多对多。另外,符合语法或者言语习气的语序调整也另成绩愈加复杂。

非监督学习

上述的机器学习成绩和运用场景都是基于监督学习的。与监督学习不同,非监督学习不需求训练数据被标识。以图片分析为例,对监督学习来说,训练数据里的图片需求被标识为狗、猫或者别的动物,如此一来,一个分类模型被训练后就能把一张新图片辨以为某种动物。而对非监督学习而言,例如聚类学习,可以把一堆无标识的图片自动聚合成若干类,其中每类分别对应一种动物。

以下我们简要引见一些常见的非监督学习义务。

    聚类成绩通常研讨如何把一堆数据点分成若干类,从而使得同类数据点相似而非同类数据点不似。根据实践成绩,我们需求定义相似性。

    子空间估计成绩通常研讨如何将原始数据向量在更低维度下表示。理想状况下,子空间的表示要具有代表性从而才能与原始数据接近。一个常用方法叫做主成分分析。

    表征学习希望在欧几里得空间中找到原始对象的表示方式,从而能在欧几里得空间里表示出原始对象的符号性质。例如我们希望找到城市的向量表示,从而使得我们可以停止这样的向量运算:罗马 - 意大利 + 法国 = 巴黎。

    生成对抗网络是最近一个很火的范畴。这里描画数据的生成过程,并检查真实与生成的数据能否统计上相似。

小结

机器学习是一个庞大的范畴。我们在此无法也无需引见有关它的全部。有了这些背景知识铺垫,你能否对接上去的学习更有兴味了呢?

*****

你知道吗?李沐和他的同事也开设了深度学习课程,引见深度学习模型,提供简单易懂的代码完成。“我们不是经过幻灯片来讲解,而是经过解读代码,实践动手调参数和跑实验来学习。”

北京工夫 9月9号星期六早10点到半夜12点,李沐将末尾他的第一讲,从上手到多类分类:

    斗鱼直播地址:https://www.douyu.com/jiangmen


    课前预习材料:https://zhuanlan.zhihu.com/p/29125290


(本文首发于知乎,获作者授权后转载,特此感激)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评6

scccs 2018-12-14 18:24:26 显示全部楼层
是Amazon的李沐大神吗?
回复

使用道具 举报

迷离苍穹 2018-12-14 19:22:40 显示全部楼层
这才是直播平台该有的作用啊
回复

使用道具 举报

apolo 2018-12-14 19:35:31 显示全部楼层
这个实际还在创建初期,很快机器学习的算法会有体系的呈现的
回复

使用道具 举报

国际军棋网 2018-12-14 19:37:51 显示全部楼层
内容很好,干货
回复

使用道具 举报

欧阳年年 2018-12-14 20:48:55 显示全部楼层
不错
回复

使用道具 举报

邦枝5葵 2018-12-15 07:01:17 显示全部楼层
加油!不要理那些键盘侠!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies