背景:听了李宏毅老师关于transformer的讲解,觉得有必要记录一下,里面的PPT都是李宏毅老师的内容(不喜勿喷)
1.self-attention
在介绍transformer之前,必须先了解self-attention
(1) 先将X输入Embedding(a = Wx), 然后a乘相关的权重,生成QKV
(2) q1*k1、q1*k2...,将q1*k1、q1*k2...通过soft-max,然后将通过soft-max的数值与V相乘,最后将相乘的结果相加生成b1、b2...
(3) 根据(1)和(2)就是self-attention的操作(这样说还是挺清楚的,公式也不复杂)
2.并行计算
(1) 矩阵的计算还是挺清楚的(QKV的计算)
(2) 计算b(softmax(K*Q)*V最后相加)
(3) 简化的就是这样,大块的清清楚楚!!!
3.多头注意力机制
(1) 多个QKV
4.TransFormer
5.注意点
关于这个图,理解的理解,不理解的还是不理解
从vit的onnx结构图来看transformer的输入
3*224*224经过768个16*16的卷积,输出768*14*14
将输出flatten,768*196(14*14)
调整通道196*768
添加class_num(分类信息)1*768,拼接196*768成197*768
添加位置信息pos,add(shape还是197*768)
关于outputs的解释
我的理解就是encoder的输出,如下图所示
encoder从BOS(一个特殊的字符)开始,输出潮水
decoder从BOS+潮水作为encoder的outputs,但是是decoder的inputs
重复几遍,知道潮水退了结束
3.VIT的onnx结构图
看看里面的结构,都是一些block的堆叠,也没有新的OP,我的感觉是transformer还是做的和CNN的工作是类似的,但是transformer的并行效果更好,同时这些计算密集型的OP,后续的性能优化也是一个方向(量化)