李宏毅ML-机器学习基本概念简介

机器学习基本概念简介

Machine Learning 约等于 Looking for a function.

Different types of functions:
Regression: The function outputs a scalar.
在这里插入图片描述
Classification: Given options(classes), the function outputs the correct one.

在这里插入图片描述
How to find a function? => 预测本频道观看人数的例子

  1. Function with Unknown Parameters
    猜测 Model : y = b + w x 1 y = b + wx_1 y=b+wx1
    y : n o .   o f   v i e w s   o n   2 / 26 y :no. \ of \ views\ on\ 2/26 y:no. of views on 2/26
    x 1 : n o .   o f   v i e w s   o n   2 / 25 x_1 : no.\ of \ views\ on\ 2/25 x1:no. of views on 2/25 (feature)
    w   a n d   b   a r e   u n k o n w n   p a r a m e t e r s   w h i c h   a r e   l e a r n e d   f r o m   d a t a . w\ and\ b\ are\ unkonwn\ parameters\ which\ are\ learned\ from\ data. w and b are unkonwn parameters which are learned from data.
    注:w(weight) b(bias)

  2. Define Loss from Training Data

  • Loss is a function of parameters. L(b, w)
  • Loss : how good a set of values is.

简而言之,就是当给未知参数 w 和 b 设定一组值以后,这个模型的性能有多好?举个栗子看看
在这里插入图片描述
采用 MAE 作为损失函数,定义损失函数为: L = 1 N ∑ n e n L = \frac{1}{N} \sum_n e_n L=N1nen
在这里插入图片描述
如下图所示为等高线图,越偏红色的 Loss 越大,说明 w 和 b 的取值比较差,预测结果误差比较大;越偏蓝色的 Loss 越小,说明 w 和 b 的取值比较好,预测结果误差比较小。
Error Surface: 在试了不同的参数取值后,计算出来不同的 Loss,从而画出来的等高线图叫作 Error Surface.
在这里插入图片描述
3. Optimization
w ∗ , b ∗ = a r g m i n w , b L w^* , b^* = argmin_{w,b} L w,b=argminw,bL
找到使得 Loss 值最小的 w 和 b,此为最优解
使用的优化方法:梯度下降法(Gradient Descent)

此时的 Loss 为只有一个参数 w 的情况

  • w 随机设置一个初始值
  • 计算 w = w 0 w = w^0 w=w0 时 w 对 L 的微分,即切线的斜率
    然后更新参数,即 w 1 = ← w 0 − η ∂ L ∂ w ∣ w = w 0 w_1 = \leftarrow w_0 - \eta \frac{\partial L}{\partial w} |_{w=w_0} w1=←w0ηwLw=w0
    当斜率小于 0 时,左边高右边低,w 往右边移动可以让 Loss 变大,即 increase w
    当斜率大于 0 时,左边低右边高,w 往左边移动可以让 Loss 变小,即 decrease w
    那么移动的步伐有多大呢?取决于两个因素:斜率的大小和 η \eta η 的大小。
    η \eta η 是 learning rate, 为 hyperparameter, 需要人工设定
  • Update w iteratively

如此循环往复,直到停下来,那么会迭代更新参数多少次呢?

  • 人为设置更新次数,此为 hyperparameter,例如 10000 次
  • w 对 L 的微分为0,参数不再更新,便会停下来
    在这里插入图片描述
    在这里插入图片描述
    w = w T w = w^T w=wT 时,切线的斜率为 0,w 不再更新,便会停下来,但此时 w T w^T wT 这个点不是使得 Loss 最小的那个点,此时的 Loss 值为 Local minima,其实真正的让 Loss 最小的那个点在 global minima 对应的 w 处。
    我们先暂时相信 Gradient Descent 有 Local minima 的问题,但其实真正的痛点不是这个,继续往下研究
    在这里插入图片描述

此时的 Loss 为有两个参数 w,b 的情况

  • w 和 b 随机设置一个初始值
  • 计算微分,然后更新参数
    w 1 = ← w 0 − η ∂ L ∂ w ∣ w = w 0 w_1 = \leftarrow w_0 - \eta \frac{\partial L}{\partial w} |_{w=w_0} w1=←w0ηwLw=w0
    b 1 = ← b 0 − η ∂ L ∂ b ∣ b = b 0 b_1 = \leftarrow b_0 - \eta \frac{\partial L}{\partial b} |_{b=b_0} b1=←b0ηbLb=b0
  • Update w and b iteratively
    在程序中,求解微分只需要一行代码就可以搞定
    在这里插入图片描述
    在等高线图中,参数的位置又是如何移动的呢?
    随便在某个位置选定 Loss 的初始值,计算 w 对 L 的微分、b 对 L 的微分,参数更新的方向为 ( − η ∂ L ∂ w , − η ∂ L ∂ b ) (-\eta \frac{\partial L}{\partial w}, -\eta \frac{\partial L}{\partial b}) (ηwL,ηbL),如此这样,一直移动下去,在方向向量等于 0 向量时停下来,期待找到一种不错的 w 和 b
    在这里插入图片描述
    其实在训练模型的过程也就是这三步,最后在 w = 0.97,b = 0.1k 时 Loss 最小,为 0.48 k,所以在 2017 - 2020 年的资料上训练后得到的模型为 y = 0.1 k + 0.97 x 1 y = 0.1k + 0.97x_1 y=0.1k+0.97x1
    训练模型结束后,拿 2021 年的资料(即模型没有“看见”过的资料)去预测结果,并计算 Loss,得到 L ′ = 0.58 k L^{\prime} = 0.58k L=0.58k
    在这里插入图片描述
    分析一下结果:红色代表真实的观看人数,蓝色代表模型预测的观看人数,对比红蓝两条曲线,不难发现,红色曲线往右平移一段距离也就是蓝色曲线,所以这个模型基本上就是拿前天的观看人数来预测隔天的观看人数。
    每 7 天内有 2 天的观看人数比较低,是因为这两天是周五、六。
    在这里插入图片描述
    这个模型不是很好,有什么办法可以改进呢?
    现在我们用前 7 天的资料来预测观看人数,修改模型
    在这里插入图片描述
    再用前 28天、56天的资料来分别预测观看人数,修改模型
    在这里插入图片描述
    上述模型均为 Linear models

Linear models are too simple. We need more sophisticated models.

蓝色的直线代表 linear models,y 随 x 1 x_1 x1 的增大而增大,即频道的每日观看人数只会越来越多,但现实生活中的情况并没有那么简单,有起有伏。
图中的红色的分段曲线更接近于现实生活中的情况,但 linear models 并不能表示出这种情况,这是 linear models 的限制,适用的情形比较单一,这种限制称为 model bias.
因此,我们需要更加 flexible 的模型。
在这里插入图片描述
既然红色曲线更加趋近于现实生活中的情况,那么该如何表示它呢?
从下图中的红色曲线可以看出,其实红色曲线是由常数项 + 一堆蓝 fun(function)得来。
在这里插入图片描述
类似于红色曲线的还有很多,它们都叫 piece-wise linear curve
红色曲线的转折点越多,代表所需要的蓝 fun 也就越多。
在这里插入图片描述
如果遇到的红色曲线类似于下图所示的曲线,变得更加的平滑,已不再是分段线性曲线了,那我们又该如何表示呢?
我们可以用一个分段线性曲线近似地逼近连续曲线。
为了有更好地近似逼近于连续曲线,所需要的蓝 fun 也就越多。
在这里插入图片描述
那么,我们又该如何表示蓝 fun 呢?如何把它写出来呢?
我们用 sigmoid function 来逼近蓝 fun
sigmoid function: y = c   1 1 + e − ( b + w x 1 ) = c   s i g m o i d ( b + w x 1 ) y = c \ \frac{1}{1+e^{-(b+wx_1)}} = c\ sigmoid(b+wx_1) y=c 1+e(b+wx1)1=c sigmoid(b+wx1), 简单地理解为 s 型的 function
当 x 趋向于无穷大时,exponential 就会消失,y 就会趋近于常数 c;
当 x 趋向于无穷小时,exponential 就会很大,y 就会趋近于 0.
在这里插入图片描述
只要调整 w, b, c,取不同的值,就可以得到不同的 sigmoid function,然后就可以用不同的 sigmoid function 去逼近蓝 fun
在这里插入图片描述
蓝 fun 我们已经会表示了,现在我们可以把红色曲线给表示出来
y = b + ∑ i c i   s i g m o i d ( b i + w i x 1 ) y=b+\sum_i c_i \ sigmoid(b_i+w_ix_1) y=b+ici sigmoid(bi+wix1)
我们给 w, b, c 不同的取值,就可以获得不同的蓝 fun,然后蓝 fun 迭加起来就可以得到不同的 red curve,就可以得到不同的 piece-wise linear curve,最后就可以用 piece-wise linear curve 来逼近不同的 continuous curve.
在这里插入图片描述
模型已由最开始的 linear model,变成了更加 flexible 的model,可以表示多种情况,现在我们要把模型变成带有更多 feature 的 model.
y = b + ∑ i c i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_i c_i sigmoid(b_i+\sum_j w_{ij}x_j) y=b+icisigmoid(bi+jwijxj)
在这里插入图片描述
举个栗子,有 3 个 feature,有 3 个 sigmoid
在这里插入图片描述
把蓝色方框里面的部分转化成线性代数常用的表示形式:向量形式
在这里插入图片描述
σ \sigma σ 可以表示 activation function,这里使用 sigmoid 函数,把向量 r 代入 σ \sigma σ 函数得到的结果,简记为向量 a
在这里插入图片描述
模型可以表示为向量 a 与 向量 c 的 transpose 相乘后,再加上 b
在这里插入图片描述
模型用矩阵向量相乘可以表示为如下图所示的形式
在这里插入图片描述

现在已经得到了比较复杂的 model,我们来重新训练模型

  1. Function with unknown parameters 把所有的未知参数拼接成一个列向量 θ \theta θ
    在这里插入图片描述
  2. Define loss from training data
    在这里插入图片描述
  3. Optimization
    在这里插入图片描述
    在这里插入图片描述
    实际上,把 N 笔资料分成若干份 B 笔资料,拿一个 batch 算出 gradient,然后更新参数,每一次更新参数为一次 update,每一次看完所有的 batch 为一个 epoch.
    在这里插入图片描述
    模型训练了一个 epoch,但要想知道参数 update 了几次,取决于 batch 的大小。
    在这里插入图片描述
    是否也可以把模型定义成其他形式呢?
    我们可以使用 ReLU 函数来代替 Sigmoid 函数
    ReLU: rectified linear unit 被纠正了的线性单元 y = c   m a x ( 0 , b + w x 1 ) y = c\ max(0,b+wx_1) y=c max(0,b+wx1)
    如果 b + w x 1 b+wx_1 b+wx1 的值小于 0,输出为 0;反之,输出 b + w x 1 b + wx_1 b+wx1
    把两个 ReLU 叠起来,就可以得到一个 Hard Sigmoid
    在这里插入图片描述
    在这里插入图片描述
    从实验结果可以看出,越来越多的 ReLU 可以使得模型的 training loss 与 testing loss 变小。
    在这里插入图片描述
    所得的模型结果仍旧不太理想,继续改模型
    我们把第一次通过激活函数输出的向量 a 再次代入激活函数得到 a ′ a^{\prime} a,即又加了一个 hidden layer
    在这里插入图片描述
    从实验结果可以看出,在输入层之后加入更多的隐藏层,可以使得模型的 training loss 与 testing loss 更小。
    在这里插入图片描述
    在这里插入图片描述
    此时,我们需要给模型起一个好的名字,叫做 Neural Network,其里面的一个个 activation function 也就叫做 Neuron,一排 Neurons 就叫做 hidden layer.
    而模型中有许多个 hidden layers 就意味着这个模型 very deep. → \rightarrow deep learning
    在这里插入图片描述
    因此,回顾前面讲的这么多,只要有了足够多排的 ReLU、Sigmoid,我们就可以将 linear model 逼近任意复杂的 piece-wise function 和 continuous function.
    在这里插入图片描述

我们抛出一个疑问:Why we want “deep” network, not “fat” network?

后面继续再讨论。
如果我们把模型加到 4 层,trainging loss 变小了,testing loss 反而变大了,这其实是一种 overfitting 现象,即 Better on training data, worse on unseen data.
在这里插入图片描述
如果是要挑选一个模型用来预测今天的观看人数,当然是选用 3 层的模型啦。
至于模型选择的问题,后面会再继续讲解。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值