微积分|机器学习算法原理——矩阵微积分,构建你的“黑客帝国”( 二 )



也可以对一个矩阵进行转置 , 第一列会变成第一行 , 反之亦然:

一个向量或矩阵的维度是一个元组( 行数 列数) 。
让我们考虑下面的情况 。

点积
点积也是为向量和矩阵定义的 。 但顺序很重要 , 左边的向量/矩阵的列数必须与右边的向量/矩阵的行数一致 。

结果的维度是(左边输入的行数 , 右边输入的列数)

如果你有兴趣 , 下面更详细的点积是如何进行的 。

为了得到输出的一个元素 , 我们将左边的一行和右边的一列向量/矩阵相乘并求和 。
点积的重要性在于 , 它可以在许多不同的情况下使用 。 在力学中 , 它可以用来表示一个物体的旋转和拉伸 。 它也可以用来改变坐标系 。
分析基础知识和的导数
当我们想求一个和的导数时 , 相当于求每个加数的导数 。


乘积法则
如果我们想求两个函数的乘积的导数 , 这两个函数都取决于我们想微分的变量 , 我们可以使用以下规则 。

让我们考虑下面的例子:


那么\uD835\uDC66相对于\uD835\uDC65的导数是:

链式法则
我们要对一个函数\uD835\uDC66进行微分 。 这个函数取决于\uD835\uDC62 , \uD835\uDC62取决于\uD835\uDC65 。 然后 , 我们可以应用链式法则:

让我们在这里做一个简单的练习:


矩阵微积分了解这么多基础知识后 , 我希望你已经准备好进行矩阵微积分了!
我们可以用两种方式来写矩阵微积分 , 即所谓的 \"分子布局(numerator layout)\"和 \"分母布局(denominator layout)\" 。 在这篇文章中 , 我将使用分母布局 。
标量与矢量的导数
一个标量函数相对于一个变量向量的导数是一个行向量 。 这个行向量有一列代表我们想要微分的每个变量 。

让我们举个例子:


然后我们可以应用 \"和的导数 \"规则:

由于一个变量相对于另一个变量的导数是0 , 我们可以得到:

标量导数向量
如果我们有一个函数\uD835\uDC53 , 它输出一个向量 , 并想求它相对于一个变量的导数 , 我们得到一个列向量作为结果 。

让我们考虑以下我们想要求的向量值函数 。

逐个向量求导
当对一个以向量为值的函数进行导数时 , 我们得到一个矩阵 。 我使用一个有2个输出值和3个输入变量的函数作为例子 。

你可以把它看成是 \"标量乘矢量 \"和 \"矢量乘标量导数 \"的结合 。 我们沿着行改变函数输出的元素 , 沿着列改变变量的元素 。

得到的矩阵的维度为:(输出的大小 , 输入的大小)
现在我们通过一个例子说明:

总结

矢量链法则让我们考虑以下情况 。 向量\uD835\uDC53是向量\uD835\uDC54的一个函数 。 向量\uD835\uDC54本身是向量\uD835\uDC65的函数 。 因此 , \uD835\uDC53(\uD835\uDC54(\uD835\uDC65))相对于\uD835\uDC65的导数可以通过以下方式计算 。

我们可以看到 , 向量链法则与标量链法则看起来几乎一样 。 点积仍然在公式中 , 我们必须构造一个一个向量的导数矩阵 。
这里有一个小例子 。

我们计算偏导数 。

现在我们展开点积 。

最后进行简化 , 得到结果 。

常数的点积我们可以把常数矩阵和向量看作是标量常数 。 允许对它们进行因式分解 。 但是请记住 , 对于两个非标量之间的点积来说 , 顺序很重要 。


现在我们可以把矩阵\uD835\uDC4B分解出来 , 如果它是一个常数并且不依赖于\uD835\uDC64的话 。

我们用向量导数矩阵来构造向量: