什么是机器学习:就是让机器具备找一个函式的能力
那具有什么样的能力呢?
语音辨识:函式输入的是一段语音信号,输出的是一段文字
影像辨识:函式的输入是一张图片,输出的是这张图片的内容
阿尔法狗:函式的输入是棋盘上黑子和白子的位置,输出的是机器接下来落子的位置
第一个任务是:Resgression :输出是一个数值(scalar)
举例:结社让机器做的事预测未来某一天的PM2.5的值,机器的输入是今天PM2.5的值,温度和臭氧的浓度,中间的是我们要找的函式,输出的是明天的PM2.5 的值,那找中间函式的任务就是Resgression.
第二个任务:Classification(分类)
先准好一些选项(类别),要找的函式的输出就是在设定好的这些类别中选择一个输出
举例:
让函式判断传来的邮件是不是垃圾邮件,函式的输入是一封邮件,函式要先准好选项,是或者不是,这封邮件经过函式的判断,输出是或者不是。
但Classification不只是只有两个选项,也可以有多个选项比如阿尔法-go,让机器下围棋
举例:
机器的输入就是19×19的选项(就是棋盘上棋盘格的个数),输出就是让函式找到正确的落子位置。
让机器画一张图,写一篇文章,让机器创造有结构的东西
机器如何找一个函式才能完成上面的操作呢?(作者的频道)
那现在找一个函式,函式的输入是过往后台youtube的资讯,输出的是这个频道隔天的总点击率共有多少
如图:
怎么找到这个函式呢?
机器学习照这个函式的过程是分为三个步骤(现在用youtube点阅人数来说明)
第一个步骤:
首先我们要写出带有未知参数的函式,大概的参测一下要找的这个函式的数学式子是什么样子
如图所示:
其中的y指的是预测今天这个频道总共点击阅读的人数,x1:值得是昨天这个频道点击阅读的人数(已经知道的)
b和w:未知参数,是通过资料找出来的
注:这个函数的设定值时猜测的,不一定是这个函数
第二个步骤:
定义一个LOSS,这个函数的输入就是Model的未知参数
这个函数输出的值代表:将未知函数值设定为一组固定的数值时,来判断这组数值的好坏
举例说明:如何计算LOSS
给定一组训练资料,是这个频道过去的点阅次数,现在计算LOSS
现在假设b的值时0.5k,w的值时1,我们已经2017/1/1的点击量时4.8k,现在预测第二天的点击量是多少,把4.8k带入到函式当中计算出第二天的点击量是5.3k(预测的值,不是真实的点击量),但是真实的数据表明第二天的点击量是4.9k,所以真实值和预测值之间的差就是e1=0.4k,真实的值叫做label(正确的数值), 按照这样的方式我们可以将这三年的误差全部计算出来。
将每一天的误差的平均值算出来,如果L的值越大则说明设定的参数越不好,L越小,选定的参数就越好。
计算差值e的方法有两种:
根据自己的需求来选择合适的方法计算e。
举一个真实的例子:调整不同的w和b的值,可以得到如下图 (等高线图)
图中越接近红色部分说明L越大,则预测的值越不准,越接近蓝色的部分说明L的值越小,则预测的越准。
第三个步骤:解最佳化的问题,找一个w和b使L最小
使用到的方法:Gradient Descent
假设只有一个参数w:
当w取不同的数的时候就会得到一个L曲线:
这个曲线叫做 error surface (只有一个参数,二维的)
怎样找一个w的值使得L的值最小呢?
首先随机选取一个初始的点,这个点叫做w0,这个点时随机的
接下来计算当w=w0的时候对应的L 的微分是多少,也就是计算这点的斜率是多少,如果计算的值是负数,则取曲线左边高,右边低。若出现左高右低的情况,我们就把w 的值变大到w1 ,L的值就会变小。现在我们将w 的值变大,就是向比较低的方向增大w,.如果左边比较低,右边比较高的话则w的值变小了,w左移,L的值就会变小如图所示:
图中标注的地方的大小取决于两件事:1.斜率的大小,斜率越大,中间的举例就会越大。(微分部分) 2. 和前面的系数相关,叫做学习速率
这个学习速率是怎么来的呢?是自己设定的,如果设置的学习速率的值大一点,那么参数的更新就会快一点,如果设置的值小一点的话,参数的更新就会慢一点。
w1的表示:
再反复进行刚才的结果,得到w1之后在进行与w0相同的操作。如图所示:
但是这种反复操作的程序不会一直进行下去,也会有在某一个地方停止的时候,那什么时候停下来呢?会有两种状况:
一种是自己失去耐心,另一种就是计算到某一个wT时正好在这一点的微分是0,此时 参数的未知就不会在发生变化。
但是应用Dradient Descent 这种方法找不到最好的w解使得L 的值时最小的。
使L最小的点叫做global minima,让微分的值等于0 的点叫做Local minima.
上面的例子只是有一个参数的时候 w,接下来将的是有两个参数的时候 w和b
有两个参数的时候怎么使用Dradient Descent这种方法呢?
1.现在有两个参数,给他随即的数值w0和b0.
2.接下来分别计算w0和b0对LOSS的微分(微分的值是根据程式自动算出来的)
3.计算完上述的微分之后就去更新w和b (和只有一个参数的做法是一样的)
4.反复进行同样的步骤,更新w和b的值。
5.最后就得到最好的w和b。
根据真实例子举例说明:
1.选择一个初始值(任意的),计算在该点的微分
3,在更新之后的点处再对该点计算微分
4.反复进行上面的操作,最后找到合适的w和b,计算出L:
总结:
现在我们学习了机器学习的三个步骤:
1.设定一个函数,函数里面是有未知数的w和b.
2.定义一个叫LOSS 的函数
3.找到合适的参数使LOSS函数最小,有两种方法。
但是上面的三个步骤并不是最让人满意的结果,这三个步骤合起来叫做训练,现在做的是我们在现有的资料上面去计算LOSS(2017~2020Youtube的点击量)。我们真正的目的是 用图中的函数y=0.1k+0.97k来预测未来的观看次数。举例来说:就是我们在2020 年的最后一天找到了函数y=0.1k+0.97k,然后用这个函数去预测2021 年每一天的隔天的点击量。用2020/12/31号的点击量去预测2021/1/1号的点击量,一直这样进行下去到2021/2/14号,到这一天计算出来的LOSS=0.58k.得出来的结论就是两个L相比,有预测资料的L要比没有预测资料的L 小。
分析结果,如图所示:
横轴表示的是:时间
纵轴表示的是:观看的人数(点击量)
红色的线表示的是:真实的阅读人数
蓝色的线表示的是:机器通过上面的函数计算出来的阅读人数
从上面的图可以看出,阅读两是由周期性的,每隔七天就会有一个循环。
那上面的函数模型就不太适应七天一个循环的预测。如果我们有一个模型是参考前七天的阅读量然后根据前七天的阅读量去预测接下来的七天的阅读量,所以我们就要修改我们的模型。
写了一个新的模型:
这里的w和b我们都算出他的最佳值.
还可以考虑更多天的值:
可以看出考虑更多天L的值已经达到了一个极限。上面的这些模型有一个共同的名字叫做Linear models