本文作为自己学习李宏毅老师2021春机器学习课程所做笔记,记录自己身为入门阶段小白的学习理解,如果错漏、建议,还请各位博友不吝指教,感谢!!
Machine Learning主要的任务是寻找一个合适的Function来完成我们的工作(非常不严谨的简单理解),如上图中的Image Recognition,就是要寻找一个合适的 f f f,实现通过对输入的图片进行各种转换识别出图片中的事物是一只猫的功能。
以预测YouTube视屏播放量为例:
1. 根据专业知识构建Model
model | y = b + w x 1 y = b + wx_1 y=b+wx1 |
输入:特征(feature) x 1 x_1 x1 | 为2/25的播放量 |
输出: y y y | 为2/26的播放量 |
weight w | f f f要学习的参数 |
bias b | f f f要学习的参数 |
2. 结合训练数据定义损失函数(Loss Function)
定义损失函数的目的是使用损失函数来评价Model效果的好坏,而需要Model: y = b + w x 1 y=b+wx_1 y=b+wx1自己学习的参数是 w w w和 b b b(也就是weight和bias决定了Model的预测效果)。所以Loss Function是关于 w w w和 b b b的Function,以此来评价Model的效果。
通常来说,Loss Function的值越大(损失越大),Model效果越差;Loss Function的值越小(损失越小),Model的效果越好。常见的Loss Function有如下几种:
3. 优化参数
此处使用随机梯度下降算法进行优化,获得让Loss Function值最小的 w w w和 b b b。优化过程如下:
(随机)初始化Model的参数 w 0 w^0 w0, b 0 b^0 b0
计算各个参数的梯度:
∂ L ∂ w ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial w}|_{w=w^0,b=b^0} ∂w∂L∣w=w0,b=b0
∂ L ∂ b ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial b}|_{w=w^0,b=b^0} ∂b∂L∣w=w0,b=b0
分别更新参数 w w w和 b b b
w 1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 w^1 \leftarrow w^0 - \eta\frac{\partial L}{\partial w}|_{w=w^0, b=b^0} w1←w0−η∂w∂L∣w=w0,b=b0
b 1 ← b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 b^1 \leftarrow b^0 - \eta\frac{\partial L}{\partial b}|_{w=w^0, b=b^0} b1←b0−η∂b∂L∣w=w0,b=b0
其中 η \eta η为学习率,是自己手动设置的一个参数。(所有需要自己手动设置的参数都称为“超参数”)
直到获得 w ∗ w^* w∗和 b ∗ b^* b∗使得 w ∗ , b ∗ = a r g min w , b L w^*,b^* = arg\, \min_{w,b}L w∗,b∗=argminw,bL
在第三部分中,所构建的模型 y = b + w x 1 y=b+wx_1 y=b+wx1,是简单的Linear model,如果遇到很复杂的情况,简单的Linear model是无法表示的,这种限制被称为Model Bias。
如上图所示,红线表示真实的数据,蓝线表示Linear Model。三条蓝线代表权重 w w w和 b b b不同的model,可以看出无论 w w w和 b b b怎样变化,Linear model都无法很好的表示红线代表的情况,这就是Model Bias。
我们可以构建更加复杂灵活的模型来解决Model Bias问题:
如上图所示,我们可以使用一组蓝线相加,来构建模型表示红线。从左到右:
通过这种方式,只要我们使用足够多的蓝线,是可以构建出一个能很好的表示出真实曲线(红色曲线)的model的。
在应用过程中我们可以选择sigmoid函数来作为蓝线构建model(当然也可以选择其他的函数,此处仅作举例表示)。
Sigmoid Function:
y = c 1 1 + e − ( b + w x 1 ) = c s i g m o i d ( b + w x 1 ) \begin{aligned} y &= c\frac{1}{1+e^-(b+wx_1)} \\ &= c sigmoid(b+wx_1) \end{aligned} y=c1+e−(b+wx1)1=csigmoid(b+wx1)
函数图像如下所示:
如下图所示,使用sigmoid函数,按照上边的步骤来表示真实情况:
当只有一个特征 x 1 x_1 x1时,可以得到model:
y = b + ∑ i c i s i g m o i d ( b i + w i x 1 ) y = b + \sum_{i}c_isigmoid(b_i+w_ix_1) y=b+i∑cisigmoid(bi+wix1)
当有多个特征 x j x_j xj时,可以得到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_isigmoid(b_i+\sum_{j}w_{ij}x_j) y=b+i∑cisigmoid(bi+j∑wijxj)
为了有直观的理解,假设i:1,2,3; j:1,2,3,并画出图来,如下所示:
在第三步中介绍到,完成model的构建的下一步是定义Loss Function。Loss Function是关于model中未知参数的Function,在这里的未知的参数有 W , b , b , c T W,b,\mathsf{b},c^{T} W,b,b,cT。
如上图所示,我们将这些参数合并成一个 θ \theta θ向量,定义损失函数 L ( θ ) L(\theta) L(θ)如下:
L ( θ ) = 1 N ∑ n e n = 1 N ∑ n ( y ^ − y ) = 1 N ∑ n ( y ^ − ( b ′ + c T σ ( b + W x ) ) ) \begin{aligned} L(\theta) &= \frac{1}{N}\sum_{n}e_n \\ &=\frac{1}{N}\sum_{n}(\hat{y}-y) \\ &=\frac{1}{N}\sum_{n}(\hat{y}-(b^{'}+c^T\sigma(b+Wx))) \end{aligned} L(θ)=N1n∑en=N1n∑(y^−y)=N1n∑(y^−(b′+cTσ(b+Wx)))
在深度学习中,往往将训练数据集随机划分为N个batch,每完成一个batch的计算,便更新一次参数 θ \theta θ,一轮(epoch)完成对所有N个batch的计算。