AI技術をぱっと理解する(基礎編)

機械学習の仕組み (Vol.4)

  • 2018.01.30
  • 株式会社システムインテグレータ
機械学習の仕組み (Vol.4)

はじめに

3回に渡って人工知能という得体の知れない舞台でどんなキャストがそれぞれの役割を演じているかを見てきました。全体のイメージはつかめたと思いますので、今回からはぐっと目を近づけてディープラーニングの仕組みを理解していきたいと思います。 

機械学習とは

機械学習は、コンピュータに学習させて人間と同じような認識・判断を行わせる人工知能の手法1つです。アルバイトで雇った人に仕事内容を教えてから、仕事をさせるのと同じく、機械学習は図1のように「学習処理」「判定処理」の2つの手順で行われます。 

(1)学習処理 

機械学習の学習の仕組み(ライブラリ)がどんなに優れていたとしても、何も訓練しなければ赤ちゃんと一緒です。最初に訓練データを使ってトレーニングすることによって、学習器がだんだん賢くなってゆくわけです。そして、これなら十分な精度だと思われるレベルまで到達したら、ようやく学習済モデルの出来上がりです。 

(2)判定処理 

学習済の分類器(学習済モデル)は、未知のデータがなんであるかを判断・推定します。例えば、花の画像をラベル(花の名前)付きで学習させた分類器は、学習データに入っていなかった未知の花の画像を見て、「バラ」であると正しく判定してくれます。 

a.png

図1:機械学習の仕組み 
 

ミニバッチ学習法

機械学習は、アルゴリズムよりもデータが重要だとよく言われています。実際には目的に応じたアルゴリズムを選ぶことも大切なのですが、学習データの量と質はさらに重要なのです。よく大量データが必要と言われていますが、量だけでなく品質も非常に重要です。品質の悪い(人間でも判定がつかないような)データで学習すると精度が逆に落ちてしまいます。  

機械学習は、1回学習して終わりというわけではありません。例えば10000枚の画像を使って訓練するとしても、1回流しただけで終わりではなく、10回、20回と同じ訓練データで再トレーニングを繰り返します。そうすることで、学習器も「さっきまではわからなかったけど、今ならわかるぞ」というふうに認識精度が高まってゆくのです。 

実は、このように学習データを一気に流すバッチ学習の代わりに、もっと細かな単位(バッチサイズと言います)で学習を繰り返すミニバッチ学習という手法がよく使われています。9000枚の画像を使って学習するケースで、バッチサイズ60、バッチ回数200 、エポック回数20の例(図2)で説明しましょう。 

9000枚のデータからランダムに60枚を抽出(サンプル1)して学習し、続いてまたランダムに60枚を抽出(サンプル2)して学習します。これを200回繰り返してエポック1の学習が終了です。これを合計20回行うわけです。  

なんだかジムの筋トレに似ていますね。腹筋60回を200セット行い、それを20回もやるわけです。セットが終わるたびに鏡の前に立ち、だんだんお腹が割れていくのをうっとり見るわけです。 

9000枚を一気に学習するのを20回やるバッチ学習じゃダメなのでしょうか。そんな素朴な疑問が湧いてきますよね。実はダメというわけではないのですが、ミニバッチ学習はミニバッチ確率的勾配降下法の要素が入るのでより学習効果が高まると言われています。  

勾配降下法 

勾配降下法とは、一言で言うと誤差を小さくするために自律調整する仕組みです。 

Vol.5で誤差逆伝搬という誤差を小さくする仕組みを説明しますが、とりあえずここではそんなものだと思っておいてください。勾配降下法にはいくつかの方法があります。その中でミニバッチ確率的勾配降下法は、学習データの中からランダムに(あるバッチサイズの)データを取り出して、そのデータで学習して誤差を出して、その誤差を小さくするように学習器を調整する方法です。 

キーワードは、「ミニバッチごとの勾配均衡」「ランダムにデータ抽出」です。通常のバッチ学習で誤差調整するのに対して、ミニバッチ学習では60枚流すごとに誤差調整を行います。セットが終わってから鏡をみるのではなく、腹筋60回やるたびに鏡の前に立って割れ具合をチェックするナルシスト型なのです。 

また、9000枚のデータから順番に60枚ずつ抽出して150回学習すれば学習データを余さずダブらず有効に使えるのにと思うのですが、そうではなく毎回ランダムに60枚のデータを抽出します。 

個人的には、エポックごとに抽出するデータの組をランダムに変えさえすれば、順番切り出し法の方がデータを有効に使えて良いような気がしています。いつか比較して効果を試してみたいと思っています。 

b.png 

図2:ミニバッチ学習法

ホールドアウト法

貴重な学習データなのですが、あるものすべてを訓練に使うわけではありません。用意した学習データのうち、訓練に使う訓練データのほかに上達ぶりを確認する評価データを確保しておきます。そして、評価データにおける精度をチェックしながら学習を進めるのです。  

このように学習データを訓練データと評価データに分ける方法をホールドアウト法といいます。一見するとこれで十分なのですが、評価データが良くなるようにとチューニングしながら学習するなので、どうしてもそこにはバリアンスが生じてしまします。 

そのために、最近は図3のように評価データとは別にテストデータを取り分けておきます。テストデータは訓練には使いません。最終的に分類器の正答率や精度が求める水準に達したかどうかを、このテストデータで判定するのです。理想を言えば、同じ人がテストデータを用意するのではなく、別の人が別のルートから提供した方がいいとされています(システム開発のテストデータと同じですね)。 

「よし、だいぶ分かるようになったぞ」と自信をつけた分類器に、「じゃあ、卒業試験ね」ってことで全く未知のデータでテストを行い、そこで求める精度を達成できたらようやく合格となります。このような理由なので、テストデータでチューニングしてはいけないことになっており、求める精度まで達しなかった場合は、やり直しすることになります。  

c.png

図3:評価データとテストデータを分けた学習 

正解率と再現率と精度

上記で分類器の精度と書きましたが、厳密に言うと評価に使う指数は正解率(Accuracy)再現率(Recall)精度(Presicion)という3つを使い分ける場合があります(図4)。  

4--4.png

図4:正解率と再現率と精度 

バラの画像10枚とバラ以外の花の画像20枚を使ってバラの分類を行った例で説明しましょう。10枚のバラの画像のうち正しくバラに分類した数が8枚、20枚のバラ以外の画像のうち誤ってバラに分類してしまった数を3枚とします(表1)。 

正解率は単純に”全データに対する”正解した数の割合なので下記に示す計算で83.3%になります。一方、再現率と精度は、全データではなく”バラに分類したデータに対する”評価となります。下記の計算式により、再現率(バラの画像をいくつバラと認識できたか)は80%、精度(バラに分類したデータのうち、いくつ本当にバラだったか)は72.7%となります。  

正解率:(8+17)/30=83.3% 

バラの再現率:8/(8+2)=80% 

バラの精度:8/(8+3)=72.7% 

調和平均(F値):2再現率精度/(再現率+精度)= 28072.7/(80+72.7)=76.2  

 

バラ (10画像) 

バラ以外 (20画像) 

バラに分類 

8 

バラ以外に分類 

17 

表1:分割表 (赤字は誤り) 
 

一見すると、常に正解率で評価すれば良さそうに思われますがどうでしょうか。例えば、画像による品質異常検査(Anomaly detectionまたはDiagnostics)の分類器だとして、”バラ”を”異常”に置き換えてみてください。この場合、最も大事なのは異常のある製品を見過ごさない再現率なので、疑わしきは罰するという姿勢でしきい値を低くして再現率を高めます。その場合、異常じゃない製品も異常とみなすことが多くなるので精度は犠牲になり、その結果、正解率も下がります。 

このように、再現率と精度はトレードオフの関係にあります。そのため、両方を統合して評価する調和平均(F値)という指標もあります。再現率と精度の両方をバランス良く高める場合は、F値を大きくするように分類器を調整します。 

過学習と汎化誤差

機械学習で気をつけなければならないのが「過学習」です。同じ学習データで何回も何回もトレーニングすると、そのデータだけに強い”ガリ勉君”になってしまい、それ以外の本番データに対する認識率が逆に下がってしまいます。そのため学習する際は、評価データで精度向上度合いを確認して、ある程度サチった(飽和した)ところで学習を終了する決断が必要です。 

分類器の認識率は、トレーニングに使った評価データで測ってはいけません。必ず未知のテストデータで測定したもので誤差◯%と言うようにしてください。こうした未知のデータに対する誤りを「汎化誤差」といいます。また、汎化誤差が小さいことを「汎化能力が高い」とも言います。 

過学習を防止する技術としては、「正則化」「ドロップアウト」K分割交差検証」などがあり、どれも有効です。これらについてはVol.8で説明します。  

運用のポイントとしては、合格(妥協)ラインを決めることです。正解率や再現率が何パーセント以上だったら十分とするのかを決めないと、正解率が飽和してきたときにこれでOKにしていいかどうか判断できません。  

そして目標ラインに到達しそうもなかったら学習データを見直して、もっとデータ量を増やすとか品質の悪いデータを取り除くとかしてやり直すしかありません。場合によっては、データだけでなく機械学習のパラメータを変えたり、アルゴリズム自体を別のモデルに変える必要もあります。 

バリアンスとバイアス

特定のデータで過学習してしまい、そのデータに依存したモデルとなってしまって汎化誤差が大きくなることをバリアンス(variance)が大きい(オーバーフィッティング)といいます。逆に、データに対して学習不足でモデルが単純過ぎて汎化誤差が大きいケースはバイアス(vias)が大きい(アンダーフィッティング)といいます。  

バリアンスとバイアスはトレードオフの関係にあり、2つのバランスを取りながらトレーニングするわけです(図5)。言葉にすると難しそうですが、何回かやるとコツがつかめ、ダメなときは早めに諦めてデータを見直したりする勘所がつかめます。 

4-5.png
 
図5:バリアンスとバイアス 

アクティブラーニング

アクティブラーニングというと、双方向参加型の教育を連想しますね(実は当社でも積極的に取り入れたりしてます)。でも、機械学習におけるアクティブラーニングは、それとは全く違う意味で、本番運用しながら自然に追加学習できる仕組みを言います。 

機械学習の基本は、図1のように学習データを用意して学習して、完成した分類器を使って未知のデータを判定するスタイルです。このスタイルにおいて肝要なのは、通常のコンピュータの計算結果と違い、人工知能は100%正解を出すものとは想定しないことです。そのため、通常は人工知能の判断結果を人間がチェックして、もし、誤っている場合は正しい答えに修正する処理が入ります。  

この人間が修正したデータを使って、追加で学習させるのがアクティブラーニングです。アクティブラーニングには図6のように2つの方法があります。 

(1)人間が全量チェック 

分類器のアウトプットを人間が全量チェックし、間違っていたものを修正して追加学習データとして利用します。人間ドックの画像診断のように、人工知能が人間の見落とし・見誤りを防止してくれるようなケースで役立ちます。文章を書き終えて原稿を推敲する際に、誤字らしい文字を見つけてアンダーラインを付けてくれるとミスに気づきやすいのと同じです。  

(2)精度による選択チェック 

分類器は判定した識別結果に対して信頼度(Confident)を付けます。この値が高い場合は間違いないとわかっているなら、信頼度が低いデータのみを人間がチェックして追加学習します。製造業における画像による品質検査のように、通常は信頼度が高いデータがほとんどで、まれに信頼度が低いデータが交じるケースでは、大幅に人間の作業を軽減してくれます。  

いずれの方法も「AIか人間か」ではなく、「AIが人間をサポート」するスタイルです。リアルタイムで追加学習させることも考えられますが、人間が修正したデータを一定期間(量)ためてからバッチで学習させるのが普通でしょう。 
 d.png

図6:機械学習におけるアクティブラーニング 

まとめ

これで、機械学習ってどんなふうに学習するのかイメージが湧いたとおもいます。この程度ポイントを抑えておけば、飲み屋で「人工知能ってよくわかんない〜」って言う女性にわかりやすく説明して「すご〜い」って言われること確実です(妄想…願望かな)。 

次回は、意外とわかっているようで意外とわかっていない機械学習と深層学習の違いニューラルネットワークの仕組みについて説明します。 

(梅田:Twitter @umedano )