深度学习中的序列建模与模型训练
立即解锁
发布时间: 2025-09-02 01:02:25 阅读量: 9 订阅数: 9 AIGC 

### 深度学习中的序列建模与模型训练
#### 1. 序列建模概述
在许多应用场景中,如机器翻译、文本分类、语音识别和时间序列预测等,序列数据极为常见。为了处理这类数据,研究人员设计了不同的神经网络,主要包括循环神经网络(RNNs)和最新的Transformer网络。
#### 2. 循环神经网络及其变体
##### 2.1 循环神经网络(RNN)
处理序列数据的主要挑战在于序列长度的多变性,这使得前馈神经网络难以应对。RNN通过参数共享的方式,使用同一组参数处理序列不同位置的输入。
以句子分类为例,对于包含n个单词的句子$(x(1), x(2), \cdots, x(n))$,RNN在每个位置t通过递归函数计算隐藏状态$h(t)$:
$h(t) = f (h(t−1), x(t); θ)$
其中,$θ$是RNN的参数,与位置t无关,在句子的所有位置共享。展开这个方程可得:
$h(t) = f (f (f (h(t−3), x(t−2); θ), x(t−1); θ), x(t); θ) = f (f (f (\cdots f (f (f (h(0), x(1); θ), x(2); θ), x(3); θ), \cdots, x(t−1); θ), x(t); θ)$
$h(t)$编码了直到位置t的单词信息,$h(n)$则编码了整个句子的信息。
一个简单的递归函数实现为:
$h(t) = f (h(t−1), x(t); θ) = σ(Whhh(t−1) + Wxhx(t) + b)$
其中,$θ = (Whh, Wxh, b)$,$b$是偏置向量,$σ()$是激活函数,$Wxh$是输入到隐藏连接的权重矩阵,$Whh$是隐藏到隐藏递归连接的权重矩阵。
对于句子分类任务,使用最后一个隐藏状态$h(n)$作为整个句子的表示,并通过另一个权重矩阵$Why$连接到输出节点$y(n)$:
$y(n) = Whyy(n) + c$
可以使用$softmax()$函数将输出$y(n)$转换为概率分布。
对于一些句子建模任务,如语言建模和词性标注,需要为句子中的每个单词/标记预测一个标签,通过将每个隐藏状态连接到一个输出节点来实现:
$y(t) = Whyy(t) + c$
可以通过添加更多隐藏层得到深度RNN。
然而,训练RNN尤其是处理长句子/序列时存在困难,因为梯度在多步传播中容易消失(当$Whh$的最大绝对特征值小于且不接近1时)或爆炸(当$Whh$的最大绝对特征值大于且不接近1时),这被称为长期依赖挑战。为解决这一挑战,引入了多种RNN变体,其中长短期记忆网络(LSTM)和门控循环单元(GRU)最为流行。
##### 2.2 RNN处理不同任务的结构对比
| 任务类型 | 结构特点 |
| ---- | ---- |
| 句子分类 | 使用最后隐藏状态$h(n)$作为句子表示,连接到输出节点 |
| 语言建模和词性标注 | 将每个隐藏状态连接到输出节点,为每个单词/标记预测标签 |
#### 3. 编码器 - 解码器架构
##### 3.1 基本概念
序列到序列(seq2seq)学习是序列建模的一种特定任务,它以一个序列作为输入并输出另一个序列,涵盖了许多现实世界的问题,如机器翻译、文本摘要、问答系统等。与词性标注不同,seq2seq中输入和输出序列通常长度不同,且输入和输出序列中的标记没有很好的对齐。
编码器 - 解码器架构是seq2seq学习中广泛使用且占主导地位的方法,它主要由两个主要组件组成:
- 编码器RNN:将输入序列编码为一个固定大小的向量,然后将其作为上下文传递给解码器。
- 解码器RNN:以该上下文为输入,从左到右逐个生成单词序列。
数学上,编码器的公式为:
$h(t) = RNN(h(t−1), x(t); θen)$
解码器的公式为:
$s(t) = RNN(s(t−1), y(t); θde)$
其中,$θen$和$θde$分别是编码器RNN和解码器RNN的参数,通常将$h(0)$设为零向量,$s(0) = C$。
##### 3.2 注意力机制的引入
基本编码器 - 解码器架构的一个明显限制是将任何句子编码为固定大小的表示,解码器仅以此表示为输入,难以捕捉长或复杂句子的所有语义。为解决这一限制,引入了注意力机制。
解码器位置i的隐藏状态$s(i)$的生成依赖于三个信息:
$s(i) = RNN(s(i−1), y(i−1), C(i))$
其中,$C(i)$是位置i的专用上下文向量,由注意力模块通过编码器隐藏表示的线性组合生成:
$C(i) = \sum_{j}αi,jh(j)$
$αi,j$是注意力权重,表示解码器隐藏状态$s(i)$应关注编码器隐藏步骤$h(j)$的程度。一种流行的计算注意力权重的方法是:
$αi,j = softmaxj(\frac{q(i) · k(j)}{\sqrt{dK}})$
其中,$dK$是键向量的维度,对查询和键向量的点积进行$\sqrt{dK}$归一化有助于稳定训练过程中的梯度。
#### 4. Transformer网络
##### 4.1 架构概述
Transformer是最先进的编码器 - 解码器架构,最初用于神经机器翻译和其他语言生成任务,随后扩展到许多其他领域。它放弃了RNN中的循环操作,完全采用注意力机制。
编码器由N个相同的层(但参数不同)堆叠而成,每层由两个子层组成:多头自注意力子层和简单的位置全连接前馈网络,并在每个子层周围采用残差连接和层归一化。
解码器的整体结构与编码器非常相似,但有两个区别:一是插入了第三个子层,对编码器的最终输出执行多头注意力;二是在自注意力子层中添加了掩码,使得位置i的隐藏状态和最终输出仅依赖于其前面的位置,而不依赖于未来位置。
##### 4.2 多头自注意力机制
自注意力函数以向量序列$a(1), a(2), \cdots, a(n)$为输入,输出另一个向量序列$b(1), b(2), \cdots, b(n)$,具体步骤如下:
1. 引入三个参数矩阵$W^Q$、$W^K$和$W^V$,将每个输入向量$a(i)$映射为查询向量$q(i)$、键向量$k(i)$和值向量$v(i)$:
$q(i) = W^Qa(i)$
$k(i) = W^Ka(i)$
$v(i) = W^Va(i)$
2. 使用查询和键向量计算注意力权重:
$αi,j = softmaxj(\frac{q(i) · k(j)}{\sqrt{dK}})$
3. 通过注意力权重对值向量进行线性组合得到输出向量$b(i)$:
$b(i) = \sum_{j}αi,j v(j)$
为简化表示,将自注意力函数表示为:
$B = Attention(W^QA, W^KA, W^VA)$
其中,矩阵A的第i列是$a(i)$,矩阵B的第j列是$b(j)$。
一组$(W^Q, W^K, W^V)$矩阵称为一个注意力头,Transformer中的每个自注意力子层有多个具有不同参数的头,并将多个头的输出拼接起来。
Transformer网络在多个方面优于RNN:避免了梯度消失/爆炸问题,更易于训练;训练可以并行化,效率更高;在参数数量相似的模型中,准确性更好。因此,Transformer网络逐渐取代RNN,成为自然语言任务中占主导地位的模型架构。
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(输入序列):::process --> B(编码器):::process
B --> C(固定大小向量):::process
C --> D(解码器):::process
D --> E(输出序列):::process
B -.-> F(注意力机制):::process
F --> D
```
以上是关于深度学习中序列建模的相关内容,涵盖了RNN及其变体、编码器 - 解码器架构和Transformer网络的原理和特点。接下来将介绍训练深度模型的相关内容。
### 深度学习中的序列建模与模型训练
#### 5. 训练深度模型
##### 5.1 训练目标与挑战
深度学习中,训练深度神经网络的目标是通过最小化损失函数(或最大化奖励函数)$J(θ)$来找到一组网络参数$θ$,损失函数定义在训练样本集$D$上:
$J(θ) = \frac{1}{|D|}\sum_{(x,y)∈D}l(f (x; θ), y)$
其中,$f (; θ)$是由参数$θ$指定的网络,$l(f (x; θ), y)$是定义在输入$x$和期望输出$y$的数据对上的损失。
在最小化$J(θ)$时,面临以下挑战:
- 训练数据规模通常很大,如数百万甚至数十亿个样本,梯度下降方法效率低下且难以承受。
- 损失$J(θ)$高度非凸,因为深度神经网络具有高度非线性,很难找到全局最小值。
- 深度网络的参数可能多达数百万甚至数十亿,通常远多于训练样本数量,容易导致过拟合,即模型在训练数据上表现良好,但在测试新样本时表现不佳。
##### 5.2 随机梯度下降(SGD)
为解决训练数据规模大的问题,深度学习中广泛采用随机梯度下降(SGD)及其变体。与传统梯度下降不同,SGD在每次迭代中遵循随机选择的小批量数据的梯度。SGD算法的详细步骤如下:
**算法1:随机梯度下降算法**
1. 输入学习率$γ_1, γ_2, \cdots$和初始模型参数$θ$。
2. $t = 1$
3. 重复以下步骤:
- 采样一个包含$m$个训练样本的小批量$B_t$。
- 计算小批量上的梯度$g_t = \frac{1}{m}\nabla_θ\sum_{(x,y)∈B_t}l(f (x; θ), y)$。
- 更新模型$θ ← θ - γ_tg_t$。
- $t = t + 1$
4. 直到收敛
为确保SGD算法收敛到局部最小值,应随时间逐渐减小学习率$γ_t$。保证SGD收敛的充分条件是:
$\sum_{t=1}^{\infty}γ_t = \infty$且$\sum_{t=1}^{\infty}γ_t^2 < \infty$
在实践中,有多种学习率调度方法:
- 每$n$次迭代降低学习率,例如每100个小批量将学习率乘以0.5。
- 如果验证损失在一定数量的小批量内没有下降,则降低学习率,例如如果验证损失在10个小批量内没有下降,则将学习率乘以0.1。
- 线性降低学习率:$γ_t = (1 - \frac{t}{τ})γ_0 + \frac{t}{τ}γ_τ$,迭代$τ$次后,学习率固定为$γ_τ$。
- 指数降低学习率:$γ_t = γ_0 exp(-kt)$,其中$k$是常数。
此外,还提出了许多SGD的变体来改进它,如动量SGD、Nesterov加速SGD、AdaGrad、AdaDelta、Adam等。选择哪种优化器取决于任务和神经网络的架构。
| 学习率调度方法 | 描述 |
| ---- | ---- |
| 每n次迭代降低 | 每n个小批量将学习率乘以固定系数 |
| 验证损失不下降降低 | 验证损失在一定小批量内无下降时乘以固定系数 |
| 线性降低 | 按线性函数$γ_t = (1 - \frac{t}{τ})γ_0 + \frac{t}{τ}γ_τ$降低 |
| 指数降低 | 按指数函数$γ_t = γ_0 exp(-kt)$降低 |
##### 5.3 正则化
为解决过拟合问题,深度学习中设计并使用了许多正则化策略,包括早停、数据增强、Dropout和惩罚参数范数等。
- **早停**:当出现过拟合时,训练损失会随时间稳定下降,但验证损失在某个时间步开始增加。此时,根据验证损失停止训练过程,即使训练损失仍在下降,这样可以获得验证损失更小的更好模型。
- **数据增强**:通过从原始训练数据或额外的未标记数据创建假数据来增加训练数据。不同的机器学习任务有不同的数据增强方法:
- 计算机视觉任务中,通过对原始训练图像进行随机旋转、调整大小、垂直或水平翻转、裁剪、颜色偏移/白化以及训练图像对的凸组合等方式生成假图像,假图像的标签来自原始图像。
- 自然语言处理任务中,数据加噪是一种通用的数据增强技术,通过替换单词、嵌入、掩码单词、翻转单词或部分句子等方式向训练数据中注入噪声。
- **Dropout**:是一种简单、计算高效且有效的正则化方法。对于每个训练样本或小批量,它随机选择神经网络中的神经元(隐藏和可见),在正向传播中暂时移除这些神经元对下游神经元的贡献,在反向传播中不更新这些被丢弃神经元的权重。Dropout可以看作是许多神经网络的集成,在训练时从指数数量(对于有$n$个神经元的网络为$2^n$)的不同“稀疏”网络中采样,在测试时通过使用一个权重较小的单一未稀疏网络来近似所有这些稀疏网络的预测平均效果,从而显著减少过拟合。DropConnect是Dropout的扩展,从随机丢弃神经元扩展到在训练中丢弃权重。
- **惩罚参数范数**:在传统机器学习中广泛使用的策略。在深度学习中,通过在损失函数中添加模型参数范数的新项$Ω(θ)$来惩罚参数范数,得到正则化损失$\hat{J}(θ)$进行最小化:
$\hat{J}(θ) = J(θ) + αΩ(θ) = \frac{1}{|D|}\sum_{(x,y)∈D}l(f (x; θ), y) + αΩ(θ)$
其中,$α$是超参数,用于权衡两个损失项。不同的范数选择会导致不同的解决方案,L2范数(也称为权重衰减)是最简单和最广泛使用的参数范数惩罚之一:
$Ω(θ) = \frac{1}{2}θ^Tθ = \frac{1}{2}\sum_{i}θ_i^2$
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(训练数据):::process --> B(随机梯度下降):::process
B --> C(参数更新):::process
C --> D(模型评估):::process
D --> E{验证损失是否增加?}:::process
E -->|是| F(早停):::process
E -->|否| B
A -.-> G(数据增强):::process
G --> B
C -.-> H(Dropout):::process
H --> B
C -.-> I(惩罚参数范数):::process
I --> B
```
综上所述,深度学习中的序列建模涵盖了RNN及其变体、编码器 - 解码器架构和Transformer网络等多种模型,而训练深度模型则需要应对大规模数据、非凸损失和过拟合等挑战,通过随机梯度下降及其变体和各种正则化策略可以有效地解决这些问题,从而提高模型的性能和泛化能力。
0
0
复制全文
相关推荐









