首页
关于
Search
1
微服务
35 阅读
2
同步本地Markdown至Typecho站点
29 阅读
3
JavaWeb——后端
20 阅读
4
苍穹外卖
14 阅读
5
智能协同云图库
14 阅读
后端学习
项目
杂项
科研
论文
默认分类
登录
热门文章
35 ℃
微服务
后端学习
3月21日
0
35
0
29 ℃
同步本地Markdown至Typecho站点
项目
3月22日
0
29
0
20 ℃
JavaWeb——后端
后端学习
3月21日
0
20
0
最新发布
2025-03-21
交替方向乘子法(ADMM)
交替方向乘子法(ADMM) Alternating Direction Method of Multipliers (ADMM) 是一种用于求解大规模优化问题的高效算法,结合了拉格朗日乘子法和分裂方法的优点。 基本概念 优化问题分解 ADMM 的核心思想是将复杂优化问题分解为多个较简单的子问题,通过引入辅助变量将原问题转化为约束优化问题,使子问题独立求解。 拉格朗日乘子 利用拉格朗日乘子处理约束条件,构造增强拉格朗日函数,确保子问题求解时同时考虑原问题的约束信息。 交替更新 通过交替更新子问题的解和拉格朗日乘子,逐步逼近原问题的最优解。 算法流程 问题分解 将原问题分解为两个子问题。假设原问题表示为: $\min_{x, z} f(x) + g(z) \quad \text{s.t.} \quad Ax + Bz = c$ 其中 $f$ 和 $g$ 是凸函数,$A$ 和 $B$ 为给定矩阵。 构造增强拉格朗日函数 引入拉格朗日乘子 $y$,构造增强拉格朗日函数: $L_\rho(x, z, y) = f(x) + g(z) + y^T(Ax+Bz-c) + \frac{\rho}{2}|Ax+Bz-c|^2$ 其中 $\rho > 0$ 控制惩罚项的权重。 交替更新 更新 $x$:固定 $z$ 和 $y$,求解 $\arg\min_x L_\rho(x, z, y)$。 更新 $z$:固定 $x$ 和 $y$,求解 $\arg\min_z L_\rho(x, z, y)$。 更新乘子 $y$:按梯度上升方式更新: $y := y + \rho(Ax + Bz - c)$ 迭代求解 重复上述步骤,直到原始残差和对偶残差满足收敛条件(如 $|Ax+Bz-c| < \epsilon$)。 例子 下面给出一个简单的数值例子,展示 ADMM 在求解分解问题时的迭代过程。我们构造如下问题: $$ \begin{aligned} \min_{x, z}\quad & (x-1)^2 + (z-2)^2 \\ \text{s.t.}\quad & x - z = 0. \end{aligned} $$ 注意:由于约束要求 $x=z$,实际问题等价于 $$ \min_ (x-1)^2 + (x-2)^2, $$ 其解析最优解为: $$ 2(x-1)+2(x-2)=4x-6=0\quad\Rightarrow\quad x=1.5, $$ 因此我们希望得到 $x=z=1.5$。 构造 ADMM 框架 将问题写成 ADMM 标准形式: 令 $$ f(x)=(x-1)^2,\quad g(z)=(z-2)^2, $$ 约束写为 $$ x-z=0, $$ 即令 $A=1$、$B=-1$、$c=0$。 增强拉格朗日函数为 $$ L_\rho(x,z,y)=(x-1)^2+(z-2)^2+y(x-z)+\frac{\rho}{2}(x-z)^2, $$ 其中 $y$ 是拉格朗日乘子,$\rho>0$ 是惩罚参数。为简单起见,我们选取 $\rho=1$。 ADMM 的更新公式 针对本问题可以推导出三个更新步骤: 更新 $x$: 固定 $z$ 和 $y$,求解 $$ x^{k+1} = \arg\min_x; (x-1)^2 + y^k(x-z^k)+\frac{1}{2}(x-z^k)^2. $$ 对 $x$ 求导并令其为零: $$ 2(x-1) + y^k + (x-z^k)=0 \quad\Rightarrow\quad (2+1)x = 2 + z^k - y^k, $$ 得到更新公式: $$ x^{k+1} = \frac{2+z^k-y^k}{3}. $$ 更新 $z$: 固定 $x$ 和 $y$,求解 $$ z^{k+1} = \arg\min_z; (z-2)^2 - y^kz+\frac{1}{2}(x^{k+1}-z)^2. $$ 注意:由于 $y(x-z)$ 中关于 $z$ 的部分为 $-y^kz$(常数项 $y^kx$ 可忽略),求导得: $$ 2(z-2) - y^k - (x^{k+1}-z)=0 \quad\Rightarrow\quad (2+1)z = 4 + y^k + x^{k+1}, $$ 得到更新公式: $$ z^{k+1} = \frac{4+y^k+x^{k+1}}{3}. $$ 更新 $y$: 按梯度上升更新乘子: $$ y^{k+1} = y^k + \rho,(x^{k+1}-z^{k+1}). $$ 这里 $\rho=1$,所以 $$ y^{k+1} = y^k + \bigl(x^{k+1}-z^{k+1}\bigr). $$ 数值迭代示例 第 1 次迭代: 更新 $x$: $$ x^1 = \frac{2+z^0-y^0}{3}=\frac{2+0-0}{3}=\frac{2}{3}\approx0.667. $$ 更新 $z$: $$ z^1 = \frac{4+y^0+x^1}{3}=\frac{4+0+0.667}{3}\approx\frac{4.667}{3}\approx1.556. $$ 更新 $y$: $$ y^1 = y^0+(x^1-z^1)=0+(0.667-1.556)\approx-0.889. $$ 第 2 次迭代: 更新 $x$: $$ x^2 = \frac{2+z^1-y^1}{3}=\frac{2+1.556-(-0.889)}{3}=\frac{2+1.556+0.889}{3}\approx\frac{4.445}{3}\approx1.4817. $$ 更新 $z$: $$ z^2 = \frac{4+y^1+x^2}{3}=\frac{4+(-0.889)+1.4817}{3}=\frac{4-0.889+1.4817}{3}\approx\frac{4.5927}{3}\approx1.5309. $$ 更新 $y$: $$ y^2 = y^1+(x^2-z^2)\approx -0.889+(1.4817-1.5309)\approx -0.889-0.0492\approx -0.938. $$ 第 3 次迭代: 更新 $x$: $$ x^3 = \frac{2+z^2-y^2}{3}=\frac{2+1.5309-(-0.938)}{3}=\frac{2+1.5309+0.938}{3}\approx\frac{4.4689}{3}\approx1.4896. $$ 更新 $z$: $$ z^3 = \frac{4+y^2+x^3}{3}=\frac{4+(-0.938)+1.4896}{3}\approx\frac{4.5516}{3}\approx1.5172. $$ 更新 $y$: $$ y^3 = y^2+(x^3-z^3)\approx -0.938+(1.4896-1.5172)\approx -0.938-0.0276\approx -0.9656. $$ 从迭代过程可以看出: $x$ 和 $z$ 的值在不断调整,目标是使两者相等,从而满足约束。 最终随着迭代次数增加,$x$ 和 $z$ 会收敛到约 1.5,同时乘子 $y$ 收敛到 $-1$(这与 KKT 条件相符)。 应用领域 大规模优化 在大数据、机器学习中利用并行计算加速求解。 信号与图像处理 用于去噪、压缩感知等稀疏表示问题。 分布式计算 在多节点协同场景下求解大规模问题。 优点与局限性 优点 局限性 分布式计算能力 小规模问题可能收敛较慢 支持稀疏性和正则化 参数 $\rho$ 需精细调节 收敛性稳定 —
科研
zy123
3月21日
0
4
0
2025-03-21
李雅普诺夫稳定性
李雅普诺夫方法 判断系统是否能够在受到扰动后返回平衡状态或维持在稳定状态。 数学基础 雅各比矩阵定义 雅可比矩阵(Jacobian matrix)是一个重要的数学概念,它在向量值函数的微分方面起着关键作用。雅可比矩阵描述了一个向量值函数的局部线性近似。 理解:从n维实向量空间到m维实向量空间的函数f,假设输入为2维,用x,y表示,即二维平面上的一个点;输出为3维,每个点的位置由坐标f1(x,y),f2(x,y),f3(x,y)表示。 求解雅各比矩阵: 状态空间 稳定性的定义 李雅普诺夫第一法(间接方法) 通过分析线性系统的系数矩阵的特征值来判断系统的稳定性 雅各比矩阵使我们能够将非线性系统在平衡点附近的行为近似为线性系统。通过这种局部线性化,我们可以应用线性系统理论来研究非线性系统的稳定性。 特征值的实部决定了系统在这些点附近是趋向平衡点还是远离平衡点。 所有特征值的实部都小于零意味着系统是渐进稳定的; 任何特征值的实部大于零意味着系统在该点是不稳定的。 如果所有特征值的实部都不大于零,并且存在实部正好为零的特征值,李一法失效。 why特征值??? 可以以对角矩阵为例,特征值为对角线上元素,设平衡点x1=0,x2=0; 基变换:将一个向量左乘特征向量矩阵V实际上是在将这个向量从原始坐标系转换到以A的特征向量为基的新坐标系。在新的坐标系中,原始向量的坐标表示由特征向量矩阵V 决定。 原始坐标系:y1、y2, 新坐标系:x1、x2 eg: 希尔维斯特判据 李雅普诺夫第二法(直接法) 关键是构造一个李雅普诺夫函数V(x) eg: 当使用李雅普诺夫的第二方法分析系统稳定性时,直接找到一个合适的李雅普诺夫函数可能很困难。 线性定常连续系统 $$ \dot = Ax $$ A为系统的状态矩阵,应用李雅普诺夫方程可构造李雅普诺夫函数。 eg: 非线性系统 $$ \dot = f(x) $$ 克拉索夫斯基算法 eg:
科研
zy123
3月21日
0
3
0
2025-03-21
草稿
定理2 多智能体随机网络矩阵奇异值信号系统具有线性特征。 证明 根据定理1,奇异值序列$\sigma_{\tilde{\kappa}}(A_t)$服从高斯分布$\mathcal{N}(m_{\tilde{\kappa}}, 2\sigma_{\tilde{\kappa}}^2)$,其协方差结构满足: $$ \gamma_{\tilde{\kappa}}(h) = 2\sigma_{\tilde{\kappa}}^2\delta_h^0 $$ 定义中心化变量: $$ \tilde{\sigma}_t = \sigma_{\tilde{\kappa}}(A_t) - m_{\tilde{\kappa}} $$ 可表示为: $$ \tilde{\sigma}_t = \sqrt{2}\sigma_{\tilde{\kappa}}\varepsilon_t, \quad \varepsilon_t \overset{i.i.d.}{\sim} \mathcal{N}(0,1) $$ 线性系统验证 该系统为MA(0)过程,系统增益$h_0 = \sqrt{2}\sigma_{\tilde{\kappa}}$,满足: 齐次性: $$a\tilde{\sigma}_t = h_0(a\varepsilon_t)$$ 叠加性: $$\tilde{\sigma}_t^{(1)} + \tilde{\sigma}_t^{(2)} = h_0(\varepsilon_t^{(1)} + \varepsilon_t^{(2)})$$ 结论 奇异值序列的完整表示: $$ \sigma_{\tilde{\kappa}}(A_t) = m_{\tilde{\kappa}} + h_0\varepsilon_t $$ 其中: - $m_{\tilde{\kappa}}$为稳态偏置项 - $h_0\varepsilon_t$为线性系统响应 根据线性系统定义(需引用文献),同时满足齐次性与可加性即构成线性系统,故得证。 ② 定理2修订(线性系统特征) 原MA(0)情形回顾 当$\gamma_k(h)=2\sigma_k^2\delta_h$时, $$ \tilde{\sigma}_t=\sigma_k(A_t)-m_k=\sqrt{2}\sigma_k\varepsilon_t, \quad \varepsilon_t \overset{i.i.d.}{\sim} \mathcal{N}(0,1) $$ 新协方差结构下的表示 当$\gamma_k(h)=C_h$(允许$C_h\neq0$),根据Wiener-Kolmogorov表示定理: $$ \tilde{\sigma}_t=\sum_{h=-\infty}^{+\infty} b_h w_{t-h} \tag{1} $$ 其中$\{b_h\}\in\ell^2$满足: $$ \gamma_k(h)=\sum_{\ell=-\infty}^{+\infty} b_\ell b_{\ell+h} \tag{2} $$ 线性系统验证 设系统传递函数$H(z)=\sum_h b_h z^{-h}$: 齐次性 $$ a\tilde{\sigma}t=a\sum_h b_h w{t-h}=\sum_h b_h (a w_{t-h})=H(z){a w_t} $$ 叠加性 $$ \tilde{\sigma}t^{(1)}+\tilde{\sigma}t^{(2)}=\sum_h b_h(w{t-h}^{(1)}+w{t-h}^{(2)})=H(z){w_t^{(1)}+w_t^{(2)}} $$ 故${\sigma_k(A_t)}$仍是LTI系统输出,但系统响应${b_h}$需通过(2)式确定。 性质对比 性质 $\gamma_k(h)=2\sigma_k^2\delta_h$ $\gamma_k(h)=C_h$ 宽平稳 ✅ ✅ 白噪声 ✅ ❌ 系统类型 MA(0) 通用LTI(可能MA($\infty$)) 谱密度 $S(f)=2\sigma_k^2$ $S(f)=\sum_h C_h e^{-j2\pi f h}$ 随机网络稳态奇异值的平稳性证明 1. 稳态奇异值分布特性 当随机网络进入稳态后,其矩阵序列${A_t}$的任意奇异值$\sigma_k(A_t)$服从高斯分布: $$ \sigma_k(A_t) \sim \mathcal{N}(m_k, \gamma_k(0)) $$ 其中参数满足: 均值:$m_k = (N-1)\mu_k + v_k + \frac{\sigma_k^2}{\mu_k}$ ($N$为网络规模,$\mu_k,v_k,\sigma_k$为网络参数) 方差:$\gamma_k(0) = 2\sigma_k^2$ 2. 宽平稳性验证 对任意时刻$t$: 均值稳定性: $$ \mathbb{E}[\sigma_k(A_t)] = m_k \quad \text{(常数)} $$ 协方差结构: 当$h=0$时: $$ \text{Cov}(\sigma_k(A_t), \sigma_k(A_t)) = \gamma_k(0) $$ 当$h \neq 0$时: $$ \text{Cov}(\sigma_k(A_t), \sigma_k(A_{t+h})) = \gamma_k(h)=0 $$ (由稳态下矩阵的独立性保证) 3. 结论 自协方差函数$\gamma_k(h)$仅依赖于时滞$h$,因此奇异值信号序列${\sigma_k(A_t)}$满足宽平稳过程的定义。 注:本证明基于以下假设: 网络规模$N$足够大,使得高斯逼近有效 稳态下矩阵序列${A_t}$具有独立性 定理2 多智能体随机网络矩阵奇异值信号系统具有线性特征。 证明 根据定理1,奇异值序列$\sigma_{\tilde{\kappa}}(A_t)$服从高斯分布$\mathcal{N}(m_{\tilde{\kappa}}, 2\sigma_{\tilde{\kappa}}^2)$,其协方差结构满足: $$ \gamma_{\tilde{\kappa}}(h) = 2\sigma_{\tilde{\kappa}}^2\delta_h^0 $$ 定义中心化变量: $$ \tilde{\sigma}_t = \sigma_{\tilde{\kappa}}(A_t) - m_{\tilde{\kappa}} $$ 可表示为: $$ \tilde{\sigma}_t = \sqrt{2}\sigma_{\tilde{\kappa}}\varepsilon_t, \quad \varepsilon_t \overset{i.i.d.}{\sim} \mathcal{N}(0,1) $$ 线性系统验证 该系统为MA(0)过程,系统增益$h_0 = \sqrt{2}\sigma_{\tilde{\kappa}}$,满足: 齐次性: $$a\tilde{\sigma}_t = h_0(a\varepsilon_t)$$ 叠加性: $$\tilde{\sigma}_t^{(1)} + \tilde{\sigma}_t^{(2)} = h_0(\varepsilon_t^{(1)} + \varepsilon_t^{(2)})$$ 结论 奇异值序列的完整表示: $$ \sigma_{\tilde{\kappa}}(A_t) = m_{\tilde{\kappa}} + h_0\varepsilon_t $$ 其中: - $m_{\tilde{\kappa}}$为稳态偏置项 - $h_0\varepsilon_t$为线性系统响应 根据线性系统定义(需引用文献),同时满足齐次性与可加性即构成线性系统,故得证。 ……由协方差结构 γ_k(h)=2σ_k^2δ_h^0 可知,中心化变量 $$ \tilde σ_t = σ_k(A_t)-m_k,\qquad \mathbb E[\tilde σ_t]=0,\; \mathrm{Cov}(\tilde σ_t,\tilde σ_{t+h})= 2σ_k^{2}\delta_h^{0}. $$ 根据 Wold 分解定理①,任何零均值、纯非确定性的宽平稳过程都可以唯一表示为 $$ \tilde σ_t=\sum_{j=0}^{\infty}ψ_j\;ε_{t-j}, \qquad ε_t\stackrel{i.i.d.}{\sim}\mathcal N(0,1),\ \sum_{j=0}^{\infty}|ψ_j|^2
科研
zy123
3月21日
0
4
0
2025-03-21
卡尔曼滤波
卡尔曼滤波 卡尔曼滤波(Kalman Filter)是一种用于线性动态系统状态估计的递归最优滤波算法,它在噪声环境下对系统状态进行估计,并常用于目标跟踪、导航和控制等领域。 卡尔曼滤波假设系统可以用状态空间模型描述,模型包括两个部分: 状态转移模型:描述系统状态如何从上一时刻转移到当前时刻。 测量模型:描述通过传感器获得的测量值与系统状态之间的关系。 这两个模型中均包含随机噪声,分别记为过程噪声和测量噪声。卡尔曼滤波的目标就是在已知这些噪声统计特性的前提下,利用当前和过去的测量值来对系统状态进行最优估计。 引入 公式 状态转移模型 设系统的状态向量为 $\mathbf _k$,控制输入为 $\mathbf{u}_k$,过程噪声为 $\mathbf{w}_k$(假设均值为0,协方差矩阵为 $\mathbf{Q}$,维度和状态向量一致),状态转移模型可写为: $$ \mathbf _k = \mathbf{A} \mathbf _{k-1} + \mathbf{B} \mathbf{u}_{k-1} + \mathbf{w}_{k-1} $$ 其中: $\mathbf{A}$ 是状态转移矩阵, $\mathbf{B}$ 是控制输入矩阵。 测量模型 设测量向量为 $\mathbf{z}_k$,测量噪声为 $\mathbf{v}_k$(假设均值为0,协方差矩阵为 $\mathbf{R}$),测量模型为: $$ \mathbf{z}_k = \mathbf{H} \mathbf _k + \mathbf{v}_k $$ 其中: $\mathbf{H}$ 是测量矩阵。 这里是真实状态、真实测量、过程噪声、测量噪声。在卡尔曼滤波的预测和更新阶段中,只需在每个时刻把新测得的 $z_k$ (再加上可用的控制输入 $u_{k-1}$)喂进去,滤波器就会自动递推状态估计。 递归过程 卡尔曼滤波的递归过程主要分为两大步:预测(Prediction) 和 更新(Update)。 注意:$\hat{\mathbf }_k^-$右上角的'-'符号是区分预测状态和更新后的状态。 预测步骤 状态预测: 利用系统的状态转移模型,将上一次的状态估计 $\hat{\mathbf }{k-1}$ 通过转移矩阵 $\mathbf{A}$(和控制输入 $\mathbf{B} \mathbf{u}{k-1}$)预测到当前时刻的状态: $$ \hat{\mathbf }k^- = \mathbf{A} \hat{\mathbf }{k-1} + \mathbf{B} \mathbf{u}_{k-1} $$ 这里 $\hat{\mathbf }_k^-$ 称为先验状态估计,它反映了系统在没有新测量数据情况下的预期状态。 协方差预测: 同时,将上一次状态的不确定性(协方差矩阵 $\mathbf{P}_{k-1}$)传播到当前时刻,并加上过程噪声 $\mathbf{Q}$ 的影响: $$ \mathbf{P}k^- = \mathbf{A} \mathbf{P}{k-1} \mathbf{A}^\mathrm{T} + \mathbf{Q} $$ 这个预测协方差反映了预测状态的置信程度,不确定性通常会因过程噪声的加入而增大。 更新步骤 当时刻 $k$ 新的测量值 $\mathbf{z}_k$ 到达时,我们使用它来校正预测结果。 卡尔曼增益的计算: 卡尔曼增益 $\mathbf{K}_k$ 衡量了预测的不确定性与测量不确定性之间的权衡。计算公式为: $$ \mathbf{K}_k = \mathbf{P}_k^- \mathbf{H}^\mathrm{T} \left(\mathbf{H} \mathbf{P}_k^- \mathbf{H}^\mathrm{T} + \mathbf{R}\right)^{-1} $$ 当预测的置信度较低($\mathbf{P}_k^-$较大)时,卡尔曼增益较大,说明更多地信任测量值;反之,则更多地依赖预测值。 状态更新: 根据卡尔曼增益修正先验状态,将测量的偏差信息(即测量值与预测值之间的差异,也叫创新)加权融合: $$ \hat{\mathbf }_k = \hat{\mathbf }_k^- + \mathbf{K}_k \left(\mathbf{z}_k - \mathbf{H} \hat{\mathbf }_k^- \right) $$ 这个更新后的状态 $\hat{\mathbf }_k$ 就是当前时刻的后验状态估计,它综合了预测和测量两方面的信息。 协方差更新: 更新后的协方差表示在新的测量信息下的不确定性: $$ \mathbf{P}_k = (\mathbf{I} - \mathbf{K}_k \mathbf{H}) \mathbf{P}_k^- $$ 一般来说,经过更新后,状态的不确定性会降低(即协方差矩阵的数值减小)。 疑问: 状态转移模型:为什么包含噪声? 状态转移模型描述的是系统状态的真实动态行为,它是一个理论模型,表示状态如何从 $\mathbf _{k-1}$ 演化到 $\mathbf k$。由于现实系统存在不确定性(如建模误差、外部扰动等),这些无法精确建模的部分被抽象为**过程噪声 $\mathbf{w}{k-1}$**。因此,模型写作: $$ \mathbf _k = \mathbf{A} \mathbf _{k-1} + \mathbf{B} \mathbf{u}_{k-1} + \mathbf{w}_{k-1} $$ 状态预测:为什么不带噪声? 在卡尔曼滤波的预测步骤中,我们计算的是状态的期望值(即最优估计),而非真实状态本身。由于噪声 $\mathbf{w}_{k-1}$ 的均值为零,它在预测时的期望贡献为零: $$ \mathbb{E}[\mathbf _k] = \mathbf{A} \mathbb{E}[\mathbf _{k-1}] + \mathbf{B} \mathbf{u}_{k-1} + \mathbb{E}[\mathbf{w}_{k-1}] = \mathbf{A} \hat{\mathbf }_{k-1} + \mathbf{B} \mathbf{u}_{k-1} $$ 协方差预测:噪声的体现 虽然噪声的均值在状态预测中被忽略,但其随机性会导致不确定性累积。因此,协方差预测公式中显式加入了 $\mathbf{Q}$: $$ \mathbf{P}_k^- = \mathbf{A} \mathbf{P}_{k-1} \mathbf{A}^\mathrm{T} + \mathbf{Q} $$ 扩展卡尔曼滤波 扩展卡尔曼滤波(Extended Kalman Filter,简称 EKF)是一种针对非线性系统状态估计问题的滤波方法。传统的卡尔曼滤波要求系统的状态转移和观测模型都是线性的,而在实际问题中,很多系统往往存在非线性特性。 EKF 的核心思想就是对非线性模型进行局部线性化,然后在线性化后的模型上直接套用标准卡尔曼滤波(KF)的预测和更新公式。 非线性系统模型 假设系统的状态转移和观测模型为非线性的: 状态转移模型: $$ \mathbf k = f(\mathbf {k-1}, \mathbf{u}{k-1}) + \mathbf{w}{k-1} $$ 观测模型: $$ \mathbf{z}_k = h(\mathbf _k) + \mathbf{v}k $$ 其中,$f(\cdot)$ 和 $h(\cdot)$ 为非线性函数,$\mathbf{w}{k-1}$ 和 $\mathbf{v}_k$ 分别表示过程噪声和测量噪声(均假设为零均值高斯噪声)。 线性化 为了使用卡尔曼滤波方法,扩展卡尔曼滤波需要对非线性函数进行局部线性化。具体做法是使用泰勒展开在当前状态估计附近进行一阶近似,计算函数的雅可比矩阵: 状态转移函数 $f$ 的雅可比矩阵: $$ F_k = \left.\frac{\partial f}{\partial \mathbf }\right|{\mathbf =\hat{\mathbf }{k-1}, \mathbf{u}=\mathbf{u}_{k-1}} $$ 观测函数 $h$ 的雅可比矩阵: $$ H_k = \left.\frac{\partial h}{\partial \mathbf }\right|_{\mathbf =\hat{\mathbf }_k^-} $$ 滤波过程 扩展卡尔曼滤波的递归过程与标准卡尔曼滤波类似,但在每一步都需要用雅可比矩阵替换原来的线性模型矩阵: 预测步骤: 状态预测: $$ \hat{\mathbf }k^- = f(\hat{\mathbf }{k-1}, \mathbf{u}_{k-1}) $$ 协方差预测: $$ \mathbf{P}k^- = F_k \mathbf{P}{k-1} F_k^\mathrm{T} + \mathbf{Q} $$ 这里 $F_k$ 是在 $\hat{\mathbf }_{k-1}$ 处计算得到的雅可比矩阵。 更新步骤: 计算卡尔曼增益: $$ \mathbf{K}_k = \mathbf{P}_k^- H_k^\mathrm{T} \left(H_k \mathbf{P}_k^- H_k^\mathrm{T} + \mathbf{R}\right)^{-1} $$ 状态更新: $$ \hat{\mathbf }_k = \hat{\mathbf }_k^- + \mathbf{K}_k \left(\mathbf{z}_k - h(\hat{\mathbf }_k^-)\right) $$ 协方差更新: $$ \mathbf{P}_k = (\mathbf{I} - \mathbf{K}_k H_k) \mathbf{P}_k^- $$ 通过这样的线性化步骤,EKF 能够对非线性系统进行状态估计,虽然由于线性化近似可能带来一定误差,但在大多数情况下能达到较好的效果。 雅各比矩阵定义 雅可比矩阵(Jacobian Matrix)是一个多变量函数各个分量对各个变量的偏导数组成的矩阵。它反映了在某一点处函数的局部线性化近似,也就是该函数在这一点的“导数”信息。在扩展卡尔曼滤波中,为了对非线性状态转移函数 $f(\mathbf , \mathbf{u})$ 或观测函数 $h(\mathbf )$ 进行线性化,我们需要计算它们在当前估计点的雅可比矩阵。 示例 1:状态转移函数的雅可比矩阵 假设系统的状态为 $\mathbf = \begin{bmatrix} x_1 \ x_2 \end{bmatrix}$(例如,$x_1$ 表示位置,$x_2$ 表示速度),状态转移函数定义为: $$ f(\mathbf ) = \begin{bmatrix} f_1(x_1, x_2) \\ f_2(x_1, x_2) \end{bmatrix} = \begin{bmatrix} x_1 + x_2 + 0.1 x_1^2 \\ x_2 + 0.05 x_1 \end{bmatrix} $$ 这里函数中的非线性项为 $0.1 x_1^2$ 和 $0.05 x_1$。 求雅可比矩阵 雅可比矩阵 $F$ 是一个 $2 \times 2$ 矩阵,其中每个元素为: $$ F_{ij} = \frac{\partial f_i}{\partial x_j} $$ 计算各个偏导数: 对 $f_1(x_1, x_2) = x_1 + x_2 + 0.1 x_1^2$: $\frac{\partial f_1}{\partial x_1} = 1 + 0.2x_1$ $\frac{\partial f_1}{\partial x_2} = 1$ 对 $f_2(x_1, x_2) = x_2 + 0.05 x_1$: $\frac{\partial f_2}{\partial x_1} = 0.05$ $\frac{\partial f_2}{\partial x_2} = 1$ 因此,雅可比矩阵为: $$ F = \begin{bmatrix} 1 + 0.2x_1 & 1 \\ 0.05 & 1 \end{bmatrix} $$ 示例 2:观测函数的雅可比矩阵 假设观测函数为: $$ h(\mathbf ) = \begin{bmatrix} h_1(x_1, x_2) \\ h_2(x_1, x_2) \end{bmatrix} = \begin{bmatrix} \sqrt{x_1} \\ x_2 \end{bmatrix} $$ 这里假设传感器对位置进行非线性测量(取平方根),而速度直接测量。 求雅可比矩阵 计算各个偏导数: 对 $h_1(x_1, x_2) = \sqrt{x_1}$: $\frac{\partial h_1}{\partial x_1} = \frac{1}{2\sqrt{x_1}}$ $\frac{\partial h_1}{\partial x_2} = 0$(因为 $h_1$ 与 $x_2$ 无关) 对 $h_2(x_1, x_2) = x_2$: $\frac{\partial h_2}{\partial x_1} = 0$ $\frac{\partial h_2}{\partial x_2} = 1$ 因此,雅可比矩阵为: $$ H = \begin{bmatrix} \frac{1}{2\sqrt{x_1}} & 0 \\ 0 & 1 \end{bmatrix} $$ 无迹卡尔曼(UKF) UKF 具体步骤(分步解析) 符号 含义 维度 $ \mathbf $ 系统状态向量 $ n \times 1 $ $ P $ 状态协方差矩阵 $ n \times n $ $ \mathbf{z} $ 观测向量 $ m \times 1 $ $ f(\cdot) $ 非线性状态转移函数 - $ h(\cdot) $ 非线性观测函数 - $ Q $ 过程噪声协方差 $ n \times n $ $ R $ 观测噪声协方差 $ m \times m $ $ \mathcal{X} $ Sigma点集合 $ n \times (2n+1) $ $ W^{(m)} $ 均值权重 $ 1 \times (2n+1) $ $ W^{(c)} $ 协方差权重 $ 1 \times (2n+1) $ $ \alpha, \beta, \kappa $ UKF调参参数(控制Sigma点分布) 标量 建模: $$x_k = f(x_{k-1}) + w_k$$ $$y_k = h\left(x_k\right) + v_k$$ Step 1: 生成Sigma点(确定性采样) 目的:根据当前状态均值和协方差,生成一组代表状态分布的采样点。 公式: $$ \begin{aligned} \mathcal{X}_0 &= \hat{\mathbf }_{k-1|k-1} \\ \mathcal{X}_i &= \hat{\mathbf }_{k-1|k-1} + \left( \sqrt{(n+\lambda) P_{k-1|k-1}} \right)_i \quad (i=1,\dots,n) \\ \mathcal{X}_{i+n} &= \hat{\mathbf }_{k-1|k-1} - \left( \sqrt{(n+\lambda) P_{k-1|k-1}} \right)_i \quad (i=1,\dots,n) \end{aligned} $$ **符号说明**: $ \sqrt{(n+\lambda) P} $:协方差矩阵的平方根(如Cholesky分解)。 $ \left( \sqrt{(n+\lambda) P} \right)_i $ 表示平方根矩阵的第 $ i $ 列。 $ \lambda = \alpha^2 (n + \kappa) - n $:缩放因子($ \alpha $控制分布范围,通常取1e-3;$ \kappa $通常取0)。 为什么是 $ 2n+1 $ 个点?1个中心点 + $ 2n $个对称点,覆盖状态空间的主要方向。 示例: 假设状态 $ \mathbf = [x, y]^T $,$ n = 2 $,$ P = \begin{bmatrix} 4 & 0 \ 0 & 1 \end{bmatrix} $,$ \lambda = 0 $: 计算平方根矩阵(Cholesky分解): $$ \sqrt{(n+\lambda) P} = \sqrt{2} \cdot \begin{bmatrix} 2 & 0 \ 0 & 1 \end{bmatrix} = \begin{bmatrix} 2.828 & 0 \ 0 & 1.414 \end{bmatrix} $$ 生成 Sigma 点: $$ \begin{aligned} \mathcal{X}_0 &= \hat{\mathbf } \ \mathcal{X}_1 &= \hat{\mathbf } + [2.828, 0]^T = [\hat + 2.828, \hat{y}] \ \mathcal{X}_2 &= \hat{\mathbf } + [0, 1.414]^T = [\hat , \hat{y} + 1.414] \ \mathcal{X}_3 &= \hat{\mathbf } - [2.828, 0]^T = [\hat - 2.828, \hat{y}] \ \mathcal{X}_4 &= \hat{\mathbf } - [0, 1.414]^T = [\hat , \hat{y} - 1.414] \ \end{aligned} $$ Step 2: 计算Sigma点权重 目的:为每个Sigma点分配权重,用于后续计算均值和协方差。 公式: $$ \begin{aligned} W_0^{(m)} &= \frac{\lambda}{n + \lambda} \quad &\text{(中心点均值权重)} \\ W_0^{(c)} &= \frac{\lambda}{n + \lambda} + (1 - \alpha^2 + \beta) \quad &\text{(中心点协方差权重)} \\ W_i^{(m)} = W_i^{(c)} &= \frac{1}{2(n + \lambda)} \quad (i=1,\dots,2n) \quad &\text{(对称点权重)} \end{aligned} $$ **符号说明**: $ \beta $:高阶矩调节参数(高斯分布时取2最优)。 权重作用:中心点通常权重较大,对称点权重均等。 Step 3: 预测步骤(时间更新) 目的:将Sigma点通过非线性状态方程传播,计算预测状态和协方差。 子步骤: 传播Sigma点: $$ \mathcal{X}{i,k|k-1}^* = f(\mathcal{X}{i,k-1}, \mathbf{u}_{k-1}), \quad i=0,1,...,2n $$ (每个Sigma点独立通过 $ f(\cdot) $ 计算) 计算预测均值和协方差: $$ \hat{\mathbf }{k|k-1} = \sum{i=0}^{2n} W_i^{(m)} \mathcal{X}_{i,k|k-1}^* $$ $$ P_{k|k-1} = \sum_{i=0}^{2n} W_i^{(c)} \left( \mathcal{X}{i,k|k-1}^* - \hat{\mathbf }{k|k-1} \right) \left( \mathcal{X}{i,k|k-1}^* - \hat{\mathbf }{k|k-1} \right)^T + Q_k $$ 符号说明: $\mathcal{X}_{k-1}$:上一时刻生成的Sigma点集合($2n+1$个点) $\mathcal{X}_{k|k-1}^*$:通过状态方程传播后的Sigma点集合 $ Q_k $:过程噪声(表示模型不确定性)。 Step 4: 观测更新(测量更新) 目的:将预测的Sigma点通过观测方程传播,计算卡尔曼增益并更新状态。 子步骤: 生成观测Sigma点: $$ \mathcal{Z}{i,k|k-1} = h(\mathcal{X}{i,k|k-1}^*), \quad i=0,...,2n $$ 计算观测预测统计量: $$ \hat{\mathbf{z}}{k|k-1} = \sum{i=0}^{2n} W_i^{(m)} \mathcal{Z}_{i,k|k-1} $$ $$ P_{z_k z_k} = \sum_{i=0}^{2n} W_i^{(c)} \left( \mathcal{Z}{i,k|k-1} - \hat{\mathbf{z}}{k|k-1} \right) \left( \mathcal{Z}{i,k|k-1} - \hat{\mathbf{z}}{k|k-1} \right)^T + R_k $$ $$ P_{x_k z_k} = \sum_{i=0}^{2n} W_i^{(c)} \left( \mathcal{X}{i,k|k-1}^* - \hat{\mathbf }{k|k-1} \right) \left( \mathcal{Z}{i,k|k-1} - \hat{\mathbf{z}}{k|k-1} \right)^T $$ 符号说明: $ P_{z_k z_k} $:观测自协方差(含噪声 $ R_k $)。 $ P_{x_k z_k} $:状态-观测互协方差。 计算卡尔曼增益和更新状态: $$ K_k = P_{x_k z_k} P_{z_k z_k}^{-1} $$ $$ \hat{\mathbf }{k|k} = \hat{\mathbf }{k|k-1} + K_k (\mathbf{z}k - \hat{\mathbf{z}}{k|k-1}) $$ $$ P_{k|k} = P_{k|k-1} - K_k P_{z_k z_k} K_k^T $$
科研
zy123
3月21日
0
2
0
2025-03-21
图神经网络
图神经网络 图表示学习的本质是把节点映射成低维连续稠密的向量。这些向量通常被称为 嵌入(Embedding),它们能够捕捉节点在图中的结构信息和属性信息,从而用于下游任务(如节点分类、链接预测、图分类等)。 低维:将高维的原始数据(如邻接矩阵或节点特征)压缩为低维向量,减少计算和存储开销。 连续:将离散的节点或图结构映射为连续的向量空间,便于数学运算和捕捉相似性。 稠密:将稀疏的原始数据转换为稠密的向量,每个维度都包含有意义的信息。 对图数据进行深度学习的“朴素做法” 把图的邻接矩阵和节点特征“直接拼接”成固定维度的输入,然后将其送入一个深度神经网络(全连接层)进行学习。 这种做法面临重大问题,导致其并不可行: $O(|V|^2)$ 参数量 ,参数量庞大 无法适应不同大小的图 ,需要固定输入维度 对节点顺序敏感 ,节点编号顺序一变,输入就完全变样,但其实图的拓扑并没变(仅节点编号/排列方式不同)。 A —— B | | D —— C 矩阵 1(顺序 $[A,B,C,D]$): $$ M_1 = \begin{pmatrix} 0 & 1 & 0 & 1\ 1 & 0 & 1 & 0\ 0 & 1 & 0 & 1\ 1 & 0 & 1 & 0 \end{pmatrix}. $$ 矩阵 2(顺序 $[C,A,D,B]$): $$ M_2 = \begin{pmatrix} 0 & 0 & 1 & 1 \ 0 & 0 & 1 & 1 \ 1 & 1 & 0 & 0 \ 1 & 1 & 0 & 0 \end{pmatrix}. $$ 两个矩阵完全不同,但它们对应的图是相同的(只不过节点的顺序改了)。 计算图 在图神经网络里,通常每个节点$v$ 都有一个局部计算图,用来表示该节点在聚合信息时所需的所有邻居(及邻居的邻居……)的依赖关系。 直观理解 以节点 $v$ 为根; 1-hop 邻居在第一层,2-hop 邻居在第二层…… 逐层展开直到一定深度(例如 k 层)。 这样形成一棵“邻域树”或“展开图”,其中每个节点都需要从其子节点(邻居)获取特征进行聚合。 例子 在图神经网络中,每一层的计算通常包括以下步骤: 聚合(Aggregation):将邻居节点的特征聚合起来(如求和、均值、最大值等)。 变换(Transformation):将聚合后的特征通过一个神经网络(如 MLP)进行非线性变换。 A | B / \ C D 假设每个节点的特征是一个二维向量: 节点 $ A $ 的特征:$ h_A = [1.0, 0.5] $ 节点 $ B $ 的特征:$ h_B = [0.8, 1.2] $ 节点 $ C $ 的特征:$ h_C = [0.3, 0.7] $ 节点 $ D $ 的特征:$ h_D = [1.5, 0.9] $ 第 1 层更新:$A^{(0)} \to A^{(1)}$ 节点 $A$ 的 1-hop 邻居:只有 $B$。 聚合(示例:自+邻居取平均): $$ z_A^{(1)} = \frac{A^{(0)} + B^{(0)}}{2} = \frac{[1.0,,0.5] + [0.8,,1.2]}{2} = \frac{[1.8,,1.7]}{2} = [0.9,,0.85]. $$ MLP 变换:用一个MLP映射 $z_A^{(1)}$ 到 2 维输出: $$ A^{(1)} ;=; \mathrm{MLP_1}\bigl(z_A^{(1)}\bigr). $$ (数值略,可想象 $\mathrm{MLP}([0.9,0.85]) \approx [1.0,0.6]$ 之类。) 结果:$A^{(1)}$ 包含了 A 的初始特征 + B 的初始特征信息。 第 2 层更新:$A^{(1)} \to A^{(2)}$ 为了让 A 获得 2-hop 范围($C, D$)的信息,需要先让 $B$ 在第 1 层就吸收了 $C, D$ 的特征,从而 $B^{(1)}$ 蕴含 $C, D$ 信息。然后 A 在第 2 层再从 $B^{(1)}$ 聚合。 节点 B 在第 1 层(简要说明) 邻居:${A,C,D}$ 聚合:$z_B^{(1)} = \frac{B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}}{4} = \frac{[0.8,,1.2] + [1.0,,0.5] + [0.3,,0.7] + [1.5,,0.9]}{4} = \frac{[3.6,,3.3]}{4} = [0.9,,0.825].$ MLP 变换:$B^{(1)} = \mathrm{MLP}\bigl(z_B^{(1)}\bigr)$。 此时 $B^{(1)}$ 已经包含了 $C, D$ 的信息。 节点 $A$ 的第 2 层聚合 邻居:$B$,但此时要用 $B^{(1)}$(它已吸收 C、D) 聚合: $$ z_A^{(2)} = A^{(1)} + B^{(1)}. $$ MLP 变换: $$ A^{(2)} = \mathrm{MLP_2}\bigl(z_A^{(2)}\bigr). $$ 结果:$A^{(2)}$ 就包含了 2-hop 范围的信息,因为 $B^{(1)}$ 中有 $C, D$ 的贡献。 GNN 的层数就是节点聚合邻居信息的迭代次数(也是计算图的层数)。 同一层里,所有节点共享一组参数(同一个 MLP 或全连接神经网络) 矩阵运算 符号波浪号用于表示经过自环增强的矩阵。 $\tilde D^{-1},\tilde A,\tilde D^{-1}H$ $H'=\tilde D^{-1},\tilde A,H$ A | B / \ C D 1.构造矩阵 含自环邻接矩阵 $\tilde A=A+I$ $$ \tilde A = \begin{bmatrix} 1 & 1 & 0 & 0\\ 1 & 1 & 1 & 1\\ 0 & 1 & 1 & 0\\ 0 & 1 & 0 & 1 \end{bmatrix} $$ 度矩阵 $\tilde D$(对角=自身+邻居数量) $$ \tilde D = \mathrm{diag}(2,\,4,\,2,\,2) $$ 特征矩阵 $H$(每行为一个节点的特征向量) $$ H = \begin{bmatrix} 1.0 & 0.5\\ 0.8 & 1.2\\ 0.3 & 0.7\\ 1.5 & 0.9 \end{bmatrix} $$ **2.计算** 求和: $\tilde A,H$ $$ \tilde A H = \begin{bmatrix} 1.8 & 1.7\\ 3.6 & 3.3\\ 1.1 & 1.9\\ 2.3 & 2.1 \end{bmatrix} $$ 平均: $\tilde D^{-1}(\tilde A H)$ $$ \tilde D^{-1}\tilde A H = \begin{bmatrix} 0.90 & 0.85\\ 0.90 & 0.825\\ 0.55 & 0.95\\ 1.15 & 1.05 \end{bmatrix} $$ GCN 在 GCN 里,归一化(normalization)的核心目的就是 平衡不同节点在信息传播(message‑passing)中的影响力,避免「高连通度节点(high‑degree nodes)」主导了所有邻居的特征聚合。 $H' = \tilde D^{-1},\tilde A,\tilde D^{-1}H$ 对节点 $i$ 来说: $$ H'_i = \frac1{d_i}\sum_{j\in \mathcal N(i)}\frac1{d_j}\,H_j $$ 先用源节点 $j$ 的度 $d_j$ 缩小它的特征贡献,再用目标节点 $i$ 的度 $d_i$ 归一化总和。 GCN中实际的公式: $$ H^{(l+1)} = \sigma\Big(\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}H^{(l)}W^{(l)}\Big) $$ 其中: $H^{(l)}$ 是第 $l$ 层的输入特征(对第 $0$ 层来说就是节点的初始特征), $W^{(l)}$ 是第 $l$ 层的可训练权重矩阵,相当于一个简单的线性变换(类似于 MLP 中的全连接层), $\sigma(\cdot)$ 是非线性激活函数(例如 ReLU), $\tilde{A}$ 是包含自连接的邻接矩阵, $\tilde{D}$ 是 $\tilde{A}$ 的度矩阵。 $\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}$的优势 1.对称归一化:$\tilde D^{-\frac{1}{2}},\tilde A,\tilde D^{-\frac{1}{2}}$ 是一个对称矩阵,这意味着信息在节点之间的传播是双向一致的。这种对称性特别适合无向图,因为无向图的邻接矩阵 $\tilde A$ 本身就是对称的。 2.适度抑制高连通度节点:对称平方根归一化通过 $\tilde D^{-\frac{1}{2}}$ 对源节点和目标节点同时进行归一化,能够适度抑制高连通度节点的特征贡献,而不会过度削弱其影响力。 3.谱半径控制:对称平方根归一化后的传播矩阵 $\tilde D^{-\frac{1}{2}},\tilde A,\tilde D^{-\frac{1}{2}}$ 的谱半径(最大特征值)被控制在 $[0, 1]$ 范围内,这有助于保证模型的数值稳定性。 4.归一化拉普拉斯矩阵:对称平方根归一化的传播矩阵 $\tilde D^{-\frac{1}{2}},\tilde A,\tilde D^{-\frac{1}{2}}$ 与归一化拉普拉斯矩阵 $L = I - \tilde D^{-\frac{1}{2}},\tilde A,\tilde D^{-\frac{1}{2}}$ 有直接联系。归一化拉普拉斯矩阵在图信号处理中具有重要的理论意义,能够更好地描述图的频谱特性。 GraphSAGE优化 $$ h_v^{(k+1)} = \sigma \Big( \mathbf{W}_{\text{self}}^{(k)} \cdot h_v^{(k)} \;+\; \mathbf{W}_{\text{neigh}}^{(k)} \cdot \mathrm{MEAN}_{u\in N(v)}\bigl(h_u^{(k)}\bigr) \Big), $$ GAT 以下例子只汇聚了一阶邻居信息! 图注意力网络(GAT)中最核心的运算:图注意力层。它的基本思想是: 线性变换:先对每个节点的特征 $\mathbf{h}_i$ 乘上一个可学习的权重矩阵 $W$,得到变换后的特征 $W \mathbf{h}_i$。 自注意力机制:通过一个可学习的函数 $a$,对节点 $i$ 和其邻居节点 $j$ 的特征进行计算,得到注意力系数 $e_{ij}$。这里会对邻居进行遮蔽(masked attention),即只计算图中有边连接的节点对。 归一化:将注意力系数 $e_{ij}$ 通过 softmax 进行归一化,得到 $\alpha_{ij}$,表示节点 $j$ 对节点 $i$ 的重要性权重。 聚合:最后利用注意力系数加权邻居节点的特征向量,并经过激活函数得到新的节点表示 $\mathbf{h}_i'$。 多头注意力:为增强表示能力,可并行地执行多个独立的注意力头(multi-head attention),再将它们的结果进行拼接(或在最后一层进行平均),从而得到最终的节点表示。 输入: 节点特征矩阵(Node Features) 形状:[num_nodes, num_features] 每个节点的初始特征向量,例如社交网络中用户的属性或分子图中原子的特征。 图的边结构(Edge Index) 形状:**[2, num_edges](稀疏邻接表格式)**或稠密邻接矩阵 [num_nodes, num_nodes](最好是将邻接矩阵转为邻接表) 定义图中节点的连接关系(有向/无向边)。 预训练的GAT模型参数 包括注意力层的权重矩阵、注意力机制参数等(通过model.load_state_dict()加载) 线性变换(特征投影) 目的:将原始特征映射到更高维/更有表达力的空间。 操作:对每个节点的特征向量 $\mathbf{h}_i$ 左乘可学习权重矩阵 $W$(维度为 $d' \times d$,$d$ 是输入特征维度,$d'$ 是输出维度): $$ \mathbf{z}_i = W \mathbf{h}_i, \quad \mathbf{z}_j = W \mathbf{h}_j $$ 自注意力系数计算(关键步骤) 目标:计算节点 $i$ 和邻居 $j$ 之间的未归一化注意力得分 $e_{ij}$。 实现方式: 步骤1:将两个节点的投影特征 $\mathbf{z}_i$ 和 $\mathbf{z}_j$ 拼接($|$),得到一个联合表示。 步骤2:通过一个可学习的参数向量 $\mathbf{a}$(维度 $2d'$)和激活函数(如LeakyReLU)计算得分: $$ e_{ij} = \text{LeakyReLU}\Bigl(\mathbf{a}^\top [\mathbf{z}_i | \mathbf{z}_j]\Bigr) $$ 直观理解:$\mathbf{a}$ 像一个"问题",询问两个节点的联合特征有多匹配。 公式拆分: 拼接:$[\mathbf{z}_i | \mathbf{z}_j]$(长度 $2d'$) 点积:$\mathbf{a}^\top [\mathbf{z}_i | \mathbf{z}_j]$(标量) 非线性激活:LeakyReLU(引入稀疏性,避免负值被完全抑制) 归一化注意力权重 目的:让注意力系数在邻居间具有可比性(总和为1)。 方法:对 $e_{ij}$ 应用 softmax,仅对节点 $i$ 的邻居 $\mathcal{N}i$ 归一化: $$ \alpha{ij} = \text{softmax}j(e{ij}) = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}i} \exp(e{ik})} $$ 关键点:分母只包含节点 $i$ 的直接邻居(包括自己,如果图含自环)。 注意力系数计算示例(带数值模拟) 假设: 输入特征 $\mathbf{h}_i = [1.0, 2.0]$, $\mathbf{h}_j = [0.5, 1.5]$(维度 $d=2$) 权重矩阵 $W = \begin{bmatrix}0.1 & 0.2 \ 0.3 & 0.4\end{bmatrix}$($d'=2$) 参数向量 $\mathbf{a} = [0.5, -0.1, 0.3, 0.2]$(长度 $2d'=4$) 计算步骤: 线性变换: $$ \mathbf{z}_i = W \mathbf{h}_i = [0.1 \times 1.0 + 0.2 \times 2.0,\ 0.3 \times 1.0 + 0.4 \times 2.0] = [0.5, 1.1] $$ $$ \mathbf{z}_j = W \mathbf{h}_j = [0.1 \times 0.5 + 0.2 \times 1.5,\ 0.3 \times 0.5 + 0.4 \times 1.5] = [0.35, 0.75] $$ 拼接特征: $$ [\mathbf{z}_i | \mathbf{z}_j] = [0.5, 1.1, 0.35, 0.75]\ [\mathbf{z}_i | \mathbf{z}_i] = [0.5, 1.1, 0.5, 1.1] $$ 计算未归一化得分: $$ e_{ij} = \text{LeakyReLU}(0.5 \times 0.5 + (-0.1) \times 1.1 + 0.3 \times 0.35 + 0.2 \times 0.75) = \text{LeakyReLU}(0.25 - 0.11 + 0.105 + 0.15) = \text{LeakyReLU}(0.395) = 0.395 $$ $$ e_{ii} = \text{LeakyReLU}(0.5 \times 0.5 + (-0.1) \times 1.1 + 0.3 \times 0.5 + 0.2 \times 1.1)=0.51 $$ (假设LeakyReLU斜率为0.2,正输入不变) 归一化(假设邻居只有 $j$ 和自身 $i$): $$ \alpha_{ij} = \frac{\exp(0.395)}{\exp(0.395) + \exp(0.51)}\approx 0.529 $$ 特征聚合 单头注意力聚合(得到新的节点特征) $$ \mathbf{h}_i' = \sigma\Bigl(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \,W \mathbf{h}_j\Bigr)=\sigma\left(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \mathbf{z}_j\right) $$ 对$i$ 的邻居节点加权求和,再经过非线性激活函数得到新的特征表示 多头注意力(隐藏层时拼接) 每个头都有自己的一组可学习参数,并独立计算注意力系数和输出特征。以捕捉邻居节点的多种不同关系或特征。 如果有 $K$ 个独立的注意力头,每个头输出 $\mathbf{h}_i'^{(k)}$,则拼接后的输出为: $$ \begin{align*} \mathbf{h}_i' = \Bigg\Vert_{\substack{k=1 \\ ~}}^{K} \mathbf{h}_i^{(k)} \end{align*} $$ 其中,$\big\Vert$ 表示向量拼接操作,$\alpha_{ij}^{(k)}$、$W^{(k)}$ 分别为第 $k$ 个注意力头对应的注意力系数和线性变换。 例假如: $$ \mathbf{h}_i'^{(1)} = \sigma\left(\begin{bmatrix} 0.6 \\ 0.4 \end{bmatrix}\right) = \begin{bmatrix} 0.6 \\ 0.4 \end{bmatrix}. \\ \mathbf{h}_i'^{(2)} = \sigma\left(\begin{bmatrix} 0.6 \\ 1.4 \end{bmatrix}\right) = \begin{bmatrix} 0.6 \\ 1.4 \end{bmatrix}. $$ 将两个头的输出在特征维度上进行拼接,得到最终节点 $i$ 的新特征表示: $$ \mathbf{h}_i' = \mathbf{h}_i'^{(1)} \,\Vert\, \mathbf{h}_i'^{(2)} = \begin{bmatrix} 0.6 \\ 0.4 \end{bmatrix} \,\Vert\, \begin{bmatrix} 0.6 \\ 1.4 \end{bmatrix} = \begin{bmatrix} 0.6 \\ 0.4 \\ 0.6 \\ 1.4 \end{bmatrix}. $$ 意义:不同注意力头可以学习到节点之间不同类型的依赖关系。例如: 一个头可能关注局部邻居(如一阶邻居的拓扑结构), 另一个头可能关注全局特征相似性(如节点特征的余弦相似性)。 多头注意力(输出层时平均) 在最终的输出层(例如分类层)通常会将多个头的结果做平均,而不是拼接: $$ \begin{align*} \mathbf{h}_i' = \sigma\left(\frac{1}{K}\sum_{k=1}^K \mathbf{h}_i^{(k)}\right) \end{align*} $$ 多头注意力比喻:盲人摸象 + 团队合作 场景: 大象 = 图中的目标节点及其邻居(待分析的复杂结构) 盲人 = 多个注意力头(每个头独立"观察") 团队指挥 = 损失函数(指导所有盲人协作) 1. 初始摸象(前向传播) 盲人A(头1): 摸到腿(关注局部结构邻居),心想:"柱子!这动物像房子。"(生成表示 $\mathbf{h}_i^{(1)}$) 初始偏好:腿的粗细、纹理(权重 $W^{(1)}$ 和 $\mathbf{a}^{(1)}$ 的初始化倾向) 盲人B(头2): 摸到鼻子(关注特征相似的邻居),心想:"软管!这动物能喷水。"(生成表示 $\mathbf{h}_i^{(2)}$) 初始偏好:鼻子的长度、灵活性(权重 $W^{(2)}$ 和 $\mathbf{a}^{(2)}$ 不同) 盲人C(头3): 摸到尾巴(关注远距离邻居),心想:"绳子!这动物有附件。"(生成表示 $\mathbf{h}_i^{(3)}$) 2. 团队汇报(多头聚合) 综合报告: 将三人的描述拼接:"柱子+软管+绳子"($\mathbf{h}_i' = \text{concat}(\mathbf{h}_i^{(1)}, \mathbf{h}_i^{(2)}, \mathbf{h}_i^{(3)})$) 指挥者(分类器)猜测:"这可能是大象。"(预测结果 $\hat{y}_i$) 3. 指挥者反馈(损失函数) 真实答案:是大象(标签 $y_i$) 损失计算: 当前综合报告遗漏了"大耳朵"(交叉熵损失 $\mathcal{L}$ 较高) 指挥者说:"接近答案,但还缺关键特征!"(反向传播梯度) 4. 盲人调整(梯度更新) 盲人A(头1): 听到反馈:"需要更多特征,但你的柱子描述还行。" 调整:更精确测量腿的直径和硬度(更新 $W^{(1)}$),而非改摸鼻子 结果:下次报告"粗柱子上有横向褶皱"(更接近象腿的真实特征) 盲人B(头2): 听到反馈:"软管描述不够独特。" 调整:更仔细感受鼻子的褶皱和肌肉运动(更新 $W^{(2)}$) 结果:下次报告"可弯曲的软管,表面有环形纹路" 盲人C(头3): 听到反馈:"绳子太模糊。" 调整:注意尾巴的末端毛发(更新 $W^{(3)}$) 结果:下次报告"短绳末端有硬毛刷" 5. 最终协作 新一轮综合报告:"褶皱粗柱 + 环形软管 + 带毛刷短绳" → 指挥者确认:"是大象!"(损失 $\mathcal{L}$ 降低) 直推式学习与归纳式学习 直推式学习(Transductive Learning) 模型直接在固定的训练图上学习节点的表示或标签,结果只能应用于这张图中的节点,无法直接推广到新的、未见过的节点或图。 例如:DeepWalk ,它通过对固定图的随机游走生成节点序列来学习节点嵌入,因此只能得到训练图中已有节点的表示,一旦遇到新节点,需要重新训练或进行特殊处理。 注意:GCN是直推式的,因为它依赖于整个图的归一化邻接矩阵进行卷积操作,需要在固定图上训练。 归纳式学习(Inductive Learning) 模型学习的是一个映射函数或规则,可以将这种规则推广到未见过的新节点或新图上。这种方法能够处理动态变化的图结构或新的数据。 例如: 图神经网络的变体(GAT)都是归纳式的,因为它们在聚合邻居信息时学习一个共享的函数,该函数能够应用于任意新节点。 局部计算:GAT 的注意力机制仅在每个节点的局部邻域内计算,不依赖于全局图结构。 参数共享:模型中每一层的参数(如 $W$ 和注意力参数 $\mathbf{a}$)是共享的,可以直接应用于新的、未见过的图。 泛化到新节点:在许多推荐系统中,如果有新用户加入(新节点),我们需要给他们做个性化推荐,这就要求系统能够在不重新训练整个模型的情况下,为新用户生成表示(Embedding),并且完成推荐预测。 泛化到新图: 分子图预测。我们会用一批训练分子(每个分子是一张图)来训练一个 GNN 模型,让它学会如何根据图结构与原子特征来预测分子的某些性质(如毒性、溶解度、活性等)。训练完成后,让它在新的分子上做预测。 总结:直推式要求图的邻接矩阵不能变化,归纳式要求现有的邻接关系尽量不变化,支持少量节点新加入,直接复用已有W和a聚合特征。 GNN的优点: 参数共享 浅层嵌入(如Deepwalk)为每个节点单独学习一个向量,参数量随节点数线性增长。 GNN 使用统一的消息传递/聚合函数,所有节点共享同一套模型参数,大幅减少参数量。 归纳式学习 浅层方法通常无法直接处理训练时未见过的新节点。 GNN 能通过邻居特征和结构来生成新节点的表示,实现对新节点/新图的泛化。 利用节点特征 浅层方法多半只基于连接关系(图结构)。 GNN 可以直接整合节点的属性(文本、图像特征等),生成更具语义信息的嵌入。 更强的表达能力 GNN 通过多层聚合邻居信息,可学习到更丰富的高阶结构和特征交互,往往在多种任务上表现更优。
论文
zy123
3月21日
0
12
0
上一页
1
...
6
7
8
...
12
下一页