【论文精读】Self-Attentive Assocative Memory,2020

news2024/9/22 1:27:06

目录

1 引言

这篇论文介绍了基于对象和对象关系的记忆模型,这对于设计类脑记忆模型有很大的启发作用。

2 Outer product attention (OPA)

标准transformer模型中定义的是内积注意力,即dot product attention:
A ° ( q , K , V ) = ∑ i = 1 n k v S ( q ⋅ k i ) v i A^°(q, K, V ) = \sum ^{n_{kv}}_{i=1}S(q \cdot k_i) v_i A°(q,K,V)=i=1nkvS(qki)vi
其中, A ° ∈ R d v , q , k i ∈ R d q k , v i ∈ R d v A^° ∈ R^{d_v} , q, k_i ∈ R^{d_{qk}} , v_i ∈ R^{d_v} A°Rdv,q,kiRdqk,viRdv ⋅ \cdot 表示内积,计算结果是个标量, S S S是一个对向量元素的softmax计算函数。

作者定义了外积注意力命名为Outer product attention:
A ⊗ ( q , K , V ) = ∑ i = 1 n k v F ( q ⊙ k i ) ⊗ v i A^⊗ (q, K, V ) = \sum ^{n_{kv}}_{i=1} \text{F}(q ⊙ k_i) ⊗ v_i A(q,K,V)=i=1nkvF(qki)vi
其中, A ⊗ ∈ R d q k × d v , q , k i ∈ R d q k , v ∈ R d v A^⊗ ∈ R^{d_{qk}×d_v} , q, k_i ∈ R^{d_{qk}} , v ∈ R^{d_v} ARdqk×dv,q,kiRdqk,vRdv ⊙ ⊙ 表示对应位置元素的相乘,计算结果是个同维数向量, ⊗ ⊗ 表示外积, F F F是一个对向量元素的tanh计算函数。

最好对照着标准注意力去理解。
差异: A ° A^° A°是token序列中受注意力关注的token, A ⊗ A^⊗ A是token序列中token之间的关系表征。

3 Self-attentive Associative Memory (SAM)

作者设计了一个关联记忆网络模块,命名为SAM,用来表征item及item之间的关系。

SAM θ ( M ) [ s ] = A ⊗ ( M q [ s ] , M k , M v ) = ∑ j = 1 n k v F ( M q [ s ] ⊙ M k [ j ] ) ⊗ M v [ j ] \begin{align} \text{SAM}_θ (M) [s] &= A^⊗ (M_q [s] , M_k, M_v) \\ &=\sum ^{n_{kv}}_{j=1} \text{F} (M_q [s] ⊙ M_k [j]) ⊗ M_v [j] \end{align} SAMθ(M)[s]=A(Mq[s],Mk,Mv)=j=1nkvF(Mq[s]Mk[j])Mv[j]
其中,
与注意力相关的q,k,v三个向量 M q , M k , M v M_q,M_k,M_v Mq,Mk,Mv
M q = L N ( W q M ) M k = L N ( W k M ) M v = L N ( W v M ) \begin{align} M_q &= \mathcal{LN} (W_qM) \\ M_k &= \mathcal{LN} (W_kM) \\ M_v &= \mathcal{LN} (W_vM) \end{align} MqMkMv=LN(WqM)=LN(WkM)=LN(WvM)
M是输入token序列组成的向量矩阵, M ∈ R n × d M ∈ R^{n×d} MRn×d,n为token序列长度,d为token的维度;
s s s为M中第s行;
W q , W k , W v W_q,W_k,W_v Wq,Wk,Wv是q,k,v对应线性变换层的参数矩阵;
L N \mathcal{LN} LN是 layer normalization操作,而不是激活函数;
θ θ θ代表SAM模块的内部参数是 { W q ∈ R n k v × n , W k ∈ R n k v × n , W v ∈ R n k v × n } \{W_q ∈ R^{n_{kv}×n},W_k ∈ R^{n_{kv}×n},W_v ∈ R^{n_{kv}×n}\} {WqRnkv×n,WkRnkv×n,WvRnkv×n} n q n_q nq是query的个数, n k v n_{kv} nkv是key-value对的个数;

4 SAM-based Two-Memory Model (STM)

作者设计了2个记忆模块分别为 M t i ∈ R d × d , M t r ∈ R n q × d × d M^i_t ∈ R^{d×d}, M^r_t ∈ R^{n_q×d×d} MtiRd×d,MtrRnq×d×d,都是基于SAM实现的,前者是用来记忆item,后者用来记忆item之间的关联关系。
在这里插入图片描述

4.1 M i M^i Mi写操作

X t = f 1 ( x t ) ⊗ f 2 ( x t ) M t i = F t ( M t − 1 i , x t ) ⊙ M t − 1 i + I t ( M t − 1 i , x t ) ⊙ X t \begin{align} X_t &= f_1 (x_t) ⊗ f_2 (x_t) \\ M^i_t &= F_t(M^i_{t−1} , x_t) ⊙ M^i_{t−1} + I_t(M^i_{t−1} , x_t) ⊙X_t \end{align} XtMti=f1(xt)f2(xt)=Ft(Mt1i,xt)Mt1i+It(Mt1i,xt)Xt
其中,
x t x_t xt是输入数据;
f 1 , f 2 f_1, f_2 f1,f2是前馈神经网络,输出维度为d;
F t F_t Ft为遗忘门,计算公式为 F t ( M t − 1 i , x t ) = W F x t + U F t a n h ( M t − 1 i ) + b F F_t(M^i_{t−1} , x_t)= W_F x_t + U_F\mathcal tanh(M^i_{t−1}) + b_F Ft(Mt1i,xt)=WFxt+UFtanh(Mt1i)+bF,其中 W F , U F ∈ R d × d W_F , U_F ∈ R^{d×d} WF,UFRd×d为网络参数;
I t I_t It为输入的门控,计算公式为 I t ( M t − 1 i , x t ) = W I x t + U I t a n h ( M t − 1 i ) + b I I_t(M^i_{t−1} , x_t)= W_I x_t + U_I\mathcal tanh(M^i_{t−1}) + b_I It(Mt1i,xt)=WIxt+UItanh(Mt1i)+bI,其中 W I , U I ∈ R d × d W_I , U_I ∈ R^{d×d} WI,UIRd×d为网络参数;

4.2 M r M^r Mr读操作

v t r = s o f t m a x ( f 3 ( x t ) ⊤ ) M t − 1 r f 2 ( x t ) \begin{align} v^r_t = \mathcal{softmax}(f_3 (x_t)^⊤) M^r_{t−1} f_2 (x_t) \end{align} vtr=softmax(f3(xt))Mt1rf2(xt)
其中,
v t r v^r_t vtr为从关系记忆模块 M r M^r Mr中读出的值,将在下式(9)中使用;
f 3 f_3 f3是前馈神经网络,输出维度为 n q n_q nq;
M t − 1 r M^r_{t−1} Mt1r M r M^r Mr的前一个状态,其状态值由下式(9)计算得到;

4.3 M i M^i Mi读操作和 M r M^r Mr写操作过程

M t r = M t − 1 r + α 1 SAM θ ( M t i + α 2 v t r ⊗ f 2 ( x t ) ) \begin{align} M^r_t = M^r_{t−1} + α_1 \text{SAM}_ \theta (M^i_t + α_2 v^r_t ⊗ f_2 (x_t)) \end{align} Mtr=Mt1r+α1SAMθ(Mti+α2vtrf2(xt))
其中,
α 1 , α 2 α_1,α_2 α1,α2是调和超参数,用于平衡量纲的,又类似于学习率;

4.4 用 M r M^r Mr实现item转移

M i M^i Mi利用 M r M^r Mr实现更新,可以认为是hebbian更新,更新公式如下:
M t i = M t i + α 3 G 1 ◦ V f ◦ M t r \begin{align} M^i_t = M^i_t + α_3 \mathcal{G_1} ◦ \mathcal{V_f} ◦ M^r_t \end{align} Mti=Mti+α3G1VfMtr
其中,
V f \mathcal{V_f} Vf是输入X(其shape为(batch_size, sequeue_length, dimension))的前两维展开的向量;
G 1 \mathcal{G_1} G1是前馈神经网络,负责维度变换 R ( n q d ) × d → R d × d R^{(n_qd)×d} → R^{d×d} R(nqd)×dRd×d,其计算公式为 G 1 ( X ) = W g V f ( X ) \mathcal{G_1}(X) = W^g\mathcal{V_f}(X) G1(X)=WgVf(X)
α 3 α_3 α3是调和超参数;

4.5 模型输出 o t o_t ot

o t = G 3 ◦ V l ◦ G 2 ◦ V l ◦ M t r \begin{align} o_t = \mathcal{G_3} ◦ \mathcal{V_l} ◦ \mathcal{G_2} ◦ \mathcal{V_l} ◦ M^r_t \end{align} ot=G3VlG2VlMtr
其中,
V l \mathcal{V_l} Vl是输入X(其shape为(batch_size, sequeue_length, dimension))的后两维展开的向量;
G 2 , G 3 \mathcal{G_2},\mathcal{G_3} G2G3是前馈神经网络,分别负责维度变换 R n q × d d → R d × d R^{n_q×dd} → R^{d×d} Rnq×ddRd×d R n q n r → R n o R^{n_qn_r} → R^{n_o} RnqnrRno,其计算公式为 G 2 ( X ) = W g V l ( X ) \mathcal{G_2}(X) = W^g\mathcal{V_l}(X) G2(X)=WgVl(X) n q n_q nq是query的个数, n r n_r nr是超参数;

5 实验结果

源代码:https://github.com/thaihungle/SAM
作者做了消融实验,并在几何与图任务、强化学习任务、问答任务上做了测试。具体可以看论文附录和源码。
在这里插入图片描述
在这里插入图片描述

6 总结

该论文一个有趣的idea就是用两个前馈神经网络 M i , M r M^i,M^r Mi,Mr分别表示对象与对象间关系,但是参数更新方法不是梯度下降而是赫布更新,后续可能是一个改进点。

7 参考资料

[1]. Self-Attentive Assocative Memory , 2020.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言手撕顺序表

目录 一、概念 1、静态顺序表:使用定长数组存储元素。 2、动态顺序表:使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …

数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!本文数据…

【前端知识】React 基础巩固(四十)——Navigate导航

React 基础巩固(四十)——Navigate导航 一、Navigate的基本使用 新建Login页面,在Login中引入Navigate,实现点击登陆按钮跳转至/home路径下: import React, { PureComponent } from "react"; import { Navigate } from "reac…

MySQL数据库之JDBC编程(从认识到操作)

目录 前言 一.JDBC的认识 1.1JDBC的来源 1.2JDBC的概念 二.JDBC的导包 三.JDBC的四步操作 三.JDBC常用的类和方法 3.1常用类 3.2常见方法 🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 🎥 本文由 tq02 原创&…

芯片制造详解.光刻技术与基本流程.学习笔记(四)

本篇文章是看了以下视频后的笔记提炼,欢迎各位观看原视频,这里附上地址 芯片制造详解04:光刻技术与基本流程|国产之路不容易 芯片制造详解.光刻技术与基本流程.学习笔记 四 一、引子二、光刻(1).光掩膜(2).光刻机(3).光刻胶(4).挖…

matplotlib实现动态显示图片

plt.ion()打开交互开关 plt.ioff()关闭交互开关 plt.pause(0.1)暂停0.1秒 plt.clf()#清除当前的Figure图像 plt.cla()#清除当前的Axex图像 import matplotlib.pyplot as plt import numpy as np import time from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg…

计算机二级Python基本操作题-序号43

1. # 键盘输入一句话,用jieba分词后,将切分的词组按照在原话中逆序输出到屏幕上,词组中间没有空格。 示例如下: 输入: 我爱老师 输出: 老师爱我 import jieba txt input (请输入一段中文文本:)…

零拷贝原来这么简单!

我们总会在各种地方看到零拷贝,那零拷贝到底是个什么东西。 接下来,让我们来理一理啊。 拷贝说的是计算机里的 I/O 操作,也就是数据的读写操作。计算机可是一个复杂的家伙,包括软件和硬件两大部分,软件主要指操作系统…

【自动化测试】Jest体验之旅

目录 简介 快速体验 配置文件 Jest CLI 选项 --watchAll --watch 使用 ES6 模块 简介 Jest 是 Facebook 出品的一个 JavaScript 开源测试框架。相对其他测试框架,其一大特点就是就是内置了常用的测试工具,比如零配置、自带断言、测试覆盖率工具等…

从二叉搜索树到红黑树

二叉搜索树(Binary Search Tree) 特性 任意一个节点的所有左子树都比它小,所有右子树都比它大; 复杂度 当我们查找某个节点的时候,先从根节点开始比较,如果比根节点大走右子树,如果比根节点…

码农该如何延长周末体验感

码农该如何延长周末体验感 码农该如何延长周末体验感 码农该如何延长周末体验感1.制定合理的工作计划:2.实践工作与生活的平衡:3.学习新技术或扩展知识领域4.参与开源项目或个人项目:5.与同事或朋友组织活动:6.自己写博客或者总结…

jeecgboot新建moudle,但是访问404,需要在open moudle setting 里面设置

jeecgboot新建moudle&#xff0c;但是访问404&#xff0c;需要在open moudle setting 里面设置 首先需要确定以下3个pom.xml 最最外层的pom.xml 最最外层的pom.xml <modules><module>jeecg-boot-base-core</module><module>jeecg-module-demo</m…

string类(使用+实现)(C++)

string string类“登场”string类 - 了解string类的常用接口常见构造容量操作访问及遍历操作迭代器分类作用 增删查改操作非成员函数 string类的实现string类重要的方法实现分析介绍构造函数拷贝构造函数赋值运算符重载总结 string类整体实现代码 写时拷贝&#xff08;了解&…

金三银四好像消失了,IT行业何时复苏!

疫情时候不敢离职&#xff0c;以为熬过来疫情了&#xff0c;行情会好一些&#xff0c;可是疫情结束了&#xff0c;反而行情更差了&#xff0c; 这是要哪样 我心中不由一万个 草泥&#x1f434; 路过 我心中不惊有了很多疑惑和感叹&#xff01; 自我10连问 我的心情 自去年下…

什么是合者生情?

有人说&#xff0c;自己的命运自己掌握&#xff0c;但必须以预知自己命运如何为前提。 若不知道自己的命运如何&#xff0c;却要掌握自己的命运&#xff0c;那只是一句空话&#xff0c;是自欺欺人。 而易学在我国历史上&#xff0c;直至现在&#xff0c;都起到了重大而深远的作…

Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

ARM裸机-5

1、可编程器件的编程原理 1.1、电子器件的发展方向 模拟器件-->数字器件 ASIC-->可编程器件 1.2、可编程器件的特点 CPU在固定频率的时钟控制下节奏运行。 CPU可以通过总线读取外部存储设备中的二进制指令集&#xff0c;然后解码执行。 这些可以被CPU解码执行的二进制指…

SpringBoot临时属性设置

在Spring Boot中&#xff0c;可以通过设置临时属性来覆盖应用程序中定义的属性。这在某些情况下很有用&#xff0c;例如在命令行中指定配置参数或在测试环境中覆盖默认值。 你可以使用--&#xff08;双破折号&#xff09;语法来设置临时属性。以下是一些示例&#xff1a; 1. …

【点云处理教程】04 Python 中的点云过滤

一、说明 这是我的“点云处理”教程的第 4 篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在本教程中&#xff0c;我们将学习如何使用 Open3D 在 python 中过滤点云以进行下采样和异常值去除。使用 Open…

【GitOps系列】在 GitOps 工作流中实现蓝绿发布

文章目录 前言蓝绿发布概述手动实现蓝绿发布创建蓝色环境创建蓝色环境 Ingressroute部署绿色环境切换到绿色环境 蓝绿发布自动化安装 Argo Rollout创建 Rollout 对象创建 Service 和 Ingress访问蓝色环境发布自动化 访问 Argo Rollout Dashboard自动化原理结语 前言 在前几篇【…