transformer入门知识解析——新手必看

对应课程:Transformer简明教程, 从理论到代码实现到项目实战, NLP进阶必知必会._哔哩哔哩_bilibili

1.初识transformer结构

transformer的结构:

编码器解码器的内部结构:

Self Attention 表示自注意力机制

Feed Forward 表示全连接层

2.计算注意力过程

上图表示输入是两个词a,b。

Embedding表示将输入的两个词进行向量化为两个向量x1和x2。注意:通过图片的给出的向量x1和向量x2发现。两个向量都是一个一行四列的矩阵,这个结论很重要,会与后期的注意力计算机制相联系。

通过图片中的右下角位置,发现一共有三个变量WQ\WK\WV,且三个变量都是四行三列的矩阵。当输入的数据向量化得到的矩阵与之相乘的结果,就是一个一行三列的矩阵。即分别对应着:Queries\Keys\Values三个变量。计算得到的这三个变量很重要,因为将由这三个向量计算整个模型中的注意力机制。后面会将这三个向量简称为q,k,v。

3.自注意力向量形式计算的过程

上图表示的含义为:

①此时输入的Thinking 和Machines。通过将输入的词进行向量化后得到对应的向量化表示x1,x2。然后将向量化表示的变量分别乘以对应的WQ,WK,WV得到对应的q1,k1,v1。

②上图中用黑线画出的部分就是计算Thinking的自注意力。首先是计算score,计算方式是Thinking的q1,分别乘以k1和k2(这里在计算的过程中,应该涉及到聚举证的转置),得到数值分别为112和96。

③计算score完成后,然后将计算得到的数值。除以8,分别得到14和12。

除以8,详细解析?——与词向量编码相关

④然后将除以8的到的结果,通过softmax激活函数处理,得到两个小数为0.88和0.12。
​
⑤然后将softmax处理后的结果,分别与输入向量的v相乘。得到两个新的v1和v2向量。

⑥最后将两个新的v1、v2向量进行相加,得到向量z1=0.88v1+0.12v2。且这个变量z就是自注意力计算的结果。

4.自注意力的矩阵形式计算过程

简单讲解:

即q和k的转置进行点积运算,然后除以dk的算术平方根。最后将计算的结果经过softmax函数处理,乘以v就得到z。

5.单头注意力机制和多头注意力机制

简单理解单头注意力机制和多头注意力机制:

单头注意力机制只有一组q,k,v。(q,k,v是输入数据经过向量化处理后与三个矩阵相乘后得到的向量。)

多头注意力机制有多组q,k,v。(根据多头注意力机制的定义:我们可以知道多头注意力机制,则应该对应着多组向量。且一组向量对应着三个计算qkv向量的矩阵),然后将计算得到的多个向量q,k,v通过concat组合到一起。

6.多头注意力机制的详细计算过程

上图中第二列中我们可以发现:参与计算q,k,v的矩阵是叠加在一起的。而且有8组。所以根据前文介绍的知识,可以知道计算的结果就会对应着八个不同的q,k,v向量。也对应着八组自注意力计算结果。然后通过线性运算wo,将得到八组自注意力机制计算结果进行组合,得到最后的注意力结果z。

7.词向量编码

transformer在进行词向量编码的时候,会向数据中加入位置信息,从而使得transformer神经网络可以区分不同位置的相同数据。

上图是transformer进行词向量编码的过程:

就是现将输入的数据进行编码,然后再将输入数据的位置信息,也对应的生成一个位置向量,最后将位置编码和输入信息编码进行相加就得到了最后的输入数据编码。

8.位置编码矩阵元素计算公式

上述公式解释:

PE是一个很大的矩阵,然后pos表示是第几个词(表示矩阵的行数)。i表示词向量编码之后的第i个向量(表示矩阵的列数)。

上述两个公式区别:

第一个公式计算偶数列数据

第二个公式计算奇数类数据

9.mask相关知识点

PAD MASK不计算针对PAS的注意力。

通过上述的图片我们可以看到第一行的数据为:ab<pad> ,第1列的内容为:

ab<pad>我们将第一行和第一列的内容都看成是一句话。在实际的运算的时候是多句话一起计算的。在多句话的计算过程中,可能出现的问题是句子的长短不一。为了统一计算,我们需要将每句话的长度进行统一。具体的做法为:将短的句子进行补长。上述的例子中,我们是将一个句子的长度扩充为3。

在计算的时候每个词对pad的注意力都是mask,但是pad对其他词的注意力,正常计算。

以上就是pad mask方式计算注意力的过程。

上三角mask计算注意力的关键:不计算对未来词的注意力

解释上图:

当计算对a的注意力的时候,不关注其他的词。因为b和c是需要让a进行预测的结果。即解码器中的一个计算,需要根据a预测出b和c这个结果。如果让a关注到b这不能起到预测的作用,因为会直接得到结果。

同样在计算b的注意力的时候:不能让b关注c,因为在transformer中的阶码器阶段需要根据b预测c。

上图是整合上三角mask和padmask的计算注意力方式。

10.transformer的完整计算流程

上图是transformer的encorder计算过程。

表中的计算流程前面基本已经介绍完成。

LayerNorm部分表示短接:简单的理解为将xi和zi进行相加。

在实际的transformer网络中encoder不只一个,可能存在n个encoder,这n个encoder之间是上下串联的关系。然后将最后计算的结果输出到decoder中计算。

decoder的过程与encoder部分基本相似。不同点在于:encoder decoder attention的计算是的k,v是encode的计算结果。然后自己的encode 输出的结果作为q。然后通过短接,然后通过全连接层处理。decoder有多个,多个decoder是串联关系。将经过多个decoder计算的结果,使用线性方程(softmax)处理输出预测结果。

11.transformer实战代码

x表示一种语言,其中x语言中的所有词汇如词表中显示。结合实际生活,我们发现在生活中每个词语的使用频率是不同的,所以在x语言中每个词语对应的使用频率也是不一样的。x语言的每个词语对应的使用频率如采样频率显示一一对应。

上图中“随机长度x”表示的是用x语言组织的一句话。

在本次transformer实战中,我们需要实现的目的是:将x语言翻译成另外一种语言y。

结合生活实际:我们之所以能将中文翻译成英文,是因为两种语言之间存在某种联系。

所以在实现将x语言转换为y语言的时候,也会有着对应的关系:

通过上图展示内容:我们可以发现,y语言中是x语言逆序以后的结果,而且将x语言中的小写字母变为大写字母。且用10减去x中的数字。同时根据虚线所指的方法发现,y语言的第一位字母取决于x的最后一位。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

45.HarmonyOS鸿蒙系统 App(ArkUI)创建列表(List)

列表是一种复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求&#xff08;如通讯录、音乐列…

springBoot+vue编程中使用mybatis-plus遇到的问题

mybatis-plus中遇到的问题Code Companion Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)…

如何正确使用数字化仪前端信号调理?(一)

一、前言 板卡式的数字转换器和类似测量仪器&#xff0c;比如图1所示的德思特TS-M4i系列&#xff0c;都需要为各种各样的特性信号与内部模数转换器&#xff08;ADC&#xff09;的固定输入范围做匹配。 图1&#xff1a;德思特TS-M4i系列高速数字化仪&#xff0c;包括2或4通道版…

大模型项目整体规划、技术选型和案例分析经验分享

1 项目整体规划 1.1 明确场景 toB or toC&#xff08;面向企业还是面向消费者&#xff09; toB&#xff08;面向企业&#xff09;&#xff1a;指的是产品或服务主要面向其他企业或组织。这类产品通常需要解决特定的商业问题&#xff0c;强调效率和集成性&#xff0c;并且可能需…

机器学习-随机森林温度预测模型优化

文章目录 前言旧模型训练新模型训练参数查看组合参数训练学习模型评估 前言 在机器学习-随机森林算法预测温度一文中&#xff0c;通过增大模型训练数据集和训练特征的方式去优化模型的性能&#xff0c;本文将记录第三方种优化方式&#xff0c;通过调整随机森林创建模型参数的方…

10.哀家要长脑子了!

1. 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 哎哟 我去 我还以为你都搞懂了 呵呵 当时问题出现在右边界初始化 左闭右开 右边界是取不到的 int left 0, right nums.size() ; while(left < right) { int mid left (right - left) / 2; if( target > …

数据可视化高级技术Echarts(堆叠柱状图)

目录 一.如何实现 二.代码展示 1.stack名称相同&#xff08;直接堆叠&#xff09; 2. stack名称不相同&#xff08;相同的堆叠&#xff0c;不同的新生成一列&#xff09; 一.如何实现 数据堆叠&#xff0c;同个类目轴上系列配置相同的 stack 值可以堆叠放置。即在series中…

前端三件套学习笔记(持更)

目录 1、HTML,CSS,JS区别 2、HTML结构 1、HTML,CSS,JS区别 结构写到 HTML 文件中&#xff0c; 表现写到 CSS 文件中&#xff0c; 行为写到 JavaScript文件中。 2、HTML结构 <!DOCTYPE html> <html><head><title>我的第一个页面</title><…

城市选择器小程序实现

1.效果图 2.使用方法 # 城市选择器&#xff0c; 城市数据库可自己导出 ##后台数据API 由HotApp小程序统计提供并维护&#xff0c;如果需要导出并部署在公司的生产环境&#xff0c;最后有SQL导出下载地址 ## 使用方法 - 复制pages/district到你的项目目录 - 把样式文件distr…

4/11 QT_day5

服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QMessageBox> #include <QTcpSocket> #include <QList> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass …

Java应用CPU飙升和死锁排查实战教程

引言 在日常开发中&#xff0c;我们可能会遇到Java应用CPU飙升和死锁的问题。本文将通过实际案例&#xff0c;为大家介绍如何排查这些问题 Java应用CPU飙升和死锁排查步骤 先执行top命令&#xff0c;找到CPU占用比较高的进程再执行jstack 进程id > dump.txt找到进程中CPU…

[GDC24]TheFInals的破坏系统

GDC24上TheFinals的开发工作室–EmbarkStudios带来; TheFinals把实时破坏在主流游戏上提升到了新的高度,可以说是新的标杆,达成了: 可以出现大规模的任意破坏破坏之后充分影响gameplay,可以把建筑任意炸毁之后,坍塌的建筑继续保留&物理正确(有正确的网络同步),可以废墟中继…

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中&#xff0c;除了了解中间件&#xff0c;web漏洞&#xff0c;这些攻击的手法&#xff0c;还得了解应急响应&#xff0c;安全产品&#xff0c;入侵排查&#xff0c;溯源反制...... 那么今天&#xff0c;就来说一下安全产品&#xff08;安全公司我就不说了&#xff0c;这个…

使用 ChatGPT-4 编码就像与一个醉酒的天才一起工作

我决定从头到尾使用 ChatGPT 来构建一个用于管理书签的 Chrome 扩展。在生成了 30,000 多行 JavaScript、HTML、CSS 和云后端后&#xff0c;我的收获是&#xff0c;使用 ChatGPT 进行编码就像与一个醉酒的编程天才一起工作&#xff1a;他很懒&#xff0c;患有记忆丧失&#xff…

二极管分类及用途

二极管分类及用途 通用开关二极管 特点&#xff1a;电流小&#xff0c;工作频率高 选型依据&#xff1a;正向电流、正向压降、功耗&#xff0c;反向最大电压&#xff0c;反向恢复时间&#xff0c;封装等 类型&#xff1a;BAS316 ; IN4148WS 应用电路: 说明&#xff1a;应用…

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…

【python】python抓取古诗文内容保存(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Ubuntu-22.04安装KVM虚拟机并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、KVM是什么&#xff1f;二、安装步骤1.检查虚拟化2.查看KVM虚拟化3.安装KVM4.启用后台进程5.添加用户组6.重启电脑 三、使用步骤1.添加虚拟机2.配置虚拟机3.…

高颜值登录页面(一键复制)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合集 266篇…

leecode438 | 找到所有字符串中的异位词

题意大致是&#xff0c;给定两个字符串&#xff0c;s 和 p 其中 要在s 中找到由p的元素组成的子字符串&#xff0c;记录子字符串首地址 class Solution { public:vector<int> findAnagrams(string s, string p) {int m s.size(), n p.size();if(m < n)return {};vec…