[神经网络]Transfomer架构
创始人
2024-05-29 00:47:54
0次

一、概述

        Transfomer架构与传统CNN和RNN最大的区别在于其仅依赖自注意力机制,而没有卷积/循环操作。其相较于RNN,不需要进行时序运算,可以更好的进行并行;相较于CNN,其一次可以关注全图而不局限于感受野尺寸。

二、模型架构

        1.功能模块

                功能模块结构如下图所示:

                Inputs:编码器输入

                Outputs:解码器输入(解码器之前时刻的输出作为输入)

                Positional Encoding:

                Transformer Block(编码器):由一个具有残差连接的多头注意力层和一个具有残差连接的前向传递网络组成。编码器的输出会作为解码器的输入。

                 Transformer Block(解码器):相较于编码器多了一个Masked Multi-Head Attention(掩码多头注意力)机制。

         2.网络结构

                ①编码器

                        堆叠了6个Transfomer Block,每个Block中有两个Sublyaer(子层)(Multi-head self-attention mechanism(多头自注意力机制)+MLP(多层感知机)),最后经过一个Layer Normalization。

                        其采用公式可表达为:LayerNorm(x+Sublayer(x))<具备残差连接>

                        Layer Norm类似于Batch Nrom,均为求均值的算法,不同点在于Batch Nrom是求一个batch内(列)的均值,而Layer Norm是求一个样本(行)内的均值。

                ②解码器

                        堆叠了6个Transfomer Block,每个Block中有三个Sublyaer(子层),解码器内会做一个自回归(当前时刻的输入是上一个时间的输出)。而为了保证 t 时刻不会看到之后的输出,在第一个多头注意力块中增加了一个掩码机制进行屏蔽。

                ③注意力机制

                        注意力函数(将query和一些key-value对映射成一个输出的函数,每个value的权重是其对应的key和查询的query的相似度得来的)

                        其公式可以写为:Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V

                        query和key的长度均等于d_k,value的长度等于d_v;将每组query和key进行内积作为相似度(值越大,相似度越高--cos函数);得出结果后再除以\sqrt{d_k}(即向量长度);最后以一个softmax得到权重。

                        得出权重后与vuale进行乘积即可得到输出。

                        实际运算时,query和key均可写作矩阵,采用下图所示方法计算。

                        掩码机制: 对于时间 k 的输入Q_t而言,在计算时应该只看k_1至k_{t-1}时刻的值,但实际上注意力计算时Q_t会和所有 k 进行运算。固引入掩码机制,具体做法为:将k_t及其之后计算的值替换为一个很大的负数,在经过softmax后就会变为0。

                        多头机制:将整个query、key、value投影到低维(h次,原文的h=8),再做h次注意力函数;将每个函数的输出并在一起,再投影回高维度得到结果。如下图所示:

                                 图中的Linear用于低维投影;Scaled Dot-Product Attention为注意力机制。concat负责将结果合并。

                                其公式为:MultiHead(Q,K,V)=Concat(head_1,...head_h)W^O

                                                                where  head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...