| |
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 | -2024/5/7 9:00:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |