注意
点积的关注
语法
描述
注意力运算使用加权乘法运算聚焦于输入的部分。
例子
应用注意操作
指定查询、键和值的大小。
querySize = 100;valueSize = 120;numQueries = 64;numValues = 80;numObservations = 32;
创建包含查询、键和值的随机数组。对于查询,指定dlarray
格式“认知行为治疗”
(通道、批量、时间)。
查询= dlarray(rand(querySize,numObservations, numQueries),“认知行为治疗”);keys = dlarray(rand(querySize,numObservations, numValues));values = dlarray(rand(valueSize,numObservations, numValues));
指定注意头的数量。
numHeads = 5;
应用注意操作。
[Y,重量]=注意(查询、键值,numHeads);
查看输出的大小和格式。
大小(Y)
ans =1×3120 32 64
退去(Y)
ans =“认知行为治疗”
查看重量的大小和格式。
大小(重量)
ans =1×480 64 5 32
dim(权重)
Ans = 0×0空字符数组
创建多头自我注意功能
您可以使用注意
函数实现多线程自注意操作[1],它关注输入的部分。
创建multiheadSelfAttention
函数中列出的多头自我注意功能部分的示例。的multiheadSelfAttention
函数将输入数据作为输入X
,头部数,查询、键、值和输出数据的可学习权重,并返回多头注意值。
输入X
必须是未格式化的dlarray
对象,其中第一个维度对应于输入通道,第二个维度对应于时间或空间维度,第三个维度对应于批处理维度。
创建一个序列数据数组。
numChannels = 10;numObservations = 128;numTimeSteps = 100;X =兰德(numChannels numObservations numTimeSteps);X = dlarray (X);大小(X)
ans =1×310 128 100
指定多头注意的头数。
numHeads = 8;
初始化多头注意的可学习参数。
可学习的查询、键和值的权重必须为
(numChannels * numHeads)
——- - - - - -numChannels
数组。可学习输出权值必须为a
(numChannels * numHeads)
——- - - - - -(numChannels * numHeads)
数组中。
outputSize = numChannels * numHeads;WQ =兰德(outputSize numChannels);工作=兰德(outputSize numChannels);西弗吉尼亚州=兰德(outputSize numChannels);我们=兰德(outputSize outputSize);
采用多头自注意操作。
Y = multiheadSelfAttention (X, numHeads WQ工作,西弗吉尼亚州,我们);
查看输出的大小。输出有大小(numChannels * numHeads)
——- - - - - -numObservations
——- - - - - -(numTimeSteps)
.
大小(Y)
ans =1×380 128 100
多头自我注意功能
的multiheadSelfAttention
函数将输入数据作为输入X
,头部数,查询、键、值和输出数据的可学习权重,并返回多头注意值。
输入
X
必须是未格式化的dlarray
对象,其中第一个维度对应于输入通道,第二个维度对应于时间或空间维度,第三个维度对应于批处理维度。可学习的查询、键和值权重矩阵为
(numChannels * numHeads)
——- - - - - -numChannels
矩阵。可学习输出权矩阵是a
(numChannels * numHeads)
——- - - - - -(numChannels * numHeads)
矩阵。
函数Y = multiheadSelfAttention(X,numHeads,WQ,WK,WV,WO) queries = pagemtimes(WQ,X);键= pagemtimes(周,X);值= pagemtimes(西弗吉尼亚州,X);=注意(查询、键值、numHeads DataFormat =“施”);Y = pagemtimes(我们);结束
创建Luong注意函数
您可以使用注意
函数来创建一个函数,该函数将Luong注意操作应用于其输入。创建luongAttention
函数,该函数列在示例的末尾,它应用Luong注意操作。
指定数组大小。
numHiddenUnits = 100;latentSize = 16;
创建包含输入数据的随机数组。
hiddenState = dlarray(兰德(numHiddenUnits, 1));Z = dlarray(兰德(latentSize, 1));重量= dlarray(兰德(numHiddenUnits latentSize));
应用luongAttention
函数。
[背景下,attentionScores] = luongAttention (hiddenState Z、重量);
查看输出的大小。
大小(上下文)
ans =1×216个1
大小(attentionScores)
ans =1×21
陈德良关注功能
的luongAttention
函数根据Luong“一般”评分[2]返回上下文向量和注意评分。这相当于分别将查询、键和值指定为隐藏状态、加权潜在表示和潜在表示的点积注意。
函数[context,attentionScores] = luongAttention(hiddenState,Z,weights) numHeads = 1;查询= hiddenState;键= pagemtimes(重量、Z);值= Z;[背景下,attentionScores] =注意(查询、键值、numHeads规模= 1,DataFormat =“认知行为治疗”);结束
输入参数
查询
- - - - - -查询
dlarray
对象
查询,指定为dlarray
对象。
查询
最多只能有一个吗“S”
(空间)或“T”
维度(时间)。任何尺寸查询
标签“U”
(未指定)必须是单例的。如果查询
是一个非格式化dlarray
对象,然后使用DataFormat
选择。
的大小“C”
(频道)维度键
尺寸必须匹配对应的尺寸在查询
.
的大小“B”
(批)维度查询
,键
,值
必须匹配。
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:关注(查询、键值、numHeads DataFormat =“认知行为治疗”)
对未格式化的数据应用注意操作并指定数据格式“认知行为治疗”
(通道、批量、时间)。
DataFormat
- - - - - -未格式化数据的维度顺序
特征向量|字符串标量
未格式化输入数据的维度顺序,指定为字符向量或字符串标量FMT
它为数据的每个维度提供一个标签。
的格式时dlarray
对象,每个字符为数据的每个维度提供一个标签,并且必须是以下之一:
“S”
——空间“C”
——频道“B”
-批处理(例如,样品和观察)“T”
-时间(例如,序列的时间步长)“U”
——未指明的
你可以使用标签“C”
而且“B”
最多一次,一个维度都有标记“S”
或“T”
.
您必须指定DataFormat
当输入数据没有格式化时dlarray
.
数据类型:字符
|字符串
规模
- - - - - -缩放点积注意的乘因子
“汽车”
(默认)|数字标量
PaddingMask
- - - - - -表示输入中哪些元素对应填充值的掩码
dlarray
对象|逻辑阵列|数字数组
AttentionMask
- - - - - -注意面具
“没有”
(默认)|“因果”
|数字数组|逻辑阵列
注意掩码表示在应用注意操作时要包括哪些元素,指定为以下值之一:
“没有”
-不要妨碍对元素位置的注意。如果AttentionMask
是“没有”
,那么该软件就会阻止注意力的使用PaddingMask
只有。“因果”
-防止元件到位米
在“S”
(空间)或“T”
(时间)的维度查询
从提供对位置元素的注意n > M
的相应尺寸键
而且值
.在自动回归模型中使用此选项。逻辑或数字数组-避免注意的元素
键
而且值
当数组中对应的元素为0
,在那里AttentionMask
是一个Nk
——- - - - - -Nq
矩阵或Nk
——- - - - - -Nq
——- - - - - -numObservations
数组,Nk
是尺寸的吗“S”
(空间)或“T”
(时间)的维度键
,Nq
对应尺寸的尺寸在吗查询
,numObservations
是尺寸的吗“B”
维度查询
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|逻辑
|字符
|字符串
DropoutProbability
- - - - - -辍学概率
0
(默认)|小于1的非负标量
注意权重的退出概率,指定为小于1的非负标量。
数据类型:单
|双
输出参数
算法
点积的关注
注意力运算使用加权乘法运算聚焦于输入的部分。
给出了单头点积注意运算
在哪里问,K,V分别对应于查询、键和值, 表示比例因子,米是由1和0组成的掩码数组,和p是退出概率。掩码操作包含和排除输入的矩阵乘法设置值的值 对于零值掩码元素。蒙版是填充和注意蒙版的结合。dropout操作以概率将元素设置为零p.
多线程的自我关注
输入的多头自注意操作X是由
在哪里h是正面的次数,W问,WK,WV,WO分别为查询、键、值和输出的可学习投影矩阵。每个权重矩阵都由串联的权重矩阵组成W我对于每一个头。每一个 表示头操作的输出
参考文献
[1] Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser和Illia Polosukhin。“你需要的就是关注。”神经信息处理系统的进展30(2017)。
[2] Luong, Minh-Thang, Hieu Pham, Christopher D. Manning。“基于注意力的神经网络机器翻译的有效方法。”arXiv预印本arXiv: 1508.04025(2015)。
扩展功能
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
当以下输入参数中至少有一个是
gpuArray
或者一个dlarray
使用类型的基础数据gpuArray
,该功能运行在GPU上。查询
键
值
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
介绍了R2022b
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。