Google | 机器学习小白教程

对机器如何自学感到很困惑?这里提供对机器学习的综述以供参考。

最近谷歌的深度学习第二代引擎“TensorFlow”引来众人的关注,但也引来了关于人工智能领域的疑惑。机器学习究竟是什么?如何让机器自学?这里是一些谷歌内部人员提供的教程。

昨天,谷歌为众多的科技记者举办了一个第101期“机器学习”大会(Machine Learning 101)的活动。我是其中一员。虽然此次会议只是一个简要介绍,但是大部分涉及的内容仍然是很有技术性并且对于我以及在座的其他的一些记者来说还是很难完全掌握。

例如,当演讲者告诉你机器学习涉及的数学是很“简单”的时候或者以同样的方式来描述微积分的时候,他们口中的“容易”对于一个像我一样的外行来说是很困难的。

但是,我仍然找到一种方式来理解机器——电脑——是如何教自己识别物体、理解文本和口语等等。以下是我的笔记。

机器学习的构成部分

机器学习系统有三个主要部分组成,他们是:

· 模型:用来预测或者识别的系统

· 参数:模型执行决策时使用到的因子或者信息

· 学习者:一个能够首先调整这些参数,接着观察预测结果与实际结果之间的差异的系统

现在让我依据昨天Greg Gorrado讲到的东西,解释一下现实世界中实际存在的问题。Greg Corrado是谷歌的高级研究科学家,也是谷歌深度学习团队的共同创立者。

想像你是一个老师,你想要找到学生学习的最佳时间,同时保证他们在考试中得到最好的成绩。你求助于机器学习。是的,这个问题对于它来说有点大材小用了。但是这只是一个简化的情况。

构造模型

所有的一切都起源于这个模型,一个机器学习系统会使用的预测方式。这个模型起初会被交给人来完成,至少对于这个简化的例子来说。在本例中,老师会告诉机器学习模型假定5个小时的学习时间能够保证一个完美的测试成绩。

模型本身依据这些参数来完成它的计算。在本例中,这些参数就是在学习中投入的时间和得到的测验成绩。可以用下面的方式来理解这些参数:

· 0 hours= 50% score

· 1 hour=60% score

· 2 hour=70% score

· 3 hour=80% score

· 4 hour=90% score

· 5 hour=100% score

机器学习系统会自动使用数学方程来找到方式表达以上的数据,从而有限的找到数据中的趋势线。这个昨天演讲中的一个例子:

提供初始输入

既然模型已经设定好了,基本数据输入完毕。接着,老师可能要输入不同学生在不同学习时间下的测试成绩。

在本例中,结果发现,这些分数与模型并不匹配,有的分数在预测的趋势线之上,有的分数在趋势线之下,如图:

现在,是时候让机器学习的“学习者”登场了。

学习者的学习过程

各个分数数据输入系统了,像这样的被输入到机器学习系统的数据通常被称为训练集或者训练数据,因为这些数据被机器学习系统的学习者部分使用来训练自己从而创造一个更好的模型。

这个学习者浏览数据,并且看到各个数据与初始模型之间的差距。然后他们使用更多的数据工具来调试其初始假设。例如,之前的理解方式可能会被改变为这样:

· 0 hours= 45% score

· 1 hour=55% score

· 2 hour=65% score

· 3 hour=75% score

· 4 hour=95% score

· 5 hour=100% score

这种新的预测重新生成以投入更多的学习时间来得到更好的分数。

这只是这种处理的一个例子,一个完全编造出来的例子。目的是为了阐述学习者对参数进行了小的调整来调节模型。我待会再解释这个部分。

调整和重复

现在系统又重新运作了,这次有了新的分数数据。而那些真实的分数数据将会被学习者用来校正修改后的模型。如果成功的话,这些分数会更靠近预测趋势线:

然而,这次过程不会达到完美。于是学习者再次调整参数,改变模型。新的数据会被输入,再次比较,学习者再次调试模型。

这种循环会持续重复直到最终模型有足够的理由相信它真的是在根据学习时间来预测测试成绩。

梯度下降法:机器学习如何保证预测得越来越好

谷歌的高级研究科学家Greg Corrado强调了大部分机器学习的很重要的部分是一个被称为“梯度下降”或者“梯度学习”的算法。它能够使系统一次又一次的做出小的调整直到得到正确的模型。

Corrado将其比作为爬一个很陡峭的山。你不想跑或者调,因为那样会很危险,并且容易犯错。相应地,你每次只向山顶移动一点。

记得我刚才说的“这涉及到的数学很容易”的那部分吗?显然对于那些懂得微积分和数学的人,这确实非常容易这其中涉及到了方程。

这其中真正的挑战是“计算马力”。这需要计算机很长的时间来完成刚刚提到的所有步骤。但是随着计算机运算越来越快,过去看起来不可能的机器学习已经变得很寻常。

如何识别猫

上面的例子很简单。正如我所说,让机器学习来预测测试成绩只是牛刀小试。但是同样的系统能够被用来做很复杂的事情,例如识别图片中的猫。

计算机不能像人类那样看事物。那么谷歌是如何让其识别物体的呢?

机器学习起到了至关重要的作用!这其中用到了同样的原理。你构建相似的能够识别图片中的猫的因素,颜色、形状等等。然后你将一些有猫的图片给计算机,然后观察模型的效果。

学习者然后进行调整,接着训练循环往复。但是猫或者其他物体的识别是很复杂的。为了模型的构建,这其中会涉及到很多的参数,你可能会发现为了让系统识别图像,这些参数的复杂性是难以想象的。

例如,这里是系统最终如何识别图片中地毯上的猫:

那个像画出来一样的图片被称为深度梦境(deep dream),它是在谷歌发布并公开关于机器学习如何识别物体的信息的深度梦境的代码中产生的图片。

这幅图片是当电脑识别出一只猫时,它的寻找模式,而不是实际的学习过程。但是如果机器真的能够看事物,这将会是对它如何看事物的一种提示。

顺便提一句,图片中对原始图片的改变是模型自己而不是研究人员创造的。它们首先试图找到一个事物的颜色、形状和其他特征集合并使用训练集来调整。

识别事件

为了说明这其中的复杂性,考虑一个这样的情况,如果你想要不仅仅识别物体,还要识别事件。谷歌解释说你不得不加入一些常识,一些人类的操作过程能够使机器学习理解各种各样的事物是如何添加到事件上的。

例如,像这样:

这里说明一下,机器学习看到了一个小人,一个篮子和一个鸡蛋。但是人们看到这些并知道这是一个寻找复活节彩蛋活动。

RankBrain 是什么情况

这些机器学习都适用于RankBrain吗?谷歌并没有涉及具体细节,事实上,在整个讨论过程中并没有提到。但在会谈中提到了之前没有发布的内容。

为什么?基本来说,为了竞争。谷歌分享了其中很多机器学习的内容,甚至在某些领域中涉及到了具体细节。但是对于机器学习在搜索中的工作谷歌并没有任何表示,这是为了避免泄露重要和独特的信息。

想要知道更多吗?

如果你希望知道更多,这里有谷歌的研究博文,文献和一些概要视频。

研究博文:http://googleresearch.blogspot.com/

文献:http://research.google.com/pubs/ArtificialIntelligenceandMachineLearning.html

视频:https://www.youtube.com/watch?v=l95h4alXfAA

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2015-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴小龙同學

时间工具类TimeUtil

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30...

3066
来自专栏菩提树下的杨过

遍历文件夹所有文件(示例)

//要引用 using System.Collections.Specialized; public StringCollection GetAllFile...

2159
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

1941
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3006
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1873
来自专栏吴伟祥

Java Calendar 类的时间操作 原

Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。

783
来自专栏海说

Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅。 1)...

2750
来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1171
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20510
来自专栏跟着阿笨一起玩NET

C# Stream 和 byte[] 之间的转换

631

扫码关注云+社区