【发布时间】:2018-04-01 06:23:06
【问题描述】:
令 y = Relu(Wx) 其中 W 是一个二维矩阵,表示对 x 的线性变换,一个向量。同样,设 m = Zy,其中 Z 是表示 y 上的线性变换的二维矩阵。如何以编程方式计算 Loss = sum(m^2) 相对于 W 的梯度,其中幂表示结果向量的元素幂,而 sum 表示将所有元素加在一起?
我可以通过取一个假设,将其全部相乘,然后逐个元素地取导数来构造梯度,从而在数学上缓慢地解决这个问题,但我无法找到一种有效的方法来编写程序,一旦神经网络层变为 >1。
说,对于一层(m = Zy,取梯度 wrt Z)我可以说
Loss = sum(m^2)
dLoss/dZ = 2m * y
其中 * 是向量的外积,我想这有点像普通的微积分并且它有效。现在对于 2 层 + 激活(梯度 wrt W),如果我尝试像“正常”微积分一样进行操作并应用我得到的链式法则:
dLoss/dW = 2m * Z * dRelu * x
其中 dRelu 是 Relu(Wx) 的导数,除了这里我不知道 * 在这种情况下意味着什么才能使其工作。
有没有一种简单的方法可以在数学上计算这个梯度,而无需将其全部相乘并推导出梯度中的每个单独元素?我真的不熟悉矩阵微积分,所以如果有人也可以给出一些数学直觉,如果我的尝试完全错误,那将不胜感激。
【问题讨论】:
-
所以您特别希望手动完成而不是使用自动微分库?
-
我建议您按照完整的教程进行演示和作业,以便完全理解该主题。线性代数在深度学习中是强制性的。见Stanfor's tutorial and unsupervised feature learning
-
@mr_mo 如果您对学习如何进行这种矩阵演算的资源有任何想法,我将不胜感激。我学过线性代数,问题是我找不到好的资源来教我如何做矩阵微积分。
-
@KonstantinosKokos - 是的,我想了解这是如何在数学上完成的,尽管使用库会非常简单。
-
@Matt 可能是wikipedia
标签: machine-learning neural-network linear-algebra backpropagation calculus