Typesetting math: 100%

机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法

    在机器学习中的矩阵向量求导(一) 求导定义与求导布局中,我们讨论了向量矩阵求导的9种定义与求导布局的概念。今天我们就讨论下其中的标量对向量求导,标量对矩阵求导, 以及向量对向量求导这三种场景的基本求解思路。

    对于本文中的标量对向量或矩阵求导这两种情况,如前文所说,以分母布局为默认布局。向量对向量求导,以分子布局为默认布局。如遇到其他文章中的求导结果和本文不同,请先确认使用的求导布局是否一样。另外,由于机器学习中向量或矩阵对标量求导的场景很少见,本系列不会单独讨论这两种求导过程。

1. 用定义法求解标量对向量求导

    标量对向量求导,严格来说是实值函数对向量的求导。即定义实值函数f:RnR,自变量x是n维向量,而输出y是标量。对于一个给定的实值函数,如何求解yx呢?

    首先我们想到的是基于矩阵求导的定义来做,由于所谓标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量。

    首先我们来看一个简单的例子:y=aTx,求解aTxx

    根据定义,我们先对x的第i个分量进行求导,这是一个标量对标量的求导,如下:

aTxxi=j=1najxjxi=aixixi=ai

    可见,对向量的第i个分量的求导结果就等于向量a的第i个分量。由于我们是分母布局,最后所有求导结果的分量组成的是一个n维向量。那么其实就是向量a。也就是说:aTxx=a

    同样的思路,我们也可以直接得到:xTax=a

    给一个简单的测试,大家看看自己能不能按定义法推导出:xTxx=2x

    再来看一个复杂一点点的例子:y=xTAx,求解xTAxx

    我们对x的第k个分量进行求导如下:

xTAxxk=i=1nj=1nxiAijxjxk=i=1nAikxi+j=1nAkjxj

    这个第k个分量的求导结果稍微复杂些了,仔细观察一下,第一部分是矩阵A的第k列转置后和x相乘得到,第二部分是矩阵A的第k行和x相乘得到,排列好就是: xTAxx=ATx+Ax

    从上面可以看出,定义法求导对于简单的实值函数是很容易的,但是复杂的实值函数就算求出了任意一个分量的导数,要排列出最终的求导结果还挺麻烦的,因此我们需要找到其他的简便一些的方法来整体求导,而不是每次都先去针对任意一个分量,再进行排列。

2. 标量对向量求导的一些基本法则

    在我们寻找一些简单的方法前,我们简单看下标量对向量求导的一些基本法则,这些法则和标量对标量求导的过程类似。

    1) 常量对向量的求导结果为0。

    2)线性法则:如果f,g都是实值函数,c1,c2为常数,则:(c1f(x)+c2g(x)x=c1f(x)x+c2g(x)x

    3) 乘法法则:如果f,g都是实值函数,则:f(x)g(x)x=f(x)g(x)x+f(x)xg(x)

    要注意的是如果不是实值函数,则不能这么使用乘法法则。

    4) 除法法则:如果f,g都是实值函数,且g(x)0,则:f(x)/g(x)x=1g2(x)(g(x)f(x)xf(x)g(x)x)

3. 用定义法求解标量对矩阵求导

     现在我们来看看定义法如何解决标量对矩阵的求导问题。其实思路和第一节的标量对向量的求导是类似的,只是最后的结果是一个和自变量同型的矩阵。

    我们还是以一个例子来说明。y=aTXb,求解aTXbX

    其中, a是m维向量,b是n维向量,  Xm×n的矩阵。

    我们对矩阵X的任意一个位置的Xij求导,如下:aTXbXij=p=1mq=1napXpqbqXij=aiXijbjXij=aibj

    即求导结果在(i.j)位置的求导结果是a向量第i个分量和b第j个分量的乘积,将所有的位置的求导结果排列成一个m×n的矩阵,即为abT,这样最后的求导结果为:aTXbX=abT

    简单的求导的确不难,但是如果是比较复杂的标量对矩阵求导,比如y=aTexp(Xb),对任意标量求导容易,排列起来还是蛮麻烦的,也就是我们遇到了和标量对向量求导一样的问题,定义法比较适合解决简单的问题,复杂的求导需要更简便的方法。这个方法我们在下一篇来讲。

    同时,标量对矩阵求导也有和第二节对向量求导类似的基本法则,这里就不累述了。

4.用定义法求解向量对向量求导

    这里我们也同样给出向量对向量求导的定义法的具体例子。

    先来一个简单的例子: y=Ax,其中An×m的矩阵。x,y分别为m,n维向量。需要求导Axx,根据定义,结果应该是一个n×m的矩阵

    先求矩阵的第i行和向量的内积对向量的第j分量求导,用定义法求解过程如下:Aixxj=Aijxjxj=Aij

    可见矩阵 A的第i行和向量的内积对向量的第j分量求导的结果就是矩阵 A(i,j)位置的值。排列起来就是一个矩阵了,由于我们分子布局,所以排列出的结果是A,而不是 AT

5. 定义法矩阵向量求导的局限

    使用定义法虽然已经求出一些简单的向量矩阵求导的结果,但是对于复杂的求导式子,则中间运算会很复杂,同时求导出的结果排列也是很头痛的。下一篇我们讨论使使用矩阵微分和迹函数的方法来求解矩阵向量求导。    

 

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

posted @   刘建平Pinard  阅读(42023)  评论(46编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示