4. 机器学习2021:用向量表示 Model

这是我参与更文挑战的第 4 天,活动详情查看: 更文挑战

本篇文章是李宏毅老师的机器学习课程笔记,课程传送门?。
【機器學習2021】預測本頻道觀看人數 (下) – 深度學習基本概念簡介

更多的 Feature

上一节我们找到了更加强大的 Loss 函式 Sigmoid Function,我们也可以用多个 Feature,我们用 j 来代表 Feature 的编号。举例来说如果要考虑前 28 天,j 就是 1 到 28;考虑前 56 天,j 就是 1 到 56。再拓展成比较有弹性的 Function,只需要将 Sigmoid 里面的东西替换掉就可以了。
image.png

用向量表示 Model

接下来我们用比较直观的方式把这个式子实际上做的事把它画出来。我们只考虑前一天、前两天跟前三天的情况,所以 j 等于 1、2、3;输入就是 x1 代表前一天的观看人数,x2 和 x3 分别表示三天前的观看人数。由上面的式子可以看出每个 i 就代表了一个蓝色的 Function,即一个 Sigmoid Function。

为此,对于前一天,即 j = 1 ,Sigmoid 括号中的式子就可以表示为,
image.png

用同样的方式可以表示出前两天,前三天的情况。
image.png
为了简化起见,我们把括号中的数字用一个比较简单的符号来表示,分别表示为 r1、r2 和 r3。到这里,发现已经可以用矩阵跟向量相乘的方法写一个比较简单的 简洁的写法了。把 x1、x2、x3 乘上不同的 Weight,加上不同的 Bias,也就是不同的 b 会得到不同的 r,我们可以再次简化,简化成矩阵跟向量的相乘,把 x1、x2、x3 拼在一起变成一个向量 x,把所有的 w 统统放在一起变成一个矩阵 w,把 b1、b2、b3 拼起来变成一个向量 b,把 r1、r2、r3 拼起来变成一个向量 r,即可以得到第三个更加简洁的式子。

image.png
那现在,我们所有的 Sigmoid Function 要做的事情,就可以简化表示成下面的样子了。就是把 r1、r2、r3 分别通过 Sigmoid Function 表示,然后得到 a1、a2、a3。

image.png
接下来 Sigmoid 的输出还要乘上 ci 然后再加上 b,就得到了我们最终的 Model Function。这里需要注意的一点,就是我们把 c1、c2、c3 拼起来叫向量 c,为了和矩阵 a 相乘,需要对向量 c 进行转置,在这里就是由 1×3 的矩阵 c 转置为 c,再和 3×1 的矩阵 a 相乘。

image.png

到这里我们整理下一下,就得到最终用向量表示的式子了。
image.png

备注:
x 表示 Feature,即例子中的前一天、前两天、前三天和前 j 天的观看人数;
w、绿底 b、c、灰底 b 就是未知参数了。

新三部曲

接下来我们将重温机器学习三部曲。

1. 找一个函式

我们把这些东西通通拉直拼成一个很长的向量,把 w 的每一个 Column 或每一个 Row 拿出来拼成一个长的向量,把绿色 b 拼上来,把 c 拼上来,把灰色 b 也拼上来,这个长的向量用一个符号 θ 来表示它。 θ 统称我们所有的未知参数。这样我们就重新改写了机器学习的第一步,即重新定了一个有未知参数的 Function。
image.png

2. 定义 Loss

有了新的这个 Model,用 θ 来代表所有未知的参数,我们的 Loss Function 就变成 L( θ ),这个 Loss Function 要问的就是 θ 如果它是某一组数值的话,会有多不好或有多好,计算的方法和之前只有两个参数的时候是一模一样的。先给定某一组 θ 的值,然后把一种 Feature x 带进去,看看估测出来的 y 是多少,再计算跟真实的 Label 之间的差距 e,把所有的误差通通加起来就得到最终的 Loss 了。

image.png

3. Optimization 最佳化

接下来下一步就是 Optimization,它的算法还是 Gradient Descent,就是要找一组 θ,这个 θ 可以让我们的 Loss 越小越好,可以让 Loss 最小的那一组 θ,就叫做 θ 。

image.png
随机选一个初始的数值 θ ,接下来对每一个未知的参数都去计算它对 L 的微分,计算的结果集合起来就是一个向量,用 g 表示,叫它 Gradient,中文可以称为梯度向量。可以在 L 前面放了一个倒三角形,来简写这个向量。

image.png

接下来就要更新我们的参数了,本来有一个参数叫 θ1,那上标 0 代表它是一个起始的值,把这个 θ10 减掉 learning rate 乘上微分的值得到 θ11,代表 θ1 更新过一次的结果,以此类推就可以把所有的参数统统都更新了,用向量表示就是下方的简写式子。

image.png

根据 Gradient 去把 θ0 更新成 θ1;然后再算一次 Gradient,然后根据 Gradient 把 θ1 再更新成 θ2;再算一次 Gradient 把 θ2 更新成 θ3,以此类推。直到我们不想做或者算出来的 Gradient 是零向量 Zero Vector 导致没有办法再更新参数为止。
image.png

Batch 和 Epoch

实际上我们在做 Gradient Descent 的时候,并不会拿所有的大 N 笔资料来计算 Loss,而是把这大 N 笔资料随机分成一包一包的数据,每一个包就是一个 Batch。

然后只拿一个 Batch 里面的 Data 来计算一个 Loss,这里叫它 L1;根据 L1 来算 Gradient,用这个 Gradient 来更新参数;接下来再选下一个 Batch 算出 L2,然后更新参数;再取下一个 Batch 算出 L3,再根据 L3 算出 Gradient 来更新参数。

把所有的 Batch 都计算过一次,叫做一个 Epoch 每一次更新参数叫做一次 Update
image.png

术语合集

英文 中文
Batch 批次
Epoch 时期
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享