Machine Learning
所谓机器学习到底是什么呢?顾名思义,就是机器具有学习的能力。事实上,机器学习概括来说可以用一句话来描述:机器学习就是让机器具备寻找一个函数式的能力。
Machine Learning ~= Looking for Function 这件事可以用很多例子来证明。
1.在做语音识别的时候,目的就是寻找一个解析声音讯号的函数式,该函数式的输入为声音讯号,输出为声音讯号的具体文本内容。
2.在做图像识别的时候,目的就是寻找一个“图片解析器”的函数式,该函数式的输入为图片的信息,输出为图片的内容是什么。
3.AlphaGo,让机器学会下围棋,其实也可以看作是函数式,函数式的输入为棋盘上黑白棋的位置,输出则为下一步落子的位置。
Different types of Functions
寻找的函数式不同,机器学习的类别也有所不同。
Regression回归
Regression回归的意思是说,假设我们今天要找一个函数式,他的输出是一个数值,是 一个scalar(标量),那这样的任务就称之为Regression回归。
假设我们要预测未来某时间PM2.5的值,我们要做的就是让机器寻找到一个函数式f,函数式f的输入可以是各种与PM2.5有关的系数(如今天的PM2.5数值,温度,臭氧浓度等),函数式的输出是明天PM2.5的值(具体数值),相当于是在做数学中的填空题,输出为一个具体的数值,这种任务叫做Regression回归。
Classification分类
除了Regression回归以外,另外一种耳熟能详的机器学习任务叫做Classification分类,那Classification分类就相当于是机器在做选择题。分类的目标是要求机器从人类事先准备好的若干种类别(class)中选择出正确的类别。
举个例子来说, 现在每个人都有自己的邮箱。那我们可以设计一个函数式,来帮我们侦测收到的邮件是否为垃圾邮件?那么该函数式的输入就是一封邮件,输出就是 “垃圾邮件” or “非垃圾邮件”,那么机器的任务就是从输出的两个class中做出正确的判断,这种任务就叫做Classification分类,那分类任务不仅仅是二分类,也可以是多分类(AlphaGo从19*19的棋盘上选择落子的位置)
其实,机器学习不仅仅包括Regression回归和Classification分类这两大类任务,除此之外,还有Structured Learning等。所谓Structured Learning,也就是说,机器不止要会做填空题和选择题,还要产生一个有结构的东西,比如:写作文。
Case Study(以预测youtube流量举例描述机器寻找函数式的过程)
假设我们对youtube上的频道每日观看次数比较关心,想要对频道每日观看次数进行预测。那我们在youtube的后台上是可以看到很多和日流量相关的资讯,比如说订阅的人数,观看次数,点赞人数等。我们能不能根据频道上过去所有的相关资讯,来预测频道明天的观看次数?我们的目标就是寻找一个函数式,该函数式的输入为youtube后台相关的资讯,输出就是为未来某一天频道的观看次数。
机器学习寻找这个函数式的过程,分为三个步骤:
1. Function with unknown parameters
第一个步骤,我们要写出一个带有未知参数的函数式,简单来说就是我们先预测一下这个函数式,它长什么样子。举例来说,我们先做一个初步的猜测,函数式如下:
其中y表示我们要预测的东西,x表示今天的观看次数, w和b均为未知参数,是要通过训练资料去找出来的。
这个带有未知参数的函数式(Function with unknown parameters),我们称之为model。
假设我们要靠2月25号频道的观看次数 x1 来预测2月26号频道的观看人数 y ,那 x1 就叫做Feature(特征),而w和b是我们不知道的参数parameter,w叫做weight权重,b叫做bias偏差。
2.Define Loss from train data
第二步,我们要定义一个东西,叫做Loss,Loss它也是一个funciton,这个function的输入是model里面的参数parameter,对上述的例子而言,参数就是w和b,所以Loss的输入就是w和b,是一个关于w和b的函数式。Loss存在的意义就是用来衡量model中参数parameter的好坏。
那Loss怎么来?将N笔中每一笔训练资料得出的预测值 y 与 真实值yhat 做差得到误差e,将每一笔训练资料的e求和,最终再除以训练资料笔数N,得到Loss-funciton。L越大,则代表这组参数越不好,L越小,则代表这组参数越好。
其实,估计实际值与预测值之间有不同的方法,上述的方法是通过计算实际值与预测值之间绝对值的差距,这种计算差距的方法,叫做MAE(mean absolute error)。如果是将预测值与实际值相减 再求 平方的方法 叫做MSE(mean square error)。如果有一些任务,预测值和实际值代表的都是几率,一般使用cross-entropy loss。
2.1.error surface
我们通过调整w和b的不同组合,再通过训练资料去计算Loss。假设我们得到如下的等高线图。在这个等高线上面,越偏红色系,Loss越大,越偏蓝色系,Loss越小。Loss越小代表参数越好。在通过调整参数的不同组合下, 得到的Loss图,就称之为error surface。
3.Optimization
optimization所做的事就是一个寻找最优解的过程。我们知道,Loss越小,代表其参数越好。那如何找到当Loss最小时的参数值呢?
我们用到的Optimization方法叫做Gradient Descent梯度下降法,为了简化起见,我们假设只有一个参数w。我们知道w不同,Loss也会不同,我们假设下图的曲线为error surface(由于只有一个参数w,所以是error surface是1D的)
那如何去找Loss最小时对应的参数值呢?
①首先随机初始一个点 w0
②计算当w=w0时,w这个参数对Loss的微分值
其实就是w0这点的切线斜率,如果说斜率是负的,则代表左边高,右边低,反正左边低,右 边高。
③如果左边高,右边低的话,就代表要将w往右移动,反之则将w往左移动。
那每一次要移动多少,这取决于两件事:斜率大小 以及 学习率(Learning rate)
那在上述过程后把w往右移动一步之后到达w1的位置,这一步的步伐大小就是斜率大小乘上学习率大小的结果,公式如下:
接下来要做的事情就是反复以上的操作,不断的移动w,直到停下来。
那什么情况下会停下来?往往有两种情况
第一种就是你失去耐心了,假设你本来计划要更新w一百万次,但是更新了五十万次之后你迫不及待了。至于要更新几次,这其实也是一个超参数(hyper parameter)。
第二种是理想上的情况,当我们不断的调整参数,知道参数在某个地方的梯度为0,乘以学习率还是等于0,所以你的参数就不会再次移动。
但你可以能会发现,Gradient descent有一个巨大的问题,我们要找的值是Loss的global minima,但是这个过程中会受到local minima局部最小值的影响,当参数w更新为wT的时候,这个时候左右两边的Loss都比较高,梯度可能为0,会使得Gradient descent 不再运作,但他不是整个erros surface上的最低点。
上述的例子是只有一个参数w的情况下,那如果有两个参数w和b呢?其实道理是一样的,只不过它的error surface是2D的。
2D的error surface上的梯度下降法也没有什么不同,将每次w和b更新的方向结合起来,再结合斜率大小和学习率,就可以得到方向向量,如图中的红色箭头,就是参数更新的方向。
Linear Model
通过一系列操作,我们找到了一组使得Loss值比较小的参数w = 0.97 b =0.1k,此时对应的Loss值为0.48k。但我们真正在意的是对未来某一天的观看人数的预测,预测如下:
其实可以发现,蓝色的线不过是红色线的平移而已,这也很合理,因为你所得出的funciton 就是前一天的人数乘上0.97 再加上0.1k,得到的值就是隔天的观看人次。
但其实真实的资料上有一个神奇的现象,就是它是有周期性的,它每隔七天都会呈现出相似的曲线。那么如果我们有一个模型,它不是只参考前一天的资料,而是参考前七天的资料,会有什么样的结果?其实,这就是你对这个问题的理解,也就是Domain Knowledge。
所以我们更改模型,利用前7,28,56天的参考资料作为Feature,训练并得到新的模型。这样的模型有一个共同的名字,叫做Linear Model。