美文网首页程序员
Given y=Ax, dy/dx=A or A.T?

Given y=Ax, dy/dx=A or A.T?

作者: Alclol | 来源:发表于2019-01-21 05:06 被阅读0次

    上周过一个code up RNN from scratch的tutorial卡在了代码里一个小细节上。懵逼了几天终于找到了我迷茫的根源以及自己满意的答案,就,大概记一下。

    本质上就是一个直白的matrix calculus基础题:如果我有y=A\vec{x}, A 是 m by n的matrix,x是 n by 1的vector,显然y是 m by 1的vector。那么问题来了,对y求关于x的梯度是谁?对y求关于A的梯度呢?

    Giveny=A\vec{x}, 有多少人会跟我一样猜\frac{dy}{d\vec{x}} =A\frac{dy}{dA}=\vec{x} ? 这个猜的也不是不靠谱。去翻Andrew Ng的CS231n note,明明白白:

    而我看的代码里的世界观似乎是认为dy/dx = W.T, dy/dW = x.T. 这里为什么有个转置呢?

    讲道理,两边摆一下维度的话这个事情是很好接受的,实战写代码的时候不转置一报错也就查一会儿bug的事情,问题不大。不过数学上没找到依据就…不很安心。

    有兴趣的同学复习一下multivariable calculus里gradiant 和 partial derivative的定义和推导,我在这里就直接放好记的小结论吧。

    矩阵求导有两种layout,numerator layout和denominator layout, 我们在分析里学到的普遍都是numerator layout,它也被叫做Jacobian formulation,那么你自然就猜到了,当我们讲vector对vector求gradiant拿到一个Jacobian时,用得其实是numerator layout。本质区别可以用一个简单的例子来记:对scalar y求关于column vector \vec{x} 的偏导:

    你想要结果跟vector \vec{x} 维度一致也是column vector ->denominator layout;

    你想要结果跟vector \vec{x} 维度不一致得到row vector ->nominator layout。

    这个选择很随意,计算上consistent就够了 (Wiki表示用得不consistent的情况也很常见,搞数学的又不用调bug)。

    注意上图Andrew Ng的note里对向量的偏导是用Jacobian matrix表示的, 贴个Jacobian的Wiki图参照:

    比我细心得多的同学们当然一眼就注意到了这个结果col=n, 而求偏导的对象是row=n的column vector x,结果与其是转置的关系。果然是numerator layout. 

    numerator layout数学上套公式很漂亮, (Ax)'=A. 不过如果你要用这个layout,要注意当对scalar y求关于column vector x的gradiant时,结果要转置成一个row vector。比方说gradient descent第一步求loss对soft-max函数的output(一个column vector) \vec{p} 求gradiant,把\vec{p} copy过来对每个分量分别求偏导完了记得补个转置。

    而machine learning代码大多用的是denominator layout,就需要在套公式的时候补个转置。

    来回答题目的问题。A或者A.T都是对的,数值计算上取决与你在用Chain rule的时候,别的gradient是按照numerator layout还是denominator layout来present。numerator->A, denominator->A.T.

    最后tldr一下ML中会用得到的矩阵求导公式:

    \frac{d(A\vec{x})}{d\vec{x}}=A^T

    \frac{d(\vec{x}A)}{d\vec{x}}=A

    \frac{d(A^T\vec{x}B)}{d\vec{x}}=AB^T

    \frac{d(A^T\vec{x}^TB)}{d\vec{x}}=BA^T

    \frac{d(\vec{x}^T\vec{x})}{d\vec{x}}=\vec{x}

    以后遇到什么再来补充。

    The Matrix Cookbook

    相关文章

      网友评论

        本文标题:Given y=Ax, dy/dx=A or A.T?

        本文链接:https://www.haomeiwen.com/subject/chnxjqtx.html