{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 第三十讲:奇异值分解\n", "\n", "本讲我们介绍将一个矩阵写为$A=U\\varSigma V^T$,分解的因子分别为正交矩阵、对角矩阵、正交矩阵,与前面几讲的分解不同的是,这两个正交矩阵通常是不同的,而且这个式子可以对任意矩阵使用,不仅限于方阵、可对角化的方阵等。\n", "\n", "* 在正定一讲中(第二十八讲)我们知道一个正定矩阵可以分解为$A=Q\\Lambda Q^T$的形式,由于$A$对称性其特征向量是正交的,且其$\\Lambda$矩阵中的元素皆为正,这就是正定矩阵的奇异值分解。在这种特殊的分解中,我们只需要一个正交矩阵$Q$就可以使等式成立。\n", "\n", "* 在对角化一讲中(第二十二讲),我们知道可对角化的矩阵能够分解为$A=S\\Lambda S^T$的形式,其中$S$的列向量由$A$的特征向量组成,但$S$并不是正交矩阵,所以这不是我们希望得到的奇异值分解。\n", "\n", "我们现在要做的是,在$A$的**列空间**中找到一组特殊的正交基$v_1,v_2,\\cdots,v_r$,这组基在$A$的作用下可以转换为$A$的**行空间**中的一组正交基$u_1,u_2,\\cdots,u_r$。\n", "\n", "用矩阵语言描述为$A\\Bigg[v_1\\ v_2\\ \\cdots\\ v_r\\Bigg]=\\Bigg[\\sigma_1u_1\\ \\sigma_2u_2\\ \\cdots\\ \\sigma_ru_r\\Bigg]=\\Bigg[u_1\\ u_2\\ \\cdots\\ u_r\\Bigg]\\begin{bmatrix}\\sigma_1&&&\\\\&\\sigma_2&&\\\\&&\\ddots&\\\\&&&\\sigma_n\\end{bmatrix}$,即$Av_1=\\sigma_1u_1,\\ Av_2=\\sigma_2u_2,\\cdots,Av_r=\\sigma_ru_r$,这些$\\sigma$是缩放因子,表示在转换过程中有拉伸或压缩。而$A$的左零空间和零空间将体现在$\\sigma$的零值中。\n", "\n", "另外,如果算上左零、零空间,我们同样可以对左零、零空间取标准正交基,然后写为$A\\Bigg[v_1\\ v_2\\ \\cdots\\ v_r\\ v_{r+1}\\ \\cdots\\ v_m\\Bigg]=\\Bigg[u_1\\ u_2\\ \\cdots\\ u_r\\ u_{r+1}\\ \\cdots \\ u_n\\Bigg]\\left[\\begin{array}{c c c|c}\\sigma_1&&&\\\\&\\ddots&&\\\\&&\\sigma_r&\\\\\\hline&&&\\begin{bmatrix}0\\end{bmatrix}\\end{array}\\right]$,此时$U$是$m\\times m$正交矩阵,$\\varSigma$是$m\\times n$对角矩阵,$V^T$是$n\\times n$正交矩阵。\n", "\n", "最终可以写为$AV=U\\varSigma$,可以看出这十分类似对角化的公式,矩阵$A$被转化为对角矩阵$\\varSigma$,我们也注意到$U,\\ V$是两组不同的正交基。(在正定的情况下,$U,\\ V$都变成了$Q$。)。进一步可以写作$A=U\\varSigma V^{-1}$,因为$V$是标准正交矩阵所以可以写为$A=U\\varSigma V^T$\n", "\n", "计算一个例子,$A=\\begin{bmatrix}4&4\\\\-3&3\\end{bmatrix}$,我们需要找到:\n", "\n", "* 行空间$\\mathbb{R}^2$的标准正交基$v_1,v_2$;\n", "* 列空间$\\mathbb{R}^2$的标准正交基$u_1,u_2$;\n", "* $\\sigma_1>0, \\sigma_2>0$。\n", "\n", "在$A=U\\varSigma V^T$中有两个标准正交矩阵需要求解,我们希望一次只解一个,如何先将$U$消去来求$V$?\n", "\n", "这个技巧会经常出现在长方形矩阵中:求$A^TA$,这是一个对称正定矩阵(至少是半正定矩阵),于是有$A^TA=V\\varSigma^TU^TU\\varSigma V^T$,由于$U$是标准正交矩阵,所以$U^TU=I$,而$\\varSigma^T\\varSigma$是对角线元素为$\\sigma^2$的对角矩阵。\n", "\n", "现在有$A^TA=V\\begin{bmatrix}\\sigma_1&&&\\\\&\\sigma_2&&\\\\&&\\ddots&\\\\&&&\\sigma_n\\end{bmatrix}V^T$,这个式子中$V$即是$A^TA$的特征向量矩阵而$\\varSigma^2$是其特征值矩阵。\n", "\n", "同理,我们只想求$U$时,用$AA^T$消掉$V$即可。\n", "\n", "我们来计算$A^TA=\\begin{bmatrix}4&-3\\\\4&3\\end{bmatrix}\\begin{bmatrix}4&4\\\\-3&3\\end{bmatrix}=\\begin{bmatrix}25&7\\\\7&25\\end{bmatrix}$,对于简单的矩阵可以直接观察得到特征向量$A^TA\\begin{bmatrix}1\\\\1\\end{bmatrix}=32\\begin{bmatrix}1\\\\1\\end{bmatrix},\\ A^TA\\begin{bmatrix}1\\\\-1\\end{bmatrix}=18\\begin{bmatrix}1\\\\-1\\end{bmatrix}$,化为单位向量有$\\sigma_1=32,\\ v_1=\\begin{bmatrix}\\frac{1}{\\sqrt{2}}\\\\\\frac{1}{\\sqrt{2}}\\end{bmatrix},\\ \\sigma_2=18,\\ v_2=\\begin{bmatrix}\\frac{1}{\\sqrt{2}}\\\\-\\frac{1}{\\sqrt{2}}\\end{bmatrix}$。\n", "\n", "到目前为止,我们得到$\\begin{bmatrix}4&4\\\\-3&3\\end{bmatrix}=\\begin{bmatrix}u_?&u_?\\\\u_?&u_?\\end{bmatrix}\\begin{bmatrix}\\sqrt{32}&0\\\\0&\\sqrt{18}\\end{bmatrix}\\begin{bmatrix}\\frac{1}{\\sqrt{2}}&\\frac{1}{\\sqrt{2}}\\\\\\frac{1}{\\sqrt{2}}&-\\frac{1}{\\sqrt{2}}\\end{bmatrix}$,接下来继续求解$U$。\n", "\n", "$AA^T=U\\varSigma V^TV\\varSigma^TU^T=U\\varSigma^2U^T$,求出$AA^T$的特征向量即可得到$U$,$\\begin{bmatrix}4&4\\\\-3&3\\end{bmatrix}\\begin{bmatrix}4&-3\\\\4&3\\end{bmatrix}=\\begin{bmatrix}32&0\\\\0&18\\end{bmatrix}$,观察得$AA^T\\begin{bmatrix}1\\\\0\\end{bmatrix}=32\\begin{bmatrix}1\\\\0\\end{bmatrix},\\ AA^T\\begin{bmatrix}0\\\\1\\end{bmatrix}=18\\begin{bmatrix}0\\\\1\\end{bmatrix}$。但是我们不能直接使用这一组特征向量,因为式子$AV=U\\varSigma$明确告诉我们,一旦$V$确定下来,$U$也必须取能够满足该式的向量,所以此处$Av_2=\\begin{bmatrix}0\\\\-\\sqrt{18}\\end{bmatrix}=u_2\\sigma_2=\\begin{bmatrix}0\\\\-1\\end{bmatrix}\\sqrt{18}$,则$u_1=\\begin{bmatrix}1\\\\0\\end{bmatrix},\\ u_2=\\begin{bmatrix}0\\\\-1\\end{bmatrix}$。(这个问题在[本讲的官方笔记](http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/positive-definite-matrices-and-applications/singular-value-decomposition/MIT18_06SCF11_Ses3.5sum.pdf)中有详细说明。)\n", "\n", "* 补充:$AB$的特征值与$BA$的特征值相同,证明来自[Are the eigenvalues of AB equal to the eigenvalues of BA? (Citation needed!)](http://math.stackexchange.com/questions/124888/are-the-eigenvalues-of-ab-equal-to-the-eigenvalues-of-ba-citation-needed):\n", "\n", " 取$\\lambda\\neq 0$,$v$是$AB$在特征值取$\\lambda$时的的特征向量,则有$Bv\\neq 0$,并有$\\lambda Bv=B(\\lambda v)=B(ABv)=(BA)Bv$,所以$Bv$是$BA$在特征值取同一个$\\lambda$时的特征向量。\n", " \n", " 再取$AB$的特征值$\\lambda=0$,则$0=\\det{AB}=\\det{A}\\det{B}=\\det{BA}$,所以$\\lambda=0$也是$BA$的特征值,得证。\n", "\n", "最终,我们得到$\\begin{bmatrix}4&4\\\\-3&3\\end{bmatrix}=\\begin{bmatrix}1&0\\\\0&-1\\end{bmatrix}\\begin{bmatrix}\\sqrt{32}&0\\\\0&\\sqrt{18}\\end{bmatrix}\\begin{bmatrix}\\frac{1}{\\sqrt{2}}&\\frac{1}{\\sqrt{2}}\\\\\\frac{1}{\\sqrt{2}}&-\\frac{1}{\\sqrt{2}}\\end{bmatrix}$。\n", "\n", "再做一个例子,$A=\\begin{bmatrix}4&3\\\\8&6\\end{bmatrix}$,这是个秩一矩阵,有零空间。$A$的行空间为$\\begin{bmatrix}4\\\\3\\end{bmatrix}$的倍数,$A$的列空间为$\\begin{bmatrix}4\\\\8\\end{bmatrix}$的倍数。\n", "\n", "* 标准化向量得$v_1=\\begin{bmatrix}0.8\\\\0.6\\end{bmatrix},\\ u_1=\\frac{1}{\\sqrt{5}}\\begin{bmatrix}1\\\\2\\end{bmatrix}$。\n", "* $A^TA=\\begin{bmatrix}4&8\\\\3&6\\end{bmatrix}\\begin{bmatrix}4&3\\\\8&6\\end{bmatrix}=\\begin{bmatrix}80&60\\\\60&45\\end{bmatrix}$,由于$A$是秩一矩阵,则$A^TA$也不满秩,所以必有特征值$0$,则另特征值一个由迹可知为$125$。\n", "* 继续求零空间的特征向量,有$v_2=\\begin{bmatrix}0.6\\\\-0,8\\end{bmatrix},\\ u_1=\\frac{1}{\\sqrt{5}}\\begin{bmatrix}2\\\\-1\\end{bmatrix}$\n", "\n", "最终得到$\\begin{bmatrix}4&3\\\\8&6\\end{bmatrix}=\\begin{bmatrix}1&\\underline {2}\\\\2&\\underline{-1}\\end{bmatrix}\\begin{bmatrix}\\sqrt{125}&0\\\\0&\\underline{0}\\end{bmatrix}\\begin{bmatrix}0.8&0.6\\\\\\underline{0.6}&\\underline{-0.8}\\end{bmatrix}$,其中下划线部分都是与零空间相关的部分。\n", "\n", "* $v_1,\\ \\cdots,\\ v_r$是行空间的标准正交基;\n", "* $u_1,\\ \\cdots,\\ u_r$是列空间的标准正交基;\n", "* $v_{r+1},\\ \\cdots,\\ v_n$是零空间的标准正交基;\n", "* $u_{r+1},\\ \\cdots,\\ u_m$是左零空间的标准正交基。\n", "\n", "通过将矩阵写为$Av_i=\\sigma_iu_i$形式,将矩阵对角化,向量$u,\\ v$之间没有耦合,$A$乘以每个$v$都能得到一个相应的$u$。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }