我一直在关注斯坦福大学的cs231n讲座,并尝试自己完成作业,并在github和我的博客上共享这些解决方案。但是我很难理解如何对反向传播进行建模。我的意思是我可以编写模块化的向前和向后传递代码,但令我困扰的是,如果我具有以下模型:Two Layered Neural Network
让我们假设这里的损失函数是softmax损失函数。在我的模块化softmax_loss()函数中,我正在计算相对于得分的损耗和梯度(dSoft = dL / dY)。此后,当我向后跟踪b2时,db2等于dSoft * 1或dW2等于dSoft * dX2(relu gate的输出)。这里的连锁规则是什么? dSoft为什么不等于1?因为dL / dL为1?
答案 0 :(得分:0)
softmax函数在给定输入x的情况下输出数字。 dSoft的意思是,您正在计算相对于输入x的函数softmax(x)的导数。然后要使用链规则计算相对于最后一层的W的导数,即dL / dW = dsoftmax / dx * dx / dW。请注意,x = W * x_prev + b,其中x_prev是最后一个节点的输入。因此,dx / dW只是x,而dx / db只是1,这意味着dL / dW或简单地dW是dsoftmax / dx * x_prev和dL / db或简单地db是dsoftmax / dx *1。请注意,此处dsoftmax / dx是我们之前定义的dSoft。