为什么向量wT(w的转置矩阵对向量求导)对w求导为值为1

4被浏览159分享邀请回答01 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
Maple/Matlab 符号运算求助有个问题困扰好久了:请问在Matlab或者Maple中,有没有办法定义一个n维向量(或矩阵),但n不需要赋值,然后进行符号运算?例如我需要对一个函数求导:L=0.5*w(T)·V·w,其中w为变量,一个n维向量,w(T)为其转置向量;V为一个n*n的系数矩阵;n>1为一整数.在Maple或Matlab符号运算中,能不能在n不赋值情况下对L求导运算呢?对L求导很简单,这是一个通式,问题是在程序中怎么实现对类似这样的通式做符号运算呢?
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
举个例子你看一下>>syms x>> diff(sin(x^2))ans =2*cos(x^2)*x
为您推荐:
其他类似问题
扫描下载二维码7039人阅读
数学知识(2)
矢量范数的偏导数
L1范数不可微。但是存在次梯度,即是次微分的。
L1范数的次梯度如下:
??x||x||1=sign(x)
其中sign(x) 表示如下:
sign(x)=???+1-1[-1,1]xi&0xi&0xi=0
在实验中,我们经常很碰到,一个函数表达式中含有多个带有绝对值表达式,我们为了去掉绝对值号,进行化简,经常需要假设函数绝对值中的表达式满足&0或者&0来消去绝对值。但是当变量很多时,很难划分这样的空间。例如上面的L1就是一个例子:
||x||1=|x1|+|x2|+....+|xn|
对于一维的情况:
|x|={x-xx≥0x≤0
但是对于高维的情况,我们很难写书上面明确的展开式。但是,在数值计算中,除了所谓的符号运。都是在知道明确的“值”的情况下,来进行求解的。
因此,知道了具体的值,我们很容易确定这个值的梯度。例如,对于3维的情况。如果值为x0=[3,-2,5]T,我们很容易知道,其函数值展开的表达式为:
||x||1=x1-x2+x3
故其梯度为[1,-1,1]T,即sign(x)。
2. L2 范数:
??x||x-a||2=x-a||x-a||2
??xx-a||x-a||2=I||x-a||2-(x-a)(x-a)T||x-a||32
?||x||22?x=?||xTx||2?x=2x
例如:求解下面函数的偏导数:
f(W)=12∑i,j∈S1γi,j||wTiX-wTjX||22
其中W是矩阵,大小D×L,X是矩阵,大小为D×N,其中D是特征向量的维度,L是任务的数量,N是样本的数量。则矢量*矩阵,即wTiX是一个矢量,矢量和矢量也是矢量,故这是要求解矢量L2范数的偏导数。
?f(W)?wi===∑i,j∈S1γi,j(wTiX-wTjX)*?(wTiX-wTjX)?wi∑i,j∈S1γi,j(wTiX-wTjX)*XT∑i,j∈S1γi,j(wTi-wTj)*(XXT)
注意这里得到的是行向量的形式,因此还需要对其进行转置 。
对wj求偏导数:
?f(W)?wj===∑i,j∈S1γi,j(wTjX-wTiX)*?(wTjX-wTiX)?wj∑i,j∈S1γi,j(wTjX-wTiX)*XT∑i,j∈S1γi,j(wTj-wTi)*(XXT)
Matlab对低维数据进行验证:
syms x11 x12 x21 x22 x31 x32 wi1 wi2 wi3 wj1 wj2 wj3 real;
X = [x11 x12;x21 x22;x31 x32];
wi = [wi1 wi2 wi3]';
wj = [wj1 wj2 wj3]';
fw = 1/2*norm(wi'*X-wj'*X,2).^2;
grad_wi1 = diff(fw,wi1);
grad_wi2 = diff(fw,wi2);
grad_wi3 = diff(fw,wi3);
grad_wi0 =[grad_wi1;grad_wi2;grad_wi3];
grad_wi = (wi'*X-wj'*X)*X';
grad_wi = grad_wi';
disp('method 1:');
disp(grad_wi0);
disp('method 2:');
disp(grad_wi);
disp('%%%%%%%%%%%%%%%%%%%%%% \partial wj %%%%%%%%%%%%%%%%%%');
grad_wj1 = diff(fw,wj1);
grad_wj2 = diff(fw,wj2);
grad_wj3 = diff(fw,wj3);
grad_wj0 = [grad_wj1;grad_wj2;grad_wj3];
grad_wj = (wj'*X- wi'*X)*X';
grad_wj = grad_wj';
disp('method 1:');
disp(grad_wj0);
disp('method 2:');
disp(grad_wj);
x11*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x12*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
x21*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x22*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
x31*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x32*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
x11*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x12*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
x21*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x22*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
x31*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) + x32*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x11*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x12*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x21*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x22*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x31*abs(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31)*sign(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x32*abs(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)*sign(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x11*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x12*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x21*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x22*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
- x31*(wi1*x11 + wi2*x21 + wi3*x31 - wj1*x11 - wj2*x21 - wj3*x31) - x32*(wi1*x12 + wi2*x22 + wi3*x32 - wj1*x12 - wj2*x22 - wj3*x32)
参考文献:
The Matrix Cookbook
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:196632次
积分:3913
积分:3913
排名:第10423名
原创:189篇
转载:21篇
评论:11条
带着问题去学习...
(3)(4)(6)(8)(1)(1)(18)(15)(11)(23)(10)(11)(11)(26)(21)(19)(3)(16)(2)(1)(3)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'矩阵(向量)求导
编辑:www.fx114.net
本篇文章主要介绍了"矩阵(向量)求导 ",主要涉及到矩阵(向量)求导 方面的内容,对于矩阵(向量)求导 感兴趣的同学可以参考一下。
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 = &S&Su(i)x(ij)v(j) 于是 dy/dX = = 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求导,然后排在一起形成超级矩阵。
另附几个重要文献,是矩阵微积分方面的数学知识。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:相关文章推荐
SVM样本训练步骤
转自:http://blog.csdn.net/xw/article/details/
近期在做飞形体目标识别的研究,需要做SV...
支持向量机(SVM)中最核心的是什么?个人理解就是前4个字——“支持向量”,一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据超平面对类别进行归类...
SVM训练及预测过程
.cn/s/blog_65caafbi.html
网上有很多关于LibSVM的教程,LibSVM提供了多平台下的可执行文件,在win平台下可以直接通过命令行执行,可以利用提供的可执行文件方便的进行离线的训练和预测,这里不再赘述。这篇文章要做的是把SV...
什么是机器学习 (Machine Learning)
机器学习是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的...
言归正传,实验所用行人库:INRIAPerson。训练过程如下:
1、选定正负样本:正样本、行人库中正样本大小为96x160,比我们需要的64x128窗口要大,是因为每一个边有一个padding,1...
SVM样本训练步骤
近期在做飞形体目标识别的研究,需要做SVM训练来生成识别的分类器。从网上找了大量的参考文章,但是发现很多文章都讲的比较零散。鉴于此原因,本文对SVM训练过程做一个较为系统...
原文来自:http://blog.csdn.net/zhzhl202/article/details/8197109
之前做过一些文本挖掘的项目,比如网页分类、微博情感分析、用户评论...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 对转置矩阵求导 的文章

 

随机推荐