【机器学习】21. Transformer: 最通俗易懂讲解

news/2024/12/24 11:35:25/

1. 结构:Encoder and Decoeder

  • Encoder Component:结构相同的编码器堆栈
    • Self-attention Layer: 帮助查看输入句子中的其他单词,因为它编码了一个特定的单词。在这里插入图片描述
  • Decoding component: 由相同数量的编码器组成的一组解码器。
    • Encoder-decoder attention layer:帮助将注意力集中在输入句子的相关部分
      在这里插入图片描述

2. Encoder 第一个输入的embedding

和传统的NLP网络一样,文本数据都是通过embedding转换成向量进行操作
在这里插入图片描述
在这里插入图片描述

3. self-attention 层

假设输入是这个句子,自注意力机制能够帮助it连接到animal
“The animal didn’t cross the street because it was too tried.”
在这里插入图片描述

self-attention 实现

  1. 给每行一个encoder的输入向量,创建 query 向量,key向量,value向量
    通过将embedding乘以我们在训练过程中训练的三个矩阵得到,Q,K,V矩阵
    三个矩阵是什么?是右侧的W(Q),W(K)和W(V)
    在这里插入图片描述
  2. Q * K计算分数
    取Q向量与我们要评分的单词的K向量的点积 Q*K
  3. 除以8
    为什么是8?作者是这么做的。64是key vector的大小,因为embedding是512,把key vector取了64,开平方得到了8.
  4. softmax得到概率
    在这里插入图片描述
    这些分数决定了编码当前位置的词, 即Thinking的时候, 对所有位置的词分别有多少的注意力. 很明显, 在上图的例子中, 当前位置的词Thinking对自己有最高的注意力0.88
  5. value * softmax的结果
    保留我们想要关注的单词的价值,并淹没不相关的单词。
  6. 把最后加权过的V向量相加
    在这个位置产生自注意层的输出(对于第一个单词)
    在这里插入图片描述

4. 多头机制

在这里插入图片描述
在这里插入图片描述
一个embedding有多个输出。

因为前馈神经网络接受的是1个矩阵(每个词的一个向量), 所以我们需要有一种方法把10个矩阵整合为一个矩阵
在这里插入图片描述
输出左右拼接,再有一个W向量,二者相乘得到最终结果向量。
在这里插入图片描述
回顾之前翻译的案例,可以得到一个注意头是animal,另一个是tire

5. Position Encoding(和embedding相加)

前面的embedding并没有位置信息
Position Encoding

  • 提供嵌入向量之间有意义的距离,一旦投影到Q/K/V向量。
  • 确定每个单词的位置。

在这里插入图片描述
在这里插入图片描述
最后相加的结果传递给self-attention层

6. Residuals

跟ResNet的操作一样,输入和输出相加作为下一层的输入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. Decoder

顶部编码器的输出被转化为一组注意力向量K和V

  • 用于“编码器-解码器注意”层解码器。
  • 关注输入序列中的适当位置

每一步的输出在下一个时间步中被馈入底层解码器。
在这里插入图片描述

8. 最后的Linear and Softmax layer

在这里插入图片描述
假设我们的模型认识5000个唯一的英文单词, 那么logits向量的维度就是5000,跟其他神经网络一样,这里是概率。

9. 训练概述

首先,真实的标签会用one-hot转换成向量。
之后使用损失函数
该模型为每个单词生成一个的概率。

  • 使用反向传播使输出更接近实际输出。
  • 比较两种概率分布:
    • Cross-Entropy
    • Kullback-Leiber Divergence

10. 选择Transformer的理由

优点:
更好的远程连接
更容易并行化
在实践中,可以使其比RNN更深(层次更多)
缺点:
注意力计算在技术上是O(n^2) 【n是最长的句子】
实现起来有点复杂(位置编码等)

优点似乎远远大于缺点,transformer在许多情况下比rnn和LSTMs工作得更好
可以说是过去十年中最重要的序列建模改进之一。


http://www.ppmy.cn/news/1543782.html

相关文章

H5底部输入框点击弹起来的时候被软键盘遮挡bug

就是输入框在底部,然后点击输入框的时候,软键盘弹起来了,但是输入框没有跟着一起弹起来,被软键盘档住了。 这个bug有下面几个特点 特点1 而且这个bug在ios17是没有的,在ios16是有的,并且是偶现的。 特点…

无人机之感知避让技术篇

无人机的感知避让技术是无人机安全飞行的重要保障,它依赖于多种传感器和算法来实现对周围环境的感知和判断。 一、主要技术类型 视觉避障 原理:通过安装在无人机上的摄像头捕捉周围环境的图像,利用计算机视觉技术对图像进行处理和分析&…

Highcharts 条形图:数据可视化的利器

Highcharts 条形图:数据可视化的利器 引言 在数据分析和可视化领域,Highcharts 是一个广受欢迎的 JavaScript 图表库。它以其易用性、灵活性和丰富的图表类型而著称。其中,条形图作为一种基础但功能强大的图表类型,被广泛应用于各种场景,以直观地展示数据分布和比较。本…

Spring Boot框架下校园社团信息管理的优化策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理校园社团信息管理系统的相关信息成为必然。…

thinkphp和vue基于Workerman搭建Websocket服务实现用户实时聊天,完整前后端源码demo及数据表sql

最近接了一个陪玩小程序,其中有一个实时聊天的项目,需要搭建Websocke服务,通过多方考虑选择了通过GatewayWorker框架(基于Workerman),将代码提取了出来,用到的框架封装到了vendor目录下,完整前后…

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

【Android】Java开发语言规范

Java语言规范 命名风格 **类名:**使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO,所有单词的首字母大写**方法名、参数名、成员变量、局部变量:**统一使用 lowerCam…

《Keras3 深度学习初探:开启Keras3 深度学习之旅》

《Keras3 深度学习初探:开启Keras3 深度学习之旅》 一、Keras3 初印象二、安装与配置(一)安装 Keras3(二)配置环境 三、模型构建基础(一)序列模型与函数式 API(二)模型的…