文章目录
- 一、机器学习的步骤
- Step1 - Function with unknown
- Step2 - Define Loss from Training Data
- Step3 - Optimization
- 二、机器学习的改进
- Q1 - 线性模型有一些缺点
- Q2 - 重新诠释机器学习的三步
- Q3 - 机器学习的扩展
- Q4 - 过拟合问题(Overfitting)
一、机器学习的步骤
如图所示,机器学习分为以下三步:
下文按照这个步骤来进行整理
Step1 - Function with unknown
- 机器学习就是 “自动找到一个非常复杂的函数" ,其输入是原始的数据(声音信号、图片、棋盘状态等),通过这个函数,得到一个较好的答案(语音对应的文字、图片展示的对象、棋子下一步走法等),如图:
- 为了实现不同的目标,我们可以用机器学习去找不同的函数,这些任务有如下的分类:
(1)Regression:the function output a scalar;找一个数,如预测明天的气温、PM2.5浓度;
(2)Classification: Given options(classes),the function output the correct one;给出一个正确的选项;
(3)Structured Learning:让机器产生有结构性的信息(文章、图片等);
…
- x`Model:带有未知参数的函数,也就是我们机器学习的目标——建立一个model解决问题。在Model中我们有一些概念:
(1)feature:来源于数据,是已知的参数。
(2)weight:与feature相乘,代表feature的重要程度。
(3)bias:预测值和真实值的偏差。
我们用以上式子来解释:将浏览信息输入,预测未来浏览量。
其中 y 就是我们预测的浏览量, x 1 x_1 x1是我们之前的浏览量,w是weight,b是bias。
Step2 - Define Loss from Training Data
- Loss也是一个函数,其输入是之前提到的weigth和bias,它的输出用来衡量这两个数值设置的好不好。
- 可以通过比对估测的值和真实的值之间的差距,使用 e = ∣ y − y ^ ∣ e = |y - \hat{y}| e=∣y−y^∣ (MAE) 或 e = y − y ^ ) 2 e = y - \hat{y})^2 e=y−y^)2 (MSE) 来衡量,其中真实的值叫做Label。
- 可以用如下的图表衡量Loss与bias和weight的关系:
Step3 - Optimization
- 优化的目标就是找到一个让Loss - e e e 更小的函数,我们将优化方法——梯度下降(Gradient Descent)也分为如下三步:
(1)(Randomly)Pick an initial value w 0 w^0 w0
(2) 取微分(bias同理):
∂ L ∂ W ∣ w = w 0 \frac{\partial L} {\partial W} \Bigg|_{w = w^0} ∂W∂L w=w0
(3) update w w w iteratively:通过刚刚的微分,乘上学习率 η \eta η 来更新 w w w 的值,如下:
w 1 = w 0 − η ∂ L ∂ W ∣ w = w 0 w^1 = w^0 - \eta \frac{\partial L} {\partial W} \Bigg|_{w = w^0} w1=w0−η∂W∂L w=w0
注:机器学习中需要自己设置的参数(如学习率 η \eta η),叫做hyperparameters。
- 我们在 w w w 到达满意的值或者失去耐心(到达设置的移动次数)后,取定最终的值。其中我们发现,如果学习率 η \eta η 设置的较小,我们可能陷入 Local Minima 中,而找不到最优的 Global Minima。
其实它不是机器学习中的难题,后续继续进行介绍。
二、机器学习的改进
Q1 - 线性模型有一些缺点
- 线性模型(Linear model)太过于简单,对真实情况可能做不到很好的预测:
- 我们可以使用常数 + 多个函数来构建最终的模型:
转折点越多,需要的蓝色function越多。如果有足够多的function组合在一起,也许我们就能得到足够好的模拟效果。
- 引入一个新的概念:激活函数(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)
改变不同的参数有如下效果:
新的Model——拥有更多Feature:
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+i∑ci sigmoid(bi+wix1)
- 更加复杂的model:
以上是三个sigmoid函数中的元素,我们还可以用线代知识对式子进行简化:
我们构建Model的流程就如下图所示:
Q2 - 重新诠释机器学习的三步
-
function with unknown:
现在我们定义的含有未知数的函数就变成了上图中的函数: y = b + c T σ ( b + W x ) y = b + c^T \sigma(b + Wx) y=b+cTσ(b+Wx)
其中 σ \sigma σ 是激活函数 s i g m o i d sigmoid sigmoid,注意其中的两个常数 b b b 是不同的值。 -
Define Loss from Training Data
Loss的定义没有不同,依旧是 L = 1 N ∑ e n L = \frac{1}{N} \sum{e_n} L=N1∑en。 -
Optimization of New Model
在新模型中,feature包含 W 、 b 、 C T W 、b、 C^T W、b、CT 等,我们将其全部放入一个新的矩阵 θ \theta θ 中, θ = [ θ 1 θ 2 θ 3 ] \theta = \begin{bmatrix} \theta1 \\ \theta2 \\ \theta3 \\ \end{bmatrix} θ= θ1θ2θ3
即将feature的元素依次放入 θ \theta θ。
现在我们引入一个新的向量 gradient(梯度)来表示优化效果:
g = [ ∂ L ∂ θ 1 ∣ θ = θ 0 ∂ L ∂ θ 2 ∣ θ = θ 0 . . . ] g = ∇ L ( θ 0 ) g = \begin{bmatrix} \frac{\partial L}{\partial \theta_1} |_{\theta = \theta_0} \\ \\ \frac{\partial L}{\partial \theta_2} |_{\theta = \theta_0} \\ ... \end{bmatrix} \; g = \nabla L(\boldsymbol{\theta}^0) g= ∂θ1∂L∣θ=θ0∂θ2∂L∣θ=θ0... g=∇L(θ0)
逐步更新参数,取得更好的结果 θ ∗ = a r g m i n L \theta^* = arg\ min_{}L θ∗=arg minL 。
Q3 - 机器学习的扩展
在实际的机器学习中,我们会将完整的数据集分为不同的batch分别进行训练,每训练完一个batch,就更新一次模型参数(即进行一次梯度下降)。
优点:
(1) 节省内存:如果你一次用整个数据集训练(叫做 full-batch),对大数据来说会爆内存。
(2) 更快训练:batch 可以并行计算,训练过程更高效。
(3) 提高泛化性:每次用不同的 batch 做梯度估计,有“抖动”,反而能避免陷入局部最优。
此外,激活函数还不仅仅局限于sigmoid,还有ReLU:
定义:
Q4 - 过拟合问题(Overfitting)
再训练资料上模型表现的较好,但是在新资料上表现差的问题,我们称之为过拟合(Overfitting)
我们应该选择在未训练数据上表现更好的。