zoukankan      html  css  js  c++  java
  • 矩阵范数和矩阵求导

    今天发现两篇宝藏文章,关于矩阵范数和矩阵求导的,转载收藏一下。感谢大佬们的分享!{抱拳}
    矩阵范数 转载自:https://blog.csdn.net/sylar49/article/details/77510160

    今天看了半天强化学习,看得很不开心。。。因为一直处于懵圈状态。。。
    于是乎不想看了,稍微总结一下矩阵范数的求解来放松一下身心吧~

    这里总结的矩阵范数主要是F范数、1范数、2范数、核范数以及全变分TV范数与1、2的搭配

    1、F范数

    概念:

    XF=i=1mj=1nxij2

    矩阵各个元素平方和开根,概念上非常像向量的L2范数
    导数:求导的方法则是将其展开来,一般情况下我们不会直接求原始的范数||A||F,因为很麻烦,即使是在损失函数中也是用F范数的平方项来简化运算,而常见的损失函数一般是
    12||YX||F2
    ,此时对X求导,则需要将内部的Y-X展开来
    YXTYX=YTY+2XTY+XTX,所以对 12||YX||F2中X求导即为 XY

    2、1范数

    概念:║A║1 = max{ ∑|ai1|, ∑|ai2| ,…… ,∑|ain| } (列和范数,A每一列元素绝对值之和的最大值) (其中∑|ai1|第一列元素绝对值的和∑|ai1|=|a11|+|a21|+…+|an1|,其余类似);
    矩阵的1范数和向量的1范数雷同,不能直接求解,只能分情况讨论
    求导:常规的L1范数的求导是在损失函数中作为正则项出现,即12||YX||F2+λ1||X||1,这里前半部分求导是XY,后半部分则需要分情况讨论,最终结果为为

    [Sλ(Y)]i={yiλifyi>λ0ifλyiλyi+λifyi<λ

    3、2范数

    概念:||A||2指的是A最大的奇异值或者半正定矩阵A*A最大特征值开根
    求导:对于问题argminX12XVF2+λX2存在近似解|V|2λ|V|2V

    4、TV范数

    概念:全变分范数,其实就是对矩阵乘上一个一阶的差分矩阵,乘完还是个矩阵,所以要一般要结合前边的1范数或者2范数再对其进行约束求解

    5、核范数

    概念:即矩阵奇异值的和
    求解:对于minX112YX1F2+λ1X1
    存在近似解X1^=Dλ1(Y)
    Dλ 表示i=1r(σiλ)+uiviT

    这里, (x)+=max(0,x). ui, viσi 分别是<script type="math/tex" id="MathJax-Element-1851">M</script>的左奇异向量、右奇异向量和奇异值

    (markdown模式下可以用latex写东西真的太方便了= =

    至于各个范数的效果,实质上1范数和2范数在矩阵分解上效果差得不多,基本上2范数能分离出的高频成分1范数能更快的分离出来,在一维层面上也容易想想,1范数相比2范数能够更快的收敛(直指坐标中心),核范数效果对低频成分的提取也比TV_1/TV_2范数的效果要好很多。

    具体的实现可以关注一下我师弟在这个月投在BIBM上一个关于矩阵范数的toolbox论文。应该很快就可以出结果了。o( ̄▽ ̄)ブ

    参考文献
    Cai J F, Candès E J, Shen Z. A Singular Value Thresholding Algorithm for Matrix Completion[J]. Siam Journal on Optimization, 2010, 20(4):1956-1982.
    矩阵的 Frobenius 范数及其求偏导法则 http://blog.csdn.net/txwh0820/article/details/46392293

    矩阵求导 转载自:https://blog.csdn.net/txwh0820/article/details/46392293

    矩阵的迹求导法则
    矩阵的迹求导法则
    矩阵的frobenius范数及其求偏导法则-1
    矩阵的frobenius范数及其求偏导法则-2

    1. 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix
    3
    4
    2. x is a column vector, A is a matrix

    d(Ax)/dx=A
    d(xTA)/dxT=A
    d(xTA)/dx=AT
    d(xTAx)/dx=xT(AT+A)

    3. Practice:
    5
    4. 矩阵求导计算法则
    求导公式(撇号为转置):
    Y = A * X –> DY/DX = A’
    Y = X * A –> DY/DX = A
    Y = A’ * X * B –> DY/DX = A * B’
    Y = A’ * X’ * B –> DY/DX = B * A’
    乘积的导数:
    d(f*g)/dx=(df’/dx)g+(dg/dx)f’

    一些结论

    1. 矩阵Y对标量x求导:
      相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了
      Y = [y(ij)]–> dY/dx = [dy(ji)/dx]
    2. 标量y对列向量X求导:
      注意与上面不同,这次括号内是求偏导,不转置,对N×1向量求导后还是N×1向量
      y = f(x1,x2,..,xn) –> dy/dX= (Dy/Dx1,Dy/Dx2,..,Dy/Dxn)’
    3. 行向量Y’对列向量X求导:
      注意1×M向量对N×1向量求导后是N×M矩阵。
      将Y的每一列对X求偏导,将各列构成一个矩阵。
      重要结论:
      dX’/dX =I
      d(AX)’/dX =A’
    4. 列向量Y对行向量X’求导:
      转化为行向量Y’对列向量X的导数,然后转置。
      注意M×1向量对1×N向量求导结果为M×N矩阵。
      dY/dX’ =(dY’/dX)’
    5. 向量积对列向量X求导运算法则:
      注意与标量求导有点不同。
      d(UV’)/dX =(dU/dX)V’ + U(dV’/dX)
      d(U’V)/dX =(dU’/dX)V + (dV’/dX)U’
      重要结论:
      d(X’A)/dX =(dX’/dX)A + (dA/dX)X’ = IA + 0X’ = A
      d(AX)/dX’ =(d(X’A’)/dX)’ = (A’)’ = A
      d(X’AX)/dX =(dX’/dX)AX + (d(AX)’/dX)X = AX + A’X
    6. 矩阵Y对列向量X求导:
      将Y对X的每一个分量求偏导,构成一个超向量。
      注意该向量的每一个元素都是一个矩阵。
    7. 矩阵积对列向量求导法则:
      d(uV)/dX =(du/dX)V + u(dV/dX)
      d(UV)/dX =(dU/dX)V + U(dV/dX)
      重要结论:
      d(X’A)/dX =(dX’/dX)A + X’(dA/dX) = IA + X’0 = A
    8. 标量y对矩阵X的导数:
      类似标量y对列向量X的导数,
      把y对每个X的元素求偏导,不用转置。
      dy/dX = [Dy/Dx(ij) ]
      重要结论:
      y = U’XV= ΣΣu(i)x(ij)v(j) 于是 dy/dX = [u(i)v(j)] =UV’
      y = U’X’XU 则dy/dX = 2XUU’
      y =(XU-V)’(XU-V) 则 dy/dX = d(U’X’XU - 2V’XU + V’V)/dX = 2XUU’ - 2VU’ +0 = 2(XU-V)U’
    9. 矩阵Y对矩阵X的导数:
      将Y的每个元素对X求导,然后排在一起形成超级矩阵。
      10.乘积的导数
      d(f*g)/dx=(df’/dx)g+(dg/dx)f’
      结论
      d(x’Ax)=(d(x”)/dx)Ax+(d(Ax)/dx)(x”)=Ax+A’x (注意:”是表示两次转置)

    矩阵求导 属于 矩阵计算,应该查找 Matrix Calculus 的文献:
    http://www.psi.toronto.edu/matrix/intro.html#Intro
    http://www.psi.toronto.edu/matrix/calculus.html
    http://www.stanford.edu/~dattorro/matrixcalc.pdf
    http://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/IFEM.AppD.d/IFEM.AppD.pdf
    http://www4.ncsu.edu/~pfackler/MatCalc.pdf
    http://center.uvt.nl/staff/magnus/wip12.pdf

  • 相关阅读:
    CentOS6.8编译安装lnmp(一)- 依赖库
    PHP7废弃$GLOBALS["HTTP_RAW_POST_DATA"]
    利用python处理自动化任务之查看文件夹大小和内容
    利用python处理自动化任务之批量新建文件夹(2)
    python处理自动化任务之批量新建文件夹
    利用python处理自动化任务之批量修改文件夹的名字
    利用python完成自动化的任务之遍历文件夹修改文件之后并保存备份
    python Matplotlib给坐标轴标签添加文本框
    python-matplotlib添加水平和垂直的直线
    python-matplotlib绘制堆积的条形图
  • 原文地址:https://www.cnblogs.com/zhipu/p/14307835.html
Copyright © 2011-2022 走看看