paper: Language Modeling with Gated Convolutional Networks
这篇论文提出了一种基于卷积的语言模型,使用简化的门控机制来提升效率。与传统的循环神经网络(RNN)相比,这种方法可以并行处理序列,从而显著降低计算延迟。尽管它是有限上下文模型,但在处理长依赖时依然表现出色,在WikiText-103和Google Billion Words等大规模数据集上取得了优异的表现,是首个能与RNN竞争的非循环方法。
什么是Gated CNN?
Gated CNN的核心思想是使用卷积层代替循环结构。与RNN相比,卷积层的计算可以并行,这让Gated CNN能够更快地处理长文本。同时,通过堆叠卷积层,模型可以捕捉更大的上下文,尽管它的上下文范围是有限的,但在实践中已证明这种方法可以达到甚至超越RNN的表现。
Gated CNN的工作原理
Gated CNN的基本流程如下:
词嵌入表示:首先,输入句子中的每个词都会被表示为一个词向量(word embedding)。这个向量包含了词的语义信息,是模型理解上下文的基础。
卷积操作与门控:词向量作为输入,经过多层卷积操作。在每一层卷积中,输出门会为每个词分配权重,用于控制信息的传递强度。卷积层的输出会根据输出门的权重进行筛选,只有重要的信息才能被有效地传递到下一层。
叠加卷积层:通过多层卷积的叠加,模型能够扩展感受野,从而在有限的卷积层中捕捉较大的上下文信息。这个过程相当于从局部到全局的逐步理解,使模型不仅能关注到邻近的词,还能感知到整个句子结构。
残差连接:为了保证信息传递的稳定性,Gated CNN引入了残差连接(Residual Connection),即每一层的输入都会直接添加到输出中,避免信息在多层传递过程中丢失。残差连接的存在可以提高模型的深度和稳定性。
自适应Softmax:在最后的输出层,Gated CNN使用了一种改进的softmax函数——自适应softmax。自适应softmax会根据词的频率调整计算资源的分配,为高频词分配更多容量,为低频词分配更少容量。这一改进有效降低了内存需求,并加快了训练和测试的速度。
h l ( X ) = ( X ∗ W + b ) ⊙ σ ( X ∗ V + c ) h_l(X) = (X \ast W + b) \odot \sigma(X \ast V + c) hl(X)=(X∗W+b)⊙σ(X∗V+c)
其中:
- X X X 是输入特征图,表示每层的输入数据;
- W W W和 V V V是可学习的卷积核参数,控制不同特征的生成;
- b b b 和 c c c是偏置项;
-
σ
\sigma
σ是 sigmoid 函数,将输出压缩到 0 到 1 之间,公式为:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1 - ∗ \ast ∗ 表示卷积操作;
- ⊙ \odot ⊙表示逐元素乘积,用来实现门控机制。
Gated Linear Unit(GLU)VS Gated Tanh Unit(GTU)
Gated CNN采用了门控线性单元(Gated Linear Unit, GLU)而不是传统的门控 Tanh 单元(Gated Tanh Unit, GTU)。GLU不使用 tanh 函数,而直接使用 𝑋 本身。因为tanh会将信息压缩到 -1 到 1 的范围,这会导致多层叠加时信息逐渐消失。而GLU通过直接使用 𝑋保持了信息的强度,帮助梯度在多层间稳定地传播。
举例说明
首先
将每个词转换为向量表示(词嵌入)。假设每个词被嵌入到一个 4 维向量空间中。句子中的词变成以下形式:
“我” →
[
0.2
,
0.5
,
0.1
,
0.3
]
[0.2, 0.5, 0.1, 0.3]
[0.2,0.5,0.1,0.3]
“喜欢” →
[
0.6
,
0.7
,
0.2
,
0.5
]
[0.6, 0.7, 0.2, 0.5]
[0.6,0.7,0.2,0.5]
“喝” →
[
0.3
,
0.4
,
0.9
,
0.2
]
[0.3, 0.4, 0.9, 0.2]
[0.3,0.4,0.9,0.2]
“咖啡” →
[
0.8
,
0.3
,
0.7
,
0.6
]
[0.8, 0.3, 0.7, 0.6]
[0.8,0.3,0.7,0.6]
将这些词嵌入组合起来,我们得到输入矩阵 X X X:
X = [ 0.2 0.5 0.1 0.3 0.6 0.7 0.2 0.5 0.3 0.4 0.9 0.2 0.8 0.3 0.7 0.6 ] X = \begin{bmatrix} 0.2 & 0.5 & 0.1 & 0.3 \\ 0.6 & 0.7 & 0.2 & 0.5 \\ 0.3 & 0.4 & 0.9 & 0.2 \\ 0.8 & 0.3 & 0.7 & 0.6 \end{bmatrix} X= 0.20.60.30.80.50.70.40.30.10.20.90.70.30.50.20.6
步骤 2:卷积操作与门控机制
每一层中,模型会对 X X X 进行卷积操作,并通过门控机制选择性地传递信息。
假设我们在卷积层有两个卷积核 W W W 和 V V V,分别用于生成主要特征和门控信号:
卷积核
W
W
W 用于提取主要特征。假设
W
W
W 的大小为
2
×
4
2 \times 4
2×4。
卷积核
V
V
V 用于生成门控信号。同样假设
V
V
V 的大小为
2
×
4
2 \times 4
2×4。
步骤 3: 卷积生成特征图:
使用
W
W
W 卷积
X
X
X,加上偏置项
b
b
b,生成主要特征图:
X
∗
W
+
b
X * W + b
X∗W+b。
使用
V
V
V 卷积
X
X
X,加上偏置项
c
c
c,生成门控信号:
X
∗
V
+
c
X * V + c
X∗V+c。
4. 门控机制:将门控信号通过 sigmoid 函数压缩到 0 到 1 之间:
σ ( X ∗ V + c ) \sigma(X * V + c) σ(X∗V+c)
然后对主要特征和门控信号逐元素相乘,实现选择性信息传递:
h l ( X ) = ( X ∗ W + b ) ⊙ σ ( X ∗ V + c ) h_l(X) = (X * W + b) \odot \sigma(X * V + c) hl(X)=(X∗W+b)⊙σ(X∗V+c)
假设我们得到了以下结果:
主要特征图
X
∗
W
+
b
X * W + b
X∗W+b:
[
0.5
0.8
0.3
0.7
]
\begin{bmatrix} 0.5 & 0.8 \ 0.3 & 0.7 \end{bmatrix}
[0.50.8 0.30.7]
门控信号
σ
(
X
∗
V
+
c
)
\sigma(X * V + c)
σ(X∗V+c):
[
0.9
0.1
0.7
0.8
]
\begin{bmatrix} 0.9 & 0.1 \ 0.7 & 0.8 \end{bmatrix}
[0.90.1 0.70.8]
则输出
h
l
(
X
)
h_l(X)
hl(X) 为:
h l ( X ) = [ 0.5 × 0.9 0.8 × 0.1 0.3 × 0.7 0.7 × 0.8 ] = [ 0.45 0.08 0.21 0.56 ] h_l(X) = \begin{bmatrix} 0.5 \times 0.9 & 0.8 \times 0.1 \\ 0.3 \times 0.7 & 0.7 \times 0.8 \end{bmatrix} = \begin{bmatrix} 0.45 & 0.08 \\ 0.21 & 0.56 \end{bmatrix} hl(X)=[0.5×0.90.3×0.70.8×0.10.7×0.8]=[0.450.210.080.56]
5.堆叠卷积层(层次化的上下文捕捉)
堆叠卷积层的主要目的是通过逐层扩展感受野(即模型感知上下文的范围),从而逐步捕捉整个句子的上下文信息。在每一层中,模型会卷积输入特征并经过门控机制进行筛选。
假设我们堆叠了 3 层卷积,每层的感受野会逐渐增加:
第 1 层卷积:该层卷积只能捕捉到局部上下文。对于“我喜欢喝咖啡”这句话,第 1 层可能只能看到相邻的两个词。假设该层输出主要关注“我”和“喜欢”。
第 2 层卷积:这层的感受野扩大了一些,可能能够覆盖整个短语“喜欢喝”。因此,该层能够识别到“喜欢”和“喝”之间的关系,并进一步理解用户在描述一个动作。
第 3 层卷积:随着层数加深,感受野已经扩展到整个句子。此时模型可以关注到完整的句子“我喜欢喝咖啡”的含义,并更好地理解上下文,为下一个词的预测提供更完整的信息。
经过堆叠卷积,模型能够逐层提取特征,从相邻词组到整个句子的理解逐步加深,实现了层次化的上下文捕捉。
6.残差连接
在多层卷积的堆叠过程中,信息传递可能会因为层数的增加而逐渐衰减甚至丢失。为了解决这个问题,Gated CNN 引入了残差连接,也就是说,每层的输出都加入了该层的输入。
7. 自适应Softmax输出
模型的最后一步是通过 Softmax 层 来计算每个词的概率,输出最有可能的下一个词。但对于像语言模型这样的大词汇量任务,标准 Softmax 的计算成本很高,因为它需要为每个词计算概率。
自适应 Softmax 是一种改进的 Softmax 方法,它将词汇按出现频率分成不同的组:
高频词(如“的”、“是”、“在”)分配更多计算资源,因为它们在训练和预测中出现频率更高。
低频词(如“珊瑚礁”、“阿尔茨海默”)分配较少计算资源,从而节省内存和计算量。
在我们的例子中,假设我们有以下词汇预测候选:
高频词:如“茶”、“糖”
中频词:如“牛奶”
低频词:如“奶昔”
自适应 Softmax 会将“茶”和“糖”分配更多资源,以更快计算其概率。对于“奶昔”这种低频词,自适应 Softmax 会减少分配的计算资源,因此在大词汇量的情况下仍能保持较快的处理速度。
Gated CNN的优势
- 并行计算:卷积网络天然支持并行化,这让Gated CNN的训练速度远超RNN。在处理长文本时,Gated CNN可以同时处理多个词,大大提升了计算效率。
- 层次化信息筛选:通过输出门的选择性传递,Gated CNN能够从多层卷积中筛选出最重要的信息,避免冗余内容的传递。
- 减轻梯度消失问题:门控机制不仅带来了非线性能力,还提供了信息传递的直接路径,减轻了多层模型中的梯度消失问题。
- 低内存需求:自适应softmax对不同频率的词进行区别对待,为高频词分配更多的计算资源,降低了模型的计算量和内存占用。