论文阅读: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

# OpenClaw QQ 机器人接入完整指南

作者: 星期五助手 创建时间: 2026-03-05 适用版本: OpenClaw 2026.2.26+ 📖 目录 1. 项目概述 2. 环境准备 3. 安装 NapCat QQ 机器人 4. 配置 OpenClaw QQ 插件 5. 网络配置(关键) 6. 测试与验证 7. 常见问题 项目概述 本指南介绍如何将 OpenClaw 接入 QQ,实现通过 QQ 与 OpenClaw 智能助手对话。 架构说明 ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ QQ 用户 │ ──→ │ NapCat │ ──→ │ OpenClaw │ │ (发消息) │ │ (QQ 机器人) │ │ (星期五)

MIPI DSI 4-Lane液晶屏驱动开发实战:从时序解析到FPGA对接

1. MIPI DSI 4-Lane液晶屏基础认知 第一次接触MIPI DSI 4-Lane液晶屏时,我被它复杂的时序图吓到了——直到把它想象成高速公路的车道管理才豁然开朗。这种显示屏采用串行差分信号传输,4条数据通道就像双向四车道的高速公路,每条lane的传输速率可达480MHz(实测GOWIN开发板环境),比传统并行RGB接口节省了约60%的引脚资源。 以常见的5寸720x1280分辨率屏幕为例,其核心参数如下表: 参数项典型值技术要点接口类型MIPI DSI 4-Lane支持LP/HS双模式分辨率720(H)×1280(V)60Hz刷新率色彩深度24bit RGB实际传输采用RGB888压缩为RGB565功耗特性LP模式<10mAHS模式峰值电流约120mA同步模式SYNC EVENT需要精确控制消隐区时序 在硬件连接时,我曾犯过把CLK和DATA线序接反的低级错误。正确的接线顺序应该是: 1. 先对接CLK+/CLK-差分对(相当于交通信号灯) 2. 再按D0+/D0-到D3+/D3-顺序连接数据线 3. 最后接电源和背光(VCC/VLED等) 2.

IoT DevOps实战:基于设备影子(Shadow)的万级机器人梯控集群自动化运维架构

IoT DevOps实战:基于设备影子(Shadow)的万级机器人梯控集群自动化运维架构

摘要: 当机器人梯控设备数量突破 10,000 台,传统的“SSH/VPN 单点登录”维护模式将成为运维灾难。如何确保分布在不同网络环境下的电梯网关配置一致性?如何实现固件的灰度发布(Canary Release)与回滚?本文将从架构设计角度,探讨一种基于“期望状态(Desired) vs 报告状态(Reported)”的自动化运维模型。我们将利用 鲁邦通EC6200机器人梯控产品 对 Python 与 MQTT 的原生支持,构建一套 Infrastructure as Code(基础设施即代码)的垂直交通管理系统。 导语: 在 DevOps 领域,管理成千上万个 Docker 容器已是常态。但在物理世界,管理分散在全国楼宇井道内的机器人梯控网关却依然原始。网络抖动、IP 变动、固件版本碎片化是架构师必须面对的挑战。本文将展示如何利用

Z-Image-Turbo_Sugar脸部Lora:5分钟快速部署甜妹风格AI绘画

Z-Image-Turbo_Sugar脸部Lora:5分钟快速部署甜妹风格AI绘画 你是不是也想轻松生成那种让人眼前一亮的甜妹风格AI绘画?现在有了Z-Image-Turbo_Sugar脸部Lora,只需要5分钟就能部署完成,无需任何复杂配置,直接开始创作属于你的甜美系AI艺术作品。 这个镜像基于强大的Z-Image-Turbo模型,专门针对甜妹风格进行了优化,无论是清纯可爱的淡颜系,还是微醺迷人的蜜桃系,都能一键生成。下面我就带你快速上手这个超好用的AI绘画工具。 1. 环境准备与快速启动 1.1 选择合适的环境 在ZEEKLOG算力平台选择"Z-Image-Turbo_Sugar脸部Lora"镜像创建实例。这个镜像已经预装了所有必要的依赖,包括Xinference推理框架和Gradio可视化界面,开箱即用。 建议选择GPU环境以获得更好的生成速度,不过CPU环境也能正常运行,只是生成时间会稍长一些。 1.2 等待服务启动 创建实例后,系统会自动启动所有服务。初次加载需要一些时间,因为要加载模型权重和初始化推理环境。你可以通过以下命令查看启动状态: cat /ro