求导数公式…………

(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'评论-2045&
trackbacks-0
  前言:
  由于在sparse coding模型中求系统代价函数偏导数时需要用到矩阵的范数求导,这在其它模型中应该也很常见,比如说对一个矩阵内的元素值进行惩罚,使其值不能过大,则可以使用F范数(下面将介绍)约束,查阅了下矩阵范数求导的相关资料,本节就简单介绍下。
  首先,网络上有大把的人把2范数和F=2时的范数混为一谈,或者说把矩阵p范数和诱导p范数混淆了(也有可能是因为各个版本书所定义的不同吧)。下面我还是以矩阵中权威教材the matrix cookbook和matlab内嵌函数所用的定义来解释。话说the matrix cookbook是一本非常不错的参考书,查找矩阵相关的公式就像查字典一样,很方便。
  矩阵的诱导2范数我们常说的2范数,其定义如下:
  而矩阵的F=2时的范数,却在实际优化领域经常用到的范数,也称为Frobenius范数,其定义为:
  由此可见,在前面博文中,Ng教授给出关于Sparse coding的代价公式如下:
  并且Ng教授称公式中比如第一项是l2范数,按照我现在这种定义其实这种讲法是错的,严格的说应该是Frobenius范数(不过也有可能是他自己的定义不同吧,反正最终能解决问题就行)。毕竟,在matlab中如果按照Ng关于l2范数定义来求的话,其结果就错了。
  为了证明上面的观点,下面在matlab下做一个简单的实验,实验code如下:
%% 使用原始定义求,即a中各元素平方和,然后开根号
a = magic(3);
c = sum(b(:));
d = sqrt(c)
%% 直接使用matlab中2规范函数求
e = norm(a,2)
%% 使用矩阵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')
  运行后其输出结果为:
&&   16.8819
&&   15.0000
&&   15.0000
&&   16.8819
&&   16.8819
  从上面结果可以看出,矩阵的2范数定义所求出的结果和matlab中2范数所求出的结果都是一样的,都为15。而按照Frobenius范数公式的定义, matlab中求Frobenius的函数,以及Frobenius最初始的定义这3种方法来求,其结果也是一样,为16.8819。这个实验和上面的介绍是一致的。
  下面就来看看Sparse coding代价函数第一项中如果要对矩阵A和s求导,该怎么求呢?很明显这是一个矩阵Frobenius求导问题,且求A导数时假设s和X都是常量,求s的时类似,参考了网上论坛上的教材后就可以得到相应的答案。其中对矩阵s求导可以参考下面一个例题:
  而对矩阵A求导可以参考:
&  总结:
   现在比较能够区分2范数和F=2时的范数了,另外需要熟悉矩阵求导的方法。不过到目前为止,还没有找到矩阵2范数求导的公式,也不知道该怎么推导。
  参考资料:
  the matrix cookbook
阅读(...) 评论()
阿萨德发斯蒂芬From Ufldl
在一节中,我们介绍了在稀疏自编码器中用反向传导算法来求梯度的方法。事实证明,反向传导算法与矩阵运算相结合的方法,对于计算复杂矩阵函数(从矩阵到实数的函数,或用符号表示为:从
)的梯度是十分强大和直观的。
首先,我们回顾一下反向传导的思想,为了更适合我们的目的,将其稍作修改呈现于下:
对第 nl 层(最后一层)中的每一个输出单元 i ,令
其中 J(z) 是我们的“目标函数”(稍后解释)。
对第 l 层中的每个节点 i , 令
计算我们要的偏导数
符号扼要重述:
l 是神经网络的层数
nl 第l层神经元的个数
是 l 层第 i 个节点到第 (l + 1) 层第 j 个节点的权重
是第 l 层第 i 个单元的输入
是第 l 层第 i 个节点的激励
是矩阵的Hadamard积或逐个元素乘积,对
矩阵 A 和 B ,它们的乘积是
f(l) 是第 l 层中各单元的激励函数
假设我们有一个函数 F , F 以矩阵 X 为参数生成一个实数。我们希望用反向传导思想计算 F 关于 X 的梯度,即
。大致思路是将函数 F 看成一个多层神经网络,并使用反向传导思想求梯度。
为了实现这个想法,我们取目标函数为 J(z) ,当计算最后一层神经元的输出时,会产生值 F(X) 。对于中间层,我们将选择激励函数 f(l) 。
稍后我们会看到,使用这种方法,我们可以很容易计算出对于输入 X 以及网络中任意一个权重的导数。
为了阐述如何使用反向传导思想计算关于输入的导数,我们要在示例1,示例2中用
章节中的两个函数。在示例3中,我们使用一节中的一个函数来说明使用此思想计算关于权重的偏导的方法,以及在这种特殊情况下,如何处理相互捆绑或重复的权重。
回顾一下,当给定特征矩阵 s 时,权重矩阵 A 的目标函数为:
我们希望求 F 对于 A 的梯度,即
。因为目标函数是两个含 A 的式子之和,所以它的梯度是每个式子的梯度之和。第二项的梯度很容易求,因此我们只考虑第一项的梯度。
,可以看成一个用 s 做输入的神经网络的实例,通过四步进行计算,文字以及图形描述如下:
把 A 作为第一层到第二层的权重。
将第二层的激励减 x ,第二层使用了单位激励函数。
通过单位权重将结果不变地传到第三层。在第三层使用平方函数作为激励函数。
将第三层的所有激励相加。
该网络的权重和激励函数如下表所示:
层权重激励函数 f
f(zi) = zi (单位函数)
I (单位向量)
f(zi) = zi & xi
为了使 J(z(3)) = F(x) ,我们可令
一旦我们将 F 看成神经网络,梯度
就很容易求了——使用反向传导得到:
层激励函数的导数f'Delta该层输入z
f'(zi) = 2zi
f'(zi) = 2zi
f'(zi) = 1
f'(zi) = 1
回顾一节中对 s 的平滑地形L1稀疏罚函数:
其中 V 是分组矩阵, s 是特征矩阵, & 是一个常数。
我们希望求得
。像上面那样,我们把这一项看做一个神经网络的实例:
该网络的权重和激励函数如下表所示:
层权重激励函数 f
f(zi) = zi
f(zi) = zi + &
为使 J(z(4)) = F(x) ,我们可令
一旦我们把 F 看做一个神经网络,梯度
变得很容易计算——使用反向传导得到:
层激励函数的导数 f'
Delta该层输入z
(VssT + &)
f'(zi) = 1
f'(zi) = 1
f'(zi) = 2zi
回顾 一节重建代价一项:
,其中 W 是权重矩阵, x 是输入。
我们希望计算
——对于权重矩阵的导数,而不是像前两例中对于输入的导数。不过我们仍然用类似的方法处理,把该项看做一个神经网络的实例:
该网络的权重和激励函数如下表所示:
层权重激励函数 f
f(zi) = zi
f(zi) = zi
f(zi) = zi & xi
为使 J(z(4)) = F(x) ,我们可令
既然我们可将 F 看做神经网络,我们就能计算出梯度
。然而,我们现在面临的难题是 W 在网络中出现了两次。幸运的是,可以证明如果 W 在网络中出现多次,那么对于 W 的梯度是对网络中每个 W 实例的梯度的简单相加(你需要自己给出对这一事实的严格证明来说服自己)。知道这一点后,我们将首先计算delta:
层激励函数的导数 f'
Delta该层输入z
f'(zi) = 2zi
f'(zi) = 2zi
(WTWx & x)
f'(zi) = 1
f'(zi) = 1
f'(zi) = 1
为计算对于 W 的梯度,首先计算对网络中每个 W 实例的梯度。
最后进行求和,得到对于 W 的最终梯度,注意我们需要对 WT 梯度进行转置,来得到关于 W 的梯度(原谅我在这里稍稍滥用了符号):
反向传导 backpropagation
稀疏编码 sparse coding
权重矩阵 weight matrix
目标函数 objective
平滑地形L1稀疏罚函数 Smoothed topographic L1 sparsity penalty
重建代价 reconstruction cost
稀疏自编码器 sparse autoencoder
梯度 gradient
神经网络 neural network
神经元 neuron
激励 activation
激励函数 activation function
独立成分分析 independent component analysis
单位激励函数 identity activation function
平方函数 square function
分组矩阵 grouping matrix
特征矩阵 feature matrix
葛燕儒(),
顾祺龙(),
李良玥(),
Language&:
Personal tools
This page was last modified on 8 April 2013, at 09:53.
This page has been accessed 19,061 times.

我要回帖

更多关于 导数求极值 的文章

 

随机推荐