范叶亮写智能体、模型和数据系统时,习惯先把定义和边界钉死。把「序列到序列和注意力机制」整理成可落地的中文笔记:问题在哪、默认做法会踩什么坑、该怎么选。原站导航和广告已去掉。
Encoder-Decoder & Seq2Seq
Encoder-Decoder 是一种包含两个神经网络的模型,两个网络分别扮演编码器和解码器的角色。Cho 等人 1 提出了一个基于 RNN 的 Encoder-Decoder 神经网络用于机器翻译。网络结构如下图所示:
整个模型包含编码器 (Encoder) 和解码器 (Decoder) 两部分:Encoder 将一个可变长度的序列转换成为一个固定长度的向量表示,Decoder 再将这个固定长度的向量表示转换为一个可变长度的序列。这使得模型可以处理从一个可变长度序列到另一个可变长度序例的转换,即学习到对应的条件概率 $p \left(y_1, \dotsc, y_{T'} | x_1, \dotsc, x_T\right)$ ,其中 $T$ 和 $T'$ 可以为不同的值,也就是说输入和输出的序列的长度不一定相同。
注意力机制 (Attention Mechanism)
在模型中,Encoder 为一个 RNN,逐次读入输入序列 $\mathbf{x}$ 中的每个元素,其中 RNN 隐状态的更新方式如下:
$$ \mathbf{h}_{\langle t \rangle} = f \left(\mathbf{h}_{\langle t-1 \rangle}, x_t\right) $$
Hard & Soft Attention
在读入序列的最后一个元素后 (通常为一个结束标记),RNN 的隐状态则为整个输入序列的概括信息 $\mathbf{c}$ 。Decoder 为另一个 RNN,用于根据隐状态 $\mathbf{h}'_{\langle t \rangle}$ 预测下一个元素 $y_t$ ,从而生成整个输出序列。不同于 Encoder 中的 RNN,Decoder 中 RNN 的隐状态 $\mathbf{h}'_{\langle t \rangle}$ 除了依赖上一个隐含层的状态和之前的输出外,还依赖整个输入序列的概括信息 $\mathbf{c}$ ,即:
$$ \mathbf{h}'_{\langle t \rangle} = f \left(\mathbf{h}'_{\langle t-1 \rangle}, y_{t-1}, \mathbf{c}\right) $$
Global & Local Attention
$$ P \left(y_t | y_{t-1}, y_{t-2}, \dotsc, y_1, \mathbf{c}\right) = g \left(\mathbf{h}_{\langle t \rangle}, y_{t-1}, \mathbf{c}\right) $$
$$ \max_{\theta} \dfrac{1}{N} \sum_{n=1}^{N}{\log p_{\theta} \left(\mathbf{y}_n | \mathbf{x}_n\right)} $$
Self Attention
其中, $\theta$ 为模型的参数, $\mathbf{x}_n$ 和 $\mathbf{y}_n$ 分别为输入和输出序列的成对样本。当模型训练完毕后,我们可以利用模型根据给定的输入序列生成相应的输出序列,或是根据给定的输入和输出序列对计算概率得分 $p_{\theta} \left(\mathbf{y} | \mathbf{x}\right)$ 。同时,作者还提出了一种新的 RNN 单元 GRU (Gated Recurrent Unit),有关 GRU 的更多介绍请参见 之前的博客 。
序列到序列 (Sequence to Sequence, Seq2Seq) 模型从名称中不难看出来是一种用于处理序列数据到序列数据转换问题 (例如:机器翻译等) 的方法。Sutskever 等人 2 提出了一种基于 Encoder-Decoder 网络结构的 Seq2Seq 模型用于机器翻译,网络结构细节同 RNN Encoder-Decoder 略有不同,如下图所示:
Hierarchical Attention
在模型的解码阶段,模型采用简单的从左到右的 Beam Search,该方法维护一个大小为 $B$ 的集合保存最好的结果。下图展示了 $B = 2$ 情况下 Beam Search 的具体工作方式:
其中,红色的虚线箭头表示每一步可能的搜索方向,绿色的实线箭头表示每一步概率为 Top $B$ 的方向。例如,从 S 开始搜索:
值得单独记下的点
- 对数据进行预处理,在每个句子的结尾添加特殊字符 <EOS> ,如上图所示。首先计算 A, B, C, <EOS> 的表示,再利用该表示计算 W, X, Y, Z, <EOS> 的条件概率。
- 利用两个不同的 LSTM,一个用于输入序列,另一个用于输出序列。
- 选用一个较深的 LSTM 模型 (4 层) 提升模型效果。
- 对输入序列进行倒置处理,例如对于输入序列 $a, b, c$ 和对应的输出序列 $\alpha, \beta, \gamma$ ,LSTM 需要学习的映射关系为 $c, b, a \to \alpha, \beta, \gamma$ 。
- 第一步搜索的可能结果为 SA 和 SB,保留 Top 2,结果为 SA 和 SB。
- 第二步搜索的可能结果为 SAC,SAD,SBE 和 SBF,保留 Top 2,结果为 SAC 和 SBE。
- 第三步搜索的可能结果为 SACG,SACH,SBEK 和 SBEL,保留 Top 2,结果为 SACH 和 SBEK。至此,整个搜索结束。
- Encoder-Decoder Attention Layers,其中 queries 来自于之前的 Decoder 层,keys 和 values 来自于 Encoder 的输出,该部分同其他 Seq2Seq 模型的 Attention 机制类似。
落地时建议先做的 5 件事
- 先写清任务能不能被自动验证:能验证的交给系统和评测,不能验证的留给人审。
- 本地部署先算显存、延迟和失败回滚,不要只看能跑通一次。
- 多智能体只在单智能体触到上下文或专业边界时再拆。
- Token、微调和压缩都要有对照数字,避免口号式优化。
- 结论写成可检查清单:接口、超时、评测集、回滚版本。
和智能体产品怎么接
龙虾PRO做 OpenClaw 落地时,最该拿走的是「单智能体先做好工具和提示,再谈编排」。数字员工、技能市场和网关应共用同一套评测与权限,而不是各写一套角色人设。
本文侧重全链路风控方法论。落地时请用自身业务单据做回放验证,不要把示例阈值直接当生产策略。 相关:风控体检 · 方案资源
常见问题 FAQ
什么是AI智能系统?
「AI智能系统」可概括为:Encoder-Decoder 是一种包含两个神经网络的模型,两个网络分别扮演编码器和解码器的角色。Cho 等人 1 提出了一个基于 RNN 的 Encoder-Decoder 神经网络用于机器翻译。网络结构如下图所示: 本文从定义、方法与实践要点展开说明。
为什么要关注AI智能系统?
关注AI智能系统,是因为它直接影响效率、风险与可复制性。文中指出:Encoder-Decoder 是一种包含两个神经网络的模型,两个网络分别扮演编码器和解码器的角色。Cho 等人 1 提出了一个基于 RNN 的 Encoder-Decoder 神经网络用于机器翻译。网络结构如下图所示:
如何落地AI智能系统?有哪些关键步骤?
建议按以下路径推进AI智能系统:1) 对数据进行预处理,在每个句子的结尾添加特殊字符 <EOS> ,如上图所示。首先计算 A, B, C, <EOS> 的表示,再利用该表示…;2) 利用两个不同的 LSTM,一个用于输入序列,另一个用于输出序列。;3) 选用一个较深的 LSTM 模型 (4 层) 提升模型效果。;4) 对输入序列进行倒置处理,例如对于输入序列 $a, b, c$ 和对应的输出序列 $\alpha, \beta, \gamma$ ,LSTM 需要学习的映射关系…;5) 第一步搜索的可能结果为 SA 和 SB,保留 Top 2,结果为 SA 和 SB。。细节见正文对应章节。
AI智能系统适合哪些人或团队?
AI智能系统更适合:产品/技术负责人、运营与增长团队、需要落地智能体或自动化的中小团队、关注「AI智能系统」方向的读者。若你只需要单次聊天式问答,可先读概念;若要上生产,请重点看步骤、权限与风控相关段落。
关于「Encoder-Decoder & Seq2Seq」,本文给出了什么结论?
围绕「Encoder-Decoder & Seq2Seq」,正文强调:Encoder-Decoder 是一种包含两个神经网络的模型,两个网络分别扮演编码器和解码器的角色。Cho 等人 1 提出了一个基于 RNN 的 Encoder-Decoder 神经网络用于机器翻译。网络结构如下图所示:
关于「注意力机制 (Attention Mechanism)」,本文给出了什么结论?
在「注意力机制 (Attention Mechanism)」部分,要点是:$ P \left(y_t | y_{t-1}, y_{t-2}, \dotsc, y_1, \mathbf{c}\right) = g \left(\mathbf{h}_{\langle t \rangle}, y_{t-1}, \mathbf{c}\right) $$ $$ \max_{\theta} \dfrac{1}{N} \sum_{n=1}^{N}{\log p_{\theta} \left(\mathbf{y}_n | \