首页
关于
Search
1
图神经网络
8 阅读
2
数学基础
7 阅读
3
欢迎使用 Typecho
6 阅读
4
线性代数
4 阅读
5
linux服务器
3 阅读
默认分类
科研
自学
登录
最新发布
2025-03-21
李雅普诺夫稳定性
李雅普诺夫方法 判断系统是否能够在受到扰动后返回平衡状态或维持在稳定状态。 数学基础 雅各比矩阵定义 雅可比矩阵(Jacobian matrix)是一个重要的数学概念,它在向量值函数的微分方面起着关键作用。雅可比矩阵描述了一个向量值函数的局部线性近似。 理解:从n维实向量空间到m维实向量空间的函数f,假设输入为2维,用x,y表示,即二维平面上的一个点;输出为3维,每个点的位置由坐标f1(x,y),f2(x,y),f3(x,y)表示。 求解雅各比矩阵: 状态空间 稳定性的定义 李雅普诺夫第一法(间接方法) 通过分析线性系统的系数矩阵的特征值来判断系统的稳定性 雅各比矩阵使我们能够将非线性系统在平衡点附近的行为近似为线性系统。通过这种局部线性化,我们可以应用线性系统理论来研究非线性系统的稳定性。 特征值的实部决定了系统在这些点附近是趋向平衡点还是远离平衡点。 所有特征值的实部都小于零意味着系统是渐进稳定的; 任何特征值的实部大于零意味着系统在该点是不稳定的。 如果所有特征值的实部都不大于零,并且存在实部正好为零的特征值,李一法失效。 why特征值??? 可以以对角矩阵为例,特征值为对角线上元素,设平衡点x1=0,x2=0; 基变换:将一个向量左乘特征向量矩阵V实际上是在将这个向量从原始坐标系转换到以A的特征向量为基的新坐标系。在新的坐标系中,原始向量的坐标表示由特征向量矩阵V 决定。 原始坐标系:y1、y2, 新坐标系:x1、x2 eg: 希尔维斯特判据 李雅普诺夫第二法(直接法) 关键是构造一个李雅普诺夫函数V(x) eg: 当使用李雅普诺夫的第二方法分析系统稳定性时,直接找到一个合适的李雅普诺夫函数可能很困难。 线性定常连续系统 $$ \dot = Ax $$ A为系统的状态矩阵,应用李雅普诺夫方程可构造李雅普诺夫函数。 eg: 非线性系统 $$ \dot = f(x) $$ 克拉索夫斯基算法 eg:
科研
zy123
3月21日
0
2
0
2025-03-21
草稿
LSTM+GAT训练过程说明(RWP网络节点移动预测) 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个验证),避免未来信息泄露。 模型改进方向: 多步预测:输出 $[N, K, 2]$(预测未来$K$步),需调整损失函数。 时空耦合:改用ST-LSTM或先GAT后LSTM,更早引入交互。 总结 数据流:滑动窗口切割时序 → LSTM独立编码节点轨迹 → GAT聚合空间信息 → 预测坐标。 节点交互时机:仅在GAT阶段通过注意力机制融合邻居信息,LSTM阶段节点独立。 适用性:适合RWP等移动模型预测,兼顾时序动态和空间依赖。
科研
zy123
3月21日
0
1
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
1
0
2025-03-21
matlab
matlab笔记 命令行窗口 clc:清屏(命令行窗口) clear all:把命名的变量删掉,不是命令行窗口 命名规则: 变量命名以字母开头,不可以下划线,变量是区分字母大小写的 脚本 %% xxx 注释(百分号+一个空格) % xxx 也是注释 s='a' '"aaaa",字符串 abs(s) 字符s的ascii码,为97 char(97), 输出'a' numtostr(65) ans='65',数字转字符串 length(str),字符串的长度 矩阵 A=[1 2 3 ;4 5 6 ;7 8 9] 分号换行 B=A‘ ,矩阵转置 C=A(:) ,将矩阵拉成一列,按列存储,第一列拼接第二列拼接第三列 D=inv(A) 求逆矩阵 E=zeros(10,5,3) 生成10行5列3维0矩阵 元胞数组 A=cell(1,6),生成1行6列的小格子,每个小格子可以存放各种数据 eye(3),生成3x3的单位阵 A{2}=eye(3),matlab数组从1开始,不是0
科研
zy123
3月21日
0
0
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}$ 是上一时刻的隐藏状态; $W_z$ 和 $U_z$ 是权重矩阵; $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
3
0
上一页
1
...
4
5
6
...
10
下一页