我可以在输出层使用 tanh 激活函数进行二进制分类吗?

机器算法验证 机器学习 神经网络 分类
2022-04-13 04:58:42

我是机器学习领域的新手。所以这个问题可能听起来很傻。我们通常在输出层使用进行二元分类。在我的实验中,我发现如果将输出层中的替换为会提供更高的准确度和更低的二进制交叉熵损失。有人可以解释可能的原因吗?我使用标签作为sigmoidtanhsigmoidtanh01

代码如下所示。我在后端使用 Keras 和 TensorFlow。

input_shape = (200, )    
left_input = Input(input_shape)  
right_input = Input(input_shape)

model = Sequential()  
model.add(Dense(200,input_dim=200,kernel_initializer='glorot_uniform',bias_initializer='zeros'))
model.add(Activation('tanh'))
model.add(Dropout(0.1))

model.add(Dense(200,input_dim=200,kernel_initializer='glorot_uniform',bias_initializer='zeros'))
model.add(Activation('tanh'))
model.add(Dropout(0.1))

x1 = model(left_input)
x2 = model(right_input)

dotted = Dot(axes=1,normalize=True)([x1, x2])  
out = Dense(1,activation='sigmoid',kernel_initializer='glorot_uniform',bias_initializer='zeros')(dotted)

siamese = Model(inputs=[left_input, right_input], outputs=out)
siamese.compile(loss='binary_crossentropy', optimizer='Adagrad', metrics=['accuracy'])                
1个回答

该线dotted = Dot(axes=1,normalize=True)([x1, x2])计算和之间的余弦如果始终为真,则意味着在这些条件下,这解决了您如何使用获得正确概率的谜团。但请记住,您正在应用线性变换,而不是,因此您进一步要求即使在应用线性变换之后,仍然遵守边界。θx1x2.cos(θ)>00<tanh(cos(θ))<1tanhtanh(cos(θ))

至于为什么的性能优于,这可能是 NN 研究人员建议的通常原因:具有更陡峭的梯度,因此反向传播更有效。tanhsigmoidtanh