数値計算において、絶対値が非常に小さくゼロに極めて近い値をコンピュータで表現しようとした際、表現可能な最小の限界を下回ってしまい、正確に値を表せなくなる現象。AIや深層学習においては、極小の確率値や勾配の計算時に発生しやすく、学習の停滞や予期せぬエラーを引き起こす原因となる。
アンダーフローとは
アンダーフローとは、コンピュータの数値表現において、値の絶対値が小さすぎて使用しているデータ型の最小制限値(ゼロを除く)を下回り、強制的に「0」として扱われてしまう現象。
詳しく解説
コンピュータは有限のビット数(例えば32ビットや16ビットの浮動小数点数)で数値を表現するため、表現できる最小値には限界がある。機械学習、特に深層学習においては、誤差逆伝播法による勾配計算や、多数の確率値の掛け算を繰り返すプロセスで、値が極端に小さくなることが頻繁にある。これらが最小表現範囲を下回るとアンダーフローが発生し、本来は微小ながら存在していた情報や信号が完全にゼロになってしまう。その結果、ニューラルネットワークの重みが更新されなくなる勾配消失問題が引き起こされ、AIモデルの学習が全く進まなくなる問題が生じる。
具体例・使われ方
例えば、確率モデルにおいて多数の条件付き確率を何百回も掛け合わせる計算を行うと、結果は極めて小さな値となりアンダーフローを起こす。この対策として、積を和に変換する対数尤度を計算に用いる手法がある。また、ディープラーニングの訓練中に、勾配が小さくなりすぎて16ビット浮動小数点数の限界を超えてアンダーフローする場合、値を一時的にスケールアップして計算する混合精度演算などの技術が用いられる。
似た用語との違い
数値が上限を超えて無限大などになるオーバーフローとは逆の現象である。また、勾配消失問題はアンダーフローそのものではなく、アンダーフローなどの要因によって勾配が極端に小さくなり学習が進まなくなる状態を指すため、原因と結果の関係にある。さらに、値がゼロになることではなく単に精度が下がる丸め誤差とも異なる。
注意点
アンダーフローが発生しても、プログラムはエラーとして停止せず「0」として処理を続行することが多いため、バグとして検知しにくいという落とし穴がある。ディープラーニングで意図せず精度が向上しない場合は、勾配や中間変数のアンダーフローを疑い、混合精度演算の導入や適切な活性化関数の選択を行う必要がある。