矩阵微分
函数对于变量的微分在高等数学里面讲的比较多,而矩阵微分在我印象中没有在高等代数中讲解。矩阵微分也是很常用的一个数学工具,我最早是在一门研究生课程“优化设计”中接触到,优化问题中的一个重要概念--梯度,其定义便是向量的微分形式,在求解优化问题时也大量的用到了矩阵的微分(包括向量的微分)。
在求解线性方程组的过程中,有一种迭代算法是源于最优化问题,叫做共轭梯度法(conjugate gradient method)也涉及到了很多的向量微分,当时让我很头疼,对于这个算法的原理我也没有搞清楚,只是按照伪代码去进行实现了。这两天抽空在网上看了下资料[1],说说我自己的理解。
- 先看看向量对于数量微分:
(1)
即向量关于数量的微分是每个维度上的分量关于数量微分组成的向量,微分前后维度不变。
将向量相对于数量微分推广到二维,矩阵相对于数量的微分,微分前后的维度不变:
(2)
下面是一些矩阵对于数量微分的性质,比较容易理解:
(3)
- 再是数量对于向量的微分:
(4)
上式中数量经过对向量
的微分后在向量
所在的维度上被展开了,展开之后在
所有的维度上都有一个数量关于数量的微分,这些微分再组成一个向量构成了 最后的结果。
再将数量推广到一维向量
(5)
上式中我们看到,向量经过对向量
微分后,相当于
的每一个维度对
进行微分,于是微分的结果是m维向量
的每一个维度都被展开成一个n维向量,这就是一个m×n的矩阵。
继续往下推广将之前的向量替换为矩阵
,再对向量
微分那么结果是什么呢?大家可以试着想象一下,结果会变成三维矩阵。
再讲讲性质:
(6)
前面两条显而易见,需要注意的是第三条,在计算的过程中如果没有注意,很容易出错,其中等号右边第二项作微分的时候a与b都作了转置,而且相乘的顺序也与等号左边反过来了。
最后还有一个重要的性质
(7)
到这里讲了一些基本的矩阵微分的定义与一些性质,下面我们以最小二乘问题为例子来看看矩阵微分的实际应用。
最小二乘问题就是多方程组求解少量未知数的问题,模型如下:
(其中y,x是向量,为了简化没有加上箭头)
其中已知量y为m行向量,A为m×n的矩阵,未知量x为n行向量(m>n)。由于未知量个数小于方程个数,方程组无精确解。那么既然找不到精确解,我们只能矮子里面拔将军,从所有的可行解中找到最最接近方程的解。从几何上说最小二乘问题可理解为寻找向量y在超平面A上的投影,从代数上说我们要找到使得值最小的解(其实这也变成了一个最优化问题)。
下面我们分析,当它取到值极小值时,其关于向量x的导数应该为0。于是我们得到
(8)
矩阵乘法展开,根据式(6)有
(9)
由于y,A为已知量与x无关,它们关于x的微分为0。再根据乘法微分公式,即式(6)中的第三条(注意转置与乘法顺序),展开得到
(10)
根据式(7),化简得到
(11)
上式是我们得到的结果,这已经转换为一个线性方程组求解的问题。
这样我们通过矩阵微分的计算将最小二乘最优化问题简化成了线性方程组求解问题,这种求解最小二乘问题的方法叫做法方程法(normal equation method[2]),之所以叫做法方程法是因为从几何上理解我们通过寻找超平面A的正交方向即法方向从而获得了最小二乘解,这是求解最小二乘问题最常用、最快速的方法。