深度学习概念介绍
epoch
- 定义:一次epoch指的是所有训练数据被模型完整训练一遍。
- 作用:通常需要多个epoch,让模型多次学习全部数据以提升性能。
- 官网说明:
batch_size
- 定义:每次参数更新时输入模型的数据样本数。
- 作用:影响训练速度、显存占用和模型收敛效果。batch_size越大,训练越快但显存需求越高。
- 官方说明:
step
数据按照 batch_size 来打包,
有1000条数据,batch_size= 10,step=1000/10=100,
1epoch = 100step
一个步长就是完整的一次 前向传播 + 反向传播 更新参数的过程
优化器 (optimization)
机器学习中,梯度下降的时候不一定是固定步长的,学习率可以动态变化,这样更好地找到更优解。
模型训练过程中让我们自己手动实习这种复杂地寻找最优解地方案是不现实的,站在巨人的肩膀上才能看地更远
SGD(随机梯度下降,torch.optim.SGD)
- 原理:每次用一个或一个batch的数据计算梯度,按固定学习率更新参数,可加动量(momentum)。
- 适用:小型数据集、需要精细控制学习率和动量的场景,经典任务。
Adam(torch.optim.Adam)
- 原理:自适应学习率,结合动量和梯度平方的指数加权平均,自动调整每个参数的学习率。
- 适用:大多数深度学习任务,尤其是复杂网络和大数据集,收敛快,调参简单。
token
token 是自然语言处理中“最小的可处理单元”,可以是一个字、一个词、一个子词,甚至一个字符或符号。
- 定义:
- 词(word):如英文的 “hello”、”world”。
- 子词(subword):如 “play”、”##ing”(BERT的WordPiece分词),”un”、”affable”(BPE分词)。
- 字符(character):如 “a”、”你”。
- 特殊符号:如
[CLS]
、[SEP]
、<pad>
。
具体采用哪种方式,由模型的分词器(Tokenizer)和词表(Vocab)决定。
从NLP任务的流程中就可以理解token了
文本 → 分词 → token序列 → token id序列 → 张量 → 模型输入
- 一段文本
I love deep learning!
- **分词 **( Tokenization )
- 按词分词:
["I", "love", "deep", "learning", "!"]
- 按子词分词(如BPE):
["I", "love", "deep", "learn", "ing", "!"]
- 编码 (Token to ID)
每个token查词表,映射为整数id,例如:
["I", "love", "deep", "learning", "!"]
可能对应[101, 2001, 2002, 2003, 102]
张量化(Tensorization)
将id序列转为张量 (tensor),形状如
[batch_size, seq_len]
。模型输入
张量输入模型,进行后续任务(如分类、生成等)。
Q:
1. 为什么有batch_size?
理想情况下,模型每次计算应该是读取所有的数据然后再反向传播,但是 CUDA OUT OF MEMORY
full_batch 情况会占用大量的内存,而且传播速度非常感人。
全量梯度下降 (Batch Gradient Descent) :
每次用全部训练数据(batch_size=full)计算一次梯度,更新一次参数。梯度是全数据的真实均值,无随机性。
随机梯度下降(SGD) :
每次只用一个样本(batch_size=1)计算梯度,更新参数。梯度有较大噪声,更新频繁,具有“随机性”。
训练速度慢,泛化能力强
小批量随机梯度下降(Mini-batch SGD):
每次用一小批数据(batch)计算梯度,兼顾效率和泛化能力。
训练速度快,泛化能力强
方法名称 | 每步用数据量 | 更新频率 | 梯度噪声 | 计算效率 | 内存需求 | 泛化能力 | 常用场景 |
---|---|---|---|---|---|---|---|
Batch Gradient Descent | 全部数据 | 低(每epoch 1次) | 低 | 低 | 高 | 低 | 小数据集,理论分析 |
Stochastic Gradient Descent | 1个样本 | 高(每样本1次) | 高 | 高 | 低 | 高 | 在线学习,实验 |
Mini-batch Gradient Descent | 一小批(如32、128) | 中(每batch 1次) | 中 | 高 | 中 | 高 | 绝大多数深度学习 |