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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【深度学习】从self-attention到transform(self-attention入坑指南) -> 正文阅读

[人工智能]【深度学习】从self-attention到transform(self-attention入坑指南)

简介

该教程主要参考的是台大李宏毅的网课视频,附上视频链接:台大李宏毅self-attention教程
文中图片均引自台大李宏毅的PPT,需要PPT的童鞋请戳这里:教程配套PPT

本文针对视频中的一些重点进行总结,看不懂的童鞋还请去看原视频,毕竟李宏毅yyds!!

背景什么的就不再介绍了,网上一搜一大堆,不知道背景的童鞋可以先去度娘问一下。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43414694/article/details/119058654
————————————————

正文开始

self-attention主要是针对seq2seq的,根据输入和输出的向量长度的不同可以分为三种情况:

  1. 输入和输出长度相同,也就是说输入n个向量,就要输出n个对应的标签:比如给一个句子里的每个单次标注词性(动词、名词、形容词等等)
  2. 输入和输出长度不同,也就是输入n个向量,输入m个向量(n!=m):比如判断是个句子是贬义的还是褒义还是中中性的。例如You are very good,很显然这句话是褒义的,输入是四个向量,输出是两个向量
  3. 输出向量的长度未知,需要由机器自己决定需要输出的标签数量

本文以第一种情况进行展开讲解,第一种情况的英文名也叫Sequence Labeling,也就是输入的每一个向量都需要给给它一个对应的标签。

Sequence Labeling

首先给出一个句子,需要对下面这个句子的每一个单词的词性进行标注。

I saw a saw(我看到了一把锯)

这里的第一个saw意思为动词“看到”,而第二个saw的意思为名词“锯”,这对于我们来说可以很轻松的分辨出这两个saw的词性是不同的,但是机器不同。如果使用传统的深度学习方法,机器将会对每个单词进行独立分析,不考虑上下文之间的联系(此图引自台大李宏毅的ppt),那么这两个saw对于机器来说是完全一样的。因此输入的结果肯定也是一样的(要么都是名词,要么都是动词),因此在某些场合,考虑上下文联系就显得非常重要。
台大李宏毅ppt
有的人提出利用一个window将相邻单词框起来一起分析,但这种做法有几个缺点:

  • 每个句子的长度可能不同
  • 如果让window的长度等于最长的那个句子的长度,则会导致FC层的参数过多

因此,为了解决这些问题,self-attention就被提出来了。

Self-attention

在这里插入图片描述
乍一看这张图和上面那一张差别不大,也是输入四个向量,输出四个向量,但输出的这四个向量比较特殊,它们是考虑整个句子后才输出的,并不是一对一的关系。也就是说每个输出向量都是充分考虑到它和四个输入向量的关系,因此后面的FC层也不仅仅只考虑一个输入向量,而是需要考虑四个输入向量,这就把上下文联系了起来,这就是一次self-attention,而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 α来表示

在这里插入图片描述
α \alpha α的方法主要有两种:Dot-productAdditive,比较常用的是Dot-product,这里只介绍Dot-product,想了解第二种方法的童鞋可以观看原视频、

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
在这里插入图片描述
那怎么将 α \alpha α用到self-attention里呢?用 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 a 2 , a 3 , a 4 a^2, a^3, a^4 a2,a3,a4之间的相似度,这里我们设:
q 1 = W q α 1 q^1=W^q \alpha^1 q1=Wqα1 k 2 = W k a 2 k^2=W^k a^2 k2=Wka2 k 3 = W k a 3 k^3=W^k a^3 k3=Wka3 k 4 = W k a 4 k^4=W^k a^4 k4=Wka4

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 a1a2的相似度,称为attention score,同理可得
α 13 = q 1 ? k 3 \alpha_{13} = q^1 \centerdot k^3 α13?=q1?k3 α 13 = q 1 ? k 4 \alpha_{13} = q^1 \centerdot k^4 α13?=q1?k4 α 14 = q 1 ? k 4 \alpha_{14} = q^1 \centerdot k^4 α14?=q1?k4 除此之外,也要计算自相关性,也就是 α 11 = q 1 ? k 1 \alpha_{11} = q^1 \centerdot k^1 α11?=q1?k1 之后进行将 α 11 , α 12 , α 13 , α 14 \alpha_{11}, \alpha_{12}, \alpha_{13}, \alpha_{14} α11?,α12?,α13?,α14?输入到softmax层(softmax不是唯一选择,也可以使用其他激活函数)得到 α 11 ′ , α 12 ′ , α 13 ′ , α 14 ′ \alpha'_{11}, \alpha'_{12}, \alpha'_{13}, \alpha'_{14} α11?,α12?,α13?,α14?,整个过程如下图所示。在这里插入图片描述

得到 α ′ \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?在这里插入图片描述
假如 a 1 a^1 a1 a 2 a^2 a2的相关度越大,也就是 α 12 ′ \alpha'_{12} α12?越大,那么 b 1 b^1 b1的值就越接近 v 2 v^2 v2,同理,若 a 1 a^1 a1 a 3 a^3 a3的相关度越大,也就是 α 13 ′ \alpha'_{13} α13?越大,那么 b 1 b^1 b1的值就越接近 v 3 v^3 v3,这一点一定要想明白。
同理 a 2 a^2 a2和其他输入向量的相关度 α 21 ′ = s o f t m a x ( q 2 k 1 ) \alpha'_{21}=softmax(q^2 k^1) α21?=softmax(q2k1) α 22 ′ = s o f t m a x ( q 2 k 2 ) \alpha'_{22}=softmax(q^2 k^2) α22?=softmax(q2k2) α 23 ′ = s o f t m a x ( q 2 k 3 ) \alpha'_{23}=softmax(q^2 k^3) α23?=softmax(q2k3) α 24 ′ = s o f t m a x ( q 2 k 4 ) \alpha'_{24}=softmax(q^2 k^4) α24?=softmax(q2k4)因此 b 2 = α 21 ′ v 1 + α 22 ′ v 2 + α 23 ′ v 3 + α 24 ′ v 4 b^2=\alpha'_{21}v^1+\alpha'_{22}v^2+\alpha'_{23}v^3+\alpha'_{24}v^4 b2=α21?v1+α22?v2+α23?v3+α24?v4

下面从矩阵的角度分析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 a1aiα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

在这里插入图片描述
以上就是self-attention的基础内容了,各位童鞋如果有不明白的地方可以去看原视频,毕竟李宏毅讲的是真的细。如果有什么疑问,欢迎留言讨论。下一篇将对self-attention的升级版
Multi-head Self-attention进行讲解

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

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