目前大部分多分类任务对最后一层的输出做softmax,然后使用交叉熵作为损失函数,再对loss求导反向传播来更新w,经过多轮训练得到训练好的w,这就是模型。

我相信许多刚入门的machine learninger只是知道该这么用,但是不明白为什么这样就可以更新w了,下面推导最后一层的导数

最后一层的第i个输出是 

softmax-交叉熵损失函数的求导计算推导 

其对应的softmax处理是

softmax-交叉熵损失函数的求导计算推导

输入公式太麻烦了  还是手写的吧

softmax-交叉熵损失函数的求导计算推导

 这里的aj 和 ai 的分母是一样的 ,只是我多写出来一个zj , 这样方便理解,后面会用到。

softmax之后是求交叉熵,假设ai对应的真实值(也就是输入的label)是yi :

softmax-交叉熵损失函数的求导计算推导

先贴一下后面用到的求导公式:

softmax-交叉熵损失函数的求导计算推导

  交叉熵E对zi求导,根据求导的链式法则:

 softmax-交叉熵损失函数的求导计算推导

 softmax-交叉熵损失函数的求导计算推导

softmax-交叉熵损失函数的求导计算推导

 softmax-交叉熵损失函数的求导计算推导

得到了E对zi的导数,结果非常简单,就是预测值softmax后减去真实值。

继续用链式求导,可以求出E对w的导数

softmax-交叉熵损失函数的求导计算推导

得到softmax-交叉熵损失函数的求导计算推导

SGD的更新w的方式为:

softmax-交叉熵损失函数的求导计算推导

这样就更新了w。

 

如有错误,欢迎指正

相关文章: