温州网站设计网站建设网站,公司logo设计欣赏,企业网站推广工具,家居装修公司排名零、前言
对于transformer#xff0c;网上的教程使用记号、术语不一 。 最关键的一点#xff0c;网上各种图的简化程度不一 #xff08;画个图怎么能这么偷懒#xff09; #xff0c;所以我打算自己手画一次图。 看到的最和善#xff08;但是不是那么靠谱#xff0c;我…零、前言
对于transformer网上的教程使用记号、术语不一 。 最关键的一点网上各种图的简化程度不一 画个图怎么能这么偷懒 所以我打算自己手画一次图。 看到的最和善但是不是那么靠谱我怀疑图有误的transformer教程一文了解Transformer全貌图解Transformer
注意 全连接层在概念上输入必须是一维向量但是实际实现的时候我们会采用批处理将多个样本的向量组拼成矩阵用矩阵乘法加速运算。如果用单一样本的向量来标注全文可能更清晰但是为了更贴近实用约定全文的输入长这个样子而不是向量
其实输入也不是矩阵。。。输入是3维张量三个维度分别是batch_size, number当前用到的词数, dimension特征维度 其中number没有画出来你可以按number1来想当成矩阵方便一些
一、前置基础中的前置基础
RNN残差连接无论什么书通常会在CNN的ResNet这一节中讲归一化注意力机制
二、前置基础
Encoder-Decoder模型自注意力多头注意力
简单介绍一下 Encoder-Decoder模型是为了解决RNN容易忘记前文的问题即使是LSTM也可能存在这个问题 自注意力 其中Q、K、V是什么属于“注意力机制”的内容假设你已经了解了这一块内容并能看懂上面的图 可以发现自注意力的作用是把X转换为固定形状的M便于处理 多头注意力 多头注意力本身并不限制使用的是什么注意力来连接起来Transformer中用的是自注意力。 多头注意力将多个自注意力Concat是因为这样“并列”的结构能优化最长最短路而且这样能表达的注意力机制更丰富
三、Transformer
Transformer相比起Seq2Seq模型区别在于Seq2Seq中RNN承担了Encoder、Decoder的角色事实上Encoder、Decoder可以由多种途径实现Transformer中RNN不复存在用的是多头注意力。因此Transformer是一种纯注意力机制的模型。 接下来在一个具体场景中学习Transformer。
目标做文本翻译 数据集包含翻译前后的文本分别为Source和Target
1. 输入原文本Source
Source是单词所以不能直接扔进神经网络去需要先编码成向量既不要损失词本身的信息也不要损失词所在语句的位置的信息那就干脆都编码然后加起来。
2. Encoder 首先先经过多头注意力机制然后Addnorm
Add指的是残差连接使梯度流动更平稳防止梯度消失/爆炸norm本身归一化的目的是为了防止协变量偏移提高泛化能力归一化分为两种层归一化对batch_size归一化批归一化对dimension进行归一化这里用的是层归一化关键多头注意力机制对于注意力的表达更丰富且本身“注意力”的含义就是对哪个词所编码的向量更有偏向注意力分数即权重矩阵也就是说中英文语序这种问题不存在是靠注意力机制来不定顺序翻译的
矩阵M是原本是三维张量漏掉的n并不是随意漏的而是因为翻译不应当和n相关后面还会具体解释的所以这一部分是为了丢掉n这个维度。 3. 输入目标文本Target 和Source是一样的但是Target需要有**“Mask”**为了避免模型过早“偷窥”到Target后面的内容
4.Decoder
上图也展示了Decoder的第一个多头注意力还有第二个第二个与之前的Encoder相连 回忆注意力机制现在把Encoder想成环境条件Key和ValueDecoder中已经出现的Target没有被Mask的部分词你可能会对其中感兴趣也就是Query那么你就懂上图为什么这么连了。 接着是熟悉的Dense和Encoder一样。
用一个Softmax决定生成哪个词这里再次体现了Dense类似于1×1卷积层的功能。 5. 反向传播进行训练
图中打勾的部分是有参数能学的部分由于输出是Softmax所以用交叉熵损失函数链式法则反向传播更新参数。 注意一点反向传播是等到所有词都依次通过一遍transformer后再反向传播以确保模型学习到了整个序列的上下文信息。
由于是翻译任务有别于gpt那种生成式还可以发现一个特点翻译只能提前终止不能延后终止如果一次只能生成一个词那么生成序列长度小于等于原序列。