1、Decoder 部分中的 decoder 的输入是如何的?是一次性给多个输入节点进行输入数据,还是每步只给一个输入节点输入数据呢?
2、X、、Q、K、V 的维度是怎么样的?中间产物的维度又是怎么样的?
注:此处不考虑位置编码
注:此处的 X 表示的是一个批次的样本,而 表示第 i 个样本
注: 指的是 Encoder 中 encoder 层的所有输出节点的输出值
设:
batch_size:一个批次里的样本数
sequence_length:句子序列中的元素个数
embedding_size:词向量的大小
hidden_size:Encoder 中 encoder 的节点数
维度表示格式如下:
张量名:[维度 1, 维度 2, ..., 维度 n] 或 1
注:1 表示常量
则:
X: [batch_size, sequence_length, embedding_size]
: [batch_size, embedding_size, hidden_size]
: [batch_size, embedding_size, hidden_size]
: [batch_size, embedding_size, hidden_size]
Q = : [batch_size, sequence_length, hidden_size]
K = : [batch_size, sequence_length, hidden_size]
V = : [batch_size, sequence_length, hidden_size]
= : [sequence_length, hidden_size]
= : [sequence_length, hidden_size]
= : [sequence_length, hidden_size]
: [batch_size, sequence_length, sequence_length]
: [batch_size, sequence_length, hidden_size]
或
: [batch_size, sequence_length]
注: 表示的是某个 encoder 层的第 i 个输出节点的输出值
3、Transformer 为什么需要多头机制?
个人理解是 Transformer 的多头机制是为了让不同的头关注句子的不同地方,从而能够学习到不同的模式。
但有论文表明,Transformer 的多头结构里,存在大量模式相同的头,仅有少数的几个头跟其它的头的模式不同,故而不同的头是否能够学习到不同的模式,还是头的数量过多,造成了冗余
可参考该文章:为什么Transformer 需要进行 Multi-head Attention?
4、为什么 需要除以 呢?
假设 Q、K 都是 n 维向量(即 ),则展开相乘可得:
,而 被归一化到 [0, 1] 之间,故 的取值范围是 [0, 1],因此 的最大值为 1,故
的最大值相当于 n 个 1 相加,即等于 n。也就是说 的最大值等于 Q、K 的维度,最小值则
等于 0 。显然要进行归一化的话,则需要除以 n,这样才能将 [0, n] 归一化到 [0, 1] 。
该文章(transformer中的attention为什么scaled?)则是从两个变量的均值和方差出发,进行推导。但是最后还是要通过计算向量的点积 来求得其最大值 n,然后再除以 n 来进行归一化。
另外该文章还解释了另一个问题,即为什么要进行归一化,因为如果不需要进行归一化的话,自然也就不需要除以 n 了。所以该文章将该问题
分解为了两个子问题:
1、为什么需要进行归一化
2、为什么进行归一化需要除以 n,而不是其他数
子问题 2 在上面已经解释得很好了,因此在此继续解释子问题 1.
首先是因为 要使用 softmax 进行归一化(注意此处的归一化跟子问题 2 中的归一化是两个操作),故而需要写成
,由于 softmax 函数的特性,即将大的数进行放大(最大为 1),将小的数进行缩小(最小为 0)。故如果
的值过大的话,那么经过 softmax 函数的操作后,很有可能变成 1.特别是 的最大值等于 n,也就是说 Q、K 的维度越大,则 经过 softmax 操作之后就越有可能接近于 1.
那么为何 softmax 的输出值接近于 1 是不好的呢?
假设 s_output 为 softmax 的输出值,那么
s_output =
当 s_output 接近于 1 的时候
s_output ( 为一个极小的数),那么此时对 s_output 进行求导,s_output 的导数结果为:
s’ = 0 ,即此时的导数等于 0 了。那就是说,当 softmax 的输出值等于 1 的时候,softmax 的梯度为 0 向量,此时无法再使用反向传播,即无法继续训练神经网络了。
注:矩阵形式的 softmax 求导可以参考 邱锡鹏 的 <神经网络与深度学习> 的附录 B 2.4
网友评论