업데이트 (18/04/18) : 이전 답변이 여전히 내 모델에 유용하다는 것이 입증되었습니다. 트릭은 분할 함수와 분포를 개별적으로 모델링하여 softmax의 성능을 활용하는 것입니다.
벡터 를 포함하는 관측 벡터 를 고려하십시오 . (샘플 i에 레이블 m이 포함되어 있으면 1, 그렇지 않으면 0). 따라서 샘플마다 매트릭스를 모델링하는 것이 목표입니다. 따라서 모델은 합니다. 확장 고려 두 개의 특성을 달성하기 위해 :ymyim=δimF(yi,xi)=−logP(yi|xi)yim=Z⋅P(ym)
- 분포 함수 :∑mP(ym)=1
- 분할 기능 : 는 레이블 수를 추정합니다.Z
그런 다음 두 가지를 별도로 모델링해야합니다. 분포 함수는 softmax 레이어 로 가장 잘 모델링 되고, 파티션 함수는 선형 단위로 모델링 할 수 있습니다 (실제로 로 클리핑했습니다 . 포아송 단위와 같은보다 정교한 모델링이 더 잘 작동 할 것입니다). 그런 다음 분산 손실 (분산시 KL 및 파티션의 MSE)을 적용하거나 제품에서 다음과 같은 손실을 시도 할 수 있습니다.max(0.01,output)
실제로, 옵티마이 저의 선택은 또한 큰 차이를 만듭니다. 인수 분해 접근법에 대한 나의 경험은 Adadelta에서 가장 잘 작동 한다는 것입니다 (Adagrad는 저에게 효과가 없으며 RMSprop를 시도하지 않았지만 SGD의 성능은 매개 변수에 따라 달라질 수 있습니다).
sigmoid에 대한 측면 의견 : 나는 sigmoid + crossentropy를 확실히 시도했지만 작동하지 않았습니다. 모델은 만을 예측하는 경향이 있었고 분포 함수의 변동을 포착하지 못했습니다. (일명, 파티션을 모델링하는 데 매우 유용하며 그 뒤에 수학 이유가있을 수 있습니다)Z
업데이트 : (임의의 생각) Dirichlet 프로세스를 사용하면 레이블 수에 미리 일부를 통합 할 수 있습니까?
업데이트 : 실험에 의해 수정 된 KL- 분화는 여전히 다중 레이블 출력이 아닌 다중 클래스 출력을 제공하는 경향이 있습니다.
(오래된 답변)
S 자형 교차 엔트로피에 대한 나의 경험은 그리 즐겁지 않았습니다. 현재 수정 된 KL-divergence를 사용하고 있습니다. 그것은 형태를 취합니다
Loss(P,Q)=∑x|P(x)−Q(x)|⋅∣∣∣logP(x)Q(x)∣∣∣=∑x∣∣∣(P(x)−Q(x))⋅logP(x)Q(x)∣∣∣
여기서 는 목표 의사 분포이고 는 예측 된 의사 분포입니다 (그러나 함수는 실제로 대칭이므로 실제로는 중요하지 않습니다)
P(x)Q(x)
그것들은 정규화되지 않기 때문에 의사 분포라고합니다. 따라서 특정 샘플에 대해 2 개의 레이블이있는 경우 를 가질 수 있습니다.∑xP(x)=2
케 라스 추진력
def abs_KL_div(y_true, y_pred):
y_true = K.clip(y_true, K.epsilon(), None)
y_pred = K.clip(y_pred, K.epsilon(), None)
return K.sum( K.abs( (y_true- y_pred) * (K.log(y_true / y_pred))), axis=-1)