首页
关于
Search
1
微服务
34 阅读
2
同步本地Markdown至Typecho站点
29 阅读
3
JavaWeb——后端
18 阅读
4
苍穹外卖
14 阅读
5
智能协同云图库
13 阅读
后端学习
项目
杂项
科研
论文
默认分类
登录
找到
10
篇与
论文
相关的结果
- 第 2 页
2025-03-21
郭款论文
KAN不稳定/卡尔曼滤波 小波变换 郭款论文 整体逻辑 网络拓扑的生成与模拟 RW、RWP、RD模型:这几种随机移动模型用于模拟节点在动态网络中的移动情况,从而生成连续时间点上的网络快照(邻接矩阵)。 ER模型:作为静态网络模型,它提供了对比基准,用于验证重构算法在无动态扰动情况下的表现。 这些模型为实验提供了“真实”的网络拓扑数据(或称地面真值),即论文中构建和测试网络重构算法的基础数据来源。 网络拓扑的预测 卡尔曼滤波:在动态网络中,由于网络拓扑会随时间变化,直接获取每个时刻的真实拓扑通常不现实。论文利用卡尔曼滤波等预测算法,根据之前时刻网络的特征谱参数(如特征值和特征向量)来预测未来时刻的谱参数,为减少计算复杂度和降低噪声影响,通常只预测前 K 个最重要的特征谱参数,因为这部分信息包含了网络大部分的全局结构特征。 网络重构过程 基于对称非负矩阵分解的重构:利用预测得到的谱参数(卡尔曼滤波预测的特征值和特征向量),可以对网络邻接矩阵进行逆向重构。这一步可以看作是“从低维(特征)恢复高维(原始邻接矩阵)”的过程,但由于预测误差和噪声,得到的初步重构矩阵通常存在一定偏差。 矢量量化算法的应用 矢量量化(如改进的模糊 C 均值聚类):为了消除初步重构矩阵中的小幅扰动和噪声,通过对矩阵元素进行聚类量化,将分散的数值映射到各自的“代表值”上,从而提高重构精度。这个步骤实际上起到了“降噪”和“修正预测误差”的作用,使得最终的重构网络拓扑更加准确。 矢量量化 矢量量化的基本思想是将输入数据点视为多维向量,并将其映射到一个码本(codebook)中的最接近的码字。码本是预先确定的一组离散的向量,通常通过无监督学习方法(如K-means)从大量训练数据中得到。在矢量量化中,输入数据点与码本中的码字之间的距离度量通常使用欧氏距离。通过选择最接近的码字作为量化结果,可以用较少的码字表示输入数据,从而实现数据的压缩。同一个码字能够代表多个相似的多维向量,从而实现了多对一的映射。 为什么引入矢量量化理论? 在谱分解重构过程中,由于特征值和特征向量的预测存在误差,每个矩阵元素可能会略微偏离理想值。例如,对于一个理想的 $0/1$ 邻接矩阵,真实的连接应为 $1$,而不连接应为 $0$。由于预测误差,实际重构矩阵可能出现如下数值: $$ \begin{bmatrix} 0 & 0.98 & 0.03 \\ 0.97 & 0 & 1.02 \\ 0.05 & 1.01 & 0 \\ \end{bmatrix} $$ 这里,$0.98$, $0.97$, $1.02$, $1.01$ 这些数值本来应该都是 $1$,但由于误差略有偏离;同样,$0.03$ 和 $0.05$ 本应为 $0$。 矢量量化通过将多个离散的扰动值聚类映射到固定值(如0/1或权值),消除随机误差,提高重构精度。 理想的量化后的矩阵: $$ \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \\ \end{bmatrix} $$ K-means矢量量化示例 假设我们有 4 个二维数据点,希望将它们分成 2 类,即构造一个包含 2 个码字的码本。整个过程类似于 k-means 聚类。 1. 数据矩阵 设原始数据矩阵为 $$ X=\begin{pmatrix} 1 & 2 \\ 1.2 & 2.1 \\ 3 & 4 \\ 2.9 & 3.8 \end{pmatrix}. $$ 这 4 个数据点中,前两个点大致聚集在一起,后两个点大致在另一处。 初始化码本 我们希望构造一个码本矩阵 $C$,初始时可以从数据中随机选择两个点作为码字。假设选择 $x_1=(1,2)$ 和 $x_3=(3,4)$,则初始码本为 $$ C^{(0)}=\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}. $$ 其中,每一行代表一个码字。 分配数据点到码字 对于每个数据点,计算它与各个码字之间的欧氏距离,并将其分配到距离最近的码字。下面计算各数据点到码字的距离(这里只计算距离的平方,便于比较): 数据点 $x_1=(1,2)$: 到码字 1 $(1,2)$ 的距离平方:$ (1-1)^2+(2-2)^2=0 $ 到码字 2 $(3,4)$ 的距离平方:$ (1-3)^2+(2-4)^2=4+4=8 $ 分配:$x_1$ 属于码字 1。 数据点 $x_2=(1.2,2.1)$: 到码字 1 $(1,2)$ 的距离平方:$ (1.2-1)^2+(2.1-2)^2=0.04+0.01=0.05 $ 到码字 2 $(3,4)$ 的距离平方:$ (1.2-3)^2+(2.1-4)^2\approx3.24+3.61=6.85 $ 分配:$x_2$ 属于码字 1。 数据点 $x_3=(3,4)$: 到码字 1 $(1,2)$ 的距离平方:$ (3-1)^2+(4-2)^2=4+4=8 $ 到码字 2 $(3,4)$ 的距离平方:$ 0 $ 分配:$x_3$ 属于码字 2。 数据点 $x_4=(2.9,3.8)$: 到码字 1 $(1,2)$ 的距离平方:$ (2.9-1)^2+(3.8-2)^2\approx3.61+3.24=6.85 $ 到码字 2 $(3,4)$ 的距离平方:$ (2.9-3)^2+(3.8-4)^2=0.01+0.04=0.05 $ 分配:$x_4$ 属于码字 2。 可以将分配结果用指示矩阵 $Z$ 表示,每行对应一个数据点,每列对应一个码字,若数据点分配给该码字,则对应位置为 1,否则为 0。于是 $$ Z=\begin{pmatrix} 1 & 0 \\ 1 & 0 \\ 0 & 1 \\ 0 & 1 \end{pmatrix}. $$ 更新码字 对于每个码字,计算分配给该码字的数据点的均值,更新码字。更新公式为 $$ c_k = \frac{1}{|S_k|}\sum_{x\in S_k} x, $$ 其中 $S_k$ 表示被分配给第 $k$ 个码字的点的集合。 对于码字 1: 数据点 $x_1=(1,2)$ 和 $x_2=(1.2,2.1)$, 新码字为 $$ c_1^{(1)}=\left(\frac{1+1.2}{2},\frac{2+2.1}{2}\right) = (1.1,\ 2.05). $$ 对于码字 2: 数据点 $x_3=(3,4)$ 和 $x_4=(2.9,3.8)$, 新码字为 $$ c_2^{(1)}=\left(\frac{3+2.9}{2},\frac{4+3.8}{2}\right) = (2.95,\ 3.9). $$ 因此,更新后的码本矩阵为 $$ C^{(1)}=\begin{pmatrix} 1.1 & 2.05 \\ 2.95 & 3.9 \end{pmatrix}. $$ 重复迭代 通常,矢量量化的过程会不断迭代“分配数据点”和“更新码字”的步骤,直到码本收敛或达到预设的迭代次数。上述过程就是一次完整的迭代。实际中可能需要多次迭代来使码本更好地逼近数据的分布。 传统Kmeans的局限: 对初始簇中心敏感 K-means 需要预先设定簇的数量 $K$并随机初始化簇中心,初始选择不佳可能导致算法收敛到局部最优解,而非全局最优。 对离群点敏感 算法使用均值来更新簇中心,离群点会显著影响均值的计算,从而使得簇中心偏离真实的“中心”位置,进而影响整体聚类效果。 硬性划分(硬聚类) 每个数据点只能被分配到一个簇,无法反映数据点可能同时具有多个簇的隶属关系。对于边界数据来说,这种“一刀切”的划分可能导致信息丢失。 需要预先确定$K$ 值 算法必须事先指定簇的数量,但在许多实际问题中,合适的$K$ 值可能难以确定,并且对最终结果有较大影响。 PAM算法 主要流程如下 : 初始化 通过谱分解方法获得重构后的网络邻接矩阵,并根据预先确定的簇数 K 初始化 K 个簇中心。 分配阶段 计算矩阵中每个元素 ( $a_{ij} $) 与所有簇中心之间的欧氏距离 ( $d_{ij}$ )(即 ($\sqrt{(a_{ij} - C_k)^2}$)),并将该元素分配给距离最近的簇。 时间复杂度:$O(nk)$ 更新簇中心 对于某个簇 $C_k$,我们先将该簇中所有的数据点(除去原簇中心)都作为候选中心,即构成集合 $P$。 对于集合 $P$ 中的每一个候选点 $p$,计算它与同一簇中其他所有点的距离总和: $$ D(p) = \sum_{q \in C_k, , q \neq p} d(p, q) $$ 其中 $d(p, q)$ 通常用欧氏距离或其他合适的距离度量表示。 选取使 $D(p)$ 最小的那个候选点作为新的簇中心 $C_k$。 时间复杂度分析:需要尝试的替换次数:$k \times (n-k)$ 每次替换需要对所有(n)个元素重新分配并计算代价,则该阶段在一次完整迭代中的最坏情况下复杂度为 $$ O\bigl(k \times (n - k) \times n\bigr),. $$ 当 (k) 相对 (n) 不是特别大时,可近似视为 $$ O(n^2 k),. $$ 迭代 重复“分配阶段”和“更新簇中心”两个步骤,直到簇中心值不再发生变化或元素的分配不再改变为止。 量化处理 聚类完成后,对原矩阵中每个元素进行量化,即将其映射为其所属簇的中心值,得到误差被有效消除的量化重构矩阵。 输出结果 最终输出经过量化处理后的矩阵,该矩阵的重构误差明显降低,尤其在存在较大扰动或离群值的情况下,PAM 算法可以较好地缓解这些因素带来的负面影响。 PAM 改进了离群点的问题,但它依然属于硬性聚类方法,且计算成本大 FCM算法 FCM的目标是将矩阵中的元素聚类到$K$个簇中,每个元素通过隶属度(概率值)表示其属于各簇的程度。以下是算法的详细步骤: 1. 初始化 输入:待聚类的矩阵 $A$(例如邻接矩阵)。 设置:簇数 $K$ 、模糊因子 $m$(通常取2)、收敛精度 $\epsilon$ 、最大迭代次数。 初始化:随机生成隶属度矩阵 $U$ 和簇中心 $C$ 。 2. 更新隶属度 对于每个元素 $a_{ij}$,计算其属于簇 $k$ 的隶属度 $ \mu_k(a_{ij})$ : $$ \mu_k(a_{ij}) = \frac{1}{\sum_{l=1}^{K} \left( \frac{\|a_{ij} - c_k\|}{\|a_{ij} - c_l\|} \right)^{2/(m-1)}} $$ |$a_{ij} - c_k$| :元素 ($ a_{ij}$ ) 到簇中心 ( $c_k$ ) 的距离(通常用欧氏距离)。 $m$ :模糊因子,控制聚类的模糊程度( $m$ =2 ) 时,隶属度更平滑)。 时间复杂度: 计算单个隶属度需要$O(K)$ 的(遍历所有 ($l=1,\dots,K$)) 由于要计算对 $K$个簇的隶属度,单个数据点的隶属度更新是 $O(K^2)$。 3. 更新簇中心 对于每个簇 $k$ ,计算新的簇中心 $c_k$ : $$ c_k = \frac{\sum_{i,j} [\mu_k(a_{ij})]^m a_{ij}}{\sum_{i,j} [\mu_k(a_{ij})]^m} $$ ($ [\mu_k(a_{ij})]^m $):隶属度的加权值,表示元素对簇的贡献。 4. 判断收敛 计算簇中心的变化量 ( $\Delta C = |C_{\text{new}} - C_{\text{old}}|$ )。 如果 ( $\Delta C < \epsilon $),则停止迭代;否则返回步骤2。 5. 量化处理 根据隶属度将元素分配到概率最大的簇,并用簇中心值替换元素值。 具体矩阵例子 假设有一个$3×3$的邻接矩阵 ( A ): $$ A = \begin{bmatrix} 0.1 & 0.9 & 0.3 \\ 0.8 & 0.2 & 0.7 \\ 0.4 & 0.6 & 0.5 \\ \end{bmatrix} $$ 目标是将矩阵元素聚类为2个簇( $K=2$ ),分别表示“连接”(簇1)和“断开”(簇2)。 步骤1:初始化 随机初始化簇中心: $$ c_1 = 0.2, \quad c_2 = 0.8 $$ 随机初始化隶属度矩阵 $U$(每行和为1): $$ U = \begin{bmatrix} 0.6 & 0.4 \ 0.3 & 0.7 \ 0.5 & 0.5 \ 0.8 & 0.2 \ 0.4 & 0.6 \ 0.7 & 0.3 \ 0.9 & 0.1 \ 0.2 & 0.8 \ 0.5 & 0.5 \ \end{bmatrix} $$ 步骤2:更新隶属度 以元素 ( $a_{11}$ = 0.1 ) 为例: 计算到簇1的距离: $$ |a_{11} - c_1| = |0.1 - 0.2| = 0.1 $$ 计算到簇2的距离: $$ |a_{11} - c_2| = |0.1 - 0.8| = 0.7 $$ 计算隶属度: $$ \mu_1(a_{11}) = \frac{1}{\left( \frac{0.1}{0.1} \right)^2 + \left( \frac{0.1}{0.7} \right)^2} \approx 0.98 $$ $$ \mu_2(a_{11}) = 1 - \mu_1(a_{11}) \approx 0.02 $$ 步骤3:更新簇中心 以簇1为例: 计算加权和: $$ \sum_{i,j} [\mu_1(a_{ij})]^2 a_{ij} = (0.98)^2 \times 0.1 + (0.3)^2 \times 0.8 + \dots $$ 计算新的簇中心: $$ c_1 = \frac{\text{加权和}}{\sum_{i,j} [\mu_1(a_{ij})]^2} $$ 步骤4:判断收敛 如果簇中心变化小于 ($ \epsilon $),停止迭代。 步骤5:量化处理 根据隶属度将元素分配到簇1或簇2,并用簇中心值替换元素值。 初始簇中心选取优化方法 优化过程: 设邻接矩阵最大元素值为$p$,设定初始簇间距阈值$\theta = \frac{p}{K}$($K$为预设簇数) 初始化候选集合$S_0$包含所有矩阵元素 迭代选择簇中心: 计算当前候选集中元素间最小距离$d_{min}$ 选择具有$d_{min}$的两个元素,计算中心点作为新簇中心$C_i$ 根据阈值$\theta$划分集合: $$ S_1 = { x \in S_0 \ | \ |x - C_i| \leq \theta } $$ $$ S_2 = S_0 \setminus S_1 $$ 将$S_2$作为新的候选集,重复直到选出$K$个簇中心 数学约束: 对于选定的簇中心需满足: $$ \forall i,j \in [1,K], \ \|C_i - C_j\| \geq \theta $$ 其中$\theta = \frac{\max(A)}{K}$,$A$为邻接矩阵。 FCM算法时间复杂度分析 网络节点数目为 $n$(不是矩阵的维度!),聚类簇数$K$ 初始化步骤 初始化簇中心和隶属度矩阵 $U$:需要为每个数据点生成 $K$ 个隶属度值,需要 $O(nK)$ 更新隶属度 每个数据点 $a_{ij}$ 计算与每个簇中心 $c_k$ 的距离:$O(K)$ 更新所有数据点的隶属度矩阵:$O(nK^2)$ 更新簇中心 计算每个簇的新中心(加权平均):$O(nK)$ 总体簇中心更新:$O(nK)$ 判断收敛 计算簇中心变化量 $\Delta C$:$O(K)$ 量化处理 将元素分配到簇并替换值:$O(nK)$ 每次迭代的总时间复杂度: $$ O(nK^2) + O(nK) + O(K) \approx O(nK^2) $$ 其中: $n$:数据点数量 $K$:簇数量 如果初始簇中心选取优化方法 选择 $K$ 个簇中心时: 需要计算候选集内元素间最小距离 每次选择复杂度:$O(n^2)$ 总体选择复杂度:$O(Kn^2)$ 整个FCM时间复杂度:$O(Kn^2)+O(TnK^2)$,$T$为迭代次数 网络重构 对称非负矩阵分解(SNMF)要求输入矩阵 $A$ 是对称且非负的,分解之后的矩阵 $U$ 是非负的。 $$ A \approx U U^T. $$ 对称非负矩阵分解来构造网络的**低维嵌入**表示,从而实现对高维网络邻接矩阵的精确重构。 低维指的是分解后的 $U$ 矩阵维度小->秩小->重构后的矩阵秩也小。 只需计算 $U U^T$ 就能重构出 $A$ 的低秩近似版本。如果选择保留全部特征(即 $r = n$),则可以精确还原 $A$;如果只取部分($r < n$),那么重构结果就是 $A$ 的低秩近似。 节点移动模型 模拟随机网络中节点的移动方式,进而间接模拟网络拓扑在不同时刻的变化。它们是用来在仿真环境下产生“网络结构随时间动态变化”的数据,从而让后续的网络重构或网络分析算法有一个逼近真实场景的测试环境。 RW(Random Walk,随机游走)模型 基本概念:在 随机游走(RW) 模型中,节点在一个定义的区域内随即选择方向并开始移动。每当节点到达区域的边界时,它会反弹并继续前进。节点的移动时间是固定的,且每个移动步骤都是独立的。 特点 节点移动过程中,节点的行进方向是完全随机的。 节点在到达区域边界时会选择一个新的角度进行反弹,并继续随机移动。 节点的移动是不规则的,每次运动的时间或距离是固定的,直到达到边界。 适用场景:适用于需要模拟节点在空间中随机漂移或无规律移动的场景,如某些类型的无人机网络或粒子运动模型。 RD(Random Direction,随机方向)模型 基本概念:在 随机方向(RD) 模型中,节点每次选择一个随机的方向,并在该方向上移动直到达到区域的边界。到达边界后,节点会随机选择一个新的目标方向,并继续移动。 特点 节点在每个时间片段内选择一个随机的方向,而不是随机选择目标。 节点在到达边界时会停留一段时间,然后选择一个新的随机方向。 该模型中,节点的运动行为更有方向性,与RW模型相比有更强的运动规律性。 适用场景:适用于需要模拟节点在特定方向上移动的情况,如某些类型的车载网络或定向通信网络。 RWP(Random Waypoint,随机路点)模型 基本概念:在 随机路点(RWP) 模型中,节点选择一个随机的位置作为目标点,然后以固定速度沿直线移动到该位置。到达目标点后,节点选择一个新的随机目标位置,并再次以相同的速度移动。 特点 节点移动到随机选定的目标位置,并在到达后停留一段时间。 该过程重复进行,每次都选择新的随机目标位置。 节点在任意时刻都有一个目标位置,而不是随机选择一个方向。 适用场景:适用于模拟节点有明确目标且周期性移动的网络场景,比如无线传感器网络和移动广告网络等。 参数 节点数量决定了在该活动半径内随机分布并移动的节点数量 通信半径 决定了网络中“谁能跟谁连边”,对 拓扑连通性 影响极大(如果两节点之间的距离小于等于通信半径,就认为它们之间存在连边); 活动半径 决定了节点分布和移动范围,对 网络整体的稀疏/稠密程度、节点之间的平均距离都有重要影响。 基于 SNMF 的网络重构 文献[60]提出一种基于简化特征分解和整体旋转的近似方法(reduced Eigenvalue Decomposition,rEVD): 先通过截断特征值/向量,构造一个 $B = X \Lambda^{1/2}$; 因此 $A\approx BB^T$ 不断“旋转” $B$(乘以酉矩阵 $Q$)并对负值做截断,从而让最终的 $U$ 既接近 $B$ 又满足非负性。 这相当于把一部分“逼近”工作用特征分解先做了,然后只用旋转矩阵 $Q$ 来调整局部负值,再配合 $\max(0,\cdot)$ 截断满足非负约束。 矩阵重构算法步骤为: 输入 特征向量矩阵 $X \in \mathbb{R}^{n \times r}$ 特征值矩阵 $\Lambda \in \mathbb{R}^{r \times r}$ 初始化 $$ B = X \Lambda^{\frac{1}{2}}, \quad Q = I, \quad U = max(0,B) ,\varepsilon $$ 交替更新 $U$, $Q$ $$ U = \max\bigl(0, B Q\bigr) $$ 继续更新 $Q$ $$ F = U^T B \quad \Rightarrow \quad [H, \Sigma, V] = \text{svd}(F), \quad Q = V H^T $$ 重复步骤 3、4,直到满足迭代停止条件 $$ |U^T(U - BQ)|_F^2 \le \varepsilon $$ 令 $$ A' = U U^T $$ 输出精确重构矩阵 对$A'$中各元素通过后续 FCM 算法进行聚类量化。 这里得到的 $U \in \mathbb{R}^{n \times r}$ 为什么采用SNMF? 1.得到可解释、非负的低维表示 $U$,可以作为网络嵌入特征进行下游任务。 2.若直接特征分解,得到的B通常含有负值,导致 $A'$ 中元素可能存在负值。 3.$A' = U U^T$ ,由于 $U$ 是实对称矩阵,该算法得到的$A'$是正半定的,特征值都大于等于0。 例:假设我们有一个 $3 \times 3$ 对称非负矩阵 $$ A=\begin{bmatrix} 4 & 2 & 1\\ 2 & 3 & 2\\ 1 & 2 & 3 \end{bmatrix} \qquad(\text{显然 }A=A^{\mathsf T},\;A_{ij}\ge 0) $$ 1. 初始步骤:构造 $B$ 和 $Q$ 首先对 $A$ 做谱分解,或者卡尔曼滤波预测得到(已知结果),: $$ A=X\Lambda X^{\mathsf T},\quad \Lambda=\operatorname{diag}(6.7136,\;2.5171,\;0.7693) $$ $$ X= \begin{bmatrix} -0.6265 & -0.7166 & 0.3065\\ -0.6032 & 0.1968 & -0.7729\\ -0.4936 & 0.6691 & 0.5556 \end{bmatrix} $$ 假设只保留最大的两条特征线 $$ X_r= \begin{bmatrix} -0.6265 & -0.7166\\ -0.6032 & 0.1968\\ -0.4936 & 0.6691 \end{bmatrix}, \qquad \Lambda_r=\operatorname{diag}(6.7136,\;2.5171) $$ $$ B=X_r\Lambda_r^{1/2} = \begin{bmatrix} -1.6233 & -1.1370\\ -1.5630 & \;\;0.3122\\ -1.2789 & \;\;1.0616 \end{bmatrix} $$ 2.rEVD 迭代(示范 $0 \to 1 \to \dots \to 9$ 步) 迭代 $Q^{(k)}$($2 \times 2$) $U^{(k)}=\max(0,BQ^{(k)})$(列举主要行) 误差 $\lVert U^{\mathsf T}(U-BQ)\rVert_F^2$ 0 $I$ $\begin{bmatrix}0&0\0&0.3122\0&1.0616\end{bmatrix}$ 3.4063 1 $\begin{bmatrix};0.5528&-0.8333\0.8333&0.5528\end{bmatrix}$ $\begin{bmatrix}0&0.7241\0&1.4750\0.1776&1.6526\end{bmatrix}$ 4.9581 2 … … 3.8632 ··· … … … 9 — $\begin{bmatrix}0&1.9814\1.1283&1.1258\1.5933&0.4731\end{bmatrix}$ 0.0072 每一轮都先 $F=U^{\mathsf T}B\stackrel{\text{svd}}{=}!H\Sigma V^{\mathsf T},;Q=VH^{\mathsf T}$, 再 $U=\max(0,BQ)$。 到第 9 步误差已降到 $7\times10^{-3}$,继续几步即可达到更小容差。 3.最终非负矩阵 $U$ 及重构 $$ U=\! \begin{bmatrix} 0.0000 & 1.9814\\ 1.1283 & 1.1258\\ 1.5933 & 0.4731 \end{bmatrix}, \qquad A' = UU^{\mathsf T}= \begin{bmatrix} 3.9259 & 2.2307 & 0.9374\\ 2.2307 & 2.5404 & 2.3303\\ 0.9374 & 2.3303 & 2.7626 \end{bmatrix} $$ 原矩阵 $A$ 的差: $$ A-A'= \begin{bmatrix} \;0.0741 & -0.2307 & 0.0626\\ -0.2307 & \;0.4596 & -0.3303\\ \;0.0626 & -0.3303 & 0.2374 \end{bmatrix} $$ 已处于可接受的近似误差范围,并且 $U$ 与 $A'$ 均为非负,即可直接用于后续的 SNMF-based 网络嵌入或聚类量化。 重构误差分析 初始传入的 $\kappa$ 个特征对 参数 决定了什么 会发生什么事 $\kappa$(截断阶数 / 嵌入维度) 你允许模型用多少自由度来"拟合"原始矩阵 先天上把可达到的最小误差卡死在一个下界 截断误差(不可避免) 只保留前 $\kappa$ 条特征线以后,任何再聪明的算法都只能在这 $r$ 维子空间 里折腾; 理论上最好的也就是 $$ |A - X_{\kappa}\Lambda_{\kappa}rX_{\kappa}^{!\top}|F^2 ;=; \sum{i={\kappa}+1}^{r}\lambda_i^2, $$ 也就是把后面没选的特征值的平方加起来。 $\kappa$ 选小了,这个和就大——这是 谱截断误差,跟迭代多少次无关。 优化误差(可迭代消除) rEVD / SNMF 的迭代只是想在"既保持 $\text{rank} \leq \kappa$, 又非负"这两个约束里,把误差降到 谱截断极限之上最小。 迭代越多,这一部分误差会指数式衰减到机器精度;但它永远不可能穿透前面的"墙"。 一句话:迭代能消掉"姿势不对"的误差,却消不掉"维度不够"的误差。 时间复杂度分析 (1) 初始构造阶段(假设特征值 特征向量已提前获取,不做分析) 构造矩阵 $B = X\Lambda^{1/2}$ $X$ 是 $n \times r$,$\Lambda^{1/2}$ 是 $r \times r$ 对角矩阵。 $$\mathcal{O}(nr^2) \quad (r \ll n)$$ (2) 迭代过程 计算 $U = \max(0, B Q)$ $B$ 是 $n \times r$,$Q$ 是 $r \times r$。 $\mathcal{O}(n r^2)$ 计算 $F = U^T B$ $U^T$ 是 $r \times n$,$B$ 是 $n \times r$。 $\mathcal{O}(n r^2)$ 对 $F$ 进行 SVD $F$ 是 $r \times r$ 的矩阵。 SVD 的时间复杂度:$\mathcal{O}(r^3)$。 更新 $Q = V H^T$ $V$ 和 $H$ 是 $r \times r$。 $\mathcal{O}(r^3)$ (3)重构A $A \approx U U^T.$ $\mathcal{O}(n^2 r)$ (3) 由于通常 $n \gg r$,$\mathcal{O}(n r^2)$ 是主导项,故总复杂度(其中 $T$ 为迭代次数) $$ {O}(n^2 r+Tn r^2) $$ rSVD-旋转截断算法($V_f/H_f$ 版) 步骤 公式 1 输入 左奇异向量矩阵 $U_s \in \mathbb R^{n\times r}$ 奇异值对角阵 $\Sigma \in \mathbb R^{r\times r}$ 2 初始化 $B = U_s,\Sigma^{1/2}$ $Q = I_r$ $U = \max!\bigl(0,B\bigr)$ 设容差 $\varepsilon>0$ 3 迭代:交替更新 3-a 更新 $U$ $U \leftarrow \max\bigl(0,,B Q\bigr)$ 3-b 更新 $Q$ $\displaystyle F = U^{\mathsf T} B$ $\displaystyle F = V_f,\Sigma_f,H_f^{\mathsf T}$ ← SVD $\displaystyle Q \leftarrow H_f,V_f^{\mathsf T}$ 4 停止条件 若 $\displaystyle |,U^{\mathsf T}(U - BQ)|_F^{2} \le \varepsilon$ 则停止;否则回到 3 5 输出 重构矩阵 $\displaystyle A' = U,U^{\mathsf T}$ $\kappa$ 将原公式合并为一行,可写为: $B ;\leftarrow; U_s,\Sigma^{1/2},\quad Q ;\leftarrow; I_r,\quad U ;\leftarrow;\max\bigl(0,,B\bigr),\quad\varepsilon>0.$
论文
zy123
3月21日
0
2
0
2025-03-21
液态神经网络
液态神经网络 连续时间递归神经网络(CT-RNN) 举例说明 以下以第 $i$个隐藏神经元为例,给出一个典型的 连续时间 动力学方程(微分方程形式): $$ \frac{d h_i(t)}{dt} ;=; -\alpha , h_i(t) ;+; \sum_{j} W_{ij} ,\sigma\bigl(h_j(t)\bigr) ;+; V_i, x(t). $$ $\displaystyle h_i(t)$ 表示第 (i) 个神经元的 内部状态(或称膜电位、液体状态等)。 $\displaystyle -\alpha,h_i(t)$ 表示自然衰减项,$\alpha>0$ 是衰减系数。 $\displaystyle \sum_{j} W_{ij},\sigma\bigl(h_j(t)\bigr)$ 表示对第 $i$ 个输出神经元,计算所有输入神经元$j$的加权和。 $\displaystyle \sigma(\cdot)$ 是一个非线性激活函数,例如 $\tanh$、ReLU 等; $\displaystyle W_{ij}$ 是从神经元 (j) 到神经元 (i) 的 连接权重; 这里的求和 $\sum_{j}$意味着 第 $i$ 个神经元 会「收集」当前层所有神经元(含自己)的输出信号。 $\displaystyle V_i, x(t)$ 外部输入 $x(t)$ 对神经元 $i$ 的直接驱动作用。 因此,这个公式表示:第 $i$个隐藏神经元 的状态变化率,依赖: 自身的衰减; 其他神经元的输出(相互耦合); 来自上一层(或外部)的输入刺激。 使用欧拉法 (Forward Euler) 离散近似 这是最简单、最直接的数值积分方法。给定一个小的时间步长$\Delta t$,将连续时间 $t$ 离散化为 $t_0,, t_1,, \dots$,其中 $t_{n+1} = t_n + \Delta t$。 则第 $i$ 个神经元的状态 $h_i(t)$ 在离散时刻 $t_n$ 的值可以表示为 $h_i^{(n)}$,其中 $h_i^{(n)}$ 表示在时间 $t_n$ 时刻的状态。 微分方程: $$ \frac{d h_i(t)}{dt} = f_i\bigl(h_1(t), \dots, h_N(t), x(t)\bigr), $$ 在这里, $$ f_i(\mathbf{h}(t),\, x(t)) \;=\; -\alpha\, h_i(t) \;+\; \sum_j W_{ij}\,\sigma\bigl(h_j(t)\bigr) \;+\; V_i\,x(t). $$ **欧拉更新公式**: $$ h_i^{(n+1)} \;=\; h_i^{(n)} \;+\; \Delta t \,\Bigl[ f_i\bigl(\mathbf{h}^{(n)},\, x^{(n)}\bigr) \Bigr], $$ 其中: $ \mathbf{h}^{(n)} = [h_1^{(n)}, \dots, h_N^{(n)}]^\top$ 表示所有神经元在时刻 $t_n$ 的状态向量。 $x^{(n)} $ 表示输入信号在时刻$ t_n$的值(或小区间平均值)。 这可以并行对 所有 $i$ 同时更新。 优点:简单易实现 缺点:稳定性、精度较低,需要选小一些的$\Delta t$才能获得良好数值表现。 神经ODE的基本形式 神经ODE(Neural ODE)的状态 $x(t)$ 由以下微分方程定义: $$ \frac{dx(t)}{dt} = f(x(t), I(t), t, \theta) $$ 其中,$f$ 是一个由参数 $\theta$ 定义的神经网络,$I(t)$ 是输入,$t$ 是时间。 通过数值ODE求解器可以计算状态 $x(t)$,并通过反向模式自动微分(reverse-mode automatic differentiation)来训练网络。 使用伴随敏感度 (adjoint) 方法 来节省显存,但这会带来一定的数值不稳定与反向误差 连续时间递归神经网络(CT-RNN)的稳定性 $$ \frac{dx(t)}{dt} = -\frac{x(t)}{\tau} + f(x(t), I(t), t, \theta) $$ 其中,$-\frac{x(t)}{\tau}$ 是一个阻尼项,帮助系统达到平衡状态,$\tau$ 是时间常数。 $τ$ 越大,系统的响应越慢;$τ$ 越小,系统的响应越快 小型生物(如线虫)的神经动力学模型 在生物学中,非脉冲神经元的电位动态可以通过以下线性微分方程描述: $$ \frac{d\mathbf{v}(t)}{dt} = -g_l \mathbf{v}(t) + \mathbf{S}(t) $$ 其中: $\mathbf{v}(t)$ 是神经元的电位。 $g_l$ 是泄漏电导(leakage conductance),表示神经元电位的自然衰减速度。 $\mathbf{S}(t)$ 是突触输入的总和,表示来自其他神经元的输入信号。 突触输入 $\mathbf{S}(t)$ 可以通过以下非线性函数近似: $$ \mathbf{S}(t) = f(\mathbf{v}(t), \mathbf{I}(t))(A - \mathbf{v}(t)) $$ 其中: $f(\mathbf{v}(t), \mathbf{I}(t))$ 是一个非线性函数(通常是 sigmoid 函数),表示突触前神经元的电位 $\mathbf{v}(t)$ 和外部输入 $\mathbf{I}(t)$ 对突触输入的影响。 $A$ 是一个偏置项,表示突触输入的最大值。($A$ 可以理解为突触输入的平衡电位。当神经元的电位 **$v(t)$*接近 $A$ 时,突触输入$S(t)$*会减小,从而防止电位无限增长。) 例子 为了具体化,我们设定以下参数: 泄漏电导:$g_l = 0.1$(表示电位以每秒 0.1 的速度自然衰减)。 突触输入的最大值:$A = 1$。 非线性函数:假设 $f(\mathbf{v}(t), \mathbf{I}(t))$ 是一个简单的 sigmoid 函数: $$ f(\mathbf{v}(t), \mathbf{I}(t)) = \frac{1}{1 + e^{-\mathbf{I}(t)}} $$ 其中,$\mathbf{I}(t)$ 是外部输入。 假设在 $t = 0$ 时,神经元的电位为: $$ \mathbf{v}(0) = 0.5 $$ 假设在 $t = 0$ 到 $t = 10$ 秒内,外部输入 $\mathbf{I}(t)$ 为: $$ \mathbf{I}(t) = 1 $$ 计算突触输入 根据设定的非线性函数,突触输入为: $$ f(\mathbf{v}(t), \mathbf{I}(t)) = \frac{1}{1 + e^{-\mathbf{I}(t)}} = \frac{1}{1 + e^{-1}} \approx 0.731 $$ 这里为了简化,突触输入仅由外部驱动,不随自身电位变化。 因此,突触输入项为: $$ f(\mathbf{v}(t), \mathbf{I}(t))(A - \mathbf{v}(t)) = 0.731 \times (1 - \mathbf{v}(t)) $$ 动态方程 将参数代入动态方程,得到: $$ \frac{d\mathbf{v}(t)}{dt} = -0.1 \mathbf{v}(t) + 0.731 (1 - \mathbf{v}(t)) $$ 数值模拟 我们可以通过数值方法(如显示欧拉法)来模拟神经元的电位变化。假设时间步长 $\Delta t = 0.1$ 秒,初始电位 $\mathbf{v}(0) = 0.5$。 第一次迭代($t = 0$ 到 $t = 0.1$ 秒) 计算电位变化率: $$ \frac{d\mathbf{v}(0)}{dt} = -0.1 \times 0.5 + 0.731 \times (1 - 0.5) = -0.05 + 0.3655 = 0.3155 $$ 更新电位: $$ \mathbf{v}(0.1) = \mathbf{v}(0) + \frac{d\mathbf{v}(0)}{dt} \times \Delta t = 0.5 + 0.3155 \times 0.1 = 0.53155 $$ 重复上述过程,直至t=10秒 由于泄漏电导和偏置项$A$的作用,电位的上升速度逐渐减慢,最终趋于稳定值。 稳定状态 在稳定状态下,电位变化率为 0,即: $$ \frac{d\mathbf{v}(t)}{dt} = 0 $$ 代入动态方程: $$ 0 = -0.1 \mathbf{v}_{\text{stable}} + 0.731 (1 - \mathbf{v}_{\text{stable}}) $$ 解得: $$ \mathbf{v}_{\text{stable}} = \frac{0.731}{0.1 + 0.731} \approx 0.88 $$ 液态时间常数网络(LTCs) $$ \frac{dx(t)}{dt} = -\frac{x(t)}{\tau} + S(t) $$ 其中,$S(t)$ 是一个非线性项,定义为: $$ S(t) = f(x(t), I(t), t, \theta)(A - x(t)) $$ 这里,$f$ 是一个神经网络,$A$ 是一个偏置项。 将 $S(t)$ 代入隐藏状态方程后,得到LTCs的动态方程: $$ \frac{dx(t)}{dt} = -\left[\frac{1}{\tau} + f(x(t), I(t), t, \theta)\right] x(t) + f(x(t), I(t), t, \theta) A $$ LTCs 的核心创新在于其**可变的时间常数** $\tau_{sys}$,它由以下公式定义: $$ \tau_{sys} = \frac{\tau}{1 + \tau f(x(t), I(t), t, \theta)} $$ 这意味着时间常数 $\tau_{sys}$ 会根据输入 $I(t)$ 和隐藏状态 $x(t)$ 的变化而动态调整。从而在处理复杂时间序列数据时表现出更强的适应性和表达能力。 这个方程展示了LTCs的核心特性:可变的时间常数。 显式欧拉 vs 隐式欧拉 方法 公式 特点 显式欧拉 $x_{k+1} = x_k + \Delta t \cdot f(x_k, t_k)$ 用当前时刻的导数计算下一步,计算快但稳定性差(步长受限) 隐式欧拉 $x_{k+1} = x_k + \Delta t \cdot f(x_{k+1}, t_{k+1})$ 用未来时刻的导数计算下一步,稳定性好但需解方程(适合刚性系统) 融合求解器 $$ \frac{dx(t)}{dt} = -\left[\frac{1}{\tau} + f(x(t), I(t), t, \theta)\right] x(t) + f(x(t), I(t), t, \theta) A $$ $$ \frac{dx}{dt} = -\alpha(t)x(t) + \beta(t) \quad \text{其中}\ \alpha(t) = \frac{1}{\tau} + f, \ \beta(t) = f \odot A $$ 应用隐式欧拉法离散化: $$ x_{k+1} = x_k + \Delta t \cdot \left[ -\alpha_{k+1} x_{k+1} + \beta_{k+1} \right] $$ **关键点**:右侧的$\alpha_{k+1}$和$\beta_{k+1}$都依赖于未来状态$x_{k+1}$。 显示近似非线性项: 论文假设非线性项$f$在时间步内近似不变(即$f_{k+1} \approx f_k$),从而: $$ \alpha_{k+1} \approx \alpha_k = \frac{1}{\tau} + f_k, \quad \beta_{k+1} \approx \beta_k = f_k \odot A $$ 代入后方程变为: $$ x_{k+1} = x_k + \Delta t \cdot \left[ -\left( \frac{1}{\tau} + f_k \right) x_{k+1} + f_k \odot A \right] $$ 求解: 将含$x_{k+1}$的项移到左边: $$ x_{k+1} + \Delta t \left( \frac{1}{\tau} + f_k \right) x_{k+1} = x_k + \Delta t \cdot f_k \odot A $$ 提取公因子$x_{k+1}$: $$ x_{k+1} \left[ 1 + \Delta t \left( \frac{1}{\tau} + f_k \right) \right] = x_k + \Delta t \cdot f_k \odot A $$ 最终显式解: $$ x_{k+1} = \frac{x_k + \Delta t \cdot f_k \odot A}{1 + \Delta t \left( \frac{1}{\tau} + f_k \right)} $$ $x_k \in \mathbb{R}^N$ 是第 $k$ 个时间步的隐藏状态向量。 $I_k$ 是输入。 $f(\cdot)$ 是包含可学习权重的非线性映射,$f_k$ 表示在第 $k$ 步时刻对 $\bigl(x_k,I_k\bigr)$ 的运算结果。 可以假设 $\tau$ 是时间常数(若每个神经元各有一套,可以是一个向量 $\tau \in \mathbb{R}^N$)。 $A \in \mathbb{R}^N$ 是可学习的偏置向量。 $\odot$ 表示逐元素相乘。 示例 参数与初始数据设定 为便于演示,这里只做 一次 更新(从 $x_k$ 到 $x_{k+1}$),并给出具体数值。 隐藏层维度 $N=2$。 时间步长 $\Delta t = 1$(只是示例;实际中可更小或可自适应)。 初始隐藏状态和输入(随意设定): $$ x_k = \begin{bmatrix}0 \[4pt] 1\end{bmatrix}, \quad I_k = 2. $$ 令时间常数 $\tau = \begin{bmatrix}1 \[4pt] 1\end{bmatrix}$(即 2 维,都为 1)。 令 $A = \begin{bmatrix}2 \[4pt] -1\end{bmatrix}$。 非线性 $f$ 的定义 我们假设 $$ f(x,I) ;=; \mathrm{ReLU}!\bigl(W_r,x ;+; W_i,I ;+; b\bigr), $$ 其中 $W_r$ 是隐藏层的“自连接”或“循环”权重,尺寸 $2\times 2$; $W_i$ 是输入到隐藏层的权重,尺寸 $2\times 1$; $b$ 是偏置向量(2 维); $\mathrm{ReLU}(z)$ 对每个分量做 $\max(z,0)$。 这里举例设: $$ W_r = \begin{bmatrix} 0.5 & -0.3\ 0.1 & ;,0.2 \end{bmatrix}, \quad W_i = \begin{bmatrix} 1\ 2 \end{bmatrix}, \quad b = \begin{bmatrix} -1\ 0.5 \end{bmatrix}. $$ 计算 $f_k$ 先算 $W_r,x_k$: $$ W_r\,x_k = \begin{bmatrix} 0.5 & -0.3\\ 0.1 & \;\,0.2 \end{bmatrix} \begin{bmatrix} 0\\[3pt] 1 \end{bmatrix} = \begin{bmatrix} 0.5 \times 0 \;+\; (-0.3)\times 1\\[5pt] 0.1 \times 0 \;+\; 0.2 \times 1 \end{bmatrix} = \begin{bmatrix} -0.3\\[3pt] 0.2 \end{bmatrix}. $$ 再算 $W_i , I_k$: $$ W_i \, I_k = \begin{bmatrix} 1\\ 2 \end{bmatrix} \cdot 2 = \begin{bmatrix} 2\\ 4 \end{bmatrix}. $$ 加上偏置 $b$: $$ \begin{bmatrix} -0.3\\[3pt] 0.2 \end{bmatrix} + \begin{bmatrix} 2\\[3pt] 4 \end{bmatrix} + \begin{bmatrix} -1\\[3pt] 0.5 \end{bmatrix} = \begin{bmatrix} -0.3 + 2 \;-\; 1\\[3pt] 0.2 + 4 \;+\; 0.5 \end{bmatrix} = \begin{bmatrix} 0.7\\[3pt] 4.7 \end{bmatrix}. $$ 通过 $\mathrm{ReLU}$,得到 $$ f_k = \mathrm{ReLU}\!\Bigl(\begin{bmatrix}0.7\\[4pt]4.7\end{bmatrix}\Bigr) = \begin{bmatrix}0.7\\[4pt]4.7\end{bmatrix}. $$ 更新 $x_{k+1}$ $$ x_{k+1} = \frac{ x_k + \Delta t\,\bigl[f_k \odot A\bigr] }{ 1 + \Delta t\,\Bigl(\frac{1}{\tau} + f_k\Bigr) } \quad\longrightarrow\quad \text{都是逐元素算}. $$ 先算分子: $f_k \odot A = [,0.7 \times 2,;;4.7 \times(-1),] = [,1.4,;-4.7]$。 $x_k + \Delta t,\bigl[f_k \odot A\bigr] = [,0,,1,] + [,1.4,;-4.7,] = [,1.4,;-3.7,]$。 分母也要逐元素: $$ 1 + \Delta t \Bigl(\frac{1}{\tau} + f_k\Bigr) = 1 + 1 \cdot \bigl([\,1,\,1\,] + [\,0.7,\,4.7\,]\bigr) = 1 + [\,1.7,\,5.7\,] = [\,2.7,\;\,6.7\,]. $$ 逐元素相除: $$ x_{k+1} = \bigl[\,1.4,\;-3.7\bigr] \;\Big/\; \bigl[\,2.7,\;6.7\bigr] = \Bigl[\;\frac{1.4}{2.7},\;\;\frac{-3.7}{6.7}\Bigr] \approx [\,0.5185,\;-0.5522\,]. $$ 因此,我们最终得到 $$ x_{k+1} \approx [\,0.5185,\;-0.5522\,]. $$ 训练方法 论文采用 BPTT(通过时间反向传播) 进行训练: 前向传播: 使用数值求解器(融合显式-隐式欧拉法)沿时间步迭代计算状态 $x(t)$,公式为: $$ x_{k+1} = \frac{x_k + \Delta t \cdot f_k \odot A}{1 + \Delta t \left( \frac{1}{\tau} + f_k \right)} $$ 其中 $f_k = f(x_k, I_k, t_k, \theta)$,所有中间状态 ${x_0, x_1, ..., x_T}$ 被缓存。 反向传播: 从最终损失 $L$ 出发,沿时间步逆向计算梯度: 通过链式法则逐层传递梯度 $\frac{\partial L}{\partial x_k}$; 更新参数 $\tau$, $A$, $\theta$ 的梯度:$\nabla_{\tau} L$, $\nabla_{A} L$, $\nabla_{\theta} L$; 显式利用缓存的中间状态,避免伴随方法的重积分误差。 优势: 精度高:直接计算梯度,无近似误差累积; 稳定性强:适用于刚性(Stiff)动力学系统; 代价:内存复杂度为 $O(T)$($T$ 为时间步数),需权衡序列长度。 代码训练:python har.py --model ltc --size 32 --epochs 50 --log 1 液态时间常数的直观作用 对快/慢时间尺度的自适应: 当网络检测到输入信号变化非常快或幅度很大时,可动态增大衰减、加速更新;反之信号较稳定时,则让衰减变小、记忆更久。 增强模型的非线性表征能力: 因为衰减系数也会因网络状态而变,所以整体微分方程更具表达力,理论上能更好地逼近复杂的非线性时变系统。 优势 参数数量减少:每个神经元本身通过内置的动态机制承担了更多的功能,网络在捕捉时间依赖性时不需要额外堆叠大量的隐藏层或者引入复杂的循环结构(LSTM、GRU)。这大大减少了模型参数数量,从而降低了计算资源和能耗。 稀疏激活:动态更新机制意味着并非所有神经元在每个时刻都需要全量参与计算,只有部分神经元在关键时刻激活处理,从而提升整体计算效率。 应用场景 无人机和自动驾驶 由于液态神经网络能够在新环境下实时适应,其在无人机导航和自动驾驶系统中表现出色。研究表明,即使在复杂、未见过的场景中,它也能做出精准决策,从而实现高效导航。 金融和医疗预测 在处理连续的时间序列数据(如股票价格、气候数据或生命体征监控)时,液态神经网络能够捕捉细微的动态变化,帮助进行更准确的预测与预警。
论文
zy123
3月21日
0
3
0
2025-03-21
颜佳佳论文
颜佳佳论文 多智能体随机网络结构的实时精确估算 多智能体随机网络特征值滤波建模 1. 状态转移模型 系统的特征值向量 $\lambda_k$(状态向量)随时间演化的动态方程为: $$ \lambda_k = \lambda_{k-1} + w_{k-1} $$ 参数说明: $\lambda_k \in \mathbb{R}^{r \times 1}$:$k$ 时刻的特征值向量,$r$ 为特征值个数。 $w_{k-1} \sim \mathcal{N}(0, {Q})$:过程噪声,均值为零,协方差矩阵为对角阵 $\mathbf{Q} \in \mathbb{R}^{r \times r}$(因特征值独立)。 简化假设: 状态转移矩阵 $\mathbf{A}$ 和控制输入矩阵 $\mathbf{B}$ 为单位阵或零(无外部控制输入),故模型简化为随机游走形式。 2. 测量模型 观测到的特征值向量 $z_k$ 为: $$ z_k = \lambda_k + v_k $$ 参数说明: $z_k \in \mathbb{R}^{r \times 1}$:观测向量,维度与状态向量相同。 $v_k \sim \mathcal{N}(0, \mathbf{R})$:测量噪声,协方差 $\mathbf{R} \in \mathbb{R}^{r \times r}$ 为对角阵(噪声独立)。 简化假设: 测量矩阵 $\mathbf{H}$ 为单位阵,即观测直接反映状态。 3. 噪声协方差矩阵的设定 $\mathbf{Q}$ 和 $\mathbf{R}$ 为对角矩阵,对角元素由特征值方差确定: $$ \mathbf{Q} = \text{diag}(2\sigma_1^2, 2\sigma_2^2, \dots, 2\sigma_r^2), \quad \mathbf{R} = \text{diag}(\sigma_1^2, \sigma_2^2, \dots, \sigma_r^2) $$ 其中 $\sigma_i^2$ 为第 $i$ 个特征值的初始方差(由引理3-1推导)。 网络重构分析 滤波误差 原始全矩阵 $$ A = X \Lambda X^T = X_r \Lambda_r X_{r}^T + \underbrace{X_{-r} \Lambda_{-r} X_{-r}^T}_{\text{被截掉的尾部}} $$ 截断重构(真实) $$ A_k = X_r \Lambda_r X_{r}^T $$ 滤波后重构 $$ \hat{A}r = X_r (\Lambda_r + \Delta \Lambda_r) X{r}^T $$ 卡尔曼滤波误差矩阵(定义为两者之差): $$ E_{KF} = \hat{A}r - A_r = X_r \Delta \Lambda_r X{r}^T. $$ 要量化这个误差,常用矩阵的 Frobenius 范数: $$ e_{KF} = \| E_{KF} \|_F = \| X_r \Delta \Lambda_r X_r^T \|_F. $$ 由于 $X_K$ 是正交子矩阵(假设特征向量正交归一),有 $$ e_{KF} = \|\Delta \Lambda_K\|_F = \sqrt{\sum_{i=1}^r (\delta \lambda_i)^2}. $$ 全局误差度量 对估计矩阵 $\hat{A}k$ 的所有元素 ${\hat{a}{ij}}$ 进行 $K$-means 聚类,得到中心 ${c_k}_{k=1}^K$。 簇内平均偏差: $$ \text{mean}_k = \frac{1}{|\mathcal{S}k|} \sum{(i,j)\in\mathcal{S}k} |\hat{a}{ij} - c_k| $$ 全局允许误差: $$ \delta_{\max} = \frac{1}{K} \sum_{k=1}^K \text{mean}_k $$ 最终约束条件: $$ \boxed{ \underbrace{e_{KF}}_{\text{滤波误差}} \;+\; \underbrace{\epsilon}_{\text{重构算法误差}} \;\le\; \underbrace{\delta_{\max}}_{\text{聚类量化容限}} } $$ $$ {\epsilon}\;\le\; {\delta_{\max}} -e_{KF} $$ 网络结构优化 直接SNMF分解(无优化) 输入矩阵:原始动态网络邻接矩阵 $A$(可能稠密或高秩) 处理流程: 直接对称非负矩阵分解:$A \approx UU^T$ 通过迭代调整$U$和旋转矩阵$Q$逼近目标 存在问题: 高秩矩阵需要保留更多特征值($\kappa$较大) 非稀疏矩阵计算效率低 先优化再SNMF(论文方法) 优化阶段(ADMM): 目标函数:$\min_{A_{\text{opt}}} (1-\alpha)|A_{\text{opt}}|* + \alpha|A{\text{opt}}|_1$ 输出优化矩阵$A_{\text{opt}}$ SNMF阶段: 输入变为优化后的$A_{\text{opt}}$ 保持相同分解流程但效率更高 网络优化中的邻接矩阵重构问题建模与优化 可行解集合定义(公式4-4) $$ \Omega = \left\{ A \middle| A^T = A,\, A \odot P = A_{\text{pre}} \odot P,\, A \odot A_{\max}' = 0 \right\} $$ $A^T = A$:确保邻接矩阵对称 $A \odot P = A_{\text{pre}} \odot P$:掩码矩阵$P$ ,原来已有的连接不变,只让优化原本没有连接的地方。($\odot$为Hadamard积) $A \odot A_{\max}' = 0$:功率约束矩阵$\ A_{\max}'$ 禁止在原本无连接的节点间新增边 限制矩阵$A_{\max}'$的定义(公式4-5) $$ A'_{\max, ij} = \begin{cases} 0, & \text{若 } A_{\max, ij} \ne 0 \\ 1, & \text{若 } A_{\max, ij} = 0 \end{cases} $$ $A_{\max, ij}$表示在最大发射功率下哪些节点对之间能连通(非零表示可连通,零表示即便满功率也连不通) $A_{\max}'$在“连不通”的位置上是1,其他位置是0。通过$A_{\max}'$标记禁止修改的零元素位置 对于所有满足 $A'{\max,ij}=1$ 的位置(即物理不可连通的节点对),必须有 $A{ij}=0$,即始终保持断开 原始优化目标(公式4-6) $$ \min_{A} \, (1-\alpha)\, \text{rank}(A) + \alpha \|A\|_0 $$ $\|A\|_0$ 表示矩阵 $A$ 中非零元素的个数 目标:平衡低秩性($\text{rank}(A)$)与稀疏性($|A|_0$) 问题:非凸、不可导,难以直接优化 凸松弛后的目标(公式4-7) $$ \min_{A} \, (1-\alpha)\, \|A\|_* + \alpha \|A\|_1 $$ 核范数$|A|_*$:奇异值之和,替代$\text{rank}(A)$ L1范数$|A|_1$:元素绝对值和,替代$|A|_0$ 性质:凸优化问题,存在全局最优解 求解方法 传统方法: 可转化为**半定规划(SDP)**问题,使用内点法等求解器。但缺点是计算效率低,尤其当矩阵规模大(如多智能体网络节点数 $n$ 很大)时不可行。 改进方法: 采用ADMM(交替方向乘子法)结合投影和对偶上升的方法,适用于动态网络(矩阵频繁变化的情况)。 ADMM核心算法 变量定义与作用 输入变量: $A_{pre}$:初始邻接矩阵(优化前的网络拓扑)。 $P$:对称的0-1矩阵,用于标记 $A_{pre}$ 中非零元素的位置(保持已有边不变)。 $A'{max}$:功率最大时的邻接矩阵的补集($A'{maxij} = 1$ 表示 $A_{maxij} = 0$,即不允许新增边)。 $\alpha$:权衡稀疏性($L_1$ 范数)和低秩性(核范数)的系数。 iters:ADMM迭代次数。 算法步骤详解 (S.1) 更新原始变量 $A$(对应ADMM的$x$步) 代码行4-17:通过内层循环(投影和对偶上升)更新 $A$。 行4-11: 通过内层循环(行8-11)迭代更新 $R$,本质是梯度投影法: $temp_R^{k+1} = M - X^k \odot A_{\text{pre}}$(计算残差)。 $X^{k+1} = X^k + \beta(A_{\text{pre}} \odot temp_R^{k+1})$(梯度上升步,$\beta$ 为步长)。 本质:通过迭代强制 $A$ 在 $P$ 标记的位置与 $A_{pre}$ 一致。 行13-17:将 $A$ 投影到 $A \odot A'_{\text{max}} = 0$ 的集合。 类似地,通过内层循环(行14-17)更新 $Y$: $temp_A^{k+1} = D_2 - Y^k \odot A'_{\text{max}}$(残差计算)。 $Y^{k+1} = Y^k + \gamma(A'_{\text{max}} \odot temp_A^{k+1})$(对偶变量更新)。 (S.2) 更新辅助变量 $Z_1, Z_2$(对应ADMM的$z$步) 通过阈值操作分离目标函数的两部分: 行18-19:分别对核范数和 $L_1$ 范数进行阈值操作: $Z_1^{t+1} = T_r(A^{t+1} + U_1^t)$: $T_r(\cdot)$ 是奇异值阈值算子(核范数投影),对$A + U1$ 做SVD分解,保留前 $r$ 个奇异值。作用:把自己变成低秩矩阵=》强制 $A$ 低秩。 $Z_2^{t+1} = S_{\alpha}(A^{t+1} + U_2^t)$: $S_{\alpha}(\cdot)$ 是软阈值算子($L_1$ 范数投影),将小于 $\alpha$ 的元素置零。把自己变成稀疏矩阵=》促进 $A$ 的稀疏性。 (S.3) 更新 拉格朗日乘子$U_1, U_2$(对应ADMM的对偶上升) 行20-21:通过残差 $(A - Z)$ 调整拉格朗日乘子 $U_1, U_2$: $U_1^{t+1} = U_1^t + A^{t+1} - Z_1^{t+1}$(核范数约束的乘子更新)。 $U_2^{t+1} = U_2^t + A^{t+1} - Z_2^{t+1}$($L_1$ 范数约束的乘子更新)。 作用:惩罚 $A$ 与辅助变量 $Z1, Z2$ 的偏差(迫使$A$更贴近$Z$),推动收敛。 网络结构控制 核心目标:将优化后的低秩稀疏矩阵 $A$ 转化为实际网络参数(如功率、带宽),并维持动态网络的连通性和稳定性。 具体实现: 通过PID控制调整发射/接收功率,使实际链路带宽匹配矩阵 $A$ 的优化值。 结合CSMA/CA协议处理多节点竞争,确保稀疏网络下的高效通信。 优化模型(4.2节) ↓ 生成目标带宽矩阵A 香农公式 → 计算目标Pr → 自由空间公式 → 计算目标Pt ↓ PID控制发射机(AGC电压) → 实际Pt ≈ 目标Pt ↓ PID控制接收机(AAGC/DAGC) → 实际Pr ≈ 目标Pr ↓ 实际带宽 ≈ Aij (闭环反馈) 发射机: 功能:将数据转换为无线信号并通过天线发射。 关键参数:发射功率($P_t$)、天线增益($G_t$)、工作频率(决定波长$\lambda$)。 控制目标:通过调整AGC电压,动态调节发射功率,以匹配优化后的带宽需求(矩阵$A$中的$A_{ij}$)。 接收机: 功能:接收无线信号并转换为可处理的数据。 关键参数:接收功率($P_r$)、噪声($N_0$)、天线增益($G_r$)。 控制目标:通过AAGC/DAGC增益调整,确保接收信号强度适合解调,维持链路稳定性。 具体步骤 步骤1:生成目标带宽矩阵 $A$(4.2节优化模型) 数学建模: 通过凸松弛优化问题(公式4-7)得到低秩稀疏矩阵 $A$: $$ \min_A (1-\alpha) |A|_* + \alpha |A|_1 \quad \text{s.t.} \quad A \in \Omega $$ 约束集 $\Omega$ 确保矩阵对称性、保留原有链路($A \odot P = A_{\text{pre}} \odot P$)、禁止不可达链路($A \odot A'_{\max} = 0$)。 物理意义: 非零元素 $A_{ij}$ 直接表示 目标信道带宽 $C_{ij}$(单位:bps),即: $$ A_{ij} = C_{ij} = W \log_2\left(1 + \frac{P_r}{N_0 W}\right) \quad \text{(香农公式4-10)} $$ 步骤2:从带宽 $A_{ij}$ 反推功率参数 接收功率 $P_r$ 计算: 根据香农公式解耦: $$ P_r = (2^{A_{ij}/W} - 1) N_0 W $$ 输入:噪声 $N_0$、带宽 $W$、目标带宽 $A_{ij}$。 发射功率 $P_t$ 计算: 通过自由空间公式(4-11): $$ P_t = \frac{P_r L (4\pi d)^2}{G_t G_r \lambda^2} $$ 输入:距离 $d$、天线增益 $G_t, G_r$、波长 $\lambda$、损耗 $L$。 逻辑分支: 若 $A_{ij} \neq A_{\text{pre}ij}$(需调整链路): 计算 $P_r$ 和 $P_t$; 若 $A_{ij} = 0$(无连接): 直接设 $P_r = P_t = 0$。 步骤3:发射机功率调整(图4-2a) 定义目标:$P_t$(来自步骤2)。 测量实际:通过传感器获取当前发射功率 $P_{t,\text{actual}}$。 计算偏差:$e(t) = P_t - P_{t,\text{actual}}$。 PID调节:通过AGC电压改变发射功率,逼近 $P_t$。 步骤4:接收机功率调整(图4-2b) 定义目标:$P_r$(来自步骤2)。 测量实际:检测空口信号功率 $P_{r,\text{actual}}$。 计算偏差:$e(t) = P_r - P_{r,\text{actual}}$。 PID调节: 调整AAGC(模拟增益)和DAGC(数字增益),持续监测直至 $|e(t)| < \epsilon$。 基于谱聚类的无人机网络充电 (1) 谱聚类分组Spectral_Clustering(表5.1) 目标:将无人机和充电站划分为 $K$ 个簇,使充电站位于簇中心。 步骤: 输入:带权邻接矩阵 $A$(权值=无人机间距离)、节点数 $N$、充电站数 $K$。 拉普拉斯矩阵: $$L = D - A, \quad D_{ii} = \sum_j A_{ij}$$ 归一化: $$L_{norm} = D^{-\frac{1}{2}}LD^{\frac{1}{2}}$$ 谱分解:求 $L_{norm}$ 前 $K$ 小特征值对应的特征向量矩阵 $V \in \mathbb{R}^{N \times K}$。 聚类:对 $V$ 的行向量进行 k-means 聚类,得到标签 $\text{labels}$。 输出:每个无人机/充电站的簇编号 $\text{labels}$。 (2) 无人机选择充电站(表5-2) 目标:电量低的无人机前往对应簇中心的充电站。 步骤: 周期性运行(间隔 $\Delta t$): 通过 Push_Sum 协议获取所有无人机位置 Positions。 计算距离矩阵 $A$。 动态聚类:调用 Spectral_Clustering(A) 更新簇标签。 充电触发:若电量 $E < P_{th}$,向簇中心请求坐标 $\text{CS_point}$ 并前往。 关键公式: $$A_{ij} = \| \text{Position}_i - \text{Position}_j \|_2$$ (3) 充电站跟踪算法(表5-3) 目标:充电站动态调整位置至簇中心。 步骤: 周期性运行(间隔 $\Delta t$): 同无人机算法获取 $A$ 和 labels。 定位簇中心: 充电站根据编号匹配簇标签。 计算簇内无人机位置均值: $$\text{CS_point} = \frac{1}{|C_k|} \sum_{i \in C_k} \text{Position}_i$$ 其中 $C_k$ 为第 $k$ 簇的节点集合。 移动至新中心并广播位置。 (4) 算法改进 替换通信协议:用第3章的卡尔曼滤波 替代 Push_Sum,获取特征值、特征向量重构全局矩阵 $A$,减少消息传递。 基于T-GAT的无人机群流量预测 TCN 流量矩阵 $X \in \mathbb{R}^{N \times T}$,其中: $N$:无人机节点数量(例如10架无人机)。 $T$:时间步数量。 每个元素 $X_{i,t}$ 表示第 $i$ 个节点在时间 $t$ 的总流量(如发送/接收的数据包数量或带宽占用)。 流量矩阵的形状 假设有3架无人机,记录5个时间步的流量数据,矩阵如下: $$ X = \begin{bmatrix} 100 & 150 & 200 & 180 & 220 \\[6pt] 50 & 75 & 100 & 90 & 110 \\[6pt] 80 & 120 & 160 & 140 & 170 \end{bmatrix} $$ 行 ($N=3$):每行代表一架无人机的历史流量序列(例如第1行表示无人机1的流量变化:100 → 150 → 200 → 180 → 220)。 列 ($T=5$):每列代表所有无人机在同一时间步的流量状态(例如第1列表示在时间 $t_1$ 时,三架无人机的流量分别为:[100, 50, 80])。 TCN处理流量矩阵: 卷积操作 TCN 的每个卷积核会滑动扫描所有通道(即所有无人机)的时序数据。 例如,一个大小为 3 的卷积核会同时分析每架无人机连续 3 个时间步的流量(例如从 $t_1$ 到 $t_3$),以提取局部时序模式。 输出时序特征 经过多层扩张卷积和残差连接后,TCN 会输出一个高阶特征矩阵 $H_T^l$,其形状与输入类似(例如 (1, 3, 5)),但每个时间步的值已包含了: 趋势信息:流量上升或下降的长期规律。 TCN的卷积核仅在单个通道内滑动,计算时仅依赖该节点自身的历史时间步。节点间的交互是通过后续的**图注意力网络(GAT)**实现的。 与 GAT 的衔接 TCN 输出的特征矩阵 $H_T^l$ 会传递给 GAT 进行进一步处理。 时间步对齐:通常取最后一个时间步的特征(例如 H_T^l[:, :, -1])作为当前节点特征。 空间聚合:GAT 根据邻接矩阵计算无人机间的注意力权重,例如考虑“无人机2的当前流量可能受到无人机1过去3分钟流量变化的影响”。 LSTM+GAT训练过程说明(RWP网络节点移动预测) 先LSTM后GAT侧重点在时序特征的提取;先GAT后LSTM侧重点在空间特征的提取。 1. 数据构造 输入数据: 节点轨迹数据: 每个节点在1000个时间单位内的二维坐标 $(x, y)$,形状为 $[N, 1000, 2]$($N$个节点,1000个时间步,2维特征)。 动态邻接矩阵序列: 每个时间步的节点连接关系(基于距离阈值或其他规则生成),得到1000个邻接矩阵 $[A_1, A_2, \dots, A_{1000}]$,每个 $A_t$ 的形状为 $[2, \text{num_edges}_t]$(稀疏表示)。 滑动窗口处理: 窗口大小:12(用前12个时间步预测第13个时间步)。 滑动步长:1(每次滑动1个时间步,生成更多训练样本)。 生成样本数量: 总时间步1000,窗口大小12 → 可生成 $1000 - 12 = 988$ 个样本。 样本格式: 输入序列 $X^{(i)}$:形状 $[N, 12, 2]$($N$个节点,12个时间步,2维坐标)。 目标输出 $Y^{(i)}$:形状 $[N, 2]$(第13个时间步所有节点的坐标)。 动态邻接矩阵:每个样本对应12个邻接矩阵 $[A^{(i)}_1, A^{(i)}2, \dots, A^{(i)}{12}]$(每个 $A^{(i)}_t$ 形状 $[2, \text{num_edges}_t]$)。 2. 训练过程 模型结构: LSTM层: 输入:$[N, 12, 2]$($N$个节点的12步历史轨迹)。 输出:每个节点的时序特征 $[N, 12, H]$($H$为LSTM隐藏层维度)。 关键点:LSTM独立处理每个节点的时序,节点间无交互。 GAT层: 输入:取LSTM最后一个时间步的输出 $[N, H]$(即每个节点的最终时序特征)。 动态图输入:使用第12个时间步的邻接矩阵 $A^{(i)}_{12}$(形状 $[2, \text{num_edges}]$)。 输出:通过图注意力聚合邻居信息,得到空间增强的特征 $[N, H']$($H'$为GAT输出维度)。 预测层: 全连接层将 $[N, H']$ 映射到 $[N, 2]$,预测下一时刻的坐标。 训练步骤: 前向传播: 输入 $[N, 12, 2]$ → LSTM → $[N, 12, H]$ → 取最后时间步 $[N, H]$ → GAT → $[N, H']$ → 预测 $[N, 2]$。 损失计算: 均方误差(MSE)损失:比较预测坐标 $[N, 2]$ 和真实坐标 $[N, 2]$。 反向传播: 梯度从预测层回传到GAT和LSTM,更新所有参数。 3. 数据维度变化总结 步骤 数据形状 说明 原始输入 $[N, 1000, 2]$ $N$个节点,1000个时间步的$(x,y)$坐标。 滑动窗口样本 $[N, 12, 2]$ 每个样本包含12个历史时间步。 LSTM输入 $[N, 12, 2]$ 输入LSTM的节点独立时序数据。 LSTM输出 $[N, 12, H]$ $H$为LSTM隐藏层维度。 GAT输入(最后时间步) $[N, H]$ 提取每个节点的最终时序特征。 GAT输出 $[N, H']$ $H'$为GAT输出维度,含邻居聚合信息。 预测输出 $[N, 2]$ 下一时刻的$(x,y)$坐标预测。 4. 关键注意事项 动态图的处理: 每个滑动窗口样本需匹配对应时间步的邻接矩阵(如第 $i$ 到 $i+11$ 步的 $[A^{(i)}1, \dots, A^{(i)}{12}]$),但GAT仅使用最后一步 $A^{(i)}_{12}$。 若图结构变化缓慢,可简化为所有窗口共享 $A^{(i)}_{12}$。 数据划分: 按时间划分训练/验证集(如前800个窗口训练,后188个验证),避免未来信息泄露。 颜佳佳论文问题: 卡尔曼滤波预测了流量矩阵,但是又要TCN-GAT预测了流量矩阵,是否可以将TCN-GAT预测流量矩阵作为卡尔曼滤波的观测值。
论文
zy123
3月21日
0
4
0
2025-03-21
循环神经网络
循环神经网络RNN 循环神经网络(Recurrent Neural Network,简称RNN)是一类专门用于处理序列数据的神经网络模型。与传统的前馈神经网络不同,RNN具有“记忆”功能,能够捕捉数据序列中的时间依赖关系。 基本结构 RNN的核心在于它的循环结构,这个结构使得信息可以沿着时间步流动。一个典型的RNN单元在时间步 $t$ 接收输入向量 $x_t$ 和前一时刻的隐藏状态 $h_{t-1}$,然后计算当前时刻的隐藏状态 $h_t$。这种循环过程允许模型利用之前的状态信息来影响当前的预测。 隐藏状态的更新 隐藏状态更新通常通过如下公式实现: $$ h_t = f(W_{xh} \cdot x_t + W_{hh} \cdot h_{t-1} + b_h) $$ 其中: $h_t$ 表示时间步 $t$ 的隐藏状态(所有隐藏层神经元激活值的集合。)。 $x_t$ 是时间步 $t$ 的输入向量。 $W_{xh}$ 是输入到隐藏状态的权重矩阵。 $W_{hh}$ 是隐藏状态之间的递归连接权重矩阵。 $b_h$ 是偏置项。 $f$ 是激活函数,通常会选择非线性函数如tanh或ReLU,以引入非线性变换。 在这种更新过程中,当前的隐藏状态 $h_t$ 同时依赖于当前的输入 $x_t$ 和之前的隐藏状态 $h_{t-1}$,这使得RNN能够捕捉长时间序列中的上下文关系。 输出层 有时RNN还会在每个时间步产生输出,输出计算方式通常为: $$ y_t = g(W_{hy} \cdot h_t + b_y) $$ 其中: $y_t$ 是时间步 $t$ 的输出。 $W_{hy}$ 是隐藏状态到输出的权重矩阵。 $b_y$ 是输出层的偏置项。 $g$ 是输出层激活函数(例如softmax用于分类任务)。 困惑度 假设我们有一个测试序列,其中包含 3 个单词,模型对每个单词的预测概率分别为: $P(w_1) = 0.5$ $P(w_2|w_1) = 0.2$ $P(w_3|w_1, w_2) = 0.1$ 根据困惑度的公式: $$ \text{Perplexity} = \exp\left(-\frac{1}{N} \sum_{i=1}^{N} \log P(w_i | \text{context})\right) $$ 当模型对每个单词都能百分之百预测(即概率为1),则平均交叉熵为0,困惑度为 $\exp(0)=1$。这表示模型没有任何不确定性,是理想状态。 我们这里 $N=3$。下面是具体的计算步骤: 计算每个单词的对数概率 $$ \log P(w_1) = \log(0.5) \approx -0.6931 $$ $$ \log P(w_2|w_1) = \log(0.2) \approx -1.6094 $$ $$ \log P(w_3|w_1, w_2) = \log(0.1) \approx -2.3026 $$ 求和并求平均 将这些对数值相加: $$ \sum_{i=1}^{3} \log P(w_i|\text{context}) = -0.6931 - 1.6094 - 2.3026 \approx -4.6051 $$ 然后求平均: $$ \text{平均对数概率} = \frac{-4.6051}{3} \approx -1.5350 $$ 计算困惑度 取负值再求指数: $$ \text{Perplexity} = \exp\left(1.5350\right) \approx 4.64 $$ 训练过程与挑战 整体训练流程可以总结为下面几个步骤,每个 epoch 都会重复这些步骤: 前向传播 对于一个完整的句子(或者一个批次中的多个句子),模型按顺序处理所有时间步,生成每个时间步的输出。 比如,对于句子“我 爱 编程”,模型会依次处理“我”、“爱”、“编程”,得到对应的输出(例如每个时间步预测下一个词的概率分布)。 计算损失 将模型在所有时间步的输出与真实目标序列(也就是每个时间步的正确答案)进行比较,计算整体损失。 损失通常是所有时间步损失的总和或平均值,例如均方误差或交叉熵损失。 反向传播(BPTT) 对整个句子进行反向传播,即通过时间(Back Propagation Through Time,BPTT)计算所有时间步的梯度。 这一步会利用链式法则,把整个序列中各个时间步的梯度累积起来,形成每个参数的总梯度。 参数更新 使用优化器(如 Adam、SGD 等)根据计算得到的梯度更新模型参数。 重复整个过程 以上步骤构成了一个训练迭代周期(一个 epoch),在一个 epoch 中,所有训练样本都会被送入模型进行训练。 然后在下一个 epoch 中,再次重复整个流程,直到达到预设的 epoch 数或满足其他停止条件。 在训练过程中,RNN通过反向传播算法(具体为“反向传播通过时间”(BPTT))来更新参数。然而,由于梯度在长序列上传播时可能出现梯度消失或梯度爆炸问题,使得RNN在捕捉长程依赖关系时面临挑战。为此,后来发展出了如长短时记忆网络(LSTM)和门控循环单元(GRU)等改进模型,它们在结构上增加了门控机制,有效缓解了这一问题。 门控循环单元GRU GRU(Gated Recurrent Unit,门控循环单元)是一种常用的循环神经网络变种,旨在解决标准 RNN 中梯度消失或梯度爆炸的问题,同时比 LSTM 结构更简单。 基本结构 GRU 通过两个门(gate)来控制信息的流动: 更新门 $z_t$: 控制当前隐藏状态需要保留多少来自过去的信息以及引入多少新的信息。 重置门 $r_t$: 决定如何结合新输入和过去的记忆,尤其是在产生候选隐藏状态时。 另外,GRU 计算一个候选隐藏状态 $\tilde{h}_t$,并结合更新门 $z_t$ 的信息,更新最终的隐藏状态 $h_t$。 隐藏状态更新公式 对于每个时间步 $t$,GRU 的计算过程通常包括以下步骤: 更新门 $z_t$ $$ z_t = \sigma(W_{xz} x_t + W_{hz} h_{t-1} + b_z) $$ 其中: $x_t$ 是当前时间步的输入; $h_{t-1}$ 是上一时刻的隐藏状态; $b_z$ 是偏置向量; $\sigma(\cdot)$ 是 sigmoid 函数,用于将输出限制在 $[0, 1]$ 区间。 重置门 $r_t$ $$ r_t = \sigma(W_{xr} x_t + W_{hr} h_{t-1} + b_r) $$ 其中参数意义与更新门类似,重置门决定忘记多少过去的信息。 候选隐藏状态 $\tilde{h}_t$ $$ \tilde{h}t = \tanh(W{xh} x_t + W_{hh} (r_t \odot h_{t-1}) + b_h) $$ 这里: $r_t \odot h_{t-1}$ 表示重置门 $r_t$ 和上一时刻隐藏状态的逐元素相乘(Hadamard 乘积),用以调制历史信息的影响; $\tanh(\cdot)$ 激活函数,用来生成候选隐藏状态,将输出限制在 $[-1, 1]$。 最终隐藏状态 $h_t$ GRU 结合更新门和候选隐藏状态更新最终隐藏状态: $$ h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t. $$ 这表明更新门 $z_t$ 决定了新信息 $\tilde{h}t$ 与旧信息 $h{t-1}$ 的比例。 公式 GRU 更新公式如下: $$ \begin{aligned} z_t &= \sigma(W_{xz} x_t + W_{hz} h_{t-1} + b_z), \\ r_t &= \sigma(W_{xr} x_t + W_{hr} h_{t-1} + b_r), \\ \tilde{h}_t &= \tanh(W_{xh} x_t + W_{hh}(r_t \odot h_{t-1}) + b_h), \\ h_t &= (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t. \end{aligned} $$ 长短时记忆网络LSTM LSTM 是一种常用的循环神经网络变种,专门为解决标准 RNN 中的梯度消失问题而设计。它通过引入额外的“记忆单元”和多个门控机制,有效地控制信息的保存、遗忘和输出,从而捕捉长距离的依赖关系。 基本结构 LSTM 的核心在于其“细胞状态”(cell state),这是一个贯穿整个序列传递的信息流,同时有三个主要的门(gate)来控制细胞状态的更新过程: 遗忘门 $f_t$ 决定当前时间步需要遗忘多少之前的记忆信息。 输入门 $i_t$ 决定当前时间步有多少新的信息写入细胞状态。 输出门 $o_t$ 决定当前时间步从细胞状态中输出多少信息作为隐藏状态。 此外,还引入了一个候选细胞状态 $\tilde{c}_t$ 用于更新细胞状态。 隐藏状态更新公式 对于每个时间步 $t$,LSTM 的更新过程通常可以写为以下公式(所有权重矩阵用 $W$ 和 $U$ 表示,各门的偏置为 $b$): $$ \begin{aligned} \textbf{遗忘门:} \quad f_t = \sigma\Big(W_{xf}\, x_t + W_{hf}\, h_{t-1} + b_f\Big) \\ \textbf{输入门:} \quad i_t = \sigma\Big(W_{xi}\, x_t + W_{hi}\, h_{t-1} + b_i\Big) \\ \textbf{输出门:} \quad o_t = \sigma\Big(W_{xo}\, x_t + W_{ho}\, h_{t-1} + b_o\Big) \\\\ \textbf{候选细胞状态:} \quad \tilde{c}_t = \tanh\Big(W_{xc}\, x_t + W_{hc}\, h_{t-1} + b_c\Big) \\ \textbf{细胞状态更新:} \quad c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t \\ \textbf{隐藏状态:} \quad h_t = o_t \odot \tanh(c_t) \end{aligned} $$ 连续传递 在时间步 $t$ 中计算出的隐藏状态 $h_t$ 会作为下一时间步 $t+1$ 的输入之一,与当前输入 $x_{t+1}$ 一起用于后续计算。这样,每个 $h_t$ 都包含了前面所有时间步的信息,从而实现信息的传递和累积。 最终输出预测 如果任务是做序列到单个输出(例如分类、回归等),通常最后一个时间步(即 $h_T$)会用作整个序列的表示,并作为最终的特征传递给预测层(如全连接层)进行输出预测。但需要注意的是,在一些任务中,比如序列标注或序列生成,每个时间步的隐藏状态都可能参与输出预测或进一步处理。 直观理解 细胞状态 $c_t$: 细胞状态是贯穿整个序列的“记忆通道”,负责长期保存信息。它像一条传送带,在不同时间步中线性传递,避免信息被频繁修改,从而维持长期记忆。 隐藏状态$h_t$: 代表的是当前时间步的输出或者说是短时记忆。它是基于当前输入以及细胞状态经过非线性激活处理后的结果,反映了对当前时刻输入信息的即时响应。 遗忘门 $f_t$: 用于丢弃上一时刻不再需要的信息。如果遗忘门输出接近 0,说明遗忘了大部分过去的信息;如果接近 1,则保留大部分信息。 类比:若模型遇到新段落,遗忘门可能关闭(输出接近0),丢弃前一段的无关信息;若需要延续上下文(如故事主线),则保持开启(输出接近1)。 输入门 $i_t$ 和候选细胞状态 $\tilde{c}_t$: 输入门控制有多少候选信息被写入细胞状态。候选细胞状态是基于当前输入和上一时刻隐藏状态生成的新信息。 类比:阅读时遇到关键情节,输入门打开,将新信息写入长期记忆(如角色关系),同时候选状态 $\tilde{c}_t$提供新信息的候选内容。 输出门 $o_t$: 控制从细胞状态中输出多少信息作为当前时间步的隐藏状态。隐藏状态 $h_t$ 通常用于后续计算(例如,生成输出、参与下一时刻计算)。 类比:根据当前任务(如预测下一个词),输出门决定暴露细胞状态的哪部分(如只关注时间、地点等关键信息)。 双层或多层LSTM 双层 LSTM 是指将两个 LSTM 层堆叠在一起: 第一层 LSTM 处理输入序列 $x_1, x_2, \ldots, x_T$ 后,生成每个时间步的隐藏状态 $h_t^{(1)}$。 第二层 LSTM 以第一层输出的隐藏状态序列 ${h_1^{(1)}, h_2^{(1)}, \ldots, h_T^{(1)}}$ 作为输入,进一步计算新的隐藏状态 $h_t^{(2)}$。 作用与优势: 捕捉更复杂的模式 第一层:提取低层次特征(如局部变化、短时依赖)。 第二层:整合低层特征,捕捉长距离依赖或抽象模式。 更强的表达能力 通过多层堆叠,网络能建模更复杂的序列数据映射关系。 时序卷积网络TCN TCN是一种专为处理序列数据设计的深度学习架构。它通过结合因果卷积、扩张卷积和残差连接,解决了传统RNN和LSTM在并行化能力和梯度稳定性上的局限性。 卷积操作:与 RNN 逐步递归处理序列不同,TCN 利用一维卷积一次性对整个序列进行并行处理,这使得训练时可以充分利用硬件的并行计算能力。 1. 因果卷积(Causal Convolution) 因果卷积确保模型在预测时刻$t$的数据时,仅使用$t$时刻之前的信息,避免未来数据泄漏。 因果卷积类似于一个滑动窗口(窗口大小=$k$),每次用当前和过去的$k-1$个值加权求和,生成当前时刻的输出。 通过以下调整保证因果性: 卷积核方向:仅对当前及过去的时间步进行卷积。 填充(Padding):在输入序列的左侧填充 $(k-1)$ 个零($k$ 为卷积核大小),确保输出长度与输入一致,且不泄露未来信息。 公式定义: 对于卷积核 $W \in \mathbb{R}^k$ 和输入 $X \in \mathbb{R}^T$,因果卷积的输出 $Y \in \mathbb{R}^T$ 为: $$ Y_t = \sum_{i=0}^{k-1} W_i \cdot X_{t-i} \quad \text{(若 } t-i < 0 \text{,则 } X_{t-i}=0 \text{)} $$ 示例: 输入序列 $X$: [x0, x1, x2, x3](长度 $T=4$) 卷积核 $W$: [w0, w1, w2](大小 $k=3$) 输出 $Y$: [y0, y1, y2, y3](与输入长度相同) 输入填充:左侧补 k−1=2k−1=2 个零,得到 [0, 0, x0, x1, x2, x3] 通常卷积核需要翻转::[w2, w1, w0] 计算 $y_0$($t=0$): $$ y_0 = w0 \cdot x0 + w1 \cdot 0 + w2 \cdot 0 = w0 \cdot x0 $$ 计算 $y_1$($t=1$): $$ y_1 = w0 \cdot x1 + w1 \cdot x0 + w2 \cdot 0 $$ 计算 $y_2$($t=2$): $$ y_2 = w0 \cdot x2 + w1 \cdot x1 + w2 \cdot x0 $$ 计算 $y_3$($t=3$): $$ y_3 = w0 \cdot x3 + w1 \cdot x2 + w2 \cdot x1 $$ 最终输出 $$ Y = \left[ w0 x0, \; w0 x1 + w1 x0, \; w0 x2 + w1 x1 + w2 x0, \; w0 x3 + w1 x2 + w2 x1 \right] $$ 2. 扩张卷积(Dilated Convolution) 通过膨胀因子 $d$在卷积核元素之间插入空洞(间隔),从而在不增加参数量的情况下扩大感受野。 传统卷积($d=1$):连续覆盖 $k$ 个时间步(如 $X_t, X_{t-1}, X_{t-2}$)。 扩张卷积($d>1$):跳跃式覆盖,跳过中间部分时间步(如 $X_t, X_{t-d}, X_{t-2d}$)。 公式定义: $$ Y_t = \sum_{i=0}^{k-1} W_i \cdot X_{t-d\cdot i} \quad $$ 3. 残差连接(Residual Connection) TCN借鉴ResNet,通过残差块缓解梯度消失问题。 公式定义: $$ \text{Output} = \sigma\bigl(F(x) + W_{1\times1} x \bigr) $$ $F(x)$:卷积层的输出 $\sigma$:激活函数(通常为ReLU) $W_{1\times1}$:1×1卷积核,用于调整输入$x$的维度 $x$:原始输入
论文
zy123
3月21日
0
6
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
2