Estoy experimentando con la clasificación de documentos en una (y sólo una) de las 20 clases (20_newsgroups dataset) usando Keras.
Estoy utilizando características estándar TF-IDF y .2 división de validación para este ajuste.
Es una tarea de clasificación de 20 vías, así que pensé que era mejor ir con un softmax en la salida y un 'categorical_crossentropy'
función de pérdida, lo que me da 85% de precisión de validación :
inputs = Input(shape=(19860,))
x = Dense(64,activation='relu')(inputs)
x = Dropout(0.5)(x)
x = Dense(64,activation='sigmoid')(x)
x = Dropout(0.5)(x)
preds = Dense(20,activation='softmax')(x)
model = Model(inputs=inputs,outputs=preds)
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['acc'])
model.fit(X_train,Y_train, validation_data=(X_val, Y_val),
epochs=10, batch_size=32)
Resultados (tras 10 épocas) pérdida: 0.4056 - acc: 0.8792 - val_loss: 0.4842 - val_acc: 0.8542
La cosa es que mejores resultados si entreno el mismo modelo utilizando 20 unidades sigmoides individuales en la capa de salida y un 'binary_crossentropy'
¡función de pérdida! Me da la friolera de Precisión de validación del 99 :
inputs = Input(shape=(19860,))
x = Dense(64,activation='relu')(inputs)
x = Dropout(0.5)(x)
x = Dense(64,activation='sigmoid')(x)
x = Dropout(0.5)(x)
preds = Dense(20,activation='sigmoid')(x)
model = Model(inputs=inputs,outputs=preds)
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['acc'])
model.fit(X_train,Y_train, validation_data=(X_val, Y_val),
epochs=10, batch_size=32)
Resultados (tras 10 épocas) pérdida: 0.0510 - acc: 0.9819 - val_loss: 0.0443 - val_acc: 0.9851
Si lo he entendido bien, la configuración sigmoidea múltiple presupone la independencia de las etiquetas, lo que evidentemente no es el caso, ya que sólo puede haber una etiqueta para cada documento.
Entonces, ¿cómo puedo obtener mejores resultados utilizando unidades de salida sigmoidales individuales e independientes en lugar de una única unidad de salida softmax?
¿Podría alguien darme alguna intuición sobre lo que puede estar pasando aquí?