矩阵求导公式,及MathJax公式编辑
2017-08-19 23:46
211 查看
最近学到线性回归中要用到向量,矩阵求导,所以就搜集了下资料,总结如下:
矩阵求导有两种布局:
分子布局(numerator layout)
分母布局(denominator layout)
下面用向量y对标量x求导简单说明这两种布局的区别。
我们假定所有的向量都是列向量。
y=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮ym⎤⎦⎥⎥⎥⎥⎥⎥⎥
在分子布局下:
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x∂y2∂x⋮∂ym∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
在分母布局下:
∂y∂x=[∂y1∂x∂y2∂x⋯∂ym∂x]
在下面的推到中,都将采用分母布局,也就是向量(列)对标量求导的结果都是行向量。(采用这种布局的主要原因是向量对向量的求导就是一个矩阵了)
向量对标量
标量对向量
向量对向量
矩阵对向量
向量对矩阵
矩阵求导的大致规则如下:
对标量求导结果都要转置,而标量对向量或者矩阵求导的话位置不变。
向量对标量:
∂y∂x=[∂y1∂x∂y2∂x⋯∂ym∂x]
(采用的是分母布局,也就是转置了)
标量对向量:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x1∂y∂x2⋮∂y∂x3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
(此时X是向量,y是标量,标量对向量的求导没有转置)
向量对向量求导:
X=⎡⎣⎢⎢⎢⎢⎢⎢⎢x1x2x3⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥
y=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮ym⎤⎦⎥⎥⎥⎥⎥⎥⎥
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y1∂x2⋮∂y1∂xn∂y2∂x1∂y2∂x2⋮∂y2∂xn⋯⋯⋱⋯∂ym∂x1∂ym∂x2⋮∂ym∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
矩阵对标量求导:
∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x∂y12∂x⋮∂y1n∂x∂y21∂x∂y22∂x⋮∂y2n∂x⋯⋯⋱⋯∂ym1∂x∂ym2∂x⋮∂ymn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
可以看出转置了。。
标量对矩阵求导:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x21⋮∂y∂xp1∂y∂x12∂y∂x22⋮∂y∂xp2⋯⋯⋱⋯∂y∂x1q∂y∂x2q⋮∂y∂xpq⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
其中,y∈R,a∈Rn×1,x∈Rn×1
属于标量对向量求导,所以有:
∂y∂x=a
其中a是列向量,没有转置
例2. y=Ax
y∈Rm×1,A∈Rm×n,x∈Rn×1
属于向量对向量求导,所以有:
∂y∂x=AT
例3.
y=Au(x)
其中,y∈Rm×1,A∈Rm×n,u∈Rn×1,x∈Rp×1
属于向量对向量的求导,所以有:
∂y∂x=∂u∂xAT
如果:y=a(x)u(x)
其中:y∈Rm×1,a∈R,u∈Rm×1,x∈Rn×1
属于向量对向量的求导,所以有:
∂y∂x=∂u∂xa+∂a∂xuT
假如已知:a(x)=Bxu(x)=Cx
其中:B∈R1×n,C∈Rm×n
那么, ∂y∂x=CTa+BTuT
例子4: f=xTAy(x)
那么,
∂f∂x=Ay+∂y∂xATx
其中,x∈Rm×1,y∈Rn×1,A∈Rm×n,f∈R
上面的式子,当y(x)=x时,也就是m=n时。
f∂f∂x=xTAx=(A+AT)x
例子5:
f=aTxxTba,b,x∈Rm×1
则 ∂f∂x=a(xTb)+b(aTx)=(abT+baT)x
参考:
http://blog.csdn.net/young_gy/article/details/50008953
常用公式:
dUVTdX=(dUdX)VT+U(dVTdX)
dUTVdX=(dUTdX)V+(dVTdX)UT
dXTdx=IdXdxT=I
d(AX)Tdx=ATdAxdxT=A
dxTAdx=A
∂uTv∂x=∂uT∂xv+∂vT∂xuT
∂uvT∂x=∂u∂xvT+u∂vT∂x
dxTxdx=2x
dxTAxdx=(A+AT)x
∂AB∂x=∂A∂xB+A∂B∂x
∂uTXv∂X=uvT
∂uTXTXu∂X=2XuvT
∂[(Xu−v)T(Xu−v)]∂X=2(Xu−v)uT
维基百科:
Result of differentiating various kinds of aggregates with other kinds of aggregates
![](https://img-blog.csdn.net/20170821135255449?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nMTE3MTk0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Identities: vector-by-vector ∂y∂x
![](https://img-blog.csdn.net/20170821135522947?watermark/2/text/aHR0<br/>1caaa<br/>cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nMTE3MTk0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Identities: scalar-by-vector ∂y∂x=∇xy
![](https://img-blog.csdn.net/20170821135720196?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nMTE3MTk0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170821135812829?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nMTE3MTk0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Identities: vector-by-scalar∂y∂x
![](https://img-blog.csdn.net/20170821135934538?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nMTE3MTk0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
详细参考:
维基百科矩阵求导
因为是第一次用公式编辑器,所以总结下基本使用方法:
MathJax是一个JavaScript引擎,用来显示网络上的数学公式, MathJax有两种插入公式的方式:
一种是行中公式,另外一种是独立公式,行中公式可以插入到一行文字中,独立公式是单独成行,行中公式插入方式是:
分组是用{}把一个部分括起来,看成一个整体
空格
MathJax中不能直接输入空格,可以用 , \; \quad和\qquad充当空格,增加的间隔依次增大
运算符号
关系比较符号
分式
有两种实现方式:
输入:
输入:{a+c+1} \over {b+c+2},输出:a+c+1b+c+2
根式
平方根 :
输入:\sqrt {a+b},输出:a+b−−−−√
输入:\sqrt[5] {a+b},输出:a+b−−−−√5
特殊数学符号
1.求和:
输入:\sum {a+b},输出:∑a+b
输入:\sum_{i=1}^{K},输出:∑Ki=1
其中”_”是下标; “^”是上标
输入:
2.连乘:
输入:\prod {a+b},输出:∏a+b
输入:\prod_{i=1}^{K},输出:∏Ki=1
输入:
3.arg max/arg min/max/min
输入:
输入:
输入:
输入:
输入:
输入:
\ldots 偏下点 ; \cdots 中间点 ; \vdots 竖直点 ; \ddots 对角点
输入\cdots:输出:⋯
常用在这种情况:
输入
输入:
输出:
f(x)=a+b+a=2a+b
条件函数
关键词是
输入:
输出:
L(Y,f(X))={0,1,Y = f(X)Y ≠ f(X)
下面在看一个例子:
输出:J(θ)=12∑i=1m(hθ(x(i))−y(i))2
这个公式是线性回归算法里的成本函数
这里:
公式编辑器
以上是一些基本用法,遇到其他的再追加。。。。
矩阵求导有两种布局:
分子布局(numerator layout)
分母布局(denominator layout)
下面用向量y对标量x求导简单说明这两种布局的区别。
我们假定所有的向量都是列向量。
y=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮ym⎤⎦⎥⎥⎥⎥⎥⎥⎥
在分子布局下:
∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x∂y2∂x⋮∂ym∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
在分母布局下:
∂y∂x=[∂y1∂x∂y2∂x⋯∂ym∂x]
在下面的推到中,都将采用分母布局,也就是向量(列)对标量求导的结果都是行向量。(采用这种布局的主要原因是向量对向量的求导就是一个矩阵了)
求导的类别
求导大致分为5类:向量对标量
标量对向量
向量对向量
矩阵对向量
向量对矩阵
矩阵求导的大致规则如下:
对标量求导结果都要转置,而标量对向量或者矩阵求导的话位置不变。
向量对标量:
∂y∂x=[∂y1∂x∂y2∂x⋯∂ym∂x]
(采用的是分母布局,也就是转置了)
标量对向量:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x1∂y∂x2⋮∂y∂x3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
(此时X是向量,y是标量,标量对向量的求导没有转置)
向量对向量求导:
X=⎡⎣⎢⎢⎢⎢⎢⎢⎢x1x2x3⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥
y=⎡⎣⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮ym⎤⎦⎥⎥⎥⎥⎥⎥⎥
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y1∂x2⋮∂y1∂xn∂y2∂x1∂y2∂x2⋮∂y2∂xn⋯⋯⋱⋯∂ym∂x1∂ym∂x2⋮∂ym∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
矩阵对标量求导:
∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x∂y12∂x⋮∂y1n∂x∂y21∂x∂y22∂x⋮∂y2n∂x⋯⋯⋱⋯∂ym1∂x∂ym2∂x⋮∂ymn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
可以看出转置了。。
标量对矩阵求导:
∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x21⋮∂y∂xp1∂y∂x12∂y∂x22⋮∂y∂xp2⋯⋯⋱⋯∂y∂x1q∂y∂x2q⋮∂y∂xpq⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
简单的例子
例1.y=aTx其中,y∈R,a∈Rn×1,x∈Rn×1
属于标量对向量求导,所以有:
∂y∂x=a
其中a是列向量,没有转置
例2. y=Ax
y∈Rm×1,A∈Rm×n,x∈Rn×1
属于向量对向量求导,所以有:
∂y∂x=AT
例3.
y=Au(x)
其中,y∈Rm×1,A∈Rm×n,u∈Rn×1,x∈Rp×1
属于向量对向量的求导,所以有:
∂y∂x=∂u∂xAT
如果:y=a(x)u(x)
其中:y∈Rm×1,a∈R,u∈Rm×1,x∈Rn×1
属于向量对向量的求导,所以有:
∂y∂x=∂u∂xa+∂a∂xuT
假如已知:a(x)=Bxu(x)=Cx
其中:B∈R1×n,C∈Rm×n
那么, ∂y∂x=CTa+BTuT
例子4: f=xTAy(x)
那么,
∂f∂x=Ay+∂y∂xATx
其中,x∈Rm×1,y∈Rn×1,A∈Rm×n,f∈R
上面的式子,当y(x)=x时,也就是m=n时。
f∂f∂x=xTAx=(A+AT)x
例子5:
f=aTxxTba,b,x∈Rm×1
则 ∂f∂x=a(xTb)+b(aTx)=(abT+baT)x
参考:
http://blog.csdn.net/young_gy/article/details/50008953
常用公式:
dUVTdX=(dUdX)VT+U(dVTdX)
dUTVdX=(dUTdX)V+(dVTdX)UT
dXTdx=IdXdxT=I
d(AX)Tdx=ATdAxdxT=A
dxTAdx=A
∂uTv∂x=∂uT∂xv+∂vT∂xuT
∂uvT∂x=∂u∂xvT+u∂vT∂x
dxTxdx=2x
dxTAxdx=(A+AT)x
∂AB∂x=∂A∂xB+A∂B∂x
∂uTXv∂X=uvT
∂uTXTXu∂X=2XuvT
∂[(Xu−v)T(Xu−v)]∂X=2(Xu−v)uT
维基百科:
Result of differentiating various kinds of aggregates with other kinds of aggregates
Identities: vector-by-vector ∂y∂x
Identities: scalar-by-vector ∂y∂x=∇xy
Identities: vector-by-scalar∂y∂x
详细参考:
维基百科矩阵求导
因为是第一次用公式编辑器,所以总结下基本使用方法:
MathJax是一个JavaScript引擎,用来显示网络上的数学公式, MathJax有两种插入公式的方式:
一种是行中公式,另外一种是独立公式,行中公式可以插入到一行文字中,独立公式是单独成行,行中公式插入方式是:
$…$,独立公式插入方式是:
$$…$$,省略号代表插入的公式部分。
常用符号
分组(最常用)分组是用{}把一个部分括起来,看成一个整体
空格
MathJax中不能直接输入空格,可以用 , \; \quad和\qquad充当空格,增加的间隔依次增大
运算符号
运算符 | 表示 |
---|---|
+ | + |
− | - |
× | \times |
÷ | \div |
± | \pm |
∓ | \mp |
^(指数运算符) | ^ |
运算符 | 表示 |
---|---|
< | \lt |
> | \gt |
≤ | \le |
≥ | \ge |
≠ | \neq |
有两种实现方式:
输入:
$\frac {a+c+1}{b+c+2}$,输出:a+c+1b+c+2
输入:{a+c+1} \over {b+c+2},输出:a+c+1b+c+2
根式
平方根 :
输入:\sqrt {a+b},输出:a+b−−−−√
输入:\sqrt[5] {a+b},输出:a+b−−−−√5
特殊数学符号
1.求和:
输入:\sum {a+b},输出:∑a+b
输入:\sum_{i=1}^{K},输出:∑Ki=1
其中”_”是下标; “^”是上标
输入:
$$\sum_{i=1}^{K}$$,输出:∑i=1K
2.连乘:
输入:\prod {a+b},输出:∏a+b
输入:\prod_{i=1}^{K},输出:∏Ki=1
输入:
$$\prod_{i=1}^{K}$$,输出:∏i=1K
3.arg max/arg min/max/min
输入:
$$arg\,\max_{c_k}$$,输出:argmaxck
输入:
$$arg\,\min_{c_k}$$,输出:argminck
输入:
$$\mathop {argmin}_{c_k}$$,输出:argminck
输入:
$$\mathop {argmax}_{c_k}$$,输出:argmaxck
输入:
$$\max_{c_k}$$,输出:maxck
输入:
$$\min_{c_k}$$,输出:minck
省略符号
连续点-省略号:\ldots 偏下点 ; \cdots 中间点 ; \vdots 竖直点 ; \ddots 对角点
输入\cdots:输出:⋯
常用在这种情况:
输入
$f(x_1,x_2,\cdots,x_n)$:输出:f(x1,x2,⋯,xn)
独立公式
对齐:\begin{align}`用于开头,`\end{align}用于结尾,对齐的位置用
&开始,用
\\结束
输入:
$$ \begin{align} f(x) &=a+b+a\\ & = 2a+b \end{align} $$
输出:
f(x)=a+b+a=2a+b
条件函数
关键词是
\begin{cases}`和`\end{cases},
\test{}括号里面输入内容
输入:
$$ L(Y,f(X)) = \begin{cases} 0, & \text{Y = f(X)} \\ 1, & \text{Y $\neq$ f(X)} \end{cases} $$
输出:
L(Y,f(X))={0,1,Y = f(X)Y ≠ f(X)
下面在看一个例子:
$$ J(\theta) = \frac 1 2 \sum_{i=1}^m (h_\theta(x^{(i)})-y^{(i)})^2 $$
输出:J(θ)=12∑i=1m(hθ(x(i))−y(i))2
这个公式是线性回归算法里的成本函数
这里:
公式编辑器
以上是一些基本用法,遇到其他的再追加。。。。
相关文章推荐
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 常用的矩阵求导公式
- 机器学习中常用的矩阵求导公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 机器学习中常用的矩阵求导公式
- 矩阵求导公式
- 矩阵求导公式
- 机器学习中常用的矩阵求导公式
- 向量矩阵求导公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- [转载]机器学习中常用的矩阵求导公式
- 常用矩阵向量求导公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 机器学习中常用的矩阵求导公式
- 矩阵求导公式
- 对向量和矩阵求导、求迹、求期望的公式
- 论文中常用的一些矩阵求导公式和二阶范数公式
- 矩阵求导公式