这是我参与更文挑战的第 4 天,活动详情查看: 更文挑战。
本篇文章是李宏毅老师的机器学习课程笔记,课程传送门?。
【機器學習2021】預測本頻道觀看人數 (下) – 深度學習基本概念簡介
更多的 Feature
上一节我们找到了更加强大的 Loss 函式 Sigmoid Function,我们也可以用多个 Feature,我们用 j 来代表 Feature 的编号。举例来说如果要考虑前 28 天,j 就是 1 到 28;考虑前 56 天,j 就是 1 到 56。再拓展成比较有弹性的 Function,只需要将 Sigmoid 里面的东西替换掉就可以了。
用向量表示 Model
接下来我们用比较直观的方式把这个式子实际上做的事把它画出来。我们只考虑前一天、前两天跟前三天的情况,所以 j 等于 1、2、3;输入就是 x1 代表前一天的观看人数,x2 和 x3 分别表示三天前的观看人数。由上面的式子可以看出每个 i 就代表了一个蓝色的 Function,即一个 Sigmoid Function。
为此,对于前一天,即 j = 1
,Sigmoid 括号中的式子就可以表示为,
用同样的方式可以表示出前两天,前三天的情况。
为了简化起见,我们把括号中的数字用一个比较简单的符号来表示,分别表示为 r1、r2 和 r3。到这里,发现已经可以用矩阵跟向量相乘的方法写一个比较简单的 简洁的写法了。把 x1、x2、x3 乘上不同的 Weight,加上不同的 Bias,也就是不同的 b 会得到不同的 r,我们可以再次简化,简化成矩阵跟向量的相乘,把 x1、x2、x3 拼在一起变成一个向量 x,把所有的 w 统统放在一起变成一个矩阵 w,把 b1、b2、b3 拼起来变成一个向量 b,把 r1、r2、r3 拼起来变成一个向量 r,即可以得到第三个更加简洁的式子。
那现在,我们所有的 Sigmoid Function 要做的事情,就可以简化表示成下面的样子了。就是把 r1、r2、r3 分别通过 Sigmoid Function 表示,然后得到 a1、a2、a3。
接下来 Sigmoid 的输出还要乘上 ci 然后再加上 b,就得到了我们最终的 Model Function。这里需要注意的一点,就是我们把 c1、c2、c3 拼起来叫向量 c,为了和矩阵 a 相乘,需要对向量 c 进行转置,在这里就是由 1×3 的矩阵 c 转置为 c,再和 3×1 的矩阵 a 相乘。
到这里我们整理下一下,就得到最终用向量表示的式子了。
备注:
x 表示 Feature,即例子中的前一天、前两天、前三天和前 j 天的观看人数;
w、绿底 b、c、灰底 b 就是未知参数了。
新三部曲
接下来我们将重温机器学习三部曲。
1. 找一个函式
我们把这些东西通通拉直拼成一个很长的向量,把 w 的每一个 Column 或每一个 Row 拿出来拼成一个长的向量,把绿色 b 拼上来,把 c 拼上来,把灰色 b 也拼上来,这个长的向量用一个符号 θ 来表示它。 θ 统称我们所有的未知参数。这样我们就重新改写了机器学习的第一步,即重新定了一个有未知参数的 Function。
2. 定义 Loss
有了新的这个 Model,用 θ 来代表所有未知的参数,我们的 Loss Function 就变成 L( θ ),这个 Loss Function 要问的就是 θ 如果它是某一组数值的话,会有多不好或有多好,计算的方法和之前只有两个参数的时候是一模一样的。先给定某一组 θ 的值,然后把一种 Feature x 带进去,看看估测出来的 y 是多少,再计算跟真实的 Label 之间的差距 e,把所有的误差通通加起来就得到最终的 Loss 了。
3. Optimization 最佳化
接下来下一步就是 Optimization,它的算法还是 Gradient Descent,就是要找一组 θ,这个 θ 可以让我们的 Loss 越小越好,可以让 Loss 最小的那一组 θ,就叫做 θ 。
随机选一个初始的数值 θ ,接下来对每一个未知的参数都去计算它对 L 的微分,计算的结果集合起来就是一个向量,用 g 表示,叫它 Gradient,中文可以称为梯度向量。可以在 L 前面放了一个倒三角形,来简写这个向量。
接下来就要更新我们的参数了,本来有一个参数叫 θ1,那上标 0 代表它是一个起始的值,把这个 θ10 减掉 learning rate 乘上微分的值得到 θ11,代表 θ1 更新过一次的结果,以此类推就可以把所有的参数统统都更新了,用向量表示就是下方的简写式子。
根据 Gradient 去把 θ0 更新成 θ1;然后再算一次 Gradient,然后根据 Gradient 把 θ1 再更新成 θ2;再算一次 Gradient 把 θ2 更新成 θ3,以此类推。直到我们不想做或者算出来的 Gradient 是零向量 Zero Vector 导致没有办法再更新参数为止。
Batch 和 Epoch
实际上我们在做 Gradient Descent 的时候,并不会拿所有的大 N 笔资料来计算 Loss,而是把这大 N 笔资料随机分成一包一包的数据,每一个包就是一个 Batch。
然后只拿一个 Batch 里面的 Data 来计算一个 Loss,这里叫它 L1;根据 L1 来算 Gradient,用这个 Gradient 来更新参数;接下来再选下一个 Batch 算出 L2,然后更新参数;再取下一个 Batch 算出 L3,再根据 L3 算出 Gradient 来更新参数。
把所有的 Batch 都计算过一次,叫做一个 Epoch 每一次更新参数叫做一次 Update
术语合集
英文 | 中文 |
---|---|
Batch | 批次 |
Epoch | 时期 |