深度学习笔记(一)补充:深刻理解梯度下降
在《Deep learning》一书中关于方向导数如何求导的部分被简略带过了,在进行深入思考以后进行了推导如下:
重新回到问题:
给定方向函数 $f(x+\alpha u)$,其中 $x$ 是一个 $m \times 1$ 的列向量,$\alpha $ 是一个 $m \times n$ 的矩阵,$u$ 是一个 $n \times 1$ 的方向向量,求在 $\alpha=0$ 的时候关于 $\alpha$ 的方向导数.
使用链式法则,我们可以得到:
$\frac{\partial f}{\partial \alpha}=\frac{\partial (\alpha u)}{\partial \alpha}\nabla_x f(x)$
如果要计算 $ y = Ax $ 关于矩阵 $ A $ 的梯度,也就是 $ \frac{\partial y}{\partial A} $,我们需要考虑 $ y $ 中每个元素相对于矩阵 $ A $ 中每个元素的偏导数。
设 $ y $ 是一个 $ m \times 1 $ 的列向量,$ A $ 是一个 $ m \times n $ 的矩阵,$ x $ 是一个 $ n \times 1 $ 的列向量。那么,$ y $ 的每个元素 $ y_i $ 可以表示为:
$ y_i = \sum_{j=1}^{n} A_{ij}x_j $
现在,我们来计算 $ y_i $ 关于 $ A_{pq} $ 的偏导数 $ \frac{\partial y_i}{\partial A_{pq}} $。当 $ p = i $ 时,有:
$ \frac{\partial y_i}{\partial A_{pq}} = x_q $
否则, $ \frac{\partial y_i}{\partial A_{pq}} = 0 $。
因此, $ \frac{\partial y}{\partial A} $ 是一个 $ m \times n $ 的矩阵,其中第 $ i $ 行第 $ j $ 列的元素是 $ x_j $(即输入向量 $ x $ 的第 $ j $ 个元素),如果 $ i = p $ 且 $ j = q $,否则为 0。
换句话说, $ \frac{\partial y}{\partial A} $ 中的每个元素都与输入向量 $ x $ 的对应元素相对应。
不完全正确。虽然在某些情况下, $ \frac{dy}{dA} $ 可以简化为 $ x $ 的转置,但并不总是如此。
在上面的计算中,我们得到了 $ \frac{dy}{dA} $ 的表达式,其中每个元素都与输入向量 $ x $ 的对应元素相对应。这意味着 $ \frac{dy}{dA} $ 的每一列都与 $ x $ 的对应元素相同,但并不是 $ x $ 的转置。
只有当输入向量 $ x $ 是一个单位向量时, $ \frac{dy}{dA} $ 才等于 $ x $ 的转置。因为在这种情况下, $ y $ 是 $ A $ 的列向量之和, $ \frac{dy}{dA} $ 的每列只有一个非零元素,即 $ x $ 的对应元素。
因此$\frac{\partial f}{\partial \alpha}=\frac{\partial (\alpha u)}{\partial \alpha}\nabla_x f(x)=u^T\nabla_x f(x)$