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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 神经网络与深度学习7---注意力机制与seq2seq模型 -> 正文阅读

[人工智能]神经网络与深度学习7---注意力机制与seq2seq模型

本文是邱锡鹏教授撰写的《神经网络与深度学习》一书中 第8章:注意力机制与外部记忆 的读书笔记,主要内容是一些本人觉得比较值得记录的内容,中间也会包括一些拓展和思考。

注意力评分函数

以下为注意力机制的流程图,查询 q \boldsymbol q q 通过注意力评分函数 a a a 与键 k \boldsymbol k k 作用,并通过softmax得到对应 k \boldsymbol k k 的概率分布值,最后这些概率分布值与值 v \boldsymbol v v 做加权和:

写成数学公式:
f ( q , ( k 1 , v 1 ) , ? ? , ( k m , v m ) ) = ∑ i = 1 m softmax ( a ( q , k i ) ) v i = ∑ i = 1 m exp ( a ( q , k i ) ) ∑ j = 1 m exp ( a ( q , k j ) ) v i f(\boldsymbol q, (\boldsymbol k_1,\boldsymbol v_1),\cdots, (\boldsymbol k_m,\boldsymbol v_m)) = \sum_{i=1}^m \text{softmax}(a(\boldsymbol q,\boldsymbol k_i)) \boldsymbol v_i = \sum_{i=1}^m \frac{\text{exp}(a(\boldsymbol q,\boldsymbol k_i))}{\sum_{j=1}^m \text{exp}(a(\boldsymbol q,\boldsymbol k_j))} \boldsymbol v_i f(q,(k1?,v1?),?,(km?,vm?))=i=1m?softmax(a(q,ki?))vi?=i=1m?j=1m?exp(a(q,kj?))exp(a(q,ki?))?vi?

常用的注意力评分函数有 加性注意力点积注意力 两种:

加性注意力
a ( q , k ) = w v T tanh ( W q ? q + W k ? k ) ∈ R a(\boldsymbol q,\boldsymbol k) = \boldsymbol w_v^T\text{tanh}(\boldsymbol W_q \cdot \boldsymbol q + \boldsymbol W_k\cdot \boldsymbol k) \in \mathbb{R} a(q,k)=wvT?tanh(Wq??q+Wk??k)R
其中可学习参数 W q ∈ R h × q , W k ∈ R h × k , w v ∈ R h \boldsymbol W_q \in \mathbb{R}^{h\times q}, \boldsymbol W_k \in \mathbb{R}^{h\times k}, \boldsymbol w_v \in \mathbb{R}^{h} Wq?Rh×q,Wk?Rh×k,wv?Rh

点积注意力
a ( q , k i ) = q T k i d a(\boldsymbol q,\boldsymbol k_i) = \frac{\boldsymbol q^T \boldsymbol k_i}{\sqrt{d}} a(q,ki?)=d ?qTki??

点积评分函数计算效率更高,但是要求 q \boldsymbol q q k \boldsymbol k k 具有相同的长度 d d d

在实践中,可以考虑批量计算注意力值来提升效率:
softmax ( Q K T d ) V ∈ R n × v \text{softmax}(\frac{\boldsymbol Q\boldsymbol K^T}{\sqrt{d}}) \boldsymbol V \in \mathbb{R}^{n\times v} softmax(d ?QKT?)VRn×v

其中 Q ∈ R n × d \boldsymbol Q \in \mathbb{R}^{n\times d} QRn×d 表示 n n n 个查询, K ∈ R m × d \boldsymbol K \in \mathbb{R}^{m\times d} KRm×d 表示 m m m 个键, V ∈ R m × v \boldsymbol V \in \mathbb{R}^{m\times v} VRm×v 表示 m m m 个值。


基于rnn的seq2seq模型

首先回忆基于循环神经网络的seq2seq模型:
在这里插入图片描述
如图所示:

  1. encoder每一层最后时间步的state会作为decoder对应层state的初始化,因此要求encoder,decoder的层数一样,hidden_size 一样
  2. 上下文变量 c \boldsymbol c c 会与decoder上一时间步的输出 y t ? 1 y_{t-1} yt?1? 拼接,作为当前时间步的输入

Note:在training时,decoder可以直接使用 y_gold 与 c \boldsymbol c c 拼接作为输入;而在inference时,由于 y_gold 是不可知的,因此使用上一时间步的输出与 c \boldsymbol c c 拼接

这种结构的seq2seq会有一个问题:decoder所有时间步从encoder中获得的信息都是一样的,没有区分。但这与实际情况往往是不相符的,例如对于翻译模型,target language中的某个词往往会与source language的某一两个词具有强相关性,而跟其它的词相关性很弱。而注意力机制恰好就可以解决这样的问题。


带注意力机制的基于rnn的seq2seq模型

带注意力机制的seq2seq模型中,上下文变量 c \boldsymbol c c 不再简单的采用encoder的输出,而是encoder层隐变量与decoder上一时间步的注意力输出:
c t = ∑ i = 1 n softmax ( a ( s t ? 1 , h i ) ) h i \boldsymbol c_t = \sum_{i=1}^n \text{softmax}(a(\boldsymbol s_{t-1},\boldsymbol h_i)) \boldsymbol h_i ct?=i=1n?softmax(a(st?1?,hi?))hi?

其中 s t ? 1 \boldsymbol s_{t-1} st?1? 是decoder上一时间步的隐层输出, h i \boldsymbol h_i hi? 是encoder最后隐层的所有时间步的输出。

在这里插入图片描述


多头注意力

所谓“多头”,是通过给{查询,键,值}组合施加不同的线性变换来实现的,每个头的定义如下:

h i = ∑ t = 1 n softmax ( a ( W i q q , W i k k t ) ) W i v v t ∈ R p v h_i = \sum_{t=1}^n \text{softmax}(a(\boldsymbol W^{q}_i \boldsymbol q, \boldsymbol W^{k}_i \boldsymbol k_t)) \boldsymbol W^{v}_i \boldsymbol v_t \in \mathbb{R}^{p_v} hi?=t=1n?softmax(a(Wiq?q,Wik?kt?))Wiv?vt?Rpv?

其中 W i q ∈ R p d × d q , W i k ∈ R p k × d k , W i v ∈ R p v × d v \boldsymbol W^{q}_i \in \mathbb{R}^{p_d \times d_q}, \boldsymbol W^{k}_i \in \mathbb{R}^{p_k \times d_k}, \boldsymbol W^{v}_i \in \mathbb{R}^{p_v \times d_v} Wiq?Rpd?×dq?,Wik?Rpk?×dk?,Wiv?Rpv?×dv? 是可学习参数。

之后所有的头需要经过一个线性转换:
W o [ h 1 ? h h ] ∈ R p o \boldsymbol W^o\begin{bmatrix} \boldsymbol h_1\\ \vdots\\ \boldsymbol h_h \end{bmatrix} \in \mathbb{R}^{p_o} Wo????h1??hh??????Rpo?

其中 W o ∈ R p o × h p v \boldsymbol W^{o} \in \mathbb{R}^{p_o \times hp_v} WoRpo?×hpv? 也是可学习参数。

对同一 {查询,键,值} 施加不同的线性变换,并将这些结果组合起来,以此让模型学到比简单加权平均值更复杂的表示。

为了能够并行计算多个头,需要设置 p d = p k = p v = p o h p_d = p_k = p_v = \frac{p_o}{h} pd?=pk?=pv?=hpo??


Transfomer

论文地址:Attention Is All You Need

正如标题所表达的,Transfomer完全摒弃了循环神经网络的结构:

  1. encoder层: {多头自注意力 + 前馈网络} × n \times n ×n
  2. decoder层: {掩蔽多头自注意力 + encoder-decoder多头自注意力 + 前馈网络} × n \times n ×n

关于Transformer中注意力机制的详细使用情况,可以参加本人的另一篇博客 Transfomer矩阵维度分析及MultiHead详解


Reference:
动手学深度学习

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

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