美文网首页
Transformer 模型相关疑问以及解答

Transformer 模型相关疑问以及解答

作者: LCG22 | 来源:发表于2019-12-18 14:42 被阅读0次

1、Decoder 部分中的 decoder 的输入是如何的?是一次性给多个输入节点进行输入数据,还是每步只给一个输入节点输入数据呢?

2、X、W_{q}、W_{k}、W_{v}、X_{encoder}、Q、K、V 的维度是怎么样的?中间产物的维度又是怎么样的?

注:此处不考虑位置编码

注:此处的 X 表示的是一个批次的样本,而 X_{i} 表示第 i 个样本 

注:X_{encoder} 指的是 Encoder 中 encoder 层的所有输出节点的输出值

设:

batch_size:一个批次里的样本数

sequence_length:句子序列中的元素个数

embedding_size:词向量的大小

hidden_size:Encoder 中 encoder 的节点数

维度表示格式如下:

张量名:[维度 1, 维度 2, ..., 维度 n] 或 1

注:1 表示常量

则:

X: [batch_size, sequence_length, embedding_size]

W_{q}: [batch_size, embedding_size, hidden_size]

W_{k}: [batch_size, embedding_size, hidden_size]

W_{v}: [batch_size, embedding_size, hidden_size]

Q = XW_{q}: [batch_size, sequence_length, hidden_size]

K = XW_{k}: [batch_size, sequence_length, hidden_size]

V = XW_{v}: [batch_size, sequence_length, hidden_size]

Q_{i} = X_{i}W_{q}: [sequence_length, hidden_size]

K_{i} = X_{i}W_{k}: [sequence_length, hidden_size]

V_{i} = X_{i}W_{v}: [sequence_length, hidden_size]

\alpha  = \frac{QK^T}{\sqrt{d_{k}} } : [batch_size, sequence_length, sequence_length]

X_{encoder} = \alpha V: [batch_size, sequence_length, hidden_size] 

或 

X_{encoder_{i}} = \sum_{i}^s \alpha _{i}V: [batch_size, sequence_length]

注:X_{encoder_{i}} 表示的是某个 encoder 层的第 i 个输出节点的输出值

3、Transformer 为什么需要多头机制?

个人理解是 Transformer 的多头机制是为了让不同的头关注句子的不同地方,从而能够学习到不同的模式。

但有论文表明,Transformer 的多头结构里,存在大量模式相同的头,仅有少数的几个头跟其它的头的模式不同,故而不同的头是否能够学习到不同的模式,还是头的数量过多,造成了冗余

可参考该文章:为什么Transformer 需要进行 Multi-head Attention?

4、为什么 QK^T 需要除以 \sqrt{d_{k}}  呢?

假设 Q、K 都是 n 维向量(即 \sqrt{d_{k}} ),则展开相乘可得:

QK^T = \sum_{i=1}^nQ_{i} K_{i},而 Q_{i}、k_{i} 被归一化到 [0, 1] 之间,故 Q_{i}K_{i} 的取值范围是 [0, 1],因此 Q_{i}K_{i} 的最大值为 1,故

QK^T = \sum_{i=1}^nQ_{i} K_{i} 的最大值相当于 n 个 1 相加,即等于 n。也就是说 QK^T = \sum_{i=1}^nQ_{i} K_{i} 的最大值等于 Q、K 的维度,最小值则

等于 0 。显然要进行归一化的话,则需要除以 n,这样才能将 [0, n] 归一化到 [0, 1] 。

该文章(transformer中的attention为什么scaled?)则是从两个变量的均值和方差出发,进行推导。但是最后还是要通过计算向量的点积QK^T = \sum_{i=1}^nQ_{i} K_{i} 来求得其最大值 n,然后再除以 n 来进行归一化。

另外该文章还解释了另一个问题,即为什么要进行归一化,因为如果不需要进行归一化的话,自然也就不需要除以 n 了。所以该文章将该问题

分解为了两个子问题:

1、为什么需要进行归一化

2、为什么进行归一化需要除以 n,而不是其他数

子问题 2 在上面已经解释得很好了,因此在此继续解释子问题 1.

首先是因为 QK^T = \sum_{i=1}^nQ_{i} K_{i} 要使用 softmax  进行归一化(注意此处的归一化跟子问题 2 中的归一化是两个操作),故而需要写成

QK^T =softmax( \sum_{i=1}^nQ_{i} K_{i}),由于 softmax 函数的特性,即将大的数进行放大(最大为 1),将小的数进行缩小(最小为 0)。故如果

QK^T = \sum_{i=1}^nQ_{i} K_{i} 的值过大的话,那么经过 softmax 函数的操作后,很有可能变成 1.特别是 QK^T = \sum_{i=1}^nQ_{i} K_{i} 的最大值等于 n,也就是说 Q、K 的维度越大,则 QK^T = \sum_{i=1}^nQ_{i} K_{i} 经过 softmax 操作之后就越有可能接近于 1.

那么为何 softmax 的输出值接近于 1 是不好的呢?

假设 s_output 为 softmax 的输出值,那么

s_output = \frac{e^i}{e^1 + e^2 + ... + e^n}

当 s_output 接近于 1 的时候

s_output \approx \frac{e^i}{e^i + \varepsilon } (\varepsilon  为一个极小的数),那么此时对 s_output 进行求导,s_output 的导数结果为:

s’ = 0 ,即此时的导数等于 0 了。那就是说,当 softmax 的输出值等于 1 的时候,softmax 的梯度为 0 向量,此时无法再使用反向传播,即无法继续训练神经网络了。

注:矩阵形式的 softmax 求导可以参考 邱锡鹏 的 <神经网络与深度学习> 的附录 B 2.4

相关文章

网友评论

      本文标题:Transformer 模型相关疑问以及解答

      本文链接:https://www.haomeiwen.com/subject/gmcenctx.html