机器学习(一)
1. 机器学习概述与基本思想
1.1 机器学习的定义与范畴
机器学习是一门研究学习算法的学科,其核心定义由Tom Mitchell提出:机器学习是让计算机程序在某些任务TTT上,通过经验EEE来提升性能PPP,而无需进行显式编程。这个定义明确了学习任务的三要素:任务、经验和性能度量。
与传统的显式编程不同,机器学习采用“数据驱动”的范式:
- 传统编程:程序员编写规则 → 程序处理输入 → 产生输出
- 机器学习:数据输入 → 算法学习规则 → 构建模型 → 处理新输入
1.2 机器学习的优势场景
机器学习在以下场景中具有显著优势:
- 海量数据处理:如Google搜索、Facebook新闻推荐
- 个性化输出需求:新闻推荐、商品推荐、广告投放
- 专业知识难以形式化:语音识别、人脸识别、围棋博弈
- 人类经验缺失领域:火星导航、新药发现
1.3 机器学习的主要类型
根据学习目标和数据形式,机器学习可分为三大类:
| 类型 | 核心任务 | 典型应用 |
|---|---|---|
| 监督学习 | 给定数据和标签,学习从特征到标签的映射函数 | 分类、回归 |
| 无监督学习 | 分析数据中的隐含模式和结构 | 聚类、降维、关联分析 |
| 强化学习 | 在动态环境中学习最优决策策略 | 游戏AI、机器人控制、自动驾驶 |
2. 机器学习的基本流程与核心概念
2.1 标准机器学习流程
2.2 监督学习的数学形式化
给定带标签的训练数据集:
D={(xi,yi)}i=1N D = \{(x_i, y_i)\}_{i=1}^{N} D={(xi,yi)}i=1N
其中:
- xi∈Rdx_i \in \mathbb{R}^dxi∈Rd 为 ddd 维特征向量
- yiy_iyi 为对应的标签(回归任务中 yi∈Ry_i \in \mathbb{R}yi∈R,分类任务中 yi∈{0,1,…,K−1}y_i \in \{0,1,\ldots,K-1\}yi∈{0,1,…,K−1})
- NNN 为训练样本数量
学习目标是找到一个函数映射 fθ:Rd→Yf_{\theta}: \mathbb{R}^d \rightarrow \mathcal{Y}fθ:Rd→Y,使得:
yi≃fθ(xi),∀i=1,…,N y_i \simeq f_{\theta}(x_i), \quad \forall i = 1,\ldots,N yi≃fθ(xi),∀i=1,…,N
函数集 {fθ(⋅)}θ∈Θ\{f_{\theta}(\cdot)\}_{\theta \in \Theta}{fθ(⋅)}θ∈Θ 称为假设空间,其中 θ\thetaθ 为模型参数,Θ\ThetaΘ 为参数空间。学习过程就是通过优化算法在假设空间中寻找最优参数 θ∗\theta^*θ∗。
2.3 损失函数与优化
学习目标是最小化经验风险(empirical risk):
minθ1N∑i=1NL(yi,fθ(xi))(2.1) \min_{\theta} \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}(y_i, f_{\theta}(x_i)) \tag{2.1} θminN1i=1∑NL(yi,fθ(xi))(2.1)
其中 mathcalL(cdot,cdot)mathcal{L}(cdot,cdot)mathcalL(cdot,cdot) 是损失函数,衡量模型预测 ftheta(xi)f_theta(x_i)ftheta(xi) 与真实标签 yiy_iyi 之间的差异。
常用损失函数
-
平方误差损失(回归任务):
L(yi,fθ(xi))=12(yi−fθ(xi))2(2.2) \mathcal{L}(y_i, f_{\theta}(x_i)) = \frac{1}{2}(y_i - f_{\theta}(x_i))^2 \tag{2.2} L(yi,fθ(xi))=21(yi−fθ(xi))2(2.2)- 优点:处处可导,优化方便
- 缺点:对异常值敏感
-
交叉熵损失(分类任务):
L(yi,fθ(xi))=−∑k=1Kyi,klogfθk(xi) \mathcal{L}(y_i, f_{\theta}(x_i)) = -\sum_{k=1}^{K} y_{i,k} \log f_{\theta k}(x_i) L(yi,fθ(xi))=−k=1∑Kyi,klogfθk(xi)
- 适用于多分类问题
- 与 softmax 激活函数配合使用
- Hinge损失(支持向量机):
L(yi,fθ(xi))=max(0,1−yifθ(xi)) \mathcal{L}(y_i, f_{\theta}(x_i)) = \max(0, 1 - y_i f_{\theta}(x_i)) L(yi,fθ(xi))=max(0,1−yifθ(xi))- 用于最大间隔分类器
- 产生稀疏解
优化方法:梯度下降法
梯度下降法是最基础的优化算法,通过迭代更新参数来最小化损失函数:
θ(t+1)←θ(t)−η∇θL(θ(t))(2.3) \theta^{(t+1)} \leftarrow \theta^{(t)} - \eta \nabla_{\theta} \mathcal{L}(\theta^{(t)}) \tag{2.3} θ(t+1)←θ(t)−η∇θL(θ(t))(2.3)
其中:
- θ(t)\theta^{(t)}θ(t) 表示第 ttt 次迭代的参数
- η>0\eta > 0η>0 为学习率(learning rate),控制参数更新的步长
- ∇θL(θ(t))=∂L(θ)∂θ∣θ=θ(t)\nabla_{\theta} \mathcal{L}(\theta^{(t)}) = \frac{\partial \mathcal{L}(\theta)}{\partial \theta}\big|_{\theta=\theta^{(t)}}∇θL(θ(t))=∂θ∂L(θ) θ=θ(t) 是损失函数关于参数的梯度
梯度下降的变体:
- 批量梯度下降:使用全部训练数据计算梯度,收敛稳定但计算量大
- 随机梯度下降(SGD):每次随机选择一个样本计算梯度,计算快但波动大
- 小批量梯度下降:折中方案,每次使用一小批(mini-batch)数据
Python代码示例:使用numpy实现线性回归的梯度下降
下面是一个简单的Python代码示例,展示如何使用平方误差损失和梯度下降法训练线性回归模型:
import numpy as np
import matplotlib.pyplot as plt
# 1. 生成模拟数据
np.random.seed(42)
n_samples = 100
X = 2 * np.random.rand(n_samples, 1) # 特征:100个样本,1个特征
y = 4 + 3 * X + np.random.randn(n_samples, 1) # 真实关系:y = 4 + 3x + 噪声
# 2. 添加偏置项(截距项)
X_b = np.c_[np.ones((n_samples, 1)), X] # 添加一列1,对应偏置项
# 3. 初始化参数
theta = np.random.randn(2, 1) # 随机初始化参数 [偏置, 权重]
learning_rate = 0.1 # 学习率 η
n_iterations = 1000 # 迭代次数
# 4. 梯度下降训练过程
loss_history = [] # 记录损失变化
for iteration in range(n_iterations):
# 4.1 计算预测值:y_pred = X_b · theta
y_pred = X_b.dot(theta)
# 4.2 计算损失(平方误差损失)
# L(θ) = 1/2N * Σ(y_i - y_pred_i)^2
loss = (1/(2*n_samples)) * np.sum((y - y_pred)**2)
loss_history.append(loss)
# 4.3 计算梯度
# ∂L/∂θ = -1/N * X_b^T · (y - y_pred)
gradients = -(1/n_samples) * X_b.T.dot(y - y_pred)
# 4.4 更新参数:θ_new = θ_old - η * ∂L/∂θ
theta = theta - learning_rate * gradients
# 每100次迭代打印一次进度
if iteration % 100 == 0:
print(f"Iteration {iteration}: loss = {loss:.4f}, theta = {theta.flatten()}")
# 5. 输出最终结果
print(f"\n最终参数:偏置 = {theta[0][0]:.4f}, 权重 = {theta[1][0]:.4f}")
print(f"真实关系:y = 4 + 3x + 噪声")
print(f"学习到的关系:y = {theta[0][0]:.4f} + {theta[1][0]:.4f}x")
# 6. 可视化结果
plt.figure(figsize=(12, 4))
# 6.1 原始数据与拟合直线
plt.subplot(1, 2, 1)
plt.scatter(X, y, alpha=0.7, label='原始数据')
plt.plot(X, X_b.dot(theta), color='red', linewidth=2, label='拟合直线')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归拟合结果')
plt.legend()
plt.grid(True, alpha=0.3)
# 6.2 损失函数下降曲线
plt.subplot(1, 2, 2)
plt.plot(range(n_iterations), loss_history)
plt.xlabel('迭代次数')
plt.ylabel('损失值')
plt.title('梯度下降:损失函数下降曲线')
plt.grid(True, alpha=0.3)
plt.yscale('log') # 对数坐标,更清晰显示下降趋势
plt.tight_layout()
plt.show()
代码关键步骤说明:
-
数据准备:生成模拟的线性数据
y = 4 + 3x + 噪声,添加偏置项列以便同时学习截距和斜率。 -
参数初始化:随机初始化模型参数 θ(包含偏置和权重),设置学习率 η 和迭代次数。
-
梯度计算:
- 预测值:
y_pred = X_b · θ - 损失函数:平方误差损失
L(θ) = 1/(2N) * Σ(y_i - y_pred_i)² - 梯度:
∂L/∂θ = -1/N * X_bᵀ · (y - y_pred)(通过矩阵运算高效计算)
- 预测值:
-
参数更新:使用梯度下降公式
θ_new = θ_old - η * ∂L/∂θ迭代更新参数。 -
收敛监控:记录每次迭代的损失值,可视化损失下降曲线,确保算法收敛。
运行结果示例:
Iteration 0: loss = 10.3245, theta = [0.832 3.142]
Iteration 100: loss = 0.5213, theta = [3.874 3.032]
Iteration 200: loss = 0.5198, theta = [3.945 3.016]
...
Iteration 900: loss = 0.5197, theta = [3.987 3.004]
最终参数:偏置 = 3.987, 权重 = 3.004
真实关系:y = 4 + 3x + 噪声
学习到的关系:y = 3.987 + 3.004x
这个示例完整展示了从损失函数定义、梯度计算到参数更新的全过程,帮助读者直观理解梯度下降法如何最小化平方误差损失。
3. 模型选择与泛化能力
3.1 欠拟合与过拟合
这是机器学习中的核心挑战:
| 现象 | 表现特征 | 产生原因 | 解决方案 |
|---|---|---|---|
| 欠拟合 | 模型过于简单,无法捕捉数据的基本规律 | 模型复杂度不足,特征不足 | 增加模型复杂度,添加更多特征 |
| 过拟合 | 模型过于复杂,拟合了噪声而非规律 | 模型复杂度过高,训练数据不足 | 正则化,增加数据,简化模型 |
示例:多项式回归中,线性模型可能欠拟合,二次模型可能刚好合适,而高阶多项式(如15阶)会严重过拟合。
3.2 正则化技术
为防止过拟合,在损失函数中添加正则化项(regularization term):
minθ[1N∑i=1NL(yi,fθ(xi))+λ Ω(θ)](3.1) \min_{\theta} \left[ \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}(y_i, f_{\theta}(x_i)) + \lambda \, \Omega(\theta) \right] \tag{3.1} θmin[N1i=1∑NL(yi,fθ(xi))+λΩ(θ)](3.1)
其中:
- 第一项 1N∑i=1NL(yi,fθ(xi))\frac{1}{N} \sum_{i=1}^{N} \mathcal{L}(y_i, f_{\theta}(x_i))N1∑i=1NL(yi,fθ(xi)) 是经验风险(训练误差)
- 第二项 λ Ω(θ)\lambda \, \Omega(\theta)λΩ(θ) 是正则化项,惩罚模型复杂度
- λ≥0\lambda \geq 0λ≥0 为正则化系数,控制惩罚强度
- Ω(θ)\Omega(\theta)Ω(θ) 是参数 θ\thetaθ 的某种度量函数
常用正则化方法
-
L2正则化(岭回归,Ridge Regression):
Ω(θ)=∥θ∥22=∑m=1Mθm2(3.2) \Omega(\theta) = \|\theta\|_2^2 = \sum_{m=1}^{M} \theta_m^2 \tag{3.2} Ω(θ)=∥θ∥22=m=1∑Mθm2(3.2)- 使参数趋向于较小的值,防止参数过大导致过拟合
- 保持所有参数非零,适用于特征间相关性较强的情况
- 优化问题有解析解:θ^=(X⊤X+λI)−1X⊤y\hat{\theta} = (X^{\top} X + \lambda I)^{-1} X^{\top} yθ^=(X⊤X+λI)−1X⊤y
-
L1正则化(LASSO回归,Least Absolute Shrinkage and Selection Operator):
Ω(θ)=∥θ∥1=∑m=1M∣θm∣(3.3) \Omega(\theta) = \|\theta\|_1 = \sum_{m=1}^{M} |\theta_m| \tag{3.3} Ω(θ)=∥θ∥1=m=1∑M∣θm∣(3.3)- 产生稀疏解(部分参数为0),自动进行特征选择
- 适用于特征数量多但只有少数特征重要的场景
- 优化问题通常使用坐标下降法等迭代算法求解
-
弹性网(Elastic Net):结合L1和L2正则化
Ω(θ)=α∥θ∥1+(1−α)∥θ∥22 \Omega(\theta) = \alpha \|\theta\|_1 + (1-\alpha) \|\theta\|_2^2 Ω(θ)=α∥θ∥1+(1−α)∥θ∥22- 平衡特征选择(L1)和参数收缩(L2)
- 适用于特征高度相关的场景
3.3 奥卡姆剃刀原则
核心思想:在多个假设模型都能解释数据时,选择假设条件最少、最简单的模型。
在机器学习中,这体现为:
- 简单的模型通常泛化能力更好
- 复杂的模型容易过拟合
- 正则化项 λΩ(θ)\lambda \Omega(\theta)λΩ(θ) 就是对模型复杂度的惩罚
3.4 交叉验证
用于模型选择和超参数调优的黄金标准方法:
K折交叉验证流程:
- 将训练数据随机分为K个大小相似的子集
- 对于每个超参数设置:
- 进行K次训练和验证
- 每次使用K-1个子集训练,剩余1个子集验证
- 计算K次验证的平均性能
- 选择平均性能最好的超参数设置
- 用全部训练数据重新训练最终模型
4. 泛化理论
4.1 泛化误差定义
泛化能力(generalization ability)指模型对未观测数据(测试数据)的预测能力,用泛化误差(generalization error)衡量:
R(f)=E(X,Y)∼P[L(Y,f(X))]=∫X×YL(y,f(x)) p(x,y) dx dy(4.1) R(f) = \mathbb{E}_{(X,Y) \sim P} \left[ \mathcal{L}(Y, f(X)) \right] = \int_{\mathcal{X} \times \mathcal{Y}} \mathcal{L}(y, f(x)) \, p(x,y) \, dx \, dy \tag{4.1} R(f)=E(X,Y)∼P[L(Y,f(X))]=∫X×YL(y,f(x))p(x,y)dxdy(4.1)
其中:
- \(P\) 是数据真实的联合分布
- p(x,y)p(x,y)p(x,y) 是联合概率密度函数
- X\mathcal{X}X 是特征空间,Y\mathcal{Y}Y 是标签空间
- L(⋅,⋅)\mathcal{L}(\cdot,\cdot)L(⋅,⋅) 是损失函数
- E[⋅]\mathbb{E}[\cdot]E[⋅] 表示数学期望
经验风险(empirical risk,即训练误差)是泛化误差在训练集上的估计:
R^(f)=1N∑i=1NL(yi,f(xi))(4.2) \hat{R}(f) = \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}(y_i, f(x_i)) \tag{4.2} R^(f)=N1i=1∑NL(yi,f(xi))(4.2)
其中 {(xi,yi)}i=1N\{(x_i, y_i)\}_{i=1}^N{(xi,yi)}i=1N 是独立同分布(i.i.d.)从 \(P\) 中采样的训练数据。
泛化差距(generalization gap)定义为:
Δ(f)=R(f)−R^(f) \Delta(f) = R(f) - \hat{R}(f) Δ(f)=R(f)−R^(f)
学习的目标是使泛化误差 R(f)R(f)R(f) 尽可能小,而不仅仅是经验风险 R^(f)\hat{R}(f)R^(f) 小。
4.2 泛化误差上界
对于有限假设集 F={f1,f2,…,fd}\mathcal{F} = \{f_1, f_2, \ldots, f_d\}F={f1,f2,…,fd}(包含 ddd 个假设),基于霍夫丁不等式(Hoeffding’s inequality)可以推导出泛化误差上界。
以至少 1−δ1-\delta1−δ 的概率(δ∈(0,1)\delta \in (0,1)δ∈(0,1) 为置信参数),对于任意 f∈Ff \in \mathcal{F}f∈F 满足:
R(f)≤R^(f)+ϵ(d,N,δ)(4.3) R(f) \leq \hat{R}(f) + \epsilon(d, N, \delta) \tag{4.3} R(f)≤R^(f)+ϵ(d,N,δ)(4.3)
其中泛化误差上界项为:
ϵ(d,N,δ)=12N(logd+log1δ)(4.4) \epsilon(d, N, \delta) = \sqrt{\frac{1}{2N} \left( \log d + \log \frac{1}{\delta} \right)} \tag{4.4} ϵ(d,N,δ)=2N1(logd+logδ1)(4.4)
关键洞察
-
训练误差项 R^(f)\hat{R}(f)R^(f):越小越好,反映模型在训练数据上的拟合程度。
-
复杂度惩罚项 ϵ(d,N,δ)\epsilon(d, N, \delta)ϵ(d,N,δ):
- 与假设空间大小 ddd 正相关:ddd 越大(模型越复杂),泛化误差上界越大,过拟合风险越高
- 与训练数据量 NNN 负相关:NNN 越大,泛化误差上界越小,模型泛化能力越强
- 与置信水平 1−δ1-\delta1−δ 相关:要求更高的置信度(更小的 δ\deltaδ)会导致上界略微增大
-
偏差-方差权衡:
- 简单模型(小 ddd):偏差高,方差低,泛化误差上界小但训练误差可能大
- 复杂模型(大 ddd):偏差低,方差高,训练误差小但泛化误差上界大
-
样本复杂度:要使泛化误差上界小于某个值 ϵ\epsilonϵ,所需的最小样本数约为:
N≥12ϵ2(logd+log1δ) N \geq \frac{1}{2\epsilon^2} \left( \log d + \log \frac{1}{\delta} \right) N≥2ϵ21(logd+logδ1)
这个理论结果为模型选择提供了指导:在保证训练误差足够小的同时,应选择复杂度适中的假设空间。
5. 模型分类体系
5.1 判别模型 vs. 生成模型
| 特性 | 判别模型 | 生成模型 |
|---|---|---|
| 建模对象 | 条件概率 $p(y | x)$ 或直接映射 y=f(x)y=f(x)y=f(x) |
| 学习目标 | 直接学习决策边界 | 学习数据生成过程 |
| 预测方式 | 直接预测标签 | 通过贝叶斯公式计算: $$p(y |
| 优点 | 通常预测性能更高 易于定义特定特征依赖 |
能探索数据分布 支持生成新样本 受益于隐变量建模 |
| 典型算法 | 线性回归、逻辑回归、SVM、决策树、神经网络 | 朴素贝叶斯、隐马尔可夫模型、高斯混合模型、LDA |
5.2 参数化模型 vs. 非参数化模型
| 特性 | 参数化模型 | 非参数化模型 |
|---|---|---|
| 基本假设 | 对数据分布有先验假设 | 对数据分布无先验假设 |
| 参数空间 | 固定维度的参数空间 | 参数数量随数据增加 |
| 知识存储 | 知识编码在参数中 | 知识存储于训练数据本身 |
| 模型复杂度 | 固定,不随数据变化 | 随数据量增加而增加 |
| 典型算法 | 线性模型、逻辑回归、神经网络 | K近邻、决策树、随机森林 |
6. 机器学习发展历程与趋势
6.1 历史演进
- 1950s:Arthur Samuel提出"机器学习"术语,开发跳棋程序
- 1960s:感知机、模式识别兴起,但Minsky和Papert揭示其局限性
- 1970s:符号学习、专家系统、ID3决策树算法
- 1980s:神经网络复兴(反向传播)、PAC学习理论、实验方法重视
- 1990s:支持向量机、核方法、贝叶斯网络、集成学习
- 2000s:图模型、统计关系学习、迁移学习、结构化输出
- 2010s:深度学习爆发、大数据学习、AlphaGo、多任务学习
- 2020s:大规模预训练模型(GPT-3等)、生成式AI(ChatGPT、DALL-E)、AI for Science
6.2 当前趋势
- 大规模预训练:参数规模达千亿级别
- 多模态学习:文本、图像、语音的联合建模
- 可解释AI:增强模型透明度和可信度
- AI for Science:生物制药、材料发现、科学计算
- 边缘AI:轻量化模型部署到终端设备
7. 总结与学习建议
7.1 机器学习核心要点
- 数据驱动:从数据中自动学习模式,而非手工编写规则
- 泛化优先:关注模型在未见数据上的表现,避免过拟合
- 奥卡姆剃刀:在同等性能下选择更简单的模型
- 交叉验证:可靠的模型评估和选择方法
- 理论指导实践:泛化理论为模型设计提供理论保障
7.2 学习路径建议
- 基础掌握:线性模型、损失函数、梯度下降、正则化
- 核心算法:支持向量机、决策树、神经网络、概率图模型
- 实践技能:数据预处理、特征工程、模型调优、评估指标
- 前沿探索:深度学习、强化学习、生成模型、大语言模型
7.3 关键思维模式
- 从数据中学习而非手工编程
- 平衡偏差与方差的权衡
- 重视泛化能力而非单纯追求训练精度
- 理解算法假设及其适用场景
- 持续实验验证理论直觉
机器学习不仅是算法集合,更是一种解决问题的思维方式——通过数据驱动的方式,让计算机从经验中学习,逐步提升解决复杂问题的能力。
更多推荐




所有评论(0)