首页
关于
Search
1
图神经网络
8 阅读
2
数学基础
7 阅读
3
欢迎使用 Typecho
6 阅读
4
线性代数
4 阅读
5
linux服务器
3 阅读
默认分类
科研
自学
登录
找到
46
篇与
zy123
相关的结果
- 第 4 页
2025-03-21
传统图机器学习
传统图机器学习和特征工程 节点层面的特征工程 目的:描述网络中节点的结构和位置 eg:输入某个节点的D维向量,输出该节点是某类的概率。 节点度 (Node Degree) 定义: 节点度是指一个节点直接连接到其他节点的边数。 无向图中: 节点的度即为与其相邻的节点数。 有向图中: 通常区分为入度(有多少条边指向该节点)和出度(从该节点发出的边的数量)。 意义: 节点度直观反映了节点在网络中的直接连接能力。度高的节点通常在信息传播或资源分配中具有较大作用。 例如,在社交网络中,一个拥有大量好友的用户(高节点度)可能被视为“热门”或者“活跃”的社交人物。 节点中心性 (Node Centrality) 定义: 节点中心性是一类衡量节点在整个网络中“重要性”或“影响力”的指标。其核心思想是,不仅要看节点的直接连接数,还要看它在网络中的位置和在信息流动中的角色。 常见的指标: 介数中心性 (Betweenness Centrality): 衡量节点位于其他节点间最短路径上的频率,反映其作为“桥梁”的作用。 接近中心性 (Closeness Centrality): 衡量节点到网络中其他节点平均距离的倒数,距离越近中心性越高。 特征向量中心性 (Eigenvector Centrality): 除了考虑连接数量外,还考虑邻居节点的“重要性”,连接到重要节点会提升自身的中心性。 举例: 假设有 3 个节点,记为 $1, 2, 3$,它们构成了一条链: $$ 1 \; \leftrightarrow \; 2 \; \leftrightarrow \; 3 $$ 即只有边 $(1,2)$ 和 $(2,3)$,没有直接连接 $(1,3)$。 令邻接矩阵 $A$ 为: $$ A \;=\; \begin{pmatrix} 0 & 1 & 0\\ 1 & 0 & 1\\ 0 & 1 & 0 \end{pmatrix}. $$ 介数中心性(必经之地): $$ \displaystyle c_v \;=\; \sum_{s \neq t}\; \frac{\sigma_{st}(v)}{\sigma_{st}}, $$ 其中 $\sigma_{st}$ 表示从节点 $s$ 到节点 $t$ 的所有最短路径数; $\sigma_{st}(v)$ 表示这些最短路径当中经过节点 $v$ 的条数; 求和一般只考虑 $s \neq t$ 且 $s \neq v \neq t$ 的情形,避免把端点本身算作中间节点。 换言之,节点 $v$ 的介数中心性就是它作为“中间节点”出现在多少对 $(s,t)$ 的最短路径上。 对 3 个节点 ${1,2,3}$,不同的 $(s,t)$ 有: $(s,t)=(1,2)$:最短路径为 $(1,2)$。 路径上节点:1 → 2 中间节点:无 (1、2 是端点) $(s,t)=(1,3)$:最短路径为 $(1,2,3)$。 路径上节点:1 → 2 → 3 中间节点:2 $(s,t)=(2,3)$:最短路径为 $(2,3)$。 路径上节点:2 → 3 中间节点:无 (2、3 是端点) 节点 1 只会出现在路径 (1,2) 或 (1,3) 的端点位置;(2,3) 的最短路径不包含 1。 端点不计作中间节点,所以 $\sigma_{st}(1) = 0$ 对所有 $s\neq t\neq 1$。 因此 $$ c_1 = 0. $$ 节点 2 在 (1,3) 的最短路径 (1,2,3) 中,2 是中间节点。此时 $\sigma_{1,3}(2) = 1$; (1,2) 路径 (1,2) 中 2 是端点,(2,3) 路径 (2,3) 中 2 也是端点,因此不计入中间节点。 所以 $$ c_2 = \underbrace{\frac{\sigma_{1,3}(2)}{\sigma_{1,3}}}_{=1/1=1} ;=; 1. $$ 接近中心性(去哪儿都近): $$ c_v \;=\; \frac{1}{\sum_{u \neq v} d(u,v)}, $$ 其中 $d(u,v)$ 表示节点 $u$ 与节点 $v$ 的最短路径距离。 节点1: 与节点 2 的距离:$d(1,2)=1$。 与节点 3 的距离:$d(1,3)=2$(路径 1→2→3)。 距离和:$;1 + 2 = 3.$ 接近中心性:$; c_1 = \tfrac{1}{3} \approx 0.333.$ 其他两节点同理。 特征向量中心性 特征向量中心性要求我们求解 $$ A\,\mathbf = \lambda\,\mathbf , $$ 并选取对应**最大特征值** $\lambda$ 的特征向量 $\mathbf $ 来代表每个节点的中心性。 记 $\mathbf = (x_1,,x_2,,x_3)^T$ 这里 $x_1$ 是节点 1 的中心性值,$x_2$ 是节点 2 的中心性值,$x_3$ 是节点 3 的中心性值 方程 $A,\mathbf = \lambda,\mathbf $ 具体展开 $$ \begin{pmatrix} 0 & 1 & 0\ 1 & 0 & 1\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} x_1\ x_2\ x_3 \end{pmatrix} ;=; \lambda \begin{pmatrix} x_1\ x_2\ x_3 \end{pmatrix}. $$ 这意味着: $$ \begin{cases} 1.; x_2 = \lambda, x_1, \ 2.; x_1 + x_3 = \lambda, x_2, \ 3.; x_2 = \lambda, x_3. \end{cases} $$ 求解最大特征值 $\lambda$ 及对应的 $\mathbf $ 通过特征多项式可知本矩阵的最大特征值为 $\sqrt{2}$。 最终(若需单位化)可以将向量归一化为 $$ \mathbf = \frac{1}{2},\begin{pmatrix} 1 \ \sqrt{2} \ 1 \end{pmatrix}. $$ 解释 节点 2 的得分最高($\tfrac{\sqrt{2}}{2}\approx 0.707$),因为它连接了节点 1 和 3,两边的贡献都能“传递”到它。 节点 1 和 3 的得分相同且略低($\tfrac{1}{2}=0.5$),因为它们都只与节点 2 相连。 聚类系数 (Clustering Coefficient) 定义: 聚类系数描述一个节点的邻居之间彼此相连的紧密程度。 对于某个节点,其局部聚类系数计算为: $$ C = \frac{2 \times \text{实际邻居间的边数}}{k \times (k-1)} $$ 其中 $k$ 为该节点的度数。 意义: 高聚类系数: 表示节点的邻居往往彼此熟识,形成紧密的小团体。 低聚类系数: 则说明邻居之间联系较少,节点更多处于桥梁位置,可能连接不同的社群。 在很多网络中,聚类系数能揭示局部社区结构和节点的协同效应。 Graphlets 定义: Graphlets 是指网络中规模较小(通常由3至5个节点构成)的非同构子图。 通过统计一个节点参与的各种 graphlet 模式的数量,我们可以构造出该节点的 Graphlet Degree Vector (GDV)。 意义: Graphlets 能捕捉节点在局部网络结构中的精细模式,比单纯的度数或聚类系数提供更丰富的信息。 在很多应用中(如生物网络分析或社交网络挖掘),通过分析节点参与的 graphlet 模式,可以更好地理解节点的功能和在整个网络中的角色。 Graphlets 被视为网络的“结构指纹”,有助于区分功能不同的节点。 连接层面的特征工程 目的:通过已知连接补全未知连接 eg: AB之间有连接,BC之间有连接,那么AC之间是否可能有连接呢? 法一:直接提取连接的特征,把连接变成D维向量(推荐)。 法二:把连接两端节点的D维向量拼接,即上一讲的节点特征拼接(不推荐,损失了连接本身的结构信息。) Distance-based Feature 核心思路: 用两个节点之间的最短路径长度(或加权距离等)作为边的特征,衡量节点对的“接近”程度。 Local Neighborhood Overlap 核心思路: 度量两个节点在其“一阶邻居”层面共享多少共同邻居,或者它们的邻居集合相似度如何。 Common Neighbors $$ \text{CN}(u,v) ;=; \bigl|,N(u),\cap,N(v)\bigr|, $$ 其中 $N(u)$ 是节点 $u$ 的邻居集合,$\cap$ 表示交集。数值越大,表示两节点在局部网络中有更多共同邻居。 Jaccard Coefficient $$ \text{Jaccard}(u,v) ;=; \frac{\bigl|,N(u),\cap,N(v)\bigr|}{\bigl|,N(u),\cup,N(v)\bigr|}. $$ 反映了两个节点邻居集合的交并比,越大则两者邻居越相似。 Adamic-Adar $$ \text{AA}(u,v) ;=; \sum_{w ,\in, N(u),\cap,N(v)} \frac{1}{\log,\bigl|N(w)\bigr|}. $$ 共同邻居数目较多、且这些邻居本身度数越小,贡献越大。常用于社交网络链接预测。(直观理解:如果AB都认识C,且C是个社牛,那么AB之间的友谊就不一定好) Global Neighborhood Overlap 核心思路: 不只看“一阶邻居”,还考虑更大范围(如 2 步、3 步乃至更多跳数)上的共同可达节点,或更广泛的结构相似度。 Katz 指标:累加节点间所有长度的路径并衰减; Random Walk:基于随机游走来度量节点对的全局可达性; Graph Embedding:DeepWalk、node2vec等,都可将多跳结构信息编码到向量表示里,再用向量相似度当作边特征。 真实情况如何编码边的特征? 在一个 边的特征工程 任务中,可以将 Distance-based Feature、Local Neighborhood Overlap 和 Global Neighborhood Overlap 等特征组合起来,形成一个完整的特征向量。 例如:对于每条边 $ (u,v) $,我们提取以下 6 种特征: 最短路径长度 $ d(u,v) $ (Distance-based Feature) 共同邻居数 $ CN(u,v) $ (Local Neighborhood Overlap) Jaccard 系数 $ Jaccard(u,v) $ (Local Neighborhood Overlap) Adamic-Adar 指标 $ AA(u,v) $ (Local Neighborhood Overlap) Katz 指数 $ Katz(u,v) $ (Global Neighborhood Overlap) Random Walk 访问概率 $ RW(u,v) $ (Global Neighborhood Overlap) 对于图中某条边 $ (A, B) $,它的特征向量可能是: $$ \mathbf{f}(A, B) = \big[ 2, 5, 0.42, 0.83, 0.31, 0.45 \big] $$ 图层面的特征工程 目的:网络相似度、图分类(已知分子结构判断是否有xx特性) 当我们要对整张图进行分类或比较(如图分类、图相似度计算等),需要将图转化为可比较的向量或特征。最朴素的想法是: Bag-of-Node-Degrees:统计每个节点的度,然后构建一个“度分布”或“度直方图”。 例如,对图 $G$,我们计算 $\phi(G) = [,\text{count of deg}=1,\ \text{count of deg}=2,\ \dots,]$。 缺点:只关注了节点度,无法区分很多结构不同、但度分布相同的图。 为解决这个不足,人们提出了更精细的“Bag-of-*”方法,把节点周围的更丰富结构(子图、子树、图形)纳入统计,从而形成更有判别力的特征。 Graphlet Kernel Graphlets:指小规模(如 3 节点、4 节点、5 节点)的非同构子图。 做法:枚举或随机采样网络中的所有小型子图(graphlets),并根据其类型计数出现频率。 比如在 4 节点层面,有 6 种不同的非同构结构,就统计每种结构出现多少次。 得到的特征:一个“graphlet type”直方图,即 $\phi(G) = \big[\text{count}(\text{graphlet}_1), \dots, \text{count}(\text{graphlet}_k)\big]$。 优点:比单纯节点度更能捕捉网络的局部模式。 缺点:当图很大时,遍历或采样 graphlet 代价较高;仅依赖小子图也可能忽略更大范围结构。 Weisfeiler–Lehman Kernel Weisfeiler–Lehman (WL) 核是一种基于迭代标签传播的方法,用于图同构测试和图相似度计算。 核心思路: 初始标签:给每个节点一个初始标签(可能是节点的类型或颜色)。 迭代更新:在每一步迭代中,将节点自身标签与其邻居标签拼接后做哈希,得到新的标签。 记录“标签多重集”:每次迭代会产生新的节点标签集合,可视为“节点子树结构”的某种编码。 Bag-of-Labels / Bag-of-Subtrees: 在每一轮迭代后,统计各类标签出现次数,累加到特征向量中。 相当于对节点子树或“局部邻域结构”做词袋统计。 优点:在保留更多结构信息的同时,计算复杂度相对可控。 缺点:仍然可能有一定的“同构测试”盲区;对于非常复杂的图,标签碰撞可能出现。 例子: 假设我们有一个简单的无向图,包含 4 个节点和 4 条边,结构如下: 1 — 2 — 3 | 4 1. 初始化标签 首先,给每个节点一个初始标签。假设我们直接用节点的度数作为初始标签: 初始标签如下: 节点 1: 1 节点 2: 3 节点 3: 1 节点 4: 1 2. 第一次迭代 在第一次迭代中,每个节点的标签会更新为其自身标签和邻居标签的拼接,然后通过哈希函数生成新的标签。 节点 1: 邻居是节点 2,标签为 3。 拼接后的标签为 (1, 3)。 假设哈希结果为 A。 节点 2: 邻居是节点 1、3、4,标签分别为 1、1、1。 拼接后的标签为 (3, 1, 1, 1)。 假设哈希结果为 B。 节点 3: 邻居是节点 2,标签为 3。 拼接后的标签为 (1, 3)。 假设哈希结果为 A。 节点 4: 邻居是节点 2,标签为 3。 拼接后的标签为 (1, 3)。 假设哈希结果为 A。 第一次迭代后的标签如下: 节点 1: A 节点 2: B 节点 3: A 节点 4: A 3. 第二次迭代 节点 1: 邻居是节点 2,标签为 B。 拼接后的标签为 (A, B)。 假设哈希结果为 C。 节点 2: 邻居是节点 1、3、4,标签分别为 A、A、A。 拼接后的标签为 (B, A, A, A)。 假设哈希结果为 D。 节点 3: 邻居是节点 2,标签为 B。 拼接后的标签为 (A, B)。 假设哈希结果为 C。 节点 4: 邻居是节点 2,标签为 B。 拼接后的标签为 (A, B)。 假设哈希结果为 C。 第二次迭代后的标签如下: 节点 1: C 节点 2: D 节点 3: C 节点 4: C 4. 停止条件 通常,WL Kernel 会进行多次迭代,直到节点的标签不再变化(即收敛)。在这个例子中,假设我们只进行两次迭代。 5.统计标签的多重集 在每次迭代后,统计图中所有节点的标签分布(即“标签多重集”),并将其作为图的特征。 初始标签多重集: 标签 1 出现 3 次(节点 1、3、4)。 标签 3 出现 1 次(节点 2)。 第一次迭代后的标签多重集: 标签 A 出现 3 次(节点 1、3、4)。 标签 B 出现 1 次(节点 2)。 第二次迭代后的标签多重集: 标签 C 出现 3 次(节点 1、3、4)。 标签 D 出现 1 次(节点 2)。 $$ \phi(G) = [\text{count}(1), \text{count}(3), \text{count}(A), \text{count}(B), \text{count}(C), \text{count}(D)]. \\ \phi(G) = [3, 1, 3, 1, 3, 1]. $$ 直观理解 初始标签:只关注节点的度数。 第一次迭代:关注节点的度数及其邻居的度数。 第二次迭代:关注节点的度数、邻居的度数,以及邻居的邻居的度数。 随着迭代的进行,WL Kernel 能够捕捉到越来越复杂的局部结构信息。
科研
zy123
3月21日
0
1
0
2025-03-21
PID控制器
PID控制器 PID控制器是一种常用的反馈控制系统,广泛应用于工业控制系统和各种控制系统中,用来持续调整一个过程的控制输入,以减小系统当前位置和期望位置之间的误差。PID代表比例(Proportional)、积分(Integral)、微分(Derivative)。 控制系统概述 开环控制系统 前馈控制系统尝试预先计算扰动对系统的影响,并在扰动影响系统输出之前调整输入以抵消它。 闭环控制系统 控制器接收误差信号。该系统通过反馈回路来自动调节其输出 复合控制系统 连续与离散信号 从连续信号到离散信号的转换过程涉及以下步骤: 采样:在连续信号上每隔一定时间间隔取一个值。 量化:将每个采样值映射到最接近的量化级上。 积分可以通过求和来近似,微分可以通过相邻样本之间的差分来近似。 PID公式 控制系统中的传感器会连续监测被控制对象的状态(例如,温度、压力、位置等),而PID控制器通过在固定的采样间隔收集输入信号,将其转换为离散信号,计算控制动作,然后输出到控制对象。离散PID控制的优势在于其灵活性和适应性,它可以轻松地与软件算法集成。 直观例子 **仅使用比例(P)控制无法消除稳态误差。**稳态误差是指当系统达到平衡状态时,控制系统的实际输出与期望输出之间的差异。 原因:当系统接近其期望点时,误差减小,进而控制器输出也减小。如果控制器输出减小到无法克服系统内部阻力(如摩擦力)或外部扰动的程度时,系统就无法进一步接近设定点,从而留下稳态误差。 为了解决稳态误差问题,通常会在P控制基础上加入积分(I)控制。积分控制能够累积误差,即使是很小的误差,也会随时间积累,最终产生足够的控制作用以调整系统输出,直到误差为零。 微分控制在PID控制器中的作用主要是提高系统的瞬态响应和稳定性。 $$ {k}_{d}({e}_{i}-{e}_{i-1}) $$ 它通过对误差信号的变化率(即误差的微分)进行响应,来预测系统未来的行为。如果误差在快速变化,微分项会产生一个相对较大的控制作用来尝试减缓这种变化。 相关控制知识 当系统启动时或者遇到大的扰动,会产生大的初始误差。若系统调整缓慢,积分项会在达到目标状态之前累积很大的值。这可导致控制器输出超出了实际的执行器(比如电机、阀门等)可以处理的范围。当这种情况发生时,即使误差减少,由于积分项累积的值太大,控制器的输出可能仍然处于饱和状态。 积分限幅 积分限幅可防止积分项超过预设的上限和下限。 $$ {I}_{clamped}(t)=clamp({I}_{updated(t)},{I}_{max},{I}_{min}) $$ 积分分离 当误差超过某个预定阈值时,禁用积分作用,仅使用比例(P)和微分(D)控制来快速减小误差,避免因积分作用导致的控制器输出过度响应。 if (abs(error) > threshold) { // 积分作用被分离,即暂时禁用积分作用 integral = 0; } else { // 正常积分累积 integral += error * dt; } PID控制器: def update(self, current_value): error = self.set_point - current_value # 实现积分分离逻辑 if abs(error) < self.error_threshold: self.integral += error * self.dt # 应用积分限幅 self.integral = max(min(self.integral, self.integral_limit), -self.integral_limit) else: # 误差过大时重置积分累积 self.integral = 0 derivative = (error - self.prev_error) / self.dt # PID 输出 output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative self.prev_error = error return output
科研
zy123
3月21日
0
0
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
0
0
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}$; 不断“旋转” $B$(乘以酉矩阵 $Q$)并对负值做截断,从而让最终的 $U$ 既接近 $B$ 又满足非负性。 这相当于把一部分“逼近”工作用特征分解先做了,然后只用旋转矩阵 $Q$ 来调整局部负值,再配合 $\max(0,\cdot)$ 截断满足非负约束。 矩阵分解的重构算法步骤为: 输入 预测特征向量矩阵 $X$ 特征值矩阵 $\Lambda$ 初始化 $$ B = X \Lambda^{\frac{1}{2}}, \quad Q = I, \quad U = \text{rand}(n, r) $$ 交替更新 $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 $$ 并通过后续 FCM 算法进行聚类 输出嵌入矩阵 假设我们有一个 $2 \times 2$ 对称非负矩阵 $$ A = \begin{pmatrix} 3 & 1 \\ 1 & 3 \end{pmatrix}. $$ 1. 初始步骤:构造 $B$ 和 $Q$ 首先对 $A$ 做谱分解,或者卡尔曼滤波预测得到(已知结果): 特征值:$\lambda_1=4, \lambda_2=2$ 对应的单位特征向量: $$ x_1 = \begin{pmatrix} \frac{1}{\sqrt{2}} \ \frac{1}{\sqrt{2}} \end{pmatrix}, \quad x_2 = \begin{pmatrix} \frac{1}{\sqrt{2}} \ -\frac{1}{\sqrt{2}} \end{pmatrix}. $$ 构造 $$ X = \begin{bmatrix} x_1 & x_2 \end{bmatrix} = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix}, \quad \Lambda = \begin{pmatrix} 4 & 0 \\ 0 & 2 \end{pmatrix}. $$ 取 $r=2$(通常𝑟 ≪ $n$,这里仅作例子),定义 $$ B = X \Lambda^{\frac{1}{2}} \quad \text{其中} \quad \Lambda^{\frac{1}{2}} = \begin{pmatrix} 2 & 0 \\ 0 & \sqrt{2} \end{pmatrix}. $$ 因此, $$ B = X \Lambda^{\frac{1}{2}} = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix} \begin{pmatrix} 2 & 0 \\ 0 & \sqrt{2} \end{pmatrix} = \begin{pmatrix} \frac{2}{\sqrt{2}} & \frac{\sqrt{2}}{\sqrt{2}} \\ \frac{2}{\sqrt{2}} & -\frac{\sqrt{2}}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} \sqrt{2} & 1 \\ \sqrt{2} & -1 \end{pmatrix}. $$ 同时,初始令 $Q = I_2$($2 \times 2$ 单位矩阵)。 2. 初始 $U$ 的计算 按照迭代初始公式: $$ U \approx \max\Bigl(0, B Q \Bigr). $$ 由于 $Q = I_2$,初始 $U$ 就是 $$ U^{(0)} = \max\Bigl(0, B \Bigr) = \max\left(0, \begin{pmatrix} \sqrt{2} & 1 \\ \sqrt{2} & -1 \end{pmatrix}\right) = \begin{pmatrix} \sqrt{2} & 1 \\ \sqrt{2} & 0 \end{pmatrix}. $$ 3. 更新 $Q$ 的步骤 接下来计算中间矩阵 $$ F = U^{(0)T} B. $$ 计算 $U^{(0)T}$: $$ U^{(0)T} = \begin{pmatrix} \sqrt{2} & \sqrt{2} \\ 1 & 0 \end{pmatrix}. $$ 因此, $$ F = U^{(0)T} B = \begin{pmatrix} \sqrt{2} & \sqrt{2} \\ 1 & 0 \end{pmatrix} \begin{pmatrix} \sqrt{2} & 1 \\ \sqrt{2} & -1 \end{pmatrix}= \begin{pmatrix} 4 & 0 \\ \sqrt{2} & 1 \end{pmatrix}. $$ 接下来,对 $F$ 进行奇异值分解(SVD):设 $$ F = H \Sigma V^T. $$ (在实际数值计算中可以得到具体 $H, \Sigma, V$;此处我们只说明流程。) 然后按照更新公式,令 $$ Q \leftarrow V H^T. $$ 这一步的作用是“旋转” $B$ 的基,使得 $U$ 更贴近满足 $A \approx U U^T$ 的目标。 4. 迭代更新 $U$ 在更新了 $Q$ 后,再更新 $U$ 的公式仍为: $$ U \leftarrow \max\bigl(0, B Q \bigr). $$ 也就是说,用新的 $Q$ 重新计算 $B Q$,再将负值截断为零。 然后再重复“计算 $F = U^T B$ → SVD 得到新 $Q$ → 更新 $U$”这一过程,直至满足收敛条件(例如 $|U^T(U - B Q)|_F^2 \le \varepsilon$)。 5. 迭代结束后的意义 当迭代停止时,得到的 $U$ 满足 $$ A \approx U U^T. $$ 此时 $U$(尺寸为 $2 \times 2$ 的矩阵)就是对 $A$ 进行低维嵌入得到的“特征表示”,它不仅满足非负性,而且通过内积 $U U^T$ 能近似重构出原矩阵 $A$。 疑问 郭和颜的论文都说满足低秩或者具有低秩性条件的矩阵,SNMF分解出的矩阵是唯一的。可能指的是经过特定算法,输入固定,输出也是固定的。 但是: 旋转自由度:若 $(U, U^T)$ 是一个解,则对任意正交矩阵 $R$(满足 $RR^T=I$),$(UR, R^TU^T)$ 也是有效解。 时间复杂度分析 (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) 由于通常 $n \gg r$,$\mathcal{O}(n r^2)$ 是主导项,故总复杂度(其中 $T$ 为迭代次数) $$ T \cdot \mathcal{O}(nr^2) $$ 两种求对称非负矩阵分解的方法 纯梯度下降 优点:实现原理简单,对任意大小/形状的矩阵都能做。 缺点:收敛速度有时较慢,且对初始值敏感。 rEVD + 旋转截断 (示例方法) 优点:利用了特征分解,可以先一步把主要信息“压缩”进 $B$,后续只需解决“如何把负数修正掉”以及“如何微调逼近”。 缺点:需要先做特征分解,适合于对称矩阵或低秩场景。
科研
zy123
3月21日
0
1
0
2025-03-21
交替方向乘子法(ADMM)
交替方向乘子法(ADMM) Alternating Direction Method of Multipliers (ADMM) 是一种用于求解大规模优化问题的高效算法,结合了拉格朗日乘子法和分裂方法的优点。 基本概念 优化问题分解 ADMM 的核心思想是将复杂优化问题分解为多个较简单的子问题,通过引入辅助变量将原问题转化为约束优化问题,使子问题独立求解。 拉格朗日乘子 利用拉格朗日乘子处理约束条件,构造增强拉格朗日函数,确保子问题求解时同时考虑原问题的约束信息。 交替更新 通过交替更新子问题的解和拉格朗日乘子,逐步逼近原问题的最优解。 算法流程 问题分解 将原问题分解为两个子问题。假设原问题表示为: $\min_{x, z} f(x) + g(z) \quad \text{s.t.} \quad Ax + Bz = c$ 其中 $f$ 和 $g$ 是凸函数,$A$ 和 $B$ 为给定矩阵。 构造增强拉格朗日函数 引入拉格朗日乘子 $y$,构造增强拉格朗日函数: $L_\rho(x, z, y) = f(x) + g(z) + y^T(Ax+Bz-c) + \frac{\rho}{2}|Ax+Bz-c|^2$ 其中 $\rho > 0$ 控制惩罚项的权重。 交替更新 更新 $x$:固定 $z$ 和 $y$,求解 $\arg\min_x L_\rho(x, z, y)$。 更新 $z$:固定 $x$ 和 $y$,求解 $\arg\min_z L_\rho(x, z, y)$。 更新乘子 $y$:按梯度上升方式更新: $y := y + \rho(Ax + Bz - c)$ 迭代求解 重复上述步骤,直到原始残差和对偶残差满足收敛条件(如 $|Ax+Bz-c| < \epsilon$)。 例子 下面给出一个简单的数值例子,展示 ADMM 在求解分解问题时的迭代过程。我们构造如下问题: $$ \begin{aligned} \min_{x, z}\quad & (x-1)^2 + (z-2)^2 \\ \text{s.t.}\quad & x - z = 0. \end{aligned} $$ 注意:由于约束要求 $x=z$,实际问题等价于 $$ \min_ (x-1)^2 + (x-2)^2, $$ 其解析最优解为: $$ 2(x-1)+2(x-2)=4x-6=0\quad\Rightarrow\quad x=1.5, $$ 因此我们希望得到 $x=z=1.5$。 构造 ADMM 框架 将问题写成 ADMM 标准形式: 令 $$ f(x)=(x-1)^2,\quad g(z)=(z-2)^2, $$ 约束写为 $$ x-z=0, $$ 即令 $A=1$、$B=-1$、$c=0$。 增强拉格朗日函数为 $$ L_\rho(x,z,y)=(x-1)^2+(z-2)^2+y(x-z)+\frac{\rho}{2}(x-z)^2, $$ 其中 $y$ 是拉格朗日乘子,$\rho>0$ 是惩罚参数。为简单起见,我们选取 $\rho=1$。 ADMM 的更新公式 针对本问题可以推导出三个更新步骤: 更新 $x$: 固定 $z$ 和 $y$,求解 $$ x^{k+1} = \arg\min_x; (x-1)^2 + y^k(x-z^k)+\frac{1}{2}(x-z^k)^2. $$ 对 $x$ 求导并令其为零: $$ 2(x-1) + y^k + (x-z^k)=0 \quad\Rightarrow\quad (2+1)x = 2 + z^k - y^k, $$ 得到更新公式: $$ x^{k+1} = \frac{2+z^k-y^k}{3}. $$ 更新 $z$: 固定 $x$ 和 $y$,求解 $$ z^{k+1} = \arg\min_z; (z-2)^2 - y^kz+\frac{1}{2}(x^{k+1}-z)^2. $$ 注意:由于 $y(x-z)$ 中关于 $z$ 的部分为 $-y^kz$(常数项 $y^kx$ 可忽略),求导得: $$ 2(z-2) - y^k - (x^{k+1}-z)=0 \quad\Rightarrow\quad (2+1)z = 4 + y^k + x^{k+1}, $$ 得到更新公式: $$ z^{k+1} = \frac{4+y^k+x^{k+1}}{3}. $$ 更新 $y$: 按梯度上升更新乘子: $$ y^{k+1} = y^k + \rho,(x^{k+1}-z^{k+1}). $$ 这里 $\rho=1$,所以 $$ y^{k+1} = y^k + \bigl(x^{k+1}-z^{k+1}\bigr). $$ 数值迭代示例 第 1 次迭代: 更新 $x$: $$ x^1 = \frac{2+z^0-y^0}{3}=\frac{2+0-0}{3}=\frac{2}{3}\approx0.667. $$ 更新 $z$: $$ z^1 = \frac{4+y^0+x^1}{3}=\frac{4+0+0.667}{3}\approx\frac{4.667}{3}\approx1.556. $$ 更新 $y$: $$ y^1 = y^0+(x^1-z^1)=0+(0.667-1.556)\approx-0.889. $$ 第 2 次迭代: 更新 $x$: $$ x^2 = \frac{2+z^1-y^1}{3}=\frac{2+1.556-(-0.889)}{3}=\frac{2+1.556+0.889}{3}\approx\frac{4.445}{3}\approx1.4817. $$ 更新 $z$: $$ z^2 = \frac{4+y^1+x^2}{3}=\frac{4+(-0.889)+1.4817}{3}=\frac{4-0.889+1.4817}{3}\approx\frac{4.5927}{3}\approx1.5309. $$ 更新 $y$: $$ y^2 = y^1+(x^2-z^2)\approx -0.889+(1.4817-1.5309)\approx -0.889-0.0492\approx -0.938. $$ 第 3 次迭代: 更新 $x$: $$ x^3 = \frac{2+z^2-y^2}{3}=\frac{2+1.5309-(-0.938)}{3}=\frac{2+1.5309+0.938}{3}\approx\frac{4.4689}{3}\approx1.4896. $$ 更新 $z$: $$ z^3 = \frac{4+y^2+x^3}{3}=\frac{4+(-0.938)+1.4896}{3}\approx\frac{4.5516}{3}\approx1.5172. $$ 更新 $y$: $$ y^3 = y^2+(x^3-z^3)\approx -0.938+(1.4896-1.5172)\approx -0.938-0.0276\approx -0.9656. $$ 从迭代过程可以看出: $x$ 和 $z$ 的值在不断调整,目标是使两者相等,从而满足约束。 最终随着迭代次数增加,$x$ 和 $z$ 会收敛到约 1.5,同时乘子 $y$ 收敛到 $-1$(这与 KKT 条件相符)。 应用领域 大规模优化 在大数据、机器学习中利用并行计算加速求解。 信号与图像处理 用于去噪、压缩感知等稀疏表示问题。 分布式计算 在多节点协同场景下求解大规模问题。 优点与局限性 优点 局限性 分布式计算能力 小规模问题可能收敛较慢 支持稀疏性和正则化 参数 $\rho$ 需精细调节 收敛性稳定 —
科研
zy123
3月21日
0
1
0
上一页
1
...
3
4
5
...
10
下一页