关于Transformer和BERT,在面试中有哪些细节问题?

本文以问答形式深入探讨Transformer和BERT的关键细节。内容涉及Transformer的权重共享原因,BERT的Embedding相加对语义的影响,BERT中token的mask策略及其作用,BERT为何选择15%的mask比例,[CLS]标志的作用,以及BERT预训练模型的输入限制。通过这些解析,帮助读者深化对这两个模型的理解。
摘要由CSDN通过智能技术生成

©PaperWeekly 原创 · 作者|海晨威

学校|同济大学硕士生

研究方向|自然语言处理

随着 NLP 的不断发展,对 Transformer 和 BERT 相关知识的研 (mian) 究 (shi) 应 (ti) 用 (wen),也越来越细节,下面尝试用 QA 的形式深入不浅出 Transformer 和 BERT。

  1. Transformer 在哪里做了权重共享,为什么可以做权重共享?

  2. BERT 的三个 Embedding 直接相加会对语义有影响吗?

  3. 在 BERT 中,token 分 3 种情况做 mask,分别的作用是什么?

  4. 为什么 BERT 选择 mask 掉 15% 这个比例的词,可以是其他的比例吗?

  5. 为什么 BERT 在第一句前会加一个 [CLS] 标志?

  6. 使用 BERT 预训练模型为什么最多只能输入 512 个词,最多只能两个句子合成一句?

1. Transformer 在哪里做了权重共享,为什么可以做权重共享?

Transformer 在两个地方进行了权重共享:

1. Encoder 和 Decoder 间的 Embedding 层权重共享;

2. Decoder 中 Embedding 层和 Full Connect(FC)层权重共享。

对于第一点,《Attention is all you need》中 Transformer 被应用在机器翻译任务中,源语言和目标语言是不一样的,但它们可以共用一张大词表,对于两种语言中共同出现的词(比如:数字,标点等等)可以得到更好的表示,而且对于 Encoder 和 Decoder,嵌入时都只有对应语言的 embedding 会被激活,因此是可以共用一张词表做权重共享的。

论文中,Transformer 词表用了 bpe 来处理,所以最小的单元是 subword。英语和德语同属日耳曼语族,有很多相同的 subword,可以共享类似的语义。而像中英这样相差较大的语系,语义共享作用可能不会很大 [1]。

但是,共用词表会使得词表数量增大,增加 softmax 的计算时间,因此实际使用中是否共享可能要根据情况权衡。

对于第二点,Embedding 层可以说是通过 onehot 去取到对应的 embedding 向量,FC 层可以说是相反的,通过向量(定义为 w)去得到它可能是某个词的 softmax 概率,取概率最大(贪婪情况下)的作为预测值。

那哪一个会是概率最大的呢?在 FC 层的每一行量级相同的前提下,理论上和 w 相同的那一行对应的点积和 softmax 概率会是最大的(可类比本文问题 1)。

因此,Embedding 层和 FC 层权重共享,Embedding 层中和向量 w 最接近的那一行对应的词,会获得更大的预测概率。实际上,Embedding 层和 FC 层有点像互为逆过程。

通过这样的权重共享可以减少参数的数量,加快收敛。

但开始我有一个困惑是:Embedding 层参数维度是:(v,d),FC 层参数维度是:(d,v),可以直接共享嘛,还是要转置?其中 v 是词表大小,d 是 embedding 维度。

查看 pytorch 源码发现真的可以直接共享:

fc = nn.Linear(d, v, bias=False) # Decoder FC层定义,无 bias

weight = Parameter(torch.Tensor(out_features, in_features))   # nn.Linear 的权重部分定义

Linear 层的权重定义中,是按照(out_features, in_features)顺序来的,实际计算会先将 weight 转置在乘以输入矩阵。所以 FC 层 对应的 Linear 权重维度也是  (v,d),可以直接共享。

2. BERT 的三个 Embedding 直接相加会对语义有影响吗?

对于这个非常有意思的问题,苏剑林老师给出的回答 [2],真的很妙:

Embedding 的数学本质,就是以 one hot 为输入的单层全连接。

也就是说,世界上本没什么 Embedding,有的只是 one hot。

现在我们将 token, position, segment 三者都用 one hot 表示,然后 concat 起来,然后才去过一个单层全连接,等价的效果就是三个 Embedding 相加。

因此,BERT 的三个 Embedding 相加,其实可以理解为 token, position, segment 三个用 one hot 表示的特征的 concat,而特征的 concat 在深度学习领域是很常规的操作了。

用一个例子理解一下:

假设 token Embedding 矩阵维度是 [4,768];position Embedding 矩阵维度是 [3,768];segment Embedding 矩阵维度是 [2,768]。

对于一个字,假设它的 token one-hot 是 [1,0,0,0];它的 position one-hot 是 [1,0,0];它的 segment one-hot 是 [1,0]。

那这个字最后的 word Embedding,就是上面三种 Embedding 的加和。

如此得到的 word Embedding,和 concat 后的特征:[1,0,0,0,1,0,0,1,0],再经过维度为 [4+3+2,768] = [9, 768] 的 Embedding 矩阵,得到的 word Embedding 其实就是一样的。

Embedding 就是以 on

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值