本系列文章仅为个人学习邱锡鹏老师《神经网络与深度学习》和李沐老师《动手学深度学习》的学习笔记,不做任何商业传播用途!若发现有雷同,不是巧合。
文章目录
- 本模块近期暂时停更,博主发现不能没学会跑就着急飞,机器学习的基础也得补一补
▲困惑了很久的机器学习和模式识别到底有啥区别?
举例:手写数字识别—让机器学习一套识别算法几乎很难完成。解决方案:让计算机“看”大量的样本,并从中学习经验,然后使用这些经验来识别新的样本。首先需要人工标注大量手写体数字图像,以这些图像作为训练数据,然后通过学习算法自动生成一套模型,使用这个模型识别新的手写数字体。
2.1 基本概念
*注:因为一些名词非常基础、一目了然,所以不再过分追求解释
💡 专有名词: 特征(feature)、标签(label)—通常使用标量y表示、样本(sample)/示例(instance):标记了特征和标签的个体、数据集(data set)/语料库(corpus)—训练集+测试集、特征向量(一个个体的所有特征构成的向量,每一维代表一个特征) |
给定训练集
D
\mathcal{D}
D中的
N
N
N个样本都是独立同分布的,希望计算机从一个函数集合
F
=
{
f
1
(
x
)
,
f
2
(
x
)
,
.
.
.
}
\mathscr{F}=\left\{ f_1\left( \boldsymbol{x} \right) ,f_2\left( \boldsymbol{x} \right) ,... \right\}
F={f1(x),f2(x),...} 中自动寻找一个最优的函数
f
∗
(
x
)
f^*(x)
f∗(x)来近似每个样本的特征向量
x
x
x和标签
y
y
y之间的真实映射关系,及预测标签的值
y
^
=
f
∗
(
x
)
\hat{y}=f^*(x)
y^=f∗(x)或标签的条件概率
p
^
(
y
∣
x
)
=
f
y
∗
(
x
)
\hat{p}(y|\boldsymbol{x})=f^*_y(\boldsymbol{x})
p^(y∣x)=fy∗(x)【函数在
y
y
y维的值,即当特征为
x
\boldsymbol{x}
x时样本标签是
y
y
y的概率】。寻找这个最优的函数就是机器学习的关键,一般需要通过学习算法
A
\mathcal{A}
A来完成,这个过程称为学习或训练。
为了评估这个算法的效果,独立同分布地抽取样本作为测试集
D
′
\mathcal{D}'
D′,将函数在测试集上进行测试,计算预测结果的准确率:
A
c
c
(
f
∗
(
x
)
)
=
1
∣
D
′
∣
∑
(
x
,
y
)
∈
D
′
I
(
f
∗
(
x
)
=
y
)
Acc(f^*(\boldsymbol{x}))=\frac1{|\mathcal{D}^{\prime}|}\sum_{(x,y)\in\mathcal{D}^{\prime}}I(f^*(\boldsymbol{x})=y)
Acc(f∗(x))=∣D′∣1∑(x,y)∈D′I(f∗(x)=y)
2.2 机器学习四要素
(1)数据
有监督学习(回归问题、分类问题): ( x , y ) (x, y) (x,y)
无监督学习: x x x
(2)模型
从假设空间中选择最优的模型,能够预测输入和输出的关系。
不同机器学习任务主要区别在于输出空间不同,例如二分类问题中 y = { + 1 , − 1 } \mathcal{y}=\{+1,-1\} y={+1,−1},在C分类问题中 y = { 1 , 2 , . . . , C } \mathcal{y}=\{1,2,...,C\} y={1,2,...,C},在回归问题中 y = R \mathcal{y}=\mathbb{R} y=R。
假定样本空间中的样本 ( x , y ) (\boldsymbol{x},y) (x,y)中 x \boldsymbol{x} x和 y y y的关系可以通过一个未知的真实映射函数 y = g ( x ) y=g(\boldsymbol{x}) y=g(x)或真实条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x)表述,则机器学习的目标是找到一个模型来接近这个表述。由于不知道这个表述的具体形式,只能根据经验假设一个参数化的函数集合 F \mathcal{F} F, F = { f ( x ; θ ) ∣ θ ∈ R D } \mathcal{F}=\left\{{f(\boldsymbol{x};\theta)|\theta \in \mathbb{R}^D} \right\} F={f(x;θ)∣θ∈RD} ,称为假设空间,观察其在训练集 D \mathcal{D} D上的特性,选择一个理想的假设 f ∗ ∈ F f^* \in \mathcal{F} f∗∈F。其中 f ( x ; θ ) f(\boldsymbol{x};\theta) f(x;θ)是参数为 θ \theta θ的函数,也称为模型,D是参数的数量。
线性模型
假设空间为一个参数化的线性函数族,即 f ( x ; θ ) = w T x + b f(\boldsymbol{x};\theta)=\boldsymbol{w}^T\boldsymbol{x}+b f(x;θ)=wTx+b,参数 θ \theta θ包含了权重 w \boldsymbol{w} w和偏置 b b b。
非线性模型
广义的非线性模型可以写成多个非线性基函数 ϕ ( x ) \boldsymbol{\phi} \left( \boldsymbol{x} \right) ϕ(x) ϕ ( x ) \phi \left( \boldsymbol{x} \right) ϕ(x) f ( x ; θ ) = w T ϕ ( x ) + b f\left( \boldsymbol{x;}\theta \right) =\boldsymbol{w}^T \boldsymbol{\phi} \left( \boldsymbol{x} \right) +b f(x;θ)=wTϕ(x)+b,其中 ϕ ( x ) = [ ϕ 1 ( x ) , . . . , ϕ K ( x ) ] T \boldsymbol{\phi} \left( \boldsymbol{x} \right)=[\phi_1(\boldsymbol{x}),...,\phi_K(\boldsymbol{x})]^T ϕ(x)=[ϕ1(x),...,ϕK(x)]T是 K K K个非线性基函数组成的向量。
如果 ϕ ( x ) \boldsymbol{\phi(x)} ϕ(x)本身是可学习的基函数,例如 ϕ k ( x ) = h ( w k ⊤ ϕ ′ ( x ) + b k ) , ∀ 1 ≤ k ≤ K \boldsymbol{\phi_k(x)}=h(\boldsymbol{w}_k^{\top}\boldsymbol{\phi^{\prime}(x)}+b_k),\forall1\leq k\leq K ϕk(x)=h(wk⊤ϕ′(x)+bk),∀1≤k≤K,其中 h ( . ) h(.) h(.)是非线性函数, ϕ ′ ( x ) \boldsymbol{\phi'(x)} ϕ′(x)是另一组基函数, w k \boldsymbol{w}_k wk和 b k b_k bk时刻学习的参数,那么 f ( x ; θ ) f(\boldsymbol{x};\theta) f(x;θ)等价于神经网络模型。
(3)学习准则
判断模型好坏。
首先训练集 D = { ( x ( n ) , y ( n ) ) } n = 1 N D=\{(\boldsymbol{x}^{(n)},y^{(n)})\}_{n=1}^N D={(x(n),y(n))}n=1N应确保是由N个独立同分布地样本组成,即每个样本 ( x , y ) ∈ X × Y \left( \boldsymbol{x,}y \right) \in \mathcal{X}\times \mathcal{Y} (x,y)∈X×Y是从 X \mathcal{X} X和 Y \mathcal{Y} Y的联合空间中按照某个未知分布 p r ( x , y ) p_r(\boldsymbol{x},y) pr(x,y)独立地随机产生的,要求样本分布必须是固定的(虽然可以是未知的),不会随时间而变化。
那么一个好的模型 f ( x , θ ∗ ) f(\boldsymbol{x},\theta^*) f(x,θ∗)应该在所有 ( x , y ) (\boldsymbol{x},y) (x,y)的可能取值上都与真实的映射函数 y = g ( x ) y=g(\boldsymbol{x}) y=g(x)一致,或与真实条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x)一致,即:
∣ f ( x , θ ∗ ) − y ∣ < ε , ∀ ( x , y ) ∈ X × Y , ∣ f y ( x , θ ∗ ) − p r ( y ∣ x ) ∣ < ε , ∀ ( x , y ) ∈ X × Y \left|f(\boldsymbol{x},\theta^*)-y\right|<\varepsilon,\quad\forall(\boldsymbol{x},y)\in \mathcal{X}\times \mathcal{Y}, \\ |f_y(\boldsymbol{x},\theta^*)-p_r(y|\boldsymbol{x})|<\varepsilon,\quad\forall(\boldsymbol{x},y)\in \mathcal{X}\times \mathcal{Y} ∣f(x,θ∗)−y∣<ε,∀(x,y)∈X×Y,∣fy(x,θ∗)−pr(y∣x)∣<ε,∀(x,y)∈X×Y
其中 ε \varepsilon ε是一个很小的正数, p r ( x , θ ∗ ) p_r(\boldsymbol{x},\theta^*) pr(x,θ∗)为模型预测的条件概率分布中 y y y对应的概率。
模型的好坏可以用期望风险/期望错误 R ( θ ) \mathcal{R}(\theta) R(θ)来衡量,定义为: R ( θ ) = E ( x , y ) ∼ p r ( x , y ) [ L ( y , f ( x ; θ ) ) ] \mathcal{R}(\theta)=\mathbb{E}_{(x,y)\sim p_r(\boldsymbol{x},y)}[\mathcal{L}(y,f(\boldsymbol{x};\theta))] R(θ)=E(x,y)∼pr(x,y)[L(y,f(x;θ))],其中 p r ( x , y ) p_r(\boldsymbol{x},y) pr(x,y)是真实的数据分布, L ( y , f ( x ; θ ) ) \mathcal{L}(y,f(\boldsymbol{x};\theta)) L(y,f(x;θ))是损失函数,用来量化两个变量间的差异。
Ⅰ.损失函数(Loss Function)
损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。
0-1损失函数
最直观的损失函数是模型在训练集上的错误率。但缺点是数学性质不是很好:不连续且导数为0,难以优化。
L ( y , f ( x ; θ ) ) = { 0 if y = f ( x ; θ ) 1 if y ≠ f ( x ; θ ) = I ( y ≠ f ( x ; θ ) ) \begin{aligned}\mathcal{L}(y,f(\boldsymbol{x};\theta))& \left.=\left\{\begin{array}{ll}0&\text{if}y=f(\boldsymbol{x};\theta)\\\\1&\text{if}y\neq f(\boldsymbol{x};\theta)\end{array}\right.\right. \\&=I(y\neq f(\boldsymbol{x};\theta))\end{aligned} L(y,f(x;θ))=⎩ ⎨ ⎧01ify=f(x;θ)ify=f(x;θ)=I(y=f(x;θ))
平方损失函数(Quadratic Loss Function)
经常用在预测标签为实数值的任务中,但不适用于分类问题,定义为:
L ( y , f ( x ; θ ) ) = 1 2 ( y − f ( x ; θ ) ) 2 . \mathcal{L}(y,f(\boldsymbol{x};\theta))=\frac12{\left(y-f(\boldsymbol{x};\theta)\right)}^2. L(y,f(x;θ))=21(y−f(x;θ))2.
交叉熵损失函数(Cross-Entropy Loss Function)
一般用于分类问题。假设样本的标签 y ∈ { 1 , . . . , C } y \in \{1,...,C\} y∈{1,...,C}为离散的类别,模型 f ( x ; θ ) ∈ [ 0 , 1 ] C f(\boldsymbol{x};\theta)\in[0,1]^C f(x;θ)∈[0,1]C的输出为类别标签的条件概率分布,即: p ( y = c ∣ x ; θ ) = f c ( x ; θ ) p(y=c|\boldsymbol{x};\theta)=f_c(\boldsymbol{x};\theta) p(y=c∣x;θ)=fc(x;θ),并满足 f c ( x ; θ ) ∈ [ 0 , 1 ] , ∑ c = 1 C f c ( x ; θ ) = 1. f_{c}(\boldsymbol{x};\theta)\in[0,1],\quad\sum_{c=1}^{\boldsymbol{C}}f_{c}(\boldsymbol{x};\theta)=1. fc(x;θ)∈[0,1],∑c=1Cfc(x;θ)=1.标签one-hot向量 y \boldsymbol{y} y可以看做样本标签的真实条件概率分布 p r ( y ∣ x ) \boldsymbol{p_r(y|x)} pr(y∣x),即第 c c c维是类别为 c c c的真实条件概率。
对于两个概率分布,一般可以用交叉熵来衡量它们的差异。标签的真实分布 y y y和模型预测分布 f ( x ; θ ) f(\boldsymbol{x};\theta) f(x;θ)之间的交叉熵为:
L ( y , f ( x ; θ ) ) = − y ⊺ log f ( x ; θ ) = − ∑ c = 1 C y c log f c ( x ; θ ) = − l o g f y ( x ; θ ) \begin{aligned}\mathcal{L}(\boldsymbol{y},f(\boldsymbol{x};\theta))& =-y^{\intercal}\log f(\boldsymbol{x};\theta) \\&=-\sum_{c=1}^Cy_c\log f_c(\boldsymbol{x};\theta) \\ &=-logf_y(\boldsymbol{x};\theta)\end{aligned} L(y,f(x;θ))=−y⊺logf(x;θ)=−c=1∑Cyclogfc(x;θ)=−logfy(x;θ)
其中 f ( x ; θ ) f(\boldsymbol{x};\theta) f(x;θ)可以看作真实类别 y y y的似然函数,那么交叉熵损失函数就是负对数似然函数。
Hinge损失函数
对于二分类问题,假设 y y y的取值为 { − 1 , + 1 } \{-1,+1\} {−1,+1}, f ( x ; θ ) ∈ R f(\boldsymbol{x};\theta)\in \mathbb{R} f(x;θ)∈R。则损失函数定义为:
L ( y , f ( x ; θ ) ) = max ( 0 , 1 − y f ( x ; θ ) ) ≜ [ 1 − y f ( x ; θ ) ] + \begin{aligned}\mathcal{L}(y,f(\boldsymbol{x};\theta))& =\max\left(0,1-yf(\boldsymbol{x};\theta)\right) \\&\triangleq[1-yf(\boldsymbol{x};\theta)]_+\end{aligned} L(y,f(x;θ))=max(0,1−yf(x;θ))≜[1−yf(x;θ)]+
Ⅱ.风险最小化准则
好的模型应当有一个比较小的期望错误,但是由于不知道真实的数据分布和映射函数,实际上无法计算期望风险。给定一个训练集,可以计算的是经验风险(Empirical Risk)/经验错误,也就是在训练集上的平均损失:
R D e m p ( θ ) = 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) \mathcal{R}_D^{emp}(\theta)=\frac1N\sum_{n=1}^N\mathcal{L}(y^{(n)},f(\boldsymbol{x}^{(n)};\theta)) RDemp(θ)=N1n=1∑NL(y(n),f(x(n);θ))
那么一个切实可行的学习准则就是找到一组参数 θ ∗ \theta^* θ∗是的经验风险最小,即经验风险最小化准则(ERM)。
过拟合
根据大数定理可知,当训练集大小趋向于无穷大时,经验风险就趋向于期望风险,然而通常情况下,我们无法获取无限的训练样本,并且训练样本往往是真实数据的一个很小的子集或者包含一定的噪声数据,不能很好地反映全部数据的真实分布。那么经验风险最小化原则很容易导致模型在训练集上错误率很低,但是在未知数据上错误率很高。这就是所谓的过拟合(Overftting)。
过拟合问题往往是由于训练数据少和噪声以及模型能力强等原因造成的。为了解决过拟合问题,一般在经验风险最小化的基础上再引入参数的正则化(Regularization)来限制模型能力,使其不要过度地最小化经验风险,这种准则就是结构风险最小化(Structure Risk Minimization, SRM)准则:
θ ∗ = arg min θ R D s t r u c t ( θ ) = arg min θ R D етр ( θ ) + 1 2 λ ∥ θ ∥ 2 = arg min θ 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) + 1 2 λ ∥ θ ∥ 2 \begin{aligned}\theta^*& =\arg\min_\theta\mathcal{R}_D^{st\boldsymbol{ruct}}(\theta) \\&=\arg\min_{\theta}\mathcal{R}_{\mathcal{D}}^{\text{етр}} ( \theta ) + \frac 1 2 \lambda \| \theta \| ^ 2 \\&=\arg\min_\theta\frac1N\sum_{n=1}^N\mathcal{L}(y^{(n)},f(\boldsymbol{x}^{(n)};\theta))+\frac12\lambda\|\theta\|^2\end{aligned} θ∗=argθminRDstruct(θ)=argθminRDетр(θ)+21λ∥θ∥2=argθminN1n=1∑NL(y(n),f(x(n);θ))+21λ∥θ∥2
其中 ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣是 ℓ 2 {\mathit{\ell}}_2 ℓ2范数的正则化项,用来减少参数空间,避免过拟合【也可以使用 ℓ 1 {\mathit{\ell}}_1 ℓ1范数使得参数有一定稀疏性】; λ \lambda λ用来控制正则化的强度。
正则化:给损失函数加上一些限制,通过这种规则去规范他们在接下来的循环迭代中不要自我膨胀,限制其较高次的参数大小不能过大。L2正则化对于绝对值较大的权重予以很重的惩罚,对于绝对值很小的权重予以非常非常小的惩罚,当权重绝对值趋近于0时,基本不惩罚。
一篇文章完全搞懂正则化(Regularization)-优快云博客
- 这块就先这样吧,之后学习机器学习的时候再细细总结一下。
(4)优化算法
确定训练集、假设空间和学习准则后,寻找期望的模型,是一个最优化问题。
参数与超参数
在机器学习中,优化又可以分为参数优化和超参数优化。模型
f
(
x
,
θ
)
f(\boldsymbol{x},\theta)
f(x,θ)中的
θ
\theta
θ称为模型的参数,可以通过优化算法进行学习。还有一类参数是用来定义模型结构或优化策略的,这类参数叫作超参数(Hyper-Parameter)【贝叶斯方法中控制模型参数分布的系数】。
常见的超参数包括:聚类算法中的类别个数、梯度下降法中的步长、正则化项的系数、神经网络的层数、支持向量机中的核函数等。超参数的选取一般都是组合优化问题,很难通过优化算法来自动学习,因此,超参数优化是机器学习的个经验性很强的技术,通常是按照人的经验设定,或者通过搜索的方法对一组超参数组合进行不断试错调整。
Ⅰ.梯度下降法
机器学习中最简单、常用的优化算法,即首先初始化参数 θ 0 \theta_0 θ0,然后通过迭代公式计算训练集 D \mathcal{D} D上风险函数的最小值:
θ t + 1 = θ t − α ∂ R D ( θ ) ∂ θ = θ t − α 1 N ∑ n = 1 N ∂ L ( y ( n ) , f ( x ( n ) ; θ ) ) ∂ θ \begin{aligned}\theta_{t+1}& =\theta_t-\alpha\frac{\partial R_{\mathcal{D}}(\theta)}{\partial\theta} \\&=\theta_t-\alpha\frac1N\sum_{n=1}^N\frac{\partial\mathcal{L}\left(y^{(n)},f(\boldsymbol{x}^{(n)};\theta)\right)}{\partial\theta}\end{aligned} θt+1=θt−α∂θ∂RD(θ)=θt−αN1n=1∑N∂θ∂L(y(n),f(x(n);θ))
其中 θ t \theta_t θt为第 t t t次迭代时的参数值, α \alpha α为搜索步长/学习率。
Ⅱ.提前停止
针对梯度下降防止过拟合的一种方法。除了训练集和测试集之外,有时也会使用一个验证集(Validation Set)来进行模型选择,测试模型在验证集上是否最。在每次送代时,把新得到的模型在验证集上进行测试,并计算错误率,如果在验证集上的错误率不再下降,就停止送代。这种策略叫提前停止(Early Stop)。如果没有验证集,可以在训练集上划分出一个小比例的子集作为验证集。
Ⅲ.随机梯度下降法
在Ⅰ梯度下降法中,目标函数是整个训练集上的风险函数,这种方式称为批量梯度下降法(Batch Gradient Descent, BGD)。在每次送代时需要计算每个样本上损失函数的梯度并求和,当训练集中的样本数量N很大时,空间复杂度比较高,每次送代的计算开销也很大。批量梯度下降法相当于是从真实数据分布中采集N个样本,并由它们计算出来的经验风险的梯度来近似期望风险的梯度。
为了减少每次送代的计算复杂度,我们也可以在每次送代时只采集一个样本,计算这个样本损失函数的梯度并更新参数,即随机梯度下降法(Stochastic Gradient Descent,SGD)。当经过足够次数的送代时,模型在验证集上的错误率不再下降,随机梯度下降也可以收敛到局部最优解。
Ⅳ.小批量梯度下降法
随机梯度下降法不能充分利用计算机的并行能力。小批量梯度下降法(Mini-Batch Gradient Descent)是批量梯度下降法和随机梯度下降法的折中,即每次迭代只选取一小部分训练样本来计算梯度并更新参数。具有收敛快、计算开销小的优点,逐渐应用于大规模的机器学习的主要优化算法。