オートエンコーダーの損失関数


19

私はビットオートエンコーダを実験しており、テンソルフローを使用して、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への重みは常にゼロ値の行列に収束することに気付きました。

一方、損失関数として二乗平均誤差を使用すると、適切な結果が得られ、入力を再構築できるようになりました。

どうしてこんなことに?値を確率として解釈することができ、したがってクロスエントロピーを使用できると思いましたが、明らかに何か間違っています。


1
最初のレイヤーのアクティベーション関数にシグモイドを使用することについて言及しました。CS231n Notesで詳細に説明されているように、それらは「飽和」を示します。ReLUのような別のアクティベーション機能を試しましたか?
ジェリー

他のものを試した場合、今は思い出せませんが、共有してくれてありがとう!
AkiRoss

回答:


17

これに対する最善の答えは、クロスエントロピー損失関数がこの特定のタスクに適していないことだと思います。

このアプローチでは、真のMNISTデータは本質的にバイナリであり、ピクセル強度は各ピクセルが「オン」である確率を表します。しかし、実際にはそうではないことを知っています。この暗黙の仮定の不正確さが問題を引き起こしています。

[目標ログ予測+1目標ログ1予測]

クロスエントロピー対MSE損失

クロスエントロピー損失が非対称であることがわかります。なぜこれが必要なのでしょうか?この0.8ピクセルの0.9を予測するのは、0.7を予測するよりも本当に悪いですか?どちらかといえば、多分良いでしょう。

おそらくより詳細に見て、これがなぜあなたが見ている特定の塊につながるのかを理解することができます。ブロブが表示されている領域のピクセル強度が平均で0.5を超えているためだと推測するのは危険です。しかし、一般的にこれは、データに対して不適切であると仮定した暗黙的なモデリングの仮定の場合です。

お役に立てば幸いです!


3
入力が0から1の間で変動する場合、どの損失関数が適していますか?
Jemshit Iskenderov

バイナリクロスエントロピー損失
torayeff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.