机器学习基础概念

目录

  • 前言
  • 一、模型与训练
  • 二、损失函数(loss)
  • 三、优化算法
    • 小批量随机梯度下降
    • 冲量法
    • ADAM
  • 四、softmax回归
    • softmax
    • 交叉熵(cross entropy)损失函数
  • 五、激活函数
    • ReLU
    • sigmoid
    • tanh
  • 六、模型评价与误差
  • 七、欠拟合与过拟合
    • VC维
    • 权重衰退
    • 丢弃法(dropout)
  • 后记

前言

本篇博客将记录一些我学习机器学习的过程(主要是深度学习)。

一、模型与训练

模型由输入、输出以及中间的某些运算组成,换言之,一个模型就是一个函数。一个模型中包含一定数量的参数,训练模型就是调整这些参数使得模型的输出符合我们的需要。

二、损失函数(loss)

损失函数反应我们对模型的需要(衡量模型预测值与真实值之间的差距),取一个非负的函数,训练模型的过程就是使loss最小的过程。

  • L1 loss
    l ( y , y ′ ) = ∣ y − y ′ ∣ l\left(y, y^{\prime}\right)=\left|y-y^{\prime}\right| l(y,y)=yy
  • L2 loss(均方损失):相比于L1,求导方便
    l ( y , y ′ ) = 1 2 ( y − y ′ ) 2 l\left(y, y^{\prime}\right)=\frac{1}{2}\left(y-y^{\prime}\right)^{2} l(y,y)=21(yy)2
  • Huber’s Robust Loss
    l ( y , y ′ ) = { ∣ y − y ′ ∣ − 1 2  if  ∣ y − y ′ ∣ > 1 1 2 ( y − y ′ ) 2  otherwise  l\left(y, y^{\prime}\right)=\left\{\begin{array}{ll} \left|y-y^{\prime}\right|-\frac{1}{2} & \text { if }\left|y-y^{\prime}\right|>1 \\ \frac{1}{2}\left(y-y^{\prime}\right)^{2} & \text { otherwise } \end{array}\right. l(y,y)={yy2121(yy)2 if yy>1 otherwise 

L2 loss虽然导函数连续,但是当预测值和真实值差距较大时,求导所得的梯度值也会比较大,这就导致参数调整的幅度较大,这是我们不希望看到的(可能导致不稳定)。

而L1 loss除了原点,其余位置的导数均为1,不存在上述问题,Huber Robust loss就综合了L1和L2的优点。

三、优化算法

在现实中,大多数问题无法求得最优的解析解,因此模型往往只能通过多次迭代优化,尽可能地降低损失函数的值,这样得到的解称为数值解

小批量随机梯度下降

  • 梯度:表示某一函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大
  • 批量:训练样本中的一小部分样本数据

梯度下降算法的思想是沿着梯度的反方向进行自变量的更新,但是如果每一次迭代都要计算所有样本的梯度,那么一次迭代的计算开销数量级为O(n),这几乎是不可接受的。因此小批量随机梯度下降算法在实际应用中更为广泛,其本质就是用小批量的样本近似地代替全部样本。
g t = 1 ∣ B t ∣ ∑ i ∈ B t ∇ l ( x t − 1 ) g_{t}=\frac{1}{\left|\mathcal{B}_{t}\right|} \sum_{i \in \mathcal{B}_{t}} \nabla l\left(x_{t-1}\right) gt=Bt1iBtl(xt1) x t ← x t − 1 − η g t x_{t} \leftarrow x_{t-1}-\eta g_{t} xtxt1ηgt
其中学习率η和批量大小B是人为设定的,称为超参数。

冲量法

(待补充)

ADAM

(待补充)

四、softmax回归

下图是一个含有多个输出的感知机,自然地,对于一个多分类问题,我们可以用输出值Oi来表示预测分类i的置信度,并将最大的的值对应的分类作为预测输出。例如,如果O1,O2,O3分别为1,1,10,那么第3类的值最大,预测输出为3。

但是这会带来两个方面的问题。
第一,输出值的范围不确定,因此难以直观地判断输出值的含义。在上述例子中,我们对输出结果“很置信”,因为O3是另外两个结果的10倍。但是,如果O1,O2为1000,那么输出值为10的结果置信度又很低了。
第二,预测误差难以衡量。由于数值范围的不确定,用前面介绍的损失函数难以衡量预测准确度之间的误差。
机器学习基础概念_第1张图片

softmax

y ^ = softmax ⁡ ( o ) \hat{\mathbf{y}}=\operatorname{softmax}(\mathbf{o}) y^=softmax(o) y ^ i = exp ⁡ ( o i ) ∑ k exp ⁡ ( o k ) \hat{y}_{i}=\frac{\exp \left(o_{i}\right)}{\sum_{k} \exp \left(o_{k}\right)} y^i=kexp(ok)exp(oi)
通过如上所示的softmax运算,所有输出被归一化至[0,1]区间上,且所有输出之和为1。这样,每一个输出可以被视作一个概率。

交叉熵(cross entropy)损失函数

交叉熵函数用于衡量两个概率分布之间差异的函数。
l ( y , y ^ ) = − ∑ i y i log ⁡ y ^ i = − log ⁡ y ^ y l(\mathbf{y}, \hat{\mathbf{y}})=-\sum_{i} y_{i} \log \hat{y}_{i}=-\log \hat{y}_{y} l(y,y^)=iyilogy^i=logy^y
交叉熵函数只关心对正确分类的预测概率。例如,当预测值和真实值分别为
y i = [ 0.1 0.1 0.8 ] y ^ i = [ 0 0 1 ] y_i=\begin{bmatrix} 0.1 \\0.1\\0.8 \end{bmatrix} \hat{y}_{i}=\begin{bmatrix} 0 \\0\\1 \end{bmatrix} yi= 0.10.10.8 y^i= 001
交叉熵运算结果为0.8*1 = 0.8

五、激活函数

(偷懒一下,直接放之前写过的)
输入层和输出层是神经网络的基本构成,当在输入和输出层之间引入多个隐藏层时,模型的复杂度能够随之提高,同时也实现了对数据潜在模式的逐级表征。其中,若某一层的单元与上一层的输出完全链接,则称为全连接层。如图1所示,设输入层的输入为X,隐藏层的输出为H,输出层的输出为O,则
H = X W 1 + b 1 H=XW_1+b_1 H=XW1+b1 O = H W 2 + b 2 O=HW_2+b_2 O=HW2+b2
机器学习基础概念_第2张图片
W_1和W_2分别为隐藏层和输出层的权重系数,b_1和b_2为对应的偏差。
由下式可知,上述模型等价于单层的线性模型,换言之,隐藏层的引入并没有使模型具有拟合非线性的复杂数据的能力。
O = ( X W 1 + b 1 ) W 2 + b 1 = X W 1 W 2 + b 1 W 2 + b 2 = X W + b O=(XW_1+b_1 ) W_2+b_1=XW_1 W_2+b_1 W_2+b_2=XW+b O=(XW1+b1)W2+b1=XW1W2+b1W2+b2=XW+b
为了解决这个问题,研究者提出在线性变换之后补充一个非线性的激活函数(activation function)σ
H = σ ( X W 1 + b 1 ) H=σ(XW_1+b_1 ) H=σ(XW1+b1) O = H W 2 + b 2 O=HW_2+b_2 O=HW2+b2

ReLU

ReLU ⁡ ( x ) = max ⁡ ( x , 0 ) \operatorname{ReLU}(x)=\max (x, 0) ReLU(x)=max(x,0)
机器学习基础概念_第3张图片
由于其易于实现、表现良好的优点,ReLU函数广泛应用于各种任务。

sigmoid

sigmoid ⁡ ( x ) = 1 1 + exp ⁡ ( − x ) \operatorname{sigmoid}(x)=\frac{1}{1+\exp (-x)} sigmoid(x)=1+exp(x)1
机器学习基础概念_第4张图片
sigmoid函数是一个平滑、可微的函数,它将输入映射到[0,1]上。

tanh

tanh ⁡ ( x ) = 1 − exp ⁡ ( − 2 x ) 1 + exp ⁡ ( − 2 x ) \tanh (x)=\frac{1-\exp (-2 x)}{1+\exp (-2 x)} tanh(x)=1+exp(2x)1exp(2x)
机器学习基础概念_第5张图片
与sigmoid函数类似,tanh函数将输入映射到[-1,1]区间。

六、模型评价与误差

  • 训练误差:在训练集上的误差
  • 测试误差:在测试集上的误差
  • 泛化误差:在验证集上的误差。较低的泛化误差是我们训练模型的最终追求。

七、欠拟合与过拟合

欠拟合是指模型在训练集上都无法取得较好的误差,说明模型容量小或此模型并不适合这个问题。过拟合是指模型在训练集上有很好的表现,但是在测试集或者验证集上表现很差。过拟合往往是由于模型容量大,足以“记住”训练集大部分元素(相当于“背答案”,但不会做题),或是过于依赖某些只存在于训练集中的特殊特征。

VC维

VC维传统的定义是:对一个指示函数集,如果存在H个样本能够被函数集中的函数按所有可能的2的H次方种形式分开,则称函数集能够把H个样本打散;函数集的VC维就是它能打散的最大样本数目H。
通俗地讲,让一个模型去“记”一个数据集的元素及其对应的标签,所能“记下”的数据集大小就是此模型的VC维大小。

在统计学习中,VC维用来衡量一个模型的复杂度(容量)。但在实际应用中,一个模型的VC维往往难以计算,因此VC维应用比较局限。一般常用一个模型的参数数量来大致估计模型的容量。

权重衰退

模型的容量主要受两个因素影响:参数取值范围参数数量。权重衰退就是通过控制参数的取值范围来控制模型的容量。
L2范数正则化:在损失函数上加上一个对权重的惩罚项。
min ⁡ ℓ ( w , b ) + λ 2 ∥ w ∥ 2 \min \ell(\mathbf{w}, b)+\frac{\lambda}{2}\|\mathbf{w}\|^{2} min(w,b)+2λw2
其中λ是超参数,λ越大对参数的取值范围限制越大。

∂ ∂ w ( ℓ ( w , b ) + λ 2 ∥ w ∥ 2 ) = ∂ ℓ ( w , b ) ∂ w + λ w \frac{\partial}{\partial \mathbf{w}}\left(\ell(\mathbf{w}, b)+\frac{\lambda}{2}\|\mathbf{w}\|^{2}\right)=\frac{\partial \ell(\mathbf{w}, b)}{\partial \mathbf{w}}+\lambda \mathbf{w} w((w,b)+2λw2)=w(w,b)+λw w t + 1 = ( 1 − η λ ) w t − η ∂ ℓ ( w t , b t ) ∂ w t \mathbf{w}_{t+1}=(1-\eta \lambda) \mathbf{w}_{t}-\eta \frac{\partial \ell\left(\mathbf{w}_{t}, b_{t}\right)}{\partial \mathbf{w}_{t}} wt+1=(1ηλ)wtηwt(wt,bt)
这与最初的梯度下降算法相比,Wt前的系数从1变成了(1-ηλ),而ηλ通常设置为小于1的数,因此随着不断地迭代,参数的取值范围会不断减小,因此L2正则也叫做权重衰退

丢弃法(dropout)

丢弃法在训练时对输入做如下扰动(在测试时不丢弃
x i ′ = { 0  with probablity  p x i 1 − p  otherise  x_{i}^{\prime}=\left\{\begin{array}{ll} 0 & \text { with probablity } p \\ \frac{x_{i}}{1-p} & \text { otherise } \end{array}\right. xi={01pxi with probablity p otherise 
这样能保证扰动前和扰动后的输出数学期望不变。

丢弃法实质上是以一定的概率丢弃神经网络中的一些神经元,使得网络不过分地依赖某些特征。也有一种解释是,每次训练都随机地训练某个子网络,在输出做评价。主流的观点认为dropout相当于一种正则。

后记

开始写博客想把自己学到的东西记录一下,方便今后回顾。如果今后水平更高,能给后来者提供一点微不足道的参考,那真会是十分荣幸。
ps.文中图片基本来自网络和李沐老师的《动手学深度学习》

你可能感兴趣的:(人工智能,深度学习)