首页 > 其他分享 >4.1 Self-attention

4.1 Self-attention

时间:2023-07-02 19:55:45浏览次数:55  
标签:4.1 一个 Self attention 单词 vector 序列 向量

1. 问题引入

  我们在之前的课程里遇到的都是输入是一个向量,输出是类别或者标量.但如果输入是向量的集合且向量长度还会变化,又应该怎么处理呢?
image

1.1 应用实例

1.1.1 文字处理

  文字处理问题就是一个典型的例子.如果将每一个词汇表示成一个向量,那么\(model\)的输入就会是一个\(vector\ set\),且\(vector\ set\)大小每次都不一样.
image
  文字处理的对象是单词,怎么用向量表示不同的单词,不同的向量组合在一起成为句子?

  • 方法一:one-hot 编码;one-hot vector 的维度就是所有单词的数量,每个单词都是一样长度的向量,只是不同单词在不同位置用 1 表示.这个方法不可取,因为单词很多,每一个vector 的维度就会很长,需要的空间太大了,而且看不到单词之间的资讯.
  • word embedding,每个词汇对应的向量不一定一样长,而且类型接近的单词,向量会更接近,考虑到了单词之间的资讯.word embedding怎么实现的可以参照下面链接.

1.1.2 声音信号处理

  会把一段声音讯号取一个范围,这个范围叫做一个窗口(window),把该窗口里面的讯息描述成一个向量,这个向量称为一帧(frame).一小段的声音讯号,它里面包含的讯息量非常可观
image
  \(frame\)旁边的三行就是将语音变成向量的做法,想了解可以去搜.
  将\(window\)向右移动\(10ms\),又可以形成一个\(frame\).

1.1.3 图

  社交网路是一个图,在社交网路上面每一个节点就是一个人。每一个节点可以看作是一个向量。每一个人的讯息(性别、年龄及工作等等)都可以用一个向量来表示。因此一个社交网路可以看做是一堆的向量所组成
image
  把一个分子当做是模型的输入,每一个分子可以看作是一个图,分子上面的每一个球就是一个原子,每个原子就是一个向量,而每个原子可以用独热向量来表示.
image

1.2 输出的三种可能性

1.2.1 每一个向量都有一个对应的标签

  比如,当模型输入是4个向量的适合,可能就需要输出4个\(label\).
image
  举例:
*
*
*

  • 词性标註(POS tagging):机器会自动决定每一个词彙的词性,判断该词是名词还是动词还是形容词等等
  • 语音辨识
  • 社交网络:每个节点(人)进行标注(是否推送商品)

1.2.2 一组向量序列输出一个标签

  整个序列只需要输出一个标签就好.
image
  举例:

  • 文本情感分析:给机器看一段话,模型要决定这段话是积极的(positive)还是消极的(negative)
  • 语音辨识
  • 分子的疏水性:给定一个分子,预测该分子的亲水性

1.2.3 模型自行决定输出多少个标签

  输入是 N 个向量,输出可能是 N′ 个标签,而N′ 是机器自己决定的.此种任务被称作序列到序列.
image
  举例:

  • 翻译
  • 语音辨识

  本小节只讲第一种类型.

2. Self-attention的基本原理

2.1 以Sequence Labeling为例

  第一种类型也可以叫Sequence Labeling,需要给Sequence里的每一个向量一个\(label\).
  我们可以用Fully-connected network处理这个\(set\ vector\).把\(set\)里的\(vector\)都输入进\(network\),得到一个个输出.
image
  但这个方法有很大的瑕疵.因为忽略了序列上下文的关系。同一个词汇在句子中不同的位置、不同的上下文环境下,词汇的词性有可能是不一样的,但此方法的输出会因是同个词汇而永远只有同个输出.
  对上个方法加以改进.一串联若干个向量后丢进 Fully-connected network.给 Fully-connected network 一整个 window 的讯息,让它可以考虑一些上下文,即与该向量相邻的其他向量的讯息.
image
  但是仍然存在一些问题.如果我们需要考虑整个Sequence的资讯,就需要将window开得很大.序列的长度有长有短,输入给模型的序列的长度,每次可能都不一样.开一个 window 比数据集的最长的序列还要长,才可能把整个序列盖住.但是开一个大的窗口,意味著 Fully-connected network 需要非常多的参数,可能运算量会很大,此外还容易过拟合.

2.2 Self-attention model

  这个模型可以解决上面提出的问题.考虑整个序列的所有向量.综合向量序列整体和单个向量个体,得到对每一个向量处理后的向量,将这些向量个别连接一个 FC,FC 可以专注于处理这一个位置的向量,得到对应结果.
image
  自注意力模型不是只能用一次,可以叠加很多次,与 FC 可以交替使用
image

2.2.1 Self-attention 内部架构

  • 输入:一串的 vector,这些 vector 可能是整个 network 的 input,也可能是某个 hidden layer 的output
  • 输出:处理 input 以后,每一个 b 都是考虑了所有的 a 以后才生成出来的
    image
      那么\(b^1\)是怎么综合考虑\(a^1\)、\(a^2\)...\(a^4\)呢?

2.2.2 Self-attention 具体步骤

  1. 根据 \(a^1\) 这个向量找出跟其他向量的相关程度 \(\alpha\).
  2. 借由一个计算 attention 的模组来得到 α.(\(q\) = query、\(k\) = key)
    image
      计算α有多种方法.这里介绍两种.
  • Dot-product:把输入的两个向量分别乘上 \(W^q\) 和 \(W^k\),得到两个向量 \(q\) 跟 \(k\) 后做点积,把它们做逐元素(element-wise)的相乘,再全部加起来得到一个 α(常用,也被用在 Transformer 中).
  • Addtive:两个向量通过 \(W^q\) 和 \(W^k\) 得到 \(q\) 和 \(k\) 后,把 \(q\) 和 \(k\) 串起来丢到 \(tanh\) 函数(activation function),再乘上矩阵 \(W\) 得到 α.
      虽然方法很多,但接下来的讨论里,我们更偏向左边的方法.
  1. 计算完 \(a^1\) 跟其他向量的相关性 \(α\) 后(也必须计算 \(a^1\) 跟自己的 \(α\)),把所有的 \(α\) 经过 softmax(也可使用其他激励函数,如:ReLu)得到.

image
4. 把向量 \(a^1\) ~ \(a^4\) 乘上 \(W^v\) 得到新的向量:\(v^1\)、\(v^2\)、\(v^3\) 和 \(v^4\)(为了抽取重要资讯),接下来把每一个向量都去乘上 \(α'\) 后再求和得到\(b^1\).
image
  如果 \(a^1\) 跟 \(a^2\) 有高相关性,即 \(α^{'}_{1,2}\) 的值很大,再做加权和后,得到的 \(b^1\) 就可能会比较接近 \(v^2\).所以谁的注意力的分数最大,谁的 \(v\) 就会主导(dominant)抽出来的结果.

注意:\(b^1\) 到 \(b^4\) 是同时被计算出来的

标签:4.1,一个,Self,attention,单词,vector,序列,向量
From: https://www.cnblogs.com/newblg/p/17521070.html

相关文章

  • CNN GRU 注意力 时序预测 基于加注意力机制(CNN-GRU-Attention)的时间序列预测程序,预测
    CNNGRU注意力时序预测基于加注意力机制(CNN-GRU-Attention)的时间序列预测程序,预测精度很高。可用于做风电功率预测,电力负荷预测,交通预测,负荷预测,经济预测,排放预测等标记注释清楚,可直接换数据运行。代码实现训练与测试精度分析。原创文章,转载请说明出处,资料来源:http://imgcs.......
  • ubuntu 18.04.1安装mysql8
    sudoaptupdatesudoaptinstallmysql-serversudosystemctlstatusmysqlsudomysqlALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'password';FLUSHPRIVILEGES;createuser'testuser'@......
  • C#基于海康视觉VM4.1的二次开发框架源码,有多流程框架 运动控制卡 服务框架 需要有海康
    C#基于海康视觉VM4.1的二次开发框架源码,有多流程框架运动控制卡服务框架需要有海康VM的基础并且有海康威视VM开发狗原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/668913688222.html......
  • Could not resolve com.android.support:support-v4:24.1.1+
    错误: 解决:打包的平台文件夹下找到project.properties文件将文件中对应报错的版本注释掉就可以了 ......
  • 什么是 Kernel Smoother ?它与 Self Attention 有什么关系?
    [1]带权滑动平均(WeightedMovingAverage,WMA)是标量场上的滑动窗口内的加权平均,数学上等价于卷积。[1][2]KernelSmoother是一种特殊的WMA方法,特殊在于权重是由核函数决定的,相互之间越接近的点具有越高的权重。[2][3]Transformer中的自注意力机制可以看作一种KernelS......
  • curl -I 192.168.74.128 拒绝连接
     查看直接的linuxweb服务器信息 curlwww.baidu.com都是正常的,唯独curl本机的ip地址就一直报错 由于使用的yum安装的nginx,nginx的一些模块依赖一些lib库,所以在安装nginx,也必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel所以执......
  • Self-Instruct 论文解读:利用大模型自己给自己生成指令数据,指令数据自动生成
    总览大规模“指令调整”的语言模型,即指令微调的LLM,已经表现出非凡的零样本能力,尤其是推广新任务上。然而,这些模型严重依赖于人类编写的指令数据,而这些数据通常在数量、多样性和创造力方面受到限制,因此阻碍了调整模型的通用性。基于上述背景,作者提出了Self-instruct框架,一个通过......
  • ADSelfService Plus:加强企业IT密码安全的终极解决方案
    随着数字化时代的到来,企业IT系统的安全性变得愈发重要。密码安全作为其中的关键环节,对于保护企业的机密信息和数据至关重要。然而,随着黑客技术的不断进步和演变,传统的密码策略已经无法满足企业对密码安全的需求。在这样的背景下,ADSelfServicePlus作为一种强大的解决方案应运而生,它......
  • vc6 配置使用 boost 1.34.1
    vc6配置使用boost1.34.1is2120于 2012-01-1314:17:05 发布2470 收藏分类专栏: c++ Boost 文章标签: python include library string 磁盘 cmd版权 c++同时被2个专栏收录61篇文章0订阅订阅专栏Boost8篇文章0订阅订阅专栏使用......
  • [ARM 汇编]高级部分—性能优化与调试—3.4.1 性能分析与优化策略
    性能优化是嵌入式系统开发中的一个重要环节,尤其是在资源受限的环境下。性能优化的目标是提高代码执行速度、降低功耗和减少内存占用。在本章节中,我们将讨论性能分析与优化策略,并通过实例来学习如何应用这些策略。性能分析方法要优化程序性能,首先需要分析程序的瓶颈。通常,我们......