深度学习 | (10) 为什么Bert的三个Embedding可以进行相加?

原文地址

这个问题已经有很多回答了,但多是数学层面而非业务层面的:embedding 相加和 XXX 等价,但问题是 XXX 这样建模难道就是对的吗?这种解释并不解决“相加后向量的大小和方向就变了,语义不就变了吗?”这个疑惑。模型拿到的是三个向量(word /token embedding,position embedding,segment embedding)的和,它怎么知道原来的向量是哪三个呢?

坦白讲这个问题我也没有完全想通,我觉得唯一合理的解释是空间维度很高,所以模型总能分开各个组分。举个例子,假设词表大小 50k,segment 只有 2 种,position embedding 只有 512 种,这三者任选一个进行组合,至多有 50k x 2 x 512 = 50 M 种组合。embedding 维度我没记错的话是 768 维,假设每个维度的取值范围是 [-1, 1],这就相当于要求模型在体积为 2 768 2^{768} 2768 的空间里区分 50 M 个不同的点,我觉得这个空间还是相对比较开阔的,所以模型能做到。作为对比,在 2 维情况下,在正方形 [-1, 1] x [-1, 1] (面积为4)里区分 50 M 个点,这简直是一种灾难。

再打一个比方,给你一张照片,让你分辨它来自哪个国家什么时间。如果照片比较典型的话,例如反映了该国家的特色建筑景观或自然风光、并且很好地反映了光照条件,你就可以回答出来这是“中国,白天”。国家就相当于 token,时间(白天/晚上)相当于 segment(或者 position)。这两类信息有可能是在空域(输入向量的不同维度)编码的(时间信息通过图片上部天空的像素编码,国家信息通过图片下部的建筑风格编码),也有可能是在频域编码的(时间通过图像整体的亮暗程度来编码,即低频分量;而国家信息通过更精细的纹理例如人物服饰特征来编码,即高频分量)。

当然,以上仅仅是猜想,我没有针对三个 embedding 以及他们的和做过 probing task,没分析过学出来的三种向量各自的特点,仅供参考。如果有人想深入探究,发论文时别忘了给我加一段致谢。

最后,提一些其他的侧面证据:

  1. transformer 做机器翻译时 relative position 比 absolute position 要好,所以这种直接求和的方式应该确实是有信息丢失的。
  2. 我记得 transformer 有每一层都输入一遍 position embedding 的魔改版,就是怕网络深了之后忘记了现在到底是在处理第几个词。具体的文章找不到了,如果有人知道欢迎在评论里补充。
  3. 我自己做过一些任务,需要把各种知识源的 4、5 个 embedding 输入给模型,一开始直接把各个 embedding 相加,发现模型很难训。后来把几个 embedding 合并了一下,对某些维度做了一些手动编码(类似 transformer 一开始的正弦余弦那种),整合成 3 个 embedding 输入给模型,效果好了很多。(他引入外部知识源时,会出现多个embedding,输入给模型时一般不要直接相加,会损失信息,可以把不同的embedding拼接在一起,如果维度过高的话,可以在通过一个全连接层降低维度)。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值