老板要机器学习_机器学习基石 为什么机器学习可以学习 - CSDN
  • 如果上班的时候想放松一下,或者直说想偷偷懒,看点和工作无关的网页,这时候万一老板突然出现在背后,会不会感到很难堪呢?有的浏览器设置了boss按键,手快的人还可以切换屏幕,不过总会显得不自然,而且经常搞的...

    如果上班的时候想放松一下,或者直说想偷偷懒,看点和工作无关的网页,这时候万一老板突然出现在背后,会不会感到很难堪呢?

    有的浏览器设置了boss按键,手快的人还可以切换屏幕,不过总会显得不自然,而且经常搞的手忙脚乱的。

    一个日本程序员决定自己动手,编写一个一劳永逸的办法,我们来看看他是怎么实现的吧~

    思路很直接:用网络摄像头自动识别在工位通道走过的人脸,如果确认是老板的话,就用一张写满了代码的截图覆盖到整个屏幕上。
    整个工程中应用了Keras深度学习框架来建立识别人脸的神经网络,和一个网络摄像头用来捕捉老板的人脸。

    任务流程
    当老板接近我的工位时,电脑就会自动切换屏幕,办公室的情况如下:

    这里写图片描述

    从老板的座位到我的座位大约6~7米,他会在离开座位后4到5秒钟到达我的座位,因此,需要在这之前隐藏屏幕,所以时间比较紧迫。

    策略

    首先需要让电脑完成对老板面部的深度学习。然后在我的办公桌上摆上一个网络摄像头,让摄像头对着通道,当网络摄像头捕捉到老板的脸时就切换屏幕。

    嗯,这是一个完美的项目。先取一个好名字,就叫Boss Sensor(老板探测器)好了。

    这里写图片描述

    Boss Sensor的简单结构图如下:

    这里写图片描述

    处理过程分为三步:
    网络摄像头实时拍摄图像
    学习模型检测和识别所拍摄图像的人脸
    如果识别结果是老板则切换屏幕

    所需要的技术实现只有三项:
    拍摄人脸图像
    识别人脸图像
    切换屏幕

    一步步完成之后整合就可以了。

    拍摄人脸图像
    首先找一个网络摄像头,我用的是BUFFALO BSW20KM11BK摄像头,大家随便找个清晰度够的就可以了。

    这里写图片描述

    最好不要用相机自带的识别软件裁剪人脸,因为后面的深度学习过程还需要处理。所以,我用Python和OpenCV编写了一段裁剪人脸图像的脚本,代码在这里下载:

    https://github.com/Hironsan/BossSensor/blob/master/camera_reader.py

    偷拍到的人脸图像比我之前设想的更清楚:

    这里写图片描述

    识别人脸图像
    接下来,要用机器学习教会电脑识别老板的脸。

    我们需要以下三个步骤:
    采集图像
    图像预处理
    建立机器学习模型

    让我们一个接一个看一下。

    采集图像

    首先,需要收集大量的图片供电脑学习。一般来说有三种大量收集图片的方法:
    谷歌图片搜索
    Facebook的图像采集
    从视频里截图

    一开始,我像电影里的特工一样收集了各种搜索引擎上的老板照片,还有Facebook上老板自己上传的照片,但说实话,没有收集到足够的图像。所以,反正老板就在身边,我就简单粗暴的拍摄了一段他的视频,然后把视频分解成大量的图像。

    图像预处理

    现在我有很多人脸图像了,但还不能拿它们来建立学习模型,必须要裁剪掉与脸部不相关的部分。
    我使用ImageMagick来提取人脸,你可以用别的图像软件来做。
    总之,最后我收集了大量的人脸图像,估计我是全世界拥有最多老板头像的人了,肯定比他爸爸妈妈要多的多。
    现在可以准备机器学习了。

    建立机器学习模型

    Keras框架用来建立卷积神经网络和神经网络培训。Tensorflow用来写Keras的后端。如果只识别脸部的话,可以调用一些Web API比如微软的Computer Vision API,但这次我决定自己来实现,因为这个项目需要确保实时性。

    网络体系结构大体如下,Keras非常方便,它可以很轻松的输出这样的结构:
    这里写图片描述

    代码在这里下载:

    https://github.com/Hironsan/BossSensor/blob/master/boss_train.py

    至此,只要老板出现在摄像头中,我就可以识别出他来了。

    切换屏幕

    最后一步,很简单,学习模型识别出老板的脸之后,把电脑屏幕换掉就好了。

    我是程序员,所以我准备了这样一张图:

    这里写图片描述

    电脑上只显示这张图片,这样就可以假装我在认真工作了。

    这张图需要全屏显示,所以我调用了PyQt库,代码在这里下载:

    https://github.com/Hironsan/BossSensor/blob/master/image_show.py

    一切工作都完成了。

    成品

    最后把分别实现的技术整合起来并验证,真的成功了!

    “现在老板离开了座位,正走向我的工位。”
    这里写图片描述
    “OpenCV已经检测出人脸,将人脸图像发送给学习模型。”
    这里写图片描述
    “学习模型认出了他,屏幕自动切换。ヽ(‘ ∇‘ )ノ”
    这里写图片描述

    这就是我的Boss Sensor,全部的源码都放在github上了,可以在这里下载:

    https://github.com/Hironsan/BossSensor

    总结

    结合网络摄像头的实时图像采集和Keras深度学习框架,确实可以完成人脸识别。

    在实践过程中,我发现OpenCV的图像精度不够高,虽然不影响识别,但我准备改用Dlib来提高精度,另外我想自己编写人脸检测训练模型。

    网络摄像头获取的图像不够清晰,我准备换个摄像头。

    文章转自:http://mp.weixin.qq.com/s/224AEGWXwwKzndzOWGCbvQ

    展开全文
  • 北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 沙韬伟,苏宁易购高级算法工程师。 曾任职于Hewlett-Packard、滴滴出行。 数据学院特邀讲师。 主要研究方向包括风控、推荐和半...
    北京 | 高性能计算之GPU CUDA课程11月24-26日640?wx_fmt=jpeg&wxfrom=5&wx_lazy=13天密集学习 快速带你晋级阅读全文>

    沙韬伟,苏宁易购高级算法工程师。
    曾任职于Hewlett-Packard、滴滴出行。
    数据学院特邀讲师。
    主要研究方向包括风控、推荐和半监督学习。目前专注于基于深度学习及集成模型下的用户行为模式的识别。


    目标导向,不谈其他的方向,只谈如何快速拿到数据挖掘的offer。

    0?wx_fmt=jpeg


    我选择了公司的校招中比较严格的(top5%)一个jd要求,我们看下如何拿下这个offer。


    计算机或者数学等相关专业学历


    无论你是什么专业的,大学有个选修课的东西,很多人都是用来混学分的,你可以去选择比如“数理统计选修”、“概率论选修”、“算法基础”这些课,挂了不影响绩点,但是你考的好可以给之后找工作带来很高加分,你的老板会认为你是一个热爱数据挖掘并且有长远计划的人。


    在机器学习、数据挖掘、统计学理论、最优化理论等领域有着深厚积累


    “全栈工程师”在我心中一直是伟大的存在,但是对于本科毕业,选择专精很重要。推荐几个方向:用户研究(征信、消费者研究),图像音频分析(讯飞之流),异常分析(风控、物流),订单预测等等,你在一方面研究的比较深,就算是应届生,但是比起像我这种三四年的老油条,老板更喜欢培养这样带有“天赋专精”的白纸。


    熟悉机器学习和数据挖掘领域前言技术


    前沿技术是一个比较宽泛的词,相信我,面试你的人每天从早上10点加班到晚上10点,周末还要打游戏,他自己都不知道啥叫前沿技术,平时打好基础,老板基础问不倒的时候,你就已经在候选人名单里面了。


    在国际顶级回忆和期刊以第一作者发表过高水瓶论文者优先


    这点我也做不到,我就不bb了。


    在机器学习、数据挖掘等相关项目实际经验者或者知名数据挖掘比赛(例如KDD Cup等)中取得领先名次者优先


    这个是非常重要的。


    在应届生面前,成绩是没有区分能力的,老板在乎的是你入职后给公司带来的利益而不是你是不是学生会主席这些毫无意义的事情。我走的是前面这条路,分享一下我的套路。我大三的时候参加了百度的某个不知名比赛,拿了区的入围奖,然后拿着这个入围奖参加中国电信实习生招聘,大四凭借一年电信实习经验去了惠普的数据挖掘实验室继续实习,完整的做了2个项目后正式入职现公司。


    分析下来就是,刚开始是弱鸡,所以采取了一些简单的途径拿到一些听起来很厉害但是很弱鸡的奖,再借这个奖混进一些容易被唬住的公司(没有黑电信的意思),之后在凭借工作经验进入一些能够给你机会的地方(就是让你自己带一些项目),好好做几个优秀的项目(这个比较难,看命),然后达成你的目标。想一下子第一很难,但是我们可以做一个长远的规划,先前100,再前50,再前10,再第一。


    编程基础扎实,熟悉算法数据结构,有多年scala或python开发经验


    我大学的时候学校教了spss,但是我当时考虑的是外面企业都是抠x。应该不会买,果然毕业之后,R语言、Python火的不行,建议选择一门你喜欢的开源语言,去写code练吧,网上很多撕逼的问题比如“php是不是最好的编程语言”,其实,选择一个你最适应的就行,别在乎别人怎么bb,因为最后要用的人是你自己。


    有大数据相关系统,拥有map-reduce、sprak、实时计算等经验


    这个需要回到第5条,我在大学里面的时候,老师就忽悠我,说什么mysql足够了,而且一般学校不会搭建Hadoop这些平台,搭建成本高,维护成本高。建议混入一些“高端的”公司,请里面的老油条两三顿夜宵,给你开个查询权限,相信我,从菜鸟到乳鸽,你只需要1个月的时间。


    踏实勤奋、自我驱动、善于沟通


    个人感觉数据挖掘岗位需要强迫自己拥有三个技能。


    1)快速学习能力,永远不知道下一个火起来的算法是啥


    2)数据敏感力,数据挖掘的下限取决于勤奋,上限取决于数据敏感程度


    3)沟通能力,你要让你的boss相信你做的Random forest结果,你需要先说服他,我做的是靠谱的。


    原文链接:http://www.jianshu.com/p/328fafc251f1


    查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

    www.leadai.org


    请关注人工智能LeadAI公众号,查看更多专业文章

    640?wx_fmt=jpeg


    大家都在看

    640.png?

    LSTM模型在问答系统中的应用

    基于TensorFlow的神经网络解决用户流失概览问题

    最全常见算法工程师面试题目整理(一)

    最全常见算法工程师面试题目整理(二)

    TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

    装饰器 | Python高级编程

    今天不如来复习下Python基础


    640.png?

    0?wx_fmt=gif

    点击“阅读原文”直接打开【北京站 | GPU CUDA 进阶课程】报名链接

    展开全文
  • 本章介绍的是每一个数据科学家都应该知道并听说的机器学习许多基本的概念和术语。这将是一个高层次的概括(本书唯一没有很多代码的一章)。内容很简单,但是你保证在进行下一章之前对本章每个概念都理解得很透彻。...

    在这里插入图片描述

    红色石头的个人网站:redstonewill.com

    本章介绍的是每一个数据科学家都应该知道并听说的机器学习许多基本的概念和术语。这将是一个高层次的概括(本书唯一没有很多代码的一章)。内容很简单,但是你要保证在进行下一章之前对本章每个概念都理解得很透彻。因此,端起一杯咖啡,让我们开始吧!

    1 什么是机器学习?

    机器学习是一门通过编程从而在数据中学习的科学技术,或者称之为艺术。

    这里有一个更一般的定义:

    在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域。 —— Arthur Samuel, 1959

    另外一个更加工程化的定义:

    对于某类任务T和性能度量P,如果计算机程序在T上以P衡量的性能随着经验E而自我完善,那么就称这个计算机程序从经验E学习。 —— Tom Mitchell, 1997

    例如垃圾邮件过滤系统就是一个机器学习程序,可以用来区分垃圾邮件和非垃圾邮件。机器学习系统用来学习的样本称之为训练样本(training set),每个训练样本称之为训练实例(training instance)或样本。在这个例子中,任务 T 就是要对新邮件进行区分,经验 E 就是训练数据,性能度量 P 需要定义,例如使用分类正确的邮件所占的比例。这种度量方式称之为准确率(accuracy),经常应用在分类问题中。

    2 为什么使用机器学习?

    我们先来思考,使用传统编程技术如何区分垃圾邮件和非垃圾邮件呢?(如下图所示)

    1.首先你应该考虑典型的垃圾邮件具有什么特点。例如在邮件的主题中包含了“4U”、“信用卡”、“免费”等词语。又或者是在邮件的发件人、邮件内容中有一些垃圾邮件常出现的特定的词语等。

    2.然后你就可以对这些情况编写垃圾邮件检测算法,若一定数量的词汇检测到了,则可以判定是垃圾邮件。

    3.最后验证程序,重复 1 和 2,直到检测算法的准确率足够高。

    在这里插入图片描述

    因为这个问题并不简单,你按照上面思路编写的程序可能很复杂、冗长,而且很难把控。

    对比而言,同样是垃圾邮件分类,机器学习可以自动从垃圾邮件和非垃圾邮件中检测出哪些单词是经常出现在垃圾邮件中的(如下图所示),而不需要人为指出出现哪些单词可能就是垃圾邮件。这样使得问题更加简化、容易掌控,而且分类的准确率更高。

    在这里插入图片描述

    而且,如果给你发垃圾邮件的人知道了他们的关键词“4 U”被锁定的话,他们可能会把这个关键词替换成“For U”。如果使用传统编程技术,就要针对“For U”重新编写程序。那么,垃圾邮件关键词每次替换,都需要重新针对新的关键词改写程序,相当麻烦。

    而机器学习则不用这么麻烦,只需将新的邮件样本交给模型,机器会自动检测出哪些单词是可能出现在垃圾邮件中的。整个过程不需要人工排查和干预(如下图所示)。

    在这里插入图片描述

    机器学习强大的另一个原因是,某些问题非常复杂,传统编程很难有较好的方案去解决。例如语音识别、图像识别,使用传统人工编程方式来解决效率低而且准确率不高。相比之下,最好的解决方法就是使用机器学习,给出足够多的数据,让机器自己去学习,得到较高的识别率。

    最后,机器学习还可以帮助人们去学习(如下图所示)。为什么这样说呢?因为 ML 算法可以从数据中提取出有用和关键的信息。例如垃圾邮件分类,经过好的训练得到的 ML 模型能够揭示出哪些单词或者哪些单词的组合是预测为垃圾邮件最重要的特征参考。机器得到的这些信息可以帮助人们更好地揭示问题的本质,从而更好地解决问题。

    将 ML 技术应用到大数据中,挖掘数据本身蕴含的规律和模式,这就是 数据挖掘

    在这里插入图片描述

    总结下来,机器学习的强大之处体现在以下几个方面:

    • 传统的编程方式解决问题通常需要人工调试、建立冗长规则,而机器学习算法可以极大地简化代码且性能更好。

    • 对于某些复杂问题,例如语音识别、图像识别,传统编程没有一个较好的解决方案,而机器学习通常表现得很好。

    • 机器学习系统可以自适应新的数据,只需采集新的数据,重新训练 ML 模型即可。

    • 机器学习可以揭示复杂问题和大数据内在规律和特性。

    3 机器学习类型

    机器学习类型可以按照不同的方式来划分,具体表现在:

    • 是否需要人类的监督:监督式学习、非监督式学习、半监督式学习、强化学习

    • 是否可以在线上进行学习:在线学习、批量学习

    • 是否可以简单地把新的数据集与已知数据集进行比较得出结果,还是从训练集中检测模式再建立预测模型:基于实例学习、基于模型学习。

    当然以上这些划分方式并不是各自独立的,可以相互结合。例如一个垃圾邮件检测系统,可以是在线的、基于神经网路模型的监督式学习。

    接下来我们详细看看这些机器学习类型。

    3.1 监督式/非监督式学习

    机器学习可以根据再训练过程中受到的监督类型和程度进行划分,类型包括:监督式学习、非监督式学习、半监督式学习、强化学习。

    监督式学习

    监督式学习,训练集包含了样本的输出,即 label(如下图所示)。

    在这里插入图片描述

    一个典型的监督式学习就是分类问题,例如垃圾邮件分类,通过对邮件内容包括它们对应的标签(垃圾、非垃圾)进行训练。最终得到的模型对新的邮件进行预测,判断它是不是垃圾邮件。

    另一个典型的监督式学习就是回归问题(如下图所示),例如汽车价格预测,通过对汽车特征(商标、车龄等)包括它们对应的价格进行训练。最终得到的模型对新的汽车进行预测,得到它的价格。

    在这里插入图片描述

    值得注意的是,有些回归算法也可以用于分类,反之亦然。例如逻辑回归(Logistic Regression)常用于分类,然而它也可以输出对应该类别的概率(例如得到垃圾邮件的概率是 20%)。

    下面列举一些最常见的监督式学习算法:

    • k-近邻

    • 线性回归

    • 逻辑回归

    • 支持向量机

    • 决策树和随机森林

    • 神经网路

    非监督式学习

    非监督式学习,顾名思义,训练集是没有输出 label 的(如下图所示)。

    在这里插入图片描述

    下面列举一些最常见的非监督式学习算法:

    • 聚类

      —— k-均值

      —— 层次聚类分析(HCA)

      —— 最大期望算法(EM)

    • 可视化和降维

      —— 主成分分析(PCA)

      —— 核 PCA

      —— 局部线性嵌入(LLE)

      —— t分布随机邻居嵌入(t-SNE)

    • 关联规则学习

      —— Apriori

      —— Eclat

    例如现在你掌握了你的博客访客信息,想使用聚类算法对这些访客进行分组(如下图所示)。你不需要告诉算法每个访客应该属于哪一组,聚类算法会自己分析和判断。比如访客中有 40% 是男性,喜欢看漫画书,访问博客的时间经常是晚上;20% 是年轻的科幻迷,访问博客的时间经常是周末,等等。如果你使用层次聚类分析,会对每个组划分得更细。

    在这里插入图片描述

    可视化算法(visualizationv algorithm)也是非监督式学习的好例子。它能够把高纬的复杂且没有标签的样本数据在 2D 或 3D 空间中展示出来,便于作图(如下图所示)。这些算法尽可能保存原始数据足够多的结构信息(例如可视化的时候避免原始输入空间不同类别的样本发生重叠)。这有助于我们理解不同类别之间的近似程度。

    在这里插入图片描述

    一个相关的算法叫做降维(dimensionality reduction)。目的是简化数据但是不能损失太多信息。常用的思路就是讲相似特征合并成一个。例如汽车的里程数和它的车龄关系较为密切,降维算法就是把这两个特征合并成一个特征来表征汽车的磨损程度。这种做法就是特征提取。降维的好处是减少特征个数,让算法运行更快,减小了计算成本和存储空间成本。更重要的是,降维可以消除一些噪声影响,提升算法性能。

    还有一个非监督式学习的例子就是异常检测(anomaly detection)。例如检测不正常的信用卡交易来避免诈骗,捕获人工制造缺陷,或者剔除数据集中的异常点以便传替给后面的机器学习算法。异常检测算法是使用正常数据集进行训练的,得到的模型对新的样本进行测试,判断它是不是异常点(如见图所示)。

    在这里插入图片描述

    最后一个非监督式学习的例子就是关联规则学习(association rule learning),目标就是挖掘大量数据中不同属性之前的联系。例如,通过对超市用户购买商品历史记录的分析,发现购买烧烤酱和土豆薯片的用户也倾向于购买牛排。因此,基于此分析,超市老板就可以把这些用户可能会一起买的商品放在相近的货架上,方便用户购买。

    半监督式学习

    半监督式学习,简单地说就是训练集大多数样本没有 label,只有少量样本有 label。例如一些照片托管服务,例如谷歌照片,就是一个例子。一旦你把所有家庭照片上传到服务器之后,云端算法会自动识别出每个家庭成员出现在哪些照片中,例如 A 出现在照片 1、3、5、6 中, B 出现在照片 2、3、5、8 中,这是一个非监督式学习的过程(聚类)。现在你要做的就只是告诉机器每个人的名字(相当于 label),即标注 A、B 等分别叫什么名字(监督式)。然后,机器就可以根据你给的 label,把每张照片中的每个人都标注上名字,即 label。也就是说,通过标注少量的样本,然后根据聚类算法,把所有样本的 label 都自动加上了。

    在这里插入图片描述

    大多数半监督式学习都是监督式学习和非监督式学习相结合的。例如深度置信网络(DBNs),其基础构建模型为受限玻尔兹曼机(RBMs)。RBMs 的训练过程是非监督式学习,但是整个 DBNs 系统是使用监督式学习调优的。

    强化学习

    强化学习相对来说比较难一些。如下图所示,假设一个学习系统 Agent 可以观察环境,并做出相应的行为,然后得到相应的反馈。正确的行为得到奖励,错误的行为得到惩罚。Agent 必须自我学习最佳策略是什么,来即时获得最多的正反馈,从而实现学习的目的。策略定义为 Agent 在一个给定情境中需要做出的即时行为。

    在这里插入图片描述

    上面这张图生动形象地解释了强化学习。机器人 Agent 面临的状况是发生火灾,这时候,它必须进行决策,是选择接近火源,还是接水救火?这由 Agent 自己决定。如果 Agent 直接接近火源,那么就会得到惩罚(负反馈)。通过这样的训练,让 Agent 自己知道避免惩罚就必须远离火源,而做出取水救火的策略。强化学习可以类比成训练宠物的过程,比如我们要训练狗狗坐下,但是狗狗无法直接听懂我们的指令的。在训练过程中,我们根据狗狗的行为做出相应的反馈,如果它表现得好,我们就给他奖励,如果它做跟指令完全无关的动作,我们就给它小小的惩罚。这样不断修正狗狗的动作,最终能让它按照我们的指令来行动。

    强化学习非常强大,我们熟悉的 AlphaGo 就是强化学习的典型代表。2016 年,AlphaGo 战败了世界围棋冠军李世石。它就是通过分析数百万场围棋比赛,从中学习到赢的策略,然后跟自己进行很多长比赛。经过这样的训练和学习,最终 AlphaGo 成为了一名围棋顶尖高手。

    3.2 批量学习和在线学习

    机器学习类型另一种分类方式是根据是否可以对新添加的数据进行在线的即时学习。如果可以的话就叫在线学习(online learning),如果是离线的话就叫批量学习(batch learning)。

    批量学习

    批量学习不是即时学习,它是将所有的训练数据一起训练,这会花费很多时间和计算资源,所以一般只能用离线的方式训练。模型一旦训练完成,就上线发布,使用固定的模型工作,所以也常称为离线学习(offline learning)。

    这时候如果有新的数据产生,想要得到新的模型必须把新的数据和之前的数据结合起来,再次重新离线训练机器学习模型,最后上线发布。

    批量学习比较简单也是最常见的机器学习类型。但是,一次完整的训练过程可能会花费很多时间,甚至几天、一个星期都有可能。如果机器学习系统更新数据很频繁,那么使用这种离线方式训练就比较麻烦,成本很大,需要不停地整合数据、离线训练、发布模型。这种情况下,批量学习并不是一个好方法。

    而且,训练整个数据集需要很多的计算资源(例如 CPU/GPU、内存、存储、IO、网络等)。特别是再数据量很大的情况下,其消耗的资源和成本是巨大的。这时候,一般不建议使用批量学习模型。

    最后,如果你的系统需要能够自主学习,且资源有限(例如手机 App),那么携带大量数据、消耗大量资源,每天花费数小时来进行模型训练是不太现实的。

    在线学习

    在线学习可以即时地重新训练模型,当新的数据点或者小批量(mini-batches)数据传给模型的时候,模型立即根据新数据重新训练。整个过程快速而且成本低。这是一种在线学习的方式,如下图所示。

    在这里插入图片描述

    在线学习对于那些持续接受数据(例如,股票价格)并且需要快速更新或自主学习的系统非常有用。如果你的计算资源有限,在线学习也是一个不错的选择:一旦在线学习系统了学习了新的数据实例,它就不再需要它们了,因此可以丢弃(除非您想要回滚到以前的状态并“重播”数据)。这样可以节省大量的空间。

    在线学习算法也可以应用于当数据集很大,机器内存不够的时候进行模型训练(称为核外学习,out of core learning)。做法是把整个数据集切分成许多小批量(mini-batches)样本,依次对每个小批量样本进行训练,重复进行,直到整个数据集完成训练(如下图所示)。值得注意的是,整个过程一般是离线进行的,所以在线学习这个名字可能有点让人疑惑,你也可以称之它为增量学习(incremental learning)。

    在这里插入图片描述

    在线学习一个很重要的参数就是基于数据改变更新算法的频率,是只要有新的数据进来就更新算法还是积累一定的数据改变之后再更新算法。这个参数被成为:学习率(learning rate)。如果设置很大的学习率,算法对会快速适应新数据,而忘记旧的数据(然而,垃圾邮件检测系统中你可能并不想让模型只对新的垃圾邮件标记,而很快舍弃之前的标记方法)。相反,如果设置较小的学习率,系统就会具有较大的惯性。也就是说,学习的速度比较慢,但是对数据中可能存在的噪声就不会特别敏感。系统的健壮性就会更强一些。

    在线学习一个大的挑战是只要有坏数据输入给系统,那么系统的性能就会立刻逐步下降。如果这是一个即时系统,用户就会立刻注意到。例如,坏数据可能来自于机器人上的故障传感器,可能是某人在搜索引擎输入垃圾信息以提高搜索排名。为了减少这种风险,您需要密切监视系统,如果检测到系统性能下降,就立即关闭学习(或回滚到上一个版本的系统)。您可能还需要监视输入数据并对异常数据作出反应(例如,使用异常检测算法)。

    3.3 基于实例学习 vs 基于模型学习

    机器学习还可以就根据它的归纳方法来划分。大多数机器学习的任务是做出预测,这意味着给到大量的训练样本训练模型,系统需要泛化到从未见过的样本。模型在训练集上有好的表现是个好事,但这还不够;目标是模型在新的实例上的表现。

    有两种主要的归纳方法:基于实例学习和基于模型学习。

    基于实例学习

    或许最简单的学习方式就是记忆学习。如果你用这种方式创建一个垃圾邮件过滤器,它只会标记所有与已经由用户标记的邮件相同的邮件。这不是最坏的解决方案,但肯定不是最好的。

    不能仅仅是标记与已知邮件相同的邮件,你的垃圾邮件检测程序还应该可以标记与已知邮件相似的邮件。这就需要计算两封邮件的相似程度。一种最基本的相似度测量方式就是计算两封邮件包含相同单词的个数。如果新邮件与已知的一封垃圾邮件相同单词个数较多,那么系统就会判断其也是垃圾邮件。

    这种学习方法就叫做基于实例学习:系统把所有训练集样本都存储下来,然后计算新的样本与存储的这些实例的相似度(如下图所示)。

    在这里插入图片描述

    基于模型学习

    另一种归纳方法就是使用所有训练集样本建立一个模型,然后使用这个模型预测新的样本。这中学习方法就叫做基于模型学习(如下图所示)。

    在这里插入图片描述

    例如,假设你想知道是否钱能让人快乐,因此,你从 OECD 网站上下载 Better Life Index 数据,从 IMF 网站上下载 GDP 数据。然后就可以根据人均 GDP 和生活满意度建立对应的表格,如下所示。

    在这里插入图片描述

    下面画出一些国家人均 GDP 与生活满意度之间的关系散点图:

    在这里插入图片描述

    似乎能看到一点趋势。尽管数据有些噪声,但是生活满意度多少与 GDP 呈现线性增长关系。因此,你可以令生活满意度是人均 GDP 的线性函数。这一步称为模型选择:选择一个生活满意度的线性模型,该模型只有一个属性(attribute),即人均 GDP。

    在这里插入图片描述

    这个模型有两个参数:θ0\theta_0θ1\theta_1,通过调整这些参数,你可以让你的模型表示任何线性函数,如下图所示。

    在这里插入图片描述

    在使用你的模型之前,你需要确定参数值 θ0\theta_0θ1\theta_1 让模型表现最好。怎么做呢?你需要制定一个性能评估方法。可以定义一个拟合函数测量模型有多好,也可以定义一个代价函数(loss function)来测量模型有多不好。对于线性回归问题,人们一般使用代价函数来测量线性模型预测值与实际样本值之间的距离,目标就是让这个距离越小越好,最小化。

    这就是线性回归算法,根据训练集,线性回归算法能够找到最合适的参数,使得线性模型能最好程度地拟合这些数据。这个过程称为模型训练。在上面这个例子中,使用线性回归算法,得到的最佳参数为:θ0=4.85\theta_0 = 4.85θ1=4.91×105\theta_1 = 4.91 × 10^{-5}

    现在得到的线性模型拟合数据的效果就很好了,如下图所示。

    在这里插入图片描述

    最后,你就可以使用这个模型进行预测了。例如,你想知道 Cyprus 人的生活满意度,但是 OECD 并没有提供这个数据。幸运的是,你可以使用刚刚训练好的模型进行预测:你查到 Cyprus 人均 GDP 是 $22,587,然后根据模型的线性表达式,计算生活满意度为:4.85+22,587×4.91×105=5.964.85 + 22,587 × 4.91 × 10^{-5} = 5.96

    下面这段代码就是使用 Python 来导入数据集,预处理,创建可视化散点图,然后训练线性模型并作出预测。

    # Code example
    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import sklearn.linear_model
    import os
    datapath = os.path.join("datasets", "lifesat", "")
    
    def prepare_country_stats(oecd_bli, gdp_per_capita):
        oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]
        oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")
        gdp_per_capita.rename(columns={"2015": "GDP per capita"}, inplace=True)
        gdp_per_capita.set_index("Country", inplace=True)
        full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,
                                      left_index=True, right_index=True)
        full_country_stats.sort_values(by="GDP per capita", inplace=True)
        remove_indices = [0, 1, 6, 8, 33, 34, 35]
        keep_indices = list(set(range(36)) - set(remove_indices))
        return full_country_stats[["GDP per capita", 'Life satisfaction']].iloc[keep_indices]
    
    # Load the data
    oecd_bli = pd.read_csv(datapath + "oecd_bli_2015.csv", thousands=',')
    gdp_per_capita = pd.read_csv(datapath + "gdp_per_capita.csv",thousands=',',delimiter='\t',
                                 encoding='latin1', na_values="n/a")
    
    # Prepare the data
    country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
    X = np.c_[country_stats["GDP per capita"]]
    y = np.c_[country_stats["Life satisfaction"]]
    
    # Visualize the data
    country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
    plt.show()
    
    # Select a linear model
    model = sklearn.linear_model.LinearRegression()
    
    # Train the model
    model.fit(X, y)
    
    # Make a prediction for Cyprus
    X_new = [[22587]]  # Cyprus' GDP per capita
    print(model.predict(X_new)) # outputs [[ 5.96242338]]
    

    在这里插入图片描述

    [[ 5.96242338]]

    值得注意的是,如果我们使用的是基于实例的方法学习,我们发现与 Cyprus 人均 GDP 最接近的国家是 Slovenia(人均 GDP 为 $20,732)。因为 Slovenia 人的生活满意度是 5.7,则可以说 Cyprus 的生活满意度也是 5.7。如果我们选择与 Cyprus GDP 最接近的 3 个国家,分别是 Portugal、Slovenia、Spain,GDP 分别是 5.1、5.7、6.5,则平均计算,得到 Cyprus 的人均 GDP 为 5.77。这两个结果与我们使用基于模型学习的结果很相近。这种实例学习方法就叫做 k-近邻算法。

    对应到代码中,如果使用 k-近邻替代线下回归,则只要把下面这条语句:

    clf = sklearn.linear_model.LinearRegression()
    

    替换成:

    clf = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)
    

    就好了。

    如果一切进展顺利的话,这个模型就可以较好地预测了。如果效果不好,那你还需要使用更多的特征(例如就业率、健康程度、空气质量等),获得更好的训练集,或者使用更强大的模型(例如多项式回归)。

    下面对基于模型学习作个总结:

    • 选取数据集

    • 选择模型

    • 在训练集上训练模型(即使用学习算法找到最佳参数,让代价函数最小化)

    • 最后,将模型应用到新的样本中,进行预测,希望的得到较好的泛化能力

    这就是构建一个典型的机器学习项目的过程。

    到目前为止,我们已经介绍了很多内容:你知道了什么是机器学习,为什么机器学习是有用的,机器学习有哪些类型,以及构建机器学习系统的一般流程是什么样的。

    项目地址:

    https://github.com/RedstoneWill/Hands-On-Machine-Learning-with-Sklearn-TensorFlow


    在这里插入图片描述

    展开全文
  • 机器学习极简入门课

    2019-07-05 10:16:32
    本达人课针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型——学习这些模型的原理、数学推导、训练过程和优化方法。 本课为每个模型提供...

    特别提示

    本课程为李烨老师达人课课程,需要购买训练营课程的同学请点击下方链接:

    21 天入门机器学习-第03期

    课程介绍

    本达人课针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型——学习这些模型的原理、数学推导、训练过程和优化方法。

    本课为每个模型提供了极小数据量的“极简版”实例,方便读者从直观上了解模型的运行原理。借助这些例子,大家可以将自己变身为“人肉计算机”,通过口算/笔算每一步的推导,模拟算法全过程,进而彻底理解每个模型的运作方式。

    此外,本课还介绍了构建数据集、特征选择、调参、验证模型的方法,以及如何同步进行编程语言学习。帮助您掌握进行机器学习产品开发的基本能力。

    作者介绍

    李烨,高级软件工程师,现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师。先后参与聊天机器人、大数据分析平台等项目的开发。微信公众号:yuesiyuedu;个人微信号:julia_li_2013

    课程大纲

    本课程大纲分为六大部分,共计 42 篇:

    enter image description here

    课程内容

    开篇词 | 入门机器学习,已迫在眉睫

    大家好,我是李烨。现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师。先后参与过聊天机器人、大数据分析平台等项目的开发。在未来的 10 周里,我将通过“机器学习极简入门课”与同学们分享机器学习相关知识。

    课程背景

    首先,我们来看下当前机器学习领域招聘市场行情。

    81b71f70-cdca-11e8-8458-03f9794b87bd

    上面表格中所有带有“算法”、“人工智能”、“数据挖掘”、“视觉”字样的职位,都需要掌握机器学习相关知识。

    在产品和服务中应用机器学习模型,已经逐步成为互联网行业的通行方法。甚至很多传统软件企业,也开始尝试应用机器学习。说得更直接些,人工智能正处在炙手可热的风口浪尖上,作为程序员不会机器学习都不好意思去找工作。

    很多技术开发者迫切希望快速进入人工智能领域从事工程或者算法等相关工作,这也是我推出这门课程的初衷。

    课程大纲

    本课程针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几大最经典的机器学习模型——学习其原理、数学推导、训练过程和优化方法。配合精心设计的极小数据量的“极简版”实例,方便读者从直观上了解模型的运行原理,利用实例大家还可将自己变身为“人肉计算机”,通过口算/笔算每一步的推导,模拟算法全过程,进而彻底理解每个模型的运作方式。结合自身实践经验,我总结了多个构建数据集、特征选择、调参、验证模型的高效方法,并教授大家如何同步进行编程语言学习,助你快速拥有机器学习产品开发的基本能力。

    本课程大纲分为六大部分,共计42篇。

    第一部分:绪论

    • 授人以鱼不如授人以渔。本部分从意义和作用出发,给出相应的学习方法和与理论配套的编程练习。

    第二部分:基本原理

    • 深谙其理,才能灵活应变。本部分带大家了解什么是机器学习、机器如何自己学习,以及机器学习三要素:数据、模型、算法之间的关系。

    • 模型是机器学习的核心,那么模型是怎么得到的呢?本部分也将讲解模型的获取(训练)和评价(验证/测试)过程,相应数据集合的划分以及具体的评价指标。

    • 这部分知识和后面讲述的具体模型结合起来,就可以实践了!

    第三部分:有监督学习 I

    • 抓住关键,个个击破。本部分重在详细讲解有监督学习中经典的线性回归、朴素贝叶斯、逻辑回归、决策树模型。这几个模型不仅基础、经典、常用,而且数学工具特别简单。

    第四部分:有监督学习 II

    • 百尺竿头,更上一层楼。本部分主要讲述支持向量机、支持向量回归、隐马尔可夫和条件随机场模型,从支持向量机开始,数学工具的需求较之前上了一个台阶,难度明显加大。

    第五部分:无监督学习

    • 无须标注,方便运行。本部分重在讲解无监督学习中的聚类、高斯混合及主成分分析等模型。训练数据无须标注,方便在各种数据上随时进行尝试,是这些模型的特征。在现实中,经常用来作为有监督的辅助手段。

    第六部分:从机器学习到深度学习

    • 超越自我,实现蜕变。本部分重在讲解深度学习基本原理、深度学习与机器学习的关联与衔接,以及深度学习目前的应用领域,为读者下一步学习“深度学习”奠定基础。

    点击了解《机器学习极简入门》

    整个课程以经典模型为驱动,讲述每一个模型所解决的问题域,模型原理和数学推导过程。作为课程的主体,第三部分和第四部分讲解的每个模型,都附有实例和相应的 Python 代码。每个例子的数据量都非常小——这样设计就是为了让读者可以用人脑模拟计算机,根据刚刚学到的模型算法对这些极小量数据进行“模拟训练/预测”,以此来加深对模型的理解。

    你将收获什么

    AI 技术岗位求职知识储备

    如果大家真的有意投身到人工智能领域,从事相关技术性工作,通过技术笔试、面试则是必要条件。在面试中被要求从头解释某一个机器学习模型的运行原理、推导过程和优化方法,是目前非常常见的一种测试方法。机器学习模型虽然很多,但是经典、常用的很有限。如果能学会本课程所讲解的经典模型,你将足以挑战这些面试题。

    触类旁通各大模型与算法

    各种机器学习模型的具体形式和推导过程虽然有很大差别,但在更基础的层面上有许多共性。掌握共性之后,再去学新的模型、算法,就会高效得多。虽然本课的第二部分集中描述了部分一般性共同点,但真要理解个中含义,还需要以若干具体模型为载体,从问题发源,到解决方案,再到解决方案的数学抽象,以及后续数学模型求解的全过程,来了解体味。这也就是本课以模型为驱动的出发点。

    极简版实例体验实际应用

    运用到实践中去,是我们学习一切知识的目的。机器学习本身更是一种实操性很强的技术,学习它,原本就是为了应用。反之,应用也能够促进知识的深化理解和吸收。本课虽然以原理为核心,但也同样介绍了:划分数据集、从源数据中提取特征、模型训练过程、模型的测试和评估等方法和工具。

    配套数据+代码快速实操上手

    本课程中各个实例的 Python 代码及相应数据,大家可以下载、运行、改写、参考。

    课程寄语

    我希望本课的读者在知识和技巧的掌握之外,能够将学习到的基本规律运用到日常生活中,更加理性地看待世界。

    再遇到“人工智能产品”,能够根据自己的知识,去推导:How it works——

    • 它背后有没有用到机器学习模型?
    • 如果有的话,是有监督模型还是无监督模型?
    • 是分类模型还是回归模型?
    • 选取的特征是哪些?
    • 如果由你来解决这个问题,有没有更好的方法?

    我们自己用来判断万事万物的“观点”、“看法”、“洞察”,实际上都是我们头脑中一个个“模型”对所闻所见(输入数据)进行“预测”的结果。这些模型自身的质量,直接导致了预测结果的合理性。

    从机器学习认识客观规律的过程中,我们可以知道,模型是由数据和算法决定的。对应到人脑,数据是我们经历和见过的万事万物,而算法则是我们的思辨能力。

    作为人类,我们不必被动等待一个外来的主宰者,完全可以主动训练自己的思维模型,通过改进算法和增大数据量及数据多样性来提升模型质量——如果能在这方面给读者朋友们带来些许启发,我实在不胜荣幸。

    最后,预祝每一位订阅课程的朋友,能够通过学习找到心仪的工作,如果大家有任何疑问和建议,也欢迎通过读者圈与我交流,我们共同学习,共同进步。

    我之前分享的一场 Chat 《入行 AI,选个脚踏实地的岗位》中曾提到,工业界所需的 AI 技术人员,更多集中在算法、工程、数据相关岗位之上,并全面总结了不同岗位角色所需要具备的素质、日常工作的状态及职业发展路径。这场 Chat 也将收录在课程中,作为福利供大家免费阅读,加油!

    点击了解《机器学习极简入门》

    第01课:为什么要学原理和公式推导

    机器学习最直接的应用,就是利用模型解决实际业务中的问题。

    本课所讲解的几个经典模型,均是前辈在机器学习发展的几十年间所总结出的、解决特定问题的固定模式,并且已在实践中得到很好证明。

    学会这些模型,一则可以以它们为载体理解“机器学习”是一种怎样的机制;二则掌握了模型,也就掌握了当前许多实际问题的有效解决方案。

    学模型就要学公式推导吗?

    在实际工作中,我们要运用一种模型,其实有很多现成的算法库、学习框架。只要将相应的数据输入工具、框架中,用几行代码指定模型的类型和参数,就能自动计算出结果。

    既然如此,何必再去学其中的原理,一步步推导让人头晕的数学公式?

    对于这个问题,首先给出我的意见:

    机器学习的原理和数学推导一定要学!

    此处且举个直观的例子:

    工具就像是武器,学会使用某种工具,只是学会了这种武器最基本的招式和套路。而理论学习即策略学习,决定了在未来真实对战中,遇到对手攻击时,你选取哪些招式套路,如何组合起来去迎敌。

    反过来讲,如果根本不学模型原理,只是把一个个应用场景背诵下来,需要的时候直接把模型当黑盒使用——这样做我们能学到什么?

    我们将学到:

    1. 算法库的安装;
    2. 库函数的调用;
    3. 数据的 I/O 转换。

    这和调用任何一个封装好的 API(无论其功能)有什么区别?和调用同事撰写的模块接口又有什么不同?

    学会这几件事能让你相对他人产生什么样的壁垒?作为一个原本非 AI 领域的开发者,难道因为会安装几个支持库,会调几个接口就身价倍增,就成为机器学习工程师了?

    学习原理的必要性

    回过头来,我们从正面来看学习原理的必要性。

    功利层面

    咱们先来看看最直接的用处。

    面试会考

    最起码,找工作的时候,但凡稍微靠谱点的企业,在面试“机器学习工程师”时,一定会问到模型原理和推导过程!所问到的模型,随着时间推移会越来越复杂。

    三四年前甚至更早,企业技术面试时,大多会问线性回归。这两年,已经基本从逻辑回归开始问了。再过一两年是否会问支持向量机,不得而知,但理论考察势必会越来越难。

    真想入这行,为了面试也得学其中的原理。

    老板会问

    在日常编码中,可能确实只是调 API 而已。

    很多时候,在决定使用哪个工具、框架,调用哪个模型算法后,你还需要向老板、合作方甚至客户解释其中的缘由。

    以前谁负责哪个模块都是自己搞定所有事,你怎么还想让别人给你标注数据呀?

    花费这么多时间和人力训练出的模型,怎么连个 DSAT 都 Fix 不了啊?

    既然再多投入几倍资源也达不到 95% 以上的正确率,为什么不干脆直接用 Rule-Base 来解决?

    ……

    Manager、Tech Lead、PM 都有可能围绕机器学习/深度学习投入产出比,提出各种问题。要在工作中运用这些技术,首先要说服他们。这个时候,原理就派上用场了。

    同事会质疑

    对你应用 ML/DL 的疑问,不仅来自上司,很多时候也来自于同级别的同事。

    相对于老板对性价比的关注,同事可能更关心技术细节——质疑新框架/工具/模型/算法,与之前的实施方案相比,在功能、性能等方面的差异。

    别人都用 TensorFlow,你为什么要用 Caffe 呢?

    以前这个分类器,我们用逻辑回归挺好的,你为什么非要换成 RNN 呢?

    用这个谱聚类做数据预处理,归根到底不还是利用词袋模型算词频,比直接计算 tf-idf 做排序能好多少呢?

    ……

    到了这个层面,只简单概括说说原理已经不够了,需要深入细节做对比:

    • 不同模型的特质、适用场景,对当前数据的匹配程度;
    • 不同算法对算力和时间的消耗;
    • 不同框架对软硬件的需求和并行化的力度;

    了解了这些,才有资格讨论技术。

    【文-1】

    实用层面

    当然,在日常工作中可以完全不理会 Peer 的质疑,对于 Boss 的决定也可以照单全收绝无二话。Engineer 嘛,只要埋头干活就好了。但总得把活儿干好吧。

    作为一个机器学习工程师,把活干好的基本标准是:针对技术需求,提供高质量模型。

    再高一个层次则是:针对业务需求,提供高质量的解决方案。

    优化模型

    机器学习工程师又被戏称为调参工程师。

    其所要做的工作就是在限定的数据上、规定时间内,为具体技术需求(比如训练一个分类器)提供性能尽量高、消耗资源尽量少的模型。

    选特征、调超参、换模型,称为调参工程师的三板斧,要想有章法地使用它们,理论基础还是必不可少的。

    至此,上面 【文-1】 处所描述内容,不再是和他人论战的“弹药”,而成了工作步骤的指导。

    • 评判模型性能的指标有哪些,如何计算?
    • 正在使用的模型是怎么工作的?
    • 这些超参数是什么含义,调整它们会产生哪些影响?
    • 特征选取有哪些原则、方法可运用?

    如果连以上问题都不了解,又怎么优化模型?

    针对实际问题定向建模

    成为一名合格的调参工程师,固然可以在 AI 领域占据一席之地,但对于业务和团队而言,仍然是个可有可无的角色。

    真正创造价值的,从来都是解决实际问题的人。

    这些经典的模型、算法,是前人在解决实际问题中所研究出的、具备通行性的解决方案。它们被广泛应用,是因为所解决的目标问题总会持续出现。

    然而,新问题也会随着新需求不断涌现,现有成果可能无法解决这些新问题,调参工程师这时将束手无策。

    但对于理论知识扎实的机器学习工程师来说,他们完全有可能针对具体业务问题,构造出目标函数,甚至开发出符合自身软硬件资源特点的求解算法。

    到了这一步,即使还使用现成工具,也不是靠 Google 一下 Best Practice,以及复制粘贴下代码就能解决的了。必须具备理论基础和数学层面的建模能力才行。

    点击了解《机器学习极简入门》

    第02课:学习机器学习原理,改变看待世界的方式

    学习机器学习,除了上一篇提到的实实在在的好处外,在务虚方面同样受益。

    学习模型运作原理,可以了解现实事物如何转化为数字并被计算,结果又如何映射回现实世界来影响我们的生活。

    掌握机器学习相关知识,能为我们客观认识现实带来下面这些帮助。

    破除迷信

    在这个看起来人工智能要席卷一切的年代,不光是正在或立志于在 AI 领域做技术工作的人,任何人都有必要从原理角度了解机器学习、深度学习是干什么的,以及如何发挥作用。

    作为一个带有神秘色彩的热点概念,人工智能(AI)被热炒、被歪曲、被妖魔化是难免的。

    人工智能是一个学术研究领域,目前在工业界有一定的应用和探索。AI 归根到底是个技术问题,可学、可用、可研究亦可质疑,而不是只能顶礼膜拜的法术神功。

    具备最基本的判断能力,才有可能不会被“神话”迷惑,不被“鬼话”恐吓。

    知道 ML/DL 模型是如何工作的,总不至于看了篇《AI 专业毕业生年薪 50 万》就慌慌忙忙报个了 2 万块的培训班,学了 pip install tensorflow ,通过复制粘贴代码可运行几个习题数据集,就以为能够找份年薪 50 万的工作了。

    知道 AI 有哪些落地点和局限,就不至于瞟了几眼《XX 职业要消失了》,《XXX 岗位将被人工智能取代》之类的网文就骤然开始仇视社会,好像自己明天就没有活路了似的。

    除了判断事,判断人可能更重要一些

    了解一件事的原理,自己有个基本的是非标准,再去看别人对它的评论,就不难看出评论者的“斤两”。也就不至于被其所说内容之外的语气、措辞,或者刻意的态度所误导。

    《机器学习极简入门》

    追本溯源

    人工智能从提出到现在已有几十年,几经沉浮。这些年间,模型、算法、实现技术已更迭了好几代,如今和当年已是天壤之别。

    所有的发展都不是凭空出现的,新方法、技术均在原有基础上创新得来。每一个具体的进步,都仅仅是向前的一小步而已。

    最容易创新的是技巧和细节,越“大”的创新,出现的频率越低。而原理所揭示的,就是这种“大”的、相对稳定的东西。

    机器学习最经典的那几个模型,历史都不短,长则半世纪,短的也快 20 年了。

    深度学习,早年是从属于机器学习的神经网络,因为运算能力不够而被束之高阁多年,近些年借助计算机硬件和分布式计算的发展而大放异彩。

    虽然技术本身和应用结果产生了巨大的飞跃,但从根本的原理层面,却有着紧密的传承。

    了解一件事是如何运行的,明晰事物发展的客观规律,知道从最简单的原理学着手逐层推进,比从一个已经很复杂的状态入手,一下子纠缠在各种不得要领的细节中要高效得多。

    有了这样的认识,也就不会被一些名词所局限。不会仅仅因为人家做了一些细节改变,或者换了个说法就以为天翻地覆了。

    具体到 AI 领域,真的了解了支柱技术的基本原理,总不至于:

    看了一篇《当这位70岁的 Hinton 老人还在努力推翻自己积累了 30 年的学术成果……》,便宣布再也不学 CNN、DNN、RNN 了(好像真的学过一样)。

    或者:

    因为《深度学习已死,可微分编程万岁!》刷屏,就以为目前在视觉、语音、NLP 等领域已经在创造价值的 DL 工具瞬间消失无用了。

    精进看待世界的方法

    相较于仍然处于经验(“炼丹”)阶段的深度学习,传统的统计学习模型和方法已经具备了相对完善的理论基础。

    我强烈建议:即使目标岗位是“深度学习工程师”,也应该从统计学习方法学起。

    一方面深度学习与机器学习具有传承的关系,学习后者对于直观理解前者有极大帮助。

    另一方面,统计学习方法建立在将概念“数字化”(向量化)的基础上,以数学公式和计算来表达概念之间的关联及转化关系。机器学习是一种认识世界的工具,借助它,我们可以从一个新的角度来看待世间万物。

    换句话说,当我们知道机器是怎样通过学习事物特征的概率分布和转换来掌握事物规律的时候,我们就有可能反过来审视自己看待世界的方法,发现其中不合理的部分,并主动优化自己的思维模型。

    比如,我在学习机器学习原理的过程中,对人类的思维方式产生了一些思考:

    人类的道德标准实际是一种社会层面的极大似然估计。

    遗忘是学习的一个步骤,是一种对信息的过滤方法,也是人类在脑力有限情况下对自身大脑的一种保护机制。

    人类的偏见是一种长期训练的结果,在信息极其匮乏的情况下,对人们做决定往往是有正向帮助的。信息越丰富,偏见的负面影响也就越严重。

    大多数人最常用的思维模型是 KV Pair,有些人似乎终身只有这一种思维模型。

    一般人往往默认一类事物的所有个体在概率空间是均匀分布的。在考虑某一个事物个体时,对其在同类事物中所处的位置——是小概率事件还是常态?发生概率相对之前是稳定、上升还是下降?——通常毫不在意,而一概认为被提及的个体很重要。

    对于原因和结果的关系,多数人根本没想过去探究其转换模型,而直接默认是线性关系。比如:A 地的年均 PM2.5 指数是 B 地的 10 倍,PM2.5 被认为与肺癌发病率有关,于是想当然以为 A 地肺癌发病率是 B 地 10 倍。

    当一件事物比较复杂,涉及多个方面的时候,要对它有一个全面的评价,目前最常用的方法是构建一个线性回归模型:选定一些特征,针对每个特征独立打分,最终加权求和(例如大学排名之类)。

    线性回归是一个非常简单的模型,往往无法达到很好的效果。但即使这样简单的模型,很多人还是无法掌握。

    面对一项事物,既不能列举出其主要特征,也不知道如何评估每个特征,更不用提再加权求和了。多数人最常用的全面评价标准,如果是一手资料则一般以某(几)个个例的某个特征来代替全集;如果是二手资料,则一般选择相信自己最先接触到的他人结论。

    以上这些仅是一些很初级的想法,并没有进一步的研究验证。

    我分享出来只是想说明:学习机器学习原理和公式推导,并非只是做一些无聊的数字变换。很可能由此为我们打开一扇窗,让我们从新的角度看待世界,并为日常的思考过程提供更加可量化的方法

    点击了解《机器学习极简入门》

    第03课:如何学习“机器学习”

    学习“机器学习”这件事,我走过很长的一段弯路。有一些心得、体会和方法,在此和大家分享。

    《机器学习极简入门》

    以模型为驱动,了解“机器学习”的本质

    本课力图引导大家以模型为驱动,进行学习。

    我选择了几种经典模型(例如:线性回归、逻辑回归、决策树、支持向量机、条件随机场、K 均值等),作为入门的进阶。

    初次学习模型,不必贪多。但就这些选定的模型,一定要搞清楚其问题域、模型函数、目标函数、训练算法……潜入到数学公式推导的层面,对每一步的公式变换和对应的物理意义有所理解,然后再去实践。

    这一个个的模型,就是机器学习的“肌肉”,我们要通过观察学习这一块块肌肉,以其为载体来了解机器学习的核心——将事物转化为数值,将关系、变换转化为运算,以事实(数据)为依据,以规章(算法)为准绳,通过计算来掌握事物的客观规律(模型)。

    enter image description here

    要知道,这些经典模型固然经典,但是到了实际应用中,它们并非神圣不可改变。也不是说机器学习就仅限于这些经典模型。

    只有掌握了机器学习精髓的人,才可能灵活运用现有模型去解决实际问题,甚至进一步针对具体问题得出自己的模型和算法。

    反复学习,从记忆到掌握

    当然,达到这种程度并非一蹴而就,总要从最简单的模型开始。

    根据我的经验,即使要真正掌握本课列出的这几个最常用且相对简单的模型,也需要反复学习。

    有可能第一遍看完有点似懂非懂,或者感觉自己明白了,但要自己从头推导又卡壳了。

    就像刚学完又忘掉的生字,或是背了一半后半部分怎么也想不起来的九九乘法口诀。这都是非常正常的现象。究其原因,就是还没有真正掌握。

    多学几遍,从头到尾掌握整件事情的逻辑,知道一个模型是怎么从最初设定目标,到一步步实现目标的——当真正掌握了这个过程之后,再回头看一个个具体的模型,每一步都是顺理成章的。

    掌握了事物内在的逻辑,再去记忆,就容易多了。

    学习标准设置得不必太高,比如可以这样:

    第一遍学,只要求自己能完全掌握机器学习数据、模型、算法相互作用的基本关系,训练过程和评价标准。具体的模型,掌握最简单的线性回归就可以。

    只要从头到尾掌握了第一个模型,做到:能够从模型函数开始推导出目标函数,再用梯度下降算法求解,用(伪)代码实现梯度下降求解过程。

    第一遍学习掌握一个模型;第二遍学习就不难掌握2-3个模型;第三遍就有可能掌握本课列出的大部分模型………如此由易到难,螺旋式推进

    对于一些本身就比较复杂的数学模型,比如条件随机场、隐马尔科夫这类涉及场论和势函数的模型,如果直接入手,往往会卡在模型函数本身上。但是当有了前面几个模型的基础,了解了更抽象层面的原理,掌握起来就容易多了。

    数学需要多精深?

    很多同学,想学机器学习。但是一上来就看模型,看到一大堆炫酷的公式,往往感觉很吓人。

    有些人也就因此萌生退意,要么放弃,要么只用现成工具把模型当作黑盒使用。

    其实,学习经典模型,并不需要多么精深的数学功底,只要掌握大学理工科本科所教授的数学知识就基本够用了。

    基础数学概念

    在学习的最初阶段,只要:

    • 学过坐标系;
    • 了解函数、向量和矩阵的概念;
    • 能从直观角度对求导、求微与函数的关系有所理解;
    • 并掌握最简单的矩阵运算。

    就可以对本课中的经典机器学习模型有一定深度的感性认识了。

    本课中的公式都是经过精简的,务必要掌握。如果数学工具实在掌握得太少,最起码也要读懂一组公式推导中的第一个和最后一个式子:

    • 读懂它们都针对哪些变量进行了怎么样的运算;

    • 这些变量和运算的物理意义是什么;

    • 第一个式子是对哪种真实场景的数学描述;

    • 最后推导的结果又具备怎样的特征。

      enter image description here

    初次学习者,可以暂且掌握到这个深度。

    两条路径反刍数学知识

    当然,仅仅掌握到这种程度,勉强可以套用现成的模型,却不可能达到灵活运用的程度。

    所以,同学们应力求理解每一步推导过程。

    如果有可能,可以事先复习一下大学本科的高数(数学分析)、概率统计和线性代数。或者,在学习模型的过程中,一旦遇到了数学上的阻碍,就回头去查找相应知识。

    制定数学知识速查手册

    很多数学问题,之所以让人头大,其实并不是真的有多难,而是符号系统比较复杂,运算繁复,或者运算所表达的物理意义多样。

    很多时候造成困扰是因为想不起来这里用到什么定理,哪个公式,或者这样操作表达的含义是什么。

    如果把常用的细小知识点都记录下来,按主题整理成速查手册(小字典),需要用的时候快速查找对应的知识点,这样我们的“机器学习”学习之路就顺畅不少。

    下面两个是我自己制作的例子,供大家参考:

    日常学习 Tips

    关联

    把新学到的东西和日常的工作、生活联系起来,进行思考。比如:将理论代入现实,不同领域间事物的类比,相似内容的对比等。

    以身边的实例来检测理论。不仅能够加深理论知识的理解,而且有助于改进日常事物的处理方法。

    记录

    准备一个笔记本,纸质版或电子版均可。有什么发现、感想、疑问、经验等等,全都记下来。

    如果是对某个话题、题目有比较完整的想法,最好能够及时整理成文,至少记录下要点。

    隔一段时间把笔记整理一下,把分散的点滴整理成块,一点点填充自己的“思维地图”。

    分享

    知识技能这种东西,学了,就得“炫耀”——把学习到的新知识、理论、方法,分享给更多的人。如此一来,倒逼自己整理体系、记忆要点。这可以说是与人方便自己方便的最佳实例。

    把自己的感想、体会、经验分享出来的同时,也锻炼了自己的逻辑思维能力和归纳总结能力。一举多得,何乐而不为?

    点击了解《机器学习极简入门》

    第04课:为什么要学 Python 以及如何学 Python
    第05课:机器是如何学习的?
    第06课:机器学习三要素之数据、模型、算法
    第07课:模型的获取和改进
    第08课:模型的质量和评判指标
    第09课:最常用的优化算法——梯度下降法
    第10课:线性回归——从模型函数到目标函数
    第11课:线性回归——梯度下降法求解目标函数
    第12课:朴素贝叶斯分类器——从贝叶斯定理到分类模型
    第13课:朴素贝叶斯分类器——条件概率的参数估计
    第14课:逻辑回归——非线性逻辑函数的由来
    第15课:逻辑回归——用来做分类的回归模型
    第16课:决策树——既能分类又能回归的模型
    第17课:决策树——告诉你 Hello Kitty 是人是猫
    第18课:SVM——线性可分 SVM 原理
    第19课:SVM——直观理解拉格朗日乘子法
    第20课:SVM——对偶学习算法
    第21课:SVM——线性 SVM,间隔由硬到软
    第22课:SVM——非线性 SVM 和核函数
    第23课:SVR——一种“宽容”的回归模型
    第24课:直观认识 SVM 和 SVR
    第25课:HMM——定义和假设
    第26课:HMM——三个基本问题
    第27课:HMM——三个基本问题的计算
    第28课:CRF——概率无向图模型到线性链条件随机场
    第29课:CRF——三个基本问题
    第30课:从有监督到无监督:由 KNN 引出 KMeans
    第31课:KMeans——最简单的聚类算法
    第32课:谱聚类——无需指定簇数量的聚类
    第33课:EM算法——估计含有隐变量的概率模型的参数
    第34课:GMM——将“混”在一起的样本各归其源
    第35课:GMM——用 EM 算法求解 GMM
    第36课:PCA——利用数学工具提取主要特征
    第37课:PCA——用 SVD 实现 PCA
    第38课:人工智能和神经网络
    第39课:几种深度学习网络
    第40课:深度学习的愿景、问题、应用和资料
    附录:入行 AI,选个脚踏实地的岗位

    阅读全文: http://gitbook.cn/gitchat/column/5ad70dea9a722231b25ddbf8

    展开全文
  • 1. 前言本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点。...
  • 放假当咸鱼的时候学校要求阅读论文文献,老板找了25篇比较经典的模式识别与机器学习相关的论文要求阅读,作为对人工智能一无所知且前半生学术生涯全贡献给通信的半路出家和尚,内心是茫然无措的,如何阅读论文也是两...
  • 对想学习机器学习的人来说,信息太多也是一种困扰,开放的课程、书籍、框架、开源代码那么多,每套资料都有自己的好处,有人说这个课程好,有人说那个框架最好用。 那么,对新手来说,究竟该从哪个开始学?学哪个...
  • 本书从日常工作、生活中各种有趣的现象出发,不仅囊括了机器学习的基本知识,而且还包含了成为出众算法工程师的相关技能,更重要的是凝聚了笔者对人工智能领域的一颗热忱之心,旨在培养读者发...
  • 第01课:为什么学原理和公式推导 机器学习最直接的应用,就是利用模型解决实际业务中的问题。 本课所讲解的几个经典模型,均是前辈在机器学习发展的几十年间所总结出的、解决特定问题的固定模式,并且已在实践中...
  • 尽管深度学习具有如此高的性能,但使用经典的机器学习和一些特定的情况下,使用线性回归或决策树而不是大型深度网络会更好。在过去几年中,深度学习已成为大多数AI类型问题的首选技...
  • 1. 前言 本来这篇标题我想的是算法工程师的...今天就说说机器学习这个最近两年计算机领域最火的话题,这不是一篇机器学习的技术文章,只是告诉大家机器学习里面的坑实在是太多,而且很多还没入门或者刚刚入门的朋友们
  • 人工智能和机器学习是在科技界引起了一些列轰动的热门术语。这两个术语通常被混着使用,其实不尽相同。人工智能和机器学习在方法、算法和逻辑思维等方面有很大的差异。 让我们通过数据看看一下人工智能和机器学习在...
  • 既然已经身在工业界,那么我就谈谈工业界未来几年需要什么样的机器学习人才。不谈学术界主要还是因为大部分人最终不会从事研究,而会奋斗在... 工作不久想转行机器学习的朋友。特别厉害的技术大牛建议探索适合自己
  • | Tim Rocktäschel译者 | Sambodhi编辑 | Vincent出处丨 AI 前线AI 前线导读:美国的暑期实习短期项目能够为大学生及研究生开阔视野,增长知识,很多学习人工智能大学生都会利用这个机会去进行短期机器学习研究项目...
  • 机器学习的基本知识  作为一个终生的微软开发人员,我经常看到开发人员努力寻找解决日常问题所需的资源。让我们面对现实吧,我们没有人有时间按照自己喜欢的方式做事,我们中很少有人有幸在真正的研发部门工作。...
  • 机器学习不仅仅是模型产生这个问题的原因就是所有人都以为机器学习的模型就是机器学习本身,以为对那些个算法理解了就是机器学习的大牛了,但实际上完全不是这样的。模型是谁在玩呢?模型是科学家发明出来的, 是...
  • 1. 前言 本来这篇标题我想的是算法工程师的...今天就说说机器学习这个最近两年计算机领域最火的话题,这不是一篇机器学习的技术文章,只是告诉大家机器学习里面的坑实在是太多,而且很多还没入门或者刚刚入门的朋友们
  • 营长的一位转型AI的朋友,最近对营长抱怨,“走过的最远的路,就是机器学习过程中的弯路”,然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽。尤其是论文,他骂道:“最讨厌的就是那种,...
  • 机器学习干货贴

    2016-10-02 01:58:28
    1.Kaggle Ensembling Guide 摘要:Creating ensembles from submission files Voting ensembles. Averaging Ra... ...摘要:机器学习相关理论,Machine Learning Theory - Part 1: Introduction,Mach
  • 授权自AI科技大本营(ID:rgznai100)本文长度为6900字,建议阅读6分钟本文为你解析机器学习路上的弯路,希望能够帮你避坑,更好的学习。一位转型AI的朋友,最近对我抱怨,“走过的最远的路,就是机器学习过程中的...
1 2 3 4 5 ... 20
收藏数 20,873
精华内容 8,349
关键字:

老板要机器学习