股票预测系统:这一个函数输入是过去十年的股票资料,输出是明天道琼工业指数的点数
无人车:输入是无人车的红外线感测的传感器,影响的镜头所看到的是马路上的东西等,输出是方向盘的角度。
推荐系统:输入就是使用者A或者是商品B,输出的就是购买的可能性。
例子的应用:预测宝可梦的CP值(宝可梦的战斗力)
今天所讲的例子就是找一个函数,输入是宝可梦相关的function,输出的是进化后的CP值
:还进化之前的CP值
:是属于什么物种
:生命值是多少
和 :重量和身高
输出y:进化后的CP 值
现在怎么做呢?
先找一个model(function set),第二步就是找function set当中的function,拿出其中的一个function来判断他的好坏,最后一步是找最好的一个function出来。
第一步:
找一个function set,这个function set就是model,现在我们写一个简单的函数当作是这个粒子的函数。
(w和b是未知的参数,可以是任何的数值)
如果w和b的数值是任意设定的,那么就可以得到很多的函数,上图中的函数就是所有函数的集合。
但是在上面的这些函数当中有一些可能不是符合宝可梦这个例子的函数,可能就不是正确的函数,因为CP值是正的。所以一会要经过training data来检验出在这个函数集合当中哪一个是正确的函数。
上面的函数集合称作是Linear model。
第二步:
现在要收集training data,才能找function,所以我们收集的是function的输入和输出(是一个数值)
现在我们收集了十只宝可梦,每一只的编号是从1到10,他们的输出CP值是从到,这些是真正的数值。
我们现在把这十只的信息在图上画出来的话,图中的每一个蓝色的点 代表一只宝可梦,x轴代表的是一直宝可梦的CP值,y轴式进化后的CP值。第n个宝可梦的表示如图所示
现在有了这些training data之后就可以定义function的好坏,怎么做呢?
我们要定义另一个function:Loss function L ,他的输入就是一个function,输出是判断输入的这个函数的好坏。(也就是衡量一组参数w和b的好坏)
怎么定义这个L函数呢?
小括号里面的是预测的CP值,真正的CP值是前面的。
(估测的误差)
所以上面的步骤就是用给估测的误差来估测Loss function。
loss function函数画出来:
颜色越红,代表这Loss的function越不好,颜色月偏蓝色,代表着function越好。
我们已经定好了Loss function ,可以衡量每一个model的好坏,接下来做的事情就是在function set当中挑选一个最好的function。
Gradient Descent(梯度下降法)的作用
只要L这个函数使可微分的,不管是什么函数Gradient Descent都可以拿来处理这个函数
(1)先考虑一个函数L(w),这个L函数里面只有一个函数,并且L函数是任意一个函数
现在的问题是找一个w使的这个L函数最小。
最有效率的做法是:
第一步:随机选出一个初始的点w0。
第二步:计算w在w0处对L的微分。(图中的切线斜率)如果斜率是负数的话,可以知道L的曲线是左边高右边低的样子,我们要找的是L比较低的function,所以我们要增加w的值(把w往右移动)反之,计算的斜率是正数的话,曲线则是右边高左边低的状态,我们就应该减少w的值(把w往左边移动)。
第三步:怎么增加,增加多少呢?(取决于两件事)一是现在的微分值(dL/dw)是多少,微分值越大增加的就越多,反之,就越小。二是前面的常数项leaning rate(事先定好的数值)这个常数项越大,更新的数值就越大,反之就越小。
(黄色阴影部分的负号解释:)如果微分算出来是负数的话,要增加w的值,算出来的微分是正数的话,就增加w的值。所以微分的值跟我们增加的方向是反向的,所以前面加上负号。
把w0更新以后变成w1。接下来就是重复上面的步骤,经过多次的参数更新以后w的值就更新到了wT(Local optimal)的地方,这个地方的微分是0,参数就没办法往下更新了。但是在下面的这个图中。wT并不是L的最小解,后面的这个点才是使L最小的点,注意的是,在regression当中是没有Local minimun的。
如果是有两个参数的问题:
第一步:随机选取两个任意的参数w0,b0
第二步:在w=w0,b=b0的状况下求在这两点的微分。
第三步:更新参数,反复更新参数。
补充:Gradient Descent中的Gradient(坡度)指的是什么?
总结上面两个参数的时候:
(越接近蓝色的部分说明L函数越好)
但是Gradient Descent有比较让人担心的部分:
如果是这样的话,找到最合适的参数更新值,凭运气,但是在linear regression当中,L 函数是凸函数,没有局部最优点。(就是凹下去的点)
上面的三维图可以展开成下面的二维图:
在这个途中的所有等高线都是呈现椭圆形的,不挂吧是从什么方向最终更新到的参数都是同一组参数。
上面这个图的偏微分长什么样子呢?
接本节前面的宝可梦的例子
最后的结果是什么样子的呢?找出的最好的w= 2.7,b=-188.4,把这个函数在图上标示出来,但是这条红色的先没办法将所有的点完全覆盖。
但是上面的这个误差并不是我们真正关系的,我们关心的是没有见过的新的数据的误差。(testing data的误差是多少),所以又新抓的十只宝可梦作为新的data。
上面的这个图是另外新抓的宝可梦的CP值分布图像
计算一下这十只的误差是多少:
怎么样预测的更准确一点呢?
这就要求我们重新设计一下模型(可能不是一条直线)
要引入二次式:
还可以做的更好:更复杂的模型
当有更复杂的函数模型的时候,计算出来的testing data的误差更大了,这种结果是怎么样导致的呢?
当我们换了一个更加复杂的函数的时候:
最后的结果更加糟糕
到目前为止,我们试了五个模型,将这五个模型在training data的误差画在同一张图上
为什么还会出现这样的结果呢?
假设上面不同颜色的圈代表的是每个函数的函数空间,理论上是越复杂的模型,包含的越多的函数的话,就可以找出一个函数,让我们的误差率越低,但是前提必须是Gradient Descent真正的找出那个正确的函数。
在testing data上面看起来的结果不是一样的,在training data中,模型越复杂,误差率就越低。但是在testing data上面的话在第三个模型误差率就不是越来越低。
所以,模型不是越复杂越好,要选一个合适的模型。
over fitting
为什么会出现overfitting这种状况呢?(后面再讲)在上面的这个例子当中选的最合适的模型就是第三次的时候。
当我们收集的训练数据达到60 只的时候:上面例子得到的结果就不具有很强的说服力了,因为还有其他的因素影响。(比如说宝可梦的物种)
所以上面的模型就不好,重新设定新的模型:
输入的是神物种,就带入不同的linear model得到不同的输出
把上面的if的式子可以携程下面的这一连串的式子:
解释上面的式子:如果输入的是比比鸟的话,则:
得到:
这个式子也是linear model
有了上面的这个模型最后的结果会是社么样子的呢?
在training data上面是:
蓝色的线是比比鸟的,绿色的是绿毛虫的线,黄色的线是独角兽的,红色的是伊布的。最后得到的误差是3.8
我们真正在意的是这个函数模型能不能预测新的宝可梦,也就是在testing data上面的误差是多少
但是通过上面的函数图像,我们可以看到还有一些线上的点是略高于或者略低于线,有可能是其他的因素影响。
哪有什么样的因素影响进化后的CP 值?
我们现在把所有能想到的因素都加到一个函数模型当中去:
这么复杂的式子最后得到的training data的误差是1.9,但是得到的testing data 的误差不一定是很低的,有可能出现over fitting(过拟合),出现这样的状况怎么办?解决的办法是regularization
这种方法的意思是重新定义我们的L函数,再加上额外的一些term。
regularization
这个函数合起来才是我们真正的loss函数。现在要的就是一个越接近于0的L函数的参数。
输入的参数并没有引起L函数的输出是波动很大的,输出对输入的反应不是很敏感。
现在的问题是为什么我们喜欢比较平滑的function?
是因为如果输入的是一些比较杂乱的因素,那么输出就不会受这些杂乱因素的影响
现在加入regularization项之后得到的结果:
我们要找的模型要有多平滑的问题就转变成找的值
在这个点处=100时,training和testing data最小。
在做regularization时是不用考虑bias这项的,因为bias这项是跟function的平滑度是没有关系的。调整bias是跟函数的上下移动有关。
总结:例子中提到的宝可梦的进化后的CP值是跟进化之前的CP值以及是什么物种有关,但是也有可能有其他的因素影响。
内容原创,转载请告知,若内容有勿,也请告知,随手笔记~