简介
机器学习就是让机器找到一个合适的函数。
一些典型的应用:文字识别、图像识别、预测等等。
主要分类:预测、分类、创作。
- Regression 回归
- 根据今天的温度,预测明天的温度
- 根据今天的PM2.5 预测明天的 PM2.5
- Classification 分类
- 根据某个东西,识别到对应的类型
- Structured Learning 结构学习
- 做一些创造性的事情
直接上手
第一步:预设一个未知参数的函数公式
我们先预设 一个函数,名为 model:y = b + wx1。其中:
- w:weight 权重
- b:bias 偏差
第二步:定义损失函数
除此之外,我们还需要定义一个 loss 损失函数:L(b,w),函数输出的结果(value)表示这个模型的好坏。
先预设 b 和 w 的值:b = 0.5k, w = 1,即 L(0.5k,1)。
那么我们通过这个函数来套用到每个已知的 x 变量,去比对一下「通过这个函数生成的结果 y」和「已知的结果 label = 」来计算误差 e2。以此可以计算出平均误差。
这个「平均误差」就是 loss 的结果值~
如果
和
都是机率分布的话,可以用 Cross-entropy 交叉熵。
从 error surface 中,即可找到令损失最小的 b 和 w~
第三步:最佳 Optimization
找到最佳的一组 w,b,对应的损失是最小的。
具体要怎么做呢?我们使用 Gradient Descent 梯度下降 方法
先确定一个 b,未知参数为 w。那么怎样找到一个最佳的 w ,使得 L 最小呢?
- 先随机取一个 w0
- 计算 w0 的微分(切线斜率),根据微分结果移动 w,左 or 右
- 那移动多少呢?斜率大,就移动大一点,反之。
- learning rate:控制学习的进度
- 这引出了 local minima 和 global minima 的讨论。因为是通过斜率去找 L 最小值。所以找到第一个最低点的时候就会被认为是 minima,但不是真正的 global minima。
好的,那我们可以以此思路去找出一组最佳的 w 和 b。
以上都是训练的过程,并且是在已知的答案中训练模型。
如果需要预测,就要拿一个新的数据放入训练好的模型中。
⬇️ 红色的线表示真实的观看人次,蓝色是预测的观看人次。
现在的训练规律是:根据「前一天的数据 = x1 」预测未来的数据。
我们会发现预测结果只是相比真实数据往后挪了一点而已。但是从损失函数的结果看来,比真实的还大了一点,有没有更好的预测办法呢?
数据是有规律的,每周5、6没有人观看。
规律是周期性的,那如果模型的训练规律是根据「前一周的数据」进行预测呢?我们会发现,每一天对应的损失最小权重都不一样,并且 L’ 更小了,效果更好了一些。
那么换成 28 天呢?56 天呢?我们可以这么一直尝试下去...
以上提及的模型称之为线性模型「linear model」。