Datawhale X 李宏毅苹果书 AI夏令营 Task1

 1 机器学习基础

1.1 机器学习ML(Machine Learning)和深度学习DL(Deep Learning)的基本概念

机器学习:让机器具备找一个函数的能力,例如:语音识别,机器听一段声音,产生这段声音对应的文字,该函数的输入是声音信号,输出是这段声音信号的内容。

其次还有:AlphaGo,输入是棋盘上黑子跟白子的位置,输出是机器下一步应该落子的位置。

1.2 回归和分类(regression and classification) 

回归:假设要找的函数的输出是一个数值,一个标量(scalar),这种机器学习的任务称为回归。

例如:假设机器要预测未来某一个时间的 PM2.5 的数值。

分类:分类任务要让机器做选择题

例如:每个人都有邮箱账户,邮箱账户里面有一个函数,该函数可以检测一封邮件是否为垃圾邮件。AlphaGo也是选择题,从 19×19 个选项里面,选出一个正确的选项。

PS. 分类不一定只有两个选项,也可以有多个选项。

1.3  案例学习  

案例:以视频的点击次数预测为例介绍下机器学习的运作过程

假设:1. 有人想要通过视频平台赚钱,他会在意频道有没有流量,这样他才会知道他的获利。

           2. 后台可以看到很多相关的信息,比如:每天点赞的人数、订阅人数、观看次数。

目的:根据一个频道过往所有的信息可以预测明天的观看次数。

方法:找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看的次数。

提问:但我们该如何去找这个函数?

机器学习找函数的过程,分成 3 个步骤:
1)写出一个带有未知参数的函数 f
其能预测未来观看次数:

                      y  :  是准备要预测的东西,今天总共的观看次数。
                      x1:  是这个频道,前一天总共的观看次数。
                      b w 是未知的参数,要通过数据去找出来的,猜测。

PS. 

 猜测往往来自于对这个问题本质上的了解,即领域知识(domain knowledge)。机器学习就需要一些领域知识。这是一个猜测,也许今天的观看次数,总是会跟昨天的观看次数有点关联,所以把昨天的观看次数,乘上一个数值,但是总是不会一模一样,所以再加上一个 b 做修正。

所以对于 b 和 w 是带有未知的参数 (parameter)的函数称为模型(model)。模型在机器学习里面,就是一个带有未知的参数的函数。

特征(feature) x1 是这个函数里面已知的,它是来自于后台的信息,而 w b 是未知的参数。w 称为权重(weight),b 称为偏置(bias)。  

PS. 这里老师用的例子

2)定义损失(loss)或者说是  画出等高线 

损失也是一个函数,这个函数的输入是模型里面的参数,模型是 y=b+w*x1,而 b w 是未知的,损失是函数 L( b, w),其输入是模型参数 b w。

输入:其输入是模型参数 b 跟 w

输出:损失函数输出的值代表(说实话这点有点看不懂了)

提问:现在如果把这一组未知的参数,设定某一个数值的时候,这数值好还是不好

假设:未知的参数的设定是 b = 500,w = 1,预测未来的  观看次数的函数就变成 y=500+x1。要从训练数据来进行计算损失,在这个问题里面,训练数据是这一个频道过去的观看次数。

例如:从2017年1月1日到 2020年12月31日的观看次数(此处的数字是随意生成的)。

把 2017 年 1 月 1 日的观看次数,代入这一个函数里面:

判断: b = 500,w = 1的时候,这个函数是非常的OK的。

x1 代入4800,预测隔天实际上的观看次数结果为 (ˆy) = 5300,真正的结果是 4900 ,真实的值称为标签(label),所以它高估了这个频道可能的点击次数,可以计算一下估测的值 (ˆy) 跟真实值 y 的差距 e。

所以我们知道有差距e,计算方式有很多,我们在这里假设取绝对值:

我们的想法是要做到用1月1日,来预测1月2日的值,可以用1月2日的值,来预测1月3日的值。我们预测1月3日的观看次数的,值是 5400(计算来的4900+500),所以接下来计算 5400 跟跟标签(7500)之间的差距。

我们可以算过这 3 年来,每一天的预测的误差,这 3 年来每一天的误差,通通都可以算 出来,每一天的误差都可以得到 e。接下来把每一天的误差,通通加起来取得平均,得到损失 L!!!!!!

                      N  :  代表训验数据的个数。

L 是每一笔训练数据的误差 e 相加以后的结果。L越大,代表现在这一组参数越不好,L越小,代表现在这一组参数越好。

PS.

估测的值跟实际的值之间的差距,其实有不同的计算方法:

平均绝对误差(Mean Absolute ErrorMAE)

两者之间绝对值的差距。

均方误差(Mean  Squared ErrorMSE)

平方的差距。


有一些任务中 y 和 (ˆy) 都是概率分布,这个时候可能会选择交叉熵cross entropy),这个才是机器学习的第二步(那我之前都学了个啥子???)

因为刚才举的那些数字不是真正的例子,以下的数字是真实的例子。这个频道真实的后台的数据,所计算出来的结果。可以调整不同的 w 和不同的 b,求取各种  w 和各种 b,组合起来以后,我们可以为不同的 w 跟 b 的组合,都去计算它的损失,就可以画出图所示的等高线图。

越偏红色系,代表计算出来的损失越大, 就代表这一组 w 跟 b 越差。

越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好。拿这一组 w 跟 b,放到函数里面,预测会越精准。

假设:w=−0.25, b=−500,这代表这个频道每天看的人越来越少,而且损失这么大,跟真实的情况不太合。如果w=0.75, b=500,估测会比较精准。也就是说w越接近1,b带一个小值,越准确?画出来的等高线图称为误差表面(error surface)。

3)解一个最优解的问题

目的:找一个w跟b,把未知的参数找 一个数值出来,看代哪一个数值进去可以让损失 L 的值最小,就是要找的w跟b,这个可以让损失最小的w跟b称为w*跟b*代表它们是最好的一组w跟b,可以让损失的值最小。

方法:梯度下降(gradient descent)

简化起见, 先假设只有一个未知的参数w,b是已知的。w代不同的数值的时候,就会得到不同的损失,这一条曲线就是误差表面,只是刚才在前一个例子里面,误差表面是2维的,这边只有一个参数,所以这个误差表面是1维的。

首先要随机选取一个初始的点 w0。然后计算下列公式,在w等于 w0 的时候,参数w对损失的微分(这里我就有点迷糊了,但找公式应该不是我们现在该做的),计算在这一个点,在 w0这个位置的误差表面的切线斜率,也就是这一条蓝色的虚线,它的斜率,如果这一条虚线的斜率是负的,代表说左边比较高,右边比较低。

在这个位置附近,左边比较高,右边比较低。如果左边比较高右边比较低的话,就把w的值变大,就可以让损失变小。这个时候就应该把 w的值变小。

想像说有一个人站在这个地方,他左右环视一下,算微分就是左右环视,它会知道左边比较高还是右边比较高,看哪边比较低,它就往比较低的地方跨出一步。这一步的步伐的大小取决于两件事情:

1. 这个地方的斜率,斜率大步伐就跨大一点,斜率小步伐就跨小一点

2. 学习率(learning rateη 自己设定的,设大一点,每次参数更新就会量大,学习可能就比较快。如果设小一点,参数更新就很慢,每次只会改变一点点参数的数值。这种需要自己设定的,称为超参数(hyperparameter

w0往右移一步,新的位置为w1,这一步的步伐是 η 乘上微分的结果,即:

接下来反复进行刚才的操作,计算一下w1  微分的结果,再决定现在要把w1移动多少,再移动到w2,再继续反复做同样的操作,不断地移动w的位置,最后会停下来。往往有两种情况会停下来。

1. 一开始设定就说计算多少次,例如一百万次。

2. 当不断调整参数,调整到一个地方,它的微分的值就是这一项,算出来正好是0的时候,如果这一项正好算出来是00乘上学习η还是0。

大问题:梯度下降没有找到真正最好的解,没有找到可以让损失最小的w。如果在梯度下降中,w0 是随机初始的位置,也很有可能走到wT这里,训练就停住了,无法再移动w位置。右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值(global minimawT这个地方称为局部最小值(local minima),其左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点。

(所以有些时候也并不是个很好的办法??)

但这不是最大的问题,当有两个参数的情况下使用梯度下降,其实跟刚才一个参数没有什么  不同。如果一个参数没有问题的话,可以很快的推广到两个参数。 

假设:有两个参数,随机初始值为w0,b0。要计算w,b跟损失的微分,计算在w=w0的位置,b=b0 的位置,要计算wL的微分,计算bL的微分。

计算完后更新wb,把w0减掉学习率乘上微分的结果得到w1,把b0减掉学习率乘上微分的结果得到b1。

在深度学习框架里面,比如 PyTorch 里面,算微分都是程序自动帮计算的。反复过程中找到一个最好的w*和b。

例如:随便选一个初始的值,先计算一下wL的微分,跟计算一下bL的微分, 接下来更新wb,更新的方向就是 ∂L/∂w,乘以η再乘以一个负号,∂L/∂b,算出这个微分的值,就可以决定更新的方向,可以决定w要怎么更新。

wb更新的方向结合起来,就是一个向量,就是红色的箭头,再计算一次微分,再决定要走什么样的方向,把这个微分的值乘上学习率,再乘上负号,我们就知道红色的箭头要指向那里,就知道如何移动wb位置,一直移动,期待最后可以找出一组不错的w和b。实际上真的用梯度下降,进行一番计算以后,这个是真正的数据。

算出来的最好 w* = 0.97, b* = 100,跟猜测蛮接近的。因为x1的值可能跟y很接近,所以这个w就设一个接近1的值,b就设一个比较偏小的值。损 L(w*, b*)算一下是480,也就是在20172020年的数据上,如果使用这一个函数,b100w0.97,平均的误差是480,其预测的观看次数误差,大概是 500 人左右。

(这部分需要慢慢看才行,我自己写都写不明白了)

PS. 一些有用的内容

李宏毅老师对应视频课程:预测本频道观看人数(上) - 机器学习基本概念简介_哔哩哔哩_bilibili

《李宏毅深度学习教程》(李宏毅老师推荐👍,苹果书🍎),PDF下载地址:https://github.com/datawhalechina/leedl-tutorial/releases

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值