【神经网络组件】Transformer Encoder

news/2024/11/14 13:50:41/文章来源:https://www.cnblogs.com/rh-li/p/18538410

【神经网络组件】Transformer Encoder

目录
  • 【神经网络组件】Transformer Encoder
    • 1. seq2seq模型
    • 2. 为什么只需要Transformer Encoder
    • 3. Transformer Encoder的结构

1. seq2seq模型

  • 什么是sequence:sequence指由多个向量组成的序列。例如,有三个向量:\(\mathbf{a} = [1,0,0]^T,\mathbf{b} = [0,1,0]^T,\mathbf{c} = [0,0,1]^T\),那么\([\mathbf{a},\mathbf{b},\mathbf{c}]\)构成一个sequence。

  • 什么是seq2seq模型:

    • seq2seq并不单指哪一个模型,而是一类模型的总称。Transformer就是seq2seq中的一种,也是最出名的一种。
    • seq2seq有以下特点:它的输入是一个sequence,输出也是一个sequence,且输出sequence的长度不能事先确定,需要模型自主学习。

    例如,机器翻译模型一般都是seq2seq模型。

    如果想要把一段中文翻译成英文,那么模型的输入是中文,其中每个汉字可以表示成一个向量,这段中文可以表示成一个由向量组成的sequence。

    输出是中文对应的英文,其中每个单词是一个向量,因此输出也可以表示成一个sequence。但是,输出sequence的长度不能确定,因为不能事先知道翻译过来的英文包含多少单词。

  • seq2seq的通用结构:Encoder-Decoder结构。Encoder处理输入sequence,把处理好的结果丢给Decoder,由Decoder生成输出sequence。

    image-20241102134712079

Transformer也是seq2seq模型,因此,Transformer中也分为Encoder和Decoder两部分。

2. 为什么只需要Transformer Encoder

对于Transformer中的Encoder和Decoder,可以这样理解它们各自的功能:Encoder负责对输入数据进行编码,Decoder根据编码后的数据生成新的序列。

在一些场景中,只需要对输入进行编码,不需要生成新的序列,也就是说,只会用到Transformer Encoder,不会用到Transformer Decoder。例如,情感分析,主题分类,垃圾邮件检测等文本分类任务;词性标注,命名实体识别等序列标注任务;以及在BERT中,都只会用到Transformer Encoder,而不会用到Transformer Decoder。

3. Transformer Encoder的结构

如果把Transformer Encoder看作一个黑盒,那么其输入是一个sequence,输出也是一个sequence,且输入sequence和输出sequence等长。

flowchart TD Input[(in_1,in_2,...,in_n)] Input --> E E[Transformer Encoder] output[(out_1,out_2,...,out_n)] E-->output

Encoder的内部是什么样的呢?

Encoder是由很多block连接在一起的。如果把每个block看作一个黑盒,那么每个block的输入是一个sequence,输出是同样长度的sequence。

flowchart TD Input[(in_1,in_2,...,in_n)] Input --> E subgraph E[Transformer Encoder]block1-->block2block2-->A[...]A[...]-->blocknend output[(out_1,out_2,...,out_n)] E-->output

block的内部是什么样的呢?

每个block的结构如下图。

image-20241102140352617

可以看到,block的结构大概分为两块,第一块是Multi-Head Attention和Add&Norm;第二块是Feed Forward 和Add&Norm。下面对这两块逐一讲解。

Multi-Head Attention和Add&Norm:

image-20241110201737954
  • Multi-Head Attention表示多头自注意力层。

  • Add&Norm:

    • Add表示残差

    • Norm表示lay normalization:计算sequence中,一个输入向量所有维度的均值和方差,对这个输入向量做归一化。例如,输入向量是$\mathbf{x} =[x_1,x_2,\cdots,x_K] \(,计算均值\)m = \sum_{i=1}^K x_i/K\(,方差\)\sigma = \sum_{i=1}K(x_i-m)2/K\(。对于\)\mathbf{x}\(中的元素\)x_i\(,经过layer norm的输出\)x_i'\(可以表示为\)x_i' = \frac{x_i-m}{\sigma}$

      image-20241102140536779

因此,block中这一块的结构可以表示下面的形式

flowchart TD input[(input)] --> attention[self-attention层] attention-->norm[layer normalization] input --> norm norm-->output[(output)]

Feed Forward 和Add&Norm:

image-20241110201753512

这一块和上一块很像,因此不展开讲解。

  • Feed Forward :全连接层。
  • Add&Norm:残差+layer normalization

其结构可以表示下面的形式

flowchart TD input[(input)] --> attention[Feed Forward层] attention-->norm[layer normalization] input --> norm norm-->output[(output)]

Transformer Encoder的完整结构

在Transformer中,为了更好的利用位置信息,还要加上位置编码。

因此,Transformer Encoder的完整结构如下图。

image-20241110202019095

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830789.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马PM- B端产品-B端基础知识

什么是B端产品B端产品市场介绍B端产品常见分类B端与C端产品区别供应链简介

Roma and Poker

算法 因为这题是从差分约束专题来的, 所以肯定要朝着化为不等式的方向化简 令 \(TimeW_i, TimeD_i, TimeL_i\) 表示原串前 \(i\) 位中 \(W, D, L\) 的个数 令 \(W_i, D_i, L_i\) 表示最后结果中前 \(i\) 位 \(W, D, L\) 的个数 根据原串有 \[\left\{ \begin{array}{lr} W_i \…

Cocos Creator 如何调试代码?

一、方式调试代码两种方式: 在VS code中调试在浏览器中调试二、调试一:VS Code中Chrome浏览器 打开VS Code中的插件下载Debugger for Chrome/JavaScript Debugger 打开Cocos Creator点击菜单中的开发者选项 选择Visual Studio Code 工作流 -> 添加Chrome debug配置,此时VS…

旋转矢量合成,两个圆圈

import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Circle, FancyArrowPatch from matplotlib.animation import FuncAnimation# 创建一个新图和两个坐标轴 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))# 设置坐标轴的等比例,确…

华三配置mstp

S1配置 stp mode mstp stp region-configuration region-name a revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration qu stp instance 1 root primary stp instance 2 root secondary stp global enable === S2配置 stp region-configuratio…

2024-2025-1 20241411 《计算机基础与程序设计》第七周学习总结

作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标 数组与链表、基于数组和基于链表实现数据结构、无序表与有序表、树、图、子程序与参数作业正文…

并查集+最小生成树 学习笔记

图论系列: 前言: 咲いた野の花よ ああどうか教えておくれ 人は何故傷つけあって 争うのでしょう 相关题单: 题单1 题单2 题单3 题单4 一.并查集 1.基础定义与操作 (1)定义 并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节…

三相电合成旋转矢量-动态图

import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Circle, FancyArrowPatch from matplotlib.animation import FuncAnimation# 创建一个新图和两个坐标轴 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))# 设置坐标轴的等比例,确…

接雨水

using namespace std; //锻炼思维的题目。 int main(){ int t;cin>>t;while(t--){long long int n; // 使用 long long int 来处理可能的大数cin>>n;vector<long long int> a(n), l(n), r(n); // 同样,数组元素也应该是 long long intlong long int …

第 2 篇 Scrum 冲刺博客

作业要求这个作业属于哪个课程 计科34班这个作业的要求在哪里 团队作业4——项目冲刺这个作业的目标 1.站立式会议2.发布项目燃尽图3.每人的代码/文档签入记录4.适当的项目程序/模块的最新(运行)截图5.每日每人总结会议照片昨日已完成的工作/今天计划完成的工作成员 昨天已完…

Nuxt.js 应用中的 schema:extend事件钩子详解

title: Nuxt.js 应用中的 schema:extend事件钩子详解 date: 2024/11/10 updated: 2024/11/10 author: cmdragon excerpt: schema:extend 钩子使开发者能够扩展默认数据模式,为特定业务需求添加自定义字段和验证。 categories:前端开发tags:Nuxt 钩子 数据 扩展 自定义 验证…

nowcoder

Bin 3 1 1 2 2 2 1 40 1 6 5 3 4out 1 -37 3