矩阵的迹

矩阵微积分的一些实用结论与推导

断了今生、忘了曾经 提交于 2019-12-26 23:06:56
矩阵微积分的一些实用结论与推导 向量与矩阵的相关运算 矩阵的一元运算 矩阵的拉直算子 矩阵的迹 矩阵的行列式 伴随矩阵与矩阵的逆 矩阵的二元运算 矩阵的乘法 Hadamard乘积 Kronecker积 数量对向量的导数 数量对列向量的导数 对内积运算求导 对矩阵与向量的乘积求导 对二次型求导 矩阵对矩阵的导数 数量对矩阵的导数 对矩阵的一元运算求导 对拉直算子求导 对矩阵的迹求导数 对矩阵的行列式求导数 对矩阵的二元运算求导 对矩阵的乘法求导 对矩阵的Hadamard乘积求导 对矩阵的张量积求导 在一些优化问题中,经常会出现选择向量或者矩阵来最优化某个目标函数的情况,要想从理论上求解这类优化,就需要正确计算目标函数关于向量或者矩阵的导数。比如多元回归模型中,要用最小二乘法估计回归系数,需要做以下的最优化: min ⁡ β Q = ( Y − X β ) 2 {\min_{\beta}} Q=(Y - X\beta)^2 β min ​ Q = ( Y − X β ) 2 然而现有的教材和论文都只是需要什么就临时查证推导一下,很少有系统地总结目标函数怎么对向量或矩阵求导的资料。这篇博文比较全面地整理了向量与矩阵的一些常用运算,以及怎么对这些常用运算求导的方法。有张量积和拉平算子就足以解决大部分领域的问题了,所以这篇博文不会涉及张量以及张量分析的内容

matlab矩阵的操作

笑着哭i 提交于 2019-12-26 09:33:38
特殊矩阵 通用型的特殊矩阵 zeros函数:产生全0矩阵,即零矩阵 ones函数:产生全1矩阵,即幺矩阵 eye函数: 产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。 rand函数:产生(0,1)区间均匀分布的随机矩阵 randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。 以上函数三种调用格式 例: 产生m x m 零矩阵 :zeros(m) 产生m x n 零矩阵 :zeros(m,n) 产生与矩阵A同型的零矩阵 :zeros(sizeof(A)) 面向专门学科的特殊矩阵 1、 魔方矩阵:n阶魔方阵由1..n 2 共n 2 个整数组成,其每行每列及主、副对角线元素 之和都相等。当n>=2时,有多个不同的n阶魔方阵。 magic(n):产生一个特定(不是所有的)n阶的魔方阵 2、 范德蒙(Vandermonde的)矩阵(常用与通信编码纠错): vander(v)函数:生成以向量V为基础的范德蒙矩阵 3、 希尔伯特(Hilbert)矩阵:H( i , j )= 1/ (i+j-) Hilb(n)函数:生成n阶希尔伯特矩阵 4、 伴随矩阵(??): Compan(p)函数:求矩阵P的伴随矩阵 5、 帕斯卡矩阵:P( i , j )=p(i , j-1) + p(i-1,j) 且 p(i , 1)= p(1,j)=1 Pascal(n)函数:生成帕斯卡矩阵 矩阵变换

常用矩阵导数公式

笑着哭i 提交于 2019-12-22 18:09:48
1 矩阵\(Y=f(x)\)对标量x求导 矩阵Y是一个\(m\times n\)的矩阵,对标量x求导,相当于矩阵中每个元素对x求导 \[\frac{dY}{dx}=\begin{bmatrix}\dfrac{df_{11}(x)}{dx} & \ldots & \dfrac{df_{1n}(x)}{dx} \\ \vdots & \ddots &\vdots \\ \dfrac{df_{m1}(x)}{dx} & \ldots & \dfrac{df_{mn}(x)}{dx} \end{bmatrix}\] 2 标量y=f(x)对矩阵X求导 注意与上面不同,这次括号内是求偏导,\(X\)是是一个\(m\times n\)的矩阵,函数\(y=f(x)\)对矩阵\(X\)中的每个元素求偏导,对\(m\times n\)矩阵求导后还是\(m\times n\)矩阵 \[\frac{dy}{dX} = \begin{bmatrix}\dfrac{\partial f}{\partial x_{11}} & \ldots & \dfrac{\partial f}{\partial x_{1n}}\\ \vdots & \ddots & \vdots \\\dfrac{\partial f}{\partial x_{m1}} & \ldots & \dfrac{\partial f}{

线性方程组求解

眉间皱痕 提交于 2019-12-17 22:36:34
1.矩阵基本知识 (1)正交矩阵相乘仍然是正交矩阵 A、B是正交矩阵,那么AA'=E BB'=E (AB)*(AB)'=AB*B'A'=A(BB')A'=AEA'=AA'=E (2)一个矩阵乘以正交矩阵,范数不变 ||Ux||^2=(Ux)^T(Ux)=x^TU^TUx=x^Tx=||x||^2 (3)一个矩阵乘以可逆矩阵秩不变 (4)初等变换只是不影响矩阵的秩,其他的特性都改变了。对于计算矩阵的行列式,不能进行初等变换,但是可以做行列的进 加减,不能乘以系数。 (5)矩阵的迹:矩阵的主对角线上各个元素的总和,是矩阵所有特征值的和 (6)对角矩阵的特征值是其对角线上的各个元素 (7)矩阵的秩等于非零奇异值的个数,等于非零特征值的个数 (8)任意矩阵都能进行奇异值分解,只有方阵才可以进行特征值分解 特征值分解: 如果一个向量 v 是方阵 A的特征向量,将可以表示成下面的形式: Av= λv,λ 称为特征向量 v 对应的特征值,并且一个矩 阵的 一组特征向量是一组正交向量。 特征值分解:Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值 奇异值分解: 假设A是一个N * M的矩阵,U是一个N * N的方阵(正交矩阵),Σ 是一个N * M的矩阵(对角线上的元素为奇异值),VT是 一个M * M的矩阵(正交矩阵) 特征值和奇异值的关系: (1)U

Eigen(5)-Reductions, visitors and broadcasting(规约、迭代和广播)

六月ゝ 毕业季﹏ 提交于 2019-12-13 12:10:05
规约、迭代、广播 规约 Eigen中规约是指对一个矩阵或数组操作并返回一个标量的函数,常用的是sum()方法,返回矩阵或数组的所有元素的和。 # include <iostream> # include <Eigen/Dense> using namespace std ; int main ( ) { Eigen :: Matrix2d mat ; mat << 1 , 2 , 3 , 4 ; cout << "Here is mat.sum(): " << mat . sum ( ) << endl ; cout << "Here is mat.prod(): " << mat . prod ( ) << endl ; cout << "Here is mat.mean(): " << mat . mean ( ) << endl ; cout << "Here is mat.minCoeff(): " << mat . minCoeff ( ) << endl ; cout << "Here is mat.maxCoeff(): " << mat . maxCoeff ( ) << endl ; cout << "Here is mat.trace(): " << mat . trace ( ) << endl ; } output Here is mat.sum(): 10

数学基础 | (4) cs229线性代数基础

岁酱吖の 提交于 2019-12-10 14:02:40
目录 1. 基本概念和符号 2. 矩阵乘法 3. 运算和属性 4. 矩阵微分 1. 基本概念和符号 线性代数提供了一种紧凑地表示和操作线性方程组的方法。例如,以下方程组: 这是两个方程和两个变量,正如你从高中代数中所知,你可以找到 和 的唯一解(除非方程以某种方式退化,例如,如果第二个方程只是第一个的倍数,但在上面的情况下,实际上只有一个唯一解)。在矩阵表示法中,我们可以更紧凑地表达: 我们可以看到,这种形式的线性方程有许多优点(比如明显地节省空间). 基本符号 我们使用以下符号: 在许多情况下,将矩阵视为列向量或行向量的集合非常重要且方便。 通常,在向量而不是标量上操作在数学上(和概念上)更清晰。只要明确定义了符号,用于矩阵的列或行的表示方式并没有通用约定。 2. 矩阵乘法 向量-向量乘法 矩阵-向量乘法 矩阵-矩阵乘法 有了这些知识,我们现在可以看看四种不同的(形式不同,但结果是相同的)矩阵-矩阵乘法:也就是本节开头所定义的 的乘法。 矩阵C的第i列可以由矩阵A和矩阵B的第i列通过矩阵-向量乘积运算得到: 同理,矩阵C的第i行可以由矩阵A的第i行和矩阵B通过矩阵-向量乘积运算得到: 运算律: 3. 运算和属性 单位矩阵和对角矩阵 转置 对称矩阵 矩阵的迹 范数 线性相关性和秩 方阵的逆 请注意,并非所有矩阵都具有逆。例如,非方形矩阵根据没有逆的定义。然而,对于一些方形矩阵A

主成分分析(PCA)原理总结

穿精又带淫゛_ 提交于 2019-12-10 04:13:48
    主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结。 1. PCA的思想     PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是n维的,共有m个数据$(x^{(1)},x^{(2)},...,x^{(m)})$。我们希望将这m个数据的维度从n维降到n'维,希望这m个n'维的数据集尽可能的代表原始数据集。我们知道数据从n维降到n'维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这n'维的数据尽可能表示原来的数据呢?     我们先看看最简单的情况,也就是n=2,n'=1,也就是将数据从二维降维到一维。数据如下图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向,$u_1$和$u_2$,那么哪个向量可以更好的代表原始数据集呢?从直观上也可以看出,$u_1$比$u_2$好。     为什么$u_1$比$u_2$好呢?可以有两种解释,第一种解释是样本点到这个直线的距离足够近,第二种解释是样本点在这个直线上的投影能尽可能的分开。     假如我们把n'从1维推广到任意维,则我们的希望降维的标准为

线性代数之——相似矩阵

那年仲夏 提交于 2019-12-05 10:54:28
当 \(A\) 有足够的特征向量的时候,我们有 \(S^{-1}AS=\Lambda\) 。在这部分, \(S\) 仍然是最好的选择,但现在我们允许任意可逆矩阵 \(M\) ,矩阵 \(A\) 和 \(M^{-1}AM\) 称为 相似矩阵 ,并且不管选择哪个 \(M\) ,特征值都保持不变。 1. 相似矩阵 假设 \(M\) 是任意的可逆矩阵,那么 \(B = M^{-1}AM\) 相似于矩阵 \(A\) 。 \[B = M^{-1}AM \to A = MBM^{-1}\] 也就是说如果 \(B\) 相似于 \(A\) ,那么 \(A\) 也相似于 \(B\) 。如果 \(A\) 可以对角化,那么 \(A\) 相似于 \(\Lambda\) ,它们肯定具有相同的特征值。 相似的矩阵 \(A\) 和 \(M^{-1}AM\) 具有相同的特征值,如果 \(x\) 是 \(A\) 的一个特征向量,那么 \(M^{-1}x\) 是 \(B = M^{-1}AM\) 的特征向量。 \[Ax=\lambda x \to MBM^{-1}x=\lambda x \to B(M^{-1}x)=\lambda (M^{-1}x)\] 所有具有特征值 1 和 0 的 2×2 矩阵都是相似的,特征向量会随着 \(M\) 而改变,但特征值不变。上面的例子中特征值是不重复的,这种情况很好办

线性代数之——正定矩阵

五迷三道 提交于 2019-12-05 10:52:35
这部分我们关注有正特征值的对称矩阵。如果对称性使得一个矩阵重要,那么所有特征值大于零这个额外属性则让这个矩阵真正特殊。但我们这里的特殊并不是稀少,事实上在各种应用中具有正特征值的对称矩阵非常常见,它们被称作 正定矩阵 。 我们可以通过检查特征值是否大于零来识别正定矩阵,但计算特征值是一项工作,当我们真正需要它们的时候我们可以进行计算,而如果我们仅仅想知道它们是否是正的,我们有更快的方式。 1. 正定矩阵的判断 首先,由于矩阵是对称的,所有的特征值自然都是实数。让我们以一个 2×2 的矩阵开始, \[A = \begin{bmatrix} a&b \\b&c\end{bmatrix}\] A 的特征值是正的当且仅当 \(a > 0\) 并且 \(ac-b^2>0\) 。 如果 2×2 矩阵的特征值 \(\lambda_1>0\) , \(\lambda_2>0\) ,那么它们的乘积等于行列式, \(\lambda_1\lambda_2=|A|=ac-b^2>0\) ,它们的和等于矩阵的迹, \(\lambda_1+\lambda_2=a+c>0\) ,所以 \(a\) 和 \(c\) 都必须是正的。 A 的特征值是正的当且仅当主元是正的。 这连接了线性代数的两大部分, 正的特征值意味着正的主元,反之亦然 。而且,主元往往比特征值计算得更快。 基于能量的定义 \[Ax=\lambda

pytorch 花式张量(Tensor)操作

元气小坏坏 提交于 2019-12-05 02:34:09
一、张量的维度操作 1.squezee & unsqueeze x = torch.rand(5,1,2,1) x = torch.squeeze(x)#去掉大小为1的维度,x.shape =(5,2) x = torch.unsqueeze(x,3)#和squeeze相反在第三维上扩展,x.shape = (5,2,1) 2.张量扩散,在指定维度上将原来的张量扩展到指定大小,比如原来x是3 1,输入size为[3, 4],可以将其扩大成3 4,4为原来1个元素的复制 x = x.expand(*size) 3.转置,torch.transpose 只能交换两个维度 permute没有限制 x = torch.transpose(x, 1, 2) # 交换1和2维度 x = x.permute(1, 2, 3, 0) # 进行维度重组 4.改变形状,view&reshape 两者作用一样,区别在于是当从多的维度变到少的维度时,如果张量不是在连续内存存放,则view无法变成合并维度,会报错 x = x.view(1, 2, -1)#把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor x = x.reshape(1, 2, -1) 5.张量拼接 cat & stack torch.cat(a