奇异值分解(SVD)的原理详解及推导

article/2025/10/14 1:08:42

1. 写在前面

最近整理推荐系统模型的时候, 第二个模型打算整理一下隐语义模型, 这里面绕不开一种思想就是矩阵分解, 而作为矩阵分解的经典方法SVD感觉这次有必要学学了, SVD不仅是一个数学问题,在工程应用中的很多地方都有它的身影,比如我之前在【白话机器学习篇】说到了PCA, 那是一种经典的降维方式, 而SVD同样的也可以用于降维, 并且掌握了SVD原理后再去看PCA那是相当简单的,在推荐系统方面,SVD更是名声大噪,在2006年, Koren将它应用于推荐系统并获得了Netflix大奖, 因此在推荐系统中也就出来了隐语义模型(Latent Factor Model)或者叫矩阵分解模型(Matrix Fatcorization), 它们的核心思想是通过寻找隐含特征来联系用户兴趣和商品,说白了其实就是把协同过滤里面的共现矩阵分解成了两个矩阵相乘的方式。 这个在具体整理的时候再谈, 总之, 这里面绕不开的一个名词就是SVD, 尽管数学上的这种SVD矩阵分解由于它对矩阵稠密的要求和计算复杂度大不太直接用于协同过滤里面的共现矩阵,但是源思想没变, 所以在这里先整理一下SVD的原理, 防止在整理矩阵分解模型的时候遇到SVD, RSVD, ASVD, SVD++等各种名词的时候一脸懵逼哈哈。

这篇文章是基本看着一篇博客整理过来的, 只是对里面的错别字和公式进行了改版, 对里面说的不太清晰的地方简单的补充了一下, 所以并不是完全原创文章, 注明一下原文章出处:https://blog.csdn.net/zhongkejingwang/article/details/43053513, 下面就是这个链接的原文了。

用SVD可以很容易得到任意矩阵的满秩分解,用满秩分解可以对数据做压缩。可以用SVD来证明对任意 M × N M\times N M×N的矩阵均存在如下分解:

在这里插入图片描述
这个可以应用在数据降维压缩上!在数据相关性特别大的情况下存储X和Y矩阵比存储A矩阵占用空间更小!在开始讲解SVD之前,先补充一点矩阵代数的相关知识。

2. 正交矩阵

正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特点是不改变向量的尺寸和向量间的夹角,那么它到底是个什么样的变换呢?看下面这张图
在这里插入图片描述
假设二维空间中的一个向量OA,它在标准坐标系也即e1、e2表示的坐标是中表示为(a,b)’(用’表示转置),现在把它用另一组坐标e1’、e2’表示为(a’,b’)’,存在矩阵U使得(a’,b’)’=U(a,b)’,则U即为正交矩阵。

从图中可以看到,正交变换只是将变换向量用另一组正交基表示,在这个过程中并没有对向量做拉伸,也不改变向量的空间位置,假如对两个向量同时做正交变换,那么变换前后这两个向量的夹角显然不会改变。上面的例子只是正交变换的一个方面,即旋转变换,可以把e1’、e2’坐标系看做是e1、e2坐标系经过旋转某个θ角度得到,怎么样得到该旋转矩阵U呢?假如 x = [ a b ] \mathbf{x}=\left[\begin{array}{l}a \\ b\end{array}\right] x=[ab], 则:
a ′ = x ⋅ e 1 ′ = e 1 ′ T x b ′ = x ⋅ e 2 ′ = e 2 ′ T x \begin{array}{l} a^{\prime}=\mathbf{x} \cdot e 1^{\prime}=e1^{{\prime}^T} \mathbf{x} \\ b^{\prime}=\mathbf{x} \cdot e 2^{\prime}=e2^{{\prime}^T} \mathbf{x} \end{array} a=xe1=e1Txb=xe2=e2Tx
a ′ a' a b ′ b' b实际上是 x \mathbf{x} x e 1 ′ e1' e1 e 2 ′ e2' e2轴上的投影大小,所以直接做内积可得,then
[ a ′ b ′ ] = [ e 1 ′ T e 2 ′ T ] x \left[\begin{array}{l} a^{\prime} \\ b^{\prime} \end{array}\right]=\left[\begin{array}{l} e 1^{\prime T} \\ e2^{\prime T} \end{array}\right] \mathbf{x} [ab]=[e1Te2T]x
从图中可以看到, e 1 e1 e1 e 2 e2 e2是一组基, 坐标是(1,0), (0,1), 把这俩投影到新的轴上得到 e 1 ′ e1' e1 e 2 ′ e2' e2, 其实
e 1 ′ = [ ∣ e 1 ∣ cos ⁡ θ ∣ e 1 ∣ sin ⁡ θ ] e 2 ′ = [ − ∣ e 1 ∣ sin ⁡ θ ∣ e 1 ∣ cos ⁡ θ ] e 1^{\prime}=\left[\begin{array}{l} |e1|\cos \theta \\ |e1|\sin \theta \end{array}\right] \quad e 2^{\prime}=\left[\begin{array}{c} -|e1|\sin \theta \\ |e1|\cos \theta \end{array}\right] e1=[e1cosθe1sinθ]e2=[e1sinθe1cosθ]
所以
U = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] \mathbf{U}=\left[\begin{array}{cc} \cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] U=[cosθsinθsinθcosθ]
正交阵U行(列)向量之间都是单位正交向量。上面求得的是一个旋转矩阵,它对向量做旋转变换!也许你会有疑问:刚才不是说向量空间位置不变吗?怎么现在又说它被旋转了?对的,这两个并没有冲突,说空间位置不变是绝对的,但是坐标是相对的,假如你站在e1上看OA,随着e1旋转到e1’,看OA的位置就会改变。如下图:
在这里插入图片描述
如图,如果我选择了e1’、e2’作为新的标准坐标系,那么在新坐标系中OA(原标准坐标系的表示)就变成了OA’,这样看来就好像坐标系不动,把OA往顺时针方向旋转了“θ”角度,这个操作实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。

旋转变换是正交变换的一个方面,这个挺有用的,比如在开发中需要实现某种旋转效果,直接可以用旋转变换实现。正交变换的另一个方面是反射变换,也即e1’的方向与图中方向相反,这个不再讨论。

总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从e1、e2到e1’、e2’)

3. 特征值分解—EVD

在讨论SVD之前先讨论矩阵的特征值分解(EVD),在这里,选择一种特殊的矩阵——对称阵(酉空间中叫hermite矩阵即厄米阵)。对称阵有一个很优美的性质:它总能相似对角化,对称阵不同特征值对应的特征向量两两正交。一个矩阵能相似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。现在假设存在mxm的满秩对称矩阵A,它有m个不同的特征值,设特征值为 λ i \lambda_i λi, 对应的特征向量 x i x_i xi, 则有
在这里插入图片描述
进而
在这里插入图片描述
所以可得到A的特征值分解(由于对称阵特征向量两两正交,所以U为正交阵,正交阵的逆矩阵等于其转置)
在这里插入图片描述
这里假设A有m个不同的特征值,实际上,只要A是对称阵其均有如上分解。

矩阵A分解了,相应的,其对应的映射也分解为三个映射。现在假设有x向量,用A将其变换到A的列空间中,那么首先由U’先对x做变换:
A x = U Λ U T x \mathrm{Ax}=U \Lambda U^{T} \mathrm{x} Ax=UΛUTx

U是正交阵 U T U^T UT也是正交阵,所以 U T U^T UT对x的变换是正交变换,它将x用新的坐标系来表示,这个坐标系就是A的所有正交的特征向量构成的坐标系。假如将x用A的所有特征向量表示为:
x = a 1 x 1 + a 2 x 2 + ⋯ + a m x m \mathrm{x}=a_{1} \mathrm{x}_{1}+a_{2} \mathrm{x}_{2}+\cdots+a_{m} \mathrm{x}_{m} x=a1x1+a2x2++amxm
这个假设是向量x原来的坐标, 那么, 经过第一个变换之后, 就可以把向量x变成[a1, a2, …am]’。
在这里插入图片描述
紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩:
在这里插入图片描述
从上图可以看到,如果A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化, 这样就可以降维了看没看到,这样就会使映射后的向量落入m维空间的子空间中。

最后一个变换就是U对拉伸或压缩后的向量做变换,由于U和U’是互为逆矩阵,所以U变换是U’变换的逆变换。

因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。

根据对称阵A的特征向量,如果A是2*2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过A变换后还是矩形:
在这里插入图片描述
这个矩形的选择就是让其边都落在A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

3. 奇异值分解—SVD

上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!这个意思其实就是上面向量x的那三次变换, 开始的正交基假设的是A个特征向量。 而A变换之后, 又变回到了那组正交基上, 只不过是长度上发生了拉伸或者压缩, 方向没变。可以看那两个矩形。

那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。SVD想做的这个变化不限于是上面的m*m的满秩对称矩阵A, 而是任意的A矩阵。

现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中, k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:
在这里插入图片描述
即这组基经过A的变化之后依然是正交的, 则A矩阵将这组基映射为:
在这里插入图片描述
如果要使他们两两正交,即
在这里插入图片描述
这个地方第一个等式是点乘, 后面是矩阵乘法哈,所以才多出了个转置,不要弄混。 根据前面假设, v i {v_i} vi是一组正交基, 则存在
在这里插入图片描述
所以如果正交基v选择为A’A的特征向量的话,即 ( A T A ) v i = λ i v i \left(A^{T} A\right) v_{i}=\lambda_{i} v_{i} (ATA)vi=λivi, 由于A’A是对称阵,v之间两两正交,那么
在这里插入图片描述
这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化:

因为
在这里插入图片描述
这个是上面的 j j j换成 i i i v i v_i vi是基, 向量表示的时候是某个方向为1, 其他方向是0, 所以自己和自己点乘的结果是1.

所以有
在这里插入图片描述
所以取单位向量, 也就是 A v i Av_i Avi单位化
在这里插入图片描述
由此可得
在这里插入图片描述

k < i < = m k < i <= m k<i<=m时,对 u 1 , u 2 , . . . , u k u_1,u_2,...,u_k u1u2...uk进行扩展 u ( k + 1 ) , . . . , u m u_{(k+1)},...,u_m u(k+1),...,um,使得 u 1 , u 2 , . . . , u m u_1,u_2,...,u_m u1u2...um为m维空间中的一组正交基, 同样的,对 v 1 , v 2 , . . . , v k v_1,v_2,...,v_k v1v2...vk进行扩展v_{(k+1)},…,v_n(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得 v 1 , v 2 , . . . , v n v_1,v_2,...,v_n v1v2...vn为n维空间中的一组正交基, 则可得到:
在这里插入图片描述
继而可以得到A矩阵的奇异值分解:
在这里插入图片描述
正交矩阵转置等于逆。

现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在A’A的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形!

v i v_i vi为A’A的特征向量,称为A的右奇异向量, u i = A v i u_i=Av_i ui=Avi实际上为AA’的特征向量,称为A的左奇异向量。下面利用SVD证明文章一开始的满秩分解:
在这里插入图片描述

利用矩阵分开乘法展开得:
在这里插入图片描述
可以看到第二项为0,有

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
则A=XY即是A的满秩分解。

参考:

  • A Singularly Valuable Decomposition The SVD of a Matrix
  • 奇异值分解(SVD)详解及其应用

http://chatgpt.dhexx.cn/article/Gd7KjqHo.shtml

相关文章

机器学习(29)之奇异值分解SVD原理与应用详解

微信公众号 关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 奇异值分解(Singular Value Decomposition,简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于…

【机器学习】这次终于彻底理解了奇异值分解(SVD)原理及应用

奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是在机器学习领域广泛应用的算法&#xff0c;有相当多的应用与奇异值都可以扯上关系&#xff0c;它不光可以用于降维算法中的特征分解&#xff0c;比如做feature reduction的PCA&#xff0c;做数据压缩&#x…

联邦学习——用data-free知识蒸馏处理Non-IID

《Data-Free Knowledge Distillation for Heterogeneous Federated Learning》ICML 2021 最近出现了利用知识蒸馏来解决FL中的用户异构性问题的想法&#xff0c;具体是通过使用来自异构用户的聚合知识来优化全局模型&#xff0c;而不是直接聚合用户的模型参数。然而&#xff0c…

【FLIS】Clustered Federated Learning via Inference Similarity for Non-IID Data Distribution

Clustered Federated Learning via Inference Similarity for Non-IID Data Distribution 基于推理相似性的非iid数据分布聚类联邦学习 Abstract1.INTRODUCTION2.FEDERATED LEARNING WITH CLUSTERINGA. Overview of FLIS AlgorithmB. Clustering Clients 3.EXPERIMENTSA. Exper…

Federated Learning with Non-IID Data 论文笔记

本文提出联邦学习中的由于Non-IID数据分布而精度降低是因为权重分散&#xff08;weight divergence&#xff09;&#xff0c;而权重散度可以用搬土距离&#xff08;EMD&#xff09;量化&#xff0c;最后提出了一种策略&#xff1a;通过创建一个在所有边缘设备之间全局共享的数据…

论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题

‍ ‍ 本次分享内容基于ICLR 2021收录的一篇文章&#xff1a;《FED BN: FEDERATED LEARNING ON NON-IID FEATURES VIA LOCAL BATCH NORMALIZATION》&#xff0c;这篇论文主要探讨了使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题。围绕这篇论文的分享将分为4个部分&#…

On the convergence of FedAvg on non-iid data

在这篇blog中我们一起来阅读一下 On the convergence of FedAvg on non-iid data 这篇 ICLR 2020 的paper. 主要目的 本文的主要目的是证明联邦学习算法的收敛性。与之前其他工作中的证明不同&#xff0c;本文的证明更贴近于实际联邦学习的场景。特别的&#xff0c; 所有用户…

Federated Learning with Non-IID Data

Federated Learning with Non-IID Data 论文中分析了FedAvg算法在Non-IID数据时&#xff0c;准确率下降的原因。并提出共享5%的数据可提高准确率。 论文笔记参考&#xff1a;https://blog.csdn.net/GJ_007/article/details/104768415 Federated Learning with Non-IID Data …

什么是TLB文件,怎样从dll文件中提取TYPEID信息?- IID

文章目录 1.TLB是什么?2.怎样从dll中导出TLB文件?3.怎样创建TLB文件?4.如何导入TLB5.作者答疑Com是windows平台提供的二进制互操作解决方案。如果给你一个dll,或者windows自带的dll,是否有可能提取其Com接口信息,答案是可以的。 1.TLB是什么? TLB文件是一个说明文件,通…

怎么实现联邦学习中的Non-IID?

联邦学习的一大特点就是数据分布是Non-IID&#xff0c;Non-IID意为非独立同分布。那么怎么在实验中实现non-iid呢&#xff1f;这是我这篇博客想讨论的问题。 part 1&#xff1a; 在堪称联邦学习“开山之作”FedAvg这篇论文中&#xff0c;是这样描述的&#xff1a; 数据集是MN…

【联邦学习】联邦学习量化——non-iid数据集下的仿真

文章目录 改进项目背景量化函数的改进non-iid数据集的设置Fedlab划分数据集的踩雷 改进项目背景 在前面的项目中&#xff0c;虽然对联邦学习中&#xff0c;各个ue训练出来的模型上传的参数进行了量化&#xff0c;并仿真的相关结果。但是仍有一些俺不是非常符合场景的情况&…

「隐语小课」联邦学习之Non-IID问题

更多干货内容&#xff0c;请移步公众号&#xff1a;隐语的小剧场 一、引言 本文针对联邦学习中遇到的Non-IID问题进行探讨&#xff0c;介绍Non-IID产生的原因&#xff0c;分析Non-IID对联邦学习的影响&#xff0c;以及调研了近年来针对该问题的解决方案&#xff0c;并进行分类…

联邦学习中的non-iid总结

最近研究联邦学习&#xff08;federated learning&#xff0c;FL&#xff09;中的non-iid的解决办法时遇到瓶颈&#xff0c;写成博客将最近的工作总结一下&#xff0c;希望有大佬看到这篇博客不吝赐教。 什么是non-iid 先从维基百科引出独立同分布的定义&#xff1a; 在概率论…

IID 与 Non-IID

数据独立同分布&#xff08;Independent Identically Distribution&#xff0c;IID&#xff09; 数据与数据之间都是独立的&#xff0c;但满足同一个分布。&#xff08;独立&#xff1a;一个数据的出现不会影响另一个数据&#xff09; 数据分布描述的是数据的统计情况&#x…

dy设备deviceid iid注册分析

清楚缓存&#xff0c;重新打开app, 点击同意按钮&#xff0c;会触发设备注册&#xff1b; 很明显是一个post包&#xff0c;device_register 可以看到请求体加密了 那么 请求体是什么呢&#xff1f; 很老版本思路&#xff1a;都是直接明文注册 较老版本思路&#xff1a;在反编译…

Redis 设计与实现: redisObject 数据结构,以及 Redis 的数据类型

redisObject 数据结构&#xff0c;以及 Redis 的数据类型 redisObject 是 Redis 类型系统的核心&#xff0c; 数据库中的每个键、值&#xff0c;以及 Redis 本身处理的参数&#xff0c; 都表示为这种数据类型。 redisObject 的定义位于 redis.h &#xff1a; /** Redis 对象…

(五)、Redis的RDB持久化---Redis设计与实现读书笔记

两个用于生成RDB文件的命令 save&#xff1a;会阻塞Redis服务器进程&#xff0c;直到RDB文件创建完毕&#xff0c;在阻塞期间&#xff0c;服务器不能处理任何命令请求bgsave&#xff1a;会派生出一个子进程&#xff0c;然后由子进程负责创建RDB文件&#xff0c;服务器经常(父进…

《redis设计与实现》 读书笔记

《redis设计与实现》 作者&#xff1a;黄健宏 读书笔记 一、前言 什么是redis&#xff1a; Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。简而言之redis就是放在远程网络上的一个key-va…

《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS

除仅用于字符串字面量的情况外&#xff0c;对于可以被修改值的字符串的表示&#xff0c;Redis底层并没有采用C语言传统的字符串表示&#xff0c;即以空字符结尾的字符数组&#xff0c;而是采用专门为其设计的简单动态字符串作为其默认字符串表示&#xff0c;其英文全称为Simple…

Redis秒杀功能设计与实现

前言 抢购问题不仅是电商类项目中一个重要的业务,也是许多开发人员在进阶过程中绕不开的问题,关于抢购,如果理清了前后的逻辑和里面涉及到的几个关键性的问题,问题就迎刃而解了 抢购中的几个常见问题 如何设计抢购功能?(表结构,以及整体的抢购思路)不借助中间件如何实…