将 Logistic 回归损失函数转换为 Softmax

我目前有一个程序,该程序采用特征向量和分类,并将其应用于已知的权重向量,以使用 Logistic 回归生成损失梯度。这是该代码:

double[] grad = new double[featureSize];

        //dot product w*x
        double dot = 0;
        for (int j = 0; j < featureSize; j++) {
            dot += weights[j] * features[j];
        }

        //-yi exp(-yi w·xi) / (1+ exp(-yi w·xi))
        double gradMultiplier = (-type) * Math.exp((-type) * dot) / (1 + (Math.exp((-type) * dot)));

        //-yi xi exp(-yi w·xi) / (1+ exp(-yi w·xi))
        for (int j = 0; j < featureSize; j++) {
            grad[j] = features[j] * gradMultiplier;
        }

        return grad;

我想做的是使用 Softmax 回归实现类似的操作,但是我在网上找到的 Softmax 的所有信息与我对 Logit 损失函数所掌握的词汇并不完全相同,因此我一直感到困惑。如何使用 Softmax 实现与上述功能相似的功能?

基于 Softmax 的维基百科页面,我的印象是我可能需要多个权重向量,每个可能的分类都需要一个。我错了吗?

回答(1)

5 years ago

Softmax 回归是 Logistic 回归的概括。在 Logistic 回归中,标签是二进制的,而在 Softmax 回归中,标签可以采用两个以上的值。 Logistic 回归是指二项式 Logistic 回归,Softmax 回归是指多项 Logistic 回归。

这里上有一个很棒的页面。在您的代码中,您似乎试图实现梯度下降以计算weights最小化成本函数。提供的链接涵盖了该主题。

基于 Softmax 的维基百科页面,我的印象是我可能需要多个权重向量,每个可能的分类都需要一个。我错了吗?

你是对的。如果您具有 n 个要素和 K 个类,那么权重就是 n 个元素的 K 个向量,如上面的链接所示。

让我知道是否有帮助。