机器学习介绍(上)

        从这一次分享到接下来一段时间,会根据李宏毅老师开设的 2022ML 台湾大学机器学习课程进行比较系统的学习。李宏毅老师讲的课非常有水平,并且非常透彻!如果有时间,建议大家可以去学一下,当然也可以去参考之前开设的 2021ML 。

(李老师真的挺诙谐幽默,而且是老二刺猿,接下来的学习你会慢慢发现李老师的人格魅力)

        那所谓的机器学习到底是什么呢?顾名思义,机器他具备有学习的能力,那些科普文章往往把机器学 习这个东西吹得玄之又玄好像机器会学习以后,我们就有了人工智慧,有了人工智慧以后机器接下来就 要统治人类了。那机器学习到底是什么呢?事实上,机器学习概括来说可以用一句话来描述机器学习这件事,机器学习就是让机器具备找一个函数的能力

        不管是语音识别,还是图片分类,甚至是之前红极一时的 AlphaGo ,都可以看做机器学习一个函数,然后去找到我们人类想要的结果。那这个函数都有哪几种呢?我们先暂时给它分为两类:Regression 回归和 Classification 分类。

Regression 的意思是说,假设我们今天要找的函数,它的输出是一个数值(标量,scalar),那这样子的机器学习的任务,我们称之为 Regression。

(假设我们今天要机器做的事情,是预测未来某一个时间的 PM2.5 的数值。机器做的事情是找一个函数,这个我们用 f 来表示,这个函式的输出是明天中午的 PM2.5 的数值,它的输入可能是种种跟预测 PM2.5 有关的指数,包括今天的PM2.5 的数值,今天的平均温度,今天平均的臭氧浓度等等。这一个函式可以拿这些数值当作输入,输出明天中午的 PM2.5 的数值。)

Classification 就是要机器做选择题 我们人类,先准备好一些选项(类别,classes),我们现在要找的函数,它的输出就是从我们设定好的选项里面,选择一个当作输出 那这个问题就叫作 Classification 。

(我们所使用的邮箱系统里面也有一个函数,这个函数可以帮我们侦测一封邮件是不是垃圾邮件。这个函数的输入是一封电子邮件,那他的输出是什么?你要先准备好你要机器选的选项,在侦测垃圾邮件这个问题里面,可能的选项就是两个:是垃圾邮件或不是垃圾邮 件,Yes 或者是 No 。那机器要从 Yes 跟 No 中间选一个选项出来。当然,Classification 不一定只有两个选项,也可以有多个选项 。)

        当然,如果我们认为只有 Regression 和 Classification 问题,就好像你说整个世界只有五大洲一样。当然不是!还有黑暗大陆(李宏毅真老师的让人笑死)

        分类和回归问题仅仅是一小部分(左下角),剩下的一部分称为 Structured Learning(输出是一些 结构化的东西,比如图像生成,语音合成,多模态等等)。


        下面通过一个案例学习机器到底是怎么寻找一个函数?

        假设有一个 youtuber 是靠着 youtube 维生的,他会在意频道有没有流量,这样他才会知道他可以获利多少。在 youtube 后台,可以看到很多相关的资讯,比如说每一天点赞的人数有多少,每一天订阅的人数有多少,每一天观看的次数有多,我们能不能够根据一个频道过往所有的资讯去预测它明天可能的观看的次数是多少呢?能不能够找一个函数,这个函数的输入是 youtube 后台个人的资讯,输出就是隔天这个频道会有的总观看的次数。        

机器学习找函数分为三个步骤:定义带未知数的函数;定义函数的损失;优化未知数;

        第一个步骤是我们要写出一个带有未知参数的函数,简单来说就是我们先猜测一下,我们打算找的这个函数它的数学公式到底长什么样子。举例来说,我们这边先做一个最初步的猜测,我们写成这个样子:y=b+wx 。

  • y 就预测第二天的观看人次,这件事情是我们未知的。
  • x 是这个频道前一天总共观看的人数。
  • b 和 w 是未知的参数,它是要通过资料去找出来的。

        这个猜测往往就来自于对这个问题本质上的了解,也就是 Domain knowledge,所以才会听到有人说,要做机器学习就需要一些 Domain knowledge。

        为啥公式就长这样,它就一定是前一天的点阅次数乘上 w 再加上 b 呢?这只是一个猜测,也许我们觉得说,这个今天的点阅次数,总是会跟昨天的点阅次数有点关联,所以我们把昨天的点阅次数乘上一个数值,但是总是不会一模一样,所以再加上一个 b 做修正。当作是对第二天点阅次数的预测。这是一个猜测,它不一定是对的,我们等一下回头会再来修正这个猜测。

        总之我们找到了这样的一个函数,函数里面带有未知的参数,这样一个公式我们就把它称为一个 Model 模型。其中,x 我们称作 Feature 特征,w 称为 weight 权重,b称为 bias 偏置

        下一步我们要定一个新的函数 Loss Function,这个函数的输入是我们 Model 里面的参数,就是 b 和 w ,这个函数输出的值代表,如果我们把这一组未知的参数设定某一个数值的时候,这笔数值好还是不好。

        那这样讲可能你觉得有点抽象,所以我们就举一个具体的例子,假设现在我们给未知的参数的设定是 bias = 0.5k,w = 1 ,那这个Loss怎么计算呢?那么 y 等于 0.5k 加 1 倍的 x ,这样计算出来的 y 是我们预测值,只需要去和真实的数值进行比对,这个比对就是 Loss Function。

        我们根据设定的参数进行计算预测 2 号的预测观看次数是 5.3k ,但是实际是 4.9k ,相差 0.4k ,这个差值我们把它叫做 error(当然计算 error 的方式不止这一种)。我们对于训练资料里的每一天都去进行一个预测,然后和真实值计算误差。接下来我们就把每一天的误差通通加起来,然后取平均,这个 N 代表我们的训练资料的个数,我们算出一个 L,L 就是每一笔训练资料的误差,这个 e 相加以后的结果,这个 L 就是我们的 Loss 。

        Loss 的值越大,代表我们现在这一组参数越不好;越小,代表现在这一组参数越好。

       预测的值跟实际的值之间的差距有不同的计算方法,可以看我之前写过的损失函数

补充一个知识:Error Surface:调整不同的 w 和 b,然后组合不同的 w 跟 b,去计算它的 Loss,然后就可以画出以下这一个等高线图。

        在这个等高线图上面,越偏红色系代表计算出来的 Loss 越大,就代表这一组 w 跟 b 越差;如果越偏蓝色系,就代表 Loss 越小,就代表这一组 w 跟 b 越好。

第三步,Optimization 优化:对参数也就是对 w 和 b 以什么样的方式进行更新。这个更新方式就叫做优化。我们优化的目标是找一个 w* 和 b * 使得 Loss 的值最小。

        这里我们一般常用 Gradient Descent 梯度下降方法。为了简化,我们假设只有 w 这个参数,然后进行分析。前面提到的 Error Sruface 是 w 和 b 构成的所以是 2D 的,现在只有 w 一个参数,所以 Error Surface 就变成了关于 w 的一条曲线。

下面我们就看一下怎么去寻找 w 使得 Loss 的值最小: 

  • 那首先随机选取一个初始的点 w0 ,那这个初始的点往往是随机的(当然以后也会写一些关于参数初始化的方法,可以获得一个比较好的初始值)现在先当作都是随机的,然后取值在w0这个地方。
  • 那接下来要计算在 w0 的时候,这个参数对 loss 的微分是多少 \partial L/ \partial w |(w=w^{0}) (在w₀这个位置的 error surface的切线斜率,也就是这一条蓝色的虚线它的斜率)
  • 那如果左边比较高右边比较低的话,我们就把 w 的值变大,那我们就可以让 Loss 变小;如果算出来的斜率是正的,就代表说左边比较低右边比较高,那就代表我们把 w 变小了,w 往左边移我们可以让 Loss 的值变小。总之呢就是那个方向能让 Loss 减小,w 就往哪个方向走。

这 w 走一步要跨多大呢?这一步的步伐的大小取决于两件事情:

  1. 第一件事情是这个地方的斜率有多大,这个地方的斜率大;这个步伐就会跨大一点,斜率小,步伐就会跨小一点。
  2. 另外除了斜率以外,就是除了微分这一项,还有另外一个东西会影响步伐大小,这个东西我们这边 用 \eta 来表示,叫做 learning rate 学习率。这个learning rate 是自己设定的,你自己决定这个设大一点,那每次参数update就会多一些,你的学习可能就比较快;如果 \eta 设小一点,那参数的update就很慢,每次只会改变一点点参数的数值。这种你在做机器学习,需要自己设定的东西,叫做 hyperparameters 超参数。

那我们 w 更新的公式就可以表达为:w^{i+1} = w^{i}-\eta \frac{\partial L}{\partial w} ,不断的重复这个过程直到停止。

这个停止有两种情况:

  1. 人为设计更新多几次需要停止,这是一个 hyperparameter ,需要自己决定
  2. 当更新参数时,发现对于 Loss 的微分为 0 时,参数就不会继续更新。

上面都是以一个参数 w 为例,如果是两个参数 w 和 b 的情况其实也一样:

        不管有多少参数也都是按照上面三个步骤:初始化函数和参数值;计算 Loss;优化参数。对每一个参数进行迭代更新。

        这三个步骤组合起来就叫做训练 training ,训练是在我们已经知道答案的资料(训练数据集)上去计算的的。


        我们继续以预测 youtuber 第二天观看人次为例,我们先看一下仅用前一天的数据去预测第二天的观看人数效果如何:

        蓝线是机器预测的观看人次,红线是真实观看人次。这里面有个问题:好像蓝线的预测仅仅是红线向后平移一天得到的结果。所以我们觉得这不是一个好的预测结果。但是通过观察这个图,我们发现观看人数其实有周期性的变化,所以是不是我们在训练的时候参考前七天的数据能得到更好的结果呢?这其实也是一种 Domain Knowladge 。

y= b+wx\ \ \ \ -> \ \ \ \ y=b+\sum_{j=1}^{7}w_{j}x_{j}

所以,我们更新了我们模型,把前7天的观看人次都考虑进来。事实是这样做确实有效:不管是训练 L 还是测试 L‘ 都有下降。

那我们考虑是不是可以参考更大的训练资料会更有效呢?所以我们把 7 改成 28 / 56 分别做了实验:发现在训练 L 上一直下降,但是测试 L‘ 却在 56 的时候没有改变(过拟合,之后会详讲)

我们看一下这个模型,它的构造就是 feature 乘上 weight 再加上 bias ,关于这样的模型我们有一个名字叫做 Linear model 线性模型。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值