| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【深度学习】从self-attention到transform(self-attention入坑指南) -> 正文阅读 |
|
[人工智能]【深度学习】从self-attention到transform(self-attention入坑指南) |
简介该教程主要参考的是台大李宏毅的网课视频,附上视频链接:台大李宏毅self-attention教程 本文针对视频中的一些重点进行总结,看不懂的童鞋还请去看原视频,毕竟李宏毅yyds!! 背景什么的就不再介绍了,网上一搜一大堆,不知道背景的童鞋可以先去度娘问一下。 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 正文开始self-attention主要是针对seq2seq的,根据输入和输出的向量长度的不同可以分为三种情况:
本文以第一种情况进行展开讲解,第一种情况的英文名也叫Sequence Labeling,也就是输入的每一个向量都需要给给它一个对应的标签。 Sequence Labeling首先给出一个句子,需要对下面这个句子的每一个单词的词性进行标注。
这里的第一个saw意思为动词“看到”,而第二个saw的意思为名词“锯”,这对于我们来说可以很轻松的分辨出这两个saw的词性是不同的,但是机器不同。如果使用传统的深度学习方法,机器将会对每个单词进行独立分析,不考虑上下文之间的联系(此图引自台大李宏毅的ppt),那么这两个saw对于机器来说是完全一样的。因此输入的结果肯定也是一样的(要么都是名词,要么都是动词),因此在某些场合,考虑上下文联系就显得非常重要。
因此,为了解决这些问题,self-attention就被提出来了。 Self-attention
重点来了我们设输入到self-attention的四个向量分别为 a 1 , a 2 , a 3 , a 4 a^1, a^2, a^3, a^4 a1,a2,a3,a4,经过self-attention之后的输出向量为 b 1 , b 2 , b 3 , b 4 b^1, b^2, b^3, b^4 b1,b2,b3,b4,每一个输出向量都是充分考虑所有的输入向量之后得到了的,也就是说 b 1 b^1 b1 是根据 a 1 , a 2 , a 3 , a 4 a^1, a^2, a^3, a^4 a1,a2,a3,a4得出的, b 2 b^2 b2也是根据 a 1 , a 2 , a 3 , a 4 a^1, a^2, a^3, a^4 a1,a2,a3,a4得出的。下面这张图可以很好的表示。下面以 b 1 b^1 b1为例进行说明。 根据 a 1 a^1 a1寻找和 a 1 a^1 a1有关的其他输入向量也就是说计算 a 2 , a 3 , a 4 a^2, a^3, a^4 a2,a3,a4这三个向量和 a 1 a^1 a1的相关度,这里用 α \alpha α来表示
Dot-product将输入的两个向量分别乘一个矩阵
W
q
W^q
Wq和
W
k
W^k
Wk之后得到的向量
q
q
q和向量
k
k
k,之后两个向量求点积可得到
α
\alpha
α.,即
α
=
q
?
k
\alpha = q \centerdot k
α=q?k
q
1
q^1
q1我们称之为query,
k
2
,
k
3
,
k
4
k^2, k^3, k^4
k2,k3,k4我们称之为key,那么
α
12
=
q
1
?
k
2
\alpha_{12} = q^1 \centerdot k^2
α12?=q1?k2
α
12
\alpha_{12}
α12?表示
a
1
和
a
2
a^1和a^2
a1和a2的相似度,称为attention score,同理可得 得到 α ′ \alpha' α′我们就知道了 a 1 a^1 a1和其他输入向量之间的关系强弱,下面就根据这个关系从中提取重要信息。我们设一个矩阵
W
v
W^v
Wv和四个向量
v
1
,
v
2
,
v
3
,
v
4
v^1, v^2, v^3, v^4
v1,v2,v3,v4,其中
v
1
=
W
v
a
1
v^1 =W^v a^1
v1=Wva1
v
2
=
W
v
a
2
v^2 =W^v a^2
v2=Wva2
v
3
=
W
v
a
3
v^3 =W^v a^3
v3=Wva3
v
4
=
W
v
a
4
v^4 =W^v a^4
v4=Wva4 之后将每一个attention score和对应的
v
v
v相乘后求和即可得到
b
1
b^1
b1,即
b
1
=
∑
i
α
1
i
′
v
i
b^1=\sum_i \alpha'_{1i} v_i
b1=i∑?α1i′?vi? 下面从矩阵的角度分析self_attention根据上面的分析可知,每一个输入向量
a
i
a^i
ai都要有
q
i
,
k
i
,
v
i
q^i, k^i, v^i
qi,ki,vi与之对应,且
q
i
=
W
q
a
i
q^i=W_q a^i
qi=Wq?ai,也就是说
q
1
q
2
q
3
q
4
=
W
q
[
a
1
a
2
a
3
a
4
]
q^1q^2q^3q^4=W^q[a^ 1a^2a^3a^4]
q1q2q3q4=Wq[a1a2a3a4]这里我们将
a
1
,
a
2
,
a
3
,
a
4
a^1, a^2, a^3, a^4
a1,a2,a3,a4用一个矩阵
I
I
I表示,将
q
1
,
q
2
,
a
3
,
q
4
q^1, q^2, a^3, q^4
q1,q2,a3,q4用矩阵
Q
Q
Q表示,因此上式可以写为
Q
=
W
q
I
Q=W^qI
Q=WqI同理,用矩阵
K
K
K表示
k
1
,
k
2
,
k
3
,
k
4
k^1, k^2, k^3, k^4
k1,k2,k3,k4,用矩阵
V
V
V表示
v
1
,
v
2
,
v
3
,
v
4
v^1, v^2, v^3, v^4
v1,v2,v3,v4,因此有
K
=
W
k
I
K=W^kI
K=WkI
V
=
W
v
I
V=W^vI
V=WvI 从矩阵的角度求解相关度 α 1 i \alpha_{1i} α1i?根据前面的分析,
a
1
和
a
i
的
相
关
度
α
1
i
=
q
1
k
i
,
携
程
矩
阵
的
形
式
就
是
α
1
i
=
(
k
i
)
T
q
1
a^1和a^i的相关度\alpha_{1i}=q^1 k^i,携程矩阵的形式就是\alpha_{1i}=(k^i)^T q^1
a1和ai的相关度α1i?=q1ki,携程矩阵的形式就是α1i?=(ki)Tq1,那么
α
11
,
α
12
,
α
13
,
α
14
\alpha_{11}, \alpha_{12}, \alpha_{13}, \alpha_{14}
α11?,α12?,α13?,α14?就可以写成
[
(
k
1
)
T
,
(
k
2
)
T
,
(
k
3
)
T
,
(
k
4
)
T
]
?
q
1
[(k^1)^T, (k^2)^T, (k^3)^T, (k^4)^T] *q^1
[(k1)T,(k2)T,(k3)T,(k4)T]?q1,
α
2
i
,
α
3
i
,
α
4
i
\alpha_{2i}, \alpha_{3i}, \alpha_{4i}
α2i?,α3i?,α4i?同理。我们将它们写到一个大矩阵中 从矩阵的角度求 b b b直接上图,如果有线性代数基础很好理解(图中的
a
^
应
该
为
a
′
\hat{a}应该为a'
a^应该为a′) 全部过程可以总结为下面的图,其中需要学习的参数为 W q , W k , W v W^q, W^k, W^v Wq,Wk,Wv
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/14 1:48:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |