<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Sequence Modeling on KKKZOZ&#39;s Blog</title>
    <link>http://blog.kkkzoz.top/tags/sequence-modeling/</link>
    <description>Recent content in Sequence Modeling on KKKZOZ&#39;s Blog</description>
    <image>
      <title>KKKZOZ&#39;s Blog</title>
      <url>http://blog.kkkzoz.top/images/papermod-cover.png</url>
      <link>http://blog.kkkzoz.top/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.147.0</generator>
    <language>en</language>
    <lastBuildDate>Tue, 11 Aug 2026 20:26:05 +0800</lastBuildDate>
    <atom:link href="http://blog.kkkzoz.top/tags/sequence-modeling/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[Sequence Modeling 01] RNN</title>
      <link>http://blog.kkkzoz.top/posts/research/ml-architectures/rnn/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/research/ml-architectures/rnn/</guid>
      <description>&lt;p&gt;Transformer 是基于全局视角处理序列的，它通过 Self-Attention 一次性让所有 token 互相交互。而 RNN（Recurrent Neural Network，循环神经网络）的本质是基于时间步的顺序迭代。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果把 Transformer 比作同时看到整段句子的“上帝视角”，RNN 则像是按照从左到右的顺序逐字阅读，并在脑海中维护一个不断更新的“记忆向量”。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;RNN 的核心结构是一个循环单元。它在处理序列时，并不是一次性输入整个序列（如 &lt;code&gt;[batch, seq_len, dim]&lt;/code&gt;），而是将序列沿着 seq_len 维度切开，在每一个时间步 $t$ 输入一个 token。&lt;/p&gt;
&lt;p&gt;为了保留历史上下文，RNN 引入了隐藏状态 $h_t$。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$h_t$ 是一个固定维度的向量，它包含了从时间步 $0$ 到 $t$ 的所有历史信息压缩。&lt;/li&gt;
&lt;li&gt;在每一个时间步，RNN 接收两个输入：当前时刻的输入 $x_t$ 和 上一时刻的隐藏状态 $h_{t-1}$。&lt;/li&gt;
&lt;li&gt;RNN 会使用同一套权重矩阵（参数共享）来融合这两个输入，生成新的 $h_t$。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于序列中的第 $t$ 个 token，RNN 内部只做两步基本的线性变换和一次非线性激活：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;更新隐藏状态：&lt;/p&gt;
$$h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1} + b_h)$$&lt;p&gt;这里 $W_{xh}$ 负责投影当前输入，$W_{hh}$ 负责投影历史记忆。两者的结果相加后，通过 $\tanh$ 激活函数将数值压缩到 $[-1, 1]$ 之间，防止在长序列迭代中数值爆炸。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;计算当前输出（可选）：&lt;/p&gt;
$$y_t = W_{hy} h_t + b_y$$&lt;p&gt;如果需要每个时间步都输出（比如序列标注），就用当前的 $h_t$ 映射出 $y_t$。如果只需要句向量（比如文本分类），则直接取最后一个时间步的 $h_n$ 即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Sequence Modeling 02] LSTM</title>
      <link>http://blog.kkkzoz.top/posts/research/ml-architectures/lstm/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/research/ml-architectures/lstm/</guid>
      <description>&lt;h2 id=&#34;vanilla-rnn-的缺陷为什么我们需要-lstm&#34;&gt;Vanilla RNN 的缺陷：为什么我们需要 LSTM？&lt;/h2&gt;
&lt;p&gt;在上一篇中我们提到，RNN 的核心公式是 $h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1} + b_h)$。这种设计在处理长序列时会遇到两个工程上的致命问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;梯度消失与梯度爆炸（Vanishing/Exploding Gradients）
&lt;ul&gt;
&lt;li&gt;在反向传播计算梯度时，误差需要沿着时间步反向传递。这会导致权重矩阵 $W_{hh}$ 被连乘 $t$ 次。根据线性代数原理，如果 $W_{hh}$ 的最大特征值小于 1，连乘后梯度会呈指数级衰减趋近于 0（梯度消失）；如果大于 1，则会指数级放大（梯度爆炸）。梯度消失意味着网络根本无法学习到长距离的依赖关系。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;信息覆盖（Information Overwrite）
&lt;ul&gt;
&lt;li&gt;RNN 只有一个隐藏状态 $h_t$。在每一个时间步，新的输入 $x_t$ 都会强制与历史信息 $h_{t-1}$ 混合。没有任何机制能够保护早期非常重要但最近没有出现的信息。这就好比一个容量有限的栈，新数据不断涌入，旧数据很快就被冲刷掉了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lstm-的核心思想分离状态与引入门控机制&#34;&gt;LSTM 的核心思想：分离状态与引入门控机制&lt;/h2&gt;
&lt;p&gt;为了解决上述问题，LSTM 对架构进行了大改，其核心创新在于：&lt;strong&gt;将内部状态拆分为两个，并引入了“门（Gates）”来进行精确的信息路由&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;细胞状态 $c_t$ (Cell State)： 这是 LSTM 的“主干道”或“长期记忆”。它在整个链条上贯穿运行，只有一些少量的线性交互。这种设计使得梯度可以通过 $c_t$ 顺畅地无损反向传播，直接解决了梯度消失问题。&lt;/li&gt;
&lt;li&gt;隐藏状态 $h_t$ (Hidden State)： 类似于 Vanilla RNN 的 $h_t$，作为“短期记忆”或当前时间步的输出。&lt;/li&gt;
&lt;li&gt;门控机制 (Gating Mechanism)： 门本质上是经过 Sigmoid 激活的全连接层。Sigmoid 的输出在 $[0, 1]$ 之间，用于控制信息的保留比例（0 代表完全丢弃，1 代表完全保留）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;数学工作流lstm-的四个核心步骤&#34;&gt;数学工作流：LSTM 的四个核心步骤&lt;/h2&gt;
&lt;p&gt;对于第 $t$ 个 token，LSTM 内部执行以下运算。为了方便，我们通常将前一个隐藏状态 $h_{t-1}$ 和当前输入 $x_t$ 拼接在一起计算。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Sequence Modeling 03] Mamba</title>
      <link>http://blog.kkkzoz.top/posts/research/ml-architectures/mamba/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/research/ml-architectures/mamba/</guid>
      <description>&lt;p&gt;要理解 Mamba，我们需要将思维从 Transformer 的“全局注意力”切回到 RNN 的“时序状态机”，但这次，我们要解决 Vanilla RNN 和 LSTM 共同的工程死穴：&lt;strong&gt;训练阶段无法并行&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Mamba 的核心目标非常明确：&lt;strong&gt;既要拥有 Transformer 级别的高效并行训练能力，又要保持 RNN $O(1)$ 的推理复杂度和无限上下文潜力。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它主要通过整合&lt;strong&gt;状态空间模型（State Space Model, SSM）&lt;/strong&gt;、**选择性机制（Selective Mechanism）&lt;strong&gt;和&lt;/strong&gt;底层硬件优化（Hardware-aware Algorithm）**来实现这一目标。&lt;/p&gt;
&lt;p&gt;以下从数学和工程的视角详细拆解 Mamba 架构。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;数学基础从连续到离散的状态空间模型-ssm&#34;&gt;数学基础：从连续到离散的状态空间模型 (SSM)&lt;/h2&gt;
&lt;p&gt;Mamba 的前身是 S4 等状态空间模型。SSM 的思想源于控制论，它假设系统的状态演化可以用一组连续的微分方程来描述：&lt;/p&gt;
$$h&#39;(t) = A h(t) + B x(t)$$$$y(t) = C h(t)$$&lt;ul&gt;
&lt;li&gt;$x(t)$ 是输入。&lt;/li&gt;
&lt;li&gt;$h(t)$ 是隐藏状态（类比 RNN 的 $h_t$ 或 LSTM 的 $c_t$）。&lt;/li&gt;
&lt;li&gt;$A$ 是状态转移矩阵，描述系统本身的演化规律。&lt;/li&gt;
&lt;li&gt;$B$ 和 $C$ 是输入输出投影矩阵。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了在深度学习中使用（处理离散的 token），必须对连续系统进行&lt;strong&gt;离散化（Discretization）&lt;/strong&gt;。通过引入一个步长参数 $\Delta$（Delta），使用零阶保持（Zero-Order Hold）等数学技巧，上述方程可以转换为离散的递归形式：&lt;/p&gt;
$$h_t = \bar{A} h_{t-1} + \bar{B} x_t$$$$y_t = C h_t$$&lt;p&gt;其中 $\bar{A} = \exp(\Delta A)$。
你可以看到，离散化后的公式与 Vanilla RNN 非常相似：当前状态 $h_t$ 是前一个状态 $h_{t-1}$ 的线性变换加上当前输入 $x_t$ 的线性变换。因为它是&lt;strong&gt;纯线性&lt;/strong&gt;的（没有 LSTM 那样的 $\tanh$ 或 Sigmoid 阻断），这为后续的数学化简和并行计算奠定了基础。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Sequence Modeling 04] Linear Attention</title>
      <link>http://blog.kkkzoz.top/posts/research/ml-architectures/linear-attention/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/research/ml-architectures/linear-attention/</guid>
      <description>&lt;p&gt;linear_attention 是把 Mamba2 的 gating 机制 和 DeltaNet 的 delta rule 结合起来形成的新结构&lt;/p&gt;
&lt;p&gt;先简单分析一下 线性注意力是什么&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;h3 id=&#34;从-transformer-视角&#34;&gt;从 Transformer 视角&lt;/h3&gt;
&lt;p&gt;标准 causal self-attention 的一层，大致是：&lt;/p&gt;
$$
Q = XW_Q,\quad K = XW_K,\quad V = XW_V
$$$$
A = \text{softmax}(QK^\top + \text{mask}),\quad O = AV
$$&lt;p&gt;对第 $t$ 个 token 来说，本质上是在做：&lt;/p&gt;
$$
o_t = \sum_{i \le t} \alpha_{t,i} v_i
$$&lt;blockquote&gt;
&lt;p&gt;O(n, t) 中的每一行是把 attn_map 中的对应行作为权重，对 value 矩阵的行进行线性组合(加权)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;也就是：&lt;strong&gt;当前 token 用 query 去和历史所有 key 打分，再把历史 value 加权求和&lt;/strong&gt;。这给了 Transformer 很强的“按内容检索历史”的能力，但代价是训练时通常要处理完整的 token-token 交互矩阵。Mamba2、DeltaNet、Gated DeltaNet 这一类工作，核心目标就是：&lt;strong&gt;尽量保留这种“从历史取信息”的能力，但不要每次都真的显式看全部历史 token&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
