首页
关于
Search
1
图神经网络
8 阅读
2
数学基础
7 阅读
3
欢迎使用 Typecho
6 阅读
4
线性代数
4 阅读
5
linux服务器
3 阅读
默认分类
科研
自学
登录
最新发布
2025-03-23
线性代数
线性代数 线性变换 每列代表一个基向量,行数代码这个基向量所张成空间的维度,二行三列表示二维空间的三个基向量。 二维标准基矩阵(单位矩阵): $$ \begin{bmatrix} 1 & 0 \ 0 & 1 \end{bmatrix} = \begin{bmatrix} | & | \ \mathbf{i} & \mathbf{j} \ | & | \end{bmatrix} $$ 三维标准基矩阵(单位矩阵): $$ \begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} | & | & | \ \mathbf{i} & \mathbf{j} & \mathbf{k} \ | & | & | \end{bmatrix} $$ 矩阵乘向量 在 3blue1brown 的“线性代数的本质”系列中,他把矩阵乘向量的运算解释为线性组合和线性变换的过程。具体来说: 计算方法 给定一个 $ m \times n $ 的矩阵 $ A $ 和一个 $ n $ 维向量 $ \mathbf = [x_1, x_2, \dots, x_n]^T $,矩阵与向量的乘积可以表示为: $$ A\mathbf = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 + \cdots + x_n \mathbf{a}_n $$ 其中,$\mathbf{a}_i$ 表示 $ A $ 的第 $ i $ 列向量。也就是说,我们用向量 $\mathbf $ 的各个分量作为权重,对矩阵的各列进行线性组合。 例如:矩阵 $ A $ 是一个二阶矩阵: $$ A = \begin{bmatrix} a & b \ c & d \end{bmatrix} $$ 向量 $ \mathbf $ 是一个二维列向量: $$ \mathbf = \begin{bmatrix} x \ y \end{bmatrix} $$ 可以将这个乘法看作是用 $ x $ 和 $ y $ 这两个数,分别对矩阵的两列向量进行加权: $$ A\mathbf = x \cdot \begin{bmatrix} a \ c \end{bmatrix} + y \cdot \begin{bmatrix} b \ d \end{bmatrix} $$ 也就是说,矩阵乘向量的结果,是“矩阵每一列”乘以“向量中对应的分量”,再把它们加起来。 背后的思想 分解为基向量的组合: 任何向量都可以看作是标准基向量的线性组合。矩阵 $ A $ 在几何上代表了一个线性变换,而标准基向量在这个变换下会分别被映射到新的位置,也就是矩阵的各列。 构造变换: 当我们用 $\mathbf $ 的分量对这些映射后的基向量加权求和时,就得到了 $ \mathbf $ 在变换后的结果。这种方式不仅方便计算,而且直观地展示了线性变换如何“重塑”空间——每一列告诉我们基向量被如何移动,然后这些移动按比例组合出最终向量的位置。 矩阵乘矩阵 当你有两个矩阵 $ A $ 和 $ B $,矩阵乘法 $ AB $ 实际上代表的是: 先对向量应用 $ B $ 的线性变换,再应用 $ A $ 的线性变换。 也就是说: $$ (AB)\vec{v} = A(B\vec{v}) $$ 3blue1brown 的直觉解释: 矩阵 B:提供了新的变换后基向量 记住:矩阵的每一列,表示标准基向量 $ \mathbf{e}_1, \mathbf{e}_2 $ 在变换后的样子。 所以: $ B $ 是一个变换,它把空间“拉伸/旋转/压缩”成新的形状; $ A $ 接着又对这个已经变形的空间进行变换。 例: $$ A = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix}, \quad B = \begin{bmatrix} 1 & -1 \\ 1 & 1 \end{bmatrix} $$ $ B $ 的列是: $ \begin{bmatrix} 1 \ 1 \end{bmatrix} $ → 第一个标准基向量变形后的位置 $ \begin{bmatrix} -1 \ 1 \end{bmatrix} $ → 第二个标准基向量变形后的位置 我们计算: $ A \cdot \begin{bmatrix} 1 \ 1 \end{bmatrix} = \begin{bmatrix} 2 \ 3 \end{bmatrix} $ $ A \cdot \begin{bmatrix} -1 \ 1 \end{bmatrix} = \begin{bmatrix} -2 \ 3 \end{bmatrix} $ 所以: $$ AB = \begin{bmatrix} 2 & -2 \\ 3 & 3 \end{bmatrix} $$ 这个新矩阵 $ AB $ 的列向量,表示标准基向量在经历了 “先 B 再 A” 的变换后,落在了哪里。 行列式 3blue1brown讲解行列式时,核心在于用几何直观来理解行列式的意义: 缩放比例!!! 体积(或面积)的伸缩因子 对于二维空间中的2×2矩阵,行列式的绝对值表示该矩阵作为线性变换时,对单位正方形施加变换后得到的平行四边形的面积。类似地,对于三维空间中的3×3矩阵,行列式的绝对值就是单位立方体变换后的平行六面体的体积。也就是说,行列式告诉我们这个变换如何“拉伸”或“压缩”空间。 方向的指示(有向面积或体积) 行列式不仅仅给出伸缩倍数,还通过正负号反映了变换是否保持了原来的方向(正)还是发生了翻转(负)。例如,在二维中,如果行列式为负,说明变换过程中存在翻转(类似镜像效果)。 变换的可逆性 当行列式为零时,说明该线性变换把空间压缩到了低维(例如二维变一条线,三维变成一个平面或线),这意味着信息在变换过程中丢失,变换不可逆。 逆矩阵、列空间、零空间 逆矩阵 逆矩阵描述了一个矩阵所代表的线性变换的**“反过程”**。假设矩阵 $A$ 对空间做了某种变换(比如旋转、拉伸或压缩),那么 $A^{-1}$ 就是把这个变换“逆转”,把变换后的向量再映射回原来的位置。 前提是$A$ 是可逆的,即它对应的变换不会把空间压缩到更低的维度。 秩 秩等于矩阵列向量(或行向量)所生成的空间的维数。例如,在二维中,如果一个 $2 \times 2$ 矩阵的秩是 2,说明这个变换把平面“充满”;如果秩为 1,则所有输出都落在一条直线上,说明变换“丢失”了一个维度。 列空间 列空间是矩阵所有列向量的线性组合所构成的集合(也可以说所有可能的输出向量$A\mathbf $所构成的集合)。 比如一个二维变换的列空间可能是整个平面,也可能只是一条直线,这取决于矩阵的秩。 零空间 零空间(又称核、kernel)是所有在该矩阵作用(线性变换$A$)下变成零向量的输入向量的集合。 它展示了变换中哪些方向被“压缩”成了一个点(原点)。例如,在三维中,如果一个矩阵将所有向量沿某个方向压缩到零,那么这个方向构成了零空间。 零空间解释了$Ax=0$的解的集合,就是齐次的通解。如果满秩,零空间只有唯一解零向量。 求解线性方程 设线性方程组写作 $$ A\mathbf = \mathbf{b} $$ 这相当于在问:“有没有一个向量 $\mathbf $ ,它经过矩阵 $A$ 的变换后,恰好落在 $\mathbf{b}$ 所在的位置?” 如果 $\mathbf{b}$ 落在 $A$ 的列空间内,那么就存在解。解可能是唯一的(当矩阵满秩时)或无穷多(当零空间非平凡时)。 如果 $\mathbf{b}$ 不在列空间内,则说明 $\mathbf{b}$ 不可能由 $A$ 的列向量线性组合得到,这时方程组无解。 唯一解对应于所有这些几何对象在一点相交; 无限多解对应于它们沿着某个方向重合; 无解则说明这些对象根本没有公共交点。 基变换 新基下的变换矩阵 $A_C$ 为: $$ A_C = P^{-1} A P $$ $P$:从原基到新基的基变换矩阵(可逆),$P$的每一列代表了新基中的一个基向量 $A$:线性变换 $T$ 在原基下的矩阵表示 原来空间中进行$A$线性变换等同于新基的视角下进行 $A_C$ 变换 点积、哈达马积 向量点积(Dot Product) 3blue1brown认为,两个向量的点乘就是将其中一个向量转为线性变换。 假设有两个向量 $$ \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}. $$ $$ \mathbf{v} \cdot \mathbf{w} =\begin{bmatrix} v_1 & v_2 \end{bmatrix}\begin{bmatrix} w_1 \\ w_2 \end{bmatrix}=v_1w_1 + v_2w_2.. $$ 结果: 点积的结果是一个标量(即一个数)。 几何意义: 点积可以衡量两个向量的相似性,或者计算一个向量在另一个向量方向上的投影。 哈达马积(Hadamard Product) 定义: 对于两个向量 $\mathbf{u} = [u_1, u_2, \dots, u_n]$ 和 $\mathbf{v} = [v_1, v_2, \dots, v_n]$,它们的哈达马积定义为: $$ \mathbf{u} \circ \mathbf{v} = [u_1 v_1, u_2 v_2, \dots, u_n v_n]. $$ 结果: 哈达马积的结果是一个向量,其每个分量是对应位置的分量相乘。 几何意义: 哈达马积通常用于逐元素操作,比如在神经网络中对两个向量进行逐元素相乘。 矩阵也有哈达马积!。 特征值和特征向量 设矩阵: $$ A = \begin{bmatrix} 2 & 1 \\ 0 & 3 \end{bmatrix} $$ 步骤 1:求特征值 构造特征方程: $$ \det(A - \lambda I) = \det\begin{bmatrix} 2-\lambda & 1 \\ 0 & 3-\lambda \end{bmatrix} = (2-\lambda)(3-\lambda) - 0 = 0 $$ 解得: $$ (2-\lambda)(3-\lambda) = 0 \quad \Longrightarrow \quad \lambda_1 = 2,\quad \lambda_2 = 3 $$ 步骤 2:求特征向量 对于 $\lambda_1 = 2$: 解方程: $$ (A - 2I)\mathbf = \begin{bmatrix} 2-2 & 1 \\ 0 & 3-2 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ 0 & 1 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} x_2 \\ x_2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} $$ 从第一行 $x_2 = 0$。因此特征向量可以写成: $$ \mathbf{v}_1 = \begin{bmatrix} 1 \\ 0 \end{bmatrix} \quad (\text{任意非零常数倍}) $$ 对于 $\lambda_2 = 3$: 解方程: $$ (A - 3I)\mathbf = \begin{bmatrix} 2-3 & 1 \\ 0 & 3-3 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} -1 & 1 \\ 0 & 0 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} -x_1+x_2 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} $$ 从第一行得 $-x_1 + x_2 = 0$ 或 $x_2 = x_1$。因此特征向量可以写成: $$ \mathbf{v}_2 = \begin{bmatrix} 1 \\ 1 \end{bmatrix} \quad (\text{任意非零常数倍}) $$ 设一个对角矩阵: $$ D = \begin{bmatrix} d_1 & 0 \\ 0 & d_2 \end{bmatrix} $$ $$ \lambda_1 = d_1,\quad \lambda_2 = d_2 $$ 对角矩阵的特征方程为: $$ \det(D - \lambda I) = (d_1 - \lambda)(d_2 - \lambda) = 0 $$ 因此特征值是: $$ \lambda_1 = d_1,\quad \lambda_2 = d_2 $$ 对于 $\lambda_1 = d_1$,方程 $(D-d_1I)\mathbf =\mathbf{0}$ 得到: $$ \begin{bmatrix} 0 & 0 \\ 0 & d_2-d_1 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 0 \\ (d_2-d_1)x_2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} $$ 若 $d_1 \neq d_2$,则必须有 $x_2=0$,而 $x_1$ 可任意取非零值,因此特征向量为: $$ \mathbf{v}_1 = \begin{bmatrix} 1 \\ 0 \end{bmatrix} $$ 对于 $\lambda_2 = d_2$,类似地解得: $$ \mathbf{v}_2 = \begin{bmatrix} 0 \\ 1 \end{bmatrix} $$ 矩阵乘法 全连接神经网络 其中: $a^{(0)}$ 是输入向量,表示当前层的输入。 $\mathbf{W}$ 是权重矩阵,表示输入向量到输出向量的线性变换。 $b$ 是偏置向量,用于调整输出。 $\sigma$ 是激活函数(如 ReLU、Sigmoid 等),用于引入非线性。 输入向量 $a^{(0)}$: $$ a^{(0)} = \begin{pmatrix} a_0^{(0)} \\ a_1^{(0)} \\ \vdots \\ a_n^{(0)} \end{pmatrix} $$ 这是一个 $n+1$ 维的列向量,表示输入特征。 权重矩阵 $\mathbf{W}$: $$ \mathbf{W} = \begin{pmatrix} w_{0,0} & w_{0,1} & \cdots & w_{0,n} \\ w_{1,0} & w_{1,1} & \cdots & w_{1,n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{k,0} & w_{k,1} & \cdots & w_{k,n} \\ \end{pmatrix} $$ 这是一个 $k \times (n+1)$ 的矩阵,其中 $k$ 是输出向量的维度,$n+1$ 是输入向量的维度。 偏置向量 $b$: $$ b = \begin{pmatrix} b_0 \\ b_1 \\ \vdots \\ b_k \end{pmatrix} $$ 这是一个 $k$ 维的列向量,用于调整输出。 在传统的连续时间 RNN 写法里,常见的是 $$ \sum_{j} W_{ij} \, \sigma(x_j), $$ 这代表对所有神经元 $j$ 的激活 $\sigma(x_j)$ 做加权求和,再求和到神经元 $i$。 如果拆开来看,每个输出分量也都含一个求和 $\sum_{j}$: 输出向量的第 1 个分量(记作第 1 行的结果): $$ (W_r x)_1 = 0.3 \cdot x_1 + (-0.5) \cdot x_2 = 0.3 \cdot 2 + (-0.5) \cdot 1 = 0.6 - 0.5 = 0.1. $$ 输出向量的第 2 个分量(第 2 行的结果): $$ (W_r x)_2 = 1.2 \cdot x_1 + 0.4 \cdot x_2 = 1.2 \cdot 2 + 0.4 \cdot 1 = 2.4 + 0.4 = 2.8. $$ 在使用矩阵乘法时,你可以写成 $$ y = W_r \, \sigma(x), $$ 其中 $\sigma$ 表示对 $x$ 的各分量先做激活,接着用 $W_r$ 乘上去。这就是把“$\sum_j \dots$”用矩阵乘法隐藏了。 $$ \begin{pmatrix} 0.3 & -0.5\\ 1.2 & \;\,0.4 \end{pmatrix} \begin{pmatrix} 2\\ 1 \end{pmatrix} = \begin{pmatrix} 0.3 \times 2 + (-0.5) \times 1\\[6pt] 1.2 \times 2 + 0.4 \times 1 \end{pmatrix} = \begin{pmatrix} 0.6 - 0.5\\ 2.4 + 0.4 \end{pmatrix} = \begin{pmatrix} 0.1\\ 2.8 \end{pmatrix}. $$ 奇异值 定义 对于一个 $m \times n$ 的矩阵 $A$,其奇异值是非负实数 $\sigma_1, \sigma_2, \ldots, \sigma_r$($r = \min(m, n)$),满足存在正交矩阵 $U$ 和 $V$,使得: $$ A = U \Sigma V^T $$ 其中,$\Sigma$ 是对角矩阵,对角线上的元素即为奇异值。 主要特点 非负性:奇异值总是非负的。 对角矩阵的奇异值是对角线元素的绝对值。 降序排列:通常按从大到小排列,即 $\sigma_1 \geq \sigma_2 \geq \ldots \geq \sigma_r \geq 0$。 矩阵分解:奇异值分解(SVD)将矩阵分解为三个矩阵的乘积,$U$ 和 $V$ 是正交矩阵,$\Sigma$ 是对角矩阵。 应用广泛:奇异值在数据降维、噪声过滤、图像压缩等领域有广泛应用。 奇异值求解 奇异值可以通过计算矩阵 $A^T A$ 或 $A A^T$ 的特征值的平方根得到。 步骤 1:计算 $A^T A$ 首先,我们计算矩阵 $A$ 的转置 $A^T$: $$ A^T = \begin{pmatrix} 3 & 0 \\ 0 & -4 \end{pmatrix} $$ 然后,计算 $A^T A$: $$ A^T A = \begin{pmatrix} 3 & 0 \\ 0 & -4 \end{pmatrix} \begin{pmatrix} 3 & 0 \\ 0 & -4 \end{pmatrix} = \begin{pmatrix} 9 & 0 \\ 0 & 16 \end{pmatrix} $$ 步骤 2:计算 $A^T A$ 的特征值 接下来,我们计算 $A^T A$ 的特征值。特征值 $\lambda$ 满足以下特征方程: $$ \det(A^T A - \lambda I) = 0 $$ 即: $$ \det \begin{pmatrix} 9 - \lambda & 0 \\ 0 & 16 - \lambda \end{pmatrix} = (9 - \lambda)(16 - \lambda) = 0 $$ 解这个方程,我们得到两个特征值: $$ \lambda_1 = 16, \quad \lambda_2 = 9 $$ 步骤 3:计算奇异值 奇异值是特征值的平方根,因此我们计算: $$ \sigma_1 = \sqrt{\lambda_1} = \sqrt{16} = 4 $$ $$ \sigma_2 = \sqrt{\lambda_2} = \sqrt{9} = 3 $$ 结果 矩阵 $A$ 的奇异值为 4 和 3。 奇异值分解 给定一个实矩阵 $A$(形状为 $m \times n$),SVD 是将它分解为: $$ A = U \Sigma V^T $$ 构造 $A^T A$ 计算对称矩阵 $A^T A$($n \times n$) 求解 $A^T A$ 的特征值和特征向量 设特征值为 $\lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_n \geq 0$ 对应特征向量为 $\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n$ 计算奇异值 $\sigma_i = \sqrt{\lambda_i}$ 构造矩阵 $V$ 将正交归一的特征向量作为列向量:$V = [\mathbf{v}_1 | \mathbf{v}_2 | \dots | \mathbf{v}_n]$ 求矩阵 $U$ 对每个非零奇异值:$\mathbf{u}_i = \frac{A \mathbf{v}_i}{\sigma_i}$ 标准化(保证向量长度为 1)后组成 $U = [\mathbf{u}_1 | \mathbf{u}_2 | \dots | \mathbf{u}_m]$ 构造 $\Sigma$ 对角线放置奇异值:$\Sigma = \text{diag}(\sigma_1, \sigma_2, \dots, \sigma_p)$,$p=\min(m,n)$ 范数 L2范数定义: 对于一个向量 $\mathbf{w} = [w_1, w_2, \dots, w_n]$,L2 范数定义为 $$ \|\mathbf{w}\|_2 = \sqrt{w_1^2 + w_2^2 + \dots + w_n^2} $$ 假设一个权重向量为 $\mathbf{w} = [3, -4]$,则 $$ \|\mathbf{w}\|_2 = \sqrt{3^2 + (-4)^2} = \sqrt{9+16} = \sqrt{25} = 5. $$ 用途: 正则化(L2正则化/权重衰减):在训练过程中,加入 L2 正则项有助于防止模型过拟合。正则化项通常是权重的 L2 范数的平方,例如 $$ \lambda \|\mathbf{w}\|_2^2 $$ 其中 $\lambda$ 是正则化系数。 梯度裁剪:在 RNN 等深度网络中,通过计算梯度的 L2 范数来判断是否需要对梯度进行裁剪,从而防止梯度爆炸。 具体例子: 假设我们有一个简单的线性回归模型,损失函数为均方误差(MSE): $$ L(\mathbf{w}) = \frac{1}{2N} \sum_{i=1}^N (y_i - \mathbf{w}^T \mathbf _i)^2 $$ 其中,$N$ 是样本数量,$y_i$ 是第 $i$ 个样本的真实值,$\mathbf _i$ 是第 $i$ 个样本的特征向量,$\mathbf{w}$ 是权重向量。 加入 L2 正则项后,新的损失函数为: $$ L_{\text{reg}}(\mathbf{w}) = \frac{1}{2N} \sum_{i=1}^N (y_i - \mathbf{w}^T \mathbf _i)^2 + \lambda \|\mathbf{w}\|_2^2 $$ 在训练过程中,优化算法会同时最小化原始损失函数和正则项,从而在拟合训练数据的同时,避免权重值过大。 梯度更新 在梯度下降算法中,权重 $\mathbf{w}$ 的更新公式为: $$ \mathbf{w} \leftarrow \mathbf{w} - \eta \nabla L_{\text{reg}}(\mathbf{w}) $$ 其中,$\eta$ 是学习率,$\nabla L_{\text{reg}}(\mathbf{w})$ 是损失函数关于 $\mathbf{w}$ 的梯度。 对于加入 L2 正则项的损失函数,梯度为: $$ \nabla L_{\text{reg}}(\mathbf{w}) = \nabla L(\mathbf{w}) + 2\lambda \mathbf{w} $$ 因此,权重更新公式变为: $$ \mathbf{w} \leftarrow \mathbf{w} - \eta (\nabla L(\mathbf{w}) + 2\lambda \mathbf{w}) $$ 通过加入 L2 正则项,模型在训练过程中不仅会最小化原始损失函数,还会尽量减小权重的大小,从而避免过拟合。正则化系数 $\lambda$ 控制着正则化项的强度,较大的 $\lambda$ 会导致权重更小,模型更简单,但可能会欠拟合;较小的 $\lambda$ 则可能无法有效防止过拟合。因此,选择合适的 $\lambda$ 是使用 L2 正则化的关键。 矩阵的元素级范数 L0范数(但它 并不是真正的范数): $$ \|A\|_0 = \text{Number of non-zero elements in } A = \sum_{i=1}^{m} \sum_{j=1}^{n} \mathbb{I}(a_{ij} \neq 0) $$ 其中: $\mathbb{I}(\cdot)$ 是指示函数(若 $a_{ij} \neq 0$ 则取 1,否则取 0)。 如果矩阵 $A$ 有 $k$ 个非零元素,则 $|A|_0 = k$。 衡量稀疏性: $|A|_0$ 越小,矩阵 $A$ 越稀疏(零元素越多)。 在压缩感知、低秩矩阵恢复、稀疏编码等问题中,常用 $L_0$ 范数来 约束解的稀疏性。 非凸、非连续、NP难优化: $L_0$ 范数是 离散的,导致优化问题通常是 NP难 的(无法高效求解)。 因此,实际应用中常用 $L_1$ 范数(绝对值之和)作为凸松弛替代: $$ |A|1 = \sum{i,j} |a_{ij}| $$ NP难问题: 可以在多项式时间内 验证一个解是否正确,但 不一定能在多项式时间内找到解。 L1范数:元素绝对值和 $$ \|A\|_1 = \sum_{i=1}^{m} \sum_{j=1}^{n} |a_{ij}| $$ 范数类型 定义 性质 优化难度 用途 $L_0$ $\sum_{i,j} \mathbb{I}(a_{ij} \neq 0)$ 非凸、离散、不连续 NP难 精确稀疏性控制 $L_1$ $\sum_{i,j} a_{ij} $ 凸、连续 矩阵的核范数 核范数,又称为迹范数(trace norm),是矩阵范数的一种,定义为矩阵所有奇异值之和。对于一个矩阵 $A$(假设其奇异值为 $\sigma_1, \sigma_2, \dots, \sigma_r$),其核范数定义为: $$ \|A\|_* = \sum_{i=1}^{r} \sigma_i, $$ 其中 $r$ 是矩阵 $A$ 的秩。 核范数的主要特点 凸性 核范数是一个凸函数,因此在优化问题中常用作替代矩阵秩的惩罚项(因为直接最小化矩阵秩是一个NP困难的问题)。 低秩逼近 在矩阵补全、低秩矩阵恢复等应用中,核范数被用来鼓励矩阵解具有低秩性质,因其是矩阵秩的凸松弛。 与SVD的关系 核范数直接依赖于矩阵的奇异值,计算时通常需要奇异值分解(SVD)。 Frobenius 范数 对于一个矩阵 $A \in \mathbb{R}^{m \times n}$,其 Frobenius 范数定义为 $$ \|A\|_F = \sqrt{\sum_{i=1}^{m}\sum_{j=1}^{n} a_{ij}^2} $$ 这个定义与向量 $L2$ 范数类似,只不过是对矩阵中所有元素取平方和后再开平方。 如果矩阵 $A$ 的奇异值为 $\sigma_1, \sigma_2, \ldots, \sigma_n$,则: $$ \|A\|_F = \sqrt{\sum_{i=1}^n \sigma_i^2} $$ 这使得 Frobenius 范数在低秩近似和矩阵分解(如 SVD)中非常有用。 迹和 Frobenius 范数的关系: $$ \|A\|_F^2 = \text{tr}(A^* A) $$ 这表明 Frobenius 范数的平方就是 $A^* A$ 所有特征值之和。而 $A^* A$ 的特征值开方就是A的奇异值。 权重为向量的情况 当模型的输出是标量时(如单变量线性回归或二分类逻辑回归): 输入特征:$\mathbf _i \in \mathbb{R}^d$(向量) 权重形状:$\mathbf{w} \in \mathbb{R}^d$(向量) 预测公式: $$ \hat{y}_i = \mathbf{w}^\top \mathbf _i $$ 其中 $\hat{y}_i$ 是标量输出。 权重为矩阵的情况 当模型的输出是向量时(如多变量回归、神经网络全连接层): 输入特征:$\mathbf _i \in \mathbb{R}^d$(向量) 输出维度:$\hat{\mathbf{y}}_i \in \mathbb{R}^m$(向量) 权重形状:$W \in \mathbb{R}^{m \times d}$(矩阵) 预测公式: $$ \hat{\mathbf{y}}_i = W \mathbf _i + \mathbf{b} $$ 其中 $\mathbf{b} \in \mathbb{R}^m$ 是偏置向量。 矩阵的迹 迹的定义 对于一个 $n \times n$ 的矩阵 $B$,其迹(trace)定义为矩阵对角线元素之和: $$ \text{tr}(B) = \sum_{i=1}^n B_{ii} $$ 迹与特征值的关系 对于一个 $n \times n$ 的矩阵 $B$,其迹等于其特征值之和。即: $$ \text{tr}(B) = \sum_{i=1}^n \lambda_i $$ 其中 $\lambda_1, \lambda_2, \ldots, \lambda_n$ 是矩阵 $B$ 的特征值。 应用到 $A^ A$* 对于矩阵 $A^* A$(如果 $A$ 是实矩阵,则 $A^* = A^T$),它是一个半正定矩阵,其特征值是非负实数。 $A^* A$ 的迹还与矩阵 $A$ 的 Frobenius 范数有直接关系。具体来说: $$ \|A\|_F^2 = \text{tr}(A^* A) $$ 迹的基本性质 迹是一个线性运算,即对于任意标量 $c_1, c_2$ 和矩阵 $A, B$,有: $$ \text{tr}(c_1 A + c_2 B) = c_1 \text{tr}(A) + c_2 \text{tr}(B) $$ 对于任意矩阵 $A, B, C$,迹满足循环置换性质: $$ \text{tr}(ABC) = \text{tr}(CAB) = \text{tr}(BCA) $$ 注意:迹的循环置换性不意味着 $\text{tr}(ABC) = \text{tr}(BAC)$,除非矩阵 $A, B, C$ 满足某些特殊条件(如对称性)。 酉矩阵 酉矩阵是一种复矩阵,其满足下面的条件:对于一个 $n \times n$ 的复矩阵 $U$,如果有 $$ U^* U = U U^* = I, $$ 其中 $U^*$ 表示 $U$ 的共轭转置(先转置再取复共轭),而 $I$ 是 $n \times n$ 的单位矩阵,那么 $U$ 就被称为酉矩阵。简单来说,酉矩阵在复内积空间中保持内积不变,相当于在该空间中的“旋转”或“反射”。 如果矩阵的元素都是实数,那么 $U^*$ 就等于 $U^T$(转置),这时酉矩阵就退化为正交矩阵。 考虑二维旋转矩阵 $$ U = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}. $$ 当 $\theta$ 为任意实数时,这个矩阵满足 $$ U^T U = I, $$ 所以它是一个正交矩阵,同时也属于酉矩阵的范畴。 例如,当 $\theta = \frac{\pi}{4}$(45°)时, $$ U = \begin{bmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{bmatrix}. $$ 正定\正半定矩阵 正定矩阵(PD) $$ A \text{ 正定} \iff \forall, x \in \mathbb{R}^n \setminus {0}, \quad x^T A x > 0. $$ 正半定矩阵(PSD) $$ A \text{ 正半定} \iff \forall, x \in \mathbb{R}^n, \quad x^T A x \ge 0. $$ PD:所有特征值都严格大于零。 $\lambda_i(A)>0,;i=1,\dots,n$。 PSD:所有特征值都非负。 $\lambda_i(A)\ge0,;i=1,\dots,n$。 拉普拉斯矩阵是正半定矩阵! 对于任意实矩阵 $A$(大小为 $m\times n$),矩阵 $B = A^T A\quad(\text{大小为 }n\times n).$是半正定矩阵 显然 $$ B^T = (A^T A)^T = A^T (A^T)^T = A^T A = B, $$ 所以 $B$ 是对称矩阵。 对任意向量 $x\in\mathbb R^n$,有 $$ x^T B,x = x^T (A^T A) x = (Ax)^T (Ax) = |Ax|^2 ;\ge;0. $$ 因此 $B$ 总是 正半定(PSD) 的。 对称非负矩阵分解 $$ A≈HH^T $$ 1. 问题回顾 给定一个对称非负矩阵 $A\in\mathbb{R}^{n\times n}$,我们希望找到一个非负矩阵 $H\in\mathbb{R}^{n\times k}$ 使得 $$ A \approx HH^T. $$ 为此,我们可以**最小化目标函数(损失函数)** $$ f(H)=\frac{1}{2}\|A-HH^T\|_F^2, $$ 其中 $\|\cdot\|_F$ 表示 Frobenius 范数,定义为矩阵所有元素的平方和的平方根。 $| A - H H^T |_F^2$ 表示矩阵 $A - H H^T$ 的所有元素的平方和。 2. 梯度下降方法 2.1 计算梯度 目标函数(损失函数)是 $$ f(H)=\frac{1}{2}\|A-HH^T\|_F^2. $$ $$ \|M\|_F^2 = \operatorname{trace}(M^T M), $$ 因此,目标函数可以写成: $$ f(H)=\frac{1}{2}\operatorname{trace}\Bigl[\bigl(A-HH^T\bigr)^T\bigl(A-HH^T\bigr)\Bigr]. $$ 注意到 $A$ 和$HH^T$ 都是对称矩阵,可以简化为: $$ f(H)=\frac{1}{2}\operatorname{trace}\Bigl[\bigl(A-HH^T\bigr)^2\Bigr]. $$ 展开后得到 $$ f(H)=\frac{1}{2}\operatorname{trace}\Bigl[A^2 - 2AHH^T + (HH^T)^2\Bigr]. $$ 其中 $\operatorname{trace}(A^2)$ 与 $H$ 无关,可以看作常数,不影响梯度计算。 计算 $\nabla_H \operatorname{trace}(-2 A H H^T)$ $$ \nabla_H \operatorname{trace}(-2 A H H^T) = -4 A H $$ 计算 $\nabla_H \operatorname{trace}((H H^T)^2)$ $$ \nabla_H \operatorname{trace}((H H^T)^2) = 4 H H^T H $$ 将两部分梯度合并: $$ \nabla_H f(H) = \frac{1}{2}(4 H H^T H - 4 A H )= 2(H H^T H - A H) $$ 2.2 梯度下降更新 设学习率为 $\eta>0$,则梯度下降的基本更新公式为: $$ H \leftarrow H - \eta\, \nabla_H f(H) = H - 2\eta\Bigl(HH^T H - A H\Bigr). $$ 由于我们要求 $H$ 中的元素保持非负,所以每次更新之后通常需要进行投影: $$ H_{ij} \leftarrow \max\{0,\,H_{ij}\}. $$ 这种方法称为投影梯度下降,保证每一步更新后 $H$ 满足非负约束。 3. 举例说明 设对称非负矩阵: $$ A = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}, \quad k=1, \quad H \in \mathbb{R}^{2 \times 1} $$ 初始化 $H^{(0)} = \begin{bmatrix} 1 \\ 1 \end{bmatrix}$,学习率 $\eta = 0.01$。 迭代步骤: 初始 ( H^{(0)} ): $$ H^{(0)} = \begin{bmatrix} 1 \\ 1 \end{bmatrix}, \quad H^{(0)}(H^{(0)})^T = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}. $$ 目标函数值: $$ f(H^{(0)}) = \frac{1}{2} \left( (2-1)^2 + 2(1-1)^2 + (2-1)^2 \right) = 1. $$ 计算梯度: $$ HH^T H = \begin{bmatrix} 2 \\ 2 \end{bmatrix}, \quad AH = \begin{bmatrix} 3 \\ 3 \end{bmatrix}, $$ $$ \nabla_H f(H^{(0)}) = 2 \left( \begin{bmatrix} 2 \\ 2 \end{bmatrix} - \begin{bmatrix} 3 \\ 3 \end{bmatrix} \right) = \begin{bmatrix} -2 \\ -2 \end{bmatrix}. $$ 更新 ( H ): $$ H^{(1)} = H^{(0)} - 2 \cdot 0.01 \cdot \begin{bmatrix} -2 \\ -2 \end{bmatrix} = \begin{bmatrix} 1.04 \\ 1.04 \end{bmatrix}. $$ 更新后目标函数: $$ H^{(1)}(H^{(1)})^T = \begin{bmatrix} 1.0816 & 1.0816 \\ 1.0816 & 1.0816 \end{bmatrix}, $$ $$ f(H^{(1)}) = \frac{1}{2} \left( (2-1.0816)^2 + 2(1-1.0816)^2 + (2-1.0816)^2 \right) \approx 0.8464. $$ 一次迭代后目标函数值从 $1.0$ 下降至 $0.8464$
科研
zy123
3月23日
0
4
0
2025-03-22
同步本地Markdown至Typecho站点
同步本地Markdown至Typecho站点 本项目基于https://github.com/Sundae97/typecho-markdown-file-publisher 实现效果: 将markdown发布到typecho 发布前将markdown中的公式块和代码块进行格式化,确保能适配md解析器。 发布前将markdown的图片资源上传到自己搭建的图床Easyimage中(自行替换成阿里云OSS等), 并替换markdown中的图片链接。 将md所在的文件夹名称作为post的category(mysql发布可以插入category, xmlrpc接口暂时不支持category操作)。 以title和category作为文章的唯一标识,如果数据库中已有该数据,将会更新现有文章,否则新增文章。 环境:Typecho1.2.1 php8.1.0 项目目录 typecho_markdown_upload/main.py是上传md文件到站点的核心脚本 transfer_md/transfer.py是对md文件进行预处理的脚本。 核心思路 一、预先准备 图床服务器 本人自己在服务器上搭建了私人图床——easyimage,该服务能够实现图片上传并返回公网 URL,这对于在博客中正常显示 Markdown 文件中的图片至关重要。 当然,也可以选择使用公共图床服务,如阿里云 OSS,但这里不做详细介绍。 需手动修改transfer_md/upload_img.py,配置url、token等信息。 参考博客:【好玩儿的Docker项目】10分钟搭建一个简单图床——Easyimage-我不是咕咕鸽 github地址:icret/EasyImages2.0: 简单图床 - 一款功能强大无数据库的图床 2.0版 picgo安装: 使用 Typora + PicGo + Easyimage 组合,可以实现将本地图片直接粘贴到 Markdown 文件中,并自动上传至图床。 下载地址:Releases · Molunerfinn/PicGo 操作步骤如下: 打开 PicGo,点击右下角的小窗口。 进入插件设置,搜索并安装 web-uploader 1.1.1 插件(注意:旧版本可能无法搜索到,建议直接安装最新版本)。 配置插件:在设置中填写 API 地址,该地址可在 Easyimage 的“设置-API设置”中获取。 配置完成后,即可实现图片自动上传,提升 Markdown 编辑体验。 Typora 设置 为了确保在博客中图片能正常显示,编辑 Markdown 文档时必须将图片上传至图床,而不是保存在本地。请按以下步骤进行配置: 在 Typora 中,打开 文件 → 偏好设置 → 图像 选项。 在 “插入图片时” 选项中,选择 上传图片。 在 “上传服务设定” 中选择 PicGo,并指定 PicGo 的安装路径。 文件结构统一: md_files ├── category1 │ ├── file1.md │ └── file2.md ├── category2 │ ├── file3.md │ └── file4.md └── output ├── assets_type ├── pics └── updated_files 注意:category对应上传到typecho中的文章所属的分类。 如果你现有的图片分散在系统中,可以使用 transfer_md/transfer.py 脚本来统一处理。该脚本需要传入三个参数: input_path: 指定包含 Markdown 文件的根目录(例如上例中的 md_files)。 output_path: 输出文件夹(例如上例中的 output)。 type_value: 1:扫描 input_path 下所有 Markdown 文件,将其中引用的本地图片复制到 output_path 中,同时更新 Markdown 文件中的图片 URL 为 output_path 内的路径; 2:为每个 Markdown 文件建立单独的文件夹(以文件名命名),图片存放在文件夹下的 assets 子目录中,整体存入assets_type文件夹中,; 3:扫描 Markdown 文件中的本地图片,将其上传到图床(获取公网 URL),并将 Markdown 文件中对应的图片 URL 替换为公网地址。 4:预处理Markdown 文件,将公式块和代码块格式化,以便于Markdown解析器解析(本地typora编辑器对于md格式比较宽容,但博客中使用的md解析器插件不一定能正确渲染!) 二、使用Git进行版本控制 假设你在服务器上已经搭建了 Gitea (Github、Gitee都行)并创建了一个名为 md_files 的仓库,那么你可以在 md_files 文件夹下通过 Git Bash 执行以下步骤将本地文件提交到远程仓库: 初始化本地仓库: git init 添加远程仓库: 将远程仓库地址添加为 origin(请将 http://xxx 替换为你的实际仓库地址): git remote add origin http://xxx 添加文件并提交: 注意,写一个.gitignore文件将output排除版本控制 git add . git commit -m "Initial commit" 推送到远程仓库: git push -u origin master 后续更新(可写个.bat批量执行): git add . git commit -m "更新了xxx内容" git push 三、在服务器上部署该脚本 1. 确保脚本能够连接到 Typecho 使用的数据库 本博客使用 docker-compose 部署 Typecho(参考:【好玩儿的Docker项目】10分钟搭建一个Typecho博客|太破口!念念不忘,必有回响!-我不是咕咕鸽)。为了让脚本能访问 Typecho 的数据库,我将 Python 应用pyapp也通过 docker-compose 部署,这样所有服务均在同一网络中,互相之间可以直接通信。 参考docker-compose.yml如下: services: nginx: image: nginx ports: - "4000:80" # 左边可以改成任意没使用的端口 restart: always environment: - TZ=Asia/Shanghai volumes: - ./typecho:/var/www/html - ./nginx:/etc/nginx/conf.d - ./logs:/var/log/nginx depends_on: - php networks: - web php: build: php restart: always expose: - "9000" # 不暴露公网,故没有写9000:9000 volumes: - ./typecho:/var/www/html environment: - TZ=Asia/Shanghai depends_on: - mysql networks: - web pyapp: build: ./markdown_operation # Dockerfile所在的目录 restart: "no" volumes: - /home/zy123/md_files:/markdown_operation/md_files networks: - web env_file: - .env depends_on: - mysql mysql: image: mysql:5.7 restart: always environment: - TZ=Asia/Shanghai expose: - "3306" # 不暴露公网,故没有写3306:3306 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/logs:/var/log/mysql - ./mysql/conf:/etc/mysql/conf.d env_file: - mysql.env networks: - web networks: web: 注意:如果你不是用docker部署的typecho,只要保证脚本能连上typecho所使用的数据库并操纵里面的表就行! 2. 将 md_files 挂载到容器中,保持最新内容同步 这样有几个优势: 不需要每次构建镜像或进入容器手动拉取; 本地更新 md_files 后,容器内自动同步,无需额外操作; 保持了宿主机上的 Git 版本控制和容器内的数据一致性。 3.仅针对 pyapp 服务进行重构和启动,不影响其他服务的运行: pyapp是本Python应用在容器内的名称。 1.构建镜像: docker-compose build pyapp 2.启动容器并进入 Bash: docker-compose run --rm -it pyapp /bin/bash 3.在容器内运行脚本: python typecho_markdown_upload/main.py 2、3两步可合并为: docker-compose run --rm pyapp python typecho_markdown_upload/main.py 此时可以打开博客验证一下是否成功发布文章了! 如果失败,可以验证mysql数据库: 1️⃣ 进入 MySQL 容器: docker-compose exec mysql mysql -uroot -p # 输入你的 root 密码 2️⃣ 切换到 Typecho 数据库并列出表: USE typecho; SHOW TABLES; 3️⃣ 查看 typecho_contents 表结构(文章表): DESCRIBE typecho_contents; mysql> DESCRIBE typecho_contents; +--------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------+----------------+ | cid | int(10) unsigned | NO | PRI | NULL | auto_increment | | title | varchar(150) | YES | | NULL | | | slug | varchar(150) | YES | UNI | NULL | | | created | int(10) unsigned | YES | MUL | 0 | | | modified | int(10) unsigned | YES | | 0 | | | text | longtext | YES | | NULL | | | order | int(10) unsigned | YES | | 0 | | | authorId | int(10) unsigned | YES | | 0 | | | template | varchar(32) | YES | | NULL | | | type | varchar(16) | YES | | post | | | status | varchar(16) | YES | | publish | | | password | varchar(32) | YES | | NULL | | | commentsNum | int(10) unsigned | YES | | 0 | | | allowComment | char(1) | YES | | 0 | | | allowPing | char(1) | YES | | 0 | | | allowFeed | char(1) | YES | | 0 | | | parent | int(10) unsigned | YES | | 0 | | | views | int(11) | YES | | 0 | | | agree | int(11) | YES | | 0 | | +--------------+------------------+------+-----+---------+----------------+ 4️⃣ 查询当前文章数量(确认执行前后有无变化): SELECT COUNT(*) AS cnt FROM typecho_contents; 自动化 1.windows下写脚本自动/手动提交每日更新 2.在 Linux 服务器上配置一个定时任务,定时执行 git pull 命令和启动脚本更新博客的命令。 创建脚本/home/zy123/typecho/deploy.sh #!/bin/bash cd /home/zy123/md_files || exit git pull cd /home/zy123/typecho || exit docker compose run --rm pyapp python typecho_markdown_upload/main.py 赋予可执行权限chmod +x /home/zy123/deploy.sh 编辑 Crontab 安排任务(每天0点10分执行) 打开 crontab 编辑器:$crontab -e$ 10 0 * * * /home/zy123/typecho/deploy.sh >> /home/zy123/typecho/deploy.log 2>&1 3.注意md_files文件夹所属者和deploy.sh的所属者需要保持一致。否则会报: fatal: detected dubious ownership in repository at '/home/zy123/md_files' To add an exception for this directory, call: git config --global --add safe.directory /home/zy123/md_files TODO typecho_contents表中的slug字段代表链接中的日志缩略名,如wordpress风格 /archives/{slug}.html,目前是默认int自增,有需要的话可以在插入文章时手动设置该字段。
自学
zy123
3月22日
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),再将它们的结果进行拼接(或在最后一层进行平均),从而得到最终的节点表示。 注意力系数 注意力系数(未归一化) $$ e_{ij} = a\bigl(W\mathbf{h}_i,\; W\mathbf{h}_j\bigr) $$ 注意力系数的 softmax 归一化 $$ \alpha_{ij} = \text{softmax}_j\bigl(e_{ij}\bigr) = \frac{\exp\bigl(e_{ij}\bigr)}{\sum_{k \in \mathcal{N}_i} \exp\bigl(e_{ik}\bigr)} $$ 具体的注意力计算形式(以单层前馈网络 + LeakyReLU 为例) $$ \alpha_{ij} = \frac{\exp\Bigl(\text{LeakyReLU}\bigl(\mathbf{a}^\top \bigl[\;W\mathbf{h}_i \,\|\, W\mathbf{h}_j\bigr]\bigr)\Bigr)} {\sum_{k\in \mathcal{N}_i} \exp\Bigl(\text{LeakyReLU}\bigl(\mathbf{a}^\top \bigl[\;W\mathbf{h}_i \,\|\, W\mathbf{h}_k\bigr]\bigr)\Bigr)} $$ 其中,$\mathbf{a}$ 为可学习的参数向量,$|$ 表示向量拼接(concatenation)。 示例假设: 节点特征: 假设每个节点的特征向量维度为 $F=2$。 $$ \mathbf{h}_i = \begin{bmatrix}1 \ 0\end{bmatrix},\quad \mathbf{h}_j = \begin{bmatrix}0 \ 1\end{bmatrix},\quad \mathbf{h}_k = \begin{bmatrix}1 \ 1\end{bmatrix}. $$ 线性变换矩阵 $W$: 为了简化,我们令 $W$ 为单位矩阵(即 $W\mathbf{h} = \mathbf{h}$)。 $$ W = \begin{bmatrix}1 & 0 \ 0 & 1\end{bmatrix}. $$ 可学习向量 $\mathbf{a}$: 假设 $\mathbf{a}$ 为 4 维向量,设 $$ \mathbf{a} = \begin{bmatrix}1 \ 1 \ 1 \ 1\end{bmatrix}. $$ 激活函数使用 LeakyReLU(负数斜率设为0.2,但本例中结果为正数,所以不变)。 计算步骤: 计算 $W\mathbf{h}_i$、$W\mathbf{h}_j$ 和 $W\mathbf{h}_k$: $$ W\mathbf{h}_i = \begin{bmatrix}1 \ 0\end{bmatrix},\quad W\mathbf{h}_j = \begin{bmatrix}0 \ 1\end{bmatrix}, \quad W\mathbf{h}_k = \begin{bmatrix}1 \ 1\end{bmatrix} $$ 构造拼接向量并计算未归一化的注意力系数 $e_{ij}$ 和 $e_{ik}$: 对于邻居 $j$: $$ \bigl[W\mathbf{h}_i ,|, W\mathbf{h}_j\bigr] = \begin{bmatrix}1 \ 0 \ 0 \ 1\end{bmatrix}. $$ 内积计算: $$ \mathbf{a}^\top \begin{bmatrix}1 \ 0 \ 0 \ 1\end{bmatrix} = 1+0+0+1 = 2. $$ 经过 LeakyReLU(正数保持不变): $$ e_{ij} = 2. $$ 对于邻居 $k$,同理得到: $$ e_{ik} = 3. $$ 计算 softmax 得到归一化注意力系数 $\alpha_{ij}$: $$ \alpha_{ij} = \frac{\exp(2)}{\exp(2)+\exp(3)} = \frac{e^2}{e^2+e^3}\approx 0.269. $$ 同理: $$ \alpha_{ik} = \frac{\exp(3)}{\exp(2)+\exp(3)} \approx 0.731. $$ 特征聚合 单头注意力聚合(得到新的节点特征) $$ \mathbf{h}_i' = \sigma\Bigl(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \,W \mathbf{h}_j\Bigr) $$ 对$i$ 的邻居节点加权求和,再经过非线性激活函数得到新的特征表示 多头注意力(隐藏层时拼接) 每个头都有自己的一组可学习参数,并独立计算注意力系数和输出特征。以捕捉邻居节点的多种不同关系或特征。 如果有 $K$ 个独立的注意力头,每个头输出 $\mathbf{h}_i'^{(k)}$,则拼接后的输出为: $$ \mathbf{h}_i' = \big\Vert_{k=1}^K \sigma\Bigl(\sum_{j \in \mathcal{N}_i} \alpha_{ij}^{(k)} \, W^{(k)} \mathbf{h}_j\Bigr) $$ 其中,$\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}. $$ **多头注意力(输出层时平均)** 在最终的输出层(例如分类层)通常会将多个头的结果做平均,而不是拼接: $$ \mathbf{h}_i' = \sigma\Bigl( \frac{1}{K} \sum_{k=1}^K \sum_{j \in \mathcal{N}_i} \alpha_{ij}^{(k)} \, W^{(k)} \mathbf{h}_j \Bigr) $$ 直推式学习与归纳式学习 直推式学习(Transductive Learning) 模型直接在固定的训练图上学习节点的表示或标签,结果只能应用于这张图中的节点,无法直接推广到新的、未见过的节点或图。 例如:DeepWalk ,它通过对固定图的随机游走生成节点序列来学习节点嵌入,因此只能得到训练图中已有节点的表示,一旦遇到新节点,需要重新训练或进行特殊处理。 注意:GCN是直推式的,因为它依赖于整个图的归一化邻接矩阵进行卷积操作,需要在固定图上训练。 归纳式学习(Inductive Learning) 模型学习的是一个映射函数或规则,可以将这种规则推广到未见过的新节点或新图上。这种方法能够处理动态变化的图结构或新的数据。 例如: 图神经网络的变体(GAT)都是归纳式的,因为它们在聚合邻居信息时学习一个共享的函数,该函数能够应用于任意新节点。 局部计算:GAT 的注意力机制仅在每个节点的局部邻域内计算,不依赖于全局图结构。 参数共享:模型中每一层的参数(如 $W$ 和注意力参数 $\mathbf{a}$)是共享的,可以直接应用于新的、未见过的图。 泛化到新节点:在许多推荐系统中,如果有新用户加入(新节点),我们需要给他们做个性化推荐,这就要求系统能够在不重新训练整个模型的情况下,为新用户生成表示(Embedding),并且完成推荐预测。 泛化到新图: 分子图预测。我们会用一批训练分子(每个分子是一张图)来训练一个 GNN 模型,让它学会如何根据图结构与原子特征来预测分子的某些性质(如毒性、溶解度、活性等)。训练完成后,让它在新的分子上做预测。 GNN的优点: 参数共享 浅层嵌入(如Deepwalk)为每个节点单独学习一个向量,参数量随节点数线性增长。 GNN 使用统一的消息传递/聚合函数,所有节点共享同一套模型参数,大幅减少参数量。 归纳式学习 浅层方法通常无法直接处理训练时未见过的新节点。 GNN 能通过邻居特征和结构来生成新节点的表示,实现对新节点/新图的泛化。 利用节点特征 浅层方法多半只基于连接关系(图结构)。 GNN 可以直接整合节点的属性(文本、图像特征等),生成更具语义信息的嵌入。 更强的表达能力 GNN 通过多层聚合邻居信息,可学习到更丰富的高阶结构和特征交互,往往在多种任务上表现更优。
科研
zy123
3月21日
0
8
0
2025-03-21
机器学习
机器学习与深度学习 机器学习 监督学习 监督学习(Supervised Learning) 定义:所有训练数据都具有明确的标签,模型通过这些标签进行学习。 特点:模型训练相对直接,性能受限于标注数据的质量和数量。 示例:传统的分类问题,如手写数字识别、垃圾邮件检测等。 无监督学习(Unsupervised Learning) 定义:训练数据完全没有标签,模型需要自己去发现数据中的模式或结构。 特点:常用于聚类、降维、关联规则挖掘等任务,难以直接用于分类任务。 示例:聚类算法(如K-means)和主成分分析(PCA)。 半监督学习(Semi‑supervised Learning) 定义:介于监督学习和无监督学习之间,使用少量带标签的数据和大量未标签的数据共同训练模型,以在标注数据稀缺时提升分类性能。 特点:结合标签信息与数据分布结构,通过利用未标签数据的内在聚类或流形结构降低对标注数据的依赖,从而提高模型泛化能力并降低标注成本;通常依赖平滑假设和聚类假设等前提。 示例:在猫狗图像分类任务中,先使用少量已标记的猫狗图片训练初始模型,再用该模型为大量未标记图片生成“伪标签”,将这些伪标签数据与原有标记数据合并重新训练,从而获得比仅使用有标签数据更高的分类准确率。 在半监督学习中,为了避免将错误的模型预测“伪标签”纳入训练,必须对每个未标注样本的预测结果进行可信度评估,只保留高置信度、准确率更高的伪标签作为新增训练数据。 深度学习 前向传播 Mini Batch梯度下降 Batch Size(批大小) 定义 Batch Size 指在深度学习模型训练过程中,每次迭代送入网络进行前向传播和反向传播的样本数量。 特点 Batch Size 决定了梯度更新的频率和稳定性;较大的 Batch Size 能更好地利用 GPU 并行计算、减少迭代次数、加快训练速度,但会显著增加显存占用且可能降低模型泛化能力;较小的 Batch Size 则带来更大的梯度噪声,有助于跳出局部最优、提高泛化性能,但训练过程更不稳定且耗时更长。 示例:在 PyTorch 中,使用 DataLoader(dataset, batch_size=32, shuffle=True) 表示每次迭代从数据集中抽取 32 个样本进行训练。一个batch的所有样本会被打包成一个张量,一次性并行送入网络进行计算 将完整训练集分割成若干大小相同的小批量(mini‑batch),每次迭代仅使用一个 mini‑batch 来计算梯度并更新模型参数,结合了批量梯度下降(Batch GD)和随机梯度下降(SGD)的优势。 当 batch_size=1 时退化为随机梯度下降;当 batch_size=m(训练集总样本数)时退化为批量梯度下降。 通常选择 2 的幂(如32、64、128、256)以匹配 GPU/CPU 内存布局并提升运算效率。 算法流程 将训练数据随机打乱并按 batch_size 划分成多个 mini‑batch。 对每个 mini‑batch 执行: 前向传播计算输出。 计算 mini‑batch 上的平均损失。 反向传播计算梯度。 按公式更新参数: $$ \theta \leftarrow \theta - \eta \frac{1}{|\text{batch}|}\sum_{i\in \text{batch}} \nabla_\theta \mathcal{L}(x_i,y_i) $$ 遍历所有 mini‑batch 即完成一个 epoch,可重复多轮直到收敛。 Softmax 公式 假设有一个输入向量 $$ z = [z_1, z_2, \dots, z_K], $$ 则 softmax 函数的输出为: $$ \sigma(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}, $$ 其中 $i = 1, 2, \dots, K$。 分子:对每个 $z_i$ 取自然指数 $e^{z_i}$,目的是将原始的实数扩展到正数范围。 分母:对所有 $e^{z_j}$ 求和,从而实现归一化,使得所有输出概率和为 1。 交叉熵损失 假设有三个类别,真实标签为第二类,因此用 one-hot 编码表示为: $$ y = [0,\; 1,\; 0]. $$ 假设模型经过 softmax 后输出的预测概率为: $$ \hat{y} = [0.2,\; 0.7,\; 0.1]. $$ 交叉熵损失函数的定义为: $$ L = -\sum_{i=1}^{3} y_i \log \hat{y}_i. $$ 将 $y$ 和 $\hat{y}$ 的对应元素代入公式中: $$ L = -(0 \cdot \log 0.2 + 1 \cdot \log 0.7 + 0 \cdot \log 0.1) = -\log 0.7. $$ 计算 $-\log 0.7$(以自然对数为例): $$ -\log 0.7 \approx -(-0.3567) \approx 0.3567. $$ 因此,这个样本的交叉熵损失大约为 0.3567。 残差连接 假设一个神经网络层(或一组层)的输入为 $x$,传统的设计会期望该层直接学习一个映射 $F(x)$。而采用残差连接的设计,则将输出定义为: $$ \text{Output} = F(x) + x. $$ 这里: $F(x)$ 表示经过几层变换(比如卷积、激活等)后所学到的“残差”部分, $x$ 则是直接通过捷径传递过来的输入。 为什么使用残差连接 缓解梯度消失问题 在深层网络中,梯度往往会在反向传播过程中逐层衰减,而残差连接为梯度提供了一条捷径,使得梯度可以直接从后面的层传递到前面的层,从而使得网络更容易训练。 简化学习任务 网络不必学习从零开始构造一个完整的映射,而只需要学习输入与目标之间的残差。这样可以使得学习任务变得更简单,更易收敛。 提高网络性能 在很多实际应用中(例如图像识别中的 ResNet),引入残差连接的网络能训练得更深,并在多个任务上取得更好的效果。
科研
zy123
3月21日
0
1
0
2025-03-21
颜佳佳论文
颜佳佳论文 多智能体随机网络结构的实时精确估算 基于扰动理论的特征向量估算方法 设原矩阵为 $A$,扰动后矩阵为 $A+\zeta C$(扰动矩阵 $\zeta C$,$\zeta$是小参数),令其第 $i$ 个特征值、特征向量分别为 $\lambda_i,x_i$ 和 $\tilde\lambda_i,\tilde x_i$。 特征向量的一阶扰动公式: $$ \Delta x_i =\tilde x_i - x_i \;\approx\; \zeta \sum_{k\neq i} \frac{x_k^T\,C\,x_i}{\lambda_i - \lambda_k}\;x_k, $$ 输出:对应第 $i$ 个特征向量修正量 $\Delta x_i$。 特征值的一阶扰动公式: $$ \Delta\lambda_i = \tilde\lambda_i - \lambda_i \;\approx\;\zeta\,x_i^T\,C\,x_i $$ **关键假设:**当扰动较小( $\zeta\ll1$) 且各模态近似正交均匀时,常作进一步近似 $$ x_k^T\,C\,x_i \;\approx\; x_i^T\,C\,x_i \; $$ 正交: $\{x_k\}$ 本身是正交基,这是任何对称矩阵特征向量天然具有的属性。 均匀:我们把 $C$ 看作“不偏向任何特定模态”的随机小扰动——换句话说,投影到任何两个方向 $(x_i,x_k)$ 上的耦合强度 $x_k^T,C,x_i\quad\text{和}\quad x_i^T,C,x_i$ 在数值量级上应当差不多,因此可以互相近似。 因此,将所有的 $x_k^T C x_i$ 替换为 $x_i^T C x_i$: $$ \Delta x_i \approx \zeta \sum_{k\neq i} \frac{x_i^T C x_i}{\lambda_i - \lambda_k} x_k = \zeta (x_i^T C x_i) \sum_{k\neq i} \frac{1}{\lambda_i - \lambda_k} x_k = \sum_{k\neq i} \frac{\Delta \lambda_i}{\lambda_i - \lambda_k} x_k \tag{*} $$ $$ \Delta x_i \approx\sum_{k\neq i} \frac{\Delta \lambda_i}{\lambda_i - \lambda_k} x_k \tag{*} $$ 问题: 当前时刻的邻接矩阵 $$ A^{(1)}\in\mathbb R^{n\times n},\qquad A^{(1)},x_i^{(1)}=\lambda_i^{(1)},x_i^{(1)},\quad |x_i^{(1)}|=1. $$ 下一时刻的邻接矩阵 $$ A^{(2)}\in\mathbb R^{n\times n}, $$ 已知它的第 $i$ 个特征值 $\lambda_i^{(2)}$(卡尔曼滤波得来). 求当前时刻的特征向量 $x_i^{(2)}$。 下一时刻第 $i$ 个特征向量的预测为 $$ \boxed{ x_i^{(2)} \;=\; x_i^{(1)}+\Delta x_i \;\approx\; x_i^{(1)} +\sum_{k\neq i} \frac{\lambda_i^{(2)}-\lambda_i^{(1)}} {\lambda_i^{(1)}-\lambda_k^{(1)}}\; x_k^{(1)}. } $$ 通过该估算方法可以依次求出下一时刻的所有特征向量。 多智能体随机网络特征值滤波建模 1. 状态转移模型 系统的特征值向量 $\lambda_k$(状态向量)随时间演化的动态方程为: $$ \lambda_k = \lambda_{k-1} + w_{k-1} $$ 参数说明: $\lambda_k \in \mathbb{R}^{r \times 1}$:$k$ 时刻的特征值向量,$r$ 为特征值个数。 $w_{k-1} \sim \mathcal{N}(0, {Q})$:过程噪声,均值为零,协方差矩阵为对角阵 $\mathbf{Q} \in \mathbb{R}^{r \times r}$(因特征值独立)。 简化假设: 状态转移矩阵 $\mathbf{A}$ 和控制输入矩阵 $\mathbf{B}$ 为单位阵或零(无外部控制输入),故模型简化为随机游走形式。 2. 测量模型 观测到的特征值向量 $z_k$ 为: $$ z_k = \lambda_k + v_k $$ 参数说明: $z_k \in \mathbb{R}^{r \times 1}$:观测向量,维度与状态向量相同。 $v_k \sim \mathcal{N}(0, \mathbf{R})$:测量噪声,协方差 $\mathbf{R} \in \mathbb{R}^{r \times r}$ 为对角阵(噪声独立)。 简化假设: 测量矩阵 $\mathbf{H}$ 为单位阵,即观测直接反映状态。 3. 噪声协方差矩阵的设定 $\mathbf{Q}$ 和 $\mathbf{R}$ 为对角矩阵,对角元素由特征值方差确定: $$ \mathbf{Q} = \text{diag}(2\sigma_1^2, 2\sigma_2^2, \dots, 2\sigma_r^2), \quad \mathbf{R} = \text{diag}(\sigma_1^2, \sigma_2^2, \dots, \sigma_r^2) $$ 其中 $\sigma_i^2$ 为第 $i$ 个特征值的初始方差(由引理3-1推导)。 网络结构优化 直接SNMF分解(无优化) 输入矩阵:原始动态网络邻接矩阵 $A$(可能稠密或高秩) 处理流程: 直接对称非负矩阵分解:$A \approx UU^T$ 通过迭代调整$U$和旋转矩阵$Q$逼近目标 存在问题: 高秩矩阵需要保留更多特征值($\kappa$较大) 非稀疏矩阵计算效率低 先优化再SNMF(论文方法) 优化阶段(ADMM): 目标函数:$\min_{A_{\text{opt}}} (1-\alpha)|A_{\text{opt}}|* + \alpha|A{\text{opt}}|_1$ 输出优化矩阵$A_{\text{opt}}$ SNMF阶段: 输入变为优化后的$A_{\text{opt}}$ 保持相同分解流程但效率更高 网络优化中的邻接矩阵重构问题建模与优化 可行解集合定义(公式4-4) $$ \Omega = \left\{ A \middle| A^T = A,\, A \odot P = A_{\text{pre}} \odot P,\, A \odot A_{\max}' = 0 \right\} $$ $A^T = A$:确保邻接矩阵对称 $A \odot P = A_{\text{pre}} \odot P$:掩码矩阵$P$ ,原来已有的连接不变,只让优化原本没有连接的地方。($\odot$为Hadamard积) $A \odot A_{\max}' = 0$:功率约束矩阵$\ A_{\max}'$ 禁止在原本无连接的节点间新增边 限制矩阵$A_{\max}'$的定义(公式4-5) $$ A'_{\max, ij} = \begin{cases} 0, & \text{若 } A_{\max, ij} \ne 0 \\ 1, & \text{若 } A_{\max, ij} = 0 \end{cases} $$ $A_{\max, ij}$表示在最大发射功率下哪些节点对之间能连通(非零表示可连通,零表示即便满功率也连不通) $A_{\max}'$在“连不通”的位置上是1,其他位置是0。通过$A_{\max}'$标记禁止修改的零元素位置 对于所有满足 $A'{\max,ij}=1$ 的位置(即物理不可连通的节点对),必须有 $A{ij}=0$,即始终保持断开 原始优化目标(公式4-6) $$ \min_{A} \, (1-\alpha)\, \text{rank}(A) + \alpha \|A\|_0 $$ $\|A\|_0$ 表示矩阵 $A$ 中非零元素的个数 目标:平衡低秩性($\text{rank}(A)$)与稀疏性($|A|_0$) 问题:非凸、不可导,难以直接优化 凸松弛后的目标(公式4-7) $$ \min_{A} \, (1-\alpha)\, \|A\|_* + \alpha \|A\|_1 $$ 核范数$|A|_*$:奇异值之和,替代$\text{rank}(A)$ L1范数$|A|_1$:元素绝对值和,替代$|A|_0$ 性质:凸优化问题,存在全局最优解 求解方法 传统方法: 可转化为**半定规划(SDP)**问题,使用内点法等求解器。但缺点是计算效率低,尤其当矩阵规模大(如多智能体网络节点数 $n$ 很大)时不可行。 改进方法: 采用ADMM(交替方向乘子法)结合投影和对偶上升的方法,适用于动态网络(矩阵频繁变化的情况)。 ADMM核心算法 变量定义与作用 输入变量: $A_{pre}$:初始邻接矩阵(优化前的网络拓扑)。 $P$:对称的0-1矩阵,用于标记 $A_{pre}$ 中非零元素的位置(保持已有边不变)。 $A'{max}$:功率最大时的邻接矩阵的补集($A'{maxij} = 1$ 表示 $A_{maxij} = 0$,即不允许新增边)。 $\alpha$:权衡稀疏性($L_1$ 范数)和低秩性(核范数)的系数。 iters:ADMM迭代次数。 算法步骤详解 (S.1) 更新原始变量 $A$(对应ADMM的$x$步) 代码行4-17:通过内层循环(投影和对偶上升)更新 $A$。 行4-11: 通过内层循环(行8-11)迭代更新 $R$,本质是梯度投影法: $temp_R^{k+1} = M - X^k \odot A_{\text{pre}}$(计算残差)。 $X^{k+1} = X^k + \beta(A_{\text{pre}} \odot temp_R^{k+1})$(梯度上升步,$\beta$ 为步长)。 本质:通过迭代强制 $A$ 在 $P$ 标记的位置与 $A_{pre}$ 一致。 行13-17:将 $A$ 投影到 $A \odot A'_{\text{max}} = 0$ 的集合。 类似地,通过内层循环(行14-17)更新 $Y$: $temp_A^{k+1} = D_2 - Y^k \odot A'_{\text{max}}$(残差计算)。 $Y^{k+1} = Y^k + \gamma(A'_{\text{max}} \odot temp_A^{k+1})$(对偶变量更新)。 (S.2) 更新辅助变量 $Z_1, Z_2$(对应ADMM的$z$步) 通过阈值操作分离目标函数的两部分: 行18-19:分别对核范数和 $L_1$ 范数进行阈值操作: $Z_1^{t+1} = T_r(A^{t+1} + U_1^t)$: $T_r(\cdot)$ 是奇异值阈值算子(核范数投影),对$A + U1$ 做SVD分解,保留前 $r$ 个奇异值。作用:把自己变成低秩矩阵=》强制 $A$ 低秩。 $Z_2^{t+1} = S_{\alpha}(A^{t+1} + U_2^t)$: $S_{\alpha}(\cdot)$ 是软阈值算子($L_1$ 范数投影),将小于 $\alpha$ 的元素置零。把自己变成稀疏矩阵=》促进 $A$ 的稀疏性。 (S.3) 更新 拉格朗日乘子$U_1, U_2$(对应ADMM的对偶上升) 行20-21:通过残差 $(A - Z)$ 调整拉格朗日乘子 $U_1, U_2$: $U_1^{t+1} = U_1^t + A^{t+1} - Z_1^{t+1}$(核范数约束的乘子更新)。 $U_2^{t+1} = U_2^t + A^{t+1} - Z_2^{t+1}$($L_1$ 范数约束的乘子更新)。 作用:惩罚 $A$ 与辅助变量 $Z1, Z2$ 的偏差(迫使$A$更贴近$Z$),推动收敛。 网络结构控制 核心目标:将优化后的低秩稀疏矩阵 $A$ 转化为实际网络参数(如功率、带宽),并维持动态网络的连通性和稳定性。 具体实现: 通过PID控制调整发射/接收功率,使实际链路带宽匹配矩阵 $A$ 的优化值。 结合CSMA/CA协议处理多节点竞争,确保稀疏网络下的高效通信。 优化模型(4.2节) ↓ 生成目标带宽矩阵A 香农公式 → 计算目标Pr → 自由空间公式 → 计算目标Pt ↓ PID控制发射机(AGC电压) → 实际Pt ≈ 目标Pt ↓ PID控制接收机(AAGC/DAGC) → 实际Pr ≈ 目标Pr ↓ 实际带宽 ≈ Aij (闭环反馈) 发射机: 功能:将数据转换为无线信号并通过天线发射。 关键参数:发射功率($P_t$)、天线增益($G_t$)、工作频率(决定波长$\lambda$)。 控制目标:通过调整AGC电压,动态调节发射功率,以匹配优化后的带宽需求(矩阵$A$中的$A_{ij}$)。 接收机: 功能:接收无线信号并转换为可处理的数据。 关键参数:接收功率($P_r$)、噪声($N_0$)、天线增益($G_r$)。 控制目标:通过AAGC/DAGC增益调整,确保接收信号强度适合解调,维持链路稳定性。 具体步骤 步骤1:生成目标带宽矩阵 $A$(4.2节优化模型) 数学建模: 通过凸松弛优化问题(公式4-7)得到低秩稀疏矩阵 $A$: $$ \min_A (1-\alpha) |A|_* + \alpha |A|_1 \quad \text{s.t.} \quad A \in \Omega $$ 约束集 $\Omega$ 确保矩阵对称性、保留原有链路($A \odot P = A_{\text{pre}} \odot P$)、禁止不可达链路($A \odot A'_{\max} = 0$)。 物理意义: 非零元素 $A_{ij}$ 直接表示 目标信道带宽 $C_{ij}$(单位:bps),即: $$ A_{ij} = C_{ij} = W \log_2\left(1 + \frac{P_r}{N_0 W}\right) \quad \text{(香农公式4-10)} $$ 步骤2:从带宽 $A_{ij}$ 反推功率参数 接收功率 $P_r$ 计算: 根据香农公式解耦: $$ P_r = (2^{A_{ij}/W} - 1) N_0 W $$ 输入:噪声 $N_0$、带宽 $W$、目标带宽 $A_{ij}$。 发射功率 $P_t$ 计算: 通过自由空间公式(4-11): $$ P_t = \frac{P_r L (4\pi d)^2}{G_t G_r \lambda^2} $$ 输入:距离 $d$、天线增益 $G_t, G_r$、波长 $\lambda$、损耗 $L$。 逻辑分支: 若 $A_{ij} \neq A_{\text{pre}ij}$(需调整链路): 计算 $P_r$ 和 $P_t$; 若 $A_{ij} = 0$(无连接): 直接设 $P_r = P_t = 0$。 步骤3:发射机功率调整(图4-2a) 定义目标:$P_t$(来自步骤2)。 测量实际:通过传感器获取当前发射功率 $P_{t,\text{actual}}$。 计算偏差:$e(t) = P_t - P_{t,\text{actual}}$。 PID调节:通过AGC电压改变发射功率,逼近 $P_t$。 步骤4:接收机功率调整(图4-2b) 定义目标:$P_r$(来自步骤2)。 测量实际:检测空口信号功率 $P_{r,\text{actual}}$。 计算偏差:$e(t) = P_r - P_{r,\text{actual}}$。 PID调节: 调整AAGC(模拟增益)和DAGC(数字增益),持续监测直至 $|e(t)| < \epsilon$。 基于谱聚类的无人机网络充电 (1) 谱聚类分组Spectral_Clustering(表5.1) 目标:将无人机和充电站划分为 $K$ 个簇,使充电站位于簇中心。 步骤: 输入:带权邻接矩阵 $A$(权值=无人机间距离)、节点数 $N$、充电站数 $K$。 拉普拉斯矩阵: $$L = D - A, \quad D_{ii} = \sum_j A_{ij}$$ 归一化: $$L_{norm} = D^{-\frac{1}{2}}LD^{\frac{1}{2}}$$ 谱分解:求 $L_{norm}$ 前 $K$ 小特征值对应的特征向量矩阵 $V \in \mathbb{R}^{N \times K}$。 聚类:对 $V$ 的行向量进行 k-means 聚类,得到标签 $\text{labels}$。 输出:每个无人机/充电站的簇编号 $\text{labels}$。 (2) 无人机选择充电站(表5-2) 目标:电量低的无人机前往对应簇中心的充电站。 步骤: 周期性运行(间隔 $\Delta t$): 通过 Push_Sum 协议获取所有无人机位置 Positions。 计算距离矩阵 $A$。 动态聚类:调用 Spectral_Clustering(A) 更新簇标签。 充电触发:若电量 $E < P_{th}$,向簇中心请求坐标 $\text{CS_point}$ 并前往。 关键公式: $$A_{ij} = \| \text{Position}_i - \text{Position}_j \|_2$$ (3) 充电站跟踪算法(表5-3) 目标:充电站动态调整位置至簇中心。 步骤: 周期性运行(间隔 $\Delta t$): 同无人机算法获取 $A$ 和 labels。 定位簇中心: 充电站根据编号匹配簇标签。 计算簇内无人机位置均值: $$\text{CS_point} = \frac{1}{|C_k|} \sum_{i \in C_k} \text{Position}_i$$ 其中 $C_k$ 为第 $k$ 簇的节点集合。 移动至新中心并广播位置。 (4) 算法改进 替换通信协议:用第3章的卡尔曼滤波 替代 Push_Sum,获取特征值、特征向量重构全局矩阵 $A$,减少消息传递。 基于T-GAT的无人机群流量预测 TCN 流量矩阵 $X \in \mathbb{R}^{N \times T}$,其中: $N$:无人机节点数量(例如10架无人机)。 $T$:时间步数量。 每个元素 $X_{i,t}$ 表示第 $i$ 个节点在时间 $t$ 的总流量(如发送/接收的数据包数量或带宽占用)。 流量矩阵的形状 假设有3架无人机,记录5个时间步的流量数据,矩阵如下: $$ X = \begin{bmatrix} 100 & 150 & 200 & 180 & 220 \\[6pt] 50 & 75 & 100 & 90 & 110 \\[6pt] 80 & 120 & 160 & 140 & 170 \end{bmatrix} $$ 行 ($N=3$):每行代表一架无人机的历史流量序列(例如第1行表示无人机1的流量变化:100 → 150 → 200 → 180 → 220)。 列 ($T=5$):每列代表所有无人机在同一时间步的流量状态(例如第1列表示在时间 $t_1$ 时,三架无人机的流量分别为:[100, 50, 80])。 TCN处理流量矩阵: 卷积操作 TCN 的每个卷积核会滑动扫描所有通道(即所有无人机)的时序数据。 例如,一个大小为 3 的卷积核会同时分析每架无人机连续 3 个时间步的流量(例如从 $t_1$ 到 $t_3$),以提取局部时序模式。 输出时序特征 经过多层扩张卷积和残差连接后,TCN 会输出一个高阶特征矩阵 $H_T^l$,其形状与输入类似(例如 (1, 3, 5)),但每个时间步的值已包含了: 趋势信息:流量上升或下降的长期规律。 TCN的卷积核仅在单个通道内滑动,计算时仅依赖该节点自身的历史时间步。节点间的交互是通过后续的**图注意力网络(GAT)**实现的。 与 GAT 的衔接 TCN 输出的特征矩阵 $H_T^l$ 会传递给 GAT 进行进一步处理。 时间步对齐:通常取最后一个时间步的特征(例如 H_T^l[:, :, -1])作为当前节点特征。 空间聚合:GAT 根据邻接矩阵计算无人机间的注意力权重,例如考虑“无人机2的当前流量可能受到无人机1过去3分钟流量变化的影响”。
科研
zy123
3月21日
0
3
0
上一页
1
2
3
4
...
10
下一页