パロアルトインサイト/ PALO ALTO INSIGHT, LLC.

ブログBLOG

パロアルトインサイト/PALO ALTO INSIGHT, LLC. > ブログ > ディープラーニングがうまくいかない時にデバッグする方法

ディープラーニングがうまくいかない時にデバッグする方法

2020/06/05 ブログ 
by 長谷川貴久 

ディープラーニング手法を用いたニューラルネットワークをデバッグすることは、ネットワーク自体の不透明性ゆえかなり難易度が高い作業です。TensorFlowのチュートリアルなどからMNISTを学習させることは、Pythonのことを少しでもかじったことがあるプログラマならできますが、自身の用途に合うモデルを作りたいときに壁にぶち当たってからが本当の試練です。私はパロアルトインサイトのプロジェクトをとおして、また、深層学習による強化学習を教える立場として、いくつもこのような場面に直面しています。

ここでは2種類のバグに分けて考えます。1つ目は、そもそもネットワークのトレーニングが始まらない、走らせることができない場合です。この場合は、プログラムのどこかにバグがあることになります。例えばマトリクス演算をする時にマトリクスの形が正しいかを確認する小テストを作ったりします。なるべく小さいインプットで全ての部分が順調に走るかをテストします。

2つ目のバグは思うように精度が上がらない、学習してくれない、またはうまくGeneralizeしないというバグです。これについては、そもそもどういう挙動が正しいのか定義しづらいため、デバッグするのが非常に困難です。

ロス関数の動向を見ると学習がうまくいっているかの動向を見ることができます。ロスとは、ニューラルネットワークがどの程度学習しているかを示してくれる一つの指標なので、最初は高く、なだらかに低くなっていくことが望ましいです。これが例えば極端にブレていたり、なかなか下がってくれない場合などは、例えばラーニングレートを調整してよりなだらかにしてみるということができます。TensorBoardなどを見るとロス関数をエポック毎に可視化してくれます。

ニューラルネットワークのアウトプットを可視化するのも重要なスキルです。精度やその他の指標に捉われるあまり、実際のアウトプットがなんだったのかを見ることが疎かになってしまうケースが多いので、これらを確認することで重要な手掛かりにつながることがあります(Goodfellow et al. 2016)。

最後にオーバーフィットはニューラルネットワークにつきものですので、Dropoutをきちんと活用することを奨励しています。Goodfellowの「Deep Learning」本でもより高度なデバッグ方法を11章で紹介しているので、より詳しく知りたい方はそちらも参考にしてみてください。

参考文献

Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. Deep Learning. Adaptive Computation and Machine Learning. Cambridge, Massachusetts: The MIT Press, 2016.

BACK TO BLOG

NEWSLETTERニュースレター

ブログ記事を最後まで読んでいただき、
ありがとうございます。
弊社ニュースレターにご登録いただくと、
このブログの最新記事や、
シリコンバレーの最新AI事情、
お得なキャンペーン情報について
お知らせいたします。
また、アップルやアマゾンなどで
経営陣が実施しているデータ会議の
回し方が分かる早見表を
無料でダウンロードできる
リンクもお送りします。

PAGE TOP