原文:https://valyrics.vas3k.com/blog/machine_learning/ 翻译: Larry

机器学习好比高中时代的性——人人都在谈论,但除了老师们知根知底外,只有很少的人能说清楚怎么回事。如果阅读网上关于机器学习的文章,你很可能会遇到两种情况:充斥各种定理的厚重学术三部曲(我搞定半个定理都够呛),或是关于人工智能、数据科学魔法以及未来工作的天花乱坠的故事。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zXux8gD2qljO1Ieibdnxvn99szHWNvTQf96SQGBvjdtXvID6QDNNx9LQA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

我决定写一篇酝酿已久的文章,对那些想了解机器学习的人做一个简单的介绍。不涉及高级原理,只用简单的语言来谈现实世界的问题和实际的解决方案。不管你是一名程序员还是管理者,都能看懂。

那我们开始吧!

  1. 为什么我们想要机器去学习?

现在出场的是Billy,Billy想买辆车,他想算出每月要存多少钱才付得起。浏览了网上的几十个广告之后,他了解到新车价格在2万美元左右,用过1年的二手车价格是1.9万美元,2年车就是1.8万美元,依此类推。

作为聪明的分析师,Billy发现一种规律:车的价格取决于车龄,每增加1年价格下降1000美元,但不会低于10000美元。

用机器学习的术语来说,Billy发明了“回归”(regression)——基于已知的历史数据预测了一个数值(价格)。当人们试图估算eBay上一部二手iPhone的合理价格或是计算一场烧烤聚会需要准备多少肋排时,他们一直在用类似Billy的方法——每人200g? 500?

是的,如果能有一个简单的公式来解决世界上所有的问题就好了——尤其是对于烧烤派对来说——不幸的是,这是不可能的。

让我们回到买车的情形,现在的问题是,除了车龄外,它们还有不同的生产日期、数十种配件、技术条件、季节性需求波动……天知道还有哪些隐藏因素……普通人Billy没法在计算价格的时候把这些数据都考虑进去,换我也同样搞不定。

人们又懒又笨——我们需要机器人来帮他们做数学。因此,这里我们采用计算机的方法——给机器提供一些数据,让它找出所有和价格有关的潜在规律。

终~于~见效啦。最令人兴奋的是,相比于真人在头脑中仔细分析所有的依赖因素,机器处理起来要好得多。

就这样,机器学习诞生了。

  1. 机器学习的3个组成部分

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zXXg3yyhNLshhLWbJedOU5mVbxk5PgibRHptToo8A1FJtiaeyWee51nUrA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

抛开所有和人工智能(AI)有关的扯淡成分,机器学习唯一的目标是基于输入的数据来预测结果,就这样。所有的机器学习任务都可以用这种方式来表示,否则从一开始它就不是个机器学习问题。

样本越是多样化,越容易找到相关联的模式以及预测出结果。因此,我们需要3个部分来训练机器:

  1. 数据

想检测垃圾邮件?获取垃圾信息的样本。想预测股票?找到历史价格信息。想找出用户偏好?分析他们在Facebook上的活动记录(不,Mark,停止收集数据~已经够了)。数据越多样化,结果越好。对于拼命运转的机器而言,至少也得几十万行数据才够吧。

获取数据有两种主要途径——手动或者自动。手动采集的数据混杂的错误少,但要耗费更多的时间——通常花费也更多。自动化的方法相对便宜,你可以搜集一切能找到的数据(但愿数据质量够好)。

一些像Google这样聪明的家伙利用自己的用户来为他们免费标注数据,还记得ReCaptcha(人机验证)强制你去“选择所有的路标”么?他们就是这样获取数据的,还是免费劳动!干得漂亮。如果我是他们,我会更频繁地展示这些验证图片,不过,等等……

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zX9PLd5sibj48BB6PjbnB7KRDJbpKT91uJlQmA6LEsY1pptvB7c8UC3zA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

好的数据集真的很难获取,它们是如此重要,以至于有的公司甚至可能开放自己的算法,但很少公布数据集。

  1. 特征

也可以称为“参数”或者“变量”,比如汽车行驶公里数、用户性别、股票价格、文档中的词频等。换句话说,这些都是机器需要考虑的因素。

如果数据是以表格的形式存储,特征就对应着列名,这种情形比较简单。但如果是100GB的猫的图片呢?我们不能把每个像素都当做特征。这就是为什么选择适当的特征通常比机器学习的其他步骤花更多时间的原因,特征选择也是误差的主要来源。人性中的主观倾向,会让人去选择自己喜欢或者感觉“更重要”的特征——这是需要避免的。

  1. 算法

最显而易见的部分。任何问题都可以用不同的方式解决。你选择的方法会影响到最终模型的准确性、性能以及大小。需要注意一点:如果数据质量差,即使采用最好的算法也无济于事。这被称为“垃圾进,垃圾出”(garbae in – garbage out,GIGO)。所以,在把大量心思花到正确率之前,应该获取更多的数据。

  1. 学习 V.S. 智能

我曾经在一些流行媒体网站上看到一篇题为“神经网络是否会取代机器学习?”的文章。这些媒体人总是莫名其妙地把线性回归这样的技术夸大为“人工智能”,就差称之为“天网”了。下图展示了几个容易混淆的概念之间的关系。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zXiasrYcJSho64kHoG9NmVm3SXdGNtThAHliafGQ5BSlvAv3CaAlriaibWLA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

  • “人工智能”是整个学科的名称,类似于“生物学”或“化学”。
  • “机器学习”是“人工智能”的重要组成部分,但不是唯一的部分。
  • “神经网络”是机器学习的一种分支方法,这种方法很受欢迎,不过机器学习大家庭下还有其他分支。
  • “深度学习”是关于构建、训练和使用神经网络的一种现代方法。本质上来讲,它是一种新的架构。在当前实践中,没人会将深度学习和“普通网络”区分开来,使用它们时需要调用的库也相同。为了不让自己看起来像个傻瓜,你最好直接说具体网络类型,避免使用流行语。

一般原则是在同一水平上比较事物。这就是为什么“神经网络将取代机器学习”听起来就像“车轮将取代汽车”。亲爱的媒体们,这会折损一大截你们的声誉哦。

机器能 机器不能
预测 创造新事物
记忆 快速变聪明
复制 超出任务范围
选择最优项 消灭全人类
  1. 机器学习世界的版图

如果你懒得阅读大段文字,下面这张图有助于获得一些认识。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zXzvPq1L2kgnFiaDNupdeG03c1Tya74Gr7icDXMicVXYenicVBbPibp6gYI5w/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

在机器学习的世界里,解决问题的方法从来不是唯一的——记住这点很重要——因为你总会发现好几个算法都可以用来解决某个问题,你需要从中选择最适合的那个。当然,所有的问题都可以用“神经网络”来处理,但是背后承载算力的硬件成本谁来负担呢?

我们先从一些基础的概述开始。目前机器学习主要有4个方向。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3uwDbdW4YET5hCPg7cMp9zXozbeWqHw1RmUicjx5JJSkj15YcE6utm7eysYezrvHnQOqeYfHPia78Fg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

Part 1
经典机器学习算法

经典机器学习算法源自1950年代的纯统计学。统计学家们解决的是诸如寻找数字中的模式、估计数据点间的距离以及计算向量方向这样的形式数学(formal math)问题。

今天,一半的互联网都在研究这些算法。当你看到一列“继续阅读”的文章,或者在某个偏僻的加油站发现自己的银行卡被锁定而无法使用时,很可能是其中的一个小家伙干的。

大型科技公司是神经网络的忠实拥趸。原因显而易见,对于这些大型企业而言,2%的准确率提升意味着增加20亿的收入。但是公司业务体量小时,就没那么重要了。我听说有团队花了1年时间来为他们的电商网站开发新的推荐算法,事后才发现网站上99%的流量都来自搜索引擎——他们搞出来的算法毫无用处,毕竟大部分用户甚至都不会打开主页。

尽管经典算法被广泛使用,其实原理很简单,你可以很容易地解释给一个蹒跚学步的孩子听。它们就像是基本的算术——我们每天都在用,甚至连想都不想。

有监督学习

经典机器学习通常分为两类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。

在“有监督学习”中,有一个“监督者”或者“老师”提供给机器所有的答案来辅助学习,比如图片中是猫还是狗。“老师”已经完成数据集的划分——标注“猫”或“狗”,机器就使用这些示例数据来学习,逐个学习区分猫或狗。

无监督学习就意味着机器在一堆动物图片中独自完成区分谁是谁的任务。数据没有事先标注,也没有“老师”,机器要自行找出所有可能的模式。后文再讨论这些。

很明显,有“老师”在场时,机器学的更快,因此现实生活中有监督学习更常用到。有监督学习分为两类:

  • 分类(classification),预测一个对象所属的类别;
  • 回归(regression),预测数轴上的一个特定点;

分类(Classification)

“基于事先知道的一种属性来对物体划分类别,比如根据颜色来对袜子归类,根据语言对文档分类,根据风格来划分音乐。”

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5oG4FGtCV4iaCC5AmYhEndDABqjoNAx9jYpXhqMicLMpTPkBGQIzqSBuA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

分类算法常用于:

  • 过滤垃圾邮件;
  • 语言检测;
  • 查找相似文档;
  • 情感分析
  • 识别手写字母或数字
  • 欺诈侦测

常用的算法:

  • 朴素贝叶斯(Naive Bayes)
  • 决策树(Decision Tree)
  • Logistic回归(Logistic Regression)
  • K近邻(K-Nearest Neighbours)
  • 支持向量机(Support Vector Machine)

机器学习主要解决“分类”问题。这台机器好比在学习对玩具分类的婴儿一样:这是“机器人”,这是“汽车”,这是“机器-车”……额,等下,错误!错误!

在分类任务中,你需要一名“老师”。数据需要事先标注好,这样机器才能基于这些标签来学会归类。一切皆可分类——基于兴趣对用户分类,基于语言和主题对文章分类(这对搜索引擎很重要),基于类型对音乐分类(Spotify播放列表),你的邮件也不例外。

朴素贝叶斯算法广泛应用于垃圾邮件过滤。机器分别统计垃圾邮件和正常邮件中出现的“伟哥”等字样出现的频次,然后套用贝叶斯方程乘以各自的概率,再对结果求和——哈,机器就完成学习了。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5uc0Vmov7BZp97lsOermqjhuopn5gleaOURibvib8yLyLu4ZVSlruMUQQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

后来,垃圾邮件制造者学会了如何应对贝叶斯过滤器——在邮件内容后面添加很多“好”词——这种方法被讽称为“贝叶斯中毒”(Bayesian poisoning)。朴素贝叶斯作为最优雅且是第一个实用的算法而载入历史,不过现在有其他算法来处理垃圾邮件过滤问题。

再举一个分类算法的例子。
假如现在你需要借一笔钱,那银行怎么知道你将来是否会还钱呢?没法确定。但是银行有很多历史借款人的档案,他们拥有诸如“年龄”、“受教育程度”、“职业”、“薪水”以及——最重要的——“是否还钱”这些数据。

利用这些数据,我们可以训练机器找到其中的模式并得出答案。找出答案并不成问题,问题在于银行不能盲目相信机器给出的答案。如果系统出现故障、遭遇黑客攻击或者喝高了的毕业生刚给系统打了个应急补丁,该怎么办?

要处理这个问题,我们需要用到决策树(Decision Trees),所有数据自动划分为“是/否”式提问——比如“借款人收入是否超过128.12美元?”——听起来有点反人类。不过,机器生成这样的问题是为了在每个步骤中对数据进行最优划分。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5nXokT1TLvDn2xLF8NeeJ1T7rLWqCbpbOIQeib20icGiaLmmCRRUOK39vg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

“树”就是这样产生的。分支越高(接近根节点),问题的范围就越广。所有分析师都能接受这种做法并在事后给出解释,即使他并不清楚算法是怎么回事,照样可以很容易地解释结果(典型的分析师啊)!

决策树广泛应用于高责任场景:诊断、医药以及金融领域。

最广为人知的两种决策树算法是 CART 和 C4.5.

如今,很少用到纯粹的决策树算法。不过,它们是大型系统的基石,决策树集成之后的效果甚至比神经网络还要好。这个我们后面再说。

当你在Google上搜索时,正是一堆笨拙的“树”在帮你寻找答案。搜索引擎喜欢这类算法,因为它们运行速度够快。

按理说,支持向量机(SVM) 应该是最流行的分类方法。只要是存在的事物都可以用它来分类:对图片中的植物按形状归类,对文档按类别归类等。

SVM背后的思想很简单——它试图在数据点之间绘制两条线,并尽可能最大化两条线之间的距离。如下图示:

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5Pj50sls2Orjah4icg6FDCKGk5xG63n7icMjibYpQYrP79pvATia3ZQmkOw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

分类算法有一个非常有用的场景——异常检测(anomaly detection),如果某个特征无法分配到所有类别上,我们就把它标出来。现在这种方法已经用于医学领域——MRI(磁共振成像)中,计算机会标记检测范围内所有的可疑区域或者偏差。股票市场使用它来检测交易人的异常行为以此来找到内鬼。在训练计算机分辨哪些事物是正确时,我们也自动教会其识别哪些事物是错误的。

经验法则(rule of thumb)表明,数据越复杂,算法就越复杂。对于文本、数字、表格这样的数据,我会选择经典方法来操作。这些模型较小,学习速度更快,工作流程也更清晰。对于图片、视频以及其他复杂的大数据,我肯定会研究神经网络。

就在5年前,你还可以找到基于SVM的人脸分类器。现在,从数百个预训练好的神经网络模型中挑选一个模型反而更容易。不过,垃圾邮件过滤器没什么变化,它们还是用SVM编写的,没什么理由去改变它。甚至我的网站也是用基于SVM来过滤评论中的垃圾信息的。

回归(Regression)

“画一条线穿过这些点,嗯~这就是机器学习”

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5keyKRunu4fP6eibym8qhCYLUJyfByPRBGB2arqq4WctoA00TaBt7Hzw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

回归算法目前用于:

  • 股票价格预测
  • 供应和销售量分析
  • 医学诊断
  • 计算时间序列相关性

常见的回归算法有:

  • 线性回归(Linear Regression)
  • 多项式回归(Polynomial Regression)

“回归”算法本质上也是“分类”算法,只不过预测的是不是类别而是一个数值。比如根据行驶里程来预测车的价格,估算一天中不同时间的交通量,以及预测随着公司发展供应量的变化幅度等。处理和时间相关的任务时,回归算法可谓不二之选。

回归算法备受金融或者分析行业从业人员青睐。它甚至成了Excel的内置功能,整个过程十分顺畅——机器只是简单地尝试画出一条代表平均相关的线。不过,不同于一个拿着笔和白板的人,机器是通过计算每个点与线的平均间隔这样的数学精确度来完成的这件事。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5Eaabe2icc5ic8CBr7oibABLUmcP4x8z1hjmY30uXes5PYDHNonhZRzkDQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

如果画出来的是直线,那就是“线性回归”,如果线是弯曲的,则是“多项式回归”。它们是回归的两种主要类型。其他类型就比较少见了。不要被Logistics回归这个“害群之马”忽悠了,它是分类算法,不是回归。

不过,把“回归”和“分类”搞混也没关系。一些分类器调整参数后就变成回归了。除了定义对象的类别外,还要记住对象有多么的接近该类别,这就引出了回归问题。
如果你想深入研究,可以阅读文章《写给人类的机器学习》[1](强烈推荐)。

无监督学习

无监督学习比有监督学习出现得稍晚——在上世纪90年代,这类算法用的相对较少,有时候仅仅是因为没得选才找上它们。

有标注的数据是很奢侈的。假设现在我要创建一个——比如说“公共汽车分类器”,那我是不是要亲自去街上拍上几百万张该死的公共汽车的照片,然后还得把这些图片一一标注出来?没门,这会花费我毕生时间,我在Steam上还有很多游戏没玩呢。

这种情况下还是要对资本主义抱一点希望,得益于社会众包机制,我们可以得到数百万便宜的劳动力和服务。比如Mechanical Turk[2],背后是一群随时准备为了获得0.05美元报酬来帮你完成任务的人。事情通常就是这么搞定的。

或者,你可以尝试使用无监督学习。但是印象中,我不记得有什么关于它的最佳实践。无监督学习通常用于探索性数据分析(exploratory data analysis),而不是作为主要的算法。那些拥有牛津大学学位且经过特殊训练的人给机器投喂了一大堆垃圾然后开始观察:有没有聚类呢?没有。可以看到一些联系吗?没有。好吧,接下来,你还是想从事数据科学工作的,对吧?

聚类(Clustering)

“机器会选择最好的方式,基于一些未知的特征将事物区分开来。”

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5GibIxXZYdamicfaiaOHU36dPYwusticKMqCwBwmG9hMLDiabrFm8hD7uvCA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

聚类算法目前用于:

  • 市场细分(顾客类型,忠诚度)
  • 合并地图上邻近的点
  • 图像压缩
  • 分析和标注新的数据
  • 检测异常行为

常见算法:

  • K均值聚类
  • Mean-Shift
  • DBSCAN

聚类是在没有事先标注类别的前提下来进行类别划分。好比你记不住所有袜子的颜色时照样可以对袜子进行分类。聚类算法试图找出相似的事物(基于某些特征),然后将它们聚集成簇。那些具有很多相似特征的对象聚在一起并划分到同一个类别。有的算法甚至支持设定每个簇中数据点的确切数量。

这里有个示范聚类的好例子——在线地图上的标记。当你寻找周围的素食餐厅时,聚类引擎将它们分组后用带数字的气泡展示出来。不这么做的话,浏览器会卡住——因为它试图将这个时尚都市里所有的300家素食餐厅绘制到地图上。

Apple Photos和Google Photos用的是更复杂的聚类方式。通过搜索照片中的人脸来创建你朋友们的相册。应用程序并不知道你有多少朋友以及他们的长相,但是仍可以从中找到共有的面部特征。这是很典型的聚类。

另一个常见的应用场景是图片压缩。当图片保存为PNG格式时,可以将色彩设置为32色。这就意味着聚类算法要找出所有的“红色”像素,然后计算出“平均红色”,再将这个均值赋给所有的红色像素点上。颜色更少,文件更小——划算!

但是,遇到诸如 蓝绿 这样的颜色时就麻烦了。这是绿色还是蓝色?此时就需要K-Means算法出场啦。

先随机从色彩中选出32个色点作为“簇心”,剩余的点按照最近的簇心进行标记。这样我们就得到了围绕着32个色点的“星团”。接着我们把簇心移动到“星团”的中心,然后重复上述步骤知道簇心不再移动为止。

完工。刚好聚成32个稳定的簇形。

给大家看一个现实生活中的例子:

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5m6YyZ5OFP1yuNia54Q4HzLeSoSadOEFNgWXibhviaFW7soHMuicibiajt9tQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

寻找簇心这种方法很方便,不过,现实中的簇并不总是圆形的。假如你是一名地质学家,现在需要在地图上找出一些类似的矿石。这种情形下,簇的形状会很奇怪,甚至是嵌套的。甚至你都不知道会有多少个簇,10个?100个?

K-means算法在这里就派不上用场了,但是DBSCAN算法用得上。我们把数据点比作广场上的人,找到任何相互靠近的3个人请他们手拉手。接下来告诉他们抓住能够到的邻居的手(整个过程人的站立位置不能动),重复这个步骤,直到新的邻居加入进来。这样我们就得到了第一个簇,重复上述过程直到每个人都被分配到簇,搞定。
一个意外收获:一个没有人牵手的人——异常数据点。

整个过程看起来很酷。

有兴趣继续了解下聚类算法?可以阅读这篇文章《数学科学家需要知道的5种聚类算法》[3].

就像分类算法一样,聚类可以用来检测异常。用户登陆之后的有不正常的操作?让机器暂时禁用他的账户,然后创建一个工单让技术支持人员检查下是什么情况。说不定对方是个“机器人”。我们甚至不必知道“正常的行为”是什么样,只需把用户的行为数据传给模型,让机器来决定对方是否是个“典型的”用户。

这种方法虽然效果不如分类算法那样好,但仍值得一试。

降维(Dimensionality Reduction)

“将特定的特征组装成更高级的特征 ”

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5gqRN5BWveTrt3tibiaSiaicgImFwKibSJic04T4RFtbRT2NBk8ia092lAgMAg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

“降维”算法目前用于:

  • 推荐系统
  • 漂亮的可视化
  • 主题建模和查找相似文档
  • 假图识别
  • 风险管理

常用的“降维”算法:

  • 主成分分析(Principal Component Analysis ,PCA)
  • 奇异值分解(Singular Value Decomposition ,SVD)
  • 潜在狄里克雷特分配( Latent Dirichlet allocation, LDA)
  • 潜在语义分析( Latent Semantic Analysis ,LSA, pLSA, GLSA),
  • t-SNE (用于可视化)

早年间,“硬核”的数据科学家会使用这些方法,他们决心在一大堆数字中发现“有趣的东西”。Excel图表不起作用时,他们迫使机器来做模式查找的工作。于是他们发明了降维或者特征学习的方法。

https://mmbiz.qpic.cn/mmbiz_gif/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5omwfOwdmrA1zzfT7CV6Niaul5cybKo4FFYmGG8NWKGobxvwTQib3RXicw/640?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1

将2D数据投影到直线上(PCA)

对人们来说,相对于一大堆碎片化的特征,抽象化的概念更加方便。举个例子,我们把拥有三角形的耳朵、长长的鼻子以及大尾巴的狗组合出“牧羊犬”这个抽象的概念。相比于特定的牧羊犬,我们的确丢失了一些信息,但是新的抽象概念对于需要命名和解释的场景时更加有用。作为奖励,这类“抽象的”模型学习速度更快,训练时用到的特征数量也更少,同时还减少了过拟合。

这些算法在“主题建模”的任务中能大显身手。我们可以从特定的词组中抽象出他们的含义。潜在语义分析(LSA)就是搞这个事情的,LSA基于在某个主题上你能看到的特定单词的频次。比如说,科技文章中出现的科技相关的词汇肯定更多些,或者政治家的名字大多是在政治相关的新闻上出现,诸如此类。

我们可以直接从所有文章的全部单词中来创建聚类,但是这么做就会丢失所有重要的连接(比如,在不同的文章中battery 和 accumulator的含义是一样的),LSA可以很好地处理这个问题,所以才会被叫做“潜在语义”(latent semantic)。

因此,需要把单词和文档连接组合成一个特征,从而保持其中的潜在联系——人们发现奇异值分解(SVD)能解决这个问题。那些有用的主题簇很容易从聚在一起的词组中看出来。

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5OlWdAqPOY7MNRZndVOd6kibiarj5tVEuGxsatV9vibAsjw7DicvjkrxwQQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

推荐系统协同过滤是另一个高频使用降维算法的领域。如果你用它从用户的评分中提炼信息,你就会得到一个很棒的系统来推荐电影、音乐、游戏或者你想要的任何东西。

这里推荐一本我最爱的书《集体编程智慧》(Programming Collective Intelligence),它曾是我大学时代的枕边书。

要完全理解这种机器上的抽象几乎不可能,但可以留心观察一些相关性:有些抽象概念和用户年龄相关——小孩子玩“我的世界”或者观看卡通节目更多,其他则可能和电影风格或者用户爱好有关。

仅仅基于用户评分这样的信息,机器就能找出这些高等级的概念,甚至不用去理解它们。干得漂亮,电脑先生。现在我们可以写一篇关于“为什么大胡子的伐木工喜欢我的小马驹”的论文了。

关联规则学习(Association rule learning)

“在订单流水中查找模式”

https://mmbiz.qpic.cn/mmbiz_png/uVKb5g2HE3tklibcQEdNn6aRUXnHwLNs5u8iaXybfk3o6ibWcjzMGmNr5j7ohwiaXTdqFqZuKj3VIEUtEiaEicNMUstg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

“关联规则”目前用于:

  • 预测销售和折扣
  • 分析“一起购买”的商品
  • 规划商品陈列
  • 分析网页浏览模式

常用的算法:

  • Apriori
  • Euclat
  • FP-growth

用来分析购物车、自动化营销策略以及其他事件相关任务的算法都在这儿了。如果你想从某个物品序列中发现一些模式,试试它们吧。

比如说,一位顾客拿着一提六瓶装的啤酒去收银台。我们应该在结账的路上摆放花生吗?人们同时购买啤酒和花生的频次如何?是的,关联规则很可能适用于啤酒和花生的情形,但是我们还可以用它来预测其他哪些序列? 能否做到在商品布局上的作出微小改变就能带来利润的大幅增长?

这个思路同样适用电子商务,那里的任务更加有趣——顾客下次要买什么?

不知道为啥规则学习在机器学习的范畴内似乎很少提及。经典方法是在对所有购买的商品进行正面检查的基础上套用树或者集合方法。算法只能搜索模式,但没法在新的例子上泛化或再现这些模式。

现实世界中,每个大型零售商都会建立了自己专属的解决方案,所以这里不会为你带来革命。本文提及的最高水平的技术就是推荐系统。不过,我可能没意识到这方面有什么突破。如果你有什么想分享的,请在评论中告诉我。

Part 2
强化学习

“将机器人扔进迷宫,让它找到出口”

https://i.vas3k.ru/7r2.jpg

如今用于:

  • 自动驾驶汽车
  • 机器人吸尘器
  • 游戏类
  • 自动交易
  • 企业资源管理

流行算法:Q-LearningSARSA,DQN,A3C遗传算法

最后,我们得到了看起来像真正的人工智能的东西。在很多文章中,强化学习被置于有监督和无监督学习之间。他们没有共同点!是因为名字吗

如果您的问题与数据根本不相关,但您有居住的环境,则可以使用强化学习。例如,视频游戏世界或无人驾驶汽车城市。

世界上所有道路规则的知识都不会教自动驾驶仪如何在道路上行驶。无论我们收集了多少数据,我们仍然无法预见所有可能的情况。这就是为什么其目标是最大程度地减少错误,而不是预测所有动作

请参考: https://youtu.be/qv6UVOQ0F44

在环境中生存是强化学习的核心思想。将可怜的小机器人扔进现实生活中,对它的错误进行惩罚,并为正确的行为予以奖励。我们教孩子的方式也一样吧?

这是更有效的方法-建立虚拟城市,让自动驾驶汽车首先从那里学习所有技巧。这就是我们现在训练自动驾驶仪的方式。根据真实地图创建虚拟城市,并挤满行人,让汽车学会杀死尽可能少的人。当机器人对这种人工GTA充满信心时,就可以在真实街道上进行测试了。好玩!

可能有两种不同的方法-基于模型的方法和无模型的方法

基于模型的意思是汽车需要记住地图或其零件。这是一种非常过时的方法,因为可怜的自动驾驶汽车不可能记住整个星球。

在无模型学习中,汽车不会记住每个动作,而是试图概括情况并理性地行动,同时获得最大的回报。

https://i.vas3k.ru/7w9.jpg

还记得有关AI在围棋比赛中击败顶级玩家的新闻吗?尽管不久之前,事实证明该游戏中组合的数量大于宇宙中原子的数量。

这意味着机器无法记住所有组合,因此赢得了围棋(就像国际象棋一样)。在每个回合中,它只是简单地为每种情况选择了最佳举动,并且表现出色超过了人类的肉袋。

这种方法是Q-learning及其衍生产品(SARSA和DQN)背后的核心概念。名称中的“ Q”代表“质量”,因为机器人学会了在每种情况下执行最“定性”的动作,并且所有情况都被记忆为简单的马尔可夫过程

https://i.vas3k.ru/7wa.jpg

这样的机器可以在虚拟环境中测试数十亿种情况,并记住哪种解决方案可以带来更大的回报。但是,如何将以前看到的情况与全新的情况区分开呢?如果无人驾驶汽车位于道路交叉口且交通信号灯变为绿色,这是否意味着它现在可以行驶了?如果有一辆救护车冲过附近的街道怎么办?

今天的答案是“没人知道”。没有简单的答案。研究人员一直在寻找它,但同时只能找到解决方法。有些人会手动对所有情况进行硬编码,以使它们解决特殊情况,例如手推车问题。其他人会更深入,让神经网络来解决这个问题。这引导我们发展了称为深度Q网络(DQN)的Q学习。但是它们也不是灵丹妙药。

强化学习对于一个普通人来说就像一个真正的人工智能。因为它使您感到哇,所以该机器可以在现实生活中做出决策!这个话题现在被大肆宣传,它以惊人的速度前进,并且与神经网络相交以更精确地清洁地板。惊人的技术世界!

题外话。当我还是一个学生时,遗传算法(链接具有很酷的可视化效果)真的很流行。这是关于将一​​堆机器人扔到一个环境中,并使它们尝试达到目标直到死亡。然后,我们选择最佳基因,将它们杂交,突变一些基因,然后重新运行模拟。经过数十亿年,我们将得到一个智能生物。大概。最好的进化。

遗传算法被认为是强化学习的一部分,并且其最重要的特征已通过十年的实践证明:没有人对此表示怀疑。

人类仍然无法提出比其他方法更有效的任务。但是它们非常适合学生实验,让人们无需过多的工作就可以使他们的大学主管对“人工智能”感到兴奋。youtube也会喜欢它。

Part 3
集合方法

“一群愚蠢的树,学习彼此纠正错误”

如今用于: https://i.vas3k.ru/7r3.jpg

  • 符合经典算法方法的所有内容(但效果更好)
  • 搜索系统(★)
  • 计算机视觉
  • 物体检测

流行算法:随机森林梯度提升

现在是时候使用成熟的现代方法了。集成和神经网络是两个主要的战斗器,它们为我们通往奇点铺平了道路。如今,它们产生了最准确的结果,并被广泛用于生产中。

然而,今天的神经网络大肆宣传,而TechCrunch上很少有人喜欢“吹牛”或“装袋”。

尽管效率很高,但这些背后的想法过于简单。如果您采用一堆效率低下的算法并强迫它们纠正彼此的错误,那么系统的整体质量将甚至比最佳的单个算法还要高。

如果您采用最不稳定的算法来预测输入数据中的小噪声而完全不同的结果,那么您将获得更好的结果。像回归树和决策树。这些算法对输入数据中的单个异常值都非常敏感,以至于模型变得疯狂。

实际上,这就是我们所需要的。

我们可以使用已知的任何算法来创建整体。只需抛出一堆分类器,进行回归分析即可,不要忘了衡量准确性。根据我的经验:在这里甚至都不要尝试Bayes或kNN。尽管“哑巴”,但它们确实稳定。这很无聊而且可以预见。就像你的前任。

相反,有三种经过考验的方法来创建合奏。

Stacking 几个并行模型的堆叠输出将作为输入传递到最后一个做出最终决定的模型。就像那个女孩问女友是否与您见面以便自己做出最终决定的女孩一样。

https://i.vas3k.ru/7wb.jpg

这里强调“不同”一词。在相同数据上混合使用相同算法是没有意义的。算法的选择完全取决于您。但是,对于最终决策模型,回归通常是一个不错的选择。

根据我的经验,由于其他两种方法可以提供更好的准确性,因此在实践中堆叠不太流行。

Bagging称 Bootstrap AGGregatING。使用相同的算法,但对原始数据的不同子集进行训练。最后,只是平均答案。

随机子集中的数据可能会重复。例如,从诸如“ 1-2-3”的集合中,我们可以获得诸如“ 2-2-3”,“ 1-2-2”,“ 3-1-2”之类的子集。我们使用这些新的数据集多次讲授相同的算法,然后通过简单的多数表决来预测最终答案。

https://i.vas3k.ru/7wd.jpg

Bagging最著名的例子是随机森林算法,它只是将决策树套袋(如上所示)。当您打开手机的摄像头应用程序并看到它在人们的脸上绘制框时,这可能是Random Forest工作的结果。神经网络太慢而无法实时运行,但理想的选择是装袋,因为它可以在视频卡的所有着色器或这些新型ML处理器上计算树。

例如,在某些任务中,随机森林并行运行的能力比提升准确性方面的小损失更为重要。特别是在实时处理中。总会有一个权衡。

https://i.vas3k.ru/7rq.jpg

依次对Boosting算法进行一次训练。随后的每个对象都将大部分精力放在前一个对象错误预测的数据点上。重复直到你满意。

与bagging相同,我们使用数据的子集,但这一次不是随机生成的。现在,在每个子样本中,我们取一部分先前算法无法处理的数据。因此,我们使一种新算法学会了修复前一个算法的错误。

https://i.vas3k.ru/7we.jpg

这里的主要优势-具有令人羡慕的很高的分类精度,甚至在某些国家/地区这么高的精度是违法的。缺点已经被指出-它没有并行化。但这仍然比神经网络快。这就像是自卸车与赛车之间的比赛。卡车可以做更多的事情,但是如果您想快点走,那就开车。

如果您想得到一个真正的提升示例,请打开Facebook或Google并开始输入搜索查询。您能听到一大群树木咆哮和砸在一起,按相关性对结果进行排序吗?那是因为他们正在使用boosting

如今,有三种流行的增强工具,您可以在CatBoost与LightGBM与XGBoost中阅读比较报告

Part 4
神经网络和深度学习

“我们有一个千层网络,几十个视频卡,但仍然不知道在哪里使用它。让我们生成猫的照片!”

https://i.vas3k.ru/7r4.jpg

今天用于:

  • 替换以上所有算法
  • 照片和视频上的物体识别
  • 语音识别与合成
  • 图像处理,样式转换
  • 机器翻译

流行的体系结构:Perceptron卷积网络(CNN),递归网络(RNN),自动编码器

如果没有人尝试使用“人脑”类比向您解释神经网络,那您将感到很高兴。告诉我你的秘密。但首先,让我以自己喜欢的方式进行解释。

任何神经网络基本上都是神经元及其之间连接的集合。神经元是具有一堆输入和一个输出的函数。它的任务是从输入中获取所有数字,对它们执行功能,然后将结果发送到输出。

这是一个简单但有用的神经元示例:将输入中的所有数字相加,如果该和大于N,则得出1。否则-零。

连接就像神经元之间的通道。他们将一个神经元的输出与另一神经元的输入连接起来,以便彼此发送数字。每个连接只有一个参数-重量。就像信号的连接强度一样。当数字10通过权重为0.5的连接时,它变成5。

这些权重告诉神经元对一个输入的响应更多而对另一输入的响应则更少。训练时调整权重-网络就是这样学习的。基本上,这就是全部。

https://i.vas3k.ru/7wf.jpg

为了防止网络陷入无政府状态,神经元是分层连接的,而不是随机连接的。在一层内,神经元未连接,但它们与下一层和上一层的神经元相连。网络中的数据严格沿一个方向运行-从第一层的输入到最后一层的输出。

如果投入足够数量的层并正确放置权重,则会得到以下结果:通过将手写数字4的图像应用于输入,黑色像素激活相关的神经元,它们激活下一层,并且如此反复,直到最终点亮负责这四个的出口。结果达到了。

https://i.vas3k.ru/7wg.jpg

在进行现实编程时,没有人在编写神经元和连接。取而代之的是,所有内容都表示为矩阵,并基于矩阵乘法进行计算以提高性能。我最喜欢的视频及其续集,下面以识别手写数字为例,以易于消化的方式描述了整个过程。如果您想弄清楚,请看他们。

请参考:https://youtu.be/aircAruvnKk

具有多层且每个神经元之间都有连接的网络称为感知器(MLP),被认为是新手最简单的架构。我没有看到它用于解决生产中的任务。

构建网络后,我们的任务是分配适当的方式,以便神经元对传入的信号做出正确的反应。现在该记住我们拥有的数据是“输入”和适当的“输出”的样本。我们将向我们的网络显示一个相同数字4的图形,并告诉它“调整权重,以便每当您看到此输入时,您的输出就会发出4”。

首先,所有权重都是随机分配的。在显示一个数字后,它会发出一个随机答案,因为权重还不正确,并且我们比较了此结果与正确结果之间的差异。然后,我们开始从输出到输入遍历网络,并告诉每个神经元,“嘿,您确实在这里激活了,但是您做得很糟糕,所有事情都从这里往下走了,让我们对这种连接的关注减少,而更多的关注,是吗? ‘。

在成千上万次这样的“推断-检查-惩罚”循环之后,希望权重得到纠正并按预期方式工作。这种方法的科学名称是反向传播,即“反向传播错误的方法”。有趣的是,这种方法花了二十年的时间。在此之前,我们仍然以某种方式教授神经网络。

我最喜欢的第二个vid是深入描述此过程,但是仍然很容易访问。请参考:https://youtu.be/IHZwWFHWa-w

训练有素的神经网络可以伪造本章中描述的任何算法的工作(并且通常更精确地工作)。这种普遍性使它们广受欢迎。最终,我们有了人脑的体系结构,他们说我们只需要组装许多层并就他们希望的任何可能的数据进行教学。然后,第一个AI冬季开始,然后解冻,然后又出现了另一波令人失望的浪潮。

原来,具有大量层的网络需要当时无法想象的计算能力。如今,任何具有geforces的PC都超越了当时的数据中心。因此人们当时没有任何希望获得那样的计算能力,而神经网络是一个巨大的遗憾。

然后十年前,深度学习兴起了。

有一个很好的机器学习时间表,描述了希望和悲观情绪的过山车。

在2012年,卷积神经网络在ImageNet竞赛中获得了压倒性的胜利,这使世界突然意识到了上世纪90年代描述的深度学习方法。现在我们有了视频卡!

与经典神经网络的深度学习的区别在于可以处理更大网络的新训练方法。如今,只有理论者会尝试将要学习的知识划分得较深而不是那么深。而我们,作为从业者使用的是像流行的“深”库KerasTensorFlowPyTorch甚至当我们建立了一个微型网络五层。仅仅因为它比以前的所有工具更合适。我们只称它们为神经网络。

我现在将介绍两种主要的类型。

卷积神经网络(CNN)

卷积神经网络现在风行一时。它们用于搜索照片和视频中的对象,面部识别,样式转换,生成和增强图像,创建诸如慢动作和改善图像质量的效果。如今,在涉及图片和视频的所有情况下都使用CNN。即使在您的iPhone中,这些网络中的一些也正在通过您的裸体来检测其中的物体。如果有什么要检测的,呵呵。

https://i.vas3k.ru/7rz.jpg

上图是Detectron产生的结果,该结果最近由Facebook开源

图像的问题始终是从图像中提取特征的困难。您可以按句子拆分文本,在专门的词汇表中查找单词的属性,等等。但是必须手动标记图像,才能教会机器该特定图像中猫耳朵或尾巴的位置。这种方法被称为“手工制作功能”,几乎每个人都在使用。

https://i.vas3k.ru/7wh.jpg

手工存在很多问题。

首先,如果一只猫的耳朵垂下或转离摄像头:您遇到了麻烦,神经网络将看不到任何东西。

其次,尝试当场命名将猫与其他动物区分开的10种不同特征。我无法做到这一点,但是当我看到一个黑色的斑点在晚上掠过我时-即使我只在眼角看到它-我肯定能辨别出老鼠还是猫。因为人们不仅看耳朵的形状或腿长,而且考虑到许多不同的功能,所以他们甚至都没有想到。因此无法向机器解释。

因此,这意味着机器需要在基本路线的基础上自行学习此类功能。我们将执行以下操作:首先,我们将整个图像划分为8×8像素块,并为每种类型分配一条优势线-水平[-],垂直[|]或对角线[/]之一。也可能是其中几个很明显-这种情况发生了,我们并不总是绝对有信心。

输出将是几张线段表,实际上是代表图像上对象边缘的最简单特征。它们是自己的图像,但是用木棍制成的。因此,我们可以再次采用8×8的块,看看它们如何匹配。一遍又一遍…

此操作称为卷积,它为方法命名。卷积可以表示为神经网络的一层,因为每个神经元都可以充当任何功能。

https://i.vas3k.ru/7wj.jpg

当我们用很多猫的照片给神经网络喂食时,它会自动为最常看到的棍棒组合分配更大的权重。不管是猫的后背的直线还是像猫的脸这样的几何形状复杂的物体,它们都会非常活跃。

作为输出,我们将放置一个简单的感知器,该感知器将查看最激活的组合,并基于此将猫与狗区分开。

https://i.vas3k.ru/74s.jpg

这个想法的好处是我们有一个神经网络,可以自己搜索对象的最鲜明特征。我们不需要手动选择它们。我们可以通过对数十亿张图像进行谷歌搜索来提供任何对象的任何数量的图像,并且我们的网络将通过操纵杆创建特征图,并学会自行区分任何对象。

为此,我甚至开了一个不好笑的笑话:

给您的神经网一条鱼,它将能够在余生中检测到鱼。给您的神经网一根钓鱼竿,它将在余生中都能检测到钓鱼竿…

递归神经网络(RNN)

今天第二受欢迎的体系结构。递归网络为我们提供了有用的功能,例如神经机器翻译(这是我的相关文章),智能助手中的语音识别和语音合成。对于语音,文本或音乐等顺序数据,RNN最适合。

还记得Windows XP的老式语音合成器Microsoft Sam吗?那个有趣的家伙一个接一个地建立单词,试图将它们粘合在一起。现在,查看Amazon Alexa或Google的Assistant。他们不仅说清楚话,甚至还讲正确的口音!

神经网络正试图说话: https://youtu.be/NG-LATBZNBs

所有这些都是因为现代语音助手受过训练,不是说一个字母一个字母地讲,而是一次讲整个短语。我们可以获取一堆带语音的文本,并训练神经网络以生成最接近原始语音的音频序列。

换句话说,我们将文本用作输入,并将其音频用作所需的输出。我们要求神经网络为给定的文本生成一些音频,然后将其与原始文本进行比较,纠正错误,并尝试尽可能接近理想情况。

听起来像是经典的学习过程。甚至一个感知器也适用于此。但是我们应该如何定义其输出?为每个可能的短语触发一个特定的输出不是一种选择-显然。

在这里,文本,语音或音乐是序列这一事实将为我们提供帮助。它们由音节等连续单元组成。它们听起来都是独一无二的,但取决于以前的那些。失去此连接,您将不知所措。

我们可以训练感知器来生成这些独特的声音,但是它将如何记住以前的答案?因此,想法是为每个神经元添加内存,并在下次运行时将其用作附加输入。神经元可以为自己做个记录-嘿,我们在这里有一个元音,下一个声音应该听起来更高(这是一个非常简化的示例)。

这就是循环网络的出现方式。

https://i.vas3k.ru/7wk.jpg

这种方法存在一个巨大的问题-当所有神经元都想起过去的结果时,网络中的连接数量变得如此之大,以至于在技术上不可能调整所有权重。

当神经网络无法忘记时,它就无法学习新事物(人们也有相同的缺陷)。

第一个决定很简单:限制神经元记忆。假设要记住最近的结果不超过5个。但这打破了整个想法。

后来出现了一个更好的方法:使用类似于计算机内存的特殊单元。每个单元格都可以记录,读取或重设一个号码。它们被称为长期和短期记忆(LSTM)单元。

现在,当神经元需要设置提醒时,它会在该单元格中放置一个标志。就像“这是一个单词的辅音,下一次使用不同的发音规则”一样。当不再需要该标志时,将重置单元,仅保留经典感知器的“长期”连接。换句话说,不仅训练网络学习权重,而且还设置这些提醒。

很简单,但是有效!

https://youtu.be/cQ54GDm1eL0

CNN + RNN =假奥巴马

您可以从任何地方获取语音样本。例如,BuzzFeed接受了奥巴马的演讲,并训练了一个神经网络来模仿他的声音。如您所见,音频合成已经是一个简单的任务。视频仍然有问题,但这是时间问题。

野外还有更多的网络体系结构。我推荐一篇不错的文章,叫做《神经网络动物园》,其中收集了几乎所有类型的神经网络并进行了简要说明。

https://i.vas3k.ru/7rx.png

结局:什么时候与机器打仗?

这里的主要问题是“什么时候机器会变得比我们更智能并奴役所有人?”这一问题。最初是错误的。其中有太多隐藏的条件。

我们说“变得比我们聪明”,就好像我们有一定的统一智力规模。它的顶部是人类,狗的位置略低,愚蠢的鸽子在底部徘徊。

错了

如果是这种情况,每个人都必须在所有事物中击败动物,但事实并非如此。普通的松鼠可以记住一千个带螺母的隐藏地方-我甚至不记得我的钥匙在哪里。

那么,智力是一组不同的技能,而不是一个可衡量的价值吗?还是记得在智能中不包括那些藏匿坚果的地点?

对我来说,一个更有趣的问题-我们为什么认为人脑的可能性有限?互联网上有很多流行的图形,其中的技术进步是指数式的,人类的可能性是不变的。但是吗?

好的,您现在就可以将1680乘以950。我知道你甚至不会尝试,懒虫。但是给您一个计算器-您将在两秒钟内完成。这是否意味着计算器只是扩展了您的大脑功能?

如果是,我可以继续使用其他计算机进行扩展吗?例如,在手机中使用笔记以不记得大量的数据吗?哦,好像我现在正在做。我正在使用这些机器来扩展我的大脑功能。

想一想。谢谢阅读。

https://i.vas3k.ru/7wl.png

By larryonaws

10多年大型企业软件研发管理经验,曾就职于爱立信、汤森路透、甲骨文、亚马逊AWS等公司。丰富的企业软件项目管理、架构设计、开发测试、交付运维、客户成功、大客户销售等职业经历。 有多年管理PeopleSoft/Fusion SaaS ERP套件研发工作的经历,对大型ERP软件有深刻的理解和丰富的经验。 AWS解决方案专业架构师,致力于推动AWS创新技术赋能企业软件的云转型。

发表评论

邮箱地址不会被公开。 必填项已用*标注