李代数(Lie Algebras)与Attention:深度学习中的数学之美

李代数与Attention:深度学习中的数学之美

引言

作为一名深度学习研究者,您一定对Transformer模型和其中的注意力机制(Attention)不陌生。Attention通过查询(Query)、键(Key)和值(Value)之间的矩阵运算,赋予模型捕捉序列中长距离依赖的能力。但您有没有想过,这种机制背后是否隐藏着更深的数学结构?答案是肯定的:李代数(Lie Algebra),一种起源于数学和物理的概念,可以为Attention提供一个优雅的解释框架。

在这篇博客中,我将从零开始介绍李代数,逐步揭示它如何与Attention机制相联系,尤其是在Transformer的Softmax注意力中。我们不需要复杂的数学背景,只需熟悉矩阵运算和深度学习的基本概念即可。让我们开始这场数学与深度学习的奇妙旅程吧!

灵感来源

今天看到X上面的一条tweet:描述的是Attention和Lie Algebra的关系。
在这里插入图片描述

Link:https://x.com/jeroaranda/status/1894550046298784243,访问时间是2025年2月27日,此时作者相关的paper还没有挂出来,具体细节不得而知。


1. 李代数是什么?

李代数最初是为了研究连续变换(比如旋转、平移)而诞生的数学工具。它是李群(Lie Group)的“切空间”,简单来说,李群是一组连续的变换(比如旋转矩阵),而李代数则是这些变换的“生成器”。

一个直观的例子

想象你在玩一个三维旋转的游戏。每次旋转都可以用一个3×3的矩阵表示,这些矩阵组成了一个李群。如果我们想知道这些旋转是如何产生的,就需要李代数——它就像是一个“速度”或“方向”的描述器,通过指数映射(exponential map)生成具体的旋转矩阵。

数学定义

在数学上,李代数是一个向量空间,通常由矩阵组成。例如,一个李代数 ( g g g ) 可以包含一些特殊的矩阵 ( A A A ),满足特定条件(如非对角元素非负,每行和为零)。通过指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ),我们可以生成一个随机矩阵(stochastic matrix),也就是行和为1的矩阵,和Attention中的Softmax输出很像。

关键点:李代数通过指数映射生成变换,而这种变换与Attention的权重计算有惊人的相似之处。


2. Attention机制快速回顾

在深入联系之前,我们先回顾一下Attention的核心。Transformer中的自注意力机制是这样工作的:

  1. 输入序列通过嵌入矩阵 ( X X X ) 表示。
  2. 计算查询 ( Q = X W Q Q = XW_Q Q=XWQ )、键 ( K = X W K K = XW_K K=XWK )、值 ( V = X W V V = XW_V V=XWV ),其中 ( W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV ) 是可学习的权重矩阵。
  3. 通过 ( Q Q Q ) 和 ( K K K ) 计算注意力权重:
    S = softmax ( Q K T d ) , S = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right), S=softmax(d QKT),
    其中 ( d d d ) 是嵌入维度,Softmax确保每一行的和为1。
  4. 输出为 ( Output = S ⋅ V \text{Output} = S \cdot V Output=SV )。

这个过程的核心是 ( S ),它决定了每个输入位置对其他位置的关注程度。接下来,我们将看到,李代数如何为 ( S ) 提供一个数学解释。


3. 李代数如何解释Attention?

阅读过程中,如果有不清楚的地方,可以移步后文中的补充部分,那里有很多解释,看是否解答了疑惑。

让我们一步步拆解李代数与Attention的联系。以下内容参考了“Attention as Lie Group Action”的数学框架,但会用更直白的方式解释。

3.1 李代数生成矩阵

假设我们有一个李代数 ( g g g ),它包含一些生成矩阵 ( A A A )。这些矩阵的特点是:

  • 对角线外的元素是非负的(类似注意力权重的非负性)。
  • 每行和为零(通过指数映射后会变成和为1)。

通过指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ),我们可以生成一个随机矩阵。这种矩阵非常像Attention中的 ( S = softmax ( Q K T ) S = \text{softmax}(QK^T) S=softmax(QKT) ),因为Softmax也输出一个行和为1的权重矩阵。

3.2 Attention作为指数映射

在Transformer中,( Q K T QK^T QKT ) 计算了输入之间的相似性,经过Softmax后变成注意力权重 ( S S S )。研究表明,这种过程可以近似看作是对某个生成矩阵 ( G t G_t Gt ) 的指数映射:
S t ≈ exp ⁡ ( G t ) , S_t \approx \exp(G_t), Stexp(Gt),
其中 ( G t G_t Gt ) 是一个与序列位置相关的生成矩阵。比如,在因果注意力(Causal Attention)中,( G t G_t Gt ) 会遮盖未来的信息(causal masking)。

直观理解:Softmax就像一个“平滑的指数函数”,将 ( Q K T QK^T QKT ) 转换为一个概率分布,而李代数的指数映射提供了类似的数学结构。

3.3 嵌入矩阵的低秩近似

Attention中的 ( Q Q Q ) 和 ( K K K) 来自嵌入矩阵 ( E E E ) 和权重 ( W Q , W K W_Q, W_K WQ,WK ) 的乘法:
Q K T = ( E W Q ) ( E W K ) T . QK^T = (EW_Q)(EW_K)^T. QKT=(EWQ)(EWK)T.
如果我们把 ( W Q W K T W_Q W_K^T WQWKT ) 看作一个低秩矩阵 ( A proj A_{\text{proj}} Aproj ),它可以通过嵌入 ( E E E ) 投影到李代数中:
A proj = 1 d E T A E . A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E. Aproj=d 1ETAE.
这说明Attention的计算本质上是对嵌入空间的一个李代数变换。

3.4 值矩阵的李群作用

输出 ( S ⋅ V S \cdot V SV ) 可以看作李群对值矩阵 ( V V V ) 的作用:
Output = exp ⁡ ( G t ) ⋅ ( X V ) . \text{Output} = \exp(G_t) \cdot (X V). Output=exp(Gt)(XV).
这里,( exp ⁡ ( G t ) \exp(G_t) exp(Gt) ) 扮演了全局变换的角色,将输入嵌入 ( X X X ) 通过 ( V V V ) 转换为输出。这种视角把Attention看作一种连续的数学变换,而非简单的矩阵乘法。

3.5 梯度与李代数更新

在训练中,交叉熵损失 ( L \mathcal{L} L ) 会通过梯度更新参数。研究表明,这种更新与李代数的共轭作用有关:
∂ L ∂ A ≈ E ( ∂ L ∂ S t ⊙ S t ) E T . \frac{\partial \mathcal{L}}{\partial A} \approx E \left( \frac{\partial \mathcal{L}}{\partial S_t} \odot S_t \right) E^T. ALE(StLSt)ET.
这意味着梯度流动本质上是在李代数空间中调整生成矩阵 ( A A A )。


4. 为什么这种联系重要?

用李代数解释Attention有什么意义呢?

  • 理论洞察:它揭示了Attention的数学本质,帮助我们理解为什么Transformer如此有效。
  • 优化潜力:通过李代数的结构,可能设计出更高效的注意力机制,比如低秩近似或参数共享。
  • 跨领域启发:李代数在物理和几何中有广泛应用,这种联系可能带来新的深度学习灵感。

例如,在NLP任务中,这种框架可以帮助分析注意力权重的分布;在视觉Transformer中,它可能启发新的模型设计。


5. 一个简单的代码示例

如果您对代码感兴趣,这里是一个用PyTorch近似指数映射的例子:

import torch
import torch.nn.functional as F

# 假设输入
d = 64  # 嵌入维度
seq_len = 10  # 序列长度
X = torch.randn(seq_len, d)  # 输入嵌入

# 生成一个简单的生成矩阵 G
G = torch.randn(seq_len, seq_len)
G = G - torch.diag(G.sum(dim=1))  # 确保行和为0,模拟李代数

# 近似指数映射(用Softmax模拟)
S = F.softmax(G, dim=1)  # 注意力权重

# 输出
V = torch.randn(seq_len, d)  # 值矩阵
output = S @ V  # Attention输出

print(S.sum(dim=1))  # 验证行和为1

这段代码展示了如何用Softmax模拟李代数的指数映射,生成注意力权重。


6. 总结与展望

通过这篇博客,我们看到李代数为Attention提供了一个优雅的数学框架:

  • Softmax注意力近似于李代数的指数映射。
  • 嵌入和值矩阵通过低秩近似和李群作用与李代数相连。
  • 梯度更新反映了李代数的动态调整。

这种联系不仅加深了我们对Transformer的理解,还可能为未来的研究(如高效注意力机制)铺平道路。您可以尝试探索李代数在自己研究中的应用,或者留言讨论您的想法!


参考文献

  • “Attention is All You Need” (Vaswani et al., 2017)

  • “Lie Groups and Lie Algebras” (数学入门书籍推荐)

  • https://x.com/jeroaranda/status/1894550046298784243


补充

详细解释:嵌入矩阵的低秩近似与李代数投影

2. 低秩近似:( W Q W K T W_Q W_K^T WQWKT ) 的作用

现在,我们关注 ( W Q W K T W_Q W_K^T WQWKT )。这个矩阵是两个权重矩阵的乘积,通常是一个低秩矩阵(rank-deficient),因为 ( W Q W_Q WQ ) 和 ( W K W_K WK ) 的大小是有限的(比如 ( d e × d k d_e \times d_k de×dk ),其中 ( d k d_k dk ) 可能远小于 ( d e d_e de ))。低秩意味着 ( W Q W K T W_Q W_K^T WQWKT ) 可以被分解为两个较小矩阵的乘积,这在数学上和计算上非常重要。

文中提到:
A proj = 1 d E T A E , A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E, Aproj=d 1ETAE,
这里 ( A proj A_{\text{proj}} Aproj ) 是 ( W Q W K T W_Q W_K^T WQWKT ) 的某种近似形式,( E E E ) 是嵌入矩阵,( A A A ) 是某个李代数中的矩阵。让我们逐步拆解:

  • ( W Q W K T W_Q W_K^T WQWKT ) 是一个低秩矩阵,可以看作描述查询和键之间关系的“生成器”。
  • 通过嵌入矩阵 ( E E E ),我们将这个低秩结构投影到序列的嵌入空间中,形成 ( Q K T QK^T QKT )。
  • 缩放因子 ( 1 d \frac{1}{\sqrt{d}} d 1 )(通常是 ( 1 d k \frac{1}{\sqrt{d_k}} dk 1 ))是为了稳定训练,避免 ( Q K T QK^T QKT ) 的值过大(这是Attention中常见的技巧)。

3. 投影到李代数:什么是“投影”?

“通过嵌入 ( E E E ) 投影到李代数”这句话的意思是:我们将 ( W Q W K T W_Q W_K^T WQWKT )(或其近似 ( A proj A_{\text{proj}} Aproj ))看作一个李代数中的生成矩阵 ( A A A ),然后用嵌入矩阵 ( E E E ) 将这个李代数结构映射到Attention的计算中。

李代数的简单回顾(直观理解)
李代数是一种数学结构,通常由一组矩阵组成,这些矩阵是连续变换(如旋转、平移)的“生成器”。这些矩阵满足特定条件(比如封闭性、反对称性等),并且通过指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 可以生成一个李群元素(比如随机矩阵)。在Attention的背景下,Li代数中的矩阵 ( A A A ) 类似于一个“生成器”,它的指数映射可以产生类似于Softmax权重的随机矩阵。

投影过程

  • 我们假设 ( A A A ) 是一个李代数中的矩阵(例如,具有特定结构的矩阵,如非对角元素非负、行和为零等)。
  • 通过公式 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE ),我们用嵌入矩阵 ( E E E ) 和其转置 ( E T E^T ET ) 将李代数矩阵 ( A A A ) 投影到嵌入空间,生成 ( A proj A_{\text{proj}} Aproj )。
  • 这里的 ( E T A E E^T A E ETAE ) 是一个线性变换,相当于用 ( E E E ) 的行空间和列空间“过滤”或“投影”李代数矩阵 ( A A A ),生成一个与序列数据相关的低秩矩阵 ( A proj A_{\text{proj}} Aproj )。
  • 最终,( A proj A_{\text{proj}} Aproj) 被用作 ( W Q W K T W_Q W_K^T WQWKT ) 的近似,从而影响 ( Q K T QK^T QKT ) 和注意力权重 ( S S S )。

直观理解
想象 ( A A A ) 是一个“模板”或“种子”矩阵,描述某种连续的变换(李代数的核心思想)。通过嵌入 ( E E E ),我们将这个模板“映射”到输入序列的嵌入空间中,生成一个适合Attention计算的低秩矩阵。这种映射保留了李代数的结构(如连续性和可微性),同时适配深度学习中的数据表示。


4. “Attention的计算本质上是对嵌入空间的一个李代数变换”是什么意思?

这句话的核心思想是:Attention机制的数学结构可以被理解为对嵌入空间进行的一种李代数变换,而不是单纯的线性代数操作。让我们分解这个说法:

  • 嵌入空间:嵌入矩阵 ( E E E ) 定义了一个高维空间(比如 ( R N × d e \mathbb{R}^{N \times d_e} RN×de )),其中每个序列位置的嵌入向量是这个空间中的点。Attention通过 ( Q , K , V Q, K, V Q,K,V ) 和Softmax在这些嵌入之间建立关系。
  • 李代数变换:李代数描述了连续的、平滑的变换(比如旋转、缩放)。在Attention的背景下,李代数矩阵 ( A A A ) 通过指数映射生成随机矩阵(如 ( exp ⁡ ( A ) ≈ S \exp(A) \approx S exp(A)S )),而 ( A proj A_{\text{proj}} Aproj ) 则是这个变换在嵌入空间中的投影。
  • 本质上的解释:Attention的计算(尤其是 ( Q K T QK^T QKT ) 和Softmax)可以看作是对嵌入空间进行的一种李代数变换。具体来说:
    • ( W Q W K T W_Q W_K^T WQWKT ) 或 ( A proj A_{\text{proj}} Aproj ) 扮演了李代数生成器的角色。
    • 通过 ( E E E ) 的投影,Attention将这个生成器应用到序列嵌入中,生成注意力权重 ( S S S )。
    • 最终,( S ⋅ V S \cdot V SV ) 可以看作李群(李代数的指数映射生成的对象)对值矩阵 ( V ) 的作用。

直观比喻
想象您有一组3D物体(嵌入空间中的点),并希望通过某种连续的旋转或变换(李代数变换)调整它们的位置。Attention中的 ( Q K T QK^T QKT )、Softmax和 ( V V V ) 的组合就像是对这些点进行一种“定向旋转”或“平滑变换”,而李代数提供了这种变换的数学基础。

为什么重要?

  • 这说明Attention不仅仅是简单的矩阵乘法和Softmax,它背后有一个更深层次的数学结构(李代数和李群),这可能启发新的模型设计或优化方法。
  • 例如,通过利用李代数的性质,可以设计更高效的注意力机制(如低秩近似、参数共享)或解释Attention的收敛性。

5. 一个小例子

假设我们有一个简单的嵌入矩阵 ( E ∈ R 2 × 2 E \in \mathbb{R}^{2 \times 2} ER2×2 ),一个李代数矩阵 ( A ∈ R 2 × 2 A \in \mathbb{R}^{2 \times 2} AR2×2 )(比如反对称矩阵或满足李代数条件的矩阵),以及 ( W Q , W K ∈ R 2 × 2 W_Q, W_K \in \mathbb{R}^{2 \times 2} WQ,WKR2×2 )。我们希望计算 ( Q K T QK^T QKT ) 并将其与李代数投影联系起来:

  • 给定 ( E = [ 1 0 0 1 ] E = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} E=[1001] ),( A = [ 0 1 − 1 0 ] A = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} A=[0110] )(一个简单的李代数矩阵,满足 ( A + A T = 0 A + A^T = 0 A+AT=0 ))。

  • 计算 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE )。假设 ( d = 2 d = 2 d=2 ),则:
    E T = E , A proj = 1 2 E A E = 1 2 [ 1 0 0 1 ] [ 0 1 − 1 0 ] [ 1 0 0 1 ] . E^T = E, \quad A_{\text{proj}} = \frac{1}{\sqrt{2}} E A E = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}. ET=E,Aproj=2 1EAE=2 1[1001][0110][1001].
    经过计算(矩阵乘法),我们得到一个低秩矩阵 ( A proj A_{\text{proj}} Aproj ),它近似于 ( W Q W K T W_Q W_K^T WQWKT )。

  • 然后,( Q = X W Q Q = X W_Q Q=XWQ ),( K = X W K K = X W_K K=XWK ),( Q K T ≈ A proj QK^T \approx A_{\text{proj}} QKTAproj ),最终通过Softmax生成 ( S S S ),近似于 ( exp ⁡ ( A proj ) \exp(A_{\text{proj}}) exp(Aproj) )。

这个例子简化了计算,但展示了李代数矩阵 ( A A A ) 如何通过嵌入 ( E E E ) 投影到Attention的计算中。


6. 总结
  • “通过嵌入 ( E E E ) 投影到李代数”意味着用嵌入矩阵 ( E E E ) 将李代数中的生成矩阵 ( A A A ) 映射到Attention的嵌入空间,生成 ( A proj A_{\text{proj}} Aproj ) 作为 ( W Q W K T W_Q W_K^T WQWKT ) 的低秩近似。
  • “Attention的计算本质上是对嵌入空间的一个李代数变换”表明,Attention不仅仅是矩阵运算,它可以被理解为一种连续的、平滑的变换(由李代数和李群定义),在嵌入空间中调整输入数据以生成注意力权重和输出。
    好的,我将详细解释“李代数生成矩阵 ( A A A ) 的特点(对角线外元素非负、每行和为零)如何通过指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 变成行和为1的随机矩阵”,并结合一个具体的例子来说明。由于您提到对李代数没有基础,但我熟悉Attention和Transformer,我会用直观的方式讲解,同时确保数学逻辑清晰。

解释:李代数生成矩阵与指数映射

1. 李代数生成矩阵 ( A ) 的特点

在文中提到的李代数 ( g g g ),生成矩阵 ( A A A ) 有两个关键特性:

  • 对角线外的元素是非负的:这与Attention中的权重矩阵(比如 ( Q K T QK^T QKT ) 经过Softmax后)类似,因为Softmax输出非负值。
  • 每行和为零:这意味着矩阵 ( A A A ) 的每一行元素之和为0。例如,一个2×2的矩阵 ( A = [ a b c d ] A = \begin{bmatrix} a & b \\ c & d \end{bmatrix} A=[acbd] ) 满足 ( a + b = 0 a + b = 0 a+b=0 ) 和 ( c + d = 0 c + d = 0 c+d=0 )。

为什么每行和为零?这是李代数的一个常见性质,尤其是当我们考虑与随机矩阵(行和为1)相关的李代数时。这样的矩阵通常是“反对称”或具有特定结构的矩阵(比如对角线元素为0,非对角线元素满足某些条件)。这种结构确保通过指数映射后生成一个随机矩阵(每行和为1)。

2. 指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 的作用

指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 是矩阵指数函数,定义为泰勒级数展开:
exp ⁡ ( A ) = ∑ n = 0 ∞ A n n ! , \exp(A) = \sum_{n=0}^{\infty} \frac{A^n}{n!}, exp(A)=n=0n!An,
其中 ( A n A^n An ) 是矩阵 ( A A A ) 的n次幂。这种映射将李代数中的矩阵 ( A A A )(生成器)变换为一个李群元素(比如随机矩阵)。在Attention的背景下,( exp ⁡ ( A ) \exp(A) exp(A) ) 的结果是一个行和为1的矩阵,这与Softmax的输出(注意力权重 ( S S S ))类似。

关键点

  • 如果 ( A A A ) 的每行和为0,指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 会生成一个随机矩阵(每行和为1)。
  • 这是因为李代数的结构(如反对称性或特殊约束)保证了指数映射的性质保持行和不变,但从0调整为1。
3. 为什么行和为0的矩阵通过指数映射后行和为1?

这是李代数的一个数学性质,特别在与随机矩阵相关的李代数(如SL(n, ℝ)或特定结构)中。直观来说:

  • 行和为0的矩阵 ( A A A ) 表示一种“平衡”的变换(没有净输入或输出)。
  • 指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ) 将这种平衡变换“平滑地”转换为一个概率分布(每行和为1),因为 ( exp ⁡ ( A ) \exp(A) exp(A) ) 保持了矩阵的正定性和非负性,同时通过泰勒展开调整行和。

数学直觉
对于一个简单的李代数矩阵(比如反对称矩阵或每行和为0的矩阵),指数映射会生成一个随机矩阵(stochastic matrix)。这是因为李代数的生成矩阵被设计为通过指数映射产生行和为1的矩阵,这与Softmax的归一化功能类似。


举例说明

让我们用一个简单的2×2矩阵 ( A ) 来说明这个过程。为了方便计算,我们选择一个满足李代数条件(每行和为0、部分非负)的矩阵。下面是Grok 3大模型摸索的过程,从找出一个不符合条件的A,一直找到一个符合条件的A。

例:( A = [ 0 1 − 1 0 ] A = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} A=[0110] )
  • 检查特性

    • 对角线外元素:( A 12 = 1 ≥ 0 A_{12} = 1 \geq 0 A12=10 ),( A 21 = − 1 < 0 A_{21} = -1 < 0 A21=1<0 )。虽然 ( A 21 A_{21} A21 ) 为负,但我们可以调整为一个更符合条件的矩阵(比如所有非对角元素非负,但仍保持行和为0)。让我们调整为:
      A ′ = [ − 1 1 1 − 1 ] . A' = \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix}. A=[1111].
      • 对角线外元素:( A 12 ′ = 1 ≥ 0 A'_{12} = 1 \geq 0 A12=10 ),( A 21 ′ = 1 ≥ 0 A'_{21} = 1 \geq 0 A21=10 )。
      • 每行和:第一行 ( − 1 + 1 = 0 -1 + 1 = 0 1+1=0 ),第二行 ( 1 − 1 = 0 1 - 1 = 0 11=0 )。
      • 这是一个更符合“对角线外非负、行和为0”的李代数矩阵。
  • 计算 ( exp ⁡ ( A ′ ) \exp(A') exp(A) )
    我们使用矩阵指数的泰勒展开或直接计算(对于2×2矩阵,可以用解析形式)。矩阵指数的计算公式为:
    exp ⁡ ( A ′ ) = ∑ n = 0 ∞ ( A ′ ) n n ! . \exp(A') = \sum_{n=0}^{\infty} \frac{(A')^n}{n!}. exp(A)=n=0n!(A)n.
    由于 ( A ′ A' A ) 是一个简单的矩阵,我们可以直接计算其特征值和特征向量,或者用已知公式。对于 ( A ′ = [ − 1 1 1 − 1 ] A' = \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} A=[1111] ),我们可以发现它是一个反对称矩阵,其指数映射有明确解。

    更简单地,手动计算前几项(忽略高阶项,因为矩阵指数通常收敛很快):

    • ( ( A ′ ) 0 = I = [ 1 0 0 1 ] (A')^0 = I = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} (A)0=I=[1001] )。
    • ( ( A ′ ) 1 = A ′ = [ − 1 1 1 − 1 ] (A')^1 = A' = \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} (A)1=A=[1111] )。
    • ( ( A ′ ) 2 = A ′ ⋅ A ′ = [ − 1 1 1 − 1 ] [ − 1 1 1 − 1 ] = [ ( − 1 ) ( − 1 ) + ( 1 ) ( 1 ) ( − 1 ) ( 1 ) + ( 1 ) ( − 1 ) ( 1 ) ( − 1 ) + ( − 1 ) ( 1 ) ( 1 ) ( 1 ) + ( − 1 ) ( − 1 ) ] = [ 2 0 0 2 ] = 2 I (A')^2 = A' \cdot A' = \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} = \begin{bmatrix} (-1)(-1) + (1)(1) & (-1)(1) + (1)(-1) \\ (1)(-1) + (-1)(1) & (1)(1) + (-1)(-1) \end{bmatrix} = \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix} = 2I (A)2=AA=[1111][1111]=[(1)(1)+(1)(1)(1)(1)+(1)(1)(1)(1)+(1)(1)(1)(1)+(1)(1)]=[2002]=2I )。
    • ( ( A ′ ) 3 = A ′ ⋅ ( A ′ ) 2 = A ′ ⋅ 2 I = 2 A ′ = 2 [ − 1 1 1 − 1 ] = [ − 2 2 2 − 2 ] (A')^3 = A' \cdot (A')^2 = A' \cdot 2I = 2A' = 2 \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix} = \begin{bmatrix} -2 & 2 \\ 2 & -2 \end{bmatrix} (A)3=A(A)2=A2I=2A=2[1111]=[2222] )。
    • 继续计算,注意到 ( ( A ′ ) n (A')^n (A)n ) 的模式(可以证明 ( ( A ′ ) n (A')^n (A)n ) 交替为 ( ( − 1 ) n I (-1)^n I (1)nI ) 或 ( ( − 1 ) n + 1 2 I (-1)^{n+1} 2I (1)n+12I ) 的倍数)。

    实际计算 ( exp ⁡ ( A ′ ) \exp(A') exp(A) ) 需要精确的数值方法或已知公式。对于反对称矩阵 ( A ′ A' A ),其指数映射通常为:
    exp ⁡ ( A ′ ) = I + A ′ + ( A ′ ) 2 2 ! + ( A ′ ) 3 3 ! + ⋯   . \exp(A') = I + A' + \frac{(A')^2}{2!} + \frac{(A')^3}{3!} + \cdots. exp(A)=I+A+2!(A)2+3!(A)3+.
    经过计算(或使用矩阵指数的性质),我们发现:
    exp ⁡ ( A ′ ) = [ cosh ⁡ ( 2 ) sinh ⁡ ( 2 ) sinh ⁡ ( 2 ) cosh ⁡ ( 2 ) ] , \exp(A') = \begin{bmatrix} \cosh(2) & \sinh(2) \\ \sinh(2) & \cosh(2) \end{bmatrix}, exp(A)=[cosh(2)sinh(2)sinh(2)cosh(2)],
    其中 ( cosh ⁡ ( x ) = e x + e − x 2 \cosh(x) = \frac{e^x + e^{-x}}{2} cosh(x)=2ex+ex ),( sinh ⁡ ( x ) = e x − e − x 2 \sinh(x) = \frac{e^x - e^{-x}}{2} sinh(x)=2exex )。对于 ( x = 2 x = 2 x=2 ),我们有:

    • ( cosh ⁡ ( 2 ) ≈ 3.7622 \cosh(2) \approx 3.7622 cosh(2)3.7622 ),( sinh ⁡ ( 2 ) ≈ 3.6269 \sinh(2) \approx 3.6269 sinh(2)3.6269 )。
    • 因此:
      exp ⁡ ( A ′ ) ≈ [ 3.7622 3.6269 3.6269 3.7622 ] . \exp(A') \approx \begin{bmatrix} 3.7622 & 3.6269 \\ 3.6269 & 3.7622 \end{bmatrix}. exp(A)[3.76223.62693.62693.7622].
    • 检查行和:第一行 ( 3.7622 + 3.6269 ≈ 7.3891 ≈ e 2 3.7622 + 3.6269 \approx 7.3891 \approx e^2 3.7622+3.62697.3891e2 )(由于数值近似,实际可能是 ( e 2 e^2 e2 ) 和 ( e − 2 e^{-2} e2 ) 的组合)。第二行类似。

    修正与实际应用
    在实际李代数(如与随机矩阵相关的结构),我们可能需要调整 ( A A A ) 使其更符合“对角线外非负、行和为0”的条件,并确保 ( exp ⁡ ( A ) \exp(A) exp(A) ) 是一个随机矩阵(行和为1)。一个更简单的例子是:
    A ′ ′ = [ 0 1 − 1 0 ] . A'' = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}. A′′=[0110].
    计算 ( exp ⁡ ( A ′ ′ ) \exp(A'') exp(A′′) ):(这里也不对,非对角线有负数

    • 特征值:( λ = ± i \lambda = \pm i λ=±i )(虚数)。
    • 指数映射:
      exp ⁡ ( A ′ ′ ) = [ cos ⁡ ( 1 ) sin ⁡ ( 1 ) − sin ⁡ ( 1 ) cos ⁡ ( 1 ) ] . \exp(A'') = \begin{bmatrix} \cos(1) & \sin(1) \\ -\sin(1) & \cos(1) \end{bmatrix}. exp(A′′)=[cos(1)sin(1)sin(1)cos(1)].
    • 对于 ( θ = 1 \theta = 1 θ=1 )(弧度),( cos ⁡ ( 1 ) ≈ 0.5403 \cos(1) \approx 0.5403 cos(1)0.5403 ),( sin ⁡ ( 1 ) ≈ 0.8415 \sin(1) \approx 0.8415 sin(1)0.8415 )。
    • 因此:
      exp ⁡ ( A ′ ′ ) ≈ [ 0.5403 0.8415 − 0.8415 0.5403 ] . \exp(A'') \approx \begin{bmatrix} 0.5403 & 0.8415 \\ -0.8415 & 0.5403 \end{bmatrix}. exp(A′′)[0.54030.84150.84150.5403].
    • 检查行和:第一行 ( 0.5403 + 0.8415 ≈ 1.3818 0.5403 + 0.8415 \approx 1.3818 0.5403+0.84151.3818 )(实际需要规范化)。为了生成行和为1的矩阵,我们可能需要调整 ( A’’ ) 或应用归一化。

    更符合条件的例子(调整为行和为0且生成随机矩阵):
    A ′ ′ ′ = [ − 0.5 0.5 0.5 − 0.5 ] . A''' = \begin{bmatrix} -0.5 & 0.5 \\ 0.5 & -0.5 \end{bmatrix}. A′′′=[0.50.50.50.5].

    • 每行和为0,对角线外元素非负。
    • 计算 ( exp ⁡ ( A ′ ′ ′ ) \exp(A''') exp(A′′′) ):
      exp ⁡ ( A ′ ′ ′ ) = [ e − 0.5 cosh ⁡ ( 0.5 ) e − 0.5 sinh ⁡ ( 0.5 ) e − 0.5 sinh ⁡ ( 0.5 ) e − 0.5 cosh ⁡ ( 0.5 ) ] . \exp(A''') = \begin{bmatrix} e^{-0.5} \cosh(0.5) & e^{-0.5} \sinh(0.5) \\ e^{-0.5} \sinh(0.5) & e^{-0.5} \cosh(0.5) \end{bmatrix}. exp(A′′′)=[e0.5cosh(0.5)e0.5sinh(0.5)e0.5sinh(0.5)e0.5cosh(0.5)].
    • 代入 ( e − 0.5 ≈ 0.6065 e^{-0.5} \approx 0.6065 e0.50.6065 ),( cosh ⁡ ( 0.5 ) ≈ 1.1276 \cosh(0.5) \approx 1.1276 cosh(0.5)1.1276 ),( sinh ⁡ ( 0.5 ) ≈ 0.5211 \sinh(0.5) \approx 0.5211 sinh(0.5)0.5211 ):
      exp ⁡ ( A ′ ′ ′ ) ≈ [ 0.6065 ⋅ 1.1276 0.6065 ⋅ 0.5211 0.6065 ⋅ 0.5211 0.6065 ⋅ 1.1276 ] = [ 0.6840 0.3160 0.3160 0.6840 ] . \exp(A''') \approx \begin{bmatrix} 0.6065 \cdot 1.1276 & 0.6065 \cdot 0.5211 \\ 0.6065 \cdot 0.5211 & 0.6065 \cdot 1.1276 \end{bmatrix} = \begin{bmatrix} 0.6840 & 0.3160 \\ 0.3160 & 0.6840 \end{bmatrix}. exp(A′′′)[0.60651.12760.60650.52110.60650.52110.60651.1276]=[0.68400.31600.31600.6840].
    • 检查行和:第一行 ( 0.6840 + 0.3160 = 1 0.6840 + 0.3160 = 1 0.6840+0.3160=1 ),第二行类似。
      这是一个行和为1的随机矩阵,类似Softmax的输出。

4. 总结与联系到Attention
  • 行和为0到行和为1的转换:李代数矩阵 ( A A A ) 的行和为0,通过指数映射 ( exp ⁡ ( A ) \exp(A) exp(A) ),利用矩阵指数的性质(尤其是反对称或特定结构的矩阵),生成一个行和为1的随机矩阵。这是因为指数映射保持了李代数的连续性和平滑性,同时调整了矩阵的行和,使其符合概率分布的要求。
  • 与Attention的联系:Attention中的 ( S = softmax ( Q K T ) S = \text{softmax}(QK^T) S=softmax(QKT) ) 是一个行和为1的权重矩阵,类似 ( exp ⁡ ( A ) \exp(A) exp(A) )。这里的 ( Q K T QK^T QKT ) 可以看作李代数中的生成矩阵 ( A A A ),Softmax近似于指数映射,生成注意力权重。

直观理解
想象 ( A A A ) 是一个“平衡的种子矩阵”(行和为0),通过指数映射“生长”成一个概率分布(行和为1),就像Attention通过Softmax将相似性得分(可能为负或零和)转换为非负权重。

将详细解释如何推导 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE ) 的公式,以及它如何将 ( W Q W K T W_Q W_K^T WQWKT ) 看作一个低秩矩阵,并通过嵌入矩阵 ( E E E ) 投影到李代数中。


推导 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE ) 的背景

1. Attention中的 ( Q K T QK^T QKT )

在Transformer的注意力机制中,查询 ( Q Q Q ) 和键 ( K K K ) 通过以下方式生成:
Q = X W Q , K = X W K , Q = X W_Q, \quad K = X W_K, Q=XWQ,K=XWK,
其中:

  • ( X ∈ R N × d e X \in \mathbb{R}^{N \times d_e} XRN×de ) 是输入序列的嵌入表示(通常 ( X = E ⋅ t X = E \cdot t X=Et ),但这里直接用 ( X X X ) 表示嵌入矩阵)。
  • ( W Q , W K ∈ R d e × d k W_Q, W_K \in \mathbb{R}^{d_e \times d_k} WQ,WKRde×dk ) 是查询和键的权重矩阵,( d e d_e de ) 是嵌入维度,( d k d_k dk ) 是键/查询的维度。
  • ( N N N ) 是序列长度。

然后,计算注意力得分:
Q K T = ( X W Q ) ( X W K ) T = X W Q W K T X T . QK^T = (X W_Q)(X W_K)^T = X W_Q W_K^T X^T. QKT=(XWQ)(XWK)T=XWQWKTXT.
这里 ( Q K T ∈ R N × N QK^T \in \mathbb{R}^{N \times N} QKTRN×N ) 是一个矩阵,表示序列中每个位置对其他位置的相似性。最终,注意力权重通过Softmax归一化:
S = softmax ( Q K T d k ) . S = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right). S=softmax(dk QKT).
缩放因子 ( 1 d k \frac{1}{\sqrt{d_k}} dk 1 )(文中简化为 ( 1 d \frac{1}{\sqrt{d}} d 1 ))是为了稳定训练,避免 ( Q K T QK^T QKT ) 的值过大(因为 ( Q Q Q ) 和 ( K K K ) 的内积可能导致方差过高)。


2. ( W Q W K T W_Q W_K^T WQWKT ) 作为低秩矩阵

现在,我们关注 ( W Q W K T W_Q W_K^T WQWKT )。这个矩阵是两个权重矩阵的乘积:
W Q W K T ∈ R d e × d e . W_Q W_K^T \in \mathbb{R}^{d_e \times d_e}. WQWKTRde×de.
由于 ( W Q W_Q WQ ) 和 ( W K W_K WK ) 通常是低秩矩阵(它们的列数 ( d k d_k dk ) 可能远小于行数 ( d e d_e de )),因此 ( W Q W K T W_Q W_K^T WQWKT ) 是一个低秩矩阵(rank 通常不超过 ( min ⁡ ( d e , d k ) \min(d_e, d_k) min(de,dk) ))。低秩性意味着 ( W_Q W_K^T ) 可以被分解为两个较小矩阵的乘积,这在数学和计算上非常重要。

在“Attention as Lie Group Action”的框架中,作者提出可以将 ( W Q W K T W_Q W_K^T WQWKT ) 看作一个“低秩近似” ( A proj A_{\text{proj}} Aproj ),并将其与李代数联系起来。也就是说,( W Q W K T W_Q W_K^T WQWKT ) 可以被近似为一个李代数中的生成矩阵,通过嵌入 ( E E E ) 投影到序列空间。


3. 投影到李代数:引入 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE )

为了将 ( W Q W K T W_Q W_K^T WQWKT ) 解释为李代数中的结构,作者引入了一个低秩矩阵 ( A proj A_{\text{proj}} Aproj ),通过嵌入矩阵 ( E E E ) 和一个李代数矩阵 ( A A A ) 投影生成:
A proj = 1 d E T A E . A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E. Aproj=d 1ETAE.
这里:

  • ( E ∈ R N × d e E \in \mathbb{R}^{N \times d_e} ERN×de ) 是嵌入矩阵(通常与 ( X X X ) 相同或相关)。
  • ( A ∈ R d e × d e A \in \mathbb{R}^{d_e \times d_e} ARde×de ) 是一个李代数中的生成矩阵,满足李代数的特定条件(如反对称性或每行和为零,见3.1节的讨论)。
  • ( d d d )(文中简化为 ( d d d ),实际应是 ( d k d_k dk ))是嵌入或键的维度,用于缩放。

让我们逐步推导这个公式的合理性,并解释其意义。


推导过程

步骤 1:理解 ( Q K T QK^T QKT ) 的结构

从 ( Q K T = X W Q W K T X T QK^T = X W_Q W_K^T X^T QKT=XWQWKTXT ) 开始,我们注意到:

  • ( X X X ) 是嵌入表示,通常由 ( E E E )(嵌入矩阵)加上位置编码生成。
  • ( W Q W K T W_Q W_K^T WQWKT ) 是一个固定矩阵,描述查询和键之间的关系。

为了将这个结构与李代数联系起来,我们需要将 ( W Q W K T W_Q W_K^T WQWKT ) 看作一个低秩近似,并将其投影到李代数空间。假设 ( W Q W K T ≈ A proj W_Q W_K^T \approx A_{\text{proj}} WQWKTAproj ),我们需要一个方式将 ( A proj A_{\text{proj}} Aproj ) 与嵌入 ( E E E ) 联系起来。

步骤 2:引入李代数矩阵 ( A A A )

李代数矩阵 ( A A A ) 是一个 ( d e × d e d_e \times d_e de×de ) 的矩阵,满足李代数的条件(例如反对称性或特定约束,见3.1节)。我们希望通过 ( E E E ) 将 ( A A A ) 投影到序列空间(( N × N N \times N N×N )),生成 ( Q K T QK^T QKT ) 的近似。

步骤 3:投影公式 ( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE )

为了实现这个投影,我们使用嵌入矩阵 ( E E E ) 的线性变换:

  • ( E T A E E^T A E ETAE ) 将李代数矩阵 ( A A A )(定义在嵌入空间 ( R d e \mathbb{R}^{d_e} Rde ) 上)投影到序列空间 ( R N \mathbb{R}^{N} RN )。
  • ( E T ∈ R d e × N E^T \in \mathbb{R}^{d_e \times N} ETRde×N ) 和 ( E ∈ R N × d e E \in \mathbb{R}^{N \times d_e} ERN×de ) 一起作用,生成一个 ( N × N N \times N N×N) 的矩阵。
  • 具体来说:
    E T A E ∈ R N × N , E^T A E \in \mathbb{R}^{N \times N}, ETAERN×N,
    它是 ( A A A ) 在序列嵌入空间中的投影。

然而,直接使用 ( E T A E E^T A E ETAE ) 可能导致矩阵元素过大或不稳定(类似 ( Q K T QK^T QKT ) 的问题)。因此,引入缩放因子 ( 1 d \frac{1}{\sqrt{d}} d 1 )(通常是 ( 1 d k \frac{1}{\sqrt{d_k}} dk 1 )),以确保数值稳定性和与Attention的缩放一致:
A proj = 1 d E T A E . A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E. Aproj=d 1ETAE.
这个公式确保 ( A proj A_{\text{proj}} Aproj ) 是一个低秩矩阵,且其规模与 ( Q K T QK^T QKT ) 相匹配。

步骤 4:与 ( W Q W K T W_Q W_K^T WQWKT ) 的联系

我们假设 ( W Q W K T ≈ A proj W_Q W_K^T \approx A_{\text{proj}} WQWKTAproj ),即:
W Q W K T ≈ 1 d E T A E . W_Q W_K^T \approx \frac{1}{\sqrt{d}} E^T A E. WQWKTd 1ETAE.
然后,代入 ( Q K T QK^T QKT ):
Q K T = X W Q W K T X T ≈ X ( 1 d E T A E ) X T . QK^T = X W_Q W_K^T X^T \approx X \left( \frac{1}{\sqrt{d}} E^T A E \right) X^T. QKT=XWQWKTXTX(d 1ETAE)XT.
如果 ( X ≈ E X \approx E XE )(忽略位置编码或假设位置编码不影响主要结构),则:
Q K T ≈ E ( 1 d E T A E ) E T = 1 d E ( E T A E ) E T . QK^T \approx E \left( \frac{1}{\sqrt{d}} E^T A E \right) E^T = \frac{1}{\sqrt{d}} E (E^T A E) E^T. QKTE(d 1ETAE)ET=d 1E(ETAE)ET.
这个表达式表明,( Q K T QK^T QKT ) 可以看作对李代数矩阵 ( A A A ) 的一个投影和变换,生成注意力得分。


为什么这样推导合理?

  1. 低秩性
    ( W Q W K T W_Q W_K^T WQWKT ) 是一个低秩矩阵(rank ≤ ( d k d_k dk )),而 ( E T A E E^T A E ETAE ) 也通常是低秩的,因为 ( A A A ) 是李代数中的矩阵,( E E E ) 是嵌入矩阵。这与Attention的低秩假设一致。

  2. 李代数结构
    李代数矩阵 ( A A A ) 满足特定的数学条件(如反对称性或行和为零),通过指数映射可以生成随机矩阵(见3.1节)。( A proj A_{\text{proj}} Aproj ) 作为 ( W Q W K T W_Q W_K^T WQWKT ) 的近似,保持了李代数的结构,并通过 ( E E E ) 投影到序列空间。

  3. 缩放因子 ( 1 d \frac{1}{\sqrt{d}} d 1 )
    这个缩放与Attention中 ( Q K T d k \frac{QK^T}{\sqrt{d_k}} dk QKT ) 的缩放一致,确保数值稳定性并与Softmax的输入分布匹配。

  4. 投影到李代数
    通过 ( E T A E E^T A E ETAE ),我们将李代数中的连续变换(由 ( A A A ) 定义)映射到嵌入空间,形成Attention的计算基础。这解释了为什么Attention可以被看作一个李代数变换。


一个简单例子

假设:

  • ( N = 2 N = 2 N=2 )(序列长度),( d e = 2 d_e = 2 de=2 )(嵌入维度),( d k = 2 d_k = 2 dk=2 )(键/查询维度)。
  • 嵌入矩阵 ( E = [ 1 0 0 1 ] E = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} E=[1001] )(单位矩阵,简化计算)。
  • 李代数矩阵 ( A = [ 0 1 − 1 0 ] A = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} A=[0110] )(一个简单的反对称矩阵)。
  • ( d = 2 d = 2 d=2 )(缩放因子)。

计算 ( A proj A_{\text{proj}} Aproj ):
E T = E = [ 1 0 0 1 ] , E^T = E = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}, ET=E=[1001],
E T A E = [ 1 0 0 1 ] [ 0 1 − 1 0 ] [ 1 0 0 1 ] = [ 0 1 − 1 0 ] . E^T A E = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}. ETAE=[1001][0110][1001]=[0110].
A proj = 1 2 [ 0 1 − 1 0 ] = [ 0 1 2 − 1 2 0 ] . A_{\text{proj}} = \frac{1}{\sqrt{2}} \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & 0 \end{bmatrix}. Aproj=2 1[0110]=[02 12 10].
这个 ( A proj A_{\text{proj}} Aproj ) 是一个低秩矩阵,近似于 ( W Q W K T W_Q W_K^T WQWKT )。然后:
Q K T ≈ X A proj X T , QK^T \approx X A_{\text{proj}} X^T, QKTXAprojXT,
其中 ( X ≈ E X \approx E XE )。这表明 ( Q K T QK^T QKT ) 通过李代数矩阵 ( A A A ) 的投影生成。


总结

  • 推导过程:( A proj = 1 d E T A E A_{\text{proj}} = \frac{1}{\sqrt{d}} E^T A E Aproj=d 1ETAE ) 基于以下逻辑:
    1. ( W Q W K T W_Q W_K^T WQWKT ) 是一个低秩矩阵,近似为李代数矩阵 ( A A A ) 的投影。
    2. 通过嵌入矩阵 ( E E E ) 和其转置 ( E T E^T ET ),将 ( A A A ) 投影到序列空间,生成 ( A proj A_{\text{proj}} Aproj )。
    3. 缩放因子 ( 1 d \frac{1}{\sqrt{d}} d 1 ) 确保数值稳定性和与Attention的缩放一致。
  • 意义:这个公式将Attention的计算与李代数联系起来,表明 ( Q K T QK^T QKT ) 可以看作对嵌入空间的一个李代数变换,解释了Attention的数学结构。

由于篇幅限制,后续解释请移步笔者的另一篇博客:李代数(Lie Algebras)与Attention:部分二 (提供解释)

后记

2025年2月27日14点51分于上海,在Grok 3大模型辅助下完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV给图像添加噪声

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 如果你已经有了一张干净的图像&#xff0c;并希望通过编程方式向其添加噪声&#xff0c;可以使用 OpenCV 来实现这一点。以下是一个简单的例子&a…

vscode下载安装教程(附安装包)vscode图文安装教程最新版

文章目录 一、vscode下载二、vscod安装教程1.启动vscode安装程序&#xff1a;2.应对提示&#xff1a;3.接受协议&#xff1a;4.更改vscode安装路径&#xff1a;5.推进安装vscode&#xff1a;6.创建vscode快捷方式&#xff1a;7.开始安装vscode&#xff1a;8.完成vscode安装&…

深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练

目录 论文概述1.论文摘要2.论文脑图3.论文创新3.1模型构建3.2训练方法3.3数据构建3.4部署优化 4.模型架构 论文解析1. 引言2. 方法2.1数据说明2.2预训练方法2.2.1模型初始化方法2.2.2两阶段预训练方法 2.3预训练细节2.3.1模型初始化2.3.2第一阶段预训练2.3.3第二阶段预训练2.3.…

【开源】低代码 C++程序框架,Linux多线程程序

大家好&#xff0c;欢迎来到停止重构的频道。 本期介绍我们新的C低代码框架&#xff1a;Bees&#xff0c;用于编写Linux/Unix的多线程程序。 低代码框架一般是不会对C程序下手的&#xff0c;因为C程序一般是比较复杂的程序&#xff0c;光是多线程同步就够头疼的了。 但是我们…

重新审视 ChatGPT 和 Elasticsearch:第 2 部分 - UI 保持不变

作者&#xff1a;来自 Elastic Jeff Vestal 本博客在第 1 部分的基础上进行了扩展&#xff0c;介绍了基于 RAG 的搜索系统的功能齐全的 Web UI。最后&#xff0c;你将拥有一个将检索、搜索和生成过程结合在一起的工作界面&#xff0c;同时使事情易于调整和探索。 不想读完整个内…

点云 PCL 滤波在自动驾驶的用途。

1.直通滤波 2.体素滤波、 2.1 分类&#xff1a;VoxelGrid&#xff08;求体素的重心又称质心点&#xff09;和ApproximateVoxelGrid&#xff08;求体素的中心点&#xff09;两种体素滤波器&#xff0c; 2.2 衍生&#xff1a;此外衍生了改进体素滤波&#xff08;求距离重心最近…

人工智能 pytorch篇

pytorch是一个深度学习框架&#xff0c;他封装了张量&#xff08;Tensor&#xff09;&#xff0c;Pytorch中的张量就是元素为同一种数据类型的多维矩阵。在Pytorch中&#xff0c;张量以类的形式封装起来&#xff0c;对张量的一些运算、处理的方法被封装在类中。 pytorch的安装…

Cherno 游戏引擎笔记(91~111)

好久不见&#xff01; 个人库的地址&#xff1a;&#xff08;GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno&#xff09;&#xff0c;可以看到我及时更新的结果。 -------------------------------Saving & Loading scene-----------------------…

DeepSeek行业应用实践报告-智灵动力【112页PPT全】

DeepSeek&#xff08;深度搜索&#xff09;近期引发广泛关注并成为众多企业/开发者争相接入的现象&#xff0c;主要源于其在技术突破、市场需求适配性及生态建设等方面的综合优势。以下是关键原因分析&#xff1a; 一、技术核心优势 开源与低成本 DeepSeek基于开源架构&#xf…

项目8:信用违约预测-集成学习

目录 背景说明 项目介绍 导入模块 数据加载 分析与处理数据 划分数据集 使用随机森林创建并训练模型 通过参数搜索和过采样&#xff0c;缓解标签不平衡问题 小结 背景说明 风险已经成为了今年金融市场的重要主题之一&#xff0c;银行作为贷方&#xff0c;随时都面临着借贷者违约…

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求&#xff0c;最近自己实践了一部分&#xff0c;部分信息是通过各渠道收集整理&#xff0c;so 仅供参考。 言归正转&#xff0c;大家都知道&#xff0c;DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…

Redis分布式锁故障处理:当Redis不可用时的应对策略

Redis分布式锁故障处理&#xff1a;当Redis不可用时的应对策略 在分布式系统中&#xff0c;Redis因其高性能和丰富的特性常被用于实现分布式锁。但当加锁过程中Redis服务不可用时&#xff0c;系统将面临严重挑战。本文将深入探讨这一问题&#xff0c;并提供多维度解决方案。 目…

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术&#xff0c;目的是在不修改业务代码的情况下&#xff0c;实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改&#xff0c;将监控代码注入到…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法&#xff1a;ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法&#xff1a;reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

计算机毕业设计SpringBoot+Vue.js视频网站系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

LVS+Keepalived 高可用集群搭建

一、高可用集群&#xff1a; 1.什么是高可用集群&#xff1a; 高可用集群&#xff08;High Availability Cluster&#xff09;是以减少服务中断时间为目地的服务器集群技术它通过保护用户的业务程序对外不间断提供的服务&#xff0c;把因软件、硬件、人为造成的故障对业务的影响…

macos下myslq图形化工具之Sequel Ace

什么是Sequel Ace 官方github&#xff1a;https://github.com/Sequel-Ace/Sequel-Ace Sequel Ace 是一款快速、易于使用的 Mac 数据库管理应用程序&#xff0c;用于处理 MySQL 和 MariaDB 数据库。 Sequel Ace 是一款开源项目&#xff0c;采用 MIT 许可证。用户可以通过 Ope…

lvgl运行机制分析

lv_timer_handler() 是 LVGL 的“心脏”&#xff1a;这个函数会依次做以下事情&#xff1a; 处理定时器&#xff08;如动画、延迟回调&#xff09;。 读取输入设备&#xff08;如触摸屏、按键的状态&#xff09;。 刷新脏区域&#xff08;仅重绘屏幕上发生变化的区域&#xf…

C++ | 高级教程 | 文件和流

&#x1f47b; 概念 文件流输出使用标准库 fstream&#xff0c;定义三个新的数据类型&#xff1a; 数据类型描述ofstream输出文件流&#xff0c;用于创建文件并向文件写入信息。ifstream输入文件流&#xff0c;用于从文件读取信息。fstream文件流&#xff0c;且同时具有 ofst…

Linux:Shell环境变量与命令行参数

目录 Shell的变量功能 什么是变量 变数的可变性与方便性 影响bash环境操作的变量 脚本程序设计&#xff08;shell script&#xff09;的好帮手 变量的使用&#xff1a;echo 变量的使用&#xff1a;HOME 环境变量相关命令 获取环境变量 环境变量和本地变量 命令行…