文章目录
机器学习概述
机器学习是对能通过经验自动改进的计算机算法的研究.
------汤姆·米切尔(TomMitchell)[Mitchell,1997]
通俗地讲,机器学习 (MachineLearning,ML)就是让计算机从数据中进行自动学习,得到某种知识(或规律).作为一门学科,机器学习通常指一类问题以及解决这类问题的方法,即如何从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对未知或无法观测的数据进行预测.
在早期领域,机器学习也叫做模式识别(PatternRecognition, PR)
但模式识别更偏向于具体的应用任务,比如光学字符识别、语音识别、人脸 识别等.这些任务的特点是,对于我们人类而言,这些任务很容易完成,但我们不 知道自己是如何做到的,因此也很难人工设计一个计算机程序来完成这些任务. 一个可行的方法是设计一个算法可以让计算机自己从有标注的样本上学习其中 的规律,并用来完成各种识别任务
基本概念
java
样本
特征
标签
模型
学习算法
举个例子:
假如我们要在菜市场购买水果,首先,我们从市场上随机选取一些芒果,列出每个芒果的特征 (Feature) 特征也可以称为属性 , 包括颜色、大小、形状、产地、品牌,以及我们需要预测的标签(Label).标签可以是连续值(比如关于芒果的甜度、水分以及成熟度的综合打分),也可以是离散 值(比如"好""坏"两类标签).这里,每个芒果的标签可以通过直接品尝来获得, 也可以通过请一些经验丰富的专家来进行标记.
我们可以将一个标记好特征以及标签的芒果看作一个样本 (Sample),也经常称为示例(Instance).
一组样本构成的集合称为数据集(DataSet) 。一般将数据集分为两部分:训练集 和测试集。
- 训练集(Training Set) :其中的样本用来训练模型,也叫训练样本(Training Sample)。
- 测试集(Test Set) :其中的样本用来检验模型效果好坏,也叫测试样本(Test Sample)。
通常用一个 D 维向量:
x = [ x 1 , x 2 , ⋯ , x D ] T \boldsymbol{x} = [x_1,\,x_2,\,\cdots,\,x_D]^T x=[x1,x2,⋯,xD]T
表示一个芒果所有特征构成的向量,称为特征向量(Feature Vector) ,其中每一维代表一个特征。芒果的类别 / 结果用标量 y 表示,称为标签。
假设训练集 D \mathcal{D} D 由 N N N 个样本组成,其中每个样本都是独立同分布的(Identically and Independently Distributed, IID),即独立地从相同的数据分布中抽取的,记为:
D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , ... , ( x ( N ) , y ( N ) ) } . (2.1) \mathcal{D} = \left\{ (\boldsymbol{x}^{(1)}, y^{(1)}),\ (\boldsymbol{x}^{(2)}, y^{(2)}),\ \dots,\ (\boldsymbol{x}^{(N)}, y^{(N)}) \right\}. \tag{2.1} D={(x(1),y(1)), (x(2),y(2)), ..., (x(N),y(N))}.(2.1)
给定训练集 D \mathcal{D} D,我们希望让计算机从一个函数集合 F = { f 1 ( x ) , f 2 ( x ) , ... } \mathcal{F} = \{f_1(\boldsymbol{x}), f_2(\boldsymbol{x}), \dots\} F={f1(x),f2(x),...} 中自动寻找一个"最优"的函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x) 来近似每个样本的特征向量 x \boldsymbol{x} x 和标签 y y y 之间的真实映射关系。 对于一个样本 x \boldsymbol{x} x,我们可以通过函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x) 来预测其标签的值:
$$ \hat{y} = f^*(\boldsymbol{x}), \tag{2.2} $$
或标签的条件概率:
$$ \hat{p}(y|\boldsymbol{x}) = f_y^*(\boldsymbol{x}). \tag{2.3} $$
如何寻找这个"最优"的函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x) 是机器学习的关键,一般需要通过学习算法(Learning Algorithm) A \mathcal{A} A 来完成。这个寻找过程通常称为**学习(Learning)或训练(Training)**过程。 在有些文献中,学习算法也叫作学习器(Learner)。
这样,下次从市场上买芒果(测试样本)时,可以根据芒果的特征,使用学习到的函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x) 来预测芒果的好坏。为了评价的公正性,我们还是独立同分布地抽取一组芒果作为测试集 D ′ \mathcal{D}' D′,并在测试集中所有芒果上进行测试,计算预测结果的准确率。 > 第2.7节中会介绍更多(评价方法)。
Acc ( f ∗ ( x ) ) = 1 ∣ D ′ ∣ ∑ ( x , y ) ∈ D ′ I ( f ∗ ( x ) = y ) , (2.4) \text{Acc}(f^*(\boldsymbol{x})) = \frac{1}{|\mathcal{D}'|} \sum_{(\boldsymbol{x}, y) \in \mathcal{D}'} I(f^*(\boldsymbol{x}) = y), \tag{2.4} Acc(f∗(x))=∣D′∣1(x,y)∈D′∑I(f∗(x)=y),(2.4)
其中 I ( ⋅ ) I(\cdot) I(⋅) 为指示函数, ∣ D ′ ∣ |\mathcal{D}'| ∣D′∣ 为测试集大小。
下图给出了机器学习的基本流程。对一个预测任务,输入特征向量为 x \boldsymbol{x} x,输出标签为 y y y,我们选择一个函数集合 F \mathcal{F} F,通过学习算法 A \mathcal{A} A 和一组训练样本 D \mathcal{D} D,从 F \mathcal{F} F 中学习到函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x)。这样对新的输入 x \boldsymbol{x} x,就可以用函数 f ∗ ( x ) f^*(\boldsymbol{x}) f∗(x) 进行预测。

三个基本要素
模型
下面是图片内容的 Markdown + LaTeX 版本: --- 对于一个机器学习任务,首先要确定其输入空间 X \mathcal{X} X 和输出空间 Y \mathcal{Y} Y。不同机器学习任务的主要区别在于输出空间不同。在二分类问题中 Y = { + 1 , − 1 } \mathcal{Y} = \{+1, -1\} Y={+1,−1},在 C C C 分类问题中 Y = { 1 , 2 , ... , C } \mathcal{Y} = \{1, 2, \dots, C\} Y={1,2,...,C},而在回归问题中 Y = R \mathcal{Y} = \mathbb{R} Y=R。
输入空间 X \mathcal{X} X 和输出空间 Y \mathcal{Y} Y 构成了一个样本空间。对于样本空间中的样本 ( x , y ) ∈ X × Y (\boldsymbol{x}, y) \in \mathcal{X} \times \mathcal{Y} (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) 来描述。机器学习的目标是找到一个模型来近似真实映射函数 g ( x ) g(\boldsymbol{x}) g(x) 或真实条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x)。
由于我们不知道真实的映射函数 g ( x ) g(\boldsymbol{x}) g(x) 或条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x) 的具体形式,因而只能根据经验来假设一个函数集合 F \mathcal{F} F,称为假设空间(Hypothesis Space) ,然后通过观测其在训练集 D \mathcal{D} D 上的特性,从中选择一个理想的假设(Hypothesis) f ∗ ∈ F f^* \in \mathcal{F} f∗∈F。
假设空间 F \mathcal{F} F 通常为一个参数化的函数族:
F = { f ( x ; θ ) ∣ θ ∈ R D } , (2.5) \mathcal{F} = \{ f(\boldsymbol{x};\boldsymbol{\theta}) \mid \boldsymbol{\theta} \in \mathbb{R}^D \}, \tag{2.5} F={f(x;θ)∣θ∈RD},(2.5)
其中 f ( x ; θ ) f(\boldsymbol{x};\boldsymbol{\theta}) f(x;θ) 是参数为 θ \boldsymbol{\theta} θ 的函数,也称为模型(Model) , D D D 为参数的数量。 常见的假设空间可以分为线性和非线性两种,对应的模型 f f f 也分别称为线性模型和非线性模型。
线性模型
线性模型的假设空间为一个参数化的线性函数族,即
f ( x ; θ ) = w ⊤ x + b , (2.6) f(\boldsymbol{x};\boldsymbol{\theta}) = \boldsymbol{w}^\top \boldsymbol{x} + b, \tag{2.6} f(x;θ)=w⊤x+b,(2.6)
其中参数 θ \boldsymbol{\theta} θ 包含了权重向量 w \boldsymbol{w} w 和偏置 b b b。
非线性模型
广义的非线性模型可以写为多个非线性基函数 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x) 的线性组合: f ( x ; θ ) = w ⊤ ϕ ( x ) + b , (2.7) f(\boldsymbol{x};\boldsymbol{\theta}) = \boldsymbol{w}^\top \phi(\boldsymbol{x}) + b, \tag{2.7} f(x;θ)=w⊤ϕ(x)+b,(2.7)
其中 ϕ ( x ) = [ ϕ 1 ( x ) , ϕ 2 ( x ) , ... , ϕ K ( x ) ] ⊤ \phi(\boldsymbol{x}) = [\phi_1(\boldsymbol{x}), \phi_2(\boldsymbol{x}), \dots, \phi_K(\boldsymbol{x})]^\top ϕ(x)=[ϕ1(x),ϕ2(x),...,ϕK(x)]⊤ 为 K K K 个非线性基函数组成的向量,参数 θ \boldsymbol{\theta} θ 包含了权重向量 w \boldsymbol{w} w 和偏置 b b b。
如果 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x) 本身为可学习的基函数,比如 ϕ k ( x ) = h ( w k ⊤ ϕ ′ ( x ) + b k ) , ∀ 1 ≤ k ≤ K , (2.8) \phi_k(\boldsymbol{x}) = h(\boldsymbol{w}_k^\top \phi'(\boldsymbol{x}) + b_k),\ \forall 1 \le k \le K, \tag{2.8} ϕk(x)=h(wk⊤ϕ′(x)+bk), ∀1≤k≤K,(2.8)
其中 h ( ⋅ ) h(\cdot) h(⋅) 为非线性函数, ϕ ′ ( x ) \phi'(\boldsymbol{x}) ϕ′(x) 为另一组基函数, w k \boldsymbol{w}_k wk 和 b k b_k bk 为可学习的参数,则 f ( x ; θ ) f(\boldsymbol{x};\boldsymbol{\theta}) f(x;θ) 就等价于神经网络模型。
学习准则
令训练集 D = { ( x ( n ) , y ( n ) ) } n = 1 N \mathcal{D} = \{(\boldsymbol{x}^{(n)}, y^{(n)})\}_{n=1}^N D={(x(n),y(n))}n=1N 是由 N N N 个**独立同分布的(Independent and Identically Distributed, IID)**样本组成,即每个样本 ( x , y ) ∈ X × Y (\boldsymbol{x}, y) \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) 独立地随机产生的。这里要求样本分布 p r ( x , y ) p_r(\boldsymbol{x}, y) pr(x,y) 必须是固定的(虽然可以是未知的),不会随时间而变化。如果 p r ( x , y ) p_r(\boldsymbol{x}, y) pr(x,y) 本身可变的话,就无法通过这些数据进行学习。
一个好的模型 f ( x , θ ∗ ) f(\boldsymbol{x}, \boldsymbol{\theta}^*) f(x,θ∗) 应该在所有 ( x , y ) (\boldsymbol{x}, y) (x,y) 的可能取值上都与真实映射函数 y = g ( x ) y = g(\boldsymbol{x}) y=g(x) 一致,即
∣ f ( x , θ ∗ ) − y ∣ < ϵ , ∀ ( x , y ) ∈ X × Y , (2.9) |f(\boldsymbol{x}, \boldsymbol{\theta}^*) - y| < \epsilon, \quad \forall (\boldsymbol{x}, y) \in \mathcal{X} \times \mathcal{Y}, \tag{2.9} ∣f(x,θ∗)−y∣<ϵ,∀(x,y)∈X×Y,(2.9)
或与真实条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x) 一致,即
∣ f y ( x , θ ∗ ) − p r ( y ∣ x ) ∣ < ϵ , ∀ ( x , y ) ∈ X × Y , (2.10) |f_y(\boldsymbol{x}, \boldsymbol{\theta}^*) - p_r(y|\boldsymbol{x})| < \epsilon, \quad \forall (\boldsymbol{x}, y) \in \mathcal{X} \times \mathcal{Y}, \tag{2.10} ∣fy(x,θ∗)−pr(y∣x)∣<ϵ,∀(x,y)∈X×Y,(2.10)
其中 ϵ \epsilon ϵ 是一个很小的正数, f y ( x , θ ∗ ) f_y(\boldsymbol{x}, \boldsymbol{\theta}^*) fy(x,θ∗) 为模型预测的条件概率分布中 y y y 对应的概率。
模型 f ( x ; θ ) f(\boldsymbol{x}; \boldsymbol{\theta}) f(x;θ) 的好坏可以通过期望风险(Expected Risk) R ( θ ) \mathcal{R}(\boldsymbol{\theta}) R(θ) 来衡量,其定义为
R ( θ ) = E ( x , y ) ∼ p r ( x , y ) [ L ( y , f ( x ; θ ) ) ] , (2.11) \mathcal{R}(\boldsymbol{\theta}) = \mathbb{E}_{(\boldsymbol{x}, y) \sim p_r(\boldsymbol{x}, y)} \left[ \mathcal{L}(y, f(\boldsymbol{x}; \boldsymbol{\theta})) \right], \tag{2.11} R(θ)=E(x,y)∼pr(x,y)[L(y,f(x;θ))],(2.11)
其中 p r ( x , y ) p_r(\boldsymbol{x}, y) pr(x,y) 为真实的数据分布, L ( y , f ( x ; θ ) ) \mathcal{L}(y, f(\boldsymbol{x}; \boldsymbol{\theta})) L(y,f(x;θ)) 为损失函数,用来量化两个变量之间的差异。
损失函数
损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异. 下面介绍几种常用的损失函数.
0-1 损失函数
最直观的损失函数是模型在训练集上的错误率,即0-1损失函数(0-1 Loss Function):
L ( y , f ( x ; θ ) ) = { 0 if y = f ( x ; θ ) 1 if y ≠ f ( x ; θ ) (2.12) \mathcal{L}(y, f(\boldsymbol{x};\boldsymbol{\theta})) = \begin{cases} 0 & \text{if } y = f(\boldsymbol{x};\boldsymbol{\theta}) \\ 1 & \text{if } y \neq f(\boldsymbol{x};\boldsymbol{\theta}) \end{cases} \tag{2.12} L(y,f(x;θ))={01if y=f(x;θ)if y=f(x;θ)(2.12) = I ( y ≠ f ( x ; θ ) ) , (2.13) = I(y \neq f(\boldsymbol{x};\boldsymbol{\theta})), \tag{2.13} =I(y=f(x;θ)),(2.13)
其中 I ( ⋅ ) I(\cdot) I(⋅) 是指示函数。 虽然0-1损失函数能够客观地评价模型的好坏,但其缺点是数学性质不是很好:不连续且导数为0,难以优化。因此经常用连续可微的损失函数替代。
**平方损失函数(Quadratic Loss Function)**经常用在预测标签 y y y 为实数值的任务中,定义为:
L ( y , f ( x ; θ ) ) = 1 2 ( y − f ( x ; θ ) ) 2 . (2.14) \mathcal{L}(y, f(\boldsymbol{x};\boldsymbol{\theta})) = \frac{1}{2}\left(y - f(\boldsymbol{x};\boldsymbol{\theta})\right)^2. \tag{2.14} L(y,f(x;θ))=21(y−f(x;θ))2.(2.14)
平方损失函数一般不适用于分类问题。
交叉熵损失函数(Cross-Entropy Loss Function)
一般用于分类问题。假设样本的标签 y ∈ { 1 , ... , C } y \in \{1, \dots, C\} y∈{1,...,C} 为离散的类别,模型 f ( x ; θ ) ∈ [ 0 , 1 ] C f(\boldsymbol{x};\boldsymbol{\theta}) \in [0,1]^C f(x;θ)∈[0,1]C 的输出为类别标签的条件概率分布,即
p ( y = c ∣ x ; θ ) = f c ( x ; θ ) , (2.15) p(y = c|\boldsymbol{x};\boldsymbol{\theta}) = f_c(\boldsymbol{x};\boldsymbol{\theta}), \tag{2.15} p(y=c∣x;θ)=fc(x;θ),(2.15)
并满足
f c ( x ; θ ) ∈ [ 0 , 1 ] , ∑ c = 1 C f c ( x ; θ ) = 1. (2.16) f_c(\boldsymbol{x};\boldsymbol{\theta}) \in [0,1], \quad \sum_{c=1}^C f_c(\boldsymbol{x};\boldsymbol{\theta}) = 1. \tag{2.16} fc(x;θ)∈[0,1],c=1∑Cfc(x;θ)=1.(2.16)
我们可以用一个 C C C 维的 one-hot 向量 y \boldsymbol{y} y 来表示样本标签。假设样本的标签为 k k k,那么标签向量 y \boldsymbol{y} y 只有第 k k k 维的值为 1,其余元素的值都为 0。标签向量 y \boldsymbol{y} y 可以看作样本标签的真实条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol{x}) pr(y∣x),即第 c c c 维(记为 y c , 1 ≤ c ≤ C y_c, 1 \le c \le C yc,1≤c≤C)是类别为 c c c 的真实条件概率。假设样本的类别为 k k k,那么它属于第 k k k 类的概率为 1,属于其他类的概率为 0。
对于两个概率分布,一般可以用交叉熵来衡量它们的差异。标签的真实分布 y \boldsymbol{y} y 和模型预测分布 f ( x ; θ ) f(\boldsymbol{x};\boldsymbol{\theta}) f(x;θ) 之间的交叉熵为
L ( y , f ( x ; θ ) ) = − y ⊤ log f ( x ; θ ) = − ∑ c = 1 C y c log f c ( x ; θ ) . \begin{align} \mathcal{L}(\boldsymbol{y}, f(\boldsymbol{x};\boldsymbol{\theta})) &= -\boldsymbol{y}^\top \log f(\boldsymbol{x};\boldsymbol{\theta}) \\ &= -\sum_{c=1}^C y_c \log f_c(\boldsymbol{x};\boldsymbol{\theta}). \end{align} L(y,f(x;θ))=−y⊤logf(x;θ)=−c=1∑Cyclogfc(x;θ).
比如对于三分类问题,一个样本的标签向量为 y = [ 0 , 0 , 1 ] ⊤ \boldsymbol{y} = [0,0,1]^\top y=[0,0,1]⊤,模型预测的标签分布为 f ( x ; θ ) = [ 0.3 , 0.3 , 0.4 ] ⊤ f(\boldsymbol{x};\boldsymbol{\theta}) = [0.3,0.3,0.4]^\top f(x;θ)=[0.3,0.3,0.4]⊤,则它们的交叉熵为 − ( 0 × log ( 0.3 ) + 0 × log ( 0.3 ) + 1 × log ( 0.4 ) ) = − log ( 0.4 ) -(0 \times \log(0.3) + 0 \times \log(0.3) + 1 \times \log(0.4)) = -\log(0.4) −(0×log(0.3)+0×log(0.3)+1×log(0.4))=−log(0.4)。
因为 y \boldsymbol{y} y 为 one-hot 向量,公式也可以写为
L ( y , f ( x ; θ ) ) = − log f y ( x ; θ ) , (2.19) \mathcal{L}(\boldsymbol{y}, f(\boldsymbol{x};\boldsymbol{\theta})) = -\log f_y(\boldsymbol{x};\boldsymbol{\theta}), \tag{2.19} L(y,f(x;θ))=−logfy(x;θ),(2.19)
其中 f y ( x ; θ ) f_y(\boldsymbol{x};\boldsymbol{\theta}) fy(x;θ) 可以看作真实类别 y y y 的似然函数。因此,交叉熵损失函数也就是负对数似然函数(Negative Log-Likelihood)。
Hinge损失函数
对于二分类问题,假设 y y y 的取值为 { − 1 , + 1 } \{-1, +1\} {−1,+1}, f ( x ; θ ) ∈ R f(\boldsymbol{x};\boldsymbol{\theta}) \in \mathbb{R} f(x;θ)∈R。 Hinge损失函数(Hinge Loss Function)为: L ( y , f ( x ; θ ) ) = max ( 0 , 1 − y f ( x ; θ ) ) ≜ [ 1 − y f ( x ; θ ) ] + , \begin{align} \mathcal{L}(y, f(\boldsymbol{x};\boldsymbol{\theta})) &= \max\left(0, 1 - y f(\boldsymbol{x};\boldsymbol{\theta})\right) \tag{2.20} \\ &\triangleq \left[1 - y f(\boldsymbol{x};\boldsymbol{\theta})\right]+, \tag{2.21} \end{align} L(y,f(x;θ))=max(0,1−yf(x;θ))≜[1−yf(x;θ)]+,(2.20)(2.21) 其中 [ x ] + = max ( 0 , x ) [x]+ = \max(0, x) [x]+=max(0,x)。
当 y f ( x ; θ ) ≥ 1 y f(\boldsymbol{x};\boldsymbol{\theta}) \ge 1 yf(x;θ)≥1 时,损失为 0,表示模型预测足够"自信且正确";
当 y f ( x ; θ ) < 1 y f(\boldsymbol{x};\boldsymbol{\theta}) < 1 yf(x;θ)<1 时,损失随置信度线性增加,鼓励模型增大分类间隔; - 它是支持向量机(SVM)的标准损失函数。
风险最小化准则
一个好的模型 f ( x ; θ ) f(\boldsymbol{x};\boldsymbol{\theta}) f(x;θ) 应当有一个比较小的期望错误,但由于不知道真实的数据分布和映射函数,实际上无法计算其期望风险 R ( θ ) \mathcal{R}(\boldsymbol{\theta}) R(θ)。给定一个训练集 D = { ( x ( n ) , y ( n ) ) } n = 1 N \mathcal{D} = \{(\boldsymbol{x}^{(n)}, y^{(n)})\}_{n=1}^N D={(x(n),y(n))}n=1N,我们可以计算的是经验风险(Empirical Risk),即在训练集上的平均损失:
R D e m p ( θ ) = 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) . (2.22) \mathcal{R}{\mathcal{D}}^{emp}(\boldsymbol{\theta}) = \frac{1}{N} \sum{n=1}^N \mathcal{L}(y^{(n)}, f(\boldsymbol{x}^{(n)};\boldsymbol{\theta})). \tag{2.22} RDemp(θ)=N1n=1∑NL(y(n),f(x(n);θ)).(2.22)
因此,一个切实可行的学习准则是找到一组参数 θ ∗ \boldsymbol{\theta}^* θ∗ 使得经验风险最小,即
θ ∗ = arg θ min R D e m p ( θ ) , (2.23) \boldsymbol{\theta}^* = \arg_{\boldsymbol{\theta}}\min \mathcal{R}_{\mathcal{D}}^{emp}(\boldsymbol{\theta}), \tag{2.23} θ∗=argθminRDemp(θ),(2.23)
这就是**经验风险最小化(Empirical Risk Minimization, ERM)**准则。
过拟合 根据大数定理可知,当训练集大小 ∣ D ∣ |\mathcal{D}| ∣D∣ 趋向于无穷大时,经验风险就趋向于期望风险。然而通常情况下,我们无法获取无限的训练样本,并且训练样本往往是真实数据的一个很小的子集或者包含一定的噪声数据,不能很好地反映全部数据的真实分布。经验风险最小化原则很容易导致模型在训练集上错误率很低,但是在未知数据上错误率很高。这就是所谓的过拟合(Overfitting)。
定义2.1--过拟合: 给定一个假设空间ℱ,一个假设𝑓属于ℱ,如果存在 其他的假设𝑓′也属于ℱ,使得在训练集上𝑓的损失比𝑓′的损失小,但在整 个样本空间上𝑓′的损失比𝑓的损失小,那么就说假设𝑓过度拟合训练数据 [Mitchell, 1997].
过拟合问题往往是由于训练数据少和噪声以及模型能力强等原因造成的。为了解决过拟合问题,一般在经验风险最小化的基础上再引入参数的**正则化(Regularization)来限制模型能力,使其不要过度地最小化经验风险。这种准则就是 结构风险最小化(Structure Risk Minimization, SRM)**准则: θ ∗ = arg min θ R D s t r u c t ( θ ) = arg min θ R D e m p ( θ ) + 1 2 λ ∥ θ ∥ 2 = arg min θ 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) + 1 2 λ ∥ θ ∥ 2 , \begin{align} \boldsymbol{\theta}^* &= \arg\min_{\boldsymbol{\theta}} \mathcal{R}{\mathcal{D}}^{struct}(\boldsymbol{\theta}) \tag{2.24} \\ &= \arg\min{\boldsymbol{\theta}} \mathcal{R}{\mathcal{D}}^{emp}(\boldsymbol{\theta}) + \frac{1}{2}\lambda\|\boldsymbol{\theta}\|^2 \tag{2.25} \\ &= \arg\min{\boldsymbol{\theta}} \frac{1}{N} \sum_{n=1}^N \mathcal{L}(y^{(n)}, f(\boldsymbol{x}^{(n)};\boldsymbol{\theta})) + \frac{1}{2}\lambda\|\boldsymbol{\theta}\|^2, \tag{2.26} \end{align} θ∗=argθminRDstruct(θ)=argθminRDemp(θ)+21λ∥θ∥2=argθminN1n=1∑NL(y(n),f(x(n);θ))+21λ∥θ∥2,(2.24)(2.25)(2.26) 其中 ∥ θ ∥ \|\boldsymbol{\theta}\| ∥θ∥ 是 ℓ 2 \ell_2 ℓ2 范数的正则化项,用来减少参数空间,避免过拟合; λ \lambda λ 用来控制正则化的强度。
正则化项也可以使用其他函数,比如 ℓ 1 \ell_1 ℓ1 范数。 ℓ 1 \ell_1 ℓ1 范数的引入通常会使得参数有一定稀疏性,因此在很多算法中也经常使用。从贝叶斯学习的角度来讲,正则化是引入了参数的先验分布,使其不完全依赖训练数据。
和过拟合相反的一个概念是欠拟合(Underfitting),即模型不能很好地拟合训练数据,在训练集上的错误率比较高。欠拟合一般是由于模型能力不足造成的。图2.3给出了欠拟合和过拟合的示例。

优化算法
在确定了训练集𝒟、假设空间ℱ以及学习准则后,如何找到最优的模型 f(𝒙,𝜃)就成了一个最优化(Optimization)问题.机器学习的训练过程其实就 是最优化问题的求解过程.
参数与超参数 在机器学习中,优化又可以分为参数优化和超参数优化.模型 f(𝒙;𝜃)中的𝜃称为模型的参数,可以通过优化算法进行学习.除了可学习的参数 𝜃之外,还有一类参数是用来定义模型结构或优化策略的,这类参数叫作超参数 (Hyper-Parameter).
常见的超参数包括:聚类算法中的类别个数、梯度下降法中的步长、正则化 项的系数、神经网络的层数、支持向量机中的核函数等.超参数的选取一般都是 组合优化问题,很难通过优化算法来自动学习.因此,超参数优化是机器学习的 一个经验性很强的技术,通常是按照人的经验设定,或者通过搜索的方法对一组 超参数组合进行不断试错调整.
梯度下降法(寻找最优参数)
为了充分利用凸优化中一些高效、成熟的优化方法, 比如共轭梯度、拟牛顿法等,很多机器学习方法都倾向于选择合适的模型和损失函数,以构造一个凸函 数作为优化目标.但也有很多模型(比如神经网络)的优化目标是非凸的,只能退而求其次找到局部最优解.
在机器学习中,最简单、常用的优化算法就是梯度下降法,即首先初始化参 数𝜃_0,然后按下面的迭代公式来计算训练集𝒟上风险函数的最小值:
θ t + 1 = θ t − α ∂ R D ( θ ) ∂ θ = θ t − α 1 N ∑ n = 1 N ∂ L ( y ( n ) , f ( x ( n ) ; θ ) ) ∂ θ , \begin{align*} \theta_{t+1} &= \theta_t - \alpha \frac{\partial \mathcal{R}{\mathcal{D}}(\theta)}{\partial \theta} \\ &= \theta_t - \alpha \frac{1}{N} \sum{n=1}^N \frac{\partial \mathcal{L}(y^{(n)}, f(\boldsymbol{x}^{(n)};\theta))}{\partial \theta}, \end{align*} θt+1=θt−α∂θ∂RD(θ)=θt−αN1n=1∑N∂θ∂L(y(n),f(x(n);θ)),
其中𝜃𝑡为第𝑡次迭代时的参数值,𝛼为搜索步长.在机器学习中,𝛼一般称为学习 率(Learning Rate).
提前停止
针对梯度下降的优化算法,除了加正则化项之外,还可以通过提前停止来防 止过拟合.
在梯度下降训练的过程中,由于过拟合的原因,在训练样本上收敛的参数, 并不一定在测试集上最优.因此,除了训练集和测试集之外,有时也会使用一个验证集(Validation Set)来进行模型选择,测试模型在验证集上是否最优. 验证集也叫作开发集 在每次迭代时,把新得到的模型𝑓(𝒙;𝜃)在验证集上进行测试,并计算错误率. 如果在验证集上的错误率不再下降,就停止迭代.这种策略叫提前停止(Early Stop).如果没有验证集,可以在训练集上划分出一个小比例的子集作为验证集. 下图给出了提前停止的示例.

随机梯度下降法
在梯度下降法公式的梯度下降法中,目标函数是整个训练集上的风险函数,这种 方式称为批量梯度下降法(BatchGradientDescent,BGD).批量梯度下降法在 每次迭代时需要计算每个样本上损失函数的梯度并求和.当训练集中的样本数 量𝑁很大时,空间复杂度比较高,每次迭代的计算开销也很大.
在机器学习中,我们假设每个样本都是独立同分布地从真实数据分布中随机抽取出来的 ,真正的优化目标是期望风险最小.批量梯度下降法相当于是从真实数据分布中采集𝑁个样本,并由它们计算出来的经验风险的梯度来近似期 望风险的梯度.为了减少每次迭代的计算复杂度,我们也可以在每次迭代时只 采集一个样本,计算这个样本损失函数的梯度并更新参数,即随机梯度下降法 (Stochastic Gradient Descent,SGD). 当经过足够次数的迭代时,随机梯度下降也可以收敛到局部最优解

批量梯度下降和随机梯度下降之间的区别在于,每次迭代的优化目标是对 所有样本的平均损失函数还是对单个样本的损失函数.由于随机梯度下降实现 简单,收敛速度也非常快,因此使用非常广泛.随机梯度下降相当于在批量梯度 下降的梯度上引入了随机噪声.在非凸优化问题中,随机梯度下降更容易逃离局 部最优点
小批量梯度下降法
随机梯度下降法的一个缺点是无法充分利用计算机的并行计算能力.小批 量梯度下降法(Mini-Batch Gradient Descent)是批量梯度下降和随机梯度下 降的折中.每次迭代时,我们随机选取一小部分训练样本来计算梯度并更新参 数,这样既可以兼顾随机梯度下降法的优点,也可以提高训练效率.
第𝑡次迭代时,随机选取一个包含𝐾个样本的子集𝒮𝑡,计算这个子集上每个 样本损失函数的梯度并进行平均,然后再进行参数更新:
θ t + 1 ← θ t − α 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ . \theta_{t+1} \gets \theta_t - \alpha \frac{1}{K} \sum_{(\boldsymbol{x}, y) \in \mathcal{S}_t} \frac{\partial \mathcal{L}(y, f(\boldsymbol{x}; \theta))}{\partial \theta}. θt+1←θt−αK1(x,y)∈St∑∂θ∂L(y,f(x;θ)).
在实际应用中,小批量随机梯度下降法有收敛快、计算开销小的优点,因此 逐渐成为大规模的机器学习中的主要优化算法