Skip to content

Commit 3d9b9f9

Browse files
committed
Site updated: 2025-06-18 17:11:27
1 parent 430d156 commit 3d9b9f9

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

2025/06/17/A2-norm-emb/index.html

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<meta property="og:description" content="Task 1: 均方根层归一化 (RMS Norm)均方根层归一化(RMS Norm)是深度学习中应用最广泛的归一化模块,尤其在自然语言处理(NLP)和大语言模型(LLM)领域。该模块以形状为 [batch_size, seqlen, hidden_size] 的张量为输入(记为 X,形状为 [b, s, h]),并沿着隐藏层 h 维度,执行带可学习缩放变换的均方根归一化操作,得到输出 Y,形状为">
2929
<meta property="og:locale" content="zh_CN">
3030
<meta property="article:published_time" content="2025-06-17T06:17:05.000Z">
31-
<meta property="article:modified_time" content="2025-06-18T08:30:06.897Z">
31+
<meta property="article:modified_time" content="2025-06-18T09:11:14.634Z">
3232
<meta property="article:author" content="DeepEngine">
3333
<meta property="article:tag" content="RMSNorm">
3434
<meta property="article:tag" content="Vocab Embedding">
@@ -187,7 +187,7 @@ <h1 class="post-title" itemprop="name headline">
187187
<i class="far fa-calendar-check"></i>
188188
</span>
189189
<span class="post-meta-item-text">更新于</span>
190-
<time title="修改时间:2025-06-18 16:30:06" itemprop="dateModified" datetime="2025-06-18T16:30:06+08:00">2025-06-18</time>
190+
<time title="修改时间:2025-06-18 17:11:14" itemprop="dateModified" datetime="2025-06-18T17:11:14+08:00">2025-06-18</time>
191191
</span>
192192
<span class="post-meta-item">
193193
<span class="post-meta-item-icon">
@@ -265,22 +265,21 @@ <h4 id="Optional-Task4:旋转位置编码"><a href="#Optional-Task4:旋转
265265
<li>输出张量 <code>E</code> 的形状与 <code>X</code> 的形状相同,表示应用旋转编码后的结果。</li>
266266
</ul>
267267
</li>
268-
<li><p>由于 <strong>RoPE</strong> 矩阵的稀疏性,直接用矩阵乘法来实现会很浪费算力,推荐使用以下方式来实现 <strong>RoPE</strong><br>$$<br>\begin{pmatrix}<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\quad</p>
269-
<ul>
270-
<li></li>
268+
<li><p>由于 <strong>RoPE</strong> 矩阵的稀疏性,直接用矩阵乘法来实现会很浪费算力,推荐使用 $(8)$ 中的方法来实现标准 <strong>RoPE</strong>。其中,$\bigotimes$ 是逐位相乘,并且可以注意到 $(8)$ 中,$X$ 按 $(x_0,x_1),(x_2,x_3),\cdots$ 的顺序进行分组。而 <code>Llama</code><code>ChatGLM</code><strong>RoPE</strong> 模块对 $X$ 的顺序进行了重组,也即按 $(x_0,x_{\frac{d}{2}}),(x_1,x_{\frac{d}{2}+1}),\cdots$ 的顺序进行分组,请使用 $(9)$ 中的方法实现 <strong>Task4</strong> 中的 <strong>RoPE</strong></p>
269+
<div class="note info">
270+
<p>余弦\正弦参数对 <code>(C, S)</code> 也要做相应调整。</p>
271+
</div></li>
271272
</ul>
272-
<p>\quad<br>\begin{pmatrix}<br>-x_1 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>-x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>-x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\tag{8}<br>$$<br>其中,$\otimes$ 是逐位相乘,并且可以注意到上述式子中,按 $(x_0,x_1),(x_2,x_3),\cdots$ 的顺序进行分组。而 <code>Llama</code><code>ChatGLM</code><strong>RoPE</strong> 模块对 $x$ 的顺序进行了重组,也即按 $(x_0,x_{\frac{d}{2}}),(x_1,x_{\frac{d}{2}+1}),\cdots$ 的顺序进行分组,请使用如下方法进行计算。<br>$$<br>\begin{pmatrix}<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{\frac{d}{2}-1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_{\frac{d}{2}} \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_{\frac{d}{2}+1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_{\frac{d}{2}+2} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^2\right)} \cr<br>\cos{\left(n\theta^3\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^2\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-2}\right) \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\quad<br>+<br>\quad<br>\begin{pmatrix}<br>-x_{\frac{d}{2}} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>-x_{\frac{d}{2}+1} \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>-x_{\frac{d}{2}+2} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>-x_{\frac{d}{2}+3} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>-x_{d-1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{\frac{d}{2}-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{\frac{d}{2}-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^2\right)} \cr<br>\sin{\left(n\theta^3\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^2\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-2}\right) \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\tag{9}<br>$$<br>注意:余弦\正弦参数对 <code>(C, S)</code> 也要做相应调整。</p>
273-
</li>
274-
<li><p>另一个问题是,初始化 <code>NTKAwareRoPE</code> 时会提供一个训练阶段使用的最大序列长度(记作 <code>ms</code>)和一个缩放比例(记作 <code>k</code>,也即 $\kappa$),此时我们可以预先计算好 <code>(C, S)</code>,其形状为 <code>[es, hd]</code>,其中 <code>es = ms x k</code> 表示最大支持的拓展序列长度。因此,当有一个输入张量 <code>X_</code> 的实际序列长度 <code>s_</code> 超过了 <code>es</code>,即 <code>s_ &gt; es</code>,我们必须动态重新计算一对新的 <code>(C_, S_)</code>,以确保旋转编码操作可以适用于这类超长输入。</p>
275-
</li>
276-
<li><p>但这里有两个问题:</p>
277-
<ol>
273+
<p>$$<br>\begin{pmatrix}<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\quad<br>+<br>\quad<br>\begin{pmatrix}<br>-x_1 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>-x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>-x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\tag{8}<br>$$</p>
274+
<p>$$<br>\begin{pmatrix}<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_3 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{\frac{d}{2}-1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_{\frac{d}{2}} \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_{\frac{d}{2}+1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_{\frac{d}{2}+2} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{d-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{d-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^2\right)} \cr<br>\cos{\left(n\theta^3\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\cos{\left(n\theta^0\right)} \cr<br>\cos{\left(n\theta^1\right)} \cr<br>\cos{\left(n\theta^2\right)} \cr<br>\vdots \cr<br>\cos\left(n\theta^{\frac{d}{2}-2}\right) \cr<br>\cos\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\quad<br>+<br>\quad<br>\begin{pmatrix}<br>-x_{\frac{d}{2}} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>-x_{\frac{d}{2}+1} \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>-x_{\frac{d}{2}+2} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>-x_{\frac{d}{2}+3} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>-x_{d-1} \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_0 \vphantom{\cos{\left(n\theta^0\right)}} \cr<br>x_1 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>x_2 \vphantom{\cos{\left(n\theta^0\right)}}\cr<br>\vdots \cr<br>x_{\frac{d}{2}-2} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}\cr<br>x_{\frac{d}{2}-1} \vphantom{\cos\left(n\theta^{\frac{d}{2}-1}\right)}<br>\end{pmatrix}<br>\quad<br>\bigotimes<br>\quad<br>\begin{pmatrix}<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^2\right)} \cr<br>\sin{\left(n\theta^3\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right) \cr<br>\sin{\left(n\theta^0\right)} \cr<br>\sin{\left(n\theta^1\right)} \cr<br>\sin{\left(n\theta^2\right)} \cr<br>\vdots \cr<br>\sin\left(n\theta^{\frac{d}{2}-2}\right) \cr<br>\sin\left(n\theta^{\frac{d}{2}-1}\right)<br>\end{pmatrix}<br>\tag{9}<br>$$</p>
275+
<ul>
276+
<li>另一个问题是,初始化 <code>NTKAwareRoPE</code> 时会提供一个训练阶段使用的最大序列长度(记作 <code>ms</code>)和一个缩放比例(记作 <code>k</code>,也即 $\kappa$),此时我们可以预先计算好 <code>(C, S)</code>,其形状为 <code>[es, hd]</code>,其中 <code>es = ms x k</code> 表示最大支持的拓展序列长度。因此,当有一个输入张量 <code>X_</code> 的实际序列长度 <code>s_</code> 超过了 <code>es</code>,即 <code>s_ &gt; es</code>,我们必须动态重新计算一对新的 <code>(C_, S_)</code>,以确保旋转编码操作可以适用于这类超长输入。</li>
277+
<li>但这里有两个问题:<ol>
278278
<li>当需要重新计算新的余弦&#x2F;正弦基 <code>(C&#39;, S&#39;)</code> 时,我们应如何为输入张量 <code>X&#39;</code> 确定新的缩放比例 <code>k&#39;</code></li>
279279
<li>当遇到这类超长序列时,我们是否应该每次仅计算并使用该输入所需的 <code>(C&#39;, S&#39;)</code>,同时保留原始的缩放比例 <code>k</code> 及其对应的 <code>(C, S)</code> 用于常规输入?或者,我们应该每次都更新当前的 <code>k</code> 及其对应的 <code>(C, S)</code> 为新的 <code>k&#39;</code><code>(C&#39;, S&#39;)</code></li>
280280
</ol>
281281
</li>
282-
<li><p>上述问题尚无标准答案。在此任务中,我们采用如下策略:</p>
283-
<ol>
282+
<li>上述问题尚无标准答案。在此任务中,我们采用如下策略:<ol>
284283
<li>当出现新的输入长度 <code>s&#39; &gt; es</code> 时,我们选择满足 <code>es&#39; = ms x k&#39; &gt;= s&#39;</code> 的最小 <code>k&#39;</code>,其中 <code>k&#39;</code> 是一个偶数;</li>
285284
<li>我们在初始化 <code>NTKAwareRoPE</code> 模块时新增了一个参数 <code>dynamic</code>。当 <code>dynamic = True</code> 时,每次遇到超出长度的输入时,都会更新当前的 $k \leftarrow k’$ 以及 $(C,S) \leftarrow (C’, S’)$;反之,若 <code>dynamic = False</code> 时,则仅为当前超长输入临时计算并使用 $(C’,S’)$,而全局的 $k$ 和 $(C,S)$ 保持不变。</li>
286285
</ol>

css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ pre .javascript .function {
11681168
}
11691169
.links-of-author a::before,
11701170
.links-of-author span.exturl::before {
1171-
background: #bac454;
1171+
background: #d6ffb4;
11721172
border-radius: 50%;
11731173
content: ' ';
11741174
display: inline-block;

0 commit comments

Comments
 (0)