Datawhale X 李宏毅苹果书 AI夏令营 Task1-机器学习初认识
Kevin666呀 2024-08-31 14:01:02 阅读 100
经过这两天的学习,通过阅读书籍和相关视频讲解后,我想梳理一下所学到的一些有关机器学习的基础概念。作为一个技术小白,我的逻辑可能并不严密,专业知识并不丰富,但还是想通过这样的一种输出方式,谈谈自己的感受和理解,在写文章的同时帮助自己梳理思路,也为大家提供一点见解。
初识机器学习
首先,为什么会有机器学习这样一个话题呢。在科技发达的现代,人们总是想着是否有一些任务,繁琐的任务,可以交给机器去做,因为机器的运算速度和储存数据的能力都十分强大。在这些任务中,有一大部分都和“输入与输出”相关,例如:如语音识别,机器听一段声音,产生这段声音对应的文字;又例如人脸识别,录入人脸图像后,机器做出快速的判断。
而想要完成这些任务,我们需要给机器一个方法,即函数,来告诉它如何解决问题。但这样的一个函数不是仅靠人就能找到的,所以得依靠机器来运算帮助。
根据所执行的任务不同,函数可以大致被分为三大类:
1、回归(regression):
简单来说就是函数的输出值为数值,一个标量。
举个回归的例子,假设机器要预测未来某一个时间的 PM2.5 的数值。机器要找一个函数 f,其输入是可能是种种跟预测 PM2.5 有关的指数,包括今天的 PM2.5 的数值、平均温度、平均的臭氧浓度等等,输出是明天中午的 PM2.5的数值。
2、分类(classification):
简单来说就是在人们所给的几个选项之中,机器做出自己的判断,做出选择。
举个例子,每个人都有邮箱账户,邮箱账户里面有一个函数,该函数可以检测一封邮件是否为垃圾邮件。分类不一定只有两个选项,也可以有多个选项可供选择。
3、结构化学习(structured learning):
直白来说就是让机器产出一个较为复杂的结果,有结构的一件物品,比如说:一幅画,一首诗,一篇文章,等等。
那么在了解机器学习是什么后,我们将通过一个生活中的具体案例来了解其背后的运作过程。
了解机器学习的运作过程
假如有这样一家刚创立没多久的短视频公司。有一天,公司老板在阅读往期的收益报告时突发奇想,他想通过比较各频道的流量,来制定公司接下来的计划。于是,我们作为员工被分配了任务,要求想办法来预测某一频道未来的流量,以此大致判断频道的价值。所以,便开始了尝试。
第一步:想出一个模型
我们想要通过已有的频道观看次数(x)去预测明天的观看次数(y)。这时,我们想到了一个式子:y=wx+b,这个式子神似一次函数,是我们极其熟悉的一个算式,可以通过简单的四则运算来变换数据。然而,此时的w和b都有了新的名字,分别叫权重(weight)和偏置(bias),并且暂时都是未知的。此时y=wx+b这个算式函数,即前面所提到的机器完成任务所需要的方法,被称为了模型(model)。
第二步:定义损失,即损失函数
现在让我们给w和b先随便代入两个数字,y=0.9x+100。假设今天频道播放量x为400,则y=400*0.9+100=460,于是我们猜测明天的播放量会是460次。然而到了明天,真实的数据(标签label)是500,与460之间存在着差距。假如我们昨天取得w和b是0.8和100,那么数值间的差距会更大。通过差距的大小,我们可以判断一组(w,b)能否使模型更接近现实,这种判断依据我们称作损失(Loss)L(w,b),其实就是差距的意思。
损失函数L(w,b)输入是参数 b 跟 w,输出的值代表,现在如果把这一组未知的参数,设定计算y的时候,这个数值与实际差距大还是小。损失函数的具体计算可以按照以下公式:
N代表的数据是训练数据的总个数,e代表的是误差。比如我们要预测未来三天的数据,N就为3,e就是每一天的误差,L就是把误差都加起来,再除以总天数,得到一个数据。
第三步:解最优化问题
因为我们要做预测问题,所以要尽可能地将损失变小。此时,梯度下降(gradient descent)就是我们常用的优化方法,下面进行具体解释。
1、一维
对于两个未知参数w,b的问题,我们先把它简化下,将b设为已知量,w为未知量,所以变成了一维问题。此时通过改变w的数值,可以得到不同的损失值,把损失L和偏重w作为一组数据画图,如上图所示(并非真实数据,只是示范)。借用上面的图形,我们能更直观地感受梯度下降的过程。
首先随便选取一个
作为起点,在图中w轴已标出。再计算L对于w的偏导数,即
所对应点的切线斜率。若斜率为负,将点向右移;若斜率为正,将点向做移。简单来说就是向V字形的“低谷”移动,这个从高处向低处移动的过程可看作梯度下降。同时下降速度还与两个因素相关:斜率与学习率(learning rate)。
当斜率较大时,下降速度较快;当斜率较小时,下降速度较慢。学习率 η是我们自己给电脑设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。所以适当提高学习率可以加快梯度下降速度。也可以参照下列公式进行计算。
提过下降速度后,我们需要知道下降何时停止。事实上有两种停止情况:
第一种是人为的给机器设定参数更新的次数,比如说设定100万次后,机器在更新100万次后就会停止运程。
第二种是在梯度下降的过程中,斜率逐渐从较大值变为0,点从“斜坡”到达了V字形“谷底”,其实就是找到了函数中的极小值就停止了。注意,这里的极小值是点在移动过程中所遇到的第一个,极小值有可能有很多个,但点只能到达离初始位置最近的极小值点。
上述的第二种情况引出了一个问题,极小值并不是最小值,机器找到的,所停在的点不一定代表损失的全局最小值(最小值),有可能只是代表局部最小值(极小值)。
2、二维
在大致摸清了一维情况下的梯度下降后,我们可以将其推广到二维的情况,即w和b都为未知参数。其实二维的梯度下降算法与一维的大致相同,详见以下公式。
即先设定初值
和
随后在根据上述表达式进行计算,通过改变(w,b)来改变损失L的值。但与一维不同的点是,一维中只有L和w在变换,所以可以画出函数图像。而现在有三个变换的值L,w,b,无法直接做三者间的函数图,所以我们引入一个新的概念,即误差表面(error surface)。
我们根据w和b在上图中依据(w,b)组合,计算损失L的值,进行描点(w,b),画出等高线图,如上图所示。在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组w跟b越差。如果越偏蓝色系,就代表损失越小,就代表这一组w跟b越好,拿这一组 w跟b,放到函数里面,预测会越精准。
在二维情况中,随着一组组的(w,b)被计算出来,误差表面上的点在不断移动,如下图所示。
与一维函数图中的沿曲线移动不同,在二维的误差表面中点是按照“直线移动”的方式,在整个版图中“横冲直撞”,在上图中,运动路径由红色箭头标出。根据真实数据所算出的结果,(w,b)组合使损失L最小的结果是(0.97,100),即在模型y=0.97x+b的情况下,得出的预测结果最贴近现实。
好了,今天就先说这么多吧,下次再见。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。