首页 > 其他分享 >Transformer/BERT/Attention面试问题与答案

Transformer/BERT/Attention面试问题与答案

时间:2022-11-14 17:37:13浏览次数:42  
标签:BERT Transformer attention Attention 矩阵 768 Embedding

from: https://blog.csdn.net/weixin_40633696/article/details/121810403

文章目录
1. Self-Attention 的核心是什么?
2. 不考虑多头的原因,self-attention中词向量不乘QKV参数矩阵(W Q , W K , W V W_Q,W_K,W_VW
Q

,W
K

,W
V

),会有什么问题?
3. 在常规attention中,一般有k=v,那self-attention 可以嘛?
4. self-attention 在计算的过程中,如何对padding位做mask?
5. self-attention 的时间复杂度是怎么计算的?
6. transformer中multi-head attention中每个head为什么要进行降维?
7. 为什么BERT选择mask掉15%这个比例的词,可以是其他的比例吗?
8. 为什么BERT在第一句前会加一个 [CLS] 标志?
9. 使用BERT预训练模型为什么最多只能输入512个词,最多只能两个句子合成一句?
10. Transformer在哪里做了权重共享,为什么可以做权重共享?
11. BERT非线性的来源在哪里?
12. Transformer的点积模型做缩放的原因是什么?
13. BERT的三个Embedding直接相加会对语义有影响吗?
14. BERT训练时使用的学习率 warm-up 策略是怎样的?为什么要这么做?
15. 深度学习中Attention与全连接层的区别何在?
16. 在BERT应用中,如何解决长文本问题?
本文主要参考知乎作者:海晨威 的文章

1. Self-Attention 的核心是什么?
Self-Attention的核心是用文本中的其它词来增强目标词的语义表示,从而更好的利用上下文的信息。

2. 不考虑多头的原因,self-attention中词向量不乘QKV参数矩阵(W Q , W K , W V W_Q,W_K,W_VW
Q

,W
K

,W
V

),会有什么问题?
self-attention的核心是用文本中的其它词来增强目标词的语义表示,从而更好的利用上下文的信息。

self-attention中,sequence中的每个词都会和sequence中的每个词做点积计算相似度,也包括这个词本身。

对于self-attention,一般会说它的q = k = v q=k=vq=k=v,这里的相等实际上是指它们来自同一个基础向量。但是在实际计算时,它们是不一样的。因为这三者都是乘了W Q , W K , W V W_Q,W_K,W_VW
Q

,W
K

,W
V

矩阵的。如果不乘,每个词对应的q , k , v q,k,vq,k,v就是完全一样的。

在相同量级的情况下,q i q_iq
i

与k i k_ik
i

点积的值会是最大的(可以从“两数和相同的情况下,两数相等对应的积最大”类比过来)。

那在softmax后的加权平均中,该词本身所占的比重将会是最大的,使得其他词的比重很少,无法有效利用上下文信息来增强当前词的语义表示。

而乘以W Q , W K , W V W_Q,W_K,W_VW
Q

,W
K

,W
V

矩阵,会使得每个词的q , k , v q,k,vq,k,v都不一样,能很大程度上减轻上述的影响。

当然,W Q , W K , W V W_Q,W_K,W_VW
Q

,W
K

,W
V

矩阵也使得多头(类似于CNN中的多核)去捕捉更丰富的特征/信息成为可能。

输入:

Q = np.array([[2,4,4],
[2,3,5],
[3,3,4],
[4,4,2]])
K = Q.T
print('Q:\n{}'.format(Q))
print('K:\n{}'.format(K))
print('Q*K:\n{}'.format(np.dot(Q,K))
1
2
3
4
5
6
7
8
输出:

Q:
[[2 4 4]
[2 3 5]
[3 3 4]
[4 4 2]]
K:
[[2 2 3 4]
[4 3 3 4]
[4 5 4 2]]
Q*K:
[[36 36 34 32]
[36 38 35 30]
[34 35 34 32]
[32 30 32 36]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
可以发现相同向量相乘,积往往最大

输入:

q1 = np.array([2,4,4])
k1 = np.array([3,4,3])
k2 = np.array([2,4,4])
print('q1和k1点积:{}\nq1和k2点积:{}'.format(np.dot(q1,k1.T),np.dot(q1,k2.T)))
1
2
3
4
输出:

q1和k1点积:34
q1和k2点积:36
1
2
3. 在常规attention中,一般有k=v,那self-attention 可以嘛?
self-attention实际只是attention中的一种特殊情况,因此k=v是没有问题的,也即K,V参数矩阵相同。

扩展到Multi-Head Attention中,乘以QK参数矩阵之后,其实就已经保证了多头之间的差异性了,在q和k点积+softmax得到相似度之后,从常规attention的角度,觉得再去乘以和k相等的v会更合理一些。

在Transformer/BERT中,完全独立的QKV参数矩阵,可以扩大模型的容量和表达能力。

但采用Q,K=V这样的参数模式,我认为也是没有问题的,也能减少模型的参数,又不影响多头的实现。
当然,上述想法并没有做过实验,为个人观点,仅供参考。

self-attention源码解读: 目前主流的attention方法都有哪些?

4. self-attention 在计算的过程中,如何对padding位做mask?
在 Attention 机制中,同样需要忽略 padding 部分的影响,这里以transformer encoder中的self-attention为例:

self-attention中,Q和K在点积之后,需要先经过mask再进行softmax,因此,对于要屏蔽的部分,mask之后的输出需要为负无穷,这样softmax之后输出才为0。

5. self-attention 的时间复杂度是怎么计算的?
Self-Attention时间复杂度:O ( n 2 ⋅ d ) O(n^2·d)O(n
2
⋅d),这里n是序列的长度,d是embedding的维度。

Self-Attention包括三个步骤:(1)相似度计算(2)softmax(3)加权平均,它们分别的时间复杂度是:

(1)相似度计算可以看作大小为(n,d)和(d,n)的两个矩阵相乘:( n , d ) × ( d , n ) = O ( n 2 ⋅ d ) (n,d)\times(d,n)=O(n^2·d)(n,d)×(d,n)=O(n
2
⋅d) ,得到一个(n,n)的矩阵

(2)softmax就是直接计算了,时间复杂度为O (

标签:BERT,Transformer,attention,Attention,矩阵,768,Embedding
From: https://www.cnblogs.com/Arborday/p/16889692.html

相关文章

  • 37、记录使用 Swin Transformer主干网络去实现分类,并转化NCNN、TNN、MNN模型以及部署
    基本思想:最近手中有个swimtransformer模型,想移植手机端进行推理一下,随手记录一下遇到的问题涉及简单的转ncnntnnmnn的流程性问题一、首先我fork了大佬的代码​​https:/......
  • 『NLP学习笔记』如何理解attention中的Q,K,V
    如何理解attention中的Q,K,V?文章目录​​一.如何理解attention中的Q,K,V?​​​​1.1.定义三个线性变换矩阵​​​​1.2.定义QKV​​​​1.3.自注意力计算​​​​1.3.1......
  • SegFormer: 轻量级语义分割Transformer学习与实现
    简介SegFormer是一种简单高效的Transformer语义分割网络,发表在NeurlPS'21(SegFormer:SimpleandEfficientDesignforSemanticSegmentationwithTransformers)上(论文......
  • Transformer
    Transformer在那里做了权重共享,为什么可以做权重共享?好处是什么?InputEmbedding和OutputEmbedding共享Decoder中Embedding层和FC层权重共享Transformer的点积模型......
  • Bert_Doc BERT文档中英文对照版
    Bert_Doc BERT文档中英文对照版README.md       https://github.com/google-research/bert...BERT BERT模型的全称是:BidirectionalEncoderRepresent......
  • 关于BERT输出的一点记录
    关于Bert的[cls]的输出在抱抱脸团队发布的Pytorch版的Bert中,要想取到每句话的第一个cls特征是一件容易的事情。直接使用Bert的输出,然后.pooler_output就可以了。BERT......
  • Transformer
    Transformer 它是一个Sequence-to-sequence(Seq2seq)模型,输入一个序列,输出也是一个序列,但是输出序列的长度不知道,是由机器决定的。   Seq2seq可以解决语音识别、......
  • BERT
    Bert   Bert的架构就是TransformerEncoder的架构。 Bert可以预测盖住的tokens:Bert的输入: 随机盖住输入的一些tokens。 方法一:把要盖住的tokens换成特殊......
  • Mathis Petrovich-2021-Action-Conditioned-3D-Human-Motion-Synthesis-with-Transfor
    #Action-Conditioned3DHumanMotionSynthesisWithTransformerVAE#paper1.paper-info1.1MetadataAuthor::[[MathisPetrovich]],[[MichaelJ.Black]],[......
  • BERT-论文阅读笔记
    BERT:Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstanding介绍谷歌智能语言实验室的JacobDevlin,Ming-WeiChang等人提出一种新的语言表征模型......