transformer和bert有非常强烈的关系
transformer是什么呢
就是句子到句子的转化的一个好用的模型model
输出的句子的长度由机器自己决定
在语音识别中speech recognition
input a set of vectot
out put 你好啊
这个sequence2sequence is really powerful
input something 有这个encoder处理这个something ,把处理之后的东西丢给decoder
再由机器自己决定输出
主角登场 transformer
给一排向量 输出一排向量
这个小黑盒可以是self-attention也可以是RNN CNN
self_attention 注意力机制_:)�东东要拼命的博客-CSDN博客
这里的transformer用到的是self-attention的plus
注意哦 这里的block 不是layer哦 因为这里的block 有好几个layer组成
在transformer那有点不一样
加了一个残差连接 注意:a 是原来的input
这里没有加入BN layer 而是做的是 layer normalization 不用考虑Batch的信息
layer normalization 比BN 要简单一些
layer normalization 会把输入的向量做一个均值 和标准差 (同一个feature 同一个 example 不同的dimension) 计算完之后在做normalize
而 batch normalization 是在同一个 维度 不同特征 不同example去 calculate mean 和标准差
注意哦 这个结构并不是最好的
接下来就要是 decoder 了
注意:小细节把输出再拿回来放到输入
有可能看到错误的东西 ,会不会造成error propagation呢
一步错 步步错 满盘皆输
接下来看看decoder 长啥样
注意哦 它只比encoder 多一个小模块
这个 mask self attention叫感伤hh,永远都是在看前面的 永远在念旧 (第一个人就看自己 没有人给ta看)
我们可以先回忆一下对于encode结构,我们是一次性都从输入那里拿到a1a2a3a4的
但是 我们再好好想想decoder 是先拿a1产生的b1,再把产生的b1当做输入才有的 b2
所以这里 我们不得不 mask
而且还记得之前的要求吗 我们要让机器自己决定输出的长度
所以这个任务交给了decoder,但是好像这个停不下来
所以我们就跟decoder搞一个暗号end ,让decoder看见这暗号就停下来
能不能以此产生一个句子 能不能行?
吃的一整排的开始信号 ,然后产生四个中文字 就结束了
但是 你怎么知道我们要输出句子的长度嘞
有两种方法
我们在增加一个classification 分类器,吃input来判别要输出的长度,output 一个数字
还有一种 特别傻逼的 就是我我输入足够长 输出足够长,总能覆盖到的,然后在回过头来看看哪里是end end 右边就结束了
但是 性能上比AT 差一点
这个 cross attention 是连接encode和decoder的桥梁
注意看 encoder给了两个信号