softmaxとクロスエントロピーに、実は直されていなかった数値バグがあった?Google DeepMindの論文です。
タイトル: A Fix for Softmax and Cross-Entropy
URL:
❓ 何が問題なのですか?
最大ロジットを引く標準の実装はオーバーフローは防ぎますが、2つのバグが残ります。ひとつは、正解のロジットが突き抜けると正解勾配が丸めでゼロになるSoftmax Collapseです。もうひとつは、蒸留で近い値同士を引き算してしまうSoftmax Cancellationです。
❓ どう直すのですか?
対数空間で書き直します。最大ロジットを0に置き、損失をsoftplus(-m)で計算し、正解勾配は非正解勾配の総和の符号反転として定義するので、勾配の総和は必ずゼロになります。蒸留側はexpm1とlog1pで引き算を避けます。JAXの短い実装で置き換えられます。
❓ 効果はあるのですか?
a²+b² mod 97のgrokkingで、標準のテスト精度は崖のスパイクで61%から23%に落ちましたが、修正版は85%に到達しました。ソフトターゲット蒸留でも、標準は精度が崩れる条件で、修正版は全精度でKL=0を保ちます。
❓ 何がわかったのですか?
Slingshotスパイクやgrokkingの失敗に数値的な原因があること、Adamのεとweight decayからマージンの上限が約log(1/ε)で決まることが示されました。ただし実験は小規模な設定で、大規模学習での効果は未検証です。
#
DeepLearning# #
機械学習#