人工智能之核心基础 机器学习 第二十章 深度学习入门

人工智能之核心基础 机器学习

第二十章 深度学习入门


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [20.1 深度学习与机器学习的区别与联系](#20.1 深度学习与机器学习的区别与联系)
      • [🧠 核心关系](#🧠 核心关系)
      • [🔍 对比表格](#🔍 对比表格)
      • [✅ 联系与互补](#✅ 联系与互补)
    • [20.2 神经网络基础](#20.2 神经网络基础)
      • [🧩 1. 感知机(Perceptron)--- 神经网络的"原子"](#🧩 1. 感知机(Perceptron)— 神经网络的“原子”)
      • [🧱 2. 多层感知机(MLP)--- 真正的"深度"起点](#🧱 2. 多层感知机(MLP)— 真正的“深度”起点)
      • [⚡ 3. 激活函数(让网络"活"起来!)](#⚡ 3. 激活函数(让网络“活”起来!))
      • [📐 前向传播 vs 反向传播](#📐 前向传播 vs 反向传播)
    • [20.3 深度学习常用框架](#20.3 深度学习常用框架)
      • [🆚 TensorFlow vs PyTorch](#🆚 TensorFlow vs PyTorch)
      • [🧪 PyTorch 快速入门](#🧪 PyTorch 快速入门)
      • [🧪 TensorFlow/Keras 快速入门](#🧪 TensorFlow/Keras 快速入门)
    • [20.4 经典深度学习模型入门](#20.4 经典深度学习模型入门)
      • [🖼️ 1. 卷积神经网络(CNN)--- 图像处理之王](#🖼️ 1. 卷积神经网络(CNN)— 图像处理之王)
        • [为什么需要 CNN?](#为什么需要 CNN?)
        • 核心组件
        • [经典结构(LeNet-5 简化版)](#经典结构(LeNet-5 简化版))
        • 应用场景
      • [📝 2. 循环神经网络(RNN)--- 序列数据专家](#📝 2. 循环神经网络(RNN)— 序列数据专家)
    • [🎯 本章补充:深度学习完整流程](#🎯 本章补充:深度学习完整流程)
      • [🔁 标准训练 Pipeline](#🔁 标准训练 Pipeline)
      • [📊 关键实践技巧](#📊 关键实践技巧)
    • [💻 完整实战:手写数字识别(MNIST)](#💻 完整实战:手写数字识别(MNIST))
      • [PyTorch 实现](#PyTorch 实现)
    • [🎯 本章总结:深度学习入门地图](#🎯 本章总结:深度学习入门地图)
    • [📚 学习路线建议](#📚 学习路线建议)
  • 资料关注

20.1 深度学习与机器学习的区别与联系

🧠 核心关系

  • 深度学习 ⊂ 机器学习 ⊂ 人工智能
  • 深度学习是机器学习的一个子领域 ,专注于多层神经网络

🔍 对比表格

维度 传统机器学习 深度学习
特征工程 需要人工设计特征(如TF-IDF、SIFT) 自动学习特征(端到端)
数据需求 中小规模数据(千~万级) 大规模数据(百万级以上)
计算资源 CPU即可 需要GPU/TPU
可解释性 较高(如决策树、线性模型) 黑盒性强
典型任务 表格数据、简单图像/文本 图像识别、语音、NLP、生成模型
代表算法 SVM、随机森林、逻辑回归 CNN、RNN、Transformer

✅ 联系与互补

  • 深度学习不是取代,而是扩展
    • 小数据 → 用传统ML
    • 大数据 + 高维(图像/语音/文本)→ 用DL
  • 混合系统常见
    • 用CNN提取图像特征 → 用SVM分类
    • 用BERT提取文本特征 → 用XGBoost做预测

💡 一句话总结
机器学习靠"人工特征 + 简单模型",深度学习靠"原始数据 + 复杂模型"


20.2 神经网络基础

🧩 1. 感知机(Perceptron)--- 神经网络的"原子"

结构
  • 输入: x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn
  • 权重: w 1 , w 2 , . . . , w n w_1, w_2, ..., w_n w1,w2,...,wn
  • 偏置: b b b
  • 输出: y = sign ( w 1 x 1 + w 2 x 2 + . . . + w n x n + b ) y = \text{sign}(w_1x_1 + w_2x_2 + ... + w_nx_n + b) y=sign(w1x1+w2x2+...+wnxn+b)
局限
  • 只能解决线性可分问题(如AND、OR)
  • 无法解决异或(XOR)问题

🧱 2. 多层感知机(MLP)--- 真正的"深度"起点

结构
  • 输入层一个或多个隐藏层输出层
  • 每层神经元全连接(Dense Layer)
  • 引入非线性激活函数 → 可拟合任意函数(万能近似定理)

x1,x2
h1,h2,h3
y1,y2


⚡ 3. 激活函数(让网络"活"起来!)

函数 公式 特点 适用场景
Sigmoid σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+e−x1 输出(0,1),可解释为概率 二分类输出层
Tanh tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x 输出(-1,1),零中心 隐藏层(早期)
ReLU ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x) 计算快,缓解梯度消失 现代默认选择
Leaky ReLU LReLU ( x ) = max ⁡ ( 0.01 x , x ) \text{LReLU}(x) = \max(0.01x, x) LReLU(x)=max(0.01x,x) 解决ReLU"死亡"问题 ReLU失效时备用

为什么需要非线性?

如果没有激活函数,多层网络等价于单层线性模型!


📐 前向传播 vs 反向传播

  • 前向传播(Forward Pass):输入 → 输出(用于预测)
  • 反向传播(Backward Pass):计算损失 → 更新权重(用于训练)

核心:链式法则 + 梯度下降


20.3 深度学习常用框架

🆚 TensorFlow vs PyTorch

特性 TensorFlow PyTorch
开发公司 Google Facebook (Meta)
计算图 静态图(TF 2.x 默认动态) 动态图(Eager Execution)
易用性 中等 更Pythonic,调试方便
部署 TF Serving, TFLite 强大 TorchScript, ONNX
研究 vs 工业 工业部署强 学术研究首选

💡 初学者建议从 PyTorch 开始(更直观)


🧪 PyTorch 快速入门

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 1. 张量(Tensor)--- 类似NumPy数组,但支持GPU
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x * 2
z = y.sum()
z.backward()  # 自动求导
print(x.grad)  # 输出: tensor([2., 2., 2.])

# 2. 构建简单神经网络
class SimpleNet(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super().__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)
    
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

# 3. 训练流程
model = SimpleNet(784, 128, 10)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 假设 data_loader 已定义
for images, labels in data_loader:
    images = images.view(images.size(0), -1)  # 展平
    
    # 前向传播
    outputs = model(images)
    loss = criterion(outputs, labels)
    
    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

🧪 TensorFlow/Keras 快速入门

python 复制代码
import tensorflow as tf
from tensorflow import keras

# 1. 构建模型(Sequential API)
model = keras.Sequential([
    keras.layers.Dense(128, activation='relu', input_shape=(784,)),
    keras.layers.Dense(10, activation='softmax')
])

# 2. 编译
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# 3. 训练
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.2)

# 4. 预测
predictions = model.predict(X_test)

Keras 优势几行代码搞定深度学习!


20.4 经典深度学习模型入门

🖼️ 1. 卷积神经网络(CNN)--- 图像处理之王

为什么需要 CNN?
  • 全连接网络参数太多(如 224×224×3 图像 → 15万输入!)
  • 无法利用局部相关性空间不变性
核心组件
组件 作用
卷积层(Conv) 提取局部特征(边缘、纹理等)
池化层(Pooling) 降维 + 平移不变性(MaxPool最常用)
全连接层(FC) 分类头
经典结构(LeNet-5 简化版)
python 复制代码
# PyTorch CNN 示例
class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(64 * 7 * 7, 128)
        self.fc2 = nn.Linear(128, 10)
        self.relu = nn.ReLU()
    
    def forward(self, x):
        x = self.pool(self.relu(self.conv1(x)))  # -> [32, 14, 14]
        x = self.pool(self.relu(self.conv2(x)))  # -> [64, 7, 7]
        x = x.view(-1, 64 * 7 * 7)
        x = self.relu(self.fc1(x))
        x = self.fc2(x)
        return x
应用场景
  • 图像分类(ResNet, EfficientNet)
  • 目标检测(YOLO, Faster R-CNN)
  • 语义分割(U-Net)

📝 2. 循环神经网络(RNN)--- 序列数据专家

为什么需要 RNN?
  • 传统网络无法处理变长序列
  • 忽略时间依赖性(如"不"+"好" ≠ "好"+"不")
核心思想
  • 共享权重 + 隐藏状态传递
  • h t = tanh ( W h h t − 1 + W x x t + b ) h_t = \text{tanh}(W_h h_{t-1} + W_x x_t + b) ht=tanh(Whht−1+Wxxt+b)
问题与改进
问题 解决方案
梯度消失/爆炸 LSTM / GRU
长程依赖弱 Attention 机制
LSTM(长短期记忆)核心
  • 三个门:遗忘门、输入门、输出门
  • 细胞状态:像传送带,信息可长期保留
python 复制代码
# PyTorch LSTM 示例(情感分析)
class LSTMClassifier(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim, num_classes):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, num_classes)
    
    def forward(self, x):
        embedded = self.embedding(x)  # [batch, seq_len] → [batch, seq_len, embed_dim]
        lstm_out, (hidden, _) = self.lstm(embedded)
        # 取最后一个时间步
        last_hidden = hidden[-1]  # [batch, hidden_dim]
        output = self.fc(last_hidden)
        return output
应用场景
  • 文本生成(ChatGPT 前身)
  • 机器翻译(早期Seq2Seq)
  • 时间序列预测(股票、天气)

⚠️ 注意 :现代 NLP 已被 Transformer 主导,但 RNN 仍在某些场景有用(如低资源设备)


🎯 本章补充:深度学习完整流程

🔁 标准训练 Pipeline

原始数据
数据预处理
构建模型
定义损失函数
选择优化器
训练循环
验证/测试
部署

📊 关键实践技巧

技巧 说明
Batch Normalization 加速训练,提升稳定性
Dropout 防止过拟合(训练时随机失活神经元)
学习率调度 初始大学习率 → 后期小学习率
早停(Early Stopping) 验证损失不再下降时停止

💻 完整实战:手写数字识别(MNIST)

PyTorch 实现

python 复制代码
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms

# 1. 数据加载
transform = transforms.Compose([transforms.ToTensor()])
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)

# 2. 定义CNN模型
class MNIST_CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 32, 3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(64 * 7 * 7, 128)
        self.fc2 = nn.Linear(128, 10)
        self.dropout = nn.Dropout(0.5)
    
    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))
        x = self.pool(torch.relu(self.conv2(x)))
        x = x.view(-1, 64 * 7 * 7)
        x = torch.relu(self.fc1(x))
        x = self.dropout(x)
        x = self.fc2(x)
        return x

# 3. 训练
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = MNIST_CNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(5):
    for i, (images, labels) in enumerate(trainloader):
        images, labels = images.to(device), labels.to(device)
        
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if (i+1) % 100 == 0:
            print(f'Epoch [{epoch+1}/5], Step [{i+1}/{len(trainloader)}], Loss: {loss.item():.4f}')

# 4. 测试
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for images, labels in testloader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
    
    print(f'测试准确率: {100 * correct / total:.2f}%')

结果:5个epoch后,准确率通常 >98%!


🎯 本章总结:深度学习入门地图

模块 关键内容
基础概念 MLP、激活函数、前向/反向传播
框架选择 PyTorch(研究)、TensorFlow(部署)
CNN 卷积、池化 → 图像任务
RNN/LSTM 隐藏状态、门控 → 序列任务
训练技巧 Dropout、BN、学习率调度

📚 学习路线建议

  1. 先掌握基础:MLP + MNIST
  2. 进阶CNN:CIFAR-10 → ResNet
  3. 尝试RNN:IMDB情感分析
  4. 拥抱Transformer:BERT、ViT(现代主流)
  5. 动手项目
    • 图像分类(猫狗识别)
    • 文本生成(诗歌、歌词)
    • 风格迁移(艺术滤镜)

🌟 建议
深度学习不是魔法------它是"数据 + 模型 + 算力"的科学组合。
从简单开始,逐步深入,你也能构建AI奇迹!

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
Godspeed Zhao2 小时前
从零开始学AI5——数学应知应会0
人工智能
腾讯云大数据2 小时前
【数据湖仓】腾讯云发布面向AI的数据湖方案:TCLake+EMR打造AI-Ready数据底座
人工智能·云计算·腾讯云
橘子师兄2 小时前
C++AI大模型接入SDK—API接入大模型思路
开发语言·数据结构·c++·人工智能
羞儿2 小时前
mAP, AUOCR, AUPR怎么计算、怎么用
人工智能·计算机视觉·指标计算
DS随心转APP2 小时前
豆包输出word指令
人工智能·ai·chatgpt·deepseek·ds随心转
java1234_小锋2 小时前
【AI大模型面试题】在训练超大规模语言模型(如千亿参数级别)时,除了显存限制,最主要的训练挑战是什么?
人工智能·语言模型·自然语言处理
戴西软件2 小时前
戴西软件发布3DViz设计与仿真数据轻量化平台
大数据·人工智能·安全·机器学习·汽车
码农三叔2 小时前
(4-1)机械传动系统与关节设计:关节驱动方式对比
人工智能·架构·机器人·人形机器人
小汤圆不甜不要钱2 小时前
「Datawhale」RAG技术全栈指南 Task 3
人工智能·深度学习·机器学习·rag