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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李宏毅机器学习(二)自注意力机制 -> 正文阅读

[人工智能]李宏毅机器学习(二)自注意力机制

学习内容

本文以NLP为基础来介绍自注意力机制,而没有用图像为基础,但是其实两者都是相同的。
在图像中我们可以将图像切块(块的划分是自定义的),然后计算块与块之间的关系;

这里介绍了self-attention 的由来的应用

这里有几个问题需要说明:

  1. 常问的: 为什么是用dot-product来获取关系
    我的理解是,如果两个特征高度相关,那么这两个特征之间的相似元素必然很多,那么点积之后的值就会很大,也就是关系型很强; 而且使用dot-product来计算关系是一个常用的方法。

1. 预备知识

1.1 Sophisticated Input(复杂输入)必须是 Vector set

在之前的一节中,我们的输入是一个向量,然后经过回归或者是分类来得到一个标量或者类别;
但是如果我们的输入长不只是有一个,而且多个呢? 而且是可以改变的呢?

一个句子: this is a cat

我们把每个单词作为一个向量;那么整个句子就是多个可变向量;
但是一个向量(单词)怎么表示呢?

  • 第一种:我们可以以字母为单位,采用one-hot来表示一个单词;
但是问题又来了,你这样表示的话,两个单词之间的关系你是不知道的,没有语义的资讯,都是孤零零的!
  • 第二种是:Word Embedding
通过这里我们就可以看到,所有的单词可能一种类别的都在一起 ,这里的Word Embedding会给每个词一个向量。 具体Word Embedding是怎么表示的,[Word Embedding](https://www.zhihu.com/question/32275069)

一段语音!

这里就会把一段Sequence当作信号;比如我们选取25ms的作为一个frame;
同时我们如果想表达整个句子的话,需要 往前和往后调整10ms;
为什么设置25和10ms,这是前人证明过的,你只需要用就行了。
所以1s --》 100frames

一个图

  1. 比如Social network中,每个人也就是每个节点就是一个向量,而每个人之间的edge就是关系,两个人可能是朋友关系或者是其它关系; 而每个人也就是每个向量就是这个人的资讯,比如它的性别、年龄和工作等等。
2. 比如一个分子也可以看做是一个graph 比如现在比较出名的drug discovery; 一个分子就是一个模型,一个原子就是一个向量。

1.2 输出(以上面各个输入为基础)

三种输出可能性;

Each vector has a label

和上面的输入相对应: 如果我们输入是一个句子的话,我们以词性标注(POS tagging)作为例子,那么我们输出的就是每个单词(向量)的标签; 如果我们输入的是一个语音,每段语音(frame)也会有一个标签; 如果我们输入的是一个图,每个向量(结点=人),那么我们的输出就会是每个节点买不买某个商品;

The whole sequence has a label

可能我们只想判断一句话的情感; 也可能判断某一段语音是谁讲的; 亦或者该分子的亲水性;

Model decides the number of labels itself(seq2seq)

比如语音翻译和语音辨识都是seq2seq,也就是长度不一;

2. self-attention

如果输入vector set的时候都可以使用self-attention

2.1 加入FC层

我们重点说第一种,一对一的,以Sequence Labeling为例,你要给每个向量一个label;

我们可以直接通过一个FC网络就可以实现了;

2.2 加入WIndow

但是这样就会有一个问题,你只关心一个单词的词性,如果两个单词一样的话,一个表示动词,一个表示名词,那么这样没有交集的处理会导致FC层无法处理。 所以需要让FC层考虑更多的上下文资讯。
所以我们可以扩大视野,简称window!

但是window也是有很大的缺点的,首先,如果我们要考虑整个句子,那么window会开的很大;其次,如果输入是多变的,那么我们的window很明显也是变化的,一个训练资料中我们要统计最长的句子多长,之后再加以设定;最后就是参数过多,容易过拟合;

2.3 加入Self-attention

self-attention中一个标量的获得是由下面所有的一块决定的。

怎么产生 b 1 b^{1} b1; 也就需要计算KaTeX parse error: Undefined control sequence: \a at position 1: \?a?{1} a 2 a^{2} a2 a 3 a^{3} a3的关系; 也就是 α 1 \alpha^{1} α1 α 2 \alpha^{2} α2等。

而这个关系是怎么样找到的呢? 两种方法: dot-product和Additive

其中dot-product是将向量乘上一个矩阵W得到q,之后q · k = $\alpha$ 右侧则是自己看吧!! transformer中使用的就是dot-product。 所以加入了相关性后计算如下:

当然也可以进行softmax归一化! softmax不唯一,可以使用Relu、Norm等等。

最后我们得到经过attention score的向量组合! 你需要清楚地知道下面三个q、k、v是什么! 而我们需要的b1就是我们所求

同理,我们就可以得到{ a 2 、 a 3 、 a 4 a_{2}、a_{3} 、a_{4} a2?a3?a4?} —》 { b 2 、 b 3 、 b 4 b_{2}、b_{3} 、b_{4} b2?b3?b4?}

2.4 总结一下:

2.4.1 得到q、k、v

当然 W q 、 W k 、 W v W^{q}、W^{k}、W^{v} WqWkWv都是矩阵!

2.4.2 得到attention score : α

下图中上方是推理第一向量得到的α的过程,下面则是将多个向量表达方式线性代数化了!
也就是K作为row, q作为了column。

2.4.3 得到b

同样的道理

2.4.4 最后总结

输入I —》 输出O;
中间Q是关系矩阵, A’是注意力矩阵。

特别注意的是: 这里只有 W q 、 W k 、 W v W^{q}、W^{k}、W^{v} WqWkWv是需要学习的,其它的都是已知的,不需要训练; 为什么呢? 自己去往上翻一翻就知道了。

3. Multi-head self-attention

如果一件事有不同的形式,有很多不同的定义,需要多个head!不同的q 每个head是一种相关性,多个head就是多个相关性;
这个head也是一个超参数!!!

最后再

4. Position Encoding

可以看到自监督中是没有位置的定义的!
比如动词不能作为句头,动词一般充当谓语。所以需要加入位置信息。但是位置信息不是单纯的位置,而是包含了位置的其它资讯,包含了重要性(我的理解是这样的)。

所以 e i e^{i} ei长什么样子呢? 最早的transformer(attention is all your need)
方法一: hand-crafted

这是人设的! 但是sequence是改变的,所以很费劲

方法二: sinusoidal或者cos
最早的

方法三: 自己炼丹吧!!这是一个尚待研究的问题
比如左下角FloATER是自己创造的

5. Many Applications

Transformer 和 Bert
语音可以、图像也可以; 具体怎么做,自己看视频,因为我是做NLP的,直接省略!
比如图像中的一个pixel多个Channel; 或者是一行;

6. Self-attention v.s CNN

CNN是精简版的Self-attention! 因为Self-attention需要的感受野是全部的。 而在CNN中,感受野是确定的!

self-attention是一个flexible的model, 而且越是flexible的model越是需要更多的data,data不够,更容易overfitting;比如下面的图中, 我们比较了六个模型的分别使用CNN 和 Transformer的随着数据集量的增大后准确率的结果。 可以看出,数据集在少的时候,CNN是好的,但是随着数据集的增加,self-attention逐渐的更好。 这是因为感受野的不同的!

6. Self-attention v.s RNN

因为RNN可以被Self-attention取代,就不讲RNN了。
初始是一个memory 是预定义的!,处理的是一个sequence!
第一个RNN的block吃memory和第一个vector,然后输出新的memory和经过一个FC层来做我们需要的预测;
第二个RNN的block吃上一个吐出来的东西好第二个vector!

两者之间有很大的不同:
我们直观上可能感觉,RNN只考虑前几个的关系,而没有考虑全部;其实RNN也可以是双循环的,也可以认为是全部的关系; 所以这不是主要的区别。

  • 天涯若比邻, self-attention中即使很远离,但是只需要计算就可以了; 而RNN中第一个和最后一个还需要经历漫长的关系,不能够忘掉。

  • 不够并行处理 ; RNN是一个接着一个的;而self-attention的每个向量都是同时计算出来的。

最下面的链接将的是 ALL Transformers are RNN;

7.self-attention for graph

图的优点是有关联已经确定了,不需要再次计算了; 只需要计算强弱就行了!不需要决定有还是没有!
没有必要再学习了!
其实GNN是另一种self-attention

GNN水也是很深的!!

8. To learn more。。。

横轴是速度,纵轴是准确率!
self-attention 首先用在Transformer中,但是它很慢,所以才有了下面的各种变形!!
但是准确率和速度兼顾的方法还需要进一步的深究!

!
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:30:37  更:2021-08-01 14:33:44 
 
开发: 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/17 20:20:52-

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