md_files/科研/机器学习.md
2025-03-19 18:16:24 +08:00

144 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 机器学习与深度学习
## 机器学习
### 监督学习
**监督学习Supervised Learning**
- 定义:所有训练数据都具有明确的标签,模型通过这些标签进行学习。
- 特点:模型训练相对直接,性能受限于标注数据的质量和数量。
- 示例:传统的分类问题,如手写数字识别、垃圾邮件检测等。
**无监督学习Unsupervised Learning**
- 定义:训练数据完全没有标签,模型需要自己去发现数据中的模式或结构。
- 特点:常用于聚类、降维、关联规则挖掘等任务,难以直接用于分类任务。
- 示例聚类算法如K-means和主成分分析PCA
**半监督学习Semisupervised Learning**
- **定义**:介于监督学习和无监督学习之间,使用少量带标签的数据和大量未标签的数据共同训练模型,以在标注数据稀缺时提升分类性能。
- **特点**:结合标签信息与数据分布结构,通过利用未标签数据的内在聚类或流形结构降低对标注数据的依赖,从而提高模型泛化能力并降低标注成本;通常依赖平滑假设和聚类假设等前提。
- **示例**:在猫狗图像分类任务中,先使用少量已标记的猫狗图片训练初始模型,再用该模型为大量未标记图片生成“伪标签”,将这些伪标签数据与原有标记数据合并重新训练,从而获得比仅使用有标签数据更高的分类准确率。
- 在半监督学习中,为了避免将错误的模型预测“伪标签”纳入训练,必须对每个未标注样本的预测结果进行可信度评估,**只保留高置信度、准确率更高的伪标签**作为新增训练数据。
## 深度学习
### 前向传播
#### **Mini Batch梯度下降**
**Batch Size批大小**
- 定义
Batch Size 指在深度学习模型训练过程中,每次迭代送入网络进行前向传播和反向传播的样本数量。
- 特点
Batch Size 决定了梯度更新的频率和稳定性;较大的 Batch Size 能更好地利用 GPU 并行计算、减少迭代次数、加快训练速度,但会显著增加显存占用且可能降低模型泛化能力;较小的 Batch Size 则带来更大的梯度噪声,有助于跳出局部最优、提高泛化性能,但训练过程更不稳定且耗时更长。
- 示例:在 PyTorch 中,使用 `DataLoader(dataset, batch_size=32, shuffle=True)` 表示每次迭代从数据集中抽取 32 个样本进行训练。一个batch的所有样本会被**打包成一个张量**,一次性并行送入网络进行计算
将完整训练集分割成若干大小相同的小批量minibatch每次迭代仅使用一个 minibatch 来计算梯度并更新模型参数结合了批量梯度下降Batch GD和随机梯度下降SGD的优势。
-`batch_size=1` 时退化为随机梯度下降;当 `batch_size=m`(训练集总样本数)时退化为批量梯度下降。
- 通常选择 2 的幂如32、64、128、256以匹配 GPU/CPU 内存布局并提升运算效率。
**算法流程**
1. 将训练数据随机打乱并按 `batch_size` 划分成多个 minibatch。
2. 对每个 minibatch 执行:
- 前向传播计算输出。
- 计算 minibatch 上的平均损失。
- 反向传播计算梯度。
- 按公式更新参数:
$$
\theta \leftarrow \theta - \eta \frac{1}{|\text{batch}|}\sum_{i\in \text{batch}} \nabla_\theta \mathcal{L}(x_i,y_i)
$$
3. 遍历所有 minibatch 即完成一个 epoch可重复多轮直到收敛。
#### Softmax 公式
假设有一个输入向量
$$
z = [z_1, z_2, \dots, z_K],
$$
则 softmax 函数的输出为:
$$
\sigma(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}},
$$
其中 $i = 1, 2, \dots, K$。
- **分子**:对每个 $z_i$ 取自然指数 $e^{z_i}$,目的是将原始的实数扩展到正数范围。
- **分母**:对所有 $e^{z_j}$ 求和,从而实现归一化,使得所有输出概率和为 1。
#### 交叉熵损失
假设有三个类别,真实标签为第二类,因此用 one-hot 编码表示为:
$$
y = [0,\; 1,\; 0].
$$
假设模型经过 softmax 后输出的预测概率为:
$$
\hat{y} = [0.2,\; 0.7,\; 0.1].
$$
交叉熵损失函数的定义为:
$$
L = -\sum_{i=1}^{3} y_i \log \hat{y}_i.
$$
将 $y$ 和 $\hat{y}$ 的对应元素代入公式中:
$$
L = -(0 \cdot \log 0.2 + 1 \cdot \log 0.7 + 0 \cdot \log 0.1) = -\log 0.7.
$$
计算 $-\log 0.7$(以自然对数为例):
$$
-\log 0.7 \approx -(-0.3567) \approx 0.3567.
$$
因此,这个样本的交叉熵损失大约为 **0.3567**
### **残差连接**
假设一个神经网络层(或一组层)的输入为 $x$,传统的设计会期望该层直接学习一个映射 $F(x)$。而采用残差连接的设计,则将输出定义为:
$$
\text{Output} = F(x) + x.
$$
这里:
- $F(x)$ 表示经过几层变换(比如卷积、激活等)后所学到的“残差”部分,
- $x$ 则是直接通过捷径传递过来的输入。
**为什么使用残差连接**
1. **缓解梯度消失问题**
在深层网络中,梯度往往会在反向传播过程中逐层衰减,而残差连接为梯度提供了一条捷径,使得梯度可以直接从后面的层传递到前面的层,从而使得网络更容易训练。
2. **简化学习任务**
网络不必学习从零开始构造一个完整的映射,而只需要学习输入与目标之间的残差。这样可以使得学习任务变得更简单,更易收敛。
3. **提高网络性能**
在很多实际应用中(例如图像识别中的 ResNet引入残差连接的网络能训练得更深并在多个任务上取得更好的效果。