论文阅读:Attention is all you need

Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

引言

文章首先引入循环模型存在一个根本性的计算瓶颈,即循环模型通常沿输入和输出序列的符号位置进行计算,在计算时刻t,模型会根据前一时刻的隐藏状态ht-1和当前位置的输入生成新的隐藏状态ht,这种固有的顺序性导致无法在训练样本内部进行并行化计算,当序列长度增加时,由于内存限制限制了批处理(batching)的大小,这一问题变得尤为严重。

文章提出了Transformer模型架构,完全摒弃了循环和卷积,并通过完全依赖注意力机制来建立输入和输出之间的全局依赖关系,具有高度并行化和训练速度极快的特点。

模型架构

Transformer 模型摒弃了传统的循环或卷积结构,采用了基于注意力机制的编码器-解码器(Encoder-Decoder)架构。其中编码器由6个相同的层堆叠而成,每层包含两个子层:一个是多头自注意力机制,另一个是简单的基于位置的全连接前馈网络,每个子层周围都采用了残差连接随后进行层归一化;解码器由6个相同的层堆叠而成,除了编码器中的两个子层外,解码器插入了第三个子层,用于对编码器堆栈的输出执行多头注意力,解码器中的自注意力子层经过修改,引入了掩码(Masking)机制,这种掩码确保了对位置i的预测只能依赖于小于i的已知输出,从而保持了自回归属性。

对于注意力机制,缩放点积注意力输入包括查询、键和值,计算

Attention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V

,对于较大的dk值,点积结果的幅度会变大,导致 Softmax 函数进入梯度极小的区域,为了抵消这种影响,点积结果会除以

\sqrt{d_{k}}

进行缩放;多头注意力不再执行单一的注意力功能,而是将查询、键和值分别线性投影h次到隐藏维度,这些投影后的版本并行执行注意力功能,输出结果被拼接并再次投影,得到最终值,这种机制允许模型在不同位置关注来自不同表示子空间的信息。

除了注意力子层外,编码器和解码器的每一层都包含一个全连接的前馈网络,该网络分别且相同地应用于每个位置,由两个线性变换和中间的一个 ReLU 激活函数组成;对于嵌入层和softmax,模型使用学习到的嵌入将输入和输出token转换为dmodel的向量,在两个嵌入层和 Softmax 前的线性变换之间共享相同的权重矩阵,且在嵌入层中,权重会乘以

\sqrt{d_{model}}

由于模型不包含循环和卷积,为了利用序列的顺序信息,必须注入关于 Token 相对或绝对位置的信息【注意这里是否说明只有循环和卷积可以先天保持位置关系,即使是一维的】,位置编码被添加到编码器和解码器底部的输入嵌入中。具体而言,

PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})

PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}})

。选择这种函数是因为它允许模型通过相对位置轻松学习关注,因为对于任何固定的偏移k,

PE_{pos+k}

都可以表示为

PE_{pos}

的线性函数。

为什么选择自注意力

自注意力机制连接所有位置的操作数是常数,相对的,RNN是O(N),卷积层需要

O(n/k)

O(log_k(n))

层才能连接所有对的输入输出位置。当序列长度n小于表示维度d时,自注意力层的计算速度快于循环层。此外,显而易见的是由于可以看见注意力分布,attention的可解释性是很好的。

结果

对于不同参数的作用进行了分析,对于注意力头数与维度,保持计算量不变,调整注意力头数和键/值维度,单头注意力/过多的头数都会导致质量下降;减小注意力键的维度会损害模型质量;必须使用dropout(0.0的时候性能显著下降);将正弦位置编码替换为学习到的位置嵌入,两者的结果几乎相同。作者最终选择正弦编码,是因为它可能允许模型推断出比训练期间遇到的序列更长的序列。


这里需要补充的内容:

1.关于inputs和outputs在不同任务中长什么样子

  • 考虑机器翻译任务,inputs始终是原始语言的完整句子,一次性并行处理整个句子,生成 Key 和 Value 矩阵供 Decoder 查询。decoder侧在训练时使用shifted right的标准答案句子,例如,标准翻译是 <sos> Ich liebe dich <eos>,Decoder 的输入就是 <sos> Ich liebe dich。模型预测的下一个 token。位置 0 的输入 <sos> 预测 Ich,位置1的输入 Ich 预测 liebe... 这些是并行计算的,因为使用了 Mask 机制防止看到未来(只能利用之前的信息);推理时使用自回归架构,Step 0的时候Encoder 输入 "I love you"。Decoder 输入 [<sos>]。Output 预测 Ich;Step 1:的时候Decoder 输入变成 [<sos>, Ich]。Output 预测 liebe......如此周而复始直到输出eos。
  • 上下文续写通常只使用decoder部分,但是如果坚持用encoder-decoder架构的话就把原始文本放到encoder侧,然后decoder不断生成新的东西

2.为什么token不知道自己的位置

卷积神经网络(CNN)知道位置是因为卷积核是滑动的;循环神经网络(RNN)知道位置是因为它是按时间步t依次递归计算的,但是自注意力层实际上并不清楚位置,如果不加位置编码,对于模型来说,"I eat apple" 和 "apple eat I" 在 Self-Attention层看来是完全一样的“词袋”(因为相当于只是计算上下文的东西然后更新自己的向量,前后无所谓的)。

3.为什么需要sin/cos交替

这实际上构成了一组不同频率的波。低维度的波长短变化快,高维度的波长长变化慢(导致整体出来的d_model维度的位置编码类似二进制数字),这种组合能为每个位置生成一个独一无二的编码纹理。此外,对于pos+k,其编码向量可以看作是位置pos的编码向量*一个与pos无关、只与k有关的线性变换矩阵,这意味着模型在计算 Attention时,能够很容易地学到相对位置信息(不是绝对位置100和105的关系,而是“相距5个单位之间的关系”),这使得模型具有更好的外推性,即在训练时只见过短句子,测试时遇到比训练集更长的句子,这种相对位置的规律依然成立。

4.添加位置编码不会搞脏语义特征吗

使用的是高维度的d_model,在高维空间中,向量分布是非常稀疏的。位置编码向量和词嵌入向量在数学上倾向于正交,这意味着它们占据了空间中不同的“子空间”。模型可以通过学习不同的权重矩阵将这两种信息轻易地剥离出来,此外除了残差连接,Embedding 层会将权重乘以

\sqrt{d_{model}}

,这意味着语义 Embedding 的数值量级被放大了,而位置编码 Sin/Cos 的值始终在[-1,1]之间,因此对原始语义特征的影响微乎其微。这里实际上是一种最简易的特征融合,类似相加,只不过加的东西是不可学习的罢了。


Read more

【无人机路径规划】无人机三维路径规划中蚁群算法、A* 与 RRT* 算法对比(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文目录如下:🎁🎁🎁 💥1 概述 随着无人机技术的快速发展,其在军事侦察、物流配送、环境监测等众多领域的应用日益广泛。在实际应用场景中,无人机需要在复杂的三维空间内规划出一条安全、高效的飞行路径,以避开障碍物并满足任务需求。蚁群算法、A* 算法和 RRT* 算法是目前无人机三维路径规划中常用的算法,它们各自具有独特的原理和特点,对其进行详细对比有助于根据具体应用场景选择最合适的算法。 蚁群算法 蚁群算法是一种模拟蚂蚁觅食行为的启发式优化算法。蚂蚁在寻找食物的过程中,会在走过的路径上释放信息素,信息素浓度越高的路径对其他蚂蚁的吸引力越大。在无人机路径规划中,将三维空间划分为多个节点,每只“虚拟蚂蚁”从起点开始,根据信息素浓度和启发式信息选择下一个节点,不断迭代更新信息素浓度,最终找到一条从起点到终点的最优路径。 A* 算法 A*

【实战教程】MATLAB GUI实现多算法雷达CFAR检测:从原理到可视化分析

1. 什么是雷达CFAR检测? 雷达恒虚警检测(CFAR)是雷达信号处理中的一项核心技术,简单来说就是在复杂多变的噪声环境中,始终保持稳定的目标检测能力。想象一下你在一个嘈杂的派对上试图听清朋友的谈话,CFAR就像是你的大脑自动调节"听力阈值"的过程——当环境噪音变大时,你会不自觉地提高注意力阈值;当环境安静时,又能降低阈值捕捉细微声音。 在雷达系统中,CFAR技术通过动态调整检测门限来实现这个功能。传统固定门限检测在噪声变化时要么漏检目标(门限过高),要么产生大量误报(门限过低)。而CFAR算法能够根据周围环境的噪声水平,实时计算出最合适的检测门限值。 MATLAB GUI实现的最大优势在于可视化交互。通过图形界面,我们可以直观地看到: * 原始噪声信号的波形特征 * 不同CFAR算法计算出的动态门限曲线 * 目标检测结果的标记位置 * 算法在不同信噪比下的表现差异 2. CFAR核心算法原理解析 2.1 均值类CFAR算法 均值类算法是CFAR家族中最基础的成员,其核心思想可以用"邻里比较"来理解。就像通过比较周围房屋的价格来评估某处房产价值一样,这些算法通

2023年电赛H题(信号分离装置)-FPGA+stm32解法

2023年电赛H题(信号分离装置)-FPGA+stm32解法

目录 前言 题目 解题思路 基本框架 代码思路 第一部分(FPGA的FIFO以及串口发送接收) 1.FIFO 2.(FPGA串口发送) 3.FPGA串口接收 4.总结 第二部分(stm32接收数据进行FFT识别波形以及频率并发送) 1.stm32串口接收 2.stm32进行FFT 3.stm32串口发送 第三部分(FPGA得到波形与频率后生成波形) 第四部分(FPGA锁相) 1.鉴相 2.环路滤波 3.反馈 第五部分(DAC输出) 第六部分(移相) 1.按键消抖 2.按键设置相位差 3.数码管显示相位 第七部分(FPGA代码总结) 后记 前言 本文章除开要求一使用的增益为一的加法器以外,其余皆由FPGA+