자동 인코더에 대한 손실 기능


22

비트 자동 인코더를 실험하고 있으며 tensorflow를 사용하여 MNIST 데이터 세트를 재구성하는 모델을 만들었습니다.

내 네트워크는 매우 간단합니다. X, e1, e2, d1, Y. 여기서 e1과 e2는 인코딩 레이어이고 d2와 Y는 디코딩 레이어입니다 (Y는 재구성 된 출력).

X는 784 개, e1은 100, e2는 50, d1은 다시 100, Y 784를 다시 갖습니다.

레이어 e1, e2, d1 및 Y의 활성화 함수로 시그 모이 드를 사용하고 있습니다. 입력은 [0,1]에 있으므로 출력이어야합니다.

글쎄, 나는 크로스 엔트로피를 손실 함수로 사용하려고 시도했지만 출력은 항상 얼룩이었고 X에서 e1까지의 가중치는 항상 0 값 행렬로 수렴한다는 것을 알았습니다.

반면에 평균 제곱 오차를 손실 함수로 사용하면 적절한 결과를 얻을 수 있으며 이제 입력을 재구성 할 수 있습니다.

왜 이렇게이다? 나는 값을 확률로 해석 할 수 있다고 생각했기 때문에 교차 엔트로피를 사용하지만 분명히 뭔가 잘못하고 있습니다.


1
첫 번째 레이어의 활성화 기능에 시그 모이 드 사용을 언급했습니다. CS231n Notes 에서 더 자세히 설명 된 것처럼 "포화"를 나타냅니다 . ReLU와 같은 다른 활성화 기능을 사용해 보셨습니까?
Jerry

다른 것을 시도해도 지금은 기억이 나지 않지만 공유해 주셔서 감사합니다!
AkiRoss

답변:


18

이것에 대한 가장 좋은 대답은 교차 엔트로피 손실 기능 이이 특정 작업에 적합하지 않다는 것입니다.

이 접근 방식을 취하면 본질적으로 실제 MNIST 데이터는 이진이며 픽셀 강도는 각 픽셀이 '켜질'확률을 나타냅니다. 그러나 우리는 이것이 사실이 아니라는 것을 알고 있습니다. 이 암시 적 가정의 부정확성으로 인해 우리는 문제를 일으킨다.

[(target)log(prediction)+(1target)log(1prediction)]

교차 엔트로피 대 mse 손실

교차 엔트로피 손실이 비대칭임을 알 수 있습니다. 왜 우리가 이것을 원할까요? 0.7을 예측하는 것보다 0.8 픽셀을 0.9로 예측하는 것이 실제로 더 나쁩니 까? 나는 그것이 더 좋을 것이라고 말할 것입니다.

우리는 아마도 더 자세히 설명하고 이것이 왜 당신이보고있는 특정 얼룩으로 이어지는지를 알아낼 수 있습니다. 얼룩이 보이는 지역에서 픽셀 강도가 평균 0.5 이상이기 때문에 추측 할 수 있습니다. 그러나 일반적으로 이는 데이터에 적합하지 않은 암시 적 모델링 가정의 경우입니다.

희망이 도움이됩니다!


3
입력이 0과 1 사이에 떠있는 경우 적합한 손실 함수는 무엇입니까?
Jemshit Iskenderov

이진 교차 엔트로피 손실
torayeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.