假设我想使用多层感知器来分类3个类。当涉及到输出神经元的数量时,任何人都会立即说 - 使用3个输出神经元进行softmax激活。但是,如果我使用Sigmoid激活的2个输出神经元为类1输出[0,0],为类2输出[0,1]而对类3输出[1,0],该怎么办?基本上获得二进制编码输出,每个输出神经元输出每个位。这项技术不会减少输出神经元(以及参数数量)吗?简单NLP应用的100级单词分类将需要100个输出神经元用于softmax,其中您可以使用上述技术用7个输出神经元覆盖它。一个缺点是你不能获得所有课程的概率分数。我的问题是,这种方法是否正确?如果是这样,对于具有大量类的数据集,您是否会认为它比softmaxing更有效?
答案 0 :(得分:0)
你可以这样做,但是你必须重新考虑你的损失功能。用于训练分类模型的交叉熵损失是分类分布的可能性,假设您具有与每个类相关联的概率。损失函数需要3个输出概率,而您只有2个输出值。
但是,无论如何都有办法实现它:你可以在输出的每个元素上使用二进制交叉熵损失,但这将是关于模型的不同的概率假设。您假设您的班级有一些共享特征[0,0]
和[0,1]
共享一个值。降低的自由度可能会使你的表现稍微差一点(但是MLP的其他部分可能会收拾松懈)。
如果你真的担心最后一层的参数成本,那么你最好不要训练它。 This paper在最后一层显示固定的Hadamard矩阵与训练它一样好。