第一章 机器学习简介 Introduction to Machine Learning
机器学习的概念、要素、类型等
过拟合、欠拟合、正则化
贝叶斯公式
1.1 机器学习简介
为什么要机器学习
- 缺乏相关的专门知识
- 工业 生产控制
- 质谱仪分析 , 药物设计 , 天文发现
- 难以解释的人类经验
- 人脸 文字 语音识别
- 如何驾驶汽车和飞机
- 快速变化的现象
- 金融建模
- 欺诈检测
- 需要定制
- 电影和图书推荐
需要机器学习的一个经典例子:手写识别。很难编写一个程序来解决手写数字识别这样的问题。
- 如何区分 2 和 7?
- 在识别时我们大脑是如何工作的?
不同地,我们可以收集大量的包含了手写数字图像和对应数字的样本。一个机器学习算法通过学习这些样本而生成一个能进行手写数字识别的程序。
- 机器学习生成的程序和我们人工编写的程序很不同,它包含了大量的数字。
- 如果我们做得不错,这个程序也能识别新给的手写数字。
★什么是机器学习
机器学习的定义
机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。是对能通过经验自动改进的计算机算法的研究。也是用数据或以往的经验,依次优化计算机程序的性能标准。
对人类而言:学习是通过教授或体验而获得知识、技术、态度或价值的过程,从而导致可量度的稳定的行为变化。
对计算机系统而言,以性能量度P进行衡量,如果一个计算机程序在某类任务T 上的性能,随着经验E 而提升,那么我们称这个计算机程序从经验E 中学习。
Tom Mitchell (1998): 以性能量度 P 进行衡量,如果一个计算机程序在某类任务 T 上的性能,随着经验 E 而提升,那么我们称这个计算机程序能从经验 E 中学习。
机器学习是一种实现人工智能的方法。
机器学习的应用和发展
机器学习的应用:
- 图像识别分类
- 文档分类
- 天气预报
- 人脸识别
- 股票预测
- 语音识别
- 机器翻译
- 对话系统
机器学习为很多领域提供了解决方案:
- 语音识别, 自然语言处理
- 计算机视觉
- 医疗结果分析
- 机器人控制
- 计算生物学
- 传感器网络
机器学习正加速得到应用:
- 大数据
- 先进的机器学习算法
- 更快的计算机
- 开源软件 , 网站如 Github
人工智能、机器学习、深度学习的关系
★机器学习的分类
机器学习类型(按任务的分类)
监督学习 Supervised Learning
监督学习是指通过让机器学习大量带有标签的样本数据,训练出一个模型,并使该模型可以根据输入预测相应输出的过程。
监督学习的预测目标:分类(离散值)、回归(连续值)
输入 x\boldsymbol{x}
预测目标 yy:
- 分类: 离散值
- 二分类:行人、非行人
- 多分类:行人、车辆、树木
- 回归: 连续值
- 如:行人的坐标
应用:房价估计
无监督学习 Unsupervised Learning
无监督学习是指训练数据由一组输入向量x组成,且该数据集没有任何对应的label。
无监督学习的目标是发现数据中有意义的结构信息。
直接对输入数据进行建模,提取数据有效信息探索数据的整体结构。
无监督学习包括:
- 聚类:发现数据中相似样本的分组;
- 密度估计:决定输入空间中数据的分布;
- 数据可视化:把数据从高维空间投影到二维或者三维空间。
Dataset contains no labels: x(1),…,x(n)\boldsymbol{x}^{(1)} , \ldots, \boldsymbol{x}^{(n)}.
Goal (vaguely posed): to find interesting structures in the data.
训练数据不再是(input, output)对的形式。
应用:
- 降维
- 数据压缩
- 异常值检测
- 分割 / 聚类
- 概率密度估计
主成分分析(PCA):
PCA的思想是将n维特征映射到k维空间上k<n,这k维特征是全新的正交特征,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n−k维特征。
强化学习 Reinforcement Learning
强化学习:通过感知外界环境的变化来调整学习方式,然后通过奖惩的方式来判别学习方式是否正确,通过一步步调整学习方式,最终找到一个最优的方式。
通过一个智能体在与复杂而不确定的环境交互中最大化总回报来学习的一种计算方法。智能体以“试错”的方式进行学习,通过与环境交互获得的奖赏和惩罚指导行为,目标是使智能体获得最大的奖赏。
1.2 机器学习基本流程
★机器学习的三要素
- 模型
- 线性方法:f(x,θ)=w⊤x+bf(\boldsymbol{x} , \theta) = \boldsymbol{w}^{\top}\boldsymbol{x} + b
- 广义线性方法:f(x,θ)=w⊤ϕ(x)+bf(\boldsymbol{x} , \theta) = \boldsymbol{w}^{\top} \phi( \boldsymbol{x}) + b
如果 ϕ(x)\phi( \boldsymbol{x}) 为可学习的非线性基函数, f(x,θ)f(\boldsymbol{x} , \theta) 就等价于神经网络。
- 学习准则
- 期望风险: R(f)=E(x,y)∼p(x,y)[L(f(x),y)]\mathcal{R}(f) = \mathbb{E}_{ (\boldsymbol{x},y) \sim p(\boldsymbol{x},y) } [\mathcal{L}(f(\boldsymbol{x}), y)]
- 经验风险
- 优化(算法:用什么样的计算方法求解最优模型。归结为最优化问题。)
- 梯度下降
学习准则
使用学习准则评价模型好坏。
损失函数
损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。
下面介绍几种常用的损失函数:
- 0-1 损失函数
- 平方损失函数 L(Y,f(X))=(Y−f(x))2L(Y,f(X))=(Y-f(x))^2
- 感知器损失函数
- Hinge 损失函数
- 交叉熵损失函数
损失函数越小,模型就越好。
期望风险
期望风险是全部样本(所有样本空间)预测值与真实值的差距。
模型 f(x,θ)f(\boldsymbol{x} , \theta) 的好坏可以通过期望风险 (Expected Risk) R(θ)\mathcal{R}(\theta) 来衡量,其定义为
R(θ)=E(x,y)∼pr(x,y)[L(y,f(x,θ))]\mathcal{R}(\theta) = \mathbb{E}_{ (\bold{x},y) \sim p_r(\bold{x},y) } [\mathcal{L}( y, f(\bold{x} , \theta))]
其中 pr(x,y)p_r(\boldsymbol{x},y) 为真实的数据分布, L(y,f(x,θ))\mathcal{L}( y, f(\boldsymbol{x} , \theta)) 为损失函数,用来量化两个变量之间的差异。
风险函数(期望损失):损失函数的期望
经验风险
在期望风险未知时,用经验风险近似。
经验风险是训练集样本预测值与真实值的差距。
经验风险:训练集的平均损失,训练集的拟合情况。
真实的数据分布 未知
映射函数 未知
期望风险未知,通过经验风险近似
通过选择合适的风险函数 L\mathcal{L}(损失函数),则可寻找参数 θ∗=argminθRDemp(θ)\theta^* =arg \min\limits_{\theta} \mathcal{R}_D^{emp}(\theta) 使得经验风险函数最小化,转化为最优化问题。
结构风险
结构风险 = 经验风险 + 正则化项 (系数 * 模型复杂度)
不同的学习准则
参数优化
优化问题通常比较难求解,选择不同的模型和损失函数会影响优化问题的求解。
参数优化(连续空间)
- 线性优化 , 凸优化
- 梯度方法 : 梯度下降 , 共轭梯度
- 牛顿法(二阶方法)
- Levenberg-Marquard
其中一些算法可以一个样本一个样本地在线执行。
组合优化(离散空间)
- 爬山算法
- 模拟退火
- 遗传算法
设计机器学习算法的基本步骤
三个基本步骤:
- 选择模型
如:线性模型 f(x)=ax+bf(x)=ax+b - 选择学习准则函数 (误差函数)
如:均方误差 1n∑i=1n(yi−f(xi))2\frac{1}{n}\sum^n_{i=1}(y_i - f(x_i))^2 - 优化 ,找到一组参数来优化准则函数
模型和优化得到的参数是对数据最好的拟合
仍然有需要注意的问题
训练集、验证集和测试集
训练集:用于训练模型,找出模型参数。
验证集:用以确定模型超参数,选出最优模型。
测试集:用于评估最终模型的泛化能力。
泛化 Generalization
泛化能力:对未知数据集的预测能力。
泛化是指将模型从训练数据集推广到一般数据集上,且使得在训练数据集上的训练误差逼近在一般数据集上的泛化误差。
问题:我们根据在训练集 DD 中观察到的样本来拟合这个模型。但最终我们感兴趣的是获得在整个样本总体中表现良好的映射。
训练错误:
Error(D,f)=1n∑i=1n(yi−f(xi))2Error(D,f)=\frac{1}{n}\sum^n_{i=1}(y_i - f(x_i))^2
真实(泛化)错误:
E(x,y)[(y−f(x))2]E_{(x,y)}[(y - f(x))^2]
训练误差试图去近似泛化误差!!!
但是,好的训练误差是否意味着好的泛化误差呢?
评价机器学习算法的性能
泛化误差
泛化误差是我们最终想要优化的在整个样本空间的真实误差。样本均值只能近似它。
评价泛化误差的两个途径:
- 理论上的: 大数定律
样本均值与真实均值差的统计界。 - 实践上的:用一个与训练集不同的数据集(测试集)来测试模型
测试误差 (Mean) test error:
1m∑j=1m(yj−f(xj))2\frac{1}{m}\sum_{j=1}^m(y_j - f(x_j))^2
二分类评价指标
精确率和召回率:
TP,FP,TN,FN(true/false positive/negitive)
精确率:
P=TPTP+FPP = \frac{TP}{TP + FP}
召回率:
R=TPTP+FNR = \frac{TP}{TP+FN}
测试学习模型
将数据集分为训练集和测试集。通常 2/3 训练,1/3 测试。
测试集可以用来评价不同算法的性能。
如何得到一个机器学习模型准确率的无偏估计?
- 当训练模型时,要当作没有测试数据。
- 如果在训练模型时,测试数据的标签以任何方式影响了训练,对模型准确率的估计将是有偏的。
在某些机器学习方法中,例如:半监督学习,可以利用测试数据的特征向量 xx ,但不能使用它们对应的
标签 yy 。
机器学习举例:多项式曲线拟合
数据集:通过 sin\sin 函数生成的 1010 个点 (X,Y)(X, Y),具有噪声。
回归:求出 XX 和 YY 之间的关系。
多项式曲线拟合
y(x,w)=w0+w1x+w2x2+…+wMxM=∑j=0Mwjxjy(x,\boldsymbol{w}) = w_0 + w_1x + w_2x^2 + \ldots + w_M x^M = \sum_{j=0}^{M}w_jx^j
其中,
- MM 是多项式的阶数 (order)
- xjx^j 表示 xx 的 jj 次幂
- 多项式系数 w0,…,wMw_0,\ldots,w_M 整体可以记作向量 w\boldsymbol{w}
误差函数
平方和误差函数:
E(w)=12∑n=1n[y(xn,w)−tn]2E(\boldsymbol{w}) = \frac{1}{2}\sum_{n=1}^{n} \left[ y(x_n,\boldsymbol{w}) -t_n \right]^2
- 系数的值可以通过调整多项式函数拟合训练数据来确定。
- 目标:最小化误差函数(error function)。
- 有一个唯一解,记作 w∗\boldsymbol{w}^*,可以用解析的方式求出。
- 最终的多项式函数由函数 y(x;w∗)y(x;\boldsymbol{w}^*) 给出。
选择多项式的阶数 MM
均方根(RMS)误差:
ERMS=2E(w∗)/NE_{RMS} = \sqrt{2E(\boldsymbol{w}^*)/N}
★欠拟合和过拟合
欠拟合 (Under fitting)
模型在训练集上误差很大,在测试集上误差也大。
由于模型能力不足(不灵活)。
过拟合 (Over fitting)
过拟合是指模型过于紧密或精确地匹配训练数据集,以致于无法良好地拟合其他数据或预测未来的观察结果的现象。
模型在训练集上误差很低,但是在测试数据上误差很高。
由于训练数据太少和/或模型能力太强等原因造成。
过拟合的解决方法
1.扩大训练集
使用 M=9M = 9 的多项式对 N=15N = 15 个数据点(左图)和 N=100N = 100 个数据点(右图)通过最小化平方和误差函数得到的解:
我们看到增大数据集的规模会减小过拟合问题。
★2.正则化 Regularization
【奥卡姆剃刀原理 (Occam’s Razor)】
William of Ockham (1285-1349) Principle of Parsimony:
"One should not increase, beyond what is necessary, the number of entities required to explain anything."
如无必要,勿增实体
Alternatively, seek the simplest explanation.
正则化方法:通过修改目标函数来惩罚模型的复杂度。
正则化方法即为在此时向原始模型引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。在实际的深度学习场景中我们几乎总是会发现,最好的拟合模型(从最小化泛化误差的意义上)是一个适当正则化的大型模型。
过拟合例子:
MM 越大越灵活,多项式被过分地调参。
正则化:在损失函数中加入惩罚。
均方根误差 ERMSE_{RMS} 与 lnλ\ln λ 的关系:
两个常用的正则化最小二乘法方法(见 第4章 线性回归)
在原目标函数的基础上增加L2范数惩罚,将原函数进行了一定程度的平滑化,这个可以从其梯度函数有所体现。对于一类存在大量驻点(Stationary point,即梯度为0的点),增加L2范数意味着将原本导数为零的区域,加入了先验知识进行区分(几何上,意味着原本一个平台的区域向0点方向倾斜),这样可以帮助优化算法至少收敛到一个局部最优解,而不是停留在一个鞍点上。
L1相对于L2能够产生更加稀疏的模型,即当L1正则在参数w比较小的情况下,能够直接缩减至0.因此可以起到特征选择的作用,该技术也称之为 LASSO。
如果从概率角度进行分析,很多范数约束相当于对参数添加先验分布,其中L2范数相当于参数服从高斯先验分布;L1范数相当于拉普拉斯分布
3.通过验证集来选择模型
把给定的数据中的⼀部分从测试集中分离出,来确定系数w。这个分离出来的验证集(validation set),也被称为拿出集(hold-out set)
将数据分为:训练集、验证集和测试集
经验法则: 60-20-20 or 50-25-25 (如果数据足够多)
-
训练集:用于训练模型,找出模型参数。
-
验证集:用以确定模型超参数,例如多项式回归中的 M 选出最优模型。
-
测试集:用于评估最终模型的泛化能力。
模型空间举例:
Model Spaces with increasing complexity:
- Nearest-Neighbor classifiers with varying neighborhood sizes k= 1,2,3..
Small neighborhood => Higher complexity - Decision Trees with depth k or with k leaves
Higher depth/ More # leaves => Higher complexity - Regression with polynomials of order k = 0,1,2,…
Higher degree => Higher complexity
k: 超参数 / 元参数 / 自由参数
解决数据稀少问题
交叉验证
解决验证集很⼩的问题。
参数为S的交叉验证方法,这里说明了S=4的情形。以能够得到的数据为输入,将其划分为S组(最简单的情况下,等于数据的个数)。然后,S-1组数据被用于训练一组模型,然后在剩余的一组上进行评估。然后对于所有S的可能选择重复进行这一步骤,使用剩余的一组进行评估,这里用红色标记出来。之后,对S轮运行结果的表现得分求平均值。
能够让可得到数据的(s-1)/s⽤于训练,同时使⽤所有的数据来评估表现。
具体做法:
- K 折交叉验证
- 留一法
K 折交叉验证
解决数据不够多的问题。
将数据集分层采样划分为 kk 个大小相近的互斥子集,每次用 k−1k-1 个子集的并集作为训练集,余下的子集作为测试集/验证集 ,最终返回 kk 个测试结果的均值, kk 常取 1010 。
留一法
解决数据相当稀疏的问题。
留一法就是使k=N(数据集中样本总数),每次只使用一个作为测试集,剩下的全部作为训练集,这种方法不受随机样本划分方式的影响,得出的结果与训练整个测试集的期望值最为接近。但当数据集比较大时,计算开销难以忍受。
考虑 k=Nk = N 的情况很合适,其中 NN 是数据点的总数。这种技术叫做 “留一法”(leave-one-out)。
- 不受随机样本划分方式的影响
- 结果往往比较准确
- 当数据集比较大时,计算开销难以忍受