当前位置: 首页 > news >正文

[神经网络]Transfomer架构

一、概述

        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;将每组querykey进行内积作为相似度(值越大,相似度越高--cos函数);得出结果后再除以\sqrt{d_k}(即向量长度);最后以一个softmax得到权重。

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

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

                        掩码机制: 对于时间 k 的输入Q_t而言,在计算时应该只看k_1k_{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)

http://www.lryc.cn/news/30959.html

相关文章:

  • C++之多态 虚函数表
  • AI_Papers周刊:第四期
  • A Simple Framework for Contrastive Learning of Visual Representations阅读笔记
  • mac安装开发工具:clipy、iterm2、go、brew、mysql、redis、wget等
  • DJ1-1 计算机网络和因特网
  • [1.3.3]计算机系统概述——系统调用
  • 【Java开发】JUC进阶 03:读写锁、阻塞队列、同步队列
  • Fragment中获取Activity的一点点建议
  • Java Math类
  • Javascript -- 加载时间线 正则表达式
  • gdb/git的基本使用
  • 信息安全与数学基础-笔记-④二次同余方程
  • Luogu P4447 [AHOI2018初中组]分组
  • 手把手创建flask项目
  • SpringCloud-4_Eureka服务注册与发现
  • 【react全家桶】生命周期
  • 虚拟机安装Windows 10
  • 【CMU15-445数据库】bustub Project #2:B+ Tree(下)
  • leetcode 困难 —— 外星文字典(拓扑排序)
  • ubuntu server 18.04使用tensorflow进行ddqn训练全过程
  • 2023年全国最新二级建造师精选真题及答案14
  • mysql一条语句的写入原理
  • 嵌入式Linux内核代码风格(二)
  • Spring Boot @Aspect 切面编程实现访问请求日志记录
  • 初学者的第一个Linux驱动
  • 7. 拼数
  • Java每天15道面试题 | Redis
  • 13_pinctrl子系统
  • Linux系统对于实施人员的价值
  • ForkJoin 和 Stream并行流