(以下部分基本介绍转载于点击打开链接)
在深度学习NN中的output层通常是一个分类输出,对于多分类问题我们可以采用k-二元分类器来实现,这里我们介绍softmax。softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标
可以取
个不同的值(而不是
2 个)。因此,对于训练集
,我们有
。(注意此处的类别下标从
1 开始,而不是 0)。例如,在 MNIST 数字识别任务中,我们有
个不同的类别。
对于给定的测试输入 ,我们想用假设函数针对每一个类别j估算出概率值
。也就是说,我们想估计
的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个
维的向量(向量元素的和为1)来表示这
个估计的概率值。
具体地说,我们的假设函数
形式如下:
注:这里我们用类似机器学习里面(θ^T)x 来代替(w^T)x+b
其中 是模型的参数。请注意
这一项对概率分布进行归一化,使得所有概率之和为
1 。
为了方便起见,我们同样使用符号 来表示全部的模型参数。在实现Softmax回归时,将
用一个
的矩阵来表示会很方便,该矩阵是将
按行罗列起来得到的,如下所示:
现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中, 是示性函数,其取值规则为:
值为真的表达式
, 值为假的表达式
。举例来说,表达式
的值为1
,
的值为 0。我们的代价函数为:
-
在Softmax回归中将
分类为类别
的概率为:
-
-
.
下面我们来看看求导的问题
softmax的函数公式如下:
其中,
表示第L层(通常是最后一层)第j个神经元的输入,
表示第L层第j个神经元的输出,
表示自然常数。注意看,
表示了第L层所有神经元的输入之和。
先给出aj对zi的偏导在后面要 用到
-
- 在J代价函数中取出对单一数据对(x(i), y(i))的
- 下面我们以L对Wj的偏导举例:
-
注:左图的Wj,bj,aj,zj,均是第L层的.Wj指的是W矩阵中的第j行
- 同理解得:
- 将loss扩充到整个数据集
-
- 则有:(ps:以下的k是指最后一层及L层的unit数,n是L-1层的unit数,m是数据集大小)
-
-
- db[L]的python写法:np.sum(A-Y, axis=1, keepdims=True)
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