zoukankan      html  css  js  c++  java
  • Deep learning:二十七(Sparse coding中关于矩阵的范数求导)

      前言:

      由于在sparse coding模型中求系统代价函数偏导数时需要用到矩阵的范数求导,这在其它模型中应该也很常见,比如说对一个矩阵内的元素值进行惩罚,使其值不能过大,则可以使用F范数(下面将介绍)约束,查阅了下矩阵范数求导的相关资料,本节就简单介绍下。

      首先,网络上有大把的人把2范数和F=2时的范数混为一谈,或者说把矩阵p范数和诱导p范数混淆了(也有可能是因为各个版本书所定义的不同吧)。下面我还是以矩阵中权威教材the matrix cookbook和matlab内嵌函数所用的定义来解释。话说the matrix cookbook是一本非常不错的参考书,查找矩阵相关的公式就像查字典一样,很方便。

      矩阵的诱导2范数我们常说的2范数,其定义如下:

       

      而矩阵的F=2时的范数,却在实际优化领域经常用到的范数,也称为Frobenius范数,其定义为:

       

      由此可见,在前面博文Deep learning:二十六(Sparse coding简单理解)中,Ng教授给出关于Sparse coding的代价公式如下:

       

      并且Ng教授称公式中比如第一项是l2范数,按照我现在这种定义其实这种讲法是错的,严格的说应该是Frobenius范数(不过也有可能是他自己的定义不同吧,反正最终能解决问题就行)。毕竟,在matlab中如果按照Ng关于l2范数定义来求的话,其结果就错了。

      为了证明上面的观点,下面在matlab下做一个简单的实验,实验code如下:

    %% 使用原始定义求,即a中各元素平方和,然后开根号
    a = magic(3);
    b = a.^2;
    c = sum(b(:));
    d = sqrt(c)
    
    %% 直接使用matlab中2规范函数求
    e = norm(a,2)
    
    %% 使用矩阵a'*a最大特征值开根号的方法求
    f = a'*a;
    g = eig(f);
    h = max(g);
    i = sqrt(h)
    
    %% 使用Frobenius范数公式来求(其中F=2)
    j = sqrt(trace(a*a'))
    
    %% 使用matlab自带的Frobenius公式来求
    k = norm(a,'fro')

      运行后其输出结果为:

      d =

         16.8819

      e =

         15.0000

      i =

         15.0000

      j =

         16.8819

      k =

         16.8819

      从上面结果可以看出,矩阵的2范数定义所求出的结果和matlab中2范数所求出的结果都是一样的,都为15。而按照Frobenius范数公式的定义, matlab中求Frobenius的函数,以及Frobenius最初始的定义这3种方法来求,其结果也是一样,为16.8819。这个实验和上面的介绍是一致的。

      下面就来看看Sparse coding代价函数第一项中如果要对矩阵A和s求导,该怎么求呢?很明显这是一个矩阵Frobenius求导问题,且求A导数时假设s和X都是常量,求s的时类似,参考了网上论坛http://www.mathchina.net/dvbbs/dispbbs.asp?boardid=4&Id=3673上的教材后就可以得到相应的答案。其中对矩阵s求导可以参考下面一个例题:

       

      而对矩阵A求导可以参考:

       

       总结:

       现在比较能够区分2范数和F=2时的范数了,另外需要熟悉矩阵求导的方法。不过到目前为止,还没有找到矩阵2范数求导的公式,也不知道该怎么推导。

      参考资料:

         矩阵范数- 维基百科,自由的百科全书 - 维基百科- Wikipedia

      the matrix cookbook

         Deep learning:二十六(Sparse coding简单理解)

         http://www.mathworks.com/matlabcentral/newsreader/view_thread/287712

         http://www.mathchina.net/dvbbs/dispbbs.asp?boardid=4&Id=3673

    作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:tornadomeet,欢迎交流!)
  • 相关阅读:
    微服务安全(二)OAuth 2.0
    微服务安全(一)
    Spring Security 学习+实践
    Dubbo 学习(二)服务注册与发现
    Dubbo 学习(一)
    Spring Cloud Hystrix 学习(三)请求合并
    Spring Cloud Hystrix 学习(二)熔断与降级
    Spring Cloud Hystrix 学习(一)
    Spring Cloud Gateway 学习+实践
    Spring Cloud Zuul 学习+实践
  • 原文地址:https://www.cnblogs.com/tornadomeet/p/3019885.html
Copyright © 2011-2022 走看看