01 - 机器学习基本概念介绍
1. 机器学习的基本任务
1.1 Regression 回归
如,输入过去的数据,对未来的数据进行预测。对数据进行拟合的过程叫做回归。
1.2 Classifiation 分类
给出选项,函数输出正确的选项。
如,下棋,输入每一步,预测下一步。
1.3 Structured Learning 结构化学习
Create something with structure(image, document)。
输出是一个有结构的事物,如计算机画一张图,写一篇文章等。
结构化预测或结构化(输出)学习是监督学习技术的总称,涉及预测结构化对象,而不是标量离散或实际值。
2 以YouTube点击人数预测为例介绍机器学习的运作过程
2.1 函数定义 function
机器学习找函数的过程,分为三个步骤,第一个步骤是写出一个带未知参数的函数 f f f,其能预测未来点击次数。比如写成
y = b + w x 1 y=b+wx_{1} y=b+wx1
而 b b b 跟 w w w 是未知的。带有未知的参数(parameter)的函数称为模型(model)。模型在机器学习里面,就是一个带有未知的参数的函数, 特征(feature). x 1 x_{1} x1是这个函数里面已知的,它是来自于油管后台的信息,2 月 25号点击的总人数是已知的,而 w 跟 b 是未知的参数。
w w w 称为权重(weight), b b b 称为偏置(bias)。
2.2 损失函数的定义loss
2.2.1 案例
loss: 预测值跟真实值之间的关系。
如每天的误差设定为
e n = ∣ y − y ^ ∣ e_{n}=|y-\hat y| en=∣y−y^∣
总误差设定为
L O S S : L = 1 N ∑ n e n LOSS: L=\frac{1}{N} \sum_{n}e_{n} LOSS:L=N1n∑en
2.2.2 一些概念
- LOSS:带有参数的函数 L ( b , w ) L(b,w) L(b,w),表示一组值的好坏
- e = ∣ y ^ − y ∣ e = |\hat y-y| e=∣y^−y∣ 平均绝对误差 MAE = mean absolute error
- e = ( y ^ − y ) 2 e = (\hat y-y)^{2} e=(y^−y)2 均方误差 MSE = mean square error
- 有些任务中y和yhat是概率分布,这个时候可能会选择交叉熵(cross entropy)
- Error Surface 误差曲面:调整w和b,组合计算loss,可以画出等高线图。
2.3 优化 Optimization
w ∗ , b ∗ = arg min w , b L w^{*},b^{*}=\arg \min_{w,b} L w∗,b∗=argw,bminL
找出最好的一组w和b使得L最小
2.3.1 Gradient Descent 梯度下降
- 一个参数下的情况
- 随便选一个初始的 w 0 w^{0} w0
- 计算 ∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w}|_{w=w^{0}} ∂w∂L∣w=w0 (斜率为负,需要增加w;斜率为正,需要降低w)
- 得到 w 1 w^{1} w1 ,公式为
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−η∂w∂L∣w=w0
- 两个参数下的情况
- 随便选一个初始的 w 0 w^{0} w0, b 0 b^{0} b0
- 计算 ∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w}|_{w=w^{0}} ∂w∂L∣w=w0, ∂ L ∂ b ∣ b = b 0 \frac{\partial L}{\partial b}|_{b=b^{0}} ∂b∂L∣b=b0
- 得到 w 1 w^{1} w1, b 1 b^{1} b1
w 1 ⇐ w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 b 1 ⇐ b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 w^{1} \Leftarrow w^{0}-\eta\frac{\partial L}{\partial w}|_{w=w^{0},b=b^{0}}\\b^{1} \Leftarrow b^{0}-\eta\frac{\partial L}{\partial b}|_{w=w^{0},b=b^{0}} w1⇐w0−η∂w∂L∣w=w0,b=b0b1⇐b0−η∂b∂L∣w=w0,b=b0
-
影响步长大小的两个因素
- 斜率:斜率越大跨步就大
- 学习率 η \eta η (learning rate): 学习率越大跨步越大,一次改变一点点。这种需要自己设定的数值称为超参数(hyperparameter)。
-
关于局部最优和全局最优的问题
在一些书里可以看到
global minima 全局最优
local minima 局部最优 -
loss可以为负吗?
loss是自定义的,如果定义为绝对值,就不为负值,如果定义为普通函数,就可以为负值。 -
梯度下降什么时候会停?
- 失去耐心,比如设定更新一百万次就停止更新(这里的一百万次也是HyperParameter)
- 理想停止,即通过参数的调整,发现微分值正好为0,说明达到了理想状况
-
关于超参数
- 所有需要考虑的参数都是超参数
- 如,学习率、步长、loss函数、batch大小等等等等
- 甚至sigmoid函数的数量也是一个超参数
2.4 修改模型
2.4.1 周期模型
考虑到领域知识(domain knowledge),我们发现点击人数是以一周为一个周期,周期性的进行变化,所以需要将模型修改为周期性表示。
新的模型如下所示,相当于有7个weight来衡量一个周期的信息
y = b + ∑ j = 1 7 w j x j y = b+\sum_{j=1}^{7} w_{j}x_{j} y=b+j=1∑7wjxj
2.4.2 分段模型
对于非线性模型,永远无法用线性模型来制造,出现巨大的偏差,称为模型的偏差(model bias)。所以需要更复杂、更灵活、有未知参数的函数来逼近非线性模型。
bias\ model bias(inductive bias)\ variance 之间的区别
model bias = inductive bias 归纳偏置 (虽然中文名大多称为归纳偏置,但感觉叫 归纳偏见\归纳偏好 更合适?)。指机器学习算法在学习过程中对数据的偏好或倾向,影响其学习的结果。或是说指机器学习算法在从数据中归纳规律时,所依赖的先验假设,偏好或限制。
比如CNN在识别猫狗图像时具有这种inductive bias 那么它会倾向于首先检测图像中的边缘和纹理特征,然后使用这些局部特征来推断整个图像的类别,并且会在学习过程中优先考虑不同位置的相同特征,而不是考虑特征的绝对位置。参考知乎
inductive bias 的意义或作用是使得学习器具有了泛化的能力。
一些表示inductive bias的方法:
- the chioce of model architecture
- the selection of features
- the type of regularization applied to the model
在实践中,通常使用具有不同inductive bias的模型架构的组合,并使用交叉验证和正则化等计数来减轻inductive bias对模型性能的影响。
bias 模型偏差 。 指样本拟合出的模型的输出结果的期望与样本真实结果的差距,简单讲就是样本上拟合的好不好。(想要bias表现好,即得到low bias,需要需杂化模型,增加模型参数,但容易过拟合(overfitting),导致点很分散,增加variance)
variance 方差。 指样本上训练的模型在测试集中的表现,(想要得到low variance,需要简化模型,减少模型参数,但这样容易欠拟合(unfitting),点偏离中心)
Error = Bias^2 + Variance + Noise
参考
分段线性曲线(piecewise linear curve),即红色函数,可以看成一个常数+一堆蓝色函数,其中蓝色函数称为Hard Sigmiod,它的特性是,x轴的值小于某个阈值或大于某个阈值时,中间有个斜坡(先水平,再斜坡,再水平)。分段线性曲线越复杂,转折的点越多,所需的蓝色函数就越多。
分段线性曲线可以逼近任何一个有角度有弧度的曲线。x和y的关系非常复杂也没关系,可以想办法写一个带有未知数的函数的函数来逼近曲线。直接写Sigmoid不是很容易,但可以用一条曲线来理解它,用Sigmoid函数来逼近Hard Sigmoid,表达式为:
y = c 1 1 + e − ( b + w 1 ) y=c\frac{1}{1+e^{-(b+w_{1})}} y=c1+e−(b+w1)1
x1趋近于无穷大时,e这一项会消失,x1非常大的时候,这一条就会收敛在高度为c的地方,如果x1负的非常大,分母的地方就非常大,y会趋近于0.
对于其它值固定,改变不同的参数,sigmoid函数的变化如下:
对于前面红色函数,可以用不同的sigmoid函数来表示,即
c 1 s i g m o i d ( b 1 + w 1 x 1 ) c 1 s i g m o i d ( b 2 + w 2 x 2 ) c 1 s i g m o i d ( b 3 + w 3 x 3 ) c_{1}sigmoid(b_{1}+w_{1}x_{1})\\c_{1}sigmoid(b_{2}+w_{2}x_{2})\\c_{1}sigmoid(b_{3}+w_{3}x_{3}) c1sigmoid(b1+w1x1)c1sigmoid(b2+w2x2)c1sigmoid(b3+w3x3)
对于周期为一周的函数可以表示为**(这里还不太明白,为什么要设置i行j列的权重)**
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+i∑cisigmoid(bi+j∑wijxj)
在sigmoid函数内的参数,可以表示为
r 1 = b 1 + w 11 x 1 + w 12 x 2 + w 13 x 3 . . . r1 = b1 + w11x1 + w12x2 + w13x3\\... r1=b1+w11x1+w12x2+w13x3...
通过矩阵和向量的关系,可以得到较为简单的写法
r = b + W x r=b+Wx r=b+Wx
sigmoid函数可以简写为
a = σ ( r ) a =\sigma (r) a=σ(r)
则上述函数可以表示为
y = b + c T σ ( b + W x ) y = b + c T a y=b+c^{T}\sigma (b+Wx)\\y=b+c^{T}a y=b+cTσ(b+Wx)y=b+cTa
对于损失函数,之前是 L ( w , b ) L(w,b) L(w,b),但未知参数太多,一一列举过于复杂,可以直接用 θ \theta θ来代替,即损失函数变为 L ( θ ) L(\theta) L(θ)。
下一步是优化 θ \theta θ,对于
θ = [ θ 1 θ 2 . . . ] \theta=\begin{bmatrix} \theta_{1}\\ \theta_{2}\\ ... \end{bmatrix} θ= θ1θ2...
需要找到损失最小的一组 θ \theta θ,要找到 θ 让损失越小越好,可以让损失最小的一组 θ \theta θ称为 θ ∗ \theta^{*} θ∗。一开始要随机选一个初始的数值 θ0。接下来计算每一个未知的参数对 L 的微分,得到向量 g,即可以让损失变低的函数。
g = ▽ L ( θ 0 ) g = [ ∂ L ∂ θ 1 ∣ θ = θ 0 ∂ L ∂ θ 2 ∣ θ = θ 0 . . . ] g=\bigtriangledown L(\theta_{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=▽L(θ0)g= ∂θ1∂L∣θ=θ0∂θ2∂L∣θ=θ0...
对于更新过程,矩阵表示如下
文字表述如下
实际在做梯度的时候,会把N笔数据随机分成一个一个batch,每个batch里有B笔数据。本来把所有的数据拿出来算一个损失,现在拿很多个batch算多个损失,每个batch计算的损失记为 L n L_{n} Ln以区分 L L L。所以实际上每次会先选一个batch,用该批量计算 L 1 L_{1} L1。根据 L 1 L_{1} L1来计算梯度,再用梯度来更新参数;接着使用下一个batch,计算 L 2 L_{2} L2,再次计算梯度并更新参数。(batch大小也是一个hyperparameter)
2.4.3 ReLU函数
ReLU=Rectified Linear Unit,修正线性单元
对于激励函数,不一定要把Hard Sigmiod换成Soft Sigmoid。一个Hard Sigmoid可以看作是两个ReLU的加总,其对应的公式为
c ∗ max ( 0 , b + w x 1 ) c*\max(0,b+wx_{1}) c∗max(0,b+wx1)
使用ReLU函数可以制造更复杂的曲线。接着可以通过增加层数来反复多做几次运算,可以显著降低误差。
经过预测后,发现在红圈位置的预测值偏差过大,因为这里涉及到一些经验问题(当天是除夕)。
2.4.4 小结
Sigmoid函数或ReLU称为神经元neuron,很多神经元称为神经网络neural network。每一层称为隐藏层hidden layer,很多的隐藏层就“深”,称为深度学习。
但4 层在训练数据上,损失是 0.1k,在没有看过 2021 年的数据上,损失是 0.44k。在训练数据上,3 层比 4 层差,但是在没看过的数据上,4 层比较差,3 层比较好。在训练数据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)。
另外深度学习的训练会用到反向传播(BlackPropagation,BP),以后会概述。