百科问答小站 logo
百科问答小站 font logo



BERT中,multi-head 768*64*12与直接使用768*768矩阵统一计算,有什么区别? 第1页

  

user avatar   cai-yun-long-65 网友的相关建议: 
      

没有multi-head,不就是普通的的多层全联接网络么。multi-head把维度从[batch, len, embeding]变为[batch, len, head, embeding/head]。计算attention的时候,就会拥有多个注意力点。如果没有多头一次只能计算一个注意力点,这就和google早期的seq2seq的Bahdanau(arxiv.org/abs/1409.0473)类似了,而如果采用这样的方式,效果还不如Bahdanau注意力机制。多头的好处就是把embeding从一份特征变成了多份特征,这样就是弥补了相对于Bahdanau类注意力的短板。但是实际的模型训练中要适当选择head的大小和embeding的大小。


评论区小伙伴建议举例子来说说,这个提议很好。就贴一些经典的图来帮助理解。

强烈建议仔细读读Attention Is All You Need(arxiv.org/pdf/1706.0376

可以看看早期注意力和transformer(也就是multi-head注意力)的动态图展示。

下面这两个都是翻译模型用到的,非多头的注意力模型。第一个是google的seq2seq模型,使用LSTM堆叠,注意力使用Bahdanau。第二个是Facebook的基于CNN的注意力模型。这两个都是诞生于2018年之前的(ps:transformer在2017年提出,记得应该是比Facebook CNN翻译模型时间差不多,只不过BERT还没出现,它就比较低调)。当时的主流还是使用一次编码,然后拿到编码结果,算和目标之间的注意力,目标有10个字,就循环计算10次,100字就计算100次(ps:Facebook的cnn可以并行计算)。当时这些方法都是在翻译领域达到SOTA的效果。

下面再看看多头注意力的(这是一个基于transformer的翻译模型过程):

BERT其实是使用了上图中的encoder部分,也就是先句子内部进行注意力计算,也就是self- attention。


上面对比了几种主要的注意的区别,给大家在视觉上有一个直观的感受。现在回到题主的问题,为什么要把最后一维度换成12*64?高赞的苏神的回答,已经从数学角度解释了。

我现在从它这个机制运行角度猜测下吧。看上面transformer的动态图,这里我们只看encoding部分,因为bert只使用了transformer结构的encoder。可以看到有很多线在token之间穿梭,这些线就相当于是分裂出的12个头,它们在token之间互相学习,最终得到下面一个结果:

上面例子,it就和the animal的关联性比较高(颜色深的),还有一些次高的(颜色较淡)。在做BERT的MLM任务时候,我们推断被mask掉的那个词,不太可能只靠一个注意力去预测,需要结合多个。多头应该是赋予了句子更多的表达信息。

如果去掉多头,能不能做?那当然是能做。但是表达能力要弱很多很多。效果远不如transformer之前的注意力方式。

大家有啥更好想法可以一起讨论~

BERT之所以被挖坟这么久,其实很多坑还是没有填上的。多头只是其中一部分经典设计,像残差,位置编码,FFN这些模块之间有啥联系,都需要去进一步探讨~

ps:传动图,无法上传,只能录屏了




  

相关话题

  你见过最差的算法工程师能差到什么程度? 
  生成式对抗网络GAN有哪些最新的发展,可以实际应用到哪些场景中? 
  为什么Transformer适合做多模态任务? 
  国内哪些公司在用caffe、torch、TensorFlow、paddle等框架,哪些在用自研框架? 
  ICLR 2019 有什么值得关注的亮点? 
  请问DeepMind和OpenAI身后的两大RL流派有什么具体的区别? 
  物理专业的学生如何看待机器学习和大数据这些方向呢? 
  基于深度学习的自然语言处理在 2016 年有哪些值得期待的发展? 
  如何看待阿里巴巴提出的 FashionAI 比赛? 
  当前深度学习理论基础薄弱是否意味着我们应该放弃深度学习应用(计算机视觉、自然语言处理)? 

前一个讨论
PHP没落的原因是移动领域的兴起吗?
下一个讨论
国内互联网大厂真的是996吗?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利