序言
深度学习是机器学习的一个特定分支。要想学好深度学习,必须对机器学习的基本原理有深刻的理解。
首先,我们将介绍学习算法的定义,并介绍一个简单的示例:线性回归算法。接下来,我们会探讨拟合训练数据和泛化到新数据之间有哪些不同的挑战。大部分机器学习算法都有超参数(必须在学习算法外设定);我们将讨论如何使用额外的数据设置超参数。机器学习本质上属于应用统计学,更多关注于如何用计算机统计地估计复杂函数,不太关注为这些函数提供置信区间;因此我们会探讨两种统计学的主要方法:频率估计和贝叶斯推断。大部分机器学习算法可以分成监督学习和无监督学习两类;我们将探讨不同的分类,并为每类提供一些简单的机器学习算法作为示例。大部分深度学习算法都基于随机梯度下降求解。我们将介绍如何组合不同的算法部分,例如优化算法、 代价函数、模型和数据集,来建立一个机器学习算法。最后,我们会介绍一些限制传统机器学习泛化能力的因素。这些挑战促进了解决这些问题的深度学习算法的发展。
学习算法
-
机器学习算法是一种可以从数据中学习的算法。
-
所谓的“学习”是什么意思呢?
- 一个简洁的定义:“对于某类任务 T T T和性能度量 P P P,一个计算机程序被认为可以从经验 E E E中学习是指,通过经验 E E E改进后,它在任务 T T T上由性能度量 P P P衡量的性能有所提升。”
-
任务 T T T
- 机器学习可以让我们解决一些人为设计和实现固定程序很难解决的问题。
- 定义:
- 通常机器学习任务定义为机器学习系统该如何处理样本(example)。
- 样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征(feature)的集合。
- 我们通常会将样本表示成一个向量 x ∈ R n \boldsymbol{x} \in \mathbb{R}^n x∈Rn,其中向量的每一个元素 x i x_i xi是一个特征。例如:一张图片的特征通常是指这张图片的像素值。
- 机器学习可以解决很多类型的任务。一些非常常见的机器学习任务,如:
- 分类(classification):
- 解决问题:
- 这类任务中,计算程序需要指定某些输入属于 k k k类中的哪一类。
- 解决方法:
- 为了完成这个任务,学习算法通常会返回一个函数 f : R n → { 1 , … , k } f:\mathbb{R}^n \to \{1,\dots,k\} f:Rn→{1,…,k}。
- 当 y = f ( x ) y=f(\boldsymbol{x}) y=f(x)时,模型为向量 x \boldsymbol{x} x所代表的输入制定数字码 y y y所代表的类别。
- 常见示例是对象识别
- 例如:输入是图片(通常用一组像素亮度值表示),输出是表示图片物体的数字码。
- 目前最好的对象识别工作正是基于深度学习。
- 对象识别同时也是计算机识别人脸的基本技术,可用于标记照片集中的人脸,有助于计算机更自然地和用户交互。
- 解决问题:
- 输入缺失分类(classification with missing inputs):
- 解决问题:
- 当输入向量的每个度量不被保证的时候,分类问题将会变得更有挑战性。
- 解决方法:
- 为了解决分类任务,学习算法只需要定义一个从输入向量映射到输出类别的函数。
- 当一些输入可能丢失时,学习算法必须学习一组函数,而不是单个分类函数。每个函数对应着分类具有不同缺失输入子集的 x \boldsymbol{x} x。
- 有效地定义这样一个大集合函数的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。
- 使用 n n n个输入变量,我们现在可以获得每个可能的缺失输入集合所需的所有 2 n 2^n 2n个不同的分类函数,但是计算机程序仅需要学习一个描述联合概率分布的函数。
- 解决问题:
- 回归(regression):
- 解决问题:
- 这类任务中,计算机程序会对给定输入预测数值。
- 解决方法:
- 为了解决个问题,学习算法会输出函数 f : R n → R f:\mathbb{R}^n \to \mathbb{R} f:Rn→R。
- 常见示例是预测投保人的索赔金额(用于设置保险费)或者预测证券未来的价格。这类预测也用在算法交易中。
- 解决问题:
- 转录(transcription):
- 解决问题:
- 这类任务中, 机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。
- 例如,
- 光学字符识别要求计算机程序根据文本图片返回文字序列( ASCII 码或者 Unicode 码)。
- 谷歌街景以这种方式使用深度学习处理街道编号。
- 语音识别,计算机程序输入一段音频波形,输出一序列音频记录中所说的字符或单词ID的编码。深度学习是现代语音识别系统的重要组成部分,广泛用于各大公司,包括微软,IBM和谷歌。
- 解决问题:
- 机器翻译(machine translation):
- 在机器翻译任务重,输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。这通常适用于自然语言。
- 结构化输出(structured output):
- 结构化输出任务的输出是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。这是一个很大的范畴,包括上面转录任务和翻译任务在内的很多其他任务。
- 例如,
- 语法分析——映射自然语言句子到语法结构树,并标记树的节点为动词,名词,副词等等。
- 图像的像素级分割,将每一个像素分配到特定类别。
- 异常检测(anomaly detection):
- 这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。
- 例如,信用卡欺诈检测。
- 合成和采样(synthesis and sampling):
- 这类任务中,机器学习程序生成一些和训练数据相似的新样本。
- 缺失值填补(imputation of missing value):
- 这类任务中,机器学习算法给定一个新样本 x ∈ R n \boldsymbol{x} \in \mathbb{R}^n x∈Rn, x \boldsymbol{x} x中某些元素 x i x_i xi缺失。算法必须填补这些缺失值。
- 去噪(denoising):
- 解决问题:
- 这类任务,机器学习算法的输入是,由未知破坏过程从干净样本 x ∈ R n \boldsymbol{x} \in \mathbb{R}^n x∈Rn得到的污染样本 x ~ ∈ R n \tilde{\boldsymbol{x}} \in \mathbb{R}^n x~∈Rn。
- 解决方法:算法根据污染后的样本 x ~ \tilde{\boldsymbol{x}} x~预测干净样本 x \boldsymbol{x} x,或者更一般地预测条件概率分布 P ( x ∣ x ~ ) P(\boldsymbol{x} \mid \tilde{\boldsymbol{x}}) P(x∣x~)。
- 解决问题:
- 密度估计或概率分布律函数估计(density estimation or probability distribution function estimation):
- 在密度估计问题中,机器学习算法函数: p model : R n → R p_{\text{model}}: \mathbb{R}^n \to \mathbb{R} pmodel:Rn→R。
- 其中 p model ( x ) p_{\text{model}}(\boldsymbol{}{x}) pmodel(x)可以解释成样本采样空间的概率密度函数(PDF)(如果 x \text{x} x是连续的)或者概率分布函数(PMF)(如果 x \text{x} x是离散的)。
- 解决问题:
- 要做好这样的任务(当讨论性能度量 P P P时,我们会明确定义任务是什么),算法需要学习观测到的数据的结构。算法必须知道什么情况下样本聚堆出现,什么情况下不太可能出现。
- 解决方法:
- 以上描述的大多数任务都要求学习算法至少能隐式地抓住概率分布的结构。密度估计可以让我们显式地抓住该分布。原则上,我们可以在该分布上计算以便解决其他任务。
- 例如:如果我们通过密度估计得到了概率分布 p ( x ) p(\boldsymbol{x}) p(x),我们可以用该分布解决缺失值填补任务。
- 如果 x i x_i xi的值是缺失的,但是其他变量值 x − i x_{-i} x−i已知,那么我们可以得到条件概率分布 p ( x i ∣ x − i ) p(x_i \mid \boldsymbol{x}_{-i}) p(xi∣x−i)。
- 注意:现实中,密度估计并非能够解决所有这类问题,因为在很多情况下 p ( x ) p(\boldsymbol{x}) p(x)是难以计算的。
- 分类(classification):
-
性能度量 P P P
- 为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常性能度量 P P P是衡量算法特定于系统执行的任务 T T T的性能。
- 对于诸如分类任务
- 准确率(accuracy):
- 对于诸如分类,缺失输入分类和转录任务,我们通常用度量模型的准确率(accuracy)来衡量性能。
- 定义:
- 准确率是指该模型输出正确结果的样本比例。
- 错误率(error rate):
- 我们也可以通过错误率(error rate)得到相同的信息。
- 定义:
- 错误率是指该模型输出错误结果的样本比例。我们通常把错误率称作0-1的损失期望。
- 在一个特定的样本上,如果结果是对的,那么0-1损失是0;否则是1。
- 准确率(accuracy):
- 对于密度估计任务
- 度量准确率、错误率或其他类型的0-1损失是没有意义的。
- 最常用的方法是输出模型在一些样本上概率对数的平均值。
- 通常,我们会更关注机器学习算法在未观测数据上的性能如何,因为这将决定其在现实生活中的性能如何。因此,我们使用测试数据来评估系统性能,同训练机器学习系统的数据分开。
- 性能度量的选择或许看上去简单且客观,但是选择一个与系统理想表现对应的性能度量通常是很难的。
- 在某些情况,这是因为很难决定应该度量什么。例如:
- 在执行转录任务时,我们是应该度量系统转录整个序列的准确率,还是应该用一个更细粒度的指标,对序列中部分元素正确的以正面评价?
- 在执行回归任务时,我们应该更多地惩罚频繁犯一些中等错误的系统,还是较少犯错但是犯很大错误的系统?
- 这些设计的选择取决于应用。
- 还有一些情况,我们指导应该度量哪些数值,但是度量它们不太现实。这种情况经常出现在密度估计中。很多最好的概率模型只能隐式地表示概率分布。在许多这类模型中,计算空间中特定点的概率是不可行的。这些情况,我们必须设计一个仍然对应于设计对象的替代标准,或者设计一个理想的良好近似。
-
经验 E E E
-
根据学习过程中的不同经验,机器学习算法可以大致分类为无监督(unsupervised)和监督(supervised)。
-
大部分学习算法可以理解成在整个数据集(dataset)上获取经验。数据集是指很多样本组成的集合,有时我们也将样本称为数据点(datapoint)。
-
无监督学习算法(unsupervised learning algorithm)
- 训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。
- 在深度学习中,我们通常要学习生成数据集的整个概率分布。
- 显式地,比如密度估计,或隐式地,比如合成或去噪。
- 还有一些其他类型的额无监督学习任务,例如聚类,将数据集分成相似样本的集合。
-
监督学习算法(supervised learning algorithm)
- 训练还有很多特征的数据集,不过数据集中的样本都有一个标签(label)或目标(target)。
- 例如,Iris数据集注明了每个鸢尾花卉样本属于什么品种。监督学习算法通过研究Iris数据集,学习如何根据测量结果将样本划分到三个不同品种。
- 在监督学习中,样本包含一个标签或目标和一组特征。
- 例如,我们希望使用学习算法从照片中识别物体。我们需要明确哪些物体会出现在每张照片中。我们或许会用数字编码表示。如0表示人,1表示车,2表示猫,等等。
- 通常当工作在包含观测特征的设计矩阵 X \boldsymbol{X} X的数据集时,我们也会提供一个标签向量 y \boldsymbol{y} y,其中 y i y_i yi表示样本 x i x_i xi的标签。
- 当然,有时标签可能不止一个数。
- 例如,如果我们想要训练语音模型转录到整个句子,那么每个句子样本的标签是一个单词序列。
-
无监督学习算法和监督学习算法的区别
- 大致来说,无监督学习涉及到观察随机向量 x \bold{x} x的好几个样本,试图隐式或显式地学习出概率分布 p ( x ) p(\bold{x}) p(x)或者是该分布一些有意思的性质;
- 而监督学习算法则通过观察随机向量 x \bold{x} x及其相关联的值或向量 y \bold{y} y,然后从 x \bold{x} x预测 y \bold{y} y,通常是估计 p ( y ∣ x ) p(\bold{y} \mid \bold{x}) p(y∣x)。
- 无监督学习和监督学习不是严格定义的术语。它们之间界限通常是模糊的。很多机器学习可以用于这两个任务。
- 例如概率的链式法则表明对于向量
x
∈
R
n
\bold{x} \in \mathbb{R}^n
x∈Rn,联合分布可以分解成:
p ( x ) = ∏ i = 1 n p ( x i ∣ x 1 , … , x i − 1 ) p(\bold{x}) = \displaystyle{\prod\limits_{i=1}^n} p(\bold{x}_i \mid \bold{x}_1,\dots,\bold{x}_{i-1}) p(x)=i=1∏np(xi∣x1,…,xi−1),
该分解意味着我们可以就将其拆分成 n n n个监督学习,来解决表面上的无监督学习 p ( x ) p(\boldsymbol{x}) p(x)。另外,我们求解监督学习问题 p ( y ∣ x ) p(\bold{y} \mid \bold{x}) p(y∣x)时,也可以使用传统的无监督学习策略学习联合分布 p ( x , y ) p(\bold{x}, \bold{y}) p(x,y),然后推断:
p ( y ∣ x ) = p ( x , y ) ∑ y ′ p ( x , y ′ ) p(\bold{y} \mid \bold{x}) = \displaystyle{\frac{p(\bold{x}, \bold{y})} {\sum_{\bold{y}'} p(\bold{x, \bold{y}'})}} p(y∣x)=∑y′p(x,y′)p(x,y)。
- 例如概率的链式法则表明对于向量
x
∈
R
n
\bold{x} \in \mathbb{R}^n
x∈Rn,联合分布可以分解成:
- 尽管无监督学习和监督学习并非完全没有交集的正式概念,它们确实有助于粗略分类我们研究机器学习算法时遇到的问题。
- 传统地,人们将回归、分类、或者结构化输出问题称为监督学习。支持其他任务的密度估计通常被称为无监督学习。
-
半监督学习算法(semi-supervised learning algorithm)
- 在多实例学习中,样本的整个集合被标记为含有或者不含有该类的样本,但是集合中单独的样本是没有标记的。
-
强化学习(reinforcement learning)
- 该类算法不是在一个固定的数据集上训练。它会从环境(environment)中获取数据,然后根据环境反馈来调整算法。
-
大部分机器学习算法简单地训练于一个数据集上。数据集可以用很多不同方式来表示。在所有的情况下,数据集都是样本的集合,而样本是特征的集合。
- 表示数据集的常用方法是设计矩阵(design matrix)。
- 设计矩阵的每一行包含一个不同的样本。每一列对应不同的特征。
- 例如,Iris数据集包含150个样本,每个样本有4个特征。这意味着我们将该数据集表示成设计矩阵 X ∈ R 150 × 4 \boldsymbol{X} \in \mathbb{R}^{150 \times 4} X∈R150×4,其中 X i , 1 \boldsymbol{X}_{i,1} Xi,1表示第 i i i个植物的萼片(sepal)长度, X i , 2 \boldsymbol{X}_{i,2} Xi,2表示第 i i i个植物的萼片(sepal)宽度, X i , 3 \boldsymbol{X}_{i,3} Xi,3表示第 i i i个植物的花瓣(petal)长度, X i , 4 \boldsymbol{X}_{i,4} Xi,4表示第 i i i个植物的花瓣(petal)宽度。
- 当然,将一个数据集表示成设计矩阵,必须是可以将每一个样本表示成向量,并且这些向量的大小相同。不过这一点并非永远可能。
- 例如,你有不同宽度和高度的照片的集合,那么不同的照片将会包含不同数量的像素。因此不是所有照片都可以表示成相同长度的向量。(属于异质问题的不同类型)
- 在这种情况下,我们不会将数据集表示成 m m m行的矩阵,而是表示成 m m m个元素的结合: { x ( 1 ) , x ( 2 ) , … , x ( m ) } \{\boldsymbol{x}^{(1)},\boldsymbol{x}^{(2)},\dots,\boldsymbol{x}^{(m)}\} {x(1),x(2),…,x(m)}。这种表示方式并非意味着样本向量 x ( i ) \boldsymbol{x}^{(i)} x(i)和 x ( j ) \boldsymbol{x}^{(j)} x(j)有相同的大小。
- 表示数据集的常用方法是设计矩阵(design matrix)。
-
-
- 我们将机器学习算法定义为,通过经验以提高计算机程序在某些任务上性能的算法。为了使这个抽象定义更具体点,我们展示一个简单的机器学习实例:线性回归(linear regression)。
- 顾名思义,线性回归解决回归问题。换言之,我们的目标是建一个系统,将向量 x ∈ R n \boldsymbol{x} \in \mathbb{R^n} x∈Rn作为输入,预测标量 y ∈ R y \in \mathbb{R} y∈R作为输出。线性回归的输出是其输入的线性函数。让 y ^ \hat{y} y^表示模型预测 y y y应该取的值。
- 步骤1:分析
- 我们定义输出为:
y
^
=
w
⊤
x
\hat{y} = \boldsymbol{w}^\top \boldsymbol{x}
y^=w⊤x,其中参数
w
∈
R
n
\boldsymbol{w} \in \mathbb{R}^n
w∈Rn是参数向量。
- 参数是控制系统行为的值。在这种情况下, w i w_i wi是系数,会与特征 x i x_i xi相乘之后全部相加起来。
- 我们可以将 w \boldsymbol{w} w看做是一组决定每个特征如何影响预测的权重(weight)。
- 如果特征 x i x_i xi对应的权重 w i w_i wi是正的,那么特征值增加,我们的预测值 y ^ \hat{y} y^也会增加。
- 如果特征 x i x_i xi对应的权重 w i w_i wi是负的,那么特征值减少,我们的预测值 y ^ \hat{y} y^也会减少。
- 如果特征权重的大小很大,那么它对预测有很大的影响。
- 如果特征权重的大小是零,那么它对预测没有影响。
- 我们定义输出为:
y
^
=
w
⊤
x
\hat{y} = \boldsymbol{w}^\top \boldsymbol{x}
y^=w⊤x,其中参数
w
∈
R
n
\boldsymbol{w} \in \mathbb{R}^n
w∈Rn是参数向量。
- 步骤2:定义任务
T
T
T
- 我们可以定义任务 T T T:通过输出 y ^ = w ⊤ x \hat{y} = \boldsymbol{w}^\top \boldsymbol{x} y^=w⊤x,即从 x \boldsymbol{x} x预测 y y y。
- 步骤3:定义性能度量
P
P
P
- 假设我们有 m m m个输入样本组成的设计矩阵,我们不用它来训练模型,而是评估模型性能如何。我们也有每个样本对应的正确值 y y y组成的回归目标向量。因为这个数据集只是用来评估性能,我们称之为测试集。我们将输入的设计矩阵记作 X ( test ) \boldsymbol{X}^{(\text{test})} X(test),回归目标向量记作 y ( test ) \boldsymbol{y}^{(\text{test})} y(test)。
- 度量模型性能的一种方法是计算模型在测试集上的均方误差(mean squared error)。如果
y
^
(
test
)
\hat{y}^{(\text{test})}
y^(test)表示模型在测试集上的预测值,那么均方误差为:
MSE
test
=
1
m
∑
i
(
y
^
(
test
)
−
y
(
test
)
)
i
2
\text{MSE}_{\text{test}} = \displaystyle{\frac{1}{m}} \sum\limits_i (\hat{y}^{(\text{test})} - y^{(\text{test})})^2_i
MSEtest=m1i∑(y^(test)−y(test))i2。
- 直观上,当 y ^ ( test ) = y ( t e s t ) \hat{\boldsymbol{y}}^{(\text{test})} = \boldsymbol{y}^{(test)} y^(test)=y(test)时,我们会发现误差降为0。我们也可以表示为: MSE test = 1 m ∥ y ^ ( test ) − y ( test ) ∥ 2 2 \text{MSE}_{\text{test}} = \displaystyle{\frac{1}{m}} \Vert \hat{\boldsymbol{y}}^{(\text{test})} - \boldsymbol{y}^{(\text{test})} \Vert^2_2 MSEtest=m1∥y^(test)−y(test)∥22。
- 所以当预测值 y ^ ( test ) \hat{\boldsymbol{y}}^{(\text{test})} y^(test)和目标值 y ( test ) \boldsymbol{y}^{(\text{test})} y(test)之间的欧几里得距离增加时,误差也会增加。
- 步骤4:经验
E
E
E,构建一个机器学习算法
- 我们需要设计一个算法,通过观察训练集( X ( train ) \boldsymbol{X}^{(\text{train})} X(train), y ( train ) \boldsymbol{y}^{(\text{train})} y(train))获取经验,减少 MSE test \text{MSE}_{\text{test}} MSEtest以改进权重 w \boldsymbol{w} w。
- 一种直观方式,最小化训练集上的均方误差,即 MSE train \text{MSE}_{\text{train}} MSEtrain。注:其合法性说明(待续)
- 最小化
MSE
train
\text{MSE}_{\text{train}}
MSEtrain,意味着我们希望最小化
w
\boldsymbol{w}
w的梯度(即简单地求解其导数为0的情况):
计算推导过程如下:
{ ∇ w MSE train = 0 ⇒ ∇ w 1 m ∥ y ^ ( train ) − y ( train ) ∥ 2 2 = 0 ⇒ 1 m ∇ w ∥ X ( train ) w − y ( train ) ∥ 2 2 = 0 ⇒ ∇ w ( X ( train ) w − y ( train ) ) ⊤ ( X ( train ) w − y ( train ) ) = 0 ⇒ ∇ w ( w ⊤ X (train) ⊤ X (train) w − 2 w ⊤ X (train) ⊤ y (train) + y (train) ⊤ y (train) ) = 0 ⇒ 2 X (train) ⊤ X (train) w − 2 X (train) ⊤ y (train) = 0 ⇒ w = ( X (train) ⊤ X (train) ) − 1 X (train) ⊤ y (train) \begin{cases}\begin{array}{l} \quad \nabla_{\boldsymbol{w}} \text{MSE}_{\text{train}} = 0\\\\ \Rightarrow \nabla_{\boldsymbol{w}} \displaystyle{\frac{1}{m}} \Vert \hat{\boldsymbol{y}}^{(\text{train})} - \boldsymbol{y}^{(\text{train})} \Vert^2_2 = 0\\\\ \Rightarrow \displaystyle{\frac{1}{m}} \nabla_{\boldsymbol{w}} \Vert \boldsymbol{X}^{(\text{train})}\boldsymbol{w} - \boldsymbol{y}^{(\text{train})} \Vert_2^2 = 0\\\\ \Rightarrow \nabla_{\boldsymbol{w}} \left( \boldsymbol{X}^{(\text{train})}\boldsymbol{w} - \boldsymbol{y}^{(\text{train})} \right)^\top \left( \boldsymbol{X}^{(\text{train})}\boldsymbol{w} - \boldsymbol{y}^{(\text{train})} \right) = 0\\\\ \Rightarrow \nabla_{\boldsymbol{w}} \left( \boldsymbol{w}^\top \boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{X}^{\text{(train)}} \boldsymbol{w} - 2\boldsymbol{w}^\top \boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{y}^{\text{(train)}} + \boldsymbol{y}^{\text{(train)}^\top} \boldsymbol{y}^{\text{(train)}} \right) = 0\\\\ \Rightarrow 2\boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{X}^{\text{(train)}} \boldsymbol{w} - 2\boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{y}^{\text{(train)}} = 0\\\\ \Rightarrow \boldsymbol{w} = \left(\boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{X}^{\text{(train)}}\right)^{-1} \boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{y}^{\text{(train)}} \end{array}\end{cases} ⎩ ⎨ ⎧∇wMSEtrain=0⇒∇wm1∥y^(train)−y(train)∥22=0⇒m1∇w∥X(train)w−y(train)∥22=0⇒∇w(X(train)w−y(train))⊤(X(train)w−y(train))=0⇒∇w(w⊤X(train)⊤X(train)w−2w⊤X(train)⊤y(train)+y(train)⊤y(train))=0⇒2X(train)⊤X(train)w−2X(train)⊤y(train)=0⇒w=(X(train)⊤X(train))−1X(train)⊤y(train) - 正规方程(normal equation)
- w = ( X (train) ⊤ X (train) ) − 1 X (train) ⊤ y (train) \boldsymbol{w} = \left(\boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{X}^{\text{(train)}}\right)^{-1} \boldsymbol{X}^{\text{(train)}^\top} \boldsymbol{y}^{\text{(train)}} w=(X(train)⊤X(train))−1X(train)⊤y(train)给出解的系统方程被称为正规方程(normal equation)。它构成了一个简单的机器学习算法。
- 我们将机器学习算法定义为,通过经验以提高计算机程序在某些任务上性能的算法。为了使这个抽象定义更具体点,我们展示一个简单的机器学习实例:线性回归(linear regression)。
-
线性回归算法示例
-
一个线性回归问题,如下:
-
说明:
- 训练集包括了10个数据点,每个数据点包含了一个特征。
- 因为只有一个特征,权重向量 w \boldsymbol{w} w也只有一个要学习的参数 w i w_i wi。
- 从左图,我们可以观察到线性回归学习 w i w_i wi,从而使得直线 y = w 1 x y=w_1 x y=w1x能够尽量接近穿过所有的训练点。
- 右图标注的点表示由正规方程学习到的 w i w_i wi的值,我们发现它可以最小化训练集上的均方误差。
-
-
值得注意的是,线性回归通常用来指稍微复杂一些,附加额外参数(截距项 b b b)的模型。在这个模型中: y ^ = w ⊤ x + b \hat{y} = \boldsymbol{w}^\top \boldsymbol{x} + b y^=w⊤x+b。因此从参数到预测的映射仍是一个线性函数,而从特征到预测的映射是一个仿射函数。
-
说明:
- 如此扩展到仿射函数意味着模型预测的曲线仍然看起来像是一条直线,只是这条直线没必要经过原点。
- 不通过添加偏置参数 b b b,我们仍然可以使用仅含权重的模型,但是 x \boldsymbol{x} x需要增加一项永远为1的元素。
- 对应于额外1的权重起到了偏置参数的作用。当我们在此中提到仿射函数时,会经常使用术语“线性”。
- 截距项 b b b通常被称为仿射变换的偏置( bias)参数。
- 这个术语的命名源自该变换的输出在没有任何输入时会偏移 b b b。它和统计偏差中指代统计估计算法的某个量的期望估计偏离真实值的意思是不一样的。
-
总结:
- 线性回归当然是一个极其简单且有局限的学习算法,但是它提供了一个说明学习算法如何工作的例子。
- 在后续内容,我们将会介绍一些设计学习算法的基本原则,并说明如何使用这些原则来构建更复杂的学习算法。