当前位置: 首页 > news >正文

Note4:Self-Attention

目录

应用

输出形式

Self-Attention实现Sequence Labeling

self-attention原理

Query(Q)、Key(K)、Value(V)

从矩阵乘法理解self-attention过程

全过程

Multi-head Self-Attention(多头注意力)介绍

Positional Encoding(位置编码)

其他应用

1. NLP

2. Speech

3. Image

4. Graph(图)

拓展

Self-Attention v.s. CNN

Self-Attention v.s. RNN (Recurrent Neural Network)

To learn more


Self-Attention是transformer核心结构之一,可以处理input为一组向量的情况。

应用

此前学习的全连接神经网络、CNN输入都是一个vector,无法应用于输入是一组个数可变vector。而self-attention可以很好处理这一点。拓展一点:Self-Attention名字源于《Attention is all you need》这篇著名的论文。

文字处理为例,若每个单词可以用one-hot vector表示,存在严重的问题:单词间无任何关联。所以采取word enbedding词嵌入)技术,将自然语言中的词语映射为低维连续向量,使得语义或语法相似的词在向量空间中距离更近,从而表示了不同单词的内在联系

self-attention同样可以处理语音、图(数学意义上的)、分子结构

输出形式

分为三种,本文只介绍第一种:Sequence Labeling。

Self-Attention实现Sequence Labeling

一个自然想法是用FC实现:通过连接相邻向量可以在语境中学习,但是很难覆盖整个Sequence,如果真的要覆盖整个Sequence,需要以训练资料中最长的Sequence长度为准(因为Sequence长度可变),这意味着参数量会变得极大,训练难且容易Overfitting。

而self-attention可以考虑整个语境:

self-attention不仅限于第一层。

self-attention原理

计算不同向量的关联程度α方法有很多,本文介绍最主流的Dot-product:把两个向量先与两个矩阵相乘,再把结果作点积得到α(attention score)。

Query(Q)、Key(K)、Value(V)

Query(Q)代表当前需要计算注意力的位置(即“我关注谁”);Key(K)代表序列中所有位置的标识(即“谁能被关注”),用于与Query匹配相似度;Value(V)存储实际用于加权求和的信息(即“被关注的内容”),注意力权重确定后与V相乘得到输出。注意:要计算与自己的相关性(便于进行矩阵运算)

接下来要用softmax处理α(分类任务也会用到),将注意力权重转换为一个概率分布。但不是必须使用softmax,其他的也行,activation function都可以,有人尝试过ReLu,甚至效果更好。不过softmax最常用。

输出结果是并行计算,效率很高

从矩阵乘法理解self-attention过程

把每个input作为列拼成矩阵I,Q、K、V分别由相应矩阵与I相乘得到。

注意下图中k是转置的

全过程

只有Q、K、V三个矩阵是未知的参数

Multi-head Self-Attention(多头注意力)介绍

Multi-Head Attention 是 Self-Attention 的扩展,通过将注意力机制并行地执行多次(即多个“头”),每个头学习不同的关注模式,最后将结果拼接成一个向量后再乘以一个矩阵,映射回原始维度

head数量是hyperparameter,需要自己设定。在机器翻译、文本生成等任务中,多头注意力显著优于单头,尤其在处理复杂句子结构或长序列时。

Positional Encoding(位置编码)

self-attention无法体现出不同输入间的位置关系:所有位置间距离都是一样的,无法体现出在Sequence中出现的先后顺序。但位置信息在某些任务中很重要,比如词性标注。使用Positional Encoding可以加入位置信息。

最早的Positional Encoding是人工确定的,但Sequence长度超过positional vector数量会出现问题。Positional Encoding也可由神经网络训练得出。总之,positional encoding的实现方法非常多,在此课程对应的时期里,哪种Positional Encoding的方法最好还没有形成共识,是一个尚待研究的问题

其他应用

1. NLP

2. Speech

此时为避免参数量过大,架构进行了调整,限制了Attention的范围(这也符合语音辨识的domain knowledge)。产生的变式称为truncated self-attention

3. Image

4. Graph(图)

此时self-attention变为GNN的一种。GNN涉及到很深的技术,难以快速讲清。

拓展

Self-Attention v.s. CNN

CNN可视为简化的self-attention,而self-attention可视为复杂版的CNN:receptive filed不再是hyperparameter,而是模型学习所得

下图中的论文从数学严格证明了CNN是self-attention的特例,是限制更大的model。由此可推测self-attention处理图像时比CNN更flexible,所以更容易Overfitting,在训练数据较少时,CNN表现更好,但训练数据够大时,self-attention效果更好。实验证明了上述推测。

Self-Attention v.s. RNN (Recurrent Neural Network)

目前RNN很大一部分作用已经被self-attention取代了

RNN(循环神经网络)用于处理序列数据(如句子、语音、时间序列),特点是能记住之前的信息,适合需要“上下文”的任务。核心思想:每次处理一个数据时,不仅看当前输入,还结合上一刻的“记忆”(隐藏状态)。

RNN无法并行运算,而self-attention可以;图中RNN是单向的,但也可以改为双向,但对内存资源消耗大:如最后一个黄色的向量如果要考虑最左边的蓝色向量结果,那么就必须把结果储存在内存中。

To learn more

http://www.xdnf.cn/news/1282357.html

相关文章:

  • 能力评估:如何系统评估你的技能和经验
  • @ContextConfiguration
  • 嵌入式学习的第四十八天-中断+OCP原则
  • 矩阵游戏(二分图最大匹配)
  • 新人该如何将不同的HTML、CSS、Javascript等文件转化为Vue3文件架构
  • 大数据量下分页查询性能优化实践(SpringBoot+MyBatis-Plus)
  • Linux操作系统从入门到实战(十九)进程状态
  • HyperMesh许可使用监控
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • Spring Boot 2.6.0+ 循环依赖问题及解决方案
  • Android 16 的用户和用户组定义
  • JS深拷贝 浅拷贝、CSS垂直水平居中
  • 计算机网络---交换机
  • 算法73. 矩阵置零
  • 正则表达式:文本模式的数学语言与编程工具
  • ​费马小定理​
  • 关于微信小程序的笔记
  • 简单Modules 的配置与管理,灵活应对多版本软件环境的需求。
  • 借助 ChatGPT 快速实现 TinyMCE 段落间距与行间距调节
  • 验证二叉搜索树
  • 【PRML】分类
  • CI/CD渗透测试靶场
  • 分享一款基于STC32G12K128单片机的螺丝机供料器控制板 ES-IO2422 S4
  • 深入解析Linux poll()系统调用
  • 内网依赖管理新思路:Nexus与CPolar的协同实践
  • 自动化备份全网服务器数据平台项目
  • 深入理解Android Kotlin Flow:响应式编程的现代实践
  • 《算法导论》第 18 章 - B 树
  • 银河通用招人形机器人强化学习算法工程师了