从【注意力机制】开始的,零基础【大模型】系列

注意力机制

    • 原理:从关注全部到关注重点
      • 软注意力-计算方式
      • 传统注意力问题
    • 键值注意力:单标签的检索系统
      • 计算方式
    • 多头注意力:多标签的检索系统
    • 自注意力:对输入数据内部关系进行预处理
      • 计算方式
    • Transformer

原理:从关注全部到关注重点

卷积神经网络利用空间信息,卷积层提取图像的局部特征,层层堆叠学习更高级的特征,降低复杂度。

循环神经网络通过循环连接和隐藏状态的传递,实现对序列数据的建模和处理,具备了对序列中的长期依赖关系进行建模的能力,能够更好地捕捉序列数据中的模式和规律。

注意力机制利用相关性信息,根据不同输入部分的重要性给予不同的权重。这样可以实现对重要信息的集中关注,提高网络的表达能力和性能。

最开始,注意力机制都是在【编码器】-【解码器】架构:

编码器和解码器之间,有一个固定长度c,作为俩者的联系。

存在信息瓶颈问题:把前面压缩的信息都给这个固定长度,当压缩的信息越大,丢失的信息也就越多,越前面的信息越记不住。

解决方案:

最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。

编码器需要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。

这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。

比如读一本故事书,传统的方法是将整个故事的内容压缩成一个固定长度的概括性句子,这样只能关注整个故事的总体信息,而忽略了细节。

而使用attention模型,可以更好地理解故事的每个部分。

举个例子,有一个故事是关于一只狗在公园玩耍的。使用attention模型可以逐步理解故事:

在开始时,会将注意力集中在故事的第一句话,了解故事的开头。

随着故事的发展,会根据注意力权重选择性地关注一些关键词,比如“狗”、“公园”、“玩耍”等。

会将注意力从第一句话逐渐转移到后面的句子上,以便理解故事的进展和发展。

当故事提到狗在公园玩耍的时候,注意力会更加集中,以便更好地理解这个关键情节。

通过使用attention模型,可以逐步理解故事的每个部分,并且能够根据需要选择性地关注关键信息,从而更好地理解故事的含义。

当涉及到注意力机制时,有几种常见的变体,它们分别是:

  1. Soft-Attention(软注意力):函数在域内平滑变换,如下图:

  1. Hard-Attention(硬注意力):随机抽样实现的,更为离散的注意力机制,它在每个时间步选择一个输入位置来聚焦,而不是分配连续的注意力权重。这意味着模型只能选择一个位置来关注,在处理离散输出序列时可能更具优势。

  1. Global-Attention(全局注意力):考虑每个隐藏状态与整个输入序列中的所有位置进行关联。在计算注意力权重时,它考虑了整个输入序列的信息,从而能够更全面地捕捉输入序列中的重要信息,但大部分时候没必要。

  1. Local-Attention(局部注意力):Local-Attention 是一种注意力机制,它只关注输入序列的一部分,而不是整个序列。通过定义一个窗口或区域来限制注意力的范围,Local-Attention 可以减少计算开销,并且在长序列的情况下可以更高效地进行处理。

  1. Self-Attention(自注意力):注意力机制可以帮助我们关注频繁出现或与问题相关的单词,而自注意力机制可以帮助我们建立单词之间的关联性,以更好地理解整个材料。


转换:

通过了解这些不同的注意力机制变体,我们可以选择最适合特定任务和数据的方法,以提高模型在处理序列数据时的性能和效果。

软注意力-计算方式

首先,计算注意力得分:

  • e k j = s c o r e ( H ( k − 1 ) , h ( j ) ) e_{kj} =\mathrm{score}(H^{(k-1)},h^{(j)}) ekj=score(H(k1),h(j))

e k j e_{kj} ekj 的值反映了第 k k k 层与第 j j j 个隐藏状态之间的相关性或相似度。

然后,对得分进行 softmax 归一化,得到注意力权重:

  • α k j = exp ⁡ ( e k j ) ∑ i = 1 T x exp ⁡ ( e k i )    ⟺    α i = S o f t M a x ( e k ) \alpha_{kj} =\frac{\exp(e_{kj})}{\sum_{i=1}^{T_x}\exp(e_{ki})}\iff\alpha_i=SoftMax(e_k) αkj=i=1Txexp(eki)exp(ekj)αi=SoftMax(ek)

其中, α k j \alpha_{kj} αkj 表示第 k k k 层的注意力权重, α i \alpha_i αi 表示第 i i i 个注意力权重。

最后,通过加权平均的方式,计算上下文向量:

  • C k = ∑ i = 1 T x α k i h ( i ) C_{k} =\sum_{i=1}^{T_x}\alpha_{ki}h^{(i)} Ck=i=1Txαkih(i)

其中, C k C_k Ck 表示第 k k k 层的上下文向量, h ( i ) h^{(i)} h(i) 表示第 i i i 个隐藏状态向量。

传统注意力问题

传统注意力机制过程,见下图:

  • 编码器生成一个个隐状态 h i − j h^{i-j} hij (图 1 的 hidden state)来与解码器的当前状态计算分数(图 1 的 score)
  • 再经过softmax层(图 1 的 softmax)
  • 再分别与对应的编码器状态乘积相加(图 1 的 multiplication)
  • 所有编码器状态乘积相加(图 2 的 multiplication),得到上下文信息c(图 2 的 context vector)
  • 传给解码器

:图1:

图2::

如果我们手动将最后一个输入的权重设置为1,其他设置为0,那么我们将注意机制减少到原始的上下文向量机制(单个c)。

即,不需要注意先前的输入编码器状态,只需要最后一个关键词。

传统注意力问题:这个过程直接使用编码器状态计算,注意力分数会仅基于隐状态在序列中的相对位置,而不是内容,就限制了模型关注相关信息的能力。

传统的注意力机制局限在了位置信息上,无法很好地捕捉到关键词之间的语义联系。

这就像是只看书中句子的相对位置,而没有考虑句子的内容。

为了解决这个问题,引入了更先进的注意力机制。

键值注意力:单标签的检索系统

键值注意力机制,通过引入键(key)和值(value)的概念,解决了传统注意力机制只依赖位置信息的限制。

键值注意力机制通过计算查询向量与键之间的相似度,来决定对应的值对于查询的重要程度。

见上图,value 值不参与 score 计算相似性分数,保证相似性和内容分离。

通过将值与键分离,可以更好地将注意力集中在与查询相关的特征上。

值提供了与键相关的信息,可以作为额外的特征来丰富查询结果,但它不直接影响相似性分数的计算。

这种分离可以提高模型的鲁棒性和可解释性,并允许更灵活的查询结果生成。

键值、查询的概念源于检索系统,检索系统就是键值注意力。

  • 搜索内容时,搜索引擎会将查询用户搜索意图)映射到数据库中
  • 找到与候选视频相关的一组视频标题、描述)和 视频的具体内容

这样我们就解决了,传统注意力无法捕捉到关键词之间的语义联系。

计算方式

  • 输入 X,查询Q,键K,值向量V,通过线性变换,映射到隐藏空间
  • 计算 K 和 Q 的点积,求俩个向量在特征空间的相似性(正交结果为0,越相似)
  • 除以向量的维度 d k \sqrt{d_{k}} dk
  • 使用 softmax 归一化
  • 再乘值向量 V

之后的计算,和传统注意力相同。

权重和value相乘得到 multiplication ,再所有编码器乘积 multiplication 相加,输出。

当 Key 等于 Value 的时候,键值注意力就会退化为传统注意力。

多头注意力:多标签的检索系统

键值注意力也有缺陷,现代的系统都有很多标签的。

比如我想看的漫画,需要同时包含:彩色、国内、热血、冒险、治愈等标签。

键值注意力只能查询一个标签,而多头注意力可以多个查询向量,解决这个问题。

效率、智能程度比键值好太多。

自注意力:对输入数据内部关系进行预处理

自注意力机制主要解决了传统注意力在处理长序列时的两个问题:长距离依赖和计算效率。

给你一段文字材料,要求你找出其中最重要的关键词。

文字材料是输入序列,需要找出的关键词就是查询。

  1. 注意力:如果材料中提到的某个单词在整个材料中频繁出现或者与问题相关,你可能会更关注这个单词。

  2. 自注意力:如果一个单词在材料的其他位置与多个重要的单词相关联,那么这个单词可能也很重要。

通过注意力机制,你能够决定在阅读过程中关注哪些单词,而通过自注意力机制,你能够建立不同单词之间的关联性,更好地理解整个材料。

句子:The animal didn’t cross the street because it was too tired.

这个 it 到底指的什么呢?

  • 下图颜色越深,表示 it 关联性越大

    相当于,计算了一个权重,对输入数据内部关系进行预处理。

计算方式

Transformer

注意力机制是一种选择性的关注方式,而transformer是基于注意力机制的一种模型,它可以帮助我们更好地理解和处理文本信息。

一本书有很多页,每页上有很多文字。你想要理解这本书的内容,但是你不可能同时看到所有的文字。所以你会选择关注一些你认为重要的部分,例如标题、关键词或者粗体字。这种选择性的关注就是注意力机制。

而transformer就像是一位能帮你读书的机器人。这个机器人可以同时看到所有的文字,它会通过注意力机制来判断哪些部分是最重要的。

机器人会关注标题,因为标题通常能告诉你这一章讲的是什么内容。然后,它会关注关键词,这些关键词能给你一些重要的信息。最后,机器人会根据这些重要的信息来理解整本书的内容,并回答你提出的问题。

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

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

相关文章

医院预约挂号平台的设计与实现

摘 要 网络的空前发展给人们的工作和生活带来了极大的便利,信息技术已成为节约运营成本、提高工作效率的首选。相比之下,国内相当多的中小医院在医院预约工作中的手工工作比较保守,数据查询和存储成本都很高,但效率很低。为了使医…

docker-compose部署sonarqube 8.9 版本

官方部署文档注意需求版本 所以选择8.9版本 一、准备部署配置 1、持久化目录 rootlocalhost:/root# mkdir -p /data/sonar/postgres /data/sonar/sonarqube/data /data/sonar/sonarqube/logs /data/sonar/sonarqube/extensions rootlocalhost:/root# chmod 777 /data/sona…

天眼销为电销行业降低获客成本

当下,做电销的老板都有一个深刻体会:市场竞争越来越激烈,获客成本不断攀升,但效率不升返降,企业经营困难。特别是在这一两年,市场环境紧张,业务不好开展,更是雪上加霜。 销售也感觉…

Matlab 曲线动态绘制

axes(handles.axes1); % 选定所画坐标轴 figure也可 h1 animatedline; h1.Color b; h1.LineWidth 2; h1.LineStyle -; % 线属性设置 for i 1 : length(x)addpoints(h1,x(i),y(i)); % x/y为待绘制曲线数据drawnow;pause(0.01); % 画点间停顿 end 示例: figure…

BearPi Std 板从入门到放弃 - 引气入体篇(8)(ADC)

简介 基于前面的文章, 缩略STM32CubeMx创建项目的过程,直接添加ADC相关初 始化; 开发板 : Bearpi Std(小熊派标准板) 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 串口: Usart1 ADC1: PC2步骤 创建STM32CubeMX LED/串口ADC1初始…

「音视频处理」音频编码AAC详解,低码率提高音质?

AAC(高级音频编码) 也称为 MPEG-4 音频。数码音频压缩和编码的标准方式。AAC 编码文件可与音乐光盘的质量相匹敌,且声音质量通常等同于或高于以相同或甚至更高的位速率编码的 MP3 文件。 我们按这样的顺序讨论 : 1、 封装格式的…

如何使用 Zotero 导出所选条目的 PDF 文件

如何使用 Zotero 导出所选条目的 PDF 文件 Zotero 是一款强大的参考文献管理工具,但它并不直接提供将整个文件夹导出为 PDF 的选项。不过,您可以使用以下步骤来导出您所选的 Zotero 条目中的 PDF 文件,无需额外的插件。 选择所需的 Zotero 条…

2023年危险化学品生产单位安全生产管理人员证考试题库及危险化学品生产单位安全生产管理人员试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年危险化学品生产单位安全生产管理人员证考试题库及危险化学品生产单位安全生产管理人员试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局&a…

二叉树链式结构

1.前置说明 我们手动构建一棵二叉树: 注意:上述代码并不是创建二叉树的方式 从概念中可以看出,二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的 2.二叉树的遍历 2.1前序、中序以及后序遍历 学习二叉树结构&a…

基于c++版本链队列改-Python版本链队列基础理解

##基于链表的队列实现 可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。 ##图解 ##基于链表的队列实现代码 class ListNode:"""定义链表"""def __init__(self)…

Nexus搭建npm私库(角色管理、上传脚本)

安装Nexus 官网下载 https://www.sonatype.com/products/sonatype-nexus-oss-download 进入官网下载,最新下载方式需要输入个人信息才能下载了 选择对应的系统进行下载 Windows 推荐也下载 UNIX 版本(Windows 版本配置比较难改) 如果没有下…

​LeetCode解法汇总2477. 到达首都的最少油耗

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一棵 …

org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource

DynamicDataSource-CSDN博客 /** Copyright 2002-2020 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the L…

排序算法基本原理及实现2

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 🌤️冒泡排序 &#x1…

解决mybatis-plus中,当属性为空的时候,update方法、updateById方法无法set null,直接忽略了

问题描述 当indexId set 22的时候是可以set的 我们发现sql语句也是正常的 表中数据也被更改了 但是当我们indexId为空的时候 sql语句中没有了set indexId这一属性。。 既然属性都没了,表是肯定没做修改的 问题解决 在实体类对应的字段上加注解TableField(strategy…

每日一练【有效三角形的个数】

一、题目描述 611. 有效三角形的个数 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3示例 2: 输入: nums [4,2…

《WebGIS快速开发教程》第5版“惊喜”更新啦

我的书籍《WebGIS快速开发教程》第5版,经过忙碌的编写,终于发布啦! 先给大家看看新书的封面: 这次的封面我们经过了全新的设计,不同于以往的任何一个版本。从封面就可以看出第5版肯定有不小的更新。 那么我们话不多说…

ChatGPT,作为一种强大的自然语言处理模型,具备显著优势,能够帮助您在各个领域取得突破

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

Linux服务器部署XXL-JOB

参考文档及下载地址:分布式任务调度平台XXL-JOB 1 从git拉取XXL-JOB代码 我们的大部分变动,是发生在xxl-job-admin,最终将这个模块打包成jar包部署在linux服务器上。 2 执行数据库脚本 doc\db\tables_xxl_job.sql 3 修改pom文件&#xff0c…

【Linux】信号的保存和捕捉

文章目录 一、信号的保存——信号的三个表——block表,pending表,handler表sigset_t信号集操作函数——用户层sigprocmask和sigpending——内核层 二、信号的捕捉重谈进程地址空间(第三次)用户态和内核态sigaction可重入函数volat…