特征分解(Eigen decomposition)在深度学习中的应用与理解

特征分解在深度学习中的应用与理解

特征分解(Eigendecomposition)是线性代数中的一个核心工具,在深度学习领域有着广泛的应用,尤其是在涉及矩阵操作和概率模型时。对于研究者来说,理解特征分解不仅有助于掌握数学基础,还能加深对模型设计和优化的洞察。本文将面向深度学习研究者,详细介绍特征分解的基本概念、计算方法,以及其在高斯分布采样(如 VAE)中的具体应用。


什么是特征分解?

特征分解是将一个方阵分解为特征值和特征向量的形式的过程。假设我们有一个 ( d × d d \times d d×d ) 的方阵 ( A A A ),如果它可以写成以下形式:

A = U S U T A = U S U^T A=USUT

那么我们说 ( A A A ) 被特征分解了,其中:

  • ( U U U ) 是一个正交矩阵(即 ( U T U = I U^T U = I UTU=I )),其列是 ( A A A ) 的特征向量。
  • ( S S S ) 是一个对角矩阵,其对角线元素是 ( A A A ) 的特征值。
  • ( U T U^T UT ) 是 ( U U U ) 的转置。

这种分解的前提是 ( A A A ) 必须是对称矩阵(即 ( A = A T A = A^T A=AT )),并且通常要求 ( A A A ) 是可对角化的(即有 ( d d d ) 个线性无关的特征向量)。在深度学习中,许多矩阵(如协方差矩阵)是对称的,因此特征分解特别有用。

特征值与特征向量的物理意义

  • 特征向量:( A A A ) 的特征向量 ( u i u_i ui ) 满足 ( A u i = λ i u i A u_i = λ_i u_i Aui=λiui ),其中 ( λ i λ_i λi ) 是对应的特征值。直观来说,特征向量是矩阵 ( A A A ) 作用下仅被拉伸或压缩(而不改变方向)的向量。
  • 特征值:特征值 ( λ i λ_i λi ) 表示特征向量被拉伸或压缩的幅度。如果 ( λ i < 0 λ_i < 0 λi<0 ),方向会反转。

在特征分解中,( U U U ) 的列将原始空间变换到一个新坐标系(特征向量基),而 ( S S S ) 描述了在这个新坐标系下矩阵 ( A A A ) 的作用仅是对各个维度进行缩放。


如何计算特征分解?

计算特征分解的过程通常分为两步:

  1. 求解特征值:通过特征方程 ( det ⁡ ( A − λ I ) = 0 \det(A - λI) = 0 det(AλI)=0 ) 找到 ( A A A ) 的特征值 ( λ 1 , λ 2 , … , λ d λ_1, λ_2, \dots, λ_d λ1,λ2,,λd )。这是一个多项式方程,解出所有的根。
  2. 求解特征向量:对于每个特征值 ( λ i λ_i λi ),解线性方程组 ( ( A − λ i I ) u i = 0 (A - λ_i I) u_i = 0 (AλiI)ui=0 ) 得到对应的特征向量 ( u i u_i ui )。然后将 ( u i u_i ui ) 归一化并正交化,构成 ( U U U )。

在实践中,我们通常使用数值方法(如 QR 算法)通过库(如 NumPy 或 PyTorch)直接计算。例如,在 Python 中:

import numpy as npA = np.array([[4, 1], [1, 3]])  # 对称矩阵
eigenvalues, eigenvectors = np.linalg.eigh(A)  # eigh 用于对称矩阵
S = np.diag(eigenvalues)
U = eigenvectors
A_reconstructed = U @ S @ U.T  # 重构 A
print(np.allclose(A, A_reconstructed))  # True

这里 ( \text{eigh} ) 返回的 ( U ) 已保证正交,( S ) 是对角矩阵。


特征分解在深度学习中的应用

特征分解在深度学习中有许多实际应用,以下以高斯分布采样为例,展示其重要性。

高斯分布的采样与协方差矩阵

在概率模型(如 VAE)中,我们常需要从多元高斯分布 ( z ∼ N ( μ , Σ ) z \sim \mathcal{N}(μ, Σ) zN(μ,Σ) ) 中采样,其中 ( Σ Σ Σ ) 是协方差矩阵。为了生成这样的样本,可以利用重参数化技巧:具体请参考笔者的另一篇博客:VAE中的编码器(Encoder)详解

z = μ + Σ 1 / 2 ϵ , ϵ ∼ N ( 0 , I ) z = μ + Σ^{1/2} ϵ, \quad ϵ \sim \mathcal{N}(0, I) z=μ+Σ1/2ϵ,ϵN(0,I)

这里的 ( Σ 1 / 2 Σ^{1/2} Σ1/2 ) 是 ( Σ Σ Σ ) 的“平方根”,即满足 ( Σ 1 / 2 ( Σ 1 / 2 ) T = Σ Σ^{1/2} (Σ^{1/2})^T = Σ Σ1/2(Σ1/2)T=Σ ) 的矩阵。特征分解提供了一种计算 ( Σ 1 / 2 Σ^{1/2} Σ1/2 ) 的方法。

假设 ( Σ Σ Σ ) 是对称正定矩阵(常见于协方差矩阵),其特征分解为:

Σ = U S U T Σ = U S U^T Σ=USUT

  • ( S = diag ( λ 1 , λ 2 , … , λ d ) S = \text{diag}(λ_1, λ_2, \dots, λ_d) S=diag(λ1,λ2,,λd) ),( λ i ≥ 0 λ_i \geq 0 λi0 ) 是特征值(正定性保证)。
  • ( U U U ) 是正交矩阵。

则 ( Σ 1 / 2 Σ^{1/2} Σ1/2 ) 可以定义为:

Σ 1 / 2 = U S 1 / 2 U T Σ^{1/2} = U S^{1/2} U^T Σ1/2=US1/2UT

其中 ( S 1 / 2 = diag ( λ 1 , λ 2 , … , λ d ) S^{1/2} = \text{diag}(\sqrt{λ_1}, \sqrt{λ_2}, \dots, \sqrt{λ_d}) S1/2=diag(λ1 ,λ2 ,,λd )),因为:

Σ 1 / 2 ( Σ 1 / 2 ) T = ( U S 1 / 2 U T ) ( U S 1 / 2 U T ) T = U S 1 / 2 U T U S 1 / 2 U T = U S 1 / 2 S 1 / 2 U T = U S U T = Σ Σ^{1/2} (Σ^{1/2})^T = (U S^{1/2} U^T) (U S^{1/2} U^T)^T = U S^{1/2} U^T U S^{1/2} U^T = U S^{1/2} S^{1/2} U^T = U S U^T = Σ Σ1/2(Σ1/2)T=(US1/2UT)(US1/2UT)T=US1/2UTUS1/2UT=US1/2S1/2UT=USUT=Σ

验证采样正确性:

  • 期望:( E [ z ] = E [ μ + Σ 1 / 2 ϵ ] = μ \mathbb{E}[z] = \mathbb{E}[μ + Σ^{1/2} ϵ] = μ E[z]=E[μ+Σ1/2ϵ]=μ )。
  • 协方差:( Cov ( z ) = E [ Σ 1 / 2 ϵ ( Σ 1 / 2 ϵ ) T ] = Σ 1 / 2 E [ ϵ ϵ T ] ( Σ 1 / 2 ) T = Σ 1 / 2 I ( Σ 1 / 2 ) T = Σ \text{Cov}(z) = \mathbb{E}[Σ^{1/2} ϵ (Σ^{1/2} ϵ)^T] = Σ^{1/2} \mathbb{E}[ϵ ϵ^T] (Σ^{1/2})^T = Σ^{1/2} I (Σ^{1/2})^T = Σ Cov(z)=E[Σ1/2ϵ(Σ1/2ϵ)T]=Σ1/2E[ϵϵT](Σ1/2)T=Σ1/2I(Σ1/2)T=Σ )。

在 VAE 中,若 ( Σ = σ 2 I Σ = σ^2 I Σ=σ2I )(对角协方差),则 ( Σ 1 / 2 = σ I Σ^{1/2} = σ I Σ1/2=σI ),采样简化为 ( z = μ + σ ϵ z = μ + σ ϵ z=μ+σϵ )。但对于一般 ( Σ Σ Σ ),特征分解是不可或缺的。

其他应用场景

  1. 主成分分析(PCA):PCA 通过对数据协方差矩阵进行特征分解,提取主要特征方向,用于降维。
  2. 优化问题:在二阶优化(如牛顿法)中,特征分解可用于分析 Hessian 矩阵的正定性。
  3. 谱分解:在图神经网络(GNN)中,拉普拉斯矩阵的特征分解用于频谱分析。

特征分解的优势与局限

优势

  • 几何直观:特征分解将矩阵分解为旋转(( U U U ))和缩放(( S S S )),便于理解矩阵作用。
  • 数值稳定性:对于对称矩阵,特征分解通常有较好的数值性质。
  • 解析性:在概率模型中提供闭式解,如 KL 散度计算。

局限

  • 计算复杂度:特征分解的时间复杂度为 ( O ( d 3 ) O(d^3) O(d3) ),对高维矩阵可能较慢。深度学习中常用 Cholesky 分解(复杂度 ( O ( d 3 / 3 ) O(d^3/3) O(d3/3) ))替代。
  • 适用范围:仅适用于对称矩阵,非对称矩阵需用奇异值分解(SVD)。

在 VAE 等场景中,若协方差是对角形式(如 ( σ 2 I σ^2 I σ2I )),直接逐元素开方即可,避免特征分解的计算开销。


总结

特征分解是线性代数与深度学习的桥梁,为理解矩阵变换和概率分布提供了强有力的工具。在 VAE 的高斯采样中,它通过计算 ( Σ 1 / 2 Σ^{1/2} Σ1/2 ) 实现任意协方差的采样,展示了理论与实践的结合。对于深度学习研究者来说,掌握特征分解不仅能加深对模型的理解,还能在优化和设计中带来更多灵感。

希望这篇博客能为你提供清晰的视角!如果有进一步的疑问或想探讨其他应用,欢迎留言交流。

后记

2025年3月3日20点09分于上海,在grok 3大模型辅助下完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式ID生成方案:数据库号段、Redis与第三方开源实现

分布式ID生成方案&#xff1a;数据库号段、Redis与第三方开源实现 引言 在分布式系统中&#xff0c;全局唯一ID生成是核心基础能力之一。本文针对三种主流分布式ID生成方案&#xff08;数据库号段模式、Redis方案、第三方开源框架&#xff09;进行解析&#xff0c;从实现原理…

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

【Python】05、Python运算符

文章目录 1.算术运算符2.赋值运算符3.关系运算符4.逻辑运算符4.1 布尔值逻辑运算4.2 非布尔值的逻辑运算符 5.条件运算符6.运算符优先级 运算符也称为操作符&#xff0c;可以对一个或多个值进行运算或各种操作。比如、-、都属于运算符 1.算术运算符 加法 如果是两个字符串之间…

2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int reverse( int number );int main…

简记_硬件系统设计之需求分析要点

目录 一、 功能需求 二、 整体性能需求 三、 用户接口需求 四、 功耗需求 五、 成本需求 六、 IP和NEMA防护等级需求 七、 认证需求 功能需求 供电方式及防护 供电方式&#xff1a;市电供电、外置直流稳压电源供电、电池供电、PoE&#xff08;Power Over Ether…

[原创](Modern C++)现代C++的关键性概念: 利用“概念(Concepts)“,可以优雅地约束模板参数

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…

Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks

Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks ​#paper/GFM/GNN-BASED#​ #paper/⭐⭐⭐#​ 注意&#xff1a;这篇文章是每个图一个GCN模型&#xff0c;而不是所有图一个GCN 模型 算是最早的涉及异配图的prompt了 贡献和动机&#xff1a; 非对…

宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务

一、指定php版运行&#xff0c; cd /www/wwwroot/www.xxx.com/ && /www/server/php/56/bin/php think timedtasks start >> /tmp/timedtasks.log 2>&1 二、不指定php版 cd /www/wwwroot/www.xxx.com/ && php think timedtasks start >> …

【电控笔记z29】扰动估测器DOB估测惯量J-摩擦系数B

基本原理 扰动估测器的核心思想是通过向电机系统施加特定的扰动信号&#xff0c;观察系统响应的变化&#xff0c;然后利用系统的动态模型和控制理论来估计未知参数&#xff0c;如惯量和摩擦系数 。一般基于电机的运动方程建立数学模型&#xff0c;结合观测到的电机实际运行数据…

要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master

要查看 SQLite 数据库中的所有表&#xff0c;可以查询 SQLite 的系统表 sqlite_master。 每个 SQLite 数据库都包含一个名为 sqlite_master 的系统表。该表定义了数据库的模式&#xff0c;存储了数据库中所有表、索引、视图和触发器等对象的信息。 通过查询 sqlite_master&am…

如何在Spring Boot中读取JAR包内resources目录下文件

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 以下是如何在Spring Boot中读取JAR包内resources目录下文件的教程&#xff0c;分为多种方法及详细说明&#xff1a; 方法1&#xff1a;使用 ClassPathResour…

清华大学DeepSeek赋能家庭教育【附下载链接】

核心要点&#xff1a; DeepSeek通过基础模型&#xff08;V3&#xff09;、深度思考模型&#xff08;R1&#xff09;及联网模型&#xff0c;为家庭教育提供分层支持&#xff1a;V3用于作业辅导&#xff0c;R1培养批判性思维&#xff0c;联网模型助力探究性学习。家长需遵循目标导…

C语言番外篇(5)-------------->作用域与生命周期

作用域与生命周期是非常重要的编程知识。本篇文章使用C语言讲述作用域与生命周期。 一、作用域 在程序设计中&#xff0c;变量并非总是有效的&#xff0c;可以使用的区域就是作用域。 1.1局部变量的作用域 在{}中的都是局部变量&#xff0c;只是作用大小不一样而已。我们可…

若依前后端分离版使用Electron打包前端Vue为Exe文件

1.前言 本文详细介绍如何使用electron将若依框架前后端分离版的前端Vue页面打包为Exe文件&#xff0c;并且包括如何实现应用更新。使用若依基础代码体现不出打包功能&#xff0c;因此我使用开发的文件管理系统&#xff0c;介绍上述过程&#xff0c;具体可以查看我的文章《若依…

Linux——Docker容器内MySQL密码忘记了如何查看

目录 查看正在运行的MySQL的容器ID 方法一&#xff1a;查看MySQL容器的日志里的密码 方法二&#xff1a;通过环境变量密码登录 方法三&#xff1a;修改密码 查看正在运行的MySQL的容器ID docker ps 方法一&#xff1a;查看MySQL容器的日志里的密码 docker logs [MySQL的容器…

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

随着自动驾驶技术的迅猛发展&#xff0c;构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下&#xff0c;3D高斯点阵渲染&#xff08;3DGS&#xff09;技术应运而生&#xff0c;成为自动驾驶仿真场景重…

大模型架构记录2

一 应用场景 1.1 prompt 示例 1.2 自己搭建一个UI界面&#xff0c;调用接口 可以选用不同的模型&#xff0c;需要对应的API KEY 二 Agent 使用 2.1 构建GPT

【C++】二叉树相关算法题

一、根据二叉树创建字符串 题目描述&#xff1a; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 “()” 表示&#xff0c;转化后需要省略所有…

【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】

机械视觉与 C# VisionPro 联合编程详解 目录 机械视觉与 C# VisionPro 联合编程详解 概念 应用场景 1. 工业检测与质量控制缺陷检测 2. 定位与机器人引导 3. 识别与分类 4. 复杂流程控制 将visionPro工具加载到winform 环境准备 一、创建winform项目 二、打开窗体…

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…