Deep learning 两层网络上的反向传播

Deep learning 两层网络上的反向传播,deep-learning,backpropagation,Deep Learning,Backpropagation,我一直在关注斯坦福大学的cs231n讲座,并试图自己完成作业,并在github和我的博客上分享这些解决方案。但我很难理解如何建模反向传播。我的意思是,我可以编写模块化向前和向后传球代码,但困扰我的是,如果我有以下模型: 假设我们的损失函数是softmax损失函数。在我的modular softmax_loss()函数中,我计算的是关于分数的损失和梯度(dSoft=dL/dY)。之后,当我向后看b2时,db2将等于dSoft*1或dW2将等于dSoft*dX2(relu门的输出)。这里的链式规则是

我一直在关注斯坦福大学的cs231n讲座,并试图自己完成作业,并在github和我的博客上分享这些解决方案。但我很难理解如何建模反向传播。我的意思是,我可以编写模块化向前和向后传球代码,但困扰我的是,如果我有以下模型:


假设我们的损失函数是softmax损失函数。在我的modular softmax_loss()函数中,我计算的是关于分数的损失和梯度(dSoft=dL/dY)。之后,当我向后看b2时,db2将等于dSoft*1或dW2将等于dSoft*dX2(relu门的输出)。这里的链式规则是什么?为什么dSoft不等于1?因为dL/dL是1

softmax功能输出一个给定输入x的数字。 dSoft的意思是计算函数softmax(x)对输入x的导数。然后使用链式规则计算最后一层W的导数,即dL/dW=dsoftmax/dx*dx/dW。请注意,x=W*x_prev+b,其中x_prev是最后一个节点的输入。因此,dx/dW正好是x,dx/db正好是1,这意味着dL/dW或simply dW是dsoftmax/dx*x_prev,dL/db或simply db是dsoftmax/dx*1。注意,这里dsoftmax/dx是我们前面定义的dSoft