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

5.Transformer模型详解

Transformer模型

这里本人学习了清华大学马少平老师的课程,分享的是本人学习过程中所做的笔记以及感悟形成这篇博客。
马老师课程链接:https://space.bilibili.com/1000083494/upload/video

第一讲 来源背景

序列到序列问题(编码器-解码器模型)

输入中文 --> 翻译系统 --> 输出英文 (输入中文序列,输出英文单词序列)

文本描述 --> 生成视频 (描述是文字序列,视频是帧序列)

在这里插入图片描述

序列到序列问题可以表达出 编码器解码器模型

编码器将输入编码成中间表示,解码器将中间表示解码成输出 在这里插入图片描述

RNN是编码器-解码器模型

在这里插入图片描述

循环神经网络存在的问题

  1. 词的语义由上下文中与其相关的词决定,但rnn可能把两个“苹果”当成一个意思

    在这里插入图片描述

  2. 长距离依赖问题

    在这里插入图片描述

  3. rnn中词向量是固定的,静态的。比如“苹果”的词向量是固定的。但针对前面两个苹果,我们需要动态表示词向量

Transformer模型

为了解决RNN存在的问题而提出的,本质仍然是 编码器-解码器模型
在这里插入图片描述

第二讲 注意力机制

注意力机制

来源于认知心理学中选择性注意现象。比如下图,我们第一时间看到的大概率是这只熊,而这里面有什么树,树的种类有哪些这是被我们忽略的。

在这里插入图片描述

下图

第一句话中,“苹果”需注意 “美味”,“吃了”,“非常”。

第二句话中,“苹果”需注意“用”,“联系”。

在这里插入图片描述

在这里插入图片描述

例子:中年人的平均收入

在这里插入图片描述

注意力机制描述

在这里插入图片描述

在这里插入图片描述

总结注意力机制计算过程

在这里插入图片描述

在这里插入图片描述

注意上述softmax右边乘的是V而不是V的转置(让softmax行向量中每个元素,乘对于的v向量)。最终结果就是依照注意力机制,对q的一个查询结果。

前面是一个查询,若查询有n个。

在这里插入图片描述

一个计算的例子

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

自注意力机制

引入注意力机制作用:为了计算一个词在一句话中它的含义,那么哪个是查询,哪个是键,哪个是值呢?实际上处理一句话中,每个词即是查询也是键也是值,自己跟自己来进行查询,这样就得到了词向量的动态表示,这种称为自注意力机制

在这里插入图片描述

xi 表示一句话中第i个词的词向量,假定有n个词,词向量d维,则输入序列用n行d列矩阵X来表示。自注意力矩阵也为n行d列,第i行代表第i个词动态表示的词向量。

在这里插入图片描述

第三讲 多头注意力机制

多头注意力机制,一个头提取了某种语句特征,多头从不同角度提取不同的特征。

在这里插入图片描述

多头注意力机制基本思想

不同子空间就像,从侧面看,正面看,上面看。怎么变化到不同子空间呢?答: 设三个矩阵Wq, Wk, Wv,在让Q右乘这三个矩阵(向量右乘矩阵 表示把这个向量变化到了一个新的空间,如果维度有变化到化,就成为一个子空间)

在这里插入图片描述

一组变换中的一组指Wq, Wk, Wv称为一组

在这里插入图片描述

在这里插入图片描述

一次注意力机制的结果Ui为n行dh列。如何拼接,看下面例子:

在这里插入图片描述

  • d为词向量的维度,为4 (U1,2,3 矩阵中的一行,对应一个单词的词向量
  • n为序列长度,为5
  • h为几个头,为3
  • dh为每个头的输出维度,为2

将Ui(i = 1,2…h)拼接成大矩阵U(n行,h乘dh列)之后呢,我们希望给U变换到n行d列。n行本身就是n行没问题(一行对于一个单词的词向量)。将U右乘Wo (h * dh行,d列)然后得到多头注意力矩阵(n行d列)

在这里插入图片描述

多头注意力机制的神经网络表示

多头注意力机制可以用神经网络来表示,或者是它就是一个神经网络只不过稍微有点复杂。跟神经网络的原理完全一样。

里面涉及的参数也就是那些矩阵 可以按照BP算法来训练,即当作一个神经网络来训练。

重要的概念:多头注意力机制中要先右乘一个矩阵进行空间变换(行向量右乘矩阵就是表达只有一个输入一个输出的神经网络)

在这里插入图片描述

第四讲 残差连接与层归一化

残差网络

残差网络图示如下,恒等映射(残差连接)是残差网络的最重要思想,注意核心计算层并不一定要用卷积也可以用别的。

在这里插入图片描述

残差连接的一般形式如下图

在这里插入图片描述

Transformer中两种残差连接

全连接神经网络的残差连接

即用全连接神经网络代替残差网络中卷积神经网络部分。

x1,x2,x3…xn中每个可以看作是一个单词的向量表示。

在这里插入图片描述

多头自注意力机制残差连接

即用多头自注意力机制代替残差网络中卷积神经网络部分。

x1,x2,x3…xn中每个可以看作是一个单词的向量表示。

先进行一次多头自注意力机制计算,然后每个再进行残差连接,最后得到z1,…,zn结果。

在这里插入图片描述

层归一化

在每个编码层,每个层对它的向量进行层归一化处理。

用来解决内部协变量偏移问题(ICS),在神经网络中当层多了后普遍存在的问题。

如何解决该问题?归一化处理,使得数据分布具有相同的均值和均方差。针对不同问题从不同角度构成了不同的归一化方法。

下图中的1向量,与zi同维,每个元素都为1。

hi分母加个很小的量防止分母为0。

这样处理后,我们可以得到hi均值为0,均方差为1,这就叫层归一化。

在这里插入图片描述

层归一化存在的问题与解决

绝大部分数据落入线形区域,对神经网络性能有影响

在这里插入图片描述

解决方法1:增加平移和缩放,平移和缩放这两个参数当作学习的参数通过训练来学习。

解决方法2: 均方根层归一化方法,是解决方法1中均值和平移量均为0时的特例。经过试验,非常有效。

在这里插入图片描述

第五讲 Transformer的编码器

结构示意如下图

在这里插入图片描述

编码器的输入层

输入层中引入了位置信息即位置向量,将位置用向量来表示

在这里插入图片描述

将词向量与位置向量相加得到含有位置信息的词向量

在这里插入图片描述

输入层矩阵表示

X是输入序列,其每一行是一个词向量,若X有n行则说明输入序列由n个单词组成

在这里插入图片描述

编码器的编码层

编码层的输出是对该编码层输入的编码表示

在这里插入图片描述

编码层具体如何来编码的呢?

step1 对编码层的输入进行多头自注意力机制计算,然后进行残差连接将编码层的输入与自注意力机制计算的结果求和。并对结果进行层归一化。

step2 对step1结果进行全连接神经网络计算,然后进行残差连接求和,最后对结果进行层归一化得到编码层的输出结果。

在这里插入图片描述

每个编码层结构完全一样,只不过输入输出不一样。编码层从浅到深,从对语法编码到对语义编码。最后语法信息语义信息都表示在中间表示序列了,以向量来表示。

在这里插入图片描述


解码层后续会接着更新,欢迎追更。。。。

http://www.xdnf.cn/news/786619.html

相关文章:

  • SKUA-GOCAD入门教程-第八节 线的创建与编辑2
  • 后端解决跨域问题的三种方案:注解配置 vs 全局配置 vs 过滤器配置(附完整代码详解)
  • Spring 官方推荐构造函数注入
  • 通过阿里云 DashScope API 调用通义千问
  • Vue插槽
  • 基于RGB-D图像的避障检测算法开发(Python实现)
  • 013旅游网站设计技术详解:打造一站式旅游服务平台
  • 云服务器是否需要备案
  • Arthas实际应用与实战
  • mybatis和hibernate区别
  • Vue 渲染三剑客:createRenderer、h 和 render 详解
  • 第四章 4.IP Address (CCNA)
  • JSCH使用SFTP详细教程
  • Ntfs!NtfsLookupAllocation函数分析之读取runs的一个例子
  • Rust 学习笔记:关于 Cargo 的练习题
  • 计算机操作系统知识点总结①
  • D1-基于本地Ollama模型的单轮问答系统
  • Docker部署与应用、指令
  • AutoGenTestCase - 借助AI大模型生成测试用例
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • 【Typst】3.Typst脚本语法
  • Unity Shader编程】之高级纹理
  • C++ TCP传输心跳信息
  • 秋招Day12 - 计算机网络 - IP
  • Kafka集群部署(docker容器方式)SASL认证(zookeeper)
  • 用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
  • 软件工程的定义与发展历程
  • 关于FPGA软核的仿真(一)
  • 队列的讲解:C++队列的使用
  • 12.7 LangChain实战:1.2秒响应!用LCEL构建高效RAG系统,准确率提升41%