机器学习与深度学习基础
1. 课程引言:概览与学习指南
1.1 课程设计背景
随着人工智能技术的快速发展,机器学习与深度学习已成为各行业(如电商、医疗、金融)的核心支撑技术。本课程从基础概念出发,结合实战项目,帮助学习者构建 “理论理解 - 工具使用 - 实际应用” 的完整知识体系,掌握解决真实业务问题的能力。
1.2 课程设计思路
- 循序渐进:从传统机器学习到深度学习,再到强化学习,逐步深入复杂概念
- 理论 + 实战:每个知识点配套代码示例,最终通过实战项目(电商 SKU 卡片生成)串联核心技能
- 问题导向:以实际业务场景(如图像分类、文本摘要)为驱动,理解技术适用边界
1.3 学习建议
- 重视基础概念:如 “损失函数”" 梯度下降 " 等核心概念是后续复杂模型的基础
- 动手实践:PyTorch 代码需逐行调试,理解数据流转逻辑
- 关联应用:思考每个算法在实际业务中的可能场景(如电商中的商品分类、用户评论情感分析)
- 总结对比:同类技术(如不同激活函数、归一化方法)需对比优缺点及适用场景
1.4 实战环境说明
- 开发工具:Python 3.8+、PyTorch 1.10+、Jupyter Notebook
- 依赖库:torchvision(图像处理)、transformers(文本处理)、scikit-learn(评估工具)
- 硬件建议:CPU 可运行基础代码,GPU(如 NVIDIA GTX 1080+)加速深度学习训练
2. 机器学习基础
2.1 常见机器学习任务
机器学习任务按 “是否有标签” 可分为监督学习、无监督学习,此外还有半监督学习、自监督学习等衍生类型。
2.1.1 监督学习
- 核心特点:输入数据包含标签(目标值),模型学习 “输入 - 标签” 的映射关系
- 典型任务:
- 回归:标签为连续值(如房价预测、用户点击率预估)
- 输入:特征(如房屋面积、楼层、地段)
- 输出:连续数值(如房价)
- 分类:标签为离散值
- 二分类:标签只有 2 类(如垃圾邮件识别:“垃圾"vs"正常”)
- 多分类:标签有 3 类及以上(如手写数字识别:0-9 共 10 类)
- 输入:特征(如邮件文本特征、图像像素)
- 输出:类别标签或类别概率
- 回归:标签为连续值(如房价预测、用户点击率预估)
2.1.2 无监督学习
- 核心特点:输入数据无标签,模型从数据中挖掘内在规律(如结构、分布)
- 典型任务:
- 聚类:将相似样本归为一类(如用户分群:根据购买行为划分用户群体)
- 输入:无标签样本(如用户购买记录)
- 输出:簇标签(表示样本所属群体)
- 降维:减少特征维度,保留关键信息(如高维图像特征压缩)
- 输入:高维特征(如 1000 维的图像特征)
- 输出:低维特征(如 200 维的压缩特征)
- 聚类:将相似样本归为一类(如用户分群:根据购买行为划分用户群体)
2.2 常见机器学习算法
| 算法类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 线性回归 | 回归任务(如房价预测) | 简单易解释,训练快 | 只能拟合线性关系,对非线性数据效果差 |
| 逻辑回归 | 二分类任务(如 churn 预测) | 输出概率可解释,计算高效 | 表达能力有限,需手动设计特征 |
| 支持向量机(SVM) | 小样本分类 / 回归 | 泛化能力强,适合高维数据 | 大规模数据训练慢,参数调优复杂 |
| 决策树 | 分类 / 回归(如信贷风控) | 可解释性强,无需特征归一化 | 易过拟合,不稳定(微小数据变化影响大) |
| 随机森林 | 分类 / 回归(工业界常用) | 抗过拟合,性能稳定 | 模型较复杂,解释性弱于单棵决策树 |
| K - 均值(K-Means) | 聚类任务(如用户分群) | 实现简单,适用于大规模数据 | 需预设 K 值,对异常值敏感 |
| 主成分分析(PCA) | 降维(如数据可视化、去噪) | 计算高效,保留主要信息 | 仅保留线性相关信息,解释性有限 |
3. 深度学习核心
3.1 深度学习任务版图
深度学习通过多层神经网络拟合复杂数据分布,已广泛应用于多模态任务:
-
计算机视觉(CV):
- 核心任务:图像分类、目标检测、语义分割、图像生成(如电商商品图分类)
- 代表模型:ResNet、YOLO、Stable Diffusion
-
自然语言处理(NLP):
- 核心任务:文本分类、命名实体识别、机器翻译、文本摘要(如商品描述生成)
- 代表模型:BERT、GPT、T5
-
音频处理:
- 自动语音识别(ASR):语音转文本(如客服语音转工单)
- 文本转语音(TTS):文本合成语音(如商品信息语音播报)
- 代表模型:Wav2Vec、Tacotron
-
多模态学习:
- 核心任务:跨模态检索(图搜文 / 文搜图)、图文生成(如根据商品图生成描述)
- 代表模型:CLIP、DALL・E
3.2 深度学习训练要素
3.2.1 神经网络基础
- 结构:由输入层、隐藏层、输出层组成,层与层之间通过权重(参数) 连接
- 功能:通过权重学习数据特征,实现从输入到输出的映射
3.2.2 激活函数
激活函数为神经网络引入非线性,使其能拟合复杂关系(核心知识点):
| 激活函数 | 公式 | 特点 | 应用场景 |
|---|---|---|---|
| Sigmoid | σ(x)=1/(1+e−x) | 输出在 (0,1),可表示概率;易梯度消失 | 二分类输出层、早期网络隐藏层 |
| Softmax | softmax(xi)=exi/∑exj | 输出和为 1,可表示多类别概率 | 多分类输出层 |
| Tanh | tanh(x)=(ex−e−x)/(ex+e−x) | 输出在 (-1,1),零中心化;仍有梯度消失 | 循环神经网络(RNN)隐藏层 |
| ReLU | ReLU(x)=max(0,x) | 计算快,缓解梯度消失;存在死亡 ReLU | 卷积神经网络(CNN)隐藏层 |
| GELU | GELU(x)=x⋅Φ(x)(Φ为高斯分布 CDF) | 平滑非线性,对噪声鲁棒 | Transformer(如 BERT、GPT) |
3.2.3 损失函数
衡量模型预测与真实标签的差距,是训练的 “优化目标”:
- 回归任务:均方误差(MSE)、平均绝对误差(MAE)
- 分类任务:交叉熵损失(二分类用二元交叉熵,多分类用 categorical 交叉熵)
- 特殊任务:对比损失(用于度量学习)、Dice 损失(用于分割任务)
3.2.4 训练超参数
- 学习率(Learning Rate):控制权重更新幅度(如 0.001),过大会发散,过小会训练慢
- 学习率调度器:动态调整学习率(如 StepLR、CosineAnnealing)
- 批大小(Batch Size):每次迭代输入模型的样本数(如 32、64),影响训练稳定性和速度
- Epoch/Step:
- Epoch:遍历完所有训练数据的次数
- Step:每处理一个批次数据为一个 Step(1 Epoch = 总样本数 / 批大小 个 Step)
- 早停(Early Stopping):当验证集性能不再提升时停止训练,防止过拟合
3.2.5 优化器
用于更新权重以最小化损失函数:
- SGD:随机梯度下降,基础优化器,可加动量(Momentum)加速收敛
- Adam:结合动量和自适应学习率,适用于大多数场景(推荐新手优先使用)
- RMSprop:自适应学习率优化器,适合处理非平稳目标
3.3 正则化与归一化(核心知识点)
3.3.1 正则化:防止过拟合
- L1 正则化:损失函数中加入权重绝对值之和(L1=λ∑∣w∣),会产生稀疏权重(部分权重为 0)
- L2 正则化:损失函数中加入权重平方和(L2=λ∑w2),使权重趋于较小值,更稳定
- Dropout:训练时随机让部分神经元失效(如概率 0.5),迫使网络学习鲁棒特征,测试时恢复所有神经元
3.3.2 归一化:稳定训练
- BatchNorm:对每个批次的特征做归一化(均值 0,方差 1),加速收敛,缓解内部协变量偏移
- 适用:CNN(输入分布较稳定的场景)
- LayerNorm:对单个样本的所有特征做归一化,不依赖批次
- 适用:RNN、Transformer(序列长度可变的场景)
- GroupNorm:将特征分组,对每组做归一化,平衡 BatchNorm 和 LayerNorm
- 适用:小批量数据(如目标检测)
- RMSNorm:基于均方根的归一化,计算更高效
- 适用:大模型(如 GPT 系列)
3.4 数据增强(核心知识点)
通过对原始数据进行变换,扩充数据集,提升模型泛化能力:
-
图像增强:
- 几何变换:随机裁剪、翻转(水平 / 垂直)、旋转、缩放
- 像素变换:颜色抖动(亮度 / 对比度 / 饱和度)、高斯噪声、模糊
- 应用:电商商品图分类(减少拍摄角度、光线对模型的影响)
-
文本增强:
- 同义替换:用同义词替换部分词语(如 “优秀"→"杰出”)
- 回译:将文本翻译成其他语言再译回(如中→英→中)
- 随机插入 / 删除:在文本中插入无关词或删除部分词语
- 应用:商品标题摘要(提升模型对不同表述的鲁棒性)
-
音频增强:
- SpecAugment:在频谱图上随机遮挡部分频率或时间区域
- 噪声注入:加入环境噪声(如背景人声)
- 应用:语音识别(提升在嘈杂环境中的性能)
4. 评估指标与可解释性
4.1 分类任务评估指标
4.1.1 混淆矩阵
二分类混淆矩阵(4 个核心指标):
- TP(True Positive):正例被正确预测为正例
- TN(True Negative):负例被正确预测为负例
- FP(False Positive):负例被错误预测为正例(误报)
- FN(False Negative):正例被错误预测为负例(漏报)
4.1.2 核心指标
- 准确率(Accuracy):(TP+TN)/(TP+TN+FP+FN),整体正确率(不适用于不平衡数据)
- 精确率(Precision):TP/(TP+FP),预测为正例的样本中真实正例的比例(关注 “预测准不准”)
- 召回率(Recall):TP/(TP+FN),真实正例中被正确预测的比例(关注 “漏没漏”)
- F1 分数:精确率和召回率的调和平均(2∗(P∗R)/(P+R)),平衡两者
- ROC-AUC:
- ROC 曲线:以假正例率(FPR=FP/(FP+TN))为横轴,真正例率(TPR=Recall)为纵轴
- AUC:ROC 曲线下面积,衡量模型区分正负例的能力(越接近 1 越好)
- PR-AUC:
- PR 曲线:以召回率为横轴,精确率为纵轴
- 适用于不平衡数据(如罕见疾病检测,正例极少)
4.2 可解释性
- 目的:理解模型决策依据(如 “模型为什么将这个商品归为 ’ 电子产品 '”)
- 方法:
- 模型层面:选择可解释模型(如决策树)
- 事后解释:LIME(局部可解释)、SHAP(基于博弈论,全局解释)
5. 强化学习基础:最小闭环
5.1 MDP 五元组(马尔可夫决策过程)
强化学习的数学框架,包含:
- S:状态空间(如游戏中当前画面)
- A:动作空间(如游戏中的上下左右)
- P:状态转移概率(P(s′∣s,a):在状态s执行动作a后到s′的概率)
- R:奖励函数(R(s,a,s′):从s经a到s′的即时奖励)
- γ:折扣因子(未来奖励的衰减系数,0<γ<1)
5.2 Bellman 递推
- 核心思想:当前状态的价值由即时奖励和未来状态的价值决定
- 状态值函数V(s):V(s)=E[R+γV(s′)∣s]
- 动作值函数Q(s,a):Q(s,a)=E[R+γQ(s′,a′)∣s,a]
5.3 核心方法对比
| 方法 | 核心思路 | 优缺点 | |
|---|---|---|---|
| 值函数(Value-Based) | 学习值函数V(s)或Q(s,a),基于值选动作 | 稳定性好,适合简单环境;难处理连续动作空间 | |
| 策略梯度(Policy Gradient) | 直接学习策略 $\pi (a | s)$,通过梯度上升最大化累积奖励 | 适合连续动作空间;样本效率低,方差大 |
| Actor-Critic | 结合两者:Actor 学策略,Critic 学值函数(指导 Actor 更新) | 平衡稳定性和样本效率;实现较复杂 |
6. 实战:电商 SKU 卡片生成
6.1 任务目标
从电商商品原始数据(多图、长文本描述)生成标准化 SKU 卡片(含分类标签、精简描述、代表性图片)。
6.2 技术流程
-
数据增强:
- 图像:对商品图进行随机裁剪、翻转,扩充训练集
- 文本:对商品长描述做同义替换,提升模型对不同表述的适应性
-
图片分类:
- 任务:将商品图分为预设类别(如 “服装”" 家电 "“食品”)
- 模型:使用预训练 ResNet,冻结部分权重,微调分类头
- 评估:用 F1 分数评估分类性能
-
文本摘要:
- 任务:将长描述压缩为 10-20 字的精简标题
- 模型:使用预训练 T5 模型(“摘要生成” 任务微调)
- 评估:用 ROUGE 分数(文本相似度)评估摘要质量
-
卡片整合:
- 结合分类结果、摘要、增强后的代表性图片,生成 SKU 卡片
6.3 关键代码框架
# 图像增强(PyTorch)
from torchvision import transforms
train_transform = transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(brightness=0.2, contrast=0.2),
transforms.ToTensor()
])
# 图片分类模型(基于ResNet)
import torchvision.models as models
model = models.resnet50(pretrained=True)
model.fc = torch.nn.Linear(model.fc.in_features, num_classes=10) # 10个商品类别
# 文本摘要(基于T5)
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")
input_text = "summarize: " + 商品长描述
inputs = tokenizer(input_text, return_tensors="pt", max_length=512, truncation=True)
outputs = model.generate(inputs["input_ids"], max_length=30, num_beams=4)
summary = tokenizer.decode(outputs[0], skip_special_tokens=True)
7. PyTorch 基础(核心知识点)
7.1 核心概念
-
Tensor:张量(多维数组),PyTorch 的基本数据结构,支持 GPU 加速
import torch x = torch.tensor([[1,2],[3,4]], dtype=torch.float32, device="cuda") # GPU上的2D张量 -
Module:神经网络模块基类,自定义模型需继承并实现
forward方法class SimpleModel(torch.nn.Module): def __init__(self): super().__init__() self.fc = torch.nn.Linear(10, 2) # 输入10维,输出2维 def forward(self, x): return self.fc(x) -
Optimizer:优化器,用于更新模型参数
model = SimpleModel() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # Adam优化器 -
Dataset & DataLoader:数据加载工具
from torch.utils.data import Dataset, DataLoader class MyDataset(Dataset): def __len__(self): return 100 def __getitem__(self, idx): return torch.tensor([idx]), torch.tensor(idx%2) dataloader = DataLoader(MyDataset(), batch_size=32, shuffle=True) # 批量加载数据 -
AMP(自动混合精度):通过混合 float16 和 float32 加速训练,减少内存占用
scaler = torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): outputs = model(inputs) loss = loss_fn(outputs, labels) scaler.scale(loss).backward() # 缩放损失,避免梯度下溢 scaler.step(optimizer) scaler.update()
7.2 核心工作流
- 定义模型(继承 Module)
- 准备数据(Dataset+DataLoader)
- 定义损失函数和优化器
- 训练循环:
- 前向传播(计算输出和损失)
- 反向传播(计算梯度)
- 优化器更新参数
- 验证集评估性能
总结与拓展
本周覆盖了机器学习与深度学习的核心基础,包括任务类型、算法原理、训练要素、评估方法及实战应用。后续学习可重点关注:
- 复杂模型(如 Transformer)的内部结构
- 大规模预训练模型的微调技巧
- 实际业务中的数据清洗与特征工程
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)