bert就是无监督训练的transformer
transformer :seq2seq model with “self-attention”
单向的RNN:
在输出b4的时候,已经看了a1~a4
在输出b3的时候,已经看了a1~a3
双向的RNN:
在输出每一个bi的时候,已经看了a1~a4
RNN的优点:
可以考虑到长距离的依赖
RNN的缺点:
不能实现并行化
也可以用CNN来处理序列数据,图中每一个三角代表一个filter
CNN的优点:如果想要考虑长距离依赖,需要叠加多层filter
CNN的优点:可以实现并行运算(所有的黄色三角可以同时进行,黄色和橙色也可以同时进行)
计算attention的做法就是 取两个向量qi和kj,得到一个向量αij,代表qi和kj的相似程度
soft-max 的作用:归一化处理
self-attention不仅可以考虑global information,还可以考虑local information. 如果要考虑local information 只要让αijhead为0,就可以不考虑它对应的Vj(αijhead和Vj的乘积为0)
self-attention做的事情和RNN是一样的,只是self-attention中 b1~b4的计算可以同时进行,实现并行化
self-attention都是通过矩阵进行计算的
对A(A中的每一个元素都是input中两两position的attention)的每一个column做softmax得到 A head
最后O就是self-attention layer的输出
从矩阵的角度,self-attention layer做了什么
gpu可以加速矩阵乘法
每一个head的关注点不一样,各司其职
每两两input vector 做 attention, 每一个input vector 对其他input vector 都有“天涯若比邻”的效果,所以对于self-attention layer来说,不能感知到输入数据的序列。“A打了B”和“B打了A”对于self-attention来说是一样的。
在Xi上concat一个pi, pi是独热编码,标志了Xi在输入中的位置
Wp不是learn出来的(在learn的过程中发现效果不好),是人手设的,用公式推导出来的
Wp的样子,感觉很神奇,矩阵还可以用图显示出来
transformer是一个seq2seq model
用seq2seq的地方,都可以用transformer来取代