2021-06-30 Transformer & Bert tips

BERT中使用Transformer作特征提取器,其实只使用了Transformer的Encoder。

那么Decoder去哪了呢?显然是被BERT改造了。Transformer其实是个完整地seq-to-seq模型,可以解决诸如机器翻译、生成式QA这种输入输出为不定长句子的任务,在Transformer中,它使用Encoder做特征提取器,然后用Decoder做解析,输出我们想要的结果。

而对于BERT,它作为一个预训练模型,它使用固定的任务——language modeling来对整个模型的参数进行训练,这个language modeling的任务就是masked language model,所以它是一个用上下文去推测中心词[MASK]的任务,故和Encoder-Decoder架构无关,它的输入输出不是句子,其输入是这句话的上下文单词,输出是[MASK]的softmax后的结果,最终计算Negative Log Likelihood Loss,并在一次次迭代中以此更新参数。所以说,BERT的预训练过程,其实就是将Transformer的Decoder拿掉,仅使用Encoder做特征抽取器,再使用抽取得到的“特征”做Masked language modeling的任务,通过这个任务进行参数的修正。

当然了,BERT不仅仅做了MLM任务,还有Next Sequence Prediction,这个由于后序验证对模型的效果提升不明显,所以没有赘述。

注意:我们常说,xxx使用Transformer作为特征抽取器,这其实在说用Transformer的Encoder(主要是Self-Attention和短路连接等模块)做特征抽取器,和Decoder啥关系也没有

Transformer block是由multi-head self-attention + FFN构成的?

其实论文原文以及配图就是这样写的,但这么说不确切。如果你仔细地看过Transformer部分的源码,你会发现,在multi-head self-attention和FFN层之间,还有一个“intermediate layer”,即中间层,【代码详见此处】。这个中间层将前面Attention-layer的hidden size扩大了4倍,然后再做一次非线性变换(即过一个激活函数,如gelu、relu),再将hidden size变回原size。中间这部分的功能,我个人理解,有点类似于“特征组合器”,增大神经元个数,增强Transformer对于distributed的文本特征的组合能力,从而获取更多、更复杂的语义信息。此外,中间层是Transformer中唯一一个过了激活函数的layer,所以也引入了非线性信息,当然从理论上也对提升模型的拟合不同语义信息能力有帮助。(当然,BERT预训练的MLM任务中,在bert_model的输出之后,在接softmax+将结果计算loss之前,有一个hidden_size不变的线性变换Linear + 激活函数激活 + LayerNorm的过程,【代码详见此处】,这里也有个激活函数,但这并非Transformer的结构,这属于接了下游MLM任务的结构,故真正Transformer-block中的非线性映射,只在中间层的激活函数引入)

实际上,“intermediate layer”在bert代码里是集成到FFN类中的,但由于很多人经常把FFN层直接当做一次线性变换(即简单的nn.Linear layer)而忽略了其中的intermediate layer,故在这里单拎出来加以解释。
————————————————
版权声明:本文为CSDN博主「illusion」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41712499/article/details/103993879

Transformer和BERT的位置编码有什么区别?

BERT的位置编码是学习出来的,Transformer是通过正弦函数生成的。

原生的Transformer中使用的是正弦位置编码(Sinusoidal Position Encoding),是绝对位置的函数式编码。由于Transformer中为self-attention,这种正余弦函数由于点乘操作,会有相对位置信息存在,但是没有方向性,且通过权重矩阵的映射之后,这种信息可能消失。

BERT中使用的是学习位置嵌入(learned position embedding),是绝对位置的参数式编码,且和相应位置上的词向量进行相加而不是拼接。

BERT模型结构是什么?

利用Transformer结构构造了一个多层双向的encoder网络。

BERT、GPT、ELMO之间的区别是什么?

(1)特征提取器:elmo采用LSTM进行提取,GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,elmo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和bert中的Transformer可采用多层,并行计算能力强。

(2)单/双向语言模型:

GPT采用单向语言模型,elmo和bert采用双向语言模型。但是elmo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比bert一体化融合特征方式弱。

GPT和bert都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子。
————————————————
版权声明:本文为CSDN博主「麦格芬230」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42295205/article/details/106152707
————————————————
版权声明:本文为CSDN博主「麦格芬230」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42295205/article/details/106152707

positionencoding

PositionalEmbedding的成分直接叠加于Embedding之上,使得每个token的位置信息和它的语义信息(embedding)充分融合,并被传递到后续所有经过复杂变换的序列表达中的线性组合得到, 也就是乘上某个线性变换矩阵就得到了

Feed Forward Network

每一层经过attention之后,还会有一个FFN,这个FFN的作用就是空间变换。FFN包含了2层lineartransformation层,中间的激活函数是ReLu。其实,FFN的加入引入了非线性(ReLu激活函数),变换了attention output的空间,从而增加了模型的表现能力。把FFN去掉模型也是可以用的,但是效果差了很多。
feed-forward network: 实现 很简单,如果你用 Dense这种实现,那就简单了, ffn_1 = nn.Dense(hidden_size, activation='relu')
ffn_2 = nn.Dense(units, activation='identity')
ffn_2(ffn_1(X))
如果自己写layer 那需要 做一个 reshape操作,因为input 是 3-D (batch,seq,embedding), 这里推荐大家用conv1d去写, kernel_size设置成1就行(后续可以和cv的一些常见操作联系起来,便于理解feed-forward network的意义),另外要注意的是这边第一层的activation是relu,后面 一层是没有activation的

这里如何去理解ffn(feed-forward network)的作用可以从 两个层面去理解:

  1. 模型的capacity,第一层映射到更大的空间,无外乎就是用了更大的网络,提升了模型的空间,没有ffn当然也可以,但是效果却明显差了,这点我做过实验

  2. ’unique‘ representation: 之前提到推荐用conv1d的方式去实现,会发现这个做法是在cv中网络的最后的位置尝尝出现的,是一个localized transform,因为在前面的attention层的表示中,每个位置已经融合了其他位置的信息了,这里我们想要巩固每一个位置他们自己的 'unique' representation, 做法就是用kernel_size = 1 的conv1d,这个操作不考虑周边邻居的信息,只会对自己的位置的representation进行transform. 这边看上去有点难以理解,其实是说的通的,虽然我们希望每个位置在空间上去融合不同位置的信息(无论是图片 conv block 实现,还是句子 attention 实现),但是我们还是会希望每个位置去保持/巩固 自己原有的信息(而不是简单的对每个位置的信息做加权平均,这里从前面一层的结构 input = input+attention 也可以看出),这里的ffn 我会理解去巩固自己原有信息来获取一个unique representation,不然结果可能每个位置的最后输出会差不太多 (这里其实可以做个实验去掉ffn 看看每个attention block 的每个位置的输出会不会比较相似)

multi-head

Graph Attention Networks‘ ,attention 可以让你关注重点的部分,但是attention 机制使得信息的交互很有限,会损失两者之间一些有用的信息,而使用multi-head 可以增加网络空间,让更多的信息传输

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容