IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【深度学习】04-01-自注意力机制(Self-attention)-李宏毅老师21&22深度学习课程笔记 -> 正文阅读

[人工智能]【深度学习】04-01-自注意力机制(Self-attention)-李宏毅老师21&22深度学习课程笔记

模型输入

在这里插入图片描述

文字处理

无论是预测视频观看人数还是图像处理,输入都可以看作是一个向量,输出是一个数值或类别。然而,若输入是一系列向量(序列),同时长度会改变,例如把句子里的单词都描述为向量,那么模型的输入就是一个向量集合,并且每个向量集合的大小都不一样。
在这里插入图片描述

一种将单词表示为向量的方法:One-hot Encoding(独热编码)。

向量的长度就是世界上所有词汇的数目,用不同位的1(其余位置为0)表示一个词汇,如下所示:

apple = [1, 0, 0, 0, 0, …]
bag = [0, 1, 0, 0, 0, …]
cat = [0, 0, 1, 0, 0, …]
dog = [0, 0, 0, 1, 0, …]
computer = [0, 0, 0, 0, 1, …]

但是这种表示方式默认了所有词汇间没有任何关系,猫和狗都是动物这种关系在向量集中体现不出来,里面没有任何有意义的信息。

one hot representation编码的每个单词都是一个维度,彼此independent。

另一种将单词表示为向量方法:Word Embedding。

给单词一个向量,这个向量有语义的信息,一个句子就是一排长度不一的向量。将Word Embedding画出来,就会发现同类的单词就会聚集,因此它能区分出类别:

在这里插入图片描述

To learn more: https://youtu.be/X7PH3NuYW0Q (in Mandarin)

什么是 word embedding? - YJango的回答 - 知乎

语音处理

取一段语音信号作为窗口,可以将10ms内的信息描述为一个向量(帧),滑动这个窗口就得到这段语音的所有向量(一个向量集)。

在这里插入图片描述

Graph

社交网络的每个节点就是一个人,节点之间的关系用线连接。每一个人就是一个向量。

在这里插入图片描述

分子上的每个原子就是一个向量(每个元素可用One-hot编码表示),分子就是一堆向量。

在这里插入图片描述

模型输出

按照输入向量与输出标签的数量关系,可以分为一对一、多对一及多对多。

类型一:一对一(Sequence Labeling)

每个输入向量对应一个输出标签。
在这里插入图片描述

文字处理:词性标注(每个输入的单词都输出对应的词性)。
语音处理:一段声音信号里面有一串向量,每个向量对应一个音标。
图像处理:在社交网络中,推荐某个用户商品(可能会买或者不买)。
在这里插入图片描述

类型二:多对一

多个输入向量对应一个输出标签。
在这里插入图片描述

语义分析:正面评价、负面评价。
语音识别:识别某人的音色。
图像:给出分子的结构,判断其亲水性。
在这里插入图片描述

类型三:多对多(由模型自定seq2seq)

不知道应该输出多少个标签,机器自行决定。
在这里插入图片描述

翻译:语言A到语言B,单词字符数目不同
语音识别

接下来先讨论一对一类型。

序列标注问题 - 无上下文信息

序列标注:Sequnce Labeling

利用全连接网络,输入一个句子,输出对应单词数目的标签。

在这里插入图片描述

问题:当一个句子里出现两个相同的单词,并且它们的词性不同(例如:I saw a saw. 我看见一把锯子)。期望模型输出第一个saw为动词,第二个saw为名词,但是这种结构的神经网络不可能做到。

序列标注问题 - 解决方法一:滑动窗口相邻向量信息

解决:让神经网络考虑上下文,利用滑动窗口,每个向量查看窗口中相邻的其他向量的性质。

考虑整条语句分析的情况,需要获取整条语句的词汇信息,需要滑动窗口包含所有词汇的向量,这样会导致全连接神经网络的参数暴增,进而导致超大运算量甚至是过拟合。

所以,这种方法不能解决整条语句的分析问题,即语义分析。这就引出了 Self-attention 技术。

序列标注问题 - 解决方法二:Self-attention

输入整个语句的向量到self-attention中,输出相等个数的向量,且输出的每个向量都考虑输入的整个语句向量集的信息。
在这里插入图片描述

输入整个语句的向量到self-attention中,输出对应个数的向量,再将其结果输入到全连接网络,最后输出标签。以上过程可多次重复:
在这里插入图片描述

Google 根据自注意力机制在论文 Attention is all you need 中提出了 Transformer 架构,注意力机制在该论文之前就已经存在,但是是在此论文中将注意力机制称为Self-attention,并使其发扬光大。

self attention :专注整个序列的信息。FC:专注某个位置的信息

Self-attention

在这里插入图片描述

每个输出b与所有输入a都相关。

如何保证每个输出都能分析所有输入上下文? - 关联度

在这里插入图片描述

α 表示a1与a4的关联程度。又称为attention score。

在类似语义分析的任务场景中,每个输出b都需要分析所有a,但是使用滑动窗口又会导致参数量暴增,所以需要根据a1找出输入向量集中哪些向量与判断a1的类别相关。

如何确定两个输入向量的关联程度α?- 计算关联度模组Dot-product & Additive

在这里插入图片描述

下面的讲解以 Dot-product 为例。

在这里插入图片描述

注意:a1与自己也要计算关联程度。

【待补充】a1与自己计算关联程度的重要性?

在这里插入图片描述

计算出相关性之后,可加一层softmax层(也可以加别的激活函数,比如ReLu)。

注: b i ( 1 ≤ i ≤ 4 ) b^i (1≤i≤4) bi(1i4) 是同时计算出来的 α i , j \alpha_{i,j} αi,j? q i q^i qi k j k^j kj的内积,其中i表示 q i q^i qi是由 a i a_i ai?计算出来的,j表示 k j k^j kj是由 a j a_j aj?计算出来的。
在这里插入图片描述

如何基于关联度抽取信息?- 加权求和

在这里插入图片描述在这里插入图片描述

Self-attention 原理

这里需要三个向量:Query,Key,Value。其解释参考文章 《如何理解 Transformer 中的 Query、Key 与 Value》- yafee123
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

上述过程可以总结为:

① 输入矩阵 I I I分别乘以 W q , W k , W v W^q,W^k,W^v WqWkWv得到三个矩阵 Q , K , V Q,K,V Q,K,V
A = K T Q A=K^TQ A=KTQ,经过激活函数处理得到注意力矩阵 A ′ = s o f t m a x ( K T Q d k ) A'=softmax(\frac {K^TQ}{\sqrt{d_k}}) A=softmax(dk? ?KTQ?)
③ 输出 O = V A ′ O=VA' O=VA

即:
A t t e n t i o n ( Q , K , V ) = V ? s o f t m a x ( K T Q d k ) Attention(Q,K,V) = V \cdot softmax(\frac {K^TQ}{\sqrt{d_k}}) Attention(Q,K,V)=V?softmax(dk? ?KTQ?)
其中, d k \sqrt{d_k} dk? ?为向量长度。唯一要训练出的参数就是 W q , W k , W v W^q,W^k,W^v WqWkWv

注意力系数计算:

阶段1:根据Query和Key计算两者的相似性或者相关性
阶段2:对第一阶段的原始分值进 行归一化处理
阶段3:根据权重系数对Value进行加权求和,得到Attention Value

所有输入向量中,谁的 attention score 大,谁就能决定Attention Value,即b。

具体计算参考:动手推导Self-Attention

多头注意力机制 (Multi-head Self-attention)

为什么需要多种注意力?- 相关性可能有多种

有些任务(例如:翻译、语音辨识等)中,multi-head会得到更好的结果。

之前的例子,都是用Q去找K,来计算相关性。但是两个事物之间相关性可能有多种不同的类型。因此设置多个Q(head),不同的Q来负责不同的相关性。

head的个数是超参数。

如何计算多头注意力中的相关性?- 按相关类型计算

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如上述公式,在Multi-head的情况下,输入还是Q,K,V,输出是不同head的输出的拼接结果,再投影到 W 0 W^0 W0中。其中,对每一个head,可以将 Q,K,V 通过不同的可学习的参数 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 投影到一个低维上面,再做注意力函数Attention,最后输出结果。

Query,Key,Value首先经过一个线性变换,然后输入到放缩点积attention,注意这里要做 h 次,其实也就是所谓的多头,每一次算一个头。而且每次Q,K,V进行线性变换的参数W是不一样的 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 。然后将 h 次的放缩点积attention结果进行拼接,再进行一次线性变换得到的值作为多头attention的结果。

注意力机制问题:没有位置信息

在语义分析任务中,对于Self-attention来说,并没有序列中字符位置的信息。之前的计算过程中,字母右上角出现的数字,与位置信息无关,只是为了讲解而标注的。

为什么需要位置信息?- 位置信息很重要

在语义分析任务中,例如动词是不太可能出现在句首的,因此可以降低动词在句首的可能性,但是自注意力机制并没有该能力。因此需要加入 Positional Encoding 的技术来标注每个词汇在句子中的位置信息。

如何为Self-attention添加位置信息?- Positional Encoding

每一个不同的位置都有一个专属的向量 e i e^i ei,然后再做 e i + a i e^i+a^i ei+ai 的操作,之后的计算看到 e i e^i ei 就知道 a i a^i ai 的位置是 i i i

如何表示位置信息 e i e^i ei

如图所示,在attention is all you need论文中, e i e^i ei为图中的一列。在这里插入图片描述

这种 e i e^i ei 是人工标注(hand-crafted)的。就会出现很多问题:在确定 e i e^i ei 的时候只定到128,但是序列长度是129。在最早的论文attention is all you need中是没有这个问题的,它通过某个规则(sin、cos函数)产生。

位置编码如何表示更好?是一个待研究的问题。

位置编码可以自定义表示方法,也可以通过对训练集学习来得出。

下图展示的是几种位置表示方法的效果。
在这里插入图片描述

自注意力机制的应用

Transformer 、BERT 模型用到了自注意力机制。
在这里插入图片描述
Self-attention 还可以用在除NLP以外的问题上:语音处理,图像处理。

语音处理

问题:超大输入序列导致复杂度很高 - Truncated Self-attention

attention matrix复杂度是输入向量个数的平方,在语音处理任务中,假设一个向量表示10ms内的语音信息,那么一段语音将由上千个向量组成,这将导致语音处理任务的计算量很大,并且需要很大的存储空间记录计算信息。
在这里插入图片描述

针对该问题,提出了 Truncated Self-attention 思想。计算注意力时,只关注小范围(自定义)上下文信息,而不是整句的上下文信息,加快运算速度,节省存储空间。

在这里插入图片描述

图像处理

使用CNN时,一张图片可看做一个很长的向量。

一张图片也可看做一组向量:一张5?10的RGB图像可以看做5?10的三个(通道)矩阵,把一个像素的三个通道数值看作一个三维向量

在这里插入图片描述

既然一张图片可以看做一组向量,那么也可以使用self-attention进行图像处理。例如:GAN、DETR。

在这里插入图片描述

Self-attention Vs CNN

CNN只考虑感受野中的信息。Self-attention考虑整张图片的信息。

在这里插入图片描述

CNN是简化版的Self-attention。Self-attention是复杂化的CNN。CNN中感受野的大小是自定义的,Self-attention中使用attention找出相关的像素,这些相关的像素可以看作是自动学习得到的“感受野”。

在论文On the Relationship between Self-Attention and Convolutional Layers中,用数学严谨的证明了CNN就是self-attention的特例,self-attention只要设置合适的参数可以做到CNN同样的效果。

在这里插入图片描述

如果用不同的数据量来训练CNN和self-attention,会出现不同的结果。大模型self-attention弹性大,需要更多的训练数据,如果用少量数据训练,容易出现过拟合;而小的模型CNN弹性小,在少量数据集上不容易出现过拟合。

在这里插入图片描述

Self-attention Vs RNN

在这里插入图片描述

RNN中,如果想让后面的RNN考虑前面RNN的输入,就需要保存前面RNN的输入。而self-attention中每一个输出都分析了所有输入的信息。

RNN中,不能平行处理数据,每一层RNN只考虑前一层的输出。而self-attention中可以平行处理数据,同时计算注意力并得到输出。

因此很多的应用逐渐把RNN的架构改为Self-attention架构。

在论文Transformers are RNNs: Fast autoregressive transformers with linear attention中,详细介绍了Self-attention 与 RNN的关系,self-attention加上其他结构可等效于RNN。

Self-attention 应用图论(GNN)

GNN:Graph Neural Network

将图中使用Self-attention,图中顶点的关联关系不需要经过学习得到,关联关系可以直接根据边得到。

在这里插入图片描述

Self-attention 众多变形

自注意力机制的缺点就是计算量非常大,因此如何优化其计算量是未来研究的重点,所以出现了很多Self-attention的变形。
在这里插入图片描述
以下论文中,分析了多种self-attention的变形。

Long Range Arena: A Benchmark for Efficient Transformers

Efficient Transformers: A Survey

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 16:54:39  更:2022-06-26 16:56:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:44:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码