目录
1、Function with Unknown Parameters 写出带有未知数的函数
2、 Define Loss from Training Data 定义损失
一、学习资料
Datawhale提供的苹果书:Datawhale (linklearner.com)
李宏毅老师对应视频课程:预测本频道观看人数(上) - 机器学习基本概念简介_哔哩哔哩_bilibili
二、学习笔记
(一)机器学习定义
让机器具备找函数的能力。
如AlphaGo。要让机器下围棋,我们需要一个函数。函数输入:棋盘上黑子和白子的位置。输出:下一步该落子的位置。
(截图自李宏毅老师视频,下同)
(二)机器学习类别
1、Regression(回归):The function outputs a scalar(标量). 我们要找的函数输出是一个数值。
2、Classification(分类): Given options (classes(类别)), the function outputs the correct one. 人类预先准备好选项(类别),然后让机器做选择题。函数的输出就是从我们设定好的选项中选择一个输出。
如,甄别邮件是否为垃圾邮件。如,AlphaGo下一步下在哪里,就是一道选择题,棋盘上有19*19个位置,让AlphaGo做选择。
3、Structured Learning(结构化学习):Create something with structure (image, document). 让机器学会创造。
(三)案例学习——怎么让机器找到一个函数
案例:从YouTube后台查看过往访问资料,预测该频道隔天的点击率。
分为三个步骤:
1、Function with Unknown Parameters 写出带有未知数的函数
设要预测的参数为y,已知的(过往的)参数为x1。
存在y=w*x1+b
【插入补充:
①w和b均为未知的参数,是准备要通过数据去找出来,目前只是猜测。而猜测往往来自于对这个问题本质上的了解,即领域知识(domain knowledge)。
②在机器学习里,带有未知的参数(parameter)的函数称为模型(model)。
③x1称为特征(feature),是这个函数里面已知的(来自后台,过往点击的总次数是已知的),而w和b是未知的参数。
④与feature相乘的w称为权重(weight),没有与feature相乘的b称为偏置(bias)。】
2、 Define Loss from Training Data 定义损失
假设此时w=1, b=500,则y=x1+500
代入后台提供的已知数据中,假设从2017.1.1预测1.2的数值,则y=1*4800+500=5200
与1.2实际数值(label标签)相比,5200≠4900,定义二者差距为e1,数值为e1=/y-y'/=400。以此类推,可得到一串e1~en的数值。
平均绝对误差(Mean Absolute Error,MAE):把e1~en取平均值,命名为L,是每一个训练资料的误差。L越大,说明目前这一组的参数越不好,反之越小则越好。
除了求平均绝对误差之外,还有另一种计算方法:均方误差(Mean SquaredError,MSE)=(y-y')^2。
具体使用哪种方法……it depends.
如果y和y'都是概率分布,这个时候可能会选择交叉熵(cross entropy)
可以随意调整w和b,得出不同的y=w*x1+b。在此之上计算出不同的loss,画出一张等高线图,称之为误差表面(error surface)。
越红代表L越大,也就是误差越大。越蓝代表L越小,误差越小,这一组w, b越好。
(红点所在的区域是最准确的)
从中取w=1时,b大约在100左右,这时候是最准确的、最接近实际情况的函数。
3、Optimization 最佳化
找一组w和b,使L最小,就是最佳的y=w*x1+b
如何找到?使用梯度下降(gradient descent)
(1)为了简化问题,先假设误差表面(error surface)图中L只受一个未知数w的影响,画出w关于L的图。
随机在曲线上选取一个w点,名之为w0。计算在这一个w0点上误差表面L的微分(切线斜率)。
如果在w0上的切线斜率是负的(切线左高右低),把w的值变大(向右移动w点),就可以让损失L变小;如果在w0上的切线斜率是正的(左低右高),就把w往左移,可以让损失值L变小。
最终目标是要找到斜率为0的w点。
(老师:我们可以想像说有一个人站在这个地方,他左右环视一下,算微分就是左右环视,它会知道左边比较高还是右边比较高,看哪边比较低,它就往比较低的地方跨出一步。)
那么这一步要跨多大?也就是w0到w1移动距离是多远?由两个因素决定:
一是斜率。如果w0这个地方的斜率大,那么步伐就跨大一点,即w0到w1移动远一点;反之斜率小,步伐就跨小一点。
二是学习率(learning rate)η 。学习率是自己设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。在机器学习中,该数值需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。
大佬解释:首先选择一个点,随后我们在这个点取微分,并且定义一个学习率,我们假设步长为该点的微分乘上学习率(这样做的好处,当曲线趋近平缓的时候,微分也小,往后逼近的速度也会变慢),我们就按照这个步长依次往最小点逼近,直到逼近或者达到一个相对满意的效果。如果是两个变量,就要乘以负数的步长,因为这个双变量的微分是有方向的,我们要按照一个钝角的方向才能靠拢,而最好的方向显然就是180度,所以要乘负号。
根据上述逻辑,重复寻找w点直到模型停止。有两种情况会使模型停止:
一是达到了学习次数的上限。在计算微分的时候,设置更新次数(最多计算几次)(该数值也是一个超参数)。比如上限设为 100 万次,在参数更新 100 万次后,就不会再继续更新了,模型也会停止。
二是到达理想情况,斜率为0了。0乘学习率 η 还是0,所以w就不会再移动位置。
但在本案例中,出现了一个问题。即斜率=0的点未必是L最小的点。也就是说,w没有找到真正的最好的解。
右侧红点这个位置是真正的损失L最小的地方,称为全局最小值(global minima),而wT这个点虽然斜率也为0,但它不是整个误差表面上的最低点,称为局部最小值(local minima)。
(2)回到原本的问题,实际上L受w和b两个参数的影响。刚才为了简化,只取了w一个参数。
如果刚才的一个参数没问题的话,可以直接推广到两个参数。
还是一样,随机取值w0和b0,算这个点上的微分。
(两个变量的微分人不会算的话没关系,AI会算就行了)
然后同上的方法,一直移动,直到找到使斜率为0的点。
最后得出结果,w=0.97,b=100时,L达到最小值,此时L=480。
至此,为一个完整的确定函数的步骤。
总结一下哪三步:①写出带有未知数的函数 ②定义损失Loss ③找到最佳的w和b