首页
关于
Search
1
同步本地Markdown至Typecho站点
55 阅读
2
微服务
38 阅读
3
苍穹外卖
27 阅读
4
JavaWeb——后端
24 阅读
5
消息队列MQ
18 阅读
后端学习
项目
杂项
科研
论文
默认分类
登录
推荐文章
推荐
拼团设计模式
项目
8月11日
0
7
0
推荐
拼团交易系统
项目
6月20日
0
21
1
推荐
Smile云图库
项目
6月7日
0
27
0
热门文章
55 ℃
同步本地Markdown至Typecho站点
项目
3月22日
0
55
0
38 ℃
微服务
后端学习
3月21日
0
38
0
27 ℃
苍穹外卖
项目
3月21日
0
27
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}$ 降低) GIN 1. 背景与动机 GCN / GraphSAGE 的聚合(mean / max)并不是 注入函数(injective function),因此可能会把不同的邻居多重集(multiset)映射成同一个表示。 这导致它们在表达能力上不如 Weisfeiler-Lehman (WL) 图同构测试。 GIN 的目标是:设计一种邻居聚合方式,使得 GNN 的判别能力 与 WL 测试等价,达到目前已知的最强表达力 2. 什么是 WL 测试? WL(Weisfeiler–Lehman)测试,也叫 颜色精炼(color refinement),是一个图同构判别算法。 目标:判断两个图是否同构(结构上完全相同)。 核心思想:迭代地更新节点“标签”,直到稳定: 初始:每个节点有一个标签(例如节点特征,或者都相同)。 更新:每个节点的新标签 = 自身标签 + 邻居标签的集合(哈希成一个新颜色)。 重复:不同的邻居结构会得到不同的标签。 结论:如果在某一轮,两个图的节点标签分布不同,就判定它们不是同构的。 否则(如果一直相同),可能同构,也可能 WL 分不出来(WL 并不是完美算法)。 👉 直观理解:WL 就是通过邻居聚合来区分节点/图结构。 这和 GNN 的消息传递(message passing)几乎是一样的! GIN 就是用 sum + MLP 精确模拟了 WL 的“注入式聚合”,因此它能达到和 WL 一样强的区分力。 举例 A / \ B C 初始节点特征: A: red B: blue C: blue 1)WL 测试开始时,每个节点用自己的初始特征(颜色)作为标签。 2)第 1 轮更新 规则:新标签 = 节点自己的颜色 + 邻居颜色的集合 (然后哈希成一个新的颜色/编码) A 的邻居是 {B, C} = {blue, blue} → 新标签 = (red, {blue, blue}) B 的邻居是 {A} = {red} → 新标签 = (blue, {red}) C 的邻居是 {A} = {red} → 新标签 = (blue, {red}) 更新后: A: 新颜色 α B: 新颜色 β C: 新颜色 β 3)第 2 轮更新 继续相同规则: A 的邻居是 {B, C} = {β, β} → 新标签 = (α, {β, β}) B 的邻居是 {A} = {α} → 新标签 = (β, {α}) C 的邻居是 {A} = {α} → 新标签 = (β, {α}) 更新后: A: 新颜色 γ B: 新颜色 δ C: 新颜色 δ WL 的作用:它让节点的标签逐步编码了“以自己为根的邻居子树结构”。 A 的标签区分了“自己 + 两个相同邻居”。 B 和 C 的标签相同,因为它们对称,结构一样。 3. GIN 的核心公式 节点更新: $h_v^{(k)} = \text{MLP}^{(k)} \Big( (1 + \epsilon^{(k)}) \cdot h_v^{(k-1)} + \sum_{u \in \mathcal{N}(v)} h_u^{(k-1)} \Big) \tag{4.1}$ $h_v^{(k)}$:节点 $v$ 在第 $k$ 层的表示。 $\epsilon^{(k)}$:可学习或固定的标量(常见取 0)。 $\sum$:对邻居特征求和 → sum aggregator,是注入函数。 $\text{MLP}^{(k)}$:多层感知机,用来提升非线性表达能力。 图级读出(graph-level readout): $h_G = \text{CONCAT}\Big(\text{READOUT}\big({ h_v^{(k)} ,|, v \in G}\big) ;|; k=0,1,\dots,K \Big) \tag{4.2}$ 将不同层的节点表示分别做 READOUT(一般是 sum),再拼接。 这样能保留从局部到全局的多尺度子结构信息。 4. 关键思想解析 (1) 为什么用 Sum Aggregator? Sum 是注入的(injective):不同的邻居 multiset,会得到不同的和。 Mean 只能捕捉分布(比例),区分不了节点数。 Max 只保留去重后的集合,丢失了重复性。 (2) ε 的作用 $(1 + \epsilon)$ 用于控制中心节点自身特征在聚合中的权重。 如果固定 $\epsilon=0$ → 模型称为 GIN-0。 如果 $\epsilon$ 可学习 → 称为 GIN-ε。 实验表明:GIN-0 泛化能力稍微更好,但两者训练拟合力差不多。 (3) 与 WL 测试的关系 WL 测试迭代地“哈希邻居标签”。 GIN 用 MLP + sum 聚合 模拟了这个注入映射,因此理论上等价于 WL 测试,即:GIN 是目前表达能力最强的消息传递型 GNN。 直推式学习与归纳式学习 直推式学习(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
13
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
液态神经网络
液态神经网络 连续时间递归神经网络(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
数学基础
数学基础 求解一阶非齐线性微分方程 考虑方程 $$ y' + y = x $$ 第一步:求齐次方程的通解 先求对应的齐次方程 $$ y' + y = 0 $$ 其解为 $$ y_h = Ce^{-x} $$ 其中 $C$ 为任意常数。 第二步:设特解形式 利用常数变易法,令特解取形式 $$ y_p = u(x) e^{-x} $$ 其中 $u(x)$ 为待定函数。 第三步:求导并代入原方程 计算 $y_p$ 的导数: $$ y_p' = u'(x)e^{-x} - u(x)e^{-x} $$ 将 $y_p$ 和 $y_p'$ 代入原方程 $y' + y = x$: $$ \bigl[u'(x)e^{-x} - u(x)e^{-x}\bigr] + u(x)e^{-x} = u'(x)e^{-x} = x $$ 因此有: $$ u'(x) = x e^ $$ 第四步:求 $u(x)$ 对 $u'(x)$ 积分: $$ u(x) = \int x e^ dx $$ 计算积分,可以用分部积分法:令 $$ \begin{cases} u = x, \quad dv = e^x dx,\\[1mm] du = dx, \quad v = e^x, \end{cases} $$ 得: $$ \int x e^x dx = x e^x - \int e^x dx = x e^x - e^x + C_1 = e^x (x-1) + C_1 $$ 注意这里求得的常数 $C_1$可以忽略,因为它会与齐次解合并。故我们取 $$ u(x) = e^x (x-1) $$ 第五步:构造特解并给出通解 将 $u(x)$ 带回特解形式: $$ y_p = u(x)e^{-x} = e^x (x-1) e^{-x} = x-1 $$ 因此,原方程的通解为齐次解与特解的和: $$ y = y_h + y_p = Ce^{-x} + (x-1) $$ 梯度下降 我们可以用一个简单的线性层作为例子,展示如何利用向量和矩阵计算梯度并更新参数。假设有一个全连接层,其计算公式为 $$ y = W x + b $$ 其中 $x \in \mathbb{R}^2$ 是输入向量 $W \in \mathbb{R}^{2\times2}$ 是权重矩阵 $b \in \mathbb{R}^2$ 是偏置向量 $y \in \mathbb{R}^2$ 是输出向量 我们使用均方误差(MSE)作为损失函数,定义为 $$ L = \frac{1}{2} \|y - y_{\text{true}}\|^2 = \frac{1}{2} \sum_{i=1}^{2}(y_i - y_{\text{true}, i})^2 $$ 设定具体数值 输入向量: $$ x = \begin{pmatrix} 1 \\ 2 \end{pmatrix} $$ 权重矩阵: $$ W = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} $$ 偏置向量: $$ b = \begin{pmatrix} 1 \\ 1 \end{pmatrix} $$ 真实输出: $$ y_{\text{true}} = \begin{pmatrix} 7 \\ 13 \end{pmatrix} $$ 步骤 1:前向传播 计算输出 $y$: $$ y = W x + b = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \begin{pmatrix} 1 \\ 2 \end{pmatrix} + \begin{pmatrix} 1 \\ 1 \end{pmatrix} $$ 首先计算矩阵乘法: $$ W x = \begin{pmatrix} 1\cdot1 + 2\cdot2 \\ 3\cdot1 + 4\cdot2 \end{pmatrix} = \begin{pmatrix} 1+4 \\ 3+8 \end{pmatrix} = \begin{pmatrix} 5 \\ 11 \end{pmatrix} $$ 再加上偏置 $b$ 得到 $$ y = \begin{pmatrix} 5+1 \\ 11+1 \end{pmatrix} = \begin{pmatrix} 6 \\ 12 \end{pmatrix} $$ 计算损失 $L$: $$ L = \frac{1}{2} \left[(6-7)^2 + (12-13)^2\right] = \frac{1}{2} \left[(-1)^2 + (-1)^2\right] = \frac{1}{2} (1+1) = 1 $$ 步骤 2:反向传播,计算梯度 首先,我们定义误差向量为 $$ e = y - y_{\text{true}} = \begin{pmatrix} 6-7 \\ 12-13 \end{pmatrix} = \begin{pmatrix} -1 \\ -1 \end{pmatrix} $$ 由于损失函数 $$ L = \frac{1}{2}\|y - y_{\text{true}}\|^2 $$ 对 $y$ 的偏导数为 $$ \frac{\partial L}{\partial y} = y - y_{\text{true}} = e = \begin{pmatrix} -1 \\ -1 \end{pmatrix} $$ 接下来,我们利用链式法则将梯度传递到 $W$ 和 $b$。 1. 梯度对 $W$ 的求导 对于输出层有 $$ y = W x + b $$ 每个元素 $y_i$ 对 $W_{ij}$ 的偏导数为 $$ \frac{\partial y_i}{\partial W_{ij}} = x_j $$ 利用链式法则,损失对 $W_{ij}$ 的梯度为 $$ \frac{\partial L}{\partial W_{ij}} = \frac{\partial L}{\partial y_i} \cdot \frac{\partial y_i}{\partial W_{ij}} = e_i \, x_j $$ 用矩阵形式写就是: $$ \frac{\partial L}{\partial W} = e \cdot x^\top $$ 将数值代入: $$ e = \begin{pmatrix} -1 \\ -1 \end{pmatrix}, \quad x^\top = \begin{pmatrix} 1 & 2 \end{pmatrix} $$ 所以, $$ \frac{\partial L}{\partial W} = \begin{pmatrix} -1 \\ -1 \end{pmatrix} \begin{pmatrix} 1 & 2 \end{pmatrix} = \begin{pmatrix} -1\cdot1 & -1\cdot2 \\ -1\cdot1 & -1\cdot2 \end{pmatrix} = \begin{pmatrix} -1 & -2 \\ -1 & -2 \end{pmatrix} $$ 2.梯度对 $b$ 的求导 由于 $y = W x + b$,且对 $b$ 的偏导数为 1, $$ \frac{\partial L}{\partial b} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial b} = e \cdot 1 = e = \begin{pmatrix} -1 \\ -1 \end{pmatrix} $$ 步骤 3:使用梯度下降更新参数 设定学习率 $\eta = 0.1$,更新公式为 $$ W_{\text{new}} = W - \eta \frac{\partial L}{\partial W}, \quad b_{\text{new}} = b - \eta \frac{\partial L}{\partial b} $$ 更新 $W$ $$ W_{\text{new}} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} - 0.1 \cdot \begin{pmatrix} -1 & -2 \\ -1 & -2 \end{pmatrix} = \begin{pmatrix} 1 + 0.1 & 2 + 0.2 \\ 3 + 0.1 & 4 + 0.2 \end{pmatrix} = \begin{pmatrix} 1.1 & 2.2 \\ 3.1 & 4.2 \end{pmatrix} $$ 更新 $b$ $$ b_{\text{new}} = \begin{pmatrix} 1 \\ 1 \end{pmatrix} - 0.1 \cdot \begin{pmatrix} -1 \\ -1 \end{pmatrix} = \begin{pmatrix} 1 + 0.1 \\ 1 + 0.1 \end{pmatrix} = \begin{pmatrix} 1.1 \\ 1.1 \end{pmatrix} $$ 总结 在这个例子中,我们展示了如何用向量和矩阵的形式计算一个简单全连接层的前向传播、损失以及对参数 $W$ 和 $b$ 的梯度。关键步骤如下: 前向传播:计算 $y = W x + b$ 得到输出,再计算损失 $L = \frac{1}{2}|y - y_{\text{true}}|^2$ 反向传播: 计算误差向量 $e = y - y_{\text{true}}$ 利用链式法则得出梯度: $\frac{\partial L}{\partial W} = e \cdot x^\top$ $\frac{\partial L}{\partial b} = e$ 参数更新:通过梯度下降将参数沿负梯度方向调整 这样,我们就得到了更新后的参数 $W_{\text{new}}$ 和 $b_{\text{new}}$。这种向量或矩阵形式的梯度计算方法在真实神经网络中是普遍应用的,能够有效处理高维数据和大规模参数。 期望、方差、协方差 期望 $$ E(X) = \sum_{i} x_i \cdot P(x_i) $$ 其中: $x_i$ 是随机变量$X$ 的取值, $P(x_i)$ 是 $x_i$ 发生的概率。 性质 线性性: $$ E(aX + bY) = aE(X) + bE(Y) $$ 独立变量: $$ E(XY) = E(X)E(Y) \quad (\text{当}X,Y\text{独立时}) $$ 常数处理: $$ E(c) = c $$ 方差 标准差 $$ \sigma =\sqrt{\frac{\textstyle\sum_{i=1}^{n}{( _{i}-\overline )}^{2}}{n}} $$ 方差 它是一个标量,表示一个单一随机变量的变动程度。 $$ Var(X)=\mathrm{E}[{(X-\mu) }^{2}]= {\sigma}^{2} $$ 性质 $$ Var(X)=\mathrm{E}({X}^{2})-{[\mathrm{E}(X)]}^{2} \\ Var(kX)={k}^{2}Var(X) $$ 若X和Y是独立的随机变量 $$ Var(X+Y)=Var(X)+Var(Y) $$ 协方差 给定两个随机变量 $X$ 和 $Y$,其协方差计算公式为: $$ \text{Cov}(X,Y) = \sum_{i=1}^n (x_i - \mu_X)(y_i - \mu_Y) $$ 其中: $x_i, y_i$ 为观测值 $\mu_X, \mu_Y$ 分别为 $X$ 和 $Y$ 的样本均值 直观理解:如果有$X$,$Y$两个变量,$X$增大,$Y$也倾向于增大,$Cov(X,Y)>0$,正相关;$X$增加,$Y$倾向于减小->负相关;否则不相关。 推广:概率分布中的协方差 $\text{Cov}(X,Y) =\sum_{i=1}^n {p}{i}( {i}-{\mu }{\mathrm{X}})({\mathcal{y}}{i}-{\mu }_{Y})=E\left[(X-\mu_X)(Y-\mu_Y)\right]$ 性质 对称性 $$ \text{Cov}(X, Y) = \text{Cov}(Y, X) $$ 协方差的计算与变量顺序无关 线性性 $$ \text{Cov}(aX + b, cY + d) = ac \cdot \text{Cov}(X, Y) $$ 零自协方差 $$ \text{Cov}(X, X) = \text{Var}(X) $$ 分解性 $$ \text{Cov}(X_1 + X_2, Y) = \text{Cov}(X_1, Y) + \text{Cov}(X_2, Y) $$ 标量倍数 $$ \text{Cov}(aX, bY) = ab \cdot \text{Cov}(X, Y) $$ $\text{cov}(AX, AX) = A\text{cov}(X, X)A^T$ 推导: (1) 展开协方差定义 $$ \text{cov}(AX, AX) = \mathbb{E}[(AX - \mathbb{E}[AX])(AX - \mathbb{E}[AX])^T] $$ (2) 线性期望性质 $$ \mathbb{E}[AX] = A\mathbb{E}[X] \\ \Rightarrow AX - \mathbb{E}[AX] = A(X - \mathbb{E}[X]) $$ (3) 代入展开式 $$ = \mathbb{E}[A(X - \mathbb{E}[X])(A(X - \mathbb{E}[X]))^T] \\ = \mathbb{E}[A(X - \mathbb{E}[X])(X - \mathbb{E}[X])^T A^T] $$ (4) 提取常数矩阵 $$ = A \mathbb{E}[(X - \mathbb{E}[X])(X - \mathbb{E}[X])^T] A^T $$ (5) 协方差矩阵表示 $$ = A \text{cov}(X, X) A^T $$ 协方差矩阵 对于一个随机向量 $\mathbf{X} = [X_1, X_2, \dots, X_n]^T$,其中 $X_1, X_2, \dots, X_n$ 是 $n$ 个随机变量,协方差矩阵 $\Sigma$ 是一个 $n \times n$ 的矩阵,其元素表示不同随机变量之间的协方差。 (注意:每对变量指的是$\mathbf{X}$中任意两个分量之间的组合,如$X_1, X_2$) 协方差矩阵的元素是通过计算每对随机变量之间的协方差来获得的。协方差矩阵 $\Sigma$ 的元素可以表示为: $$ \Sigma = \begin{bmatrix} \text{Cov}(X_1, X_1) & \text{Cov}(X_1, X_2) & \dots & \text{Cov}(X_1, X_n) \\ \text{Cov}(X_2, X_1) & \text{Cov}(X_2, X_2) & \dots & \text{Cov}(X_2, X_n) \\ \vdots & \vdots & \ddots & \vdots \\ \text{Cov}(X_n, X_1) & \text{Cov}(X_n, X_2) & \dots & \text{Cov}(X_n, X_n) \\ \end{bmatrix} $$ 其中: 对角线上的元素 $\text{Cov}(X_i, X_i)$ 是每个变量的方差,即 $\text{Var}(X_i)$。 非对角线上的元素 $\text{Cov}(X_i, X_j)$ 是变量 $X_i$ 和 $X_j$ 之间的协方差。 计算举例 假设我们有 3 个特征($n=3$)和 4 个样本($m=4$),则数据矩阵 $X$ 的构造如下: $$ X = \begin{bmatrix} x_1^{(1)} & x_1^{(2)} & x_1^{(3)} & x_1^{(4)} \\ x_2^{(1)} & x_2^{(2)} & x_2^{(3)} & x_2^{(4)} \\ x_3^{(1)} & x_3^{(2)} & x_3^{(3)} & x_3^{(4)} \end{bmatrix} $$ 假设特征为: 第1行 $x_1$:身高(cm) 第2行 $x_2$:体重(kg) 第3行 $x_3$:年龄(岁) 对应4个样本(人)的数据: $$ X = \begin{bmatrix} 170 & 165 & 180 & 155 \\ 65 & 55 & 75 & 50 \\ 30 & 25 & 40 & 20 \end{bmatrix} $$ 中心化数据(每行减去均值): 计算每行均值: $$ \mu_1 = \frac{170+165+180+155}{4} = 167.5, \quad \mu_2 = 61.25, \quad \mu_3 = 28.75 $$ 中心化后的矩阵 $X_c$: $$ X_c = \begin{bmatrix} 2.5 & -2.5 & 12.5 & -12.5 \ 3.75 & -6.25 & 13.75 & -11.25 \ 1.25 & -3.75 & 11.25 & -8.75 \end{bmatrix} $$ 计算协方差矩阵: $$ \text{Cov} = \frac{1}{m} X_c X_c^T = \frac{1}{4} \begin{bmatrix} 2.5 & -2.5 & 12.5 & -12.5 \ 3.75 & -6.25 & 13.75 & -11.25 \ 1.25 & -3.75 & 11.25 & -8.75 \end{bmatrix} \begin{bmatrix} 2.5 & 3.75 & 1.25 \ -2.5 & -6.25 & -3.75 \ 12.5 & 13.75 & 11.25 \ -12.5 & -11.25 & -8.75 \end{bmatrix} $$ 最终结果(对称矩阵): $$ \text{Cov} \approx \begin{bmatrix} 93.75 & 100.31 & 62.50 \ 100.31 & 120.31 & 75.00 \ 62.50 & 75.00 & 48.44 \end{bmatrix} $$ 对角线是各特征的方差(如身高的方差为93.75) 非对角线是协方差(如身高与体重的协方差为100.31) 如何生成均值为0,协方差为Q的噪声? 生成标准正态随机变量 $$ \mathbf{Z} \sim \mathcal{N}(0, \mathbf{I}) $$ 进行线性变换 $$ \mathbf{w}_k = \sqrt{\mathbf{Q}} \cdot \mathbf{Z} $$ 其中 $\sqrt{\mathbf{Q}}$ 是 $\mathbf{Q}$ 的矩阵平方根。 验证其协方差确实为Q: $$ \begin{aligned} \text{Cov}(\mathbf{w}_k) &= \mathbb{E}[\mathbf{w}_k\mathbf{w}_k^T] \ &= \sqrt{\mathbf{Q}} \cdot \mathbb{E}[\mathbf{Z}\mathbf{Z}^T] \cdot \sqrt{\mathbf{Q}}^T \ &= \sqrt{\mathbf{Q}} \cdot \mathbf{I} \cdot \sqrt{\mathbf{Q}}^T \ &= \mathbf{Q} \end{aligned} $$ Python代码示例 import numpy as np # 定义协方差矩阵 Q = np.array([[0.1, 0.05], [0.05, 0.2]]) # Cholesky分解 L = np.linalg.cholesky(Q) # L @ L.T = Q # 生成标准正态随机数 Z = np.random.randn(2) # 生成目标噪声 w = L @ Z # 等价于 np.dot(L, Z) 概率密度函数 定义: 概率密度函数是描述连续型随机变量在某个取值点附近的可能性"密度"的函数。注意: PDF在某一点的值不是概率,而是概率的"密度"。 实际概率是通过对PDF在某个区间内积分得到的(比如 $P(a \leq X \leq b) = \int_a^b f(x)dx$)。 PDF的全域积分必须等于1(即所有可能性的总和为100%)。 例子: 假设某人的每日通勤时间 $X$ 是一个连续随机变量,其PDF可能是一个钟形曲线(如正态分布)。PDF在 $x=30$ 分钟处的值 $f(30)$ 表示"30分钟附近"的概率密度,而 $P(25 \leq X \leq 35)=0.4$ 表示约有40%的概率通勤时间会落在这个区间。 指数分布 定义: 指数分布是一种常见的连续型概率分布,通常用于描述"事件间隔时间"或"无记忆性"的过程。比如: 客服电话的间隔时间。 灯泡的寿命。 地震发生的间隔时间。 概率密度函数(PDF): 指数分布的PDF公式为: $$ f(x) = \lambda e^{-\lambda x} \quad (x \geq 0) $$ 其中: $\lambda$ 是率参数(单位时间内事件发生的平均次数)。 $1/\lambda$ 是事件的平均间隔时间。 无记忆性:已经等待了时间 $t$,再等待额外时间 $s$ 的概率与从头开始等待 $s$ 的概率相同(即 $P(X > t+s \mid X > t) = P(X > s)$)。 例子: 假设某网站用户访问的间隔时间服从 $\lambda = 0.5$(平均每2分钟1次访问),则: PDF为 $f(x) = 0.5 e^{-0.5x}$。 用户在接下来1分钟内访问的概率是 $P(0 \leq X \leq 1) = \int_0^1 0.5 e^{-0.5x} dx \approx 0.393$。 高斯分布 高斯分布的概率密度函数: $$ \mathcal{f}(\mathcal )=\frac{1}{\sqrt{2\pi }\sigma }\exp \begin{pmatrix}-\frac{{(x-u)}^{2}}{2{\sigma }^{2}} \end{pmatrix} $$ x 在 μ-σ 和 μ+σ 之间的样本数量占到整个样本数量的 68.2%; x 在 μ-2σ 和 μ+2σ 之间的样本数量占到整个样本数量的 95.4%; x 在 μ-3σ 和 μ+3σ 之间的样本数量占到整个样本数量的99.6%; 数据融合 当前最优值=当前的先验估计值和观测值进行融合 我们通常会尝试最小化方差,以尽可能减小状态估计的不确定性,从而获得更可靠和准确的估计结果 拉普拉斯变换 拉普拉斯变换的定义 对于一个给定的时间域函数 ( f(t) ),其拉普拉斯变换 ( F(s) ) 定义为: $$ F(s) = \int_{0}^{\infty} e^{-st}f(t) \, dt $$ 这里的 ( s ) 是一个复数,通常写作 $ s = \sigma + j\omega $,其中 $\sigma$ 和 $ \omega $ 分别是实部和虚部。 拉普拉斯变换的作用 简化微分方程:拉普拉斯变换可以将微分方程转换为代数方程,从而简化求解过程。 系统分析:在控制理论中,拉普拉斯变换用来分析系统的稳定性和频率响应。 信号处理:在信号处理中,拉普拉斯变换帮助分析信号的频谱和系统的滤波特性。 例子:单一指数函数的拉普拉斯变换 假设有一个函数 $f(t) = e^{-at} $(其中 ( a ) 是一个正常数),我们想计算它的拉普拉斯变换。根据拉普拉斯变换的定义: $$ F(s) = \int_{0}^{\infty} e^{-st}e^{-at} \, dt = \int_{0}^{\infty} e^{-(s+a)t} \, dt $$ 这个积分可以解为: $$ F(s) = \begin{bmatrix} \frac{e^{-(s+a)t}}{-(s+a)} \end{bmatrix}_{0}^{\infty} = \frac{1}{s+a} $$ 因为当 $ t \to \infty $ 时,$ e^{-(s+a)t} $ 趋向于 0,前提是 $ Re(s+a) > 0 $(即 $s $ 的实部加 $ a $ 必须是正的)。 拉普拉斯矩阵 拉普拉斯矩阵及其性质 对于一个无向图 $G = (V, E)$,其拉普拉斯矩阵 $L$ 通常定义为 $$ L = D - A, $$ 其中: $D$是度矩阵,一个对角矩阵,其对角元 ($d_i$) 为顶点 $i$ 的度数; $A$是邻接矩阵,反映了图中各顶点之间的连接关系。 示例: 考虑一个简单的无向图,该图包含三个顶点:1, 2, 3,以及两条边: - 边 (1, 2) - 边 (2, 3) 邻接矩阵 (A) $$ A = \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix}. $$ 度矩阵 (D) $$ D = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{pmatrix}. $$ 拉普拉斯矩阵 (L) 将上面两个矩阵相减得到 $$ L = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{pmatrix} - \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} = \begin{pmatrix} 1 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 1 \end{pmatrix}. $$ 令常数向量 $$ \mathbf{1} = \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}, $$ 则有 $$ L\mathbf{1} = \begin{pmatrix} 1 \cdot 1 + (-1) \cdot 1 + 0 \cdot 1 \\ -1 \cdot 1 + 2 \cdot 1 + (-1) \cdot 1 \\ 0 \cdot 1 + (-1) \cdot 1 + 1 \cdot 1 \end{pmatrix} = \begin{pmatrix} 1 - 1 + 0 \\ -1 + 2 - 1 \\ 0 - 1 + 1 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}. $$ 这说明常数向量 $\mathbf{1}$ 是 $L$ 的零空间中的一个向量,即零特征值对应的特征向量。 主要性质 对称性 由于对于无向图,邻接矩阵 (A) 是对称的,而度矩阵 (D) 本身也是对称的(因为它是对角矩阵),所以拉普拉斯矩阵 $L$ 也是对称矩阵。 正半定性 对于任意实向量 $x$,都有: $$ x^T L x = \sum_{(i,j) \in E} (x_i - x_j)^2 \ge 0. $$ 这说明 $L$ 是正半定矩阵,即其所有特征值均非负。 零特征值与连通分量 对于任意图,都有 $$ L \mathbf{1} = \mathbf{0}, $$ 其中 $\mathbf{1} = (1, 1, \ldots, 1)^T$,因此 $0$ 一定是 $L$ 的一个特征值。 因为拉普拉斯矩阵的定义为 $L = D - A$,其中每一行的元素之和为零,所以当向量所有分量都相等时,每一行的加权求和自然等于零。 更进一步,零特征值的重数等于图的连通分量(独立的子图)个数。也就是说,如果图 $G$ 有 $k$ 个连通分量,则 $L$ 的零特征值重数为 $k$ 。 简单证明思路 考虑图中每个连通分量,对于某个连通分量内的所有顶点,可以构造一个特征向量,使得在该连通分量中所有分量取相同常数,而在其他部分取零。由于该连通分量内部的任意两个顶点都是连通的,该特征向量满足 $Lx = 0$。这样,对于每个连通分量都可以构造出一个线性无关的零特征值特征向量,从而零特征值的重数至少为连通分量的数量;进一步证明可以证明重数不会超过这个数量。 谱分解及应用 由于 $L$ 是对称正半定矩阵,其可以进行谱分解: $$ L = U \Lambda U^T, $$ 其中$U$ 是**正交矩阵**,$\Lambda$ 是包含 $L$ 所有非负特征值的**对角矩阵**。 这一性质使得拉普拉斯矩阵在谱聚类、图分割等应用中非常有用。 总结 拉普拉斯矩阵 $L = D - A$是描述图结构的重要工具,具有如下主要性质: 对称性:$L$是对称矩阵; 正半定性:任意向量 $x$ 有 $x^T L x \ge 0$; 零特征值:$L$ 总有零特征值,且其重数与图的连通分量个数相等; 谱分解:$L$ 可进行正交谱分解,广泛应用于图的聚类与分割等领域。 这些性质不仅在理论上非常重要,而且在图论和数据分析等实际问题中有广泛的应用。 平均拉普拉斯矩阵: 归一化拉普拉斯矩阵 为了在某些应用中(例如谱聚类、图卷积网络等)获得更好的数值性质和归一化效果,我们可以构造 对称归一化拉普拉斯矩阵,记为 $L_{sym}$,定义为 $$ L_{sym} = D^{-1/2} L D^{-1/2} = I - D^{-1/2} A D^{-1/2}, $$ 其中 $D^{-1/2}$ 表示度矩阵的逆平方根, $I$ 为单位矩阵。 $$ D = \begin{pmatrix} 4 & 0 & 0 \\ 0 & 9 & 0 \\ 0 & 0 & 16 \end{pmatrix}. D^{-1/2} = \begin{pmatrix} \frac{1}{2} & 0 & 0 \ 0 & \frac{1}{3} & 0 \ 0 & 0 & \frac{1}{4} \end{pmatrix}. $$ 主要特点 归一化: 通过 $D^{-1/2}$ 的两侧预处理,将不同顶点的度数影响消除,使得矩阵在谱分解时能更好地反映图的结构。 对称性: $L_{sym}$ 是对称矩阵,这意味着它可以进行正交谱分解,其特征值均为实数。 谱性质: $L_{sym}$ 的特征值都位于区间 $[0, 2]$ 内。这一性质对于很多图论算法的稳定性和收敛性分析都非常重要。 Fiedler向量 根据谱分解理论,$L$ 的特征值满足 $$ x 0 = \lambda_1 \le \lambda_2 \le \cdots \le \lambda_n. $$ 其中,$\lambda_1 = 0$ 对应的特征向量通常为所有分量相同的常数向量。而 **Fiedler 向量** 就是对应于 $\lambda_2$ (第二小的特征值)的特征向量。 图的谱划分 构建图的拉普拉斯矩阵 根据给定的图结构,构建图的拉普拉斯矩阵 $L$。 计算 Fiedler 向量 求解拉普拉斯矩阵 $L$ 的第二小特征值对应的特征向量,即 Fiedler 向量。 根据 Fiedler 向量进行图划分 将 Fiedler 向量的元素按大小排序。 找到 Fiedler 向量元素值为 0 附近的分界点,将图划分为两个子图。 Fiedler 向量在连接紧密的顶点上的取值往往比较接近 $$ Fiedler 向量 :xv = \begin{pmatrix}0.8 \\0.7 \\0.6 \\-0.5 \\-0.6 \\-0.7\end{pmatrix}. $$ 正值部分:对应顶点 1, 2, 3; 负值部分:对应顶点 4, 5, 6。 经过这种划分后,通常会发现: 子图内部:顶点之间的连接较为紧密(边较多), 子图之间:连接较弱(边较少或只有一两条边)。 递归划分子图(可选) 对划分得到的两个子图,分别递归应用上述步骤(1-3步),进一步将其划分为更小的子图。 这样可以将原图层层划分为多个子图。 确定最终聚类结果 根据上述划分过程得到的多个子图,就对应了图的最终聚类结果。 每个子图内的节点被认为属于同一个聚类。 谱聚类 谱聚类的基本思想是通过图的特征向量将数据点映射到低维空间中,然后在这个低维空间中使用传统的聚类技术。 1.构造相似性图 数据表示: 给定数据点 ${x_1, x_2, \ldots, x_n}$。 相似性矩阵 $W$: 根据数据点之间的距离或相似性构造矩阵 $W$。常见方法包括: Gaussian 核函数: $$ W_{ij} = \exp\Bigl(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\Bigr), $$ 只有当 $x_i$ 与 $x_j$ 彼此接近时, $W_{ij}$ 才较大;衡量数据点之间的距离并将其映射为一个 [0, 1] 之间的相似性值。 其中 $\sigma$ 为尺度参数,当 $\sigma$ 较小时,只有非常接近的数据点才会被认为是相似的 K近邻图:仅连接每个点与其 $k$ 个最近邻之间的边,其余 $W_{ij} = 0$。 2.构造图拉普拉斯矩阵 - 对称归一化拉普拉斯矩阵 - 未归一化的拉普拉斯矩阵 3.计算特征向量 对选定的拉普拉斯矩阵(例如 $L_{sym}$)进行特征分解,求出前 $k$ 个最小特征值对应的特征向量。 注意:对于未归一化的拉普拉斯矩阵,零特征值对应的特征向量通常是常数向量,所以在分解时忽略这个解,选择第二小开始的 $k$ 个特征向量。 4.构造嵌入空间 形成矩阵 $U$: 将求得的 $k$ 个特征向量作为列组成矩阵 $$ U = \begin{pmatrix} u_1(1) & u_2(1) & \cdots & u_k(1) \\ u_1(2) & u_2(2) & \cdots & u_k(2) \\ \vdots & \vdots & \ddots & \vdots \\ u_1(n) & u_2(n) & \cdots & u_k(n) \end{pmatrix}. $$ 其中,每一行对应原数据点在低维空间中的表示。 归一化(可选): 对于对称归一化的情况,可以对 $U$ 的每一行做归一化处理,使得每一行变为单位向量,这一步有助于后续聚类的稳定性。 5.聚类 使用 k-means 等传统聚类算法: 在低维嵌入空间中,每一行表示一个数据点的低维表示,然后对这些点进行聚类。 得到每个数据点对应的簇标签。 谱聚类示例(6个数据点分成3类) 假设数据点为 $$ x_1=1,\quad x_2=2,\quad x_3=5,\quad x_4=6,\quad x_5=10,\quad x_6=11. $$ 直观上我们希望将它们分为3类: 类1:靠近 1、2 类2:靠近 5、6 类3:靠近 10、11 1. 构造相似性矩阵 $W$ 采用 Gaussian 核函数 $$ W_{ij}=\exp\Bigl(-\frac{(x_i-x_j)^2}{2\sigma^2}\Bigr). $$ 取 $\sigma=2$(参数可调),则分母为 $2\sigma^2=8$。 计算部分相似性(近似值): $x_1,x_2: ; |1-2|^2=1,\quad W_{12}=\exp(-1/8)\approx0.8825.$ $x_1,x_3: ; |1-5|^2=16,\quad W_{13}=\exp(-16/8)=\exp(-2)\approx0.1353.$ $x_1,x_4: ; |1-6|^2=25,\quad W_{14}=\exp(-25/8)\approx0.0439.$ $x_1,x_5: ; |1-10|^2=81,\quad W_{15}=\exp(-81/8)\approx0.00004.$ $x_1,x_6: ; |1-11|^2=100,\quad W_{16}=\exp(-100/8)\approx0.00001.$ $x_2,x_3: ; |2-5|^2=9,\quad W_{23}=\exp(-9/8)\approx0.3247.$ $x_2,x_4: ; |2-6|^2=16,\quad W_{24}=\exp(-16/8)=\exp(-2)\approx0.1353.$ $x_2,x_5: ; |2-10|^2=64,\quad W_{25}=\exp(-64/8)=\exp(-8)\approx0.000335.$ $x_2,x_6: ; |2-11|^2=81,\quad W_{26}=\exp(-81/8)\approx0.00004.$ $x_3,x_4: ; |5-6|^2=1,\quad W_{34}=\exp(-1/8)\approx0.8825.$ $x_3,x_5: ; |5-10|^2=25,\quad W_{35}=\exp(-25/8)\approx0.0439.$ $x_3,x_6: ; |5-11|^2=36,\quad W_{36}=\exp(-36/8)=\exp(-4.5)\approx0.0111.$ $x_4,x_5: ; |6-10|^2=16,\quad W_{45}=\exp(-16/8)=\exp(-2)\approx0.1353.$ $x_4,x_6: ; |6-11|^2=25,\quad W_{46}=\exp(-25/8)\approx0.0439.$ $x_5,x_6: ; |10-11|^2=1,\quad W_{56}=\exp(-1/8)\approx0.8825.$ 由于 $W$ 是对称矩阵,对角元一般取 0(或1,根据需求),我们构造相似性矩阵 $W$ 为 $$ W=\begin{pmatrix} 0 & 0.8825 & 0.1353 & 0.0439 & 0.00004 & 0.00001 \\ 0.8825 & 0 & 0.3247 & 0.1353 & 0.000335& 0.00004 \\ 0.1353 & 0.3247 & 0 & 0.8825 & 0.0439 & 0.0111 \\ 0.0439 & 0.1353 & 0.8825 & 0 & 0.1353 & 0.0439 \\ 0.00004& 0.000335&0.0439 & 0.1353 & 0 & 0.8825 \\ 0.00001& 0.00004 & 0.0111 & 0.0439 & 0.8825 & 0 \end{pmatrix}. $$ 构造度矩阵 $D$ $$ D_{ii}=\sum_{j=1}^6 W_{ij}. $$ 近似计算: 对于 $x_1$: $D_{11}\approx0.8825+0.1353+0.0439+0.00004+0.00001\approx1.0617.$ 对于 $x_2$: $D_{22}\approx0.8825+0.3247+0.1353+0.000335+0.00004\approx1.3429.$ 对于 $x_3$: $D_{33}\approx0.1353+0.3247+0.8825+0.0439+0.0111\approx1.3975.$ 对于 $x_4$: $D_{44}\approx0.0439+0.1353+0.8825+0.1353+0.0439\approx1.241.$ 对于 $x_5$: $D_{55}\approx0.00004+0.000335+0.0439+0.1353+0.8825\approx1.0617.$ 对于 $x_6$: $D_{66}\approx0.00001+0.00004+0.0111+0.0439+0.8825\approx0.9375.$ 构造度矩阵: $$ D=\begin{pmatrix} 1.0617 & 0 & 0 & 0 & 0 & 0\\[0.5em] 0 & 1.3429 & 0 & 0 & 0 & 0\\[0.5em] 0 & 0 & 1.3975 & 0 & 0 & 0\\[0.5em] 0 & 0 & 0 & 1.2410 & 0 & 0\\[0.5em] 0 & 0 & 0 & 0 & 1.0617 & 0\\[0.5em] 0 & 0 & 0 & 0 & 0 & 0.9375 \end{pmatrix}. $$ 3. 构造拉普拉斯矩阵 $L$ 未归一化拉普拉斯矩阵定义为 $$ L = D - W. $$ 例如,矩阵的第 1 行为: $$ L_{1\cdot}=(1.0617,\ -0.8825,\ -0.1353,\ -0.0439,\ -0.00004,\ -0.00001), $$ 其它行类似。 4. 特征分解与构造低维嵌入 为了分成 3 类,通常我们取图拉普拉斯矩阵(或归一化拉普拉斯矩阵)的前 $k=3$ 个最小特征值对应的特征向量。 (注意:对于未归一化拉普拉斯矩阵,第一个特征值为 0,对应常数向量;但在归一化方法中,所有 3 个特征向量通常都有实际意义。) 假设经过特征分解后,我们得到了三个特征向量 $$ u_1,\; u_2,\; u_3, $$ 每个都是 6 维向量。将它们按列排列构成矩阵 $$ U=\begin{pmatrix} u_1(1) & u_2(1) & u_3(1) \\[0.3em] u_1(2) & u_2(2) & u_3(2) \\[0.3em] u_1(3) & u_2(3) & u_3(3) \\[0.3em] u_1(4) & u_2(4) & u_3(4) \\[0.3em] u_1(5) & u_2(5) & u_3(5) \\[0.3em] u_1(6) & u_2(6) & u_3(6) \end{pmatrix}. $$ 每一行 $i$ 表示数据点 $x_i$ 在 3 维低维嵌入空间中的表示。 假设得到的低维表示(示例数值): $x_1: ; (0.9,\ 0.2,\ 0.1)$ $x_2: ; (0.8,\ 0.3,\ 0.2)$ $x_3: ; (-0.1,\ 0.8,\ 0.1)$ $x_4: ; (-0.2,\ 0.7,\ 0.0)$ $x_5: ; (0.1,\ -0.2,\ 0.9)$ $x_6: ; (0.0,\ -0.1,\ 1.0)$ 5. 在低维空间上使用 k-means 聚类 利用 k-means 算法对 6 个数据点的 3 维向量进行聚类。 在本例中,k-means 会尝试将点分为 3 类。 根据上述低维表示,很容易看到: 数据点 $x_1$ 和 $x_2$ 聚在一起; 数据点 $x_3$ 和 $x_4$ 聚在一起; 数据点 $x_5$ 和 $x_6$ 聚在一起。 最终得到的聚类结果: 类1:${x_1, x_2}$ 类2:${x_3, x_4}$ 类3:${x_5, x_6}$ 幂迭代 幂迭代方法是一种常用的数值迭代算法,主要用于计算矩阵的主特征值(即具有最大模长的特征值)及其对应的特征向量。 收敛原理 在多数实际问题中,矩阵的特征值中存在一个绝对值最大的特征值。根据线性代数理论: 任取一个非零初始向量(且在主特征向量方向上的分量不为0) 通过不断与矩阵相乘并归一化,该向量会逐渐趋近于主特征向量方向 其他较小特征值对应的分量会被逐渐"削弱" 算法步骤 选取初始向量 选择非零初始向量 $$x^{(0)}$$ 迭代更新 每次迭代计算: $$ x^{(k+1)} = A x^{(k)} $$ 并进行二范数归一化以保持数值稳定性 收敛判断 当相邻迭代向量足够接近时停止,此时: 归一化向量 ≈ 主特征向量 特征值估计(瑞利商(Rayleigh Quotient)): $$ \lambda^{(k)} = \frac{(x^{(k)})^T A x^{(k)}}{(x^{(k)})^T x^{(k)}} $$ 瑞利商(Rayleigh Quotient)推导: 假设 $x$ 是 $A$ 的一个近似特征向量(比如幂迭代法得到的 $x^{(k)}$),我们希望找到一个标量 $\lambda$ 使得 $A x \approx \lambda x$。 为了找到最优的 $\lambda$,可以最小化残差 $| A x - \lambda x |^2$: $$ \| A x - \lambda x \|^2 = (A x - \lambda x)^T (A x - \lambda x) $$ 展开后: $$ = x^T A^T A x - 2 \lambda x^T A x + \lambda^2 x^T x $$ 对 $\lambda$ 求导并令导数为零: $$ \frac{d}{d\lambda} \| A x - \lambda x \|^2 = -2 x^T A x + 2 \lambda x^T x = 0 $$ 解得: $$ \lambda = \frac{x^T A x}{x^T x} $$ 这就是 **瑞利商** 的表达式: $$ \lambda^{(k)} = \frac{(x^{(k)})^T A x^{(k)}}{(x^{(k)})^T x^{(k)}} $$
科研
zy123
3月21日
0
10
0
上一页
1
...
7
8
9
...
12
下一页