(以下部分基本介绍转载于点击打开链接)
在深度学习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