AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

HOME  >  AIが学習しすぎる?「過学習」問題とそれを抑制する方法

公開日:2018.10.16 [最終更新日]2018.11.08

AIが学習しすぎる?「過学習」問題とそれを抑制する方法

カテゴリー: AI(人工知能)の作り方

こんにちは、AI研究所パートナー研究員の光本(みつもと)です。

ニューラルネットワークで「教師あり学習」をさせていて、度々発生してしまうものに「過学習(過適合)」があります。

「過学習(過適合)」とは、学習(訓練)データにあまりに適合しすぎて、学習(訓練)データでは正解率が高いのに学習(訓練)データとは異なるデータ(例えば、評価データ)では正解率が低くなってしまう、つまり、学習(訓練)データだけに最適化されてしまって汎用性がない状態に陥ることです。

予め用意した学習(訓練)データでの正解率がいくら高くても、実際の運用では役に立ちませんので、これでは意味がありません。
つまり、未知の「まだ見ぬ」データを処理した時にこそ、それまでに学習してきた実力を発揮して正しい推定をして欲しいということですね。

今回は、実際にNeural Network Consoleを使って過学習の抑制にチャレンジしてみたいと思います。

過学習を抑制する手法

過学習を抑制するにはどうすれば良いのか?少し調べて整理してみました。

まず、昔からあるニューラルネットワークの学習テクニックとして、そもそも有害になる学習をしないうちに止める(早期終了、早期打ち切り)というものがありました。

学習(訓練)データを処理しながら、随時多くのパラメーターを更新していくわけですが、ある時点から学習(訓練)データだけに適合するようになっていくので、そのタイミングで学習を終了してしまうということですね。

単純で、理屈としてはよく分かります。ただ、その時点で目標とする精度に達していれば問題ないですが、そうでない場合には、学習を止めるだけでは、それ以上に精度を上げていけませんので、その取り組み自体を諦めることにもなりますね。

それでは、他にどのような抑制方法があるか?取り組み方法として主に次の3つが挙げられていました。

① 学習データの数を増やす。
② モデルを簡単なものに変更する、又は、ドロップアウトする。
③ 正則化する。

①学習データの数を増やす

まさに正攻法ですね。学習データの数が多ければ多いほど、学習(訓練)データのバリエーションが増えていき、未知の「まだ見ぬ」データに近づいていきますので、最も良い解決策と言えるでしょう。

そのため、AI開発の取り組みを始めようとする場合には、まずは、今の時点でインプットデータがどのくらい収集、準備できているのかをまず確認することになります。

そして、学習データをもっと収集できないか、どうしても出来ない場合には、手作りでの加工や機械的にクローンデータを水増しできないか(単純コピーではあまり意味がない)などに取り組むことになると思います。

②モデルを簡単なものに変更する、又は、ドロップアウトする

モデルを簡単なものに変えてしまうというのは、リスクもあってなかなか難しいですね。

というのは、モデル(ネットワークの自由度:主に重み付けの数になると思われます)は、解決したい問題の複雑さに合わせて作られているはずなので、問題の複雑さに対して過大なネットワーク自由度を持たせて作っていると自分で認識できている場合を除いては簡単にできる解決策ではないと思います。

そうした中で、ネットワーク自由度を強制的に小さくして過学習を避ける方法としてドロップアウトがあります。
多層ネットワークの各層のユニットを確率的に選別して、選別したもの以外を無効化することで「自由度の小さい仮のネットワーク」にできます。その上で学習させることでモデルを簡素化したような効果が得られるというわけです。

③正則化する

正則化というのも、ある意味、複雑なモデルを単純なモデルへ変化させていく数学的な手法と言えると思います。

数式を書いて説明していくと収拾つかなくなりますので、どういうものかイメージだけ説明すると、パラメーターの値が大きくなりすぎるのを防いで、小さい値に近づけていくことで、変数の影響を抑える数学的な手法ということになりますか。

つまり、不要なパラメータの影響を小さくすることで複雑なモデルを単純なモデルに変えていきながら、過学習を防ぐということかと思います。

今回は、 Neural Network Consoleを使って、最も簡単に過学習を抑制できそうなこの正則化による抑制にチャレンジしてみたいと思います。

過学習の状態を学習曲線で確認する

まず、Neural Network Consoleで過学習になってしまった状態を確認しておきたいと思います。
Neural Network Consoleの学習結果(下の画面)を見てください。

Traiingエラー(赤の実線)がきれいに収束しているのに、Validationエラー(赤の点線)が途中から逆に増加していってます。 ただし、赤の点線の増加傾向はそれほど大きくはないので、過学習の傾向がある状態といった感じでしょうか。

学習結果 - 過学習の傾向がある状態

評価した結果のAccuracyも「99.31%」で、それなりの精度にはなっています。

評価した状態

正則化の設定をしてみる

画面上部のCONFIGメニューの中の「Optiizer(オプティマイザー)」を開きます。
Weight Decay(重み減衰)の値を0以外にすると正則化が働くようになりますが、その値を何にするかは決まりがなく、値と効果の関係も不明なので、経験的感覚で決めるしかありません。
今回は、経験的に「0.0001」にしてみました。

正則化の設定をしてみる

学習曲線はどう変化したか?

正則化を働かせた結果、学習曲線がどう変化したか?
Neural Network Consoleの学習結果(下の画面)を見てください。

Traiingエラー(赤の実線)はきれいに収束していますが、Validationエラー(赤の点線)の方は、増加の傾向はなくなり過学習の傾向が抑制された状態には変わっていますが、まだ収束しきれていないまま終わってしまいました。

学習結果 - 学習曲線はどう変化したか

評価した結果のAccuracyは「99.45%」となり、精度は上がっています。

学習結果 - 精度

というわけで、Max Epoch数をもっと増やして収束するまで学習を続けさせてみるか、Weight Decay(重み減衰)の値を変えてみるか、もう少し試行錯誤してみる必要がありそうです。
ただ、普段使いのCPUパソコンでは学習時間がかかりすぎて今日はもう限界なので、今回はここまでにしておきたいと思います。

タグ:


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加
AI(人工知能)セミナー開催中
AI(人工知能)入門セミナー AI(人工知能)入門セミナー IoT入門セミナー

AI入門ブログの中の人

AI研究所 研究スタッフ
通称:マサミ
アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。

Facebookページ