Skip to content

深度学习入门

深度学习(Deep Learning)是机器学习的子领域,使用深层神经网络来学习数据的表示。

什么是深度学习

深度学习 = 有很多层的神经网络

传统机器学习:
数据 → 手工提取特征 → 算法学习 → 结果

                     需要人类专家设计特征

深度学习:
数据 → 神经网络(自动提取特征) → 结果

                         自动学习特征

神经网络基础

一个神经元(Perceptron)

输入 x1, x2, ... → [加权求和 + 激活函数] → 输出 y

例:
y = sigmoid(w1*x1 + w2*x2 + b)

多层神经网络

输入层 → 隐藏层1 → 隐藏层2 → ... → 输出层

层数越多(越深),能学习的特征越复杂

常见网络结构

1. 全连接网络(DNN)

最基础的结构,每层每个神经元都连接到上一层的所有神经元:

输入层 → 隐藏层 → 输出层

适合:简单任务、表格数据
不适合:图像(参数太多)、序列(无顺序感)

2. 卷积神经网络(CNN)

专为图像设计,使用卷积层提取局部特征:

输入图像 → 卷积层 → 池化层 → ... → 全连接层 → 输出

经典模型:
- AlexNet(2012,深度学习爆发)
- VGGNet(2014)
- ResNet(2015,残差连接)
python
# 用 PyTorch 写一个简单 CNN
import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
        self.fc = nn.Linear(64 * 28 * 28, 10)

    def forward(self, x):
        x = nn.ReLU()(self.conv1(x))
        x = nn.ReLU()(self.conv2(x))
        x = x.view(x.size(0), -1)
        return self.fc(x)

3. 循环神经网络(RNN/LSTM)

处理序列数据(文本、时间序列):

问题:全连接网络无法处理变长输入

RNN 解决:有"记忆"(隐藏状态)
LSTM 解决:RNN 的梯度消失问题

4. Transformer(当前主流)

彻底改变了 NLP,也成为多模态的基础:

核心机制:Attention(注意力)
论文:Attention is All You Need(2017)

优势:
- 并行计算(比 RNN 快)
- 长距离依赖(比 RNN 好)
- 可扩展(模型越大效果越好)

应用:
- GPT(Decoder-only)
- BERT(Encoder-only)
- T5(Encoder-Decoder)

深度学习框架

框架特点适合人群
PyTorch灵活,学术圈主流研究、学习
TensorFlow工业部署强生产环境
JAX谷歌出品,速度快高性能计算
Keras高级 API,简单易用入门

训练神经网络

训练流程

1. 前向传播(Forward):输入 → 模型 → 预测值
2. 计算损失(Loss):预测值 vs 真实值
3. 反向传播(Backward):计算梯度
4. 更新参数(Optimizer):w = w - lr * gradient
5. 重复 1-4(多个 Epoch)

损失函数

分类:Cross Entropy Loss
回归:MSE(均方误差)

优化器

SGD(随机梯度下降):基础,慢
Adam:默认选择,自适应学习率
AdamW:Adam + 权重衰减(推荐)

深度学习的三要素

1. 数据(Data)
   越多越好,质量要高

2. 算力(Compute)
   GPU(NVIDIA)是标配
   TPU(Google)更快

3. 算法(Algorithm)
   模型架构、训练技巧

预训练模型(Transfer Learning)

不需要从零训练,用别人训练好的模型:

python
from transformers import AutoModel, AutoTokenizer

# 加载预训练模型(GPT、BERT 等)
model = AutoModel.from_pretrained("bert-base-chinese")
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

# 在自己的数据上微调(只需少量数据)

学习路线

第 1 步:理解神经网络基础(感知机、反向传播)
第 2 步:动手写一个简单的神经网络(PyTorch)
第 3 步:学 CNN(图像处理)
第 4 步:学 RNN/Transformer(NLP)
第 5 步:直接用预训练模型(Hugging Face)

相关资源