アンサンブル学習:多数のモデルで賢く決める
複数のモデルを組み合わせて予測を良くするアンサンブル学習を学びます。基礎層では、間違いが打ち消し合うというしくみの核心と、別々に育てるバギング・順番に育てるブースティングという2つの流れをつかみます。深掘り層では、モデルに個性を配るブートストラップサンプリング、並列で速いバギングとランダムフォレスト、残差のリレーで進む勾配ブースティング、そして学習の速さをめぐる実務のトレードオフまで説明できるようになります。
ねらい
このレッスンでは、複数のモデルを組み合わせて予測を良くする、アンサンブル学習を学びます。
基礎
間違いが打ち消し合うというしくみの核心と、別々に育てるバギング・順番に育てるブースティングという2つの流れをつかみます。
1. 間違いが打ち消し合うアンサンブル学習のしくみ
アンサンブル学習とは、複数のモデルの予測を組み合わせて、1つのモデルより良い結果を目指す方法です。アンサンブルは、音楽で複数の演奏者による合奏を指す言葉です。1人の独奏ではなく合奏で音を作るように、モデルたちの予測を1つにまとめます。
どんなモデルにも、得意な場面と苦手な場面があります。あるモデルが間違えるところでも、別のモデルは正しく当てることがあります。間違え方の向きがばらばらであれば、予測をまとめたとき、間違いはたがいに打ち消し合います。
この打ち消し合いには条件があります。クイズ大会で、博識な回答者1人の答えと観客100人の多数決をくらべると、多数決が上回ることがあります。観客は1人ひとりを見れば間違えますが、歴史に強い人と料理に強い人では間違え方の向きが違うため、票を集めるとばらばらな間違いは打ち消し合うからです。ところが全員が同じ参考書だけで勉強していたら、間違いまでそろってしまい、多数決の意味がなくなります。この条件が、そのまま効いてきます。似たモデルばかり集めても、同じところで同じように間違えるため、まとめる意味がありません。アンサンブル学習の設計は、モデルどうしをどうばらけさせるかという工夫の積み重ねです。
ポイント
アンサンブル学習の力の源は、モデルの数そのものではなく、間違え方のばらつきです。ばらばらに間違えるからこそ、まとめたときに打ち消し合います。
2. 別々に育てる流れと順番に育てる流れ
性格の違うモデルたちの育て方には、大きく2つの流れがあります。
1つ目は、たくさんのモデルを別々に育てて、予測を多数決や平均でまとめる流れです。代表がバギングです。モデルどうしは独立していて、たがいの学習に関わりません。観客の1人ひとりが、自分の知識だけで一斉に答えを書く姿に近い形です。
2つ目は、モデルを1つずつ順番に育てる流れです。代表がブースティングです。まず1つ目のモデルを育て、その間違いを確かめてから、2つ目のモデルを育てます。前の走者から次の走者へバトンを渡す、リレーのような形です。
この違いは、手順の好みの問題ではありません。別々に育てる流れは全員を同時に走らせることができ、順番に育てる流れは前のモデルの完了を待つ必要があります。この差が、そのまま学習の速さの差になって表れます。
ここまでの要点
- アンサンブル学習は、性格の違う複数のモデルの予測をまとめ、間違いを打ち消し合わせて精度を安定させます。
- 別々に育てて多数決や平均でまとめる流れの代表がバギング、順番に育てて前の間違いを補う流れの代表がブースティングです。
- 別々に育てる流れは同時に計算できて速く、順番に育てる流れは前の完了を待つ必要があります。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「別々に育てて多数決するのがバギング、順番に育てて前の間違いを補うのがブースティング」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、性格の違うモデルを用意するデータの配り方から始めて、2つの流れの計算のしくみと、その違いが実務にもたらすトレードオフまで掘り下げます。
3. モデルに個性を配るブートストラップサンプリング
別々に育てる流れから見ていきます。最初の課題は、いま確かめた条件そのものです。手元のデータは1そろいしかないのに、そこから性格の違うモデルをどう育てるのか。全部のモデルに同じデータを渡すと、同じようなモデルばかりできてしまいます。
そこで使われるのが、ブートストラップサンプリングです。手元のデータから、重複を許してランダムに選び直し、少しずつ顔ぶれの違うデータの束をいくつも作ります。同じデータが2回選ばれることもあれば、1回も選ばれないこともあります。
でき上がった束は、どれももとのデータに似ていながら、偏り方が少しずつ違います。束ごとに1つずつモデルを育てると、性格の違うモデルがそろいます。データの配り方によって、1人ひとりが違う参考書で学んできた観客席と同じ状態を人工的に作り出すのです。
理解の確認
ブートストラップサンプリングの役割は、データを増やすことではなく、モデルに個性を配ることです。重複を許してランダムに選び直すと、なぜ性格の違うモデルが育つのか、自分の言葉で言い直せるか確かめてみてください。
4. 独立に育てて並列で速いバギングとランダムフォレスト
ブートストラップサンプリングで作った束からモデルを別々に育て、予測を多数決や平均でまとめる方法がバギングです。
大事なのは、各モデルが完全に独立して学習することです。1つ目のモデルの学習は、2つ目のモデルの結果を必要としません。どのモデルも、自分に配られた束だけを見て育ちます。
独立しているので、10個のモデルが必要なら10個の計算を同時に走らせることができます。これが並列計算です。計算する機械を並べた分だけ、学習にかかる時間を縮められます。だからバギングは処理が速いのです。
このバギングの部品に決定木を使い、さらに工夫を重ねた手法がランダムフォレストです。たくさんの決定木を育てて、その多数決で予測します。
木を育てるとき、データの束を変えるだけでなく、枝分かれの質問に使う特徴も毎回ランダムに一部だけ選びます。木どうしが似すぎると多数決の意味が薄れるため、二重の工夫で木に個性を持たせるのです。多数の木が集まった森に見立てて、この名前が付いています。
ポイント
バギングの速さは、多数決というまとめ方ではなく、モデルどうしの独立性から生まれます。独立しているから、並列で同時に計算できます。
5. 残差のリレーで順に育てるブースティングと勾配ブースティング
もう1つの流れがブースティングです。ブースティングは、モデルを一斉には育てません。1つ目のモデルをまず育て、その予測を採点してから、2つ目のモデルに取りかかります。
2つ目のモデルが学ぶのは、データの全体ではありません。1つ目のモデルが埋めきれなかった間違いの残り、つまり残差(ざんさ)です。3つ目のモデルは、2つ目までのモデルが残した残差を引き受けます。前の走者が届かなかった距離を次の走者が走る、残差のリレーです。
このリレーを数理的にととのえた手法が勾配ブースティングです。それまでのモデル全体の予測が、正解からどちらの向きにどれだけずれているかを測ります。そして、そのずれを打ち消す方向へ次のモデルを育て、少しずつモデルを足していきます。ずれの向き、つまり傾きを手がかりにするので、勾配(こうばい)という言葉が付いています。
このしくみには、避けて通れない性質が1つあります。2つ目のモデルは、1つ目のモデルの残差が分かるまで、学習を始められません。前の処理が終わるまで、次へ進めないのです。ブースティングの学習は、本質的に直列の流れになります。
6. 並列と直列の違いが生む実務のトレードオフ
同時に走れるバギングと、前の完了を待つブースティング。計算手順のこの違いは、実務では学習時間の違いとして表れます。
バギングは、モデルの数だけ計算を並列に走らせることができます。計算する機械を足せば、その分だけ学習時間を直接縮められます。
ブースティングは、そうはいきません。細部の計算を速くする工夫はあっても、前の残差を見てから次を育てるという流れそのものは変えられません。並列化が難しく、モデルの数が増えるほど学習に時間がかかります。
そのかわり、ブースティングには、前のモデルの間違いに的をしぼって直し続けるという強みがあります。勾配ブースティングは表形式のデータで高い精度を出しやすく、実務で広く使われています。速く安定して育てたいのか、時間をかけて精度を積み上げたいのか。手法の選択は、このトレードオフの上に立っています。
なお、複数のモデルの予測をさらに別のモデルがまとめて、最終の予測を作るスタッキングという方法もあります。名前と考え方だけ押さえておけば十分です。
注意
別々に育てて並べるのがバギング、残差を順に引き継ぐのがブースティングです。並べるほうは並列で速く、引き継ぐほうは直列で時間がかかる、と対で覚えると取り違えません。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。