大模型基础之注意力机制和Transformer

news2024/11/16 7:48:55

【注意力机制】

核心思想:在decoder的每一步,把encoder端所有的向量提供给decoder,这样decoder根据当前自身状态,来自动选择需要使用的向量和信息.

【注意力带来的可解释性】

decoder在每次生成时可以关注到encoder端所有位置的信息。

通过注意力地图可以发现decoder所关注的点。

注意力使网络可以对齐语义相关的词汇。

【注意力机制的优势】

RNNs顺序计算阻碍了并行化

论文:Attention is all you need

【Transformer的结构】

概览encoder-decoder结构

把句子/单词序列切分成一个个的单元,每个单元叫做token,通过embedding幻化为一个向量。

输入层:token的byte pair encoding+token的位置向量(表示它在文本中的位置)

中间模型结构:一些编码和解码块的堆叠。

输出: 一个在词表上的概率分布

损失函数:交叉熵

【输入层:BPE + PE】

BPE byte pair encoding一种分词算法

解决了OOV(out of vocabulary)问题,把罕见字词和未知词编码为字词,例如用一些词根组合来表示。

PE:位置编码

因为不像RNN顺序依次处理每个单词,所以要把位置信息编码后喂给模型。

input=bpe+pe

以上就是论文中比较经典的图啦,对于小白来说太复杂了,暂时不建议深究。

【对transformer的感性认识】

作为一个实用主义者,为了更好的理解和方便后续应用大模型,此处粗略从感性角度讲一下,不妥之处请大拿评论区斧正。

【tansformer由两部分组成】

Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。

如论文中图1所示:Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。橘黄色部分为 Multi-Head Attention(多头注意力),是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

【自注意结构和多头注意力结构】

图2左边是 Self-Attention 的结构,右边是多头,即Self-Attention 重复N遍。

Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。而Q,K,V正是通过 Self-Attention 的输入层(词嵌入表示+位置编码)进行线性变换得到的。

其中有个操作时:每个词的Q矩阵都要与其他每个单词的K进行内积,我猜以此来表征句子中每个单词间关系,同时通过权重来反映“注意力”落在了哪里。

那多头就是重复N次自注意力结构的结算,Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score。

Feed Forward 层比较简单,是一个两层的全连接层,将高维变低维度,方便后续的分类或其他任务。

【decoder块】

1、自底向上方法第一个多头的是masked多头,就是遮盖的意思,在生成第i个词的时候遮住第i个以后的词。它的输入是:样本输出句子编码矩阵/翻译后的句子编码矩阵+masked矩阵。

2、自底向上方法第二个多头矩阵和encoder里的多头计算基本一致。 主要的区别在于其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是根据 Encoder 的输出 C计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q

这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息。

原理的知识暂且分享到这里,后面以更加实用的应用知识为主。

课后阅读:

transformer模型详解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Llama大模型运行的消费级硬件要求【CPU|GPU|RAM|SSD】

大型语言模型 (LLM) 是强大的工具,可以为各种任务和领域生成自然语言文本。 最先进的LLM之一是 LLaMA(大型语言模型 Meta AI),这是由 Facebook 的研究部门 Meta AI 开发的一个包含 650 亿个参数的模型 要在家运行 LLaMA 模型&…

详解LeafLet中如何展示GeoServer发布的图层组

目录 前言 一、关于图层组 1、使用图层图组的好处 2、创建图层组 二、在Leaflet中展示图层组 1、新建Html模板框架 2、绑定地图map和底图设置 3、绑定图层组 总结 前言 在之前的博文中,曾经重点介绍如何使用LeafLet叠加Geoserver wms图层到已有底图的方法 ,…

机器学习复习6

机器学习复习 1 - 在机器学习的背景下,什么是诊断(diagnostic)? A. 这指的是衡量一个学习算法在测试集(算法没有被训练过的数据)上表现如何的过程 B. 迅速尝试尽可能多的不同方法来改进算法,从而看看什么方法有效 C. 机器学习在医疗领域的应用…

上手vue2的学习笔记1之了解前端三剑客

纯小白学习前端开发,找学习资料也花费了一些时间,后续配置环境,也走了很多弯路,这里梳理一下这几天的学习资料,做一个简单的总结。 1.初步了解vue Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&a…

CountDownLatch基本使用及原理

CountDownLatch基本使用及原理 一、CountDownLatch简介二、CountDownLatch类的继承关系1. AbstractQueuedSynchronizer: 用于构建锁和同步器的框架。2. Sync: CountDownLatch的内部类,提供了锁的具体实现。 三、Semaphore的基本使用1. 使用场景:2. 代码实…

Unity3D:编辑属性

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 编辑属性 属性是用于游戏对象组件和资源的设置和选项。 可在 Inspector 窗口中编辑属性。 光源组件显示了各种值和引用属性 属性分为以下主要类别: 引用:…

Scrapy框架之Docker 安装 MongoDB

目录 Docker安装 MongoDB Docker 安装 MongoDB 第一次 MongoDB基础命令 算机存储数据的概念 查看数据库 切换数据库/创建数据库 删除当前数据库 创建集合 查看集合 删除集合 数据的增加 样例 数据的更新 举例 Docker安装 MongoDB Docker Docker 是一个开源的应…

ARM fiq和irq的区别 共享内存 混合联编 6.25

day4 汇编代码初始化系统中: 为什么要保存cpsr:要把其他的状态还原 如(N Z) user:mov r0,#3cmp r0,#4... //irqmovlt r1,#5irq:mov r0,#10cmp r0,#10moveq r2,#6fiq和irq的区别: fiq和irq的区别&#…

CVPR 2023 | SAN: Side Adapter Network for Open-Vocabulary Semantic Segmentation

CVPR 2023 | SAN: Side Adapter Network for Open-Vocabulary Semantic Segmentation 论文:https://arxiv.org/abs/2302.12242代码:https://github.com/MendelXu/SAN 架构设计 冻结的 CLIP,其位置编码为了适应不同于预训练的输入分辨率&…

贪心算法:解决最优问题的简洁而高效方法

目录 引言: 一. 概念与原理 二. 应用场景 3. 实现方法 4. 优缺点分析 引言: 在计算机科学领域,我们经常面临着需要在一系列选择中找到最优解决方案的问题。贪心算法正是针对这类最优化问题而设计的一种简洁而高效的方法。不同于其他复杂…

Educational Codeforces Round 151 (Rated for Div. 2)(A-B)

打完涨了20分…… 算法选修课就学会了dfs……如果有期末复习的这种劲头&#xff0c;其他算法估计早就学会了&#xff08; A Forbidden Integer 这个还WA了三发…… signed main(){IOS;int n,k,x;bool f1;cf{cin>>n>>k>>x;if(k1)cout<<"NO"…

Quiz 14_2-1: Using Web Services | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Quiz 14_2-1: Using Web Services单选题&#xff08;1-15&#xff09;操作题Autograder : Extracting Data from XML Python for Everybody 课程简介 Python for Everybody 零基础程序设计&#xff08;Python 入门&#xff09; This cou…

Echarts折线图默认不显示数据圆点,鼠标hover时折线图上才显示圆点

option {......tooltip: {trigger: axis,},series: [{symbol: circle,symbolSize: 5,showSymbol: false, // 只有在 tooltip hover 的时候显示symbolitemStyle: { // symbol样式normal: {color: rgb(255, 255, 255),borderColor: rgba(255, 255, 255, 0.2), // symbol边框颜色…

6.20、JAVA 初识序列化与反序列化

初识序列化与反序列化 1 概述 序列化是指将对象的状态信息转换为可以存储或传输形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后可以通过从存储区中读取或者反序列化对象的状态,重新创建该对象. 序列化:利用ObjectOutputStream,把对象的信息,按照固定…

【QT】如何自定义QMessageBox的窗口大小,通过继承QDialog重新实现美观的弹窗

目录 1. QMessageBox原有的弹窗2. 网上第一种方法&#xff1a;通过样式表setStyleSheet实现改变弹窗大小&#xff08;总体不美观&#xff09;3. 网上第二种方法&#xff1a;重写ShowEvent()改变弹窗大小&#xff08;总体也不美观&#xff09;4. 最好的办法&#xff1a;继承QDia…

centos安装k8s

1. 前置 俩台centos服务器,不过多说明,教程基于centos 2. hosts配置 我这样配置&#xff0c;最后没发现那块有联动&#xff0c;望大佬更正 vim /etc/hosts 在末尾添加 192.***** master 192.*** note3. 防火墙 说是要关闭防火墙&#xff0c;我俩台服务器都是基于内网&…

服务器数据库中遭受Devos勒索病毒攻击后解密处理方法,勒索病毒数据恢复

在当今数字化时代&#xff0c;服务器数据库的安全性备受关注。然而&#xff0c;网络安全威胁依然存在&#xff0c;勒索病毒如Devos仍然是一种常见的攻击计算机病毒。最近&#xff0c;收到很多企业的求助&#xff0c;企业的财务系统账套遭到了Devos勒索病毒攻击&#xff0c;导致…

js数组中对象的替换,替换原数组 lodash中一些常用的方法(很实用)

代码 let myArray [{name: John, age: 25},{name: Alice, age: 30},{name: Bob, age: 35} ];// 要替换的对象 let objToReplace {name: Alice, age: 30};// 替换为的对象 let replacementObj {name: Alex, age: 28};// 使用forEach方法 myArray.forEach((obj, index) > …

浙大滨江院Om中心发布首个大规模图文配对遥感数据集,让通用基础模型也能服务遥感领域...

写在前面 2021 年年底&#xff0c;OpenAI 发布了 CLIP&#xff0c;利用带噪的图像-文本配对数据预训练的视觉语言模型&#xff0c;展示了前所未有的图像-文本关联能力&#xff0c;在各种下游任务中取得了惊人的结果。虽然取得了很大的进展&#xff0c;但是这类通用视觉语言基础…

Visual C++中的虚函数和纯虚函数(以策略设计模式为例)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来说说Visual C中的虚函数和纯虚函数。该系列帖子全部使用我本人自创的对比学习法。也就是当C学不下去的时候&#xff0c;就用JAVA实现同样的代码&#xff0c;然后再用对比的方法把C学会。 直接说虚函数…