2022最新版-李宏毅机器学习深度学习课程-P26 自注意力机制

 一、应用情境

输入任意长度个向量进行处理。

从输入看

  • 文字处理(自然语言处理)
    • 将word表示为向量
      • one-hot
      • word-embedding
  • 声音信号处理
    • 每个时间窗口(Window, 25ms)视为帧(Frame),视为向量
    • 每个节点视为一个向量
      • Social graph(社交网络图)
      • 分子式【one-hot】

从输出看

  • √ 输入输出数量相等【每个向量都有一个标签】⇒sequence Labeling
    • 词性标注(POS tagging)
    • 语音辨识(每个vector对应phoneme)
    • 社交网络(每个节点(人)进行标注【是否推送商品】)
  • 整个输入序列只有一个输出
    • 文本情感分析
    • 语者辨认
    • 分子的疏水性
  • 由模型决定输出的数目【seq2seq】
    • 翻译
    • 语音辨识

 

二、Sequence Labeling

  • 对每一个向量,用Fully-connected network分别进行处理
    • 问题:忽略了序列上下文的关系
      • 同一个向量在序列号中不同的位置、不同的上下文环境下,得到的输出可能不同(需要考虑序列)
    • 改进:串联若干个向量
      • 问题:
        • 只能考虑固定个,不能考虑”任意长度“
        • 网络参数大

三、Self-attention

特点:考虑整个序列sequence的所有向量,综合向量序列整体和单个向量个体,得到对每一个向量处理后的向量

⇒将这个向量链接一个FC,FC可以专注于处理这一个位置的向量,得到对应结果。

其中,self-attention 的功能是处理整个 sequence 的信息,而 FC 则是处理某一个位置的信息,

Self-attention+FC可以交替使用

知名文章:Attention is all you need ⇒Transformer

基本原理

输入:一串的 Vector,这个 Vector 可能是整个 Network 的 Input,也可能是某个 Hidden Layer 的 Output

输出:处理 Input 以后,每一个 bi 都是考虑了所有的 ai 以后才生成出来的

具体步骤如下:

1. 以 a1 为例,根据 a1 这个向量,找出整个 sequence 中跟 a1 相关的其他向量 ⇒ 计算哪些部分是重要的,求出 ai 和 a1 的相关性(影响程度大的就多考虑点),用 α 表示

2. 计算相关性:有 点积 和 additive 两种方法计算相关性。

✔️方法一 dot product:

输入的这两个向量分别乘上两个不同的矩阵,左边这个向量乘上矩阵 W^q得到矩阵 q,右边这个向量乘上矩阵 W^k得到矩阵 k;再把 q跟 k做dot product,逐元素相乘后累加得到一个 scalar就是α

方法二 Additive:

得到 q跟 k后,先串接起来,再过一个Activation Function(Normalization),再通过一个Transform,然后得到 α

需要计算:任意两个向量之间的关联性,作softmax【不一定要用,也可以用其他激活函数】,得到

把 a1 乘上 Wq 得到 q,叫做 Query(就像是搜寻相关文章的关键字,所以叫做 Query)

然后将 ai 都要乘 Wq 得到 k,叫做 Key,把这个Query q1 和 Key ki 进行 点积操作 就得到 相关性 α( α 叫做 Attention Score,表示 Attention计算出的 vector 之间的相关性)

attention score 还要经过一层 softmax 才能用于后续处理,其中 softmax 也可以换成其他的 activation function

3. 分别抽取重要信息,根据关联性作加权求和得到  bi 

(一次性并行计算出 bi ,不需要依次先后得出)

优点:bi 是并行计算得出

矩阵的角度表示 Self-attention 计算过程

① 计算 k,q,v (其中 Wq 、Wk 和 Wv 都是要学习的网络参数矩阵)

② 计算 α 并 Normalization

③ 计算 b

综合:

 其中,

  • I 是 Self-attention 的 input(一排 vector),每个 vector 拼起来当作矩阵的 column
  • 这个 input 分别乘上三个矩阵, 得到 Q K V
  • 接下来 Q 乘上 K 的 transpose,得到 A 。可能会做一些处理,得到 A' ,叫做Attention Matrix ,生成 Q 矩阵就是为了得到 Attention 的 score
  • A' 再乘上 V,就得到 O,O 就是 Self-attention 这个 layer 的输出

唯一需要学的参数:三个矩阵

四、Multi-head Self-attention

1. 特点

使用多个 q  k  v  组合,不同的 q k v 负责不同种类的相关性

例如在下图中,一共有2类, 1类的放在一起算,2类的放在一起算。相关性变多了,所以参数也增加了,原来只需要三个 W 矩阵,现在需要六个 W 矩阵

 2. 计算步骤

  • 先把 a 乘上一个矩阵得到 q

  • 再把 q 乘上另外两个矩阵,分别得到  q1 跟  q2,代表有两个 head;同理可以得到 k1, k2,v1, v2

  • 同一个 head 里的  k  q  v 计算 b.

  • 将各个 head 计算得到的  bi 拼接,通过一个 transform得到 bi,然后再送到下一层去

3. Positional Encoding

每个向量所处的“位置”需要被编码

方法:每个位置用一个 vector ei 来表示它是 sequence 的第 i 个。加和到原向量中。

如何产生positional encoding vector尚待研究

  • 手工设置
  • 根据资料学出来

五、Applications

BERT

Self-attention for Speech

问题:

把一段声音讯号,表示成一排向量的话,这排向量可能会非常地长;attention matrix 的计算复杂度是长度的平方需要很大的计算量、很大的存储空间

方法:Truncated Self-attention

要看一整句话,只看一个小的范围就好——辨识这个位置有什麼样的phoneme只要看这句话,跟它前后一定范围之内的资讯就可以判断

Self-attention for Image

每一个 pixel就是一个三维的向量,整张图片其实就是长乘以宽个向量的set

Self-attention GAN1

六、Self-attention 和 CNN RNN GNN

1. 和CNN的对比

CNN 可以看成简化版的 self-attention,CNN 就是只计算感受域中的相关性的self-attention。

  • CNN:感知域(receptive field)是人为设定的,只考虑范围内的信息
  • Self-attention:考虑一个像素和整张图片的信息 ⇒ 自己学出“感知域”的形状和大小

结论:

CNN 就是 Self-attention 的特例,Self-attention 只要设定合适的参数,就可以做到跟 CNN 一模一样的事情

self attention 是更 flexible 的 CNN

⇒ self-attention需要 更多的数据 进行训练,否则会 欠拟合;否则CNN的性能更好

  • Self-attention 它弹性比较大,所以需要比较多的训练资料,训练资料少的时候,就会 overfitting
  • 而 CNN 它弹性比较小,在训练资料少的时候,结果比较好,但训练资料多的时候,它没有办法从更大量的训练资料得到好处

2. 和 RNN 的对比

recurrent neural network 的角色,很大一部分都可以用 Self-attention 来取代了

Recurrent Neural Network跟 Self-attention 做的事情其实也非常像,它们的 input 都是一个 vector sequence

  • 左边是你的 input sequence,你有一个 memory 的 vector
  • 然后你有一个 RNN 的 block,吃 memory 的 vector,吃第一个 input 的 vector
  • 然后 output hidden layer 的 output
  • 然后通过fully connected network,做你想要的 prediction
  • 接下来当sequence 裡面第二个 vector 作為 input 的时候,也会把前一个时间点吐出来的东西,当做下一个时间点的输入,再丢进 RNN 裡面,然后再產生新的 vector,再拿去给 fully connected network

RNN 其实也可以是双向的,从而使得 memory 的 hidden output,其实也可以看作是考虑了整个 input 的 sequence

主要区别:

  • 对 RNN 来说,最终的输出要考虑最左边一开始的输入 vector,意味着必须要把最左边的输入存到 memory 里面并且在计算过程中一直都不能够忘掉一路带到最右边,才能够在最后一个时间点被考虑(依次按顺序输出)
  • 对 Self-attention 可以在整个 sequence 上非常远的 vector之间轻易地抽取信息

并行输出,速度更快,效率更高:

  • Self-attention:四个 vector 是平行產生的,并不需要等谁先运算完才把其他运算出来
  • RNN 是没有办法平行化的,必须依次产生

很多的应用都往往把 RNN 的架构,逐渐改成 Self-attention 的架构

3. 和 GNN 的对比

Self-attention for Graph⇒一种GNN

  • 在 Graph 上面,每一个 node 可以表示成一个向量
  • node 之间是有相连的,每一个 edge 标志着 node 跟 node 之间的关联性
  • 比如:在做Attention Matrix 计算的时候,只需计算有 edge 相连的 node
  • 因為这个 Graph 往往是人為根据某些 domain knowledge 建出来的,已知这两个向量彼此之间没有关联(图矩阵中对应结点 i 与 结点 j 之间没有数值),就没有必要再用机器去学习这件事情

MORE

冷知识:有人说广义的 Transformer,指的就是 Self-attention

Self-attention 有非常非常多的变形,Self-attention 它最大的问题就是,它的运算量非常地大

paper:Long Range Arena比较了各种不同的 Self-attention 的变形

Efficient Transformers: A Survey 这篇 paper,介绍各式各样 Self-attention 的变形

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android页面周期、页面跳转

1.什么是Activity? Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互。Activity用于显示用户界面,用户通过Activity交互完成相关操作,一个APP允许有多个Activity。 2.Activi…

基于深度学习的单图像人群计数研究:网络设计、损失函数和监控信号

摘要 https://arxiv.org/pdf/2012.15685v2.pdf 单图像人群计数是一个具有挑战性的计算机视觉问题,在公共安全、城市规划、交通管理等领域有着广泛的应用。近年来,随着深度学习技术的发展,人群计数引起了广泛的关注并取得了巨大的成功。通过系统地回顾和总结2015年以来基于深…

Springboot+shiro,完整教程,带你学会shiro

您的第一个 Apache Shiro 应用程序 引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

在centos服务器中完成jdk,tomcat,MySQL的安装以及前后端分离项目中后端的部署

目录 一. jdk&#xff0c;tomcat的安装 1.将要安装的软件压缩包放入到centos服务器上 2. 解压对应的安装包 3. jdk环境变量配置 4. tomcat启动 5. 关闭防火墙 二. MySQL安装 1. 卸载mariadb&#xff0c;否则安装MySql会出现冲突(先查看后删除再查看) 2. 将MySQL安装包解…

2.Docker的安装

1.认识Docker的基本架构 下面这张图是docker官网上的&#xff0c;介绍了整个Docker的基础架构&#xff0c;我们根据这张图来学习一下docker的涉及到的一些相关概念。 1.1 Docker的架构组成 Docker架构是由Client(客户端)、Docker Host(服务端)、Registry(远程仓库)组成。 …

stm32中断

目录 简介 什么是NVIC 中断优先级 EXTI 简介 总结 hal库初始化代码 标准库初始化代码 简介 什么是中断&#xff1f;正常情况下&#xff0c;微处理器根据代码内容&#xff0c;按顺序执行指令。执行过程中&#xff0c;如果遇到其它紧急的事件需要处理&#xff0c;则先暂停当…

【机器学习】二、决策树

目录 一、决策树定义&#xff1a; 二、决策树特征选择 2.1 特征选择问题 2.2 信息增益 2.2.1 熵 2.2.2 信息增益 三、决策树的生成 3.1 ID3算法 3.1.1理论推导 3.1.2代码实现 3.2 C4.5 算法 3.2.1理论推导 ​ 3.2.2代码实现 四、决策树的剪枝 4.1 原理 4.2 算法思路&#xff1a…

前端移动高级web详细解析五

响应式布局方案 媒体查询 Bootstrap框架 01-媒体查询 基本写法 max-width&#xff1a;最大宽度&#xff08;小于等于&#xff09; min-width&#xff1a;最小宽度&#xff08;大于等于&#xff09; 书写顺序 min-width&#xff08;从小到大&#xff09; max-width&…

linux下的程序环境和预处理(gcc演示)

1. 程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码。 2. 详解编译链接 2.1 翻译环境 组成一个程序的…

Inspeckage,动态分析安卓 APP 的 Xposed 模块

前提 我在不久前写过《 APP 接口拦截与参数破解》的博文&#xff1b;最近爬取APP数据时又用到了相关技术&#xff0c;故在此详细描述一下 Inspeckage 的功能。&#xff08;环境准备本文不再赘述&#xff09; 功能 在电脑上访问 http://127.0.0.1:8008 就可以看到 inspeckage…

采购申请单明细账/汇总账页面编写

业务需求和功能 1、功能&#xff1a;编写采购申请页面和采购申请管理页面。在申请单界面添加常用的查询条件&#xff0c;如单品、申请单等。在采购申请管理页面以单品维度去展示采购申请单的汇总信息&#xff0c;添加一个默认查询时间为7天&#xff0c;并对查询出来的不同状态…

2021年09月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 使用map函数可以实现列表数据元素类型的转换&#xff0c;而无需通过循环。则将列表L[‘1’,‘3’,‘5’,‘7’,‘9’]转…