多维高斯分布的信息熵和KL散度计算
- 多维高斯分布是一种特殊的多维随机分布,应用非常广泛,很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例,从理论层面分析数据特征和分类问题难度的关系
- 注意,本文分析不涉及算法层面,仅仅是对数据特征的分析,实用意义不强,纯机器学习层面可能只对特征挖掘有点作用,工程层面可以指导探测器设计。本文主旨在于借助这个场景说明多维高斯分布的信息熵和KL散度计算方法
- 关于信息熵和KL散度(相对熵)的详细说明参考:信息论概念详细梳理:信息量、信息熵、条件熵、互信息、交叉熵、KL散度、JS散度
文章目录
- 0. 场景
- 1. 多维高斯分布
- 2. 多维高斯分布的信息熵
- 3. 两个多维高斯分布之间的相对熵(KL散度)
- 4 总结
0. 场景
-
考虑一般的多分类机器学习场景:设目标识别算法的原始输入为 x = ( x , y , I , λ , θ . . . ) \pmb{x}=(x,y,I,\lambda,\theta...) x=(x,y,I,λ,θ...),定义为 k k k 维随机向量 X = ( X 1 , X 2 , … , X k ) \pmb{X}=(X_1,X_2,\dots,X_k) X=(X1,X2,…,Xk),设检测目标类别数为 n n n
-
进一步假设 X \pmb{X} X 是多维高斯分布,这意味着原始观测中每个维度都服从高斯分布。当 n = 4 n=4 n=4 时,多维随机变量 X X X 沿维度 f 0 f_0 f0 和 f 0 − f 1 f_0-f_1 f0−f1 的边缘分布示意图如下,使用不同颜色代表不同类别数据
绘图代码供参考:
import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse# 高斯分布参数,f0和f1两个维度 means_2d = [(0, 0), (2, 3), (4, 2), (6, 5)] covariances = [np.array([[0.35, 0.05], [0.05, 0.35]]), np.array([[0.75, 0.5], [0.5, 0.75]]), np.array([[0.2, 0.1], [0.1, 0.2]]), np.array([[1.25, -0.4], [-0.4, 1.25]]) ] colors = ['blue', 'green', 'red', 'purple'] fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 8))# 绘制沿f0的的边缘分布 means_1d = [m[0] for m in means_2d] std_devs = [c[0,0].item() for c in covariances] # 概率密度曲线 x = np.linspace(-2, 10, 1000) for i, (mean, std_dev, color) in enumerate(zip(means_1d, std_devs, colors)):y = (1/(std_dev * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mean) / std_dev)**2)ax1.plot(x, y, color=color, label=f'Class {i}') # 抽样样本用竖线表示 for mean, std_dev, color in zip(means_1d, std_devs, colors):samples = np.random.normal(mean, std_dev, 20)ax1.vlines(samples, ymin=0, ymax=(1/(std_dev * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((samples - mean) / std_dev)**2), color=color, linestyle='-', alpha=0.2) # 图例和标题 ax1.legend() ax1.set_title('Distribution of raw observation along feature $f_0$') ax1.set_xlabel('$f_0$') ax1.set_ylabel('Probability Density')# 绘制沿f0和f1的的二维边缘分布 for mean, cov, color in zip(means_2d, covariances, colors):eigenvalues, eigenvectors = np.linalg.eigh(cov)order = eigenvalues.argsort()[::-1]eigenvalues, eigenvectors = eigenvalues[order], eigenvectors[:, order]angle = np.degrees(np.arctan2(*eigenvectors[:, 0][::-1]))width, height = 3 * np.sqrt(eigenvalues)ell = Ellipse(xy=mean, width=width, height=height, angle=angle, color=color, alpha=0.2)ax2.add_artist(ell) # 抽样样本用点表示 for i, (mean, cov, color) in enumerate(zip(means_2d, covariances, colors)):samples = np.random.multivariate_normal(mean, cov, 100)ax2.scatter(samples[:, 0], samples[:, 1], color=color, s=4, label=f'Class {i}') # 添加图例和标题 ax2.legend() ax2.set_title('Distribution of raw observation along feature $f_0$ & $f_1$') ax2.set_xlabel('$f_0$') ax2.set_ylabel('$f_1$')# 显示图形 plt.tight_layout() plt.show()
-
注意图示为原始输入数据 f f f 的样本分布情况,识别算法从中提取特征用于分类。注意到
- 数据 D i \mathcal{D}_i Di(分布 p i p_i pi )的集中程度描述了第 i i i 类目标的原始特征强度。分布越集中,说明探测系统对第 i i i 类目标的观测一致性越强,其受系统噪音和环境因素影响程度越小
- 不同数据 D i \mathcal{D}_i Di 和 D j \mathcal{D}_j Dj(分布 p i p_i pi 和 p j p_j pj )之间的距离刻画了分布间差异程度。两类数据距离越大则差异越强,越容易区分。反之,若两类数据的原始数据分布有重叠(如 p 1 , p 2 p_1,p_2 p1,p2),则理论上重叠部分的样本所属类别无法准确区分
-
为最大化识别准确率,从两方面考虑(以下准则可以用来指导探测器设计)
- 增大类内特征强度(同类数据尽量集中),形式化表示为最小化每一类数据分布信息熵的总和
- 增大类间特征差异(不同类数据尽量远离),形式化表示为最大化每一组数据分布相对熵(KL散度)的总和。值得注意的是,由于KL散度不对称,无法直接作为度量,这里还需要一些trick
1. 多维高斯分布
- 设原始输入为 x = ( x , y , I , λ , θ . . . ) \pmb{x}=(x,y,I,\lambda,\theta...) x=(x,y,I,λ,θ...),定义为 k k k 维随机向量 X = ( X 1 , X 2 , … , X k ) \pmb{X}=(X_1,X_2,\dots,X_k) X=(X1,X2,…,Xk),设检测目标类别数为 n n n,第 i i i 类目标的原始观测输入服从多维高斯分布,即:
p i ( x ) = p i ( x 1 , . . . , x k ) = 1 ( 2 π ) n / 2 det ( Σ i ) 1 / 2 e − 1 2 ( x − μ i ) ⊤ Σ i − 1 ( x − μ i ) (1.1) p_i(\pmb{x}) = p_i(x_1,...,x_k) = \frac{1}{(2\pi)^{n/2}\operatorname{det}(\pmb{\Sigma}_i)^{1/2}}e^{-\frac{1}{2}(\mathbf{x}-\pmb{\mu}_i)^\top \mathbf{\Sigma}_i^{-1}(\mathbf{x}-\pmb{\mu}_i)} \tag{1.1} pi(x)=pi(x1,...,xk)=(2π)n/2det(Σi)1/21e−21(x−μi)⊤Σi−1(x−μi)(1.1) 称随机向量 X \pmb{X} X 服从期望为 μ i \pmb{\mu}_i μi,协方差矩阵为 Σ i \pmb{\Sigma}_i Σi 的多维正态分布,记为 X ∼ N ( μ i , Σ i ) \pmb{X}\sim N(\pmb{\mu}_i,\pmb{\Sigma}_i) X∼N(μi,Σi)。其中 Σ i \pmb{\Sigma}_i Σi 为协方差矩阵:
Σ i = [ D X 1 Cov ( X 1 , X 2 ) … Cov ( X 1 , X k ) Cov ( X 2 , X 1 ) D X 2 … Cov ( X 2 , X k ) ⋮ ⋮ ⋮ Cov ( X k , X 1 ) Cov ( X k , X 2 ) … D X k ] = [ σ 1 2 ρ 12 σ 1 σ 2 … ρ 1 k σ 1 σ k ρ 21 σ 2 σ 1 σ 2 2 … ρ 2 k σ 2 σ k ⋮ ⋮ ⋮ ρ k , 1 σ k σ 1 ρ k , 2 σ k σ 2 … σ k 2 ] (1.2) \begin{aligned} \pmb{\Sigma}_i &= \begin{bmatrix} DX_1 &\text{Cov}(X_1,X_2) &\dots &\text{Cov}(X_1,X_k) \\ \text{Cov}(X_2,X_1) &DX_2 &\dots &\text{Cov}(X_2,X_k) \\ \vdots &\vdots &&\vdots\\ \text{Cov}(X_k,X_1) &\text{Cov}(X_k,X_2) &\dots &DX_k \end{bmatrix}\\ \space \\ & = \begin{bmatrix} \sigma_1^2 &\rho_{12}\sigma_1\sigma_2 &\dots &\rho_{1k}\sigma_1\sigma_k \\ \rho_{21}\sigma_2\sigma_1 &\sigma_2^2 &\dots &\rho_{2k}\sigma_2\sigma_k \\ \vdots &\vdots &&\vdots\\ \rho_{k,1}\sigma_k\sigma_1 &\rho_{k,2}\sigma_k\sigma_2 &\dots &\sigma_k^2 \end{bmatrix} \end{aligned} \tag{1.2} Σi = DX1Cov(X2,X1)⋮Cov(Xk,X1)Cov(X1,X2)DX2⋮Cov(Xk,X2)………Cov(X1,Xk)Cov(X2,Xk)⋮DXk = σ12ρ21σ2σ1⋮ρk,1σkσ1ρ12σ1σ2σ22⋮ρk,2σkσ2………ρ1kσ1σkρ2kσ2σk⋮σk2 (1.2) - 显然 Σ \pmb{\Sigma} Σ 是实对称矩阵,通常情况下是正定矩阵(只要 X i X_i Xi 不为常数,其任意阶顺序主子式 > 0)。这种矩阵有一些良好性质,列举一些以便后续计算
- Σ − 1 , Σ 1 + Σ 2 \pmb{\Sigma}^{-1}, \pmb{\Sigma}_1+\pmb{\Sigma}_2 Σ−1,Σ1+Σ2 也是正定对称矩阵
- 奇异值分解(SVD分解)结果和特征值分解(谱分解)一致,即有
Σ = U Λ U ⊤ (1.3) \pmb{\Sigma} = \pmb{U}\pmb{\Lambda}\pmb{U}^{\top} \tag{1.3} Σ=UΛU⊤(1.3) 其中 U \pmb{U} U 是正交矩阵, Λ \pmb{\Lambda} Λ 是对角阵且对角线上的元素是正的(正定矩阵),这意味着 Σ \pmb{\Sigma} Σ 可以如下开方:
Σ 1 2 = U Λ 1 2 U ⊤ (1.4) \pmb{\Sigma}^{\frac{1}{2}} = \pmb{U}\pmb{\Lambda}^{\frac{1}{2}}\pmb{U}^{\top} \tag{1.4} Σ21=UΛ21U⊤(1.4) 且 Σ 1 2 \pmb{\Sigma}^{\frac{1}{2}} Σ21 也是正定对称矩阵
- 多维高斯分布有以下基本统计量(期望、方差、二阶矩)
E x [ x ] = ∫ p ( x ) x d x = μ E x [ ( x − μ ) ( x − μ ) ⊤ ] = ∫ p ( x ) ( x − μ ) ( x − μ ) ⊤ d x = Σ E x [ x x ⊤ ] = μ μ ⊤ + E x [ ( x − μ ) ( x − μ ) ⊤ ] = μ μ ⊤ + Σ (1.5) \begin{aligned} \mathbb{E}_{\boldsymbol{x}}[\boldsymbol{x}] & =\int p(\boldsymbol{x}) \boldsymbol{x} d x=\boldsymbol{\mu} \\ \mathbb{E}_{\boldsymbol{x}}\left[(\boldsymbol{x}-\boldsymbol{\mu})(\boldsymbol{x}-\boldsymbol{\mu})^{\top}\right] & =\int p(\boldsymbol{x})(\boldsymbol{x}-\boldsymbol{\mu})(\boldsymbol{x}-\boldsymbol{\mu})^{\top} d x=\boldsymbol{\Sigma} \\ \mathbb{E}_{\boldsymbol{x}}\left[\boldsymbol{x} \boldsymbol{x}^{\top}\right]&=\boldsymbol{\mu} \boldsymbol{\mu}^{\top}+\mathbb{E}_{\boldsymbol{x}}\left[(\boldsymbol{x}-\boldsymbol{\mu})(\boldsymbol{x}-\boldsymbol{\mu})^{\top}\right]=\boldsymbol{\mu} \boldsymbol{\mu}^{\top}+\boldsymbol{\Sigma} \end{aligned} \tag{1.5} Ex[x]Ex[(x−μ)(x−μ)⊤]Ex[xx⊤]=∫p(x)xdx=μ=∫p(x)(x−μ)(x−μ)⊤dx=Σ=μμ⊤+Ex[(x−μ)(x−μ)⊤]=μμ⊤+Σ(1.5) 其中二阶矩就是普通随机变量常见结论 E ( X 2 ) = E ( X ) 2 + D ( X ) \mathbb{E}(X^2) = \mathbb{E}(X)^2 + D(X) E(X2)=E(X)2+D(X) 的多维扩展
2. 多维高斯分布的信息熵
- 设第 i i i 类目标原始观测的分布 p i ( x ) = N ( μ i , Σ i ) p_i(\pmb{x})=\mathcal{N}(\pmb{\mu_i},\pmb{\Sigma_i}) pi(x)=N(μi,Σi),计算其信息熵
H p i = E x ∼ p i ( x ) [ − log p i ( x ) ] = E x ∼ p i ( x ) [ n 2 log 2 π + 1 2 log det ( Σ i ) + 1 2 ( x − μ i ) ⊤ Σ i − 1 ( x − μ i ) ] = k 2 log 2 π + 1 2 log det ( Σ i ) + 1 2 E x ∼ p i ( x ) [ ( x − μ i ) ⊤ Σ i − 1 ( x − μ i ) ] (2.1) \begin{aligned} \mathcal{H}_{p_i}&=\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}[-\log p_i(\boldsymbol{x})] \\ &=\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\frac{n}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\pmb{\Sigma}_i\right)+\frac{1}{2}\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)^{\top} \boldsymbol{\Sigma}_i^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)\right] \\ & =\frac{k}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\boldsymbol{\Sigma}_i\right)+\frac{1}{2} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)^{\top} \boldsymbol{\Sigma}_i^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)\right] \end{aligned} \tag{2.1} Hpi=Ex∼pi(x)[−logpi(x)]=Ex∼pi(x)[2nlog2π+21logdet(Σi)+21(x−μi)⊤Σi−1(x−μi)]=2klog2π+21logdet(Σi)+21Ex∼pi(x)[(x−μi)⊤Σi−1(x−μi)](2.1) 最后一项的展开需要借助马哈拉诺比斯变换
:对于任意服从多维高斯分布的随机向量 X ∼ N ( μ , Σ ) \pmb{X}\sim\mathcal{N}(\pmb{\mu},\pmb{\Sigma}) X∼N(μ,Σ), 有随机向量 Y = Σ − 1 2 ( x − μ ) \pmb{Y} = \pmb{\Sigma}^{-\frac{1}{2}}(\pmb{x-\mu}) Y=Σ−21(x−μ) 是标准高斯分布,即 Y ∼ N ( 0 , I k ) \pmb{Y} \sim \mathcal{N}(0,\pmb{I}_k) Y∼N(0,Ik),注意到
x = Σ 1 2 y + μ (2.2) \pmb{x} = \pmb{\Sigma}^{\frac{1}{2}}\pmb{y}+\pmb{\mu} \tag{2.2} x=Σ21y+μ(2.2) 故有
E x ∼ p i ( x ) [ ( x − μ i ) ⊤ Σ i − 1 ( x − μ i ) ] = E y ∼ p i ( y ) [ ( Σ i 1 2 y ) ⊤ Σ i − 1 ( Σ i 1 2 y ) ] = E y ∼ p i ( y ) [ y ⊤ y ] = ∑ i = 1 k E [ y i 2 ] = k (2.3) \begin{aligned} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)^{\top} \boldsymbol{\Sigma}_i^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{i}\right)\right] & =\mathbb{E}_{\boldsymbol{y} \sim p_i(\boldsymbol{y})}\left[\left(\pmb{\Sigma}_i^{\frac{1}{2}}\boldsymbol{y}\right)^{\top} \boldsymbol{\Sigma}_i^{-1}\left(\pmb{\Sigma}_i^{\frac{1}{2}}\boldsymbol{y}\right)\right] \\ &=\mathbb{E}_{\boldsymbol{y} \sim p_i(\boldsymbol{y})}\left[\pmb{y}^\top \pmb{y}\right] \\ &=\sum_{i=1}^k \mathbb{E}[y_i^2] \\ &=k \end{aligned} \tag{2.3} Ex∼pi(x)[(x−μi)⊤Σi−1(x−μi)]=Ey∼pi(y)[(Σi21y)⊤Σi−1(Σi21y)]=Ey∼pi(y)[y⊤y]=i=1∑kE[yi2]=k(2.3) - 综上所述,有
H p i = k 2 log 2 π + 1 2 log det ( Σ i ) + 1 2 k = k 2 ( 1 + log 2 π ) + 1 2 log det ( Σ i ) (2.4) \begin{aligned} \mathcal{H}_{p_i} &= \frac{k}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\boldsymbol{\Sigma}_i\right)+\frac{1}{2} k \\ &= \frac{k}{2}(1+\log 2 \pi)+\frac{1}{2} \log \operatorname{det}(\boldsymbol{\Sigma_i}) \end{aligned} \tag{2.4} Hpi=2klog2π+21logdet(Σi)+21k=2k(1+log2π)+21logdet(Σi)(2.4)
3. 两个多维高斯分布之间的相对熵(KL散度)
-
下面计算第 i i i 类和第 j j j 类目标原始观测的分布 p i ( x ) , p j ( x ) p_i(\pmb{x}),p_j(\pmb{x}) pi(x),pj(x) 之间的相对熵:
D K L ( p i ∣ ∣ p j ) = E x ∼ p i ( x ) log p i ( x ) p j ( x ) = E x ∼ p i ( x ) log p i ( x ) + E x ∼ p i ( x ) [ − log p j ( x ) ] = − H p i + E x ∼ p i ( x ) [ − log p j ( x ) ] (3.1) \begin{aligned} D_{KL}(p_i||p_j) &= \mathbb{E}_{\pmb{x}\sim p_i(x)}\log\frac{p_i(\pmb{x})}{p_j(\pmb{x})} \\ &= \mathbb{E}_{\pmb{x}\sim p_i(x)}\log p_i(\pmb{x}) + {E}_{\pmb{x}\sim p_i(x)}[-\log p_j(\pmb{x})] \\ &= -\mathcal{H}_{p_i} + {E}_{\pmb{x}\sim p_i(x)}[-\log p_j(\pmb{x})]\\ \end{aligned} \tag{3.1} DKL(pi∣∣pj)=Ex∼pi(x)logpj(x)pi(x)=Ex∼pi(x)logpi(x)+Ex∼pi(x)[−logpj(x)]=−Hpi+Ex∼pi(x)[−logpj(x)](3.1) 展开其中第二项:
E x ∼ p i ( x ) [ − log p j ( x ) ] = E x ∼ p i ( x ) [ n 2 log 2 π + 1 2 log det ( Σ j ) + 1 2 ( x − μ j ) ⊤ Σ j − 1 ( x − μ j ) ] = k 2 log 2 π + 1 2 log det ( Σ j ) + 1 2 E x ∼ p i ( x ) [ ( x − μ j ) ⊤ Σ j − 1 ( x − μ j ) ] (3.2) \begin{aligned} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}[-\log p_j(\boldsymbol{x})] & =\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\frac{n}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\Sigma_{j}\right)+\frac{1}{2}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\right] \\ & =\frac{k}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\boldsymbol{\Sigma}_{j}\right)+\frac{1}{2} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\right] \end{aligned} \tag{3.2} Ex∼pi(x)[−logpj(x)]=Ex∼pi(x)[2nlog2π+21logdet(Σj)+21(x−μj)⊤Σj−1(x−μj)]=2klog2π+21logdet(Σj)+21Ex∼pi(x)[(x−μj)⊤Σj−1(x−μj)](3.2)
进一步展开其中最后一项:
E x ∼ p ( x ) [ ( x − μ q ) ⊤ Σ q − 1 ( x − μ q ) ] = E x ∼ p i ( x ) [ Tr ( ( x − μ j ) ⊤ Σ j − 1 ( x − μ j ) ) ] . = E x ∼ p i ( x ) [ Tr ( Σ j − 1 ( x − μ j ) ( x − μ j ) ⊤ ) ] . = Tr ( Σ j − 1 E x ∼ p i ( x ) [ ( x − μ j ) ( x − μ j ) ⊤ ] ) = Tr ( Σ j − 1 E x ∼ p i ( x ) [ x x ⊤ − μ j x ⊤ − x μ j ⊤ + μ j μ j ⊤ ] ) = Tr ( Σ j − 1 ( Σ i + μ i μ i ⊤ − μ j μ i ⊤ − μ i μ j ⊤ + μ j μ j ⊤ ) ) = Tr ( Σ j − 1 Σ i + Σ j − 1 ( μ i − μ j ) ( μ i − μ j ) ⊤ ) = Tr ( Σ j − 1 Σ i ) + Tr ( Σ j − 1 ( μ i − μ j ) ( μ i − μ j ) ⊤ ) = Tr ( Σ j − 1 Σ i ) + Tr ( ( μ i − μ j ) ⊤ Σ j − 1 ( μ i − μ j ) ) = Tr ( Σ j − 1 Σ i ) + ( μ i − μ j ) ⊤ Σ j − 1 ( μ i − μ j ) (3.3) \begin{aligned} \mathbb{E}_{\boldsymbol{x} \sim p(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{q}\right)^{\top} \boldsymbol{\Sigma}_{q}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{q}\right)\right] & =\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\operatorname{Tr}\Big((\boldsymbol{x}-\boldsymbol{\mu}_{j})^{\top} \boldsymbol{\Sigma}_{j}^{-1} (\boldsymbol{x}-\boldsymbol{\mu}_{j})\Big) \right]. \\ & =\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\operatorname{Tr}\Big(\boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top}\Big)\right]. \\ & =\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top}\right]\right) \\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\boldsymbol{x} \boldsymbol{x}^{\top}-\boldsymbol{\mu}_{j} \boldsymbol{x}^{\top}-\boldsymbol{x} \boldsymbol{\mu}_{j}^{\top}+\boldsymbol{\mu}_{j} \boldsymbol{\mu}_{j}^{\top}\right]\right) \\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\Sigma}_{i}+\boldsymbol{\mu}_{i} \boldsymbol{\mu}_{i}^{\top}-\boldsymbol{\mu}_{j} \boldsymbol{\mu}_{i}^{\top}-\boldsymbol{\mu}_{i} \boldsymbol{\mu}_{j}^{\top}+\boldsymbol{\mu}_{j} \boldsymbol{\mu}_{j}^{\top}\right)\right) \\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}+\boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top}\right) \\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)+ \operatorname{Tr} \left(\boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top}\right)\\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)+ \operatorname{Tr} \left(\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)\right) \\ &=\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)+ \left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right) \end{aligned} \tag{3.3} Ex∼p(x)[(x−μq)⊤Σq−1(x−μq)]=Ex∼pi(x)[Tr((x−μj)⊤Σj−1(x−μj))].=Ex∼pi(x)[Tr(Σj−1(x−μj)(x−μj)⊤)].=Tr(Σj−1Ex∼pi(x)[(x−μj)(x−μj)⊤])=Tr(Σj−1Ex∼pi(x)[xx⊤−μjx⊤−xμj⊤+μjμj⊤])=Tr(Σj−1(Σi+μiμi⊤−μjμi⊤−μiμj⊤+μjμj⊤))=Tr(Σj−1Σi+Σj−1(μi−μj)(μi−μj)⊤)=Tr(Σj−1Σi)+Tr(Σj−1(μi−μj)(μi−μj)⊤)=Tr(Σj−1Σi)+Tr((μi−μj)⊤Σj−1(μi−μj))=Tr(Σj−1Σi)+(μi−μj)⊤Σj−1(μi−μj)(3.3) 注意到 i = j i=j i=j 时上式等于 k k k,退化到式 (2.4) -
综上所述,有
D K L ( p i ∥ p j ) = − H p i + E x ∼ p i ( x ) [ − log p j ( x ) ] = − ( k 2 ( 1 + log 2 π ) + 1 2 log det ( Σ i ) ) + ( k 2 log 2 π + 1 2 log det ( Σ j ) + 1 2 E x ∼ p i ( x ) [ ( x − μ j ) ⊤ Σ j − 1 ( x − μ j ) ] ) = 1 2 E x ∼ p i ( x ) [ ( x − μ j ) ⊤ Σ j − 1 ( x − μ j ) ] + 1 2 [ log det ( Σ j ) − log det ( Σ i ) − k ] = 1 2 [ Tr ( Σ j − 1 Σ i ) + ( μ i − μ j ) ⊤ Σ j − 1 ( μ i − μ j ) ] + 1 2 [ log det ( Σ j ) det ( Σ i ) − k ] = 1 2 [ Tr ( Σ j − 1 Σ i ) + ( μ i − μ j ) ⊤ Σ j − 1 ( μ i − μ j ) − log det ( Σ j − 1 Σ i ) − k ] (3.4) \begin{aligned} D_{KL}(p_i\| p_j) &= -\mathcal{H}_{p_i} + {E}_{\pmb{x}\sim p_i(x)}[-\log p_j(\pmb{x})]\\ &= -\left(\frac{k}{2}(1+\log 2 \pi)+\frac{1}{2} \log \operatorname{det}(\boldsymbol{\Sigma_i})\right) + \left(\frac{k}{2} \log 2 \pi+\frac{1}{2} \log \operatorname{det}\left(\boldsymbol{\Sigma}_{j}\right)+\frac{1}{2} \mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\right]\right) \\ &= \frac{1}{2}\mathbb{E}_{\boldsymbol{x} \sim p_i(\boldsymbol{x})}\left[\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{x}-\boldsymbol{\mu}_{j}\right)\right] + \frac{1}{2}\left[\log \operatorname{det}\left(\boldsymbol{\Sigma}_{j}\right) - \log \operatorname{det}\left(\boldsymbol{\Sigma}_{i}\right)-k\right]\\ &= \frac{1}{2}\left[\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)+ \left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)\right] + \frac{1}{2}\left[\log \frac{\operatorname{det}(\pmb{\Sigma}_j)}{\operatorname{det}(\pmb{\Sigma}_i)}-k\right]\\ &= \frac{1}{2}\left[\operatorname{Tr}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)+\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)^{\top} \boldsymbol{\Sigma}_{j}^{-1}\left(\boldsymbol{\mu}_{i}-\boldsymbol{\mu}_{j}\right)-\log \operatorname{det}\left(\boldsymbol{\Sigma}_{j}^{-1} \boldsymbol{\Sigma}_{i}\right)-k\right] \end{aligned} \tag{3.4} DKL(pi∥pj)=−Hpi+Ex∼pi(x)[−logpj(x)]=−(2k(1+log2π)+21logdet(Σi))+(2klog2π+21logdet(Σj)+21Ex∼pi(x)[(x−μj)⊤Σj−1(x−μj)])=21Ex∼pi(x)[(x−μj)⊤Σj−1(x−μj)]+21[logdet(Σj)−logdet(Σi)−k]=21[Tr(Σj−1Σi)+(μi−μj)⊤Σj−1(μi−μj)]+21[logdet(Σi)det(Σj)−k]=21[Tr(Σj−1Σi)+(μi−μj)⊤Σj−1(μi−μj)−logdet(Σj−1Σi)−k](3.4) -
根据定义,KL 散度是非对称的,因此不能当作一个度量使用,为了使其称为有效度量,对于任意分布 p i , p j p_i,p_j pi,pj,交互顺序计算两次 KL 散度,求和作为二者距离的度量,即
D s y m ( p i , p j ) = D K L ( p i ∥ p j ) + D K L ( p j ∥ p i ) = 1 2 [ Tr ( Σ j − 1 Σ i ) + Tr ( Σ i − 1 Σ j ) ] + 1 2 [ ( μ i − μ j ) ⊤ Σ j − 1 ( μ i − μ j ) + ( μ j − μ i ) ⊤ Σ i − 1 ( μ j − μ i ) ] − 1 2 [ logdet ( Σ j − 1 Σ i ) + log det ( Σ i − 1 Σ j ) ] − k = 1 2 [ Tr ( Σ j − 1 Σ i ) + Tr ( Σ i − 1 Σ j ) ] + 1 2 ( μ i − μ j ) ⊤ ( Σ j − 1 + Σ i − 1 ) ( μ i − μ j ) − k (3.5) \begin{aligned} D_{sym}(p_i, p_j) &= D_{KL}(p_i\| p_j) + D_{KL}(p_j\| p_i) \\ &= \frac{1}{2}\left[\operatorname{Tr}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\operatorname{Tr}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right] \\ &\quad\quad\quad +\frac{1}{2}\left[\left(\mu_{i}-\mu_{j}\right)^{\top} \Sigma_{j}^{-1}\left(\mu_{i}-\mu_{j}\right)+\left(\mu_{j}-\mu_{i}\right)^{\top} \Sigma_{i}^{-1}\left(\mu_{j}-\mu_{i}\right)\right] \\ &\quad\quad\quad -\frac{1}{2}\left[\operatorname{logdet}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\log \operatorname{det}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right]-k \\ &=\frac{1}{2}\left[\operatorname{Tr}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\operatorname{Tr}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right] + \frac{1}{2}\left(\mu_{i}-\mu_{j}\right)^{\top}(\Sigma_{j}^{-1} + \Sigma_{i}^{-1}) \left(\mu_{i}-\mu_{j}\right) -k \end{aligned} \tag{3.5} Dsym(pi,pj)=DKL(pi∥pj)+DKL(pj∥pi)=21[Tr(Σj−1Σi)+Tr(Σi−1Σj)]+21[(μi−μj)⊤Σj−1(μi−μj)+(μj−μi)⊤Σi−1(μj−μi)]−21[logdet(Σj−1Σi)+logdet(Σi−1Σj)]−k=21[Tr(Σj−1Σi)+Tr(Σi−1Σj)]+21(μi−μj)⊤(Σj−1+Σi−1)(μi−μj)−k(3.5)
4 总结
- 最后,把结论式 (2.4) 和 (3.5) 回带第0节的优化目标中,引入优化协调系数 α ∈ [ 0 , 1 ] \alpha\in [0,1] α∈[0,1],我们要最大化
max J = max ( 1 − α ) ∑ i = 1 n − H p i + α ∑ i ≠ j D s y m ( p i , p j ) = max ( α − 1 ) ∑ i = 1 n H p i + α ∑ i ≠ j D s y m ( p i , p j ) = max ( α − 1 ) ∑ i = 1 n ( k 2 ( 1 + log 2 π ) + 1 2 log det ( Σ i ) ) + α ∑ i ≠ j ( 1 2 [ Tr ( Σ j − 1 Σ i ) + Tr ( Σ i − 1 Σ j ) ] + 1 2 ( μ i − μ j ) ⊤ ( Σ j − 1 + Σ i − 1 ) ( μ i − μ j ) − k ) = max ( α − 1 ) ∑ i = 1 n log det ( Σ i ) + α ∑ i ≠ j ( [ Tr ( Σ j − 1 Σ i ) + Tr ( Σ i − 1 Σ j ) ] + ( μ i − μ j ) ⊤ ( Σ j − 1 + Σ i − 1 ) ( μ i − μ j ) ) (4.1) \begin{aligned} \max\mathcal{J} &= \max \space (1-\alpha) \sum_{i=1}^n -\mathcal{H}_{p_i} + \alpha \sum_{i\neq j} D_{sym}(p_i, p_j) \\ &= \max \space (\alpha-1) \sum_{i=1}^n \mathcal{H}_{p_i} + \alpha \sum_{i\neq j} D_{sym}(p_i, p_j) \\ &= \max \space (\alpha-1) \sum_{i=1}^n \left(\frac{k}{2}(1+\log 2 \pi)+\frac{1}{2} \log \operatorname{det}(\boldsymbol{\Sigma_i})\right) + \\ &\quad\quad\quad\quad\quad\quad \alpha \sum_{i\neq j} \left(\frac{1}{2}\left[\operatorname{Tr}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\operatorname{Tr}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right] + \frac{1}{2}\left(\mu_{i}-\mu_{j}\right)^{\top}(\Sigma_{j}^{-1} + \Sigma_{i}^{-1}) \left(\mu_{i}-\mu_{j}\right) -k\right) \\ &= \max \space (\alpha-1)\sum_{i=1}^n \log \operatorname{det}(\boldsymbol{\Sigma_i}) + \alpha \sum_{i\neq j} \left(\left[\operatorname{Tr}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\operatorname{Tr}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right] +\left(\mu_{i}-\mu_{j}\right)^{\top}(\Sigma_{j}^{-1} + \Sigma_{i}^{-1}) \left(\mu_{i}-\mu_{j}\right) \right) \end{aligned} \tag{4.1} maxJ=max (1−α)i=1∑n−Hpi+αi=j∑Dsym(pi,pj)=max (α−1)i=1∑nHpi+αi=j∑Dsym(pi,pj)=max (α−1)i=1∑n(2k(1+log2π)+21logdet(Σi))+αi=j∑(21[Tr(Σj−1Σi)+Tr(Σi−1Σj)]+21(μi−μj)⊤(Σj−1+Σi−1)(μi−μj)−k)=max (α−1)i=1∑nlogdet(Σi)+αi=j∑([Tr(Σj−1Σi)+Tr(Σi−1Σj)]+(μi−μj)⊤(Σj−1+Σi−1)(μi−μj))(4.1)
当任意第 i i i 类目标原始观测分布 p i p_i pi 为各项独立高斯分布时,有 Σ i \pmb{\Sigma}_i Σi 是对角矩阵,设为 Σ i = diag ( σ i 1 , σ i 2 , . . . , σ i k ) \pmb{\Sigma}_i = \text{diag} \left(\sigma_{i1}, \sigma_{i2},...,\sigma_{ik}\right) Σi=diag(σi1,σi2,...,σik),上式可表示为
max J = max ( α − 1 ) ∑ i = 1 n ∑ d = 1 k log σ i d + α ( ∑ i ≠ j ∑ d = 1 k ( σ i d σ j d + σ j d σ i d ) + ∑ i ≠ j ( μ i − μ j ) ⊤ ( Σ j − 1 + Σ i − 1 ) ( μ i − μ j ) ) (4.2) \begin{aligned} \max \mathcal{J} = \max \space &(\alpha-1) \sum_{i=1}^{n} \sum_{d=1}^{k} \log \sigma_{id}+\\ &\alpha\left(\sum_{i \neq j} \sum_{d=1}^{k}\left(\frac{\sigma_{i d}}{\sigma_{j d}}+\frac{\sigma_{j d}}{\sigma_{i d}}\right)+\sum_{i \neq j}\left(\mu_{i}-\mu_{j}\right)^{\top}\left(\Sigma_{j}^{-1}+\Sigma_{i}^{-1}\right)\left(\mu_{i}-\mu_{j}\right)\right) \end{aligned} \tag{4.2} maxJ=max (α−1)i=1∑nd=1∑klogσid+α i=j∑d=1∑k(σjdσid+σidσjd)+i=j∑(μi−μj)⊤(Σj−1+Σi−1)(μi−μj) (4.2) - 直观理解:
- ( α − 1 ) ∑ i = 1 n log det ( Σ i ) (\alpha-1) \sum_{i=1}^n \log \operatorname{det}(\boldsymbol{\Sigma_i}) (α−1)∑i=1nlogdet(Σi):本项中 ( α − 1 ) < = 0 (\alpha-1)<=0 (α−1)<=0,故此处希望每个分布 p i p_i pi 的协方差矩阵行列式尽量小。协方差矩阵行列式的值反映了数据分布的总体不确定性,行列式越小,表示数据在各个维度上的分布越集中
- α ∑ i ≠ j ( Tr ( Σ j − 1 Σ i ) + Tr ( Σ i − 1 Σ j ) ) \alpha\sum_{i\neq j} \left(\operatorname{Tr}\left(\Sigma_{j}^{-1} \Sigma_{i}\right)+\operatorname{Tr}\left(\Sigma_{i}^{-1} \Sigma_{j}\right)\right) α∑i=j(Tr(Σj−1Σi)+Tr(Σi−1Σj)) :矩阵的迹等于矩阵特征值之和,特征值代表线性变换对空间的拉伸程度,因此迹反映了线性变换对空间的拉伸和压缩的总量。 Σ j − 1 Σ i \Sigma_{j}^{-1} \Sigma_{i} Σj−1Σi 可以看作对空间连续施加两个线性变换, Σ j = Σ i \Sigma_{j}=\Sigma_{i} Σj=Σi 时对空间没有变换,此项取得最小,反之二者对空间每一维度拉伸和压缩程度差异越大(特征值比例越大)时,此项越大。故此项意味着不同分布的散布特性应尽量不同
- α ∑ i ≠ j ( ( μ i − μ j ) ⊤ ( Σ j − 1 + Σ i − 1 ) ( μ i − μ j ) ) \alpha\sum_{i\neq j} \left(\left(\mu_{i}-\mu_{j}\right)^{\top}(\Sigma_{j}^{-1} + \Sigma_{i}^{-1}) \left(\mu_{i}-\mu_{j}\right)\right) α∑i=j((μi−μj)⊤(Σj−1+Σi−1)(μi−μj)):本项表示均值向量之间的差异,权重由协方差矩阵的逆矩阵决定。它衡量了均值向量之间的方差加权距离
相关文章:
多维高斯分布的信息熵和KL散度计算
多维高斯分布是一种特殊的多维随机分布,应用非常广泛,很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例,从理论层面分析数据特征和分类问题难度的关系注意,本文分…...
物体网格弹性变形---Unity中实现
在游戏引擎场景中的3D物体是由一定数量的点、面组成的,如下图: 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体,如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件,分别用来获取Mes…...
什么是Sass,有什么特点
Sass 概述 什么是 Sass? Sass(Syntactically Awesome Style Sheets)是一种 CSS 预处理器,它扩展了 CSS 的功能,使其更加强大和灵活。Sass 允许开发者使用变量、嵌套规则、混合宏、继承等高级特性,从而编写…...
Spring注入Map学习
Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…...
Java 基础知识 (集合框架 + 并发编程 + JVM 原理 + 数据结构与算法)
文章目录 一.集合框架1. 常见集合接口及其特点List 接口Set 接口Map 接口 2. ArrayList 和 LinkedList 的区别和适用场景ArrayListLinkedList 3. HashSet 和 TreeSet 的特点和用法HashSetTreeSet 4. HashMap 和 TreeMap 的实现原理和使用注意事项HashMapTreeMap 5. 集合遍历方式…...
数据脱敏工具:基于 FFmpeg 的视频批量裁剪
在数据处理和隐私保护领域,数据脱敏是一项重要的任务,尤其是在处理包含敏感信息的视频数据时。本文介绍了一种使用 Python 和 FFmpeg 实现的视频批量裁剪工具,该工具可以将视频中的敏感区域裁剪掉,从而实现数据脱敏。通过使用 PyI…...
从零开始:使用 Spring Boot 开发图书管理系统
如何利用是springboot搭建一个简单的图书管理系统,下面让我们一起来看看吧 文章目录 项目结构1. 主类 LibraryApplication.java功能与注意事项: 2. 模型类 Book.java功能与注意事项: 3. 数据仓库接口 BookRepository.java功能与注意事项&…...
深入浅出:大数据架构中的流处理与实时分析
1. 引言 随着数据产生速度的不断加快,传统的批处理架构已经无法满足实时数据处理和快速响应的需求。流处理成为解决这一问题的关键技术之一,广泛应用于金融、互联网、物联网等领域。流处理技术能够处理不断到来的数据流,实时分析和反馈,使得系统能够迅速做出反应,提供实时…...
基于Multisim的汽车尾灯控制电路设计与仿真
1、电路由四个按键控制,分别对应左转、右转、刹车和检查。 2、当左转或右转键按下时,左侧或右侧的 3个汽车尾灯按照左循环或右循环的顺!2/3 点亮,点亮时间为 1秒。 3、当刹车时,所有的尾灯同时闪烁,闪烁时间为1秒。 4、当检查时…...
WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是: 在官网说明里,才版本2024.1开始,默认启用的 Vue Language Server,但是在 Vue 2 项目…...
【大数据学习 | Spark-Core】详解分区个数
RDD默认带有分区的,那么创建完毕rdd以后他的分区数量是多少? 从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。 我们可以发现数据的读取使用的是textInputFormatÿ…...
(二)Sping Boot学习——Sping Boot注意事项
1.springboot默认是扫描的类是在启动类的当前包或者下级包。 2.运行报错 ERROR:An incompatible version [1.2.33] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 网上试了很多方法,直接重新安装更新版…...
深入浅出,快速安装并了解汇编语言
1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始,在计算机发展的初期阶段,机器语言是计算机直接理解和执行的二进制代码语言,其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成,这些…...
LLM的原理理解6-10:6、前馈步骤7、使用向量运算进行前馈网络的推理8、注意力层和前馈层有不同的功能9、语言模型的训练方式10、GPT-3的惊人性能
目录 LLM的原理理解6-10: 6、前馈步骤 7、使用向量运算进行前馈网络的推理 8、注意力层和前馈层有不同的功能 注意力:特征提取 前馈层:数据库 9、语言模型的训练方式 10、GPT-3的惊人性能 一个原因是规模 大模型GPT-1。它使用了768维的词向量,共有12层,总共有1.…...
JavaScript中的箭头函数以及编写优化
箭头函数 1.1.1 箭头函数的概念 箭头函数时ES 6之后增加一种编写函数的方法,并且它比函数的表达式要更加简洁 箭头函数不会绑定this,arguments属性箭头函数不能作为构造函数来使用(不能和new一起来使用,会出现错误) //1.之前的方…...
Thymeleaf模板引擎生成的html字符串转换成pdf
依赖引入implementation("org.springframework.boot:spring-boot-starter-thymeleaf")implementation("org.xhtmlrenderer:flying-saucer-pdf")将ITemplateEngine注入到spring管理的类中, Context context new Context(); context.setVariable…...
Android 实现双列图片瀑布流式布局
Android 实现双列图片瀑布流式布局 实现双列图片瀑布流布局,关键在于 RecyclerView 的 StaggeredGridLayoutManager 和图片的动态加载。以下是实现步骤: 1. 添加必要依赖 使用 Glide 加载图片。确保在 build.gradle 中添加依赖: implement…...
运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…...
显示类控件
文章目录 1 QLabel1.1 常用属性1.2 例子1,设置文本 (textFormat)1.3 例子2,设置widget背景图片 (pixmap和scaledContents)1.4 例子3,设置对齐方式 (alignment)1.5 例子4,设置自动换行,缩进和边距1.5.1 设置换行 (wordW…...
AOC显示器915Sw按键失灵维修记
大家好,我是 程序员码递夫 今天给大家分享的是自己维修老古董AOC液晶显示器按键失灵的的过程,实属DIY记录。 1、引子 家里有台老古董的19寸AOC液晶显示器(型号915Sw), 一直作为我的副显示器陪伴着左右,显示还正常&a…...
PyQt学习笔记
一.PyQt5的安装 当我们安装好开发环境后,打开pycharm在其设置里面点击按钮自动安装即可。 安装完成后我们会在这里面看到这几个东西说明安装成功了。 二.PyQt5 GUI程序框架 1.一个简单的PyQt5应用程序 首先我们用pycharm创建一个demo.py的文件。 我们创建文件为s…...
LLMops产品介绍
文章目录 字节跳动的扣子优点低代码开发丰富的插件与能力扩展强大的记忆与数据交互能力应用场景广泛 不足模型选择相对受限定制化程度受限输出效果有待提高应用部署范围有限市场认知度和用户基础不足 开悟大模型运营管理系统(LLMOPS)优点全生命周期管理降…...
【GPTs】Front-end Expert:助力前端开发的智能工具
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 💯GPTs指令💯前言💯 Front-end Expert主要功能适用场景优点缺点 💯小结 💯GPTs指令 中文翻译: 使用Dalle生成用户…...
一篇保姆式centos/ubuntu安装docker
前言: 本章节分别演示centos虚拟机,ubuntu虚拟机进行安装docker。 上一篇介绍:docker一键部署springboot项目 一:centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…...
人工智能大趋势下软件开发的未来
随着人工智能(AI)技术的不断演进,软件开发领域正经历着深刻的变革。中国电信推出的星辰大模型软件工厂,作为国内首款破局性AI开发工具,其全自动流水线的特性——自动生成前后端代码、自主测试和纠错等,为软…...
string的模拟实现
string的模拟实现 一.string的模拟实现1.1构造函数和析构函数,以及一些简单函数1.2迭代器1.3增删查改 二.运算符重载三.流插入和流提取 一.string的模拟实现 string本质上是是一种char类型的顺序表,结构上和顺序表相似。 namespace Mystring {class st…...
Qt桌面应用开发 第七天(绘图事件 绘图设备)
目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求:利用QPainter绘制点、线、圆、矩形、文字;设置画笔改为红色,宽度为…...
PDF内容提取,MinerU使用
准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…...
基于lora的llama2二次预训练
基于lora的llama2二次预训练 一、为什么需要对llama2做基于lora的二次预训练? 加入中文训练语料进行llama2的二次预训练,这样模型就可以增加支持中文输出的能力。 二、基于lora的llama2二次预训练的目标是什么? 在保持预训练模型权重不变的情况下&a…...
机器学习之量子机器学习(Quantum Machine Learning, QML)
量子机器学习(Quantum Machine Learning, QML)是一门结合量子计算与机器学习的新兴交叉领域。它利用量子计算的优势(如并行计算、量子叠加和量子纠缠)来解决传统机器学习中难以处理的问题,或提升算法效率和性能。 QML 的核心要素 量子计算的特性: 量子叠加:允许量子比特…...
【2024 Optimal Control 16-745】【Lecture 3 + Lecture4】minimization.ipynb功能分析
主要功能-最小化问题 目标函数分析: 定义函数 f ( x ) f(x) f(x) 及其一阶、二阶导数。使用绘图工具可视化函数的形状。 实现数值优化: 使用牛顿法寻找函数的极值点,结合一阶和二阶导数加速收敛。使用正则化牛顿法解决二阶导数矩阵可能不正定的问题。 可视化过程…...
一种新的电机冷却方式——热管冷却
在现代工业设备中,电机作为一种核心动力装置,广泛应用于各个领域。例如,家用电器、自动化生产线、交通工具等都离不开电机的运作。然而,随着电机功率的不断提升和负载的增加,电机在运行过程中产生的热量也随之增多&…...
虚拟机上搭建达梦DSC简略步骤
vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…...
C++ 矩阵旋转
【问题描述】 编写一个程序,读入一个矩阵,输出该矩阵以第一行第一列数字为中心,顺时针旋转90度后的新矩阵,例如: 输入的矩阵为: 1 2 3 4 5 6 顺时针旋转90度后输出的矩阵为: 4 1 5 2 6 3 【输入…...
mongodb基础操作
创建数据库 use admin授权 db.auth("admin","123456")创建用户 db.createUser({ user: "xxx", pwd: "xxxxxx", roles: [ { role: "readWrite", db: "iot" } ] })查询数据库大小 show dbs;查询结果数量 db.mo…...
以思维链为线索推理隐含情感
❀ 以思维链为线索推理隐含情感 简介摘要引言THORTHOR核心代码实验结果代码运行总结 简介 本文主要对2023ACL论文《Reasoning Implicit Sentiment with Chain-of-Thought Prompting》主要内容进行介绍。 摘要 尽管情绪分析任务常依据文本中的直接意见表达来判定目标的情绪倾向…...
(笔记,自己可见_1)简单了解ZYNQ
1、zynq首先是一个片上操作系统(Soc),结合了arm(PS)和fpga(PL)两部分组成 Zynq系统主要由两部分组成:PS(Processing System)和PL(Programmable L…...
部署自动清理任务解决ORA-00257: archiver error. Connect internal only, until freed
使用oracle数据库的时候,我们一般都会开启归档,确保数据库的日志连续和和数据安全。但随着数据库的运行,归档文件会越来越多,最终撑满磁盘空间,数据库无法继续归档,出现“ORA-00257: archiver error. Conne…...
scau编译原理综合性实验
一、题目要求 题目: 选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。 要求: 设计并实现一个一遍扫描的词法语法语义分析程序,将部分C语言的语法成分(包含赋值语句、if语句、while循环语句…...
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。 按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次ÿ…...
PICO VR串流调试Unity程序
在平时写Unity的VR程序的时候,需要调试自己写的代码,但是有的时候会发现场景过于复杂,不是HMD一体机能运行的,或者为了能够更方便的调试,不需要每次都将程序部署到眼睛里,这样非常浪费时间,对于…...
ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘
概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…...
PML和金属边界区别
一、完美匹配层(PML)边界 原理:PML是一种特殊的吸收边界条件。它基于麦克斯韦方程组的特殊解来设计,其材料参数是经过精心选择的,使得在这个边界区域内,电磁波能够无反射地进入并被吸收。从数学上来说&…...
机器学习基础--基于线性回归房价预测
经典的线性回归模型主要用来预测一些存在着线性关系的数据集。回归模型可以理解为:存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归。如果是一条二次曲线,则被称为二次回归。线性回归是回归模…...
【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升,垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施,提升公众的环保意识和参与度,垃圾分类已…...
47小型项目的规划与实施
每天五分钟学Linux | 第四十七课:小型项目的规划与实施 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划…...
Linux---ps命令
Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...
Qt Qt::UniqueConnection 底层调用
在这里插入图片描述 步骤1: 1:判断槽函数连接方式, 以及信号对象是否有效2: 信号计算格式是否 大于 signal_index 目前调试 signal_index 不太清楚怎末计算的(有清楚的帮忙街道)3:获取槽函数对…...
Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
目录 前言 Generic Webhook Trigger 插件 下载插件 编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…...
2025-2026财年美国CISA国际战略规划(下)
文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…...