在深度学习中Softmax交叉熵损失函数的公式求导

时间:2024-03-23 11:20:53

(以下部分基本介绍转载于点击打开链接)

在深度学习NN中的output层通常是一个分类输出,对于多分类问题我们可以采用k-二元分类器来实现,这里我们介绍softmax。softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标 在深度学习中Softmax交叉熵损失函数的公式求导 可以取 在深度学习中Softmax交叉熵损失函数的公式求导 个不同的值(而不是 2 个)。因此,对于训练集 在深度学习中Softmax交叉熵损失函数的公式求导,我们有 在深度学习中Softmax交叉熵损失函数的公式求导。(注意此处的类别下标从 1 开始,而不是 0)。例如,在 MNIST 数字识别任务中,我们有 在深度学习中Softmax交叉熵损失函数的公式求导 个不同的类别。


对于给定的测试输入 在深度学习中Softmax交叉熵损失函数的公式求导,我们想用假设函数针对每一个类别j估算出概率值 在深度学习中Softmax交叉熵损失函数的公式求导。也就是说,我们想估计 在深度学习中Softmax交叉熵损失函数的公式求导 的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个 在深度学习中Softmax交叉熵损失函数的公式求导 维的向量(向量元素的和为1)来表示这 在深度学习中Softmax交叉熵损失函数的公式求导 个估计的概率值。 具体地说,我们的假设函数 在深度学习中Softmax交叉熵损失函数的公式求导 形式如下:

在深度学习中Softmax交叉熵损失函数的公式求导

注:这里我们用类似机器学习里面(θ^T)x 来代替(w^T)x+b

其中 在深度学习中Softmax交叉熵损失函数的公式求导 是模型的参数。请注意 在深度学习中Softmax交叉熵损失函数的公式求导这一项对概率分布进行归一化,使得所有概率之和为 1 。


为了方便起见,我们同样使用符号 在深度学习中Softmax交叉熵损失函数的公式求导 来表示全部的模型参数。在实现Softmax回归时,将 在深度学习中Softmax交叉熵损失函数的公式求导 用一个 在深度学习中Softmax交叉熵损失函数的公式求导 的矩阵来表示会很方便,该矩阵是将 在深度学习中Softmax交叉熵损失函数的公式求导 按行罗列起来得到的,如下所示:

在深度学习中Softmax交叉熵损失函数的公式求导

现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中,在深度学习中Softmax交叉熵损失函数的公式求导 是示性函数,其取值规则为:

 值为真的表达式 

, 在深度学习中Softmax交叉熵损失函数的公式求导 值为假的表达式 在深度学习中Softmax交叉熵损失函数的公式求导。举例来说,表达式 在深度学习中Softmax交叉熵损失函数的公式求导 的值为1 ,在深度学习中Softmax交叉熵损失函数的公式求导的值为 0。我们的代价函数为:

在深度学习中Softmax交叉熵损失函数的公式求导在Softmax回归中将 在深度学习中Softmax交叉熵损失函数的公式求导 分类为类别 在深度学习中Softmax交叉熵损失函数的公式求导的概率为:
在深度学习中Softmax交叉熵损失函数的公式求导.

下面我们来看看求导的问题

 softmax的函数公式如下:

在深度学习中Softmax交叉熵损失函数的公式求导


        中,在深度学习中Softmax交叉熵损失函数的公式求导表示第L层(通常是最后一层)第j个神经元的输入,在深度学习中Softmax交叉熵损失函数的公式求导表示第L层第j个神经元的输出,在深度学习中Softmax交叉熵损失函数的公式求导表示自然常数。注意看,在深度学习中Softmax交叉熵损失函数的公式求导表示了第L层所有神经元的输入之和。

先给出aj对zi的偏导在后面要 用到


在深度学习中Softmax交叉熵损失函数的公式求导
在J代价函数中取出对单一数据对(x(i), y(i))的
在深度学习中Softmax交叉熵损失函数的公式求导
下面我们以L对Wj的偏导举例:
在深度学习中Softmax交叉熵损失函数的公式求导注:左图的Wj,bj,aj,zj,均是第L层的.Wj指的是W矩阵中的第j行
同理解得:
在深度学习中Softmax交叉熵损失函数的公式求导
将loss扩充到整个数据集在深度学习中Softmax交叉熵损失函数的公式求导
在深度学习中Softmax交叉熵损失函数的公式求导
则有:(ps:以下的k是指最后一层及L层的unit数,n是L-1层的unit数,m是数据集大小)
在深度学习中Softmax交叉熵损失函数的公式求导
在深度学习中Softmax交叉熵损失函数的公式求导
db[L]的python写法:np.sum(A-Y, axis=1, keepdims=True)

最后顺便附带在python中J的实现

J = np.sum(Y * np.log(A + 1e-8)) * (-1 / m)

参考网址:

softmax回归:

http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

softmax的log似然代价函数(公式求导)

http://m.blog.csdn.net/u014313009/article/details/51045303