人工知能学会が定期発行する学会誌『人工知能』に掲載された連載解説を単行本化した本。ディープラーニングの基礎から、画像認識・自然言語認識のような実践まで網羅的に書かれているので全体像をつかむには最適かも。
↑気になったらここからポチっと↑
見よう見まねで機械学習をやってきたので、後付けだけど機械学習について体系的に学んでみようの第五弾。なるべく平易に書こうとされていますが、学会誌であるため一定以上の前提知識がないと全てを理解することは困難かもしれません(僕は半分くらい理解できました)。
また、代表的な階層型ニューラルネットワークとしてボルツマンマシンに代表される相互結合型ニューラルネットワークや、順方向伝播型ニューラルネットワーク、画像解析で使われる畳込みニューラルネットワークが解説されています。
順方向伝播型ニューラルネットワークの最適化の困難さと、効率よく最適化するための誤差逆伝播学習についても触れられています。雑に書くと、ニューラルネットワークの各ノード(パーセプトロン)にはS字型のシグモイド関数などがそのノードの出力値を決める活性化関数として組み込まれています。1つ後ろの階層は前の階層の出力値を引き継ぐので、前の階層の活性化関数を入れ子で持つようになります。階層が深くなるほど一番後ろの出力層が持つ活性化関数の入れ子が雪だるま式に多くなるので計算が大変なのです。誤差逆伝播学習はそれを逆手に取った逆転の発想で、出力層から入力層に逆流するように遡ります(出力結果を微分しながら遡っていきます)。
上記以外にも、出力結果から入力値を再現する砂時計型のニューラルネットワークである自己符号化器や、一度に全体を最適化せず1階層ごとに学習・最適化していく積層符号化器についても基本的な考え方が分かりやすく書かれています。
ボルツマンマシンには、ノードが増えることによる組み合わせ爆発(計算量の飛躍的な増大)という大きな欠点があり、まじめに計算せず数学的に近似するギブスサンプリングや平均場近似法という手法についても解説されています。
最後に現在の機械学習の基礎となった制限ボルツマンマシンについて解説されています。一般的なボルツマンマシンは各ノードが網目状に結合していますが、制限ボルツマンマシンは網目状ではなく階層状に結合します。双方向につながった階層型ニューラルネットワークなのです。
この過学習を抑制する手法として、多層ニューラルネットワークの各パラメータに良い値を与える事前学習の手法について解説されています。
まずは、ディープラーニングにおける大量の計算の分散実行についてです。計算内容を細分化して複数のコンピュータで並列実行する手法や、並列計算に適したGPUを使う手法が紹介されています。
複数のコンピュータで並列実行する場合は、コンピュータごとに計算能力(CPU性能・メモリ量など)がばらつくので、タスクの細分化やタスクの割り当て方がポイントになります。わんこそばで例えると、1杯あたりのそばの量とつぐタイミングをどうすれば早く大量に食べられるのかということです。
GPUはCPUと比較して大量のコアを積んでいるため、並列計算に適しているのです。わんこそばで言うと、みんなで一気に食べる感じです。
他にもドロップアウトや蒸留といった効率よくモデルを最適化する手法や、ReLUなどの簡易に表現できる活性化関数など計算量を抑制する仕組みが紹介されています。
アイサイトや自動運転などで使用されている車の周辺状況の認識や顔認識のような物体認識の難しさは角度の違いなどによる見た目の変動が大きいことであり、角度などに依存しない不変な特徴を取り出す必要があります。その手法として、SIFT (Scale invariant feature transform)と呼ばれる入力画像内の線分の長さや方向をマッピングして局所特徴を抽出する手法が紹介されています。
また、画像認識を行うニューラルネットワークでは下位層(入力データに近い層)で検出される特徴ほど不変性を持っていて、他の画像認識にも活用できるのだそうです。この性質を活かして下位層の学習結果を他のモデルに移植することを転移学習と呼び、効果が高いことが実証されているのだそうです。スパース正則化という画像認識の精度を大きく上げることのできる手法についても解説されています。
音声認識では後続の音声が直前の音声と密接に関係するので、言葉の時系列を考慮する必要があります。「くるまにのる」であれば、「くるまに」までの認識結果を保持しておき、続く言葉が「のる」だろうとアタリをつけるような感じです。ニューラルネットワークとしては、ノードの出力(認識結果)を次の音の認識の入力にする回帰結合ニューラルネットワークが使われます(認識した結果を次の音声認識に繰り返しいれていくようなイメージです)。具体的な手法として、時系列に対して恒等関数で重みづけをするLong Short-Term Memory法や同時に複数の情報入力するマルチストリーム学習、同時に複数の識別問題に対応できるニューラルネットを作るマルチタスク学習などが紹介されています。
また、音声認識では音声に含まれるフィラーを適切に除去できるかで精度が大きく変わってきます。フィラーとは意味を持たない音声のことで、日本語だと「えーと」とか「あー」、英語だと「you know」みたいなやつです。
音声認識でも登場した言語モデルでは単語が文書中に出現する確率を使います。例えば機械翻訳では翻訳した文書が翻訳先の言語でどの程度自然かを各単語の出現確率(頻度)を使って評価しているそうです。一昔前の機械翻訳は英和辞典の約をそのまま並べた直訳っぽいものでしたが、最近のGoogle翻訳などはだいぶ改善されているように思います。自然に近い訳ができるようになっている裏にはこのようなモデルが使われているんですね。
↓気になったらここからポチっと↓
↑気になったらここからポチっと↑
見よう見まねで機械学習をやってきたので、後付けだけど機械学習について体系的に学んでみようの第五弾。なるべく平易に書こうとされていますが、学会誌であるため一定以上の前提知識がないと全てを理解することは困難かもしれません(僕は半分くらい理解できました)。
この本を読むとわかること
階層型ニューラルネットワークによる深層学習
深層学習(ディープラーニング)では音声や画像、大量の数値で構成されるビッグデータから特徴を抽出してモデルを作る多変量データ解析を行うため、膨大な情報の中から意味のある情報にフォーカスして(=重要度の低い情報を除外して)分析することが重要なのです。その手法として、主成分分析・次元削減などが紹介されています。また、代表的な階層型ニューラルネットワークとしてボルツマンマシンに代表される相互結合型ニューラルネットワークや、順方向伝播型ニューラルネットワーク、画像解析で使われる畳込みニューラルネットワークが解説されています。
順方向伝播型ニューラルネットワークの最適化の困難さと、効率よく最適化するための誤差逆伝播学習についても触れられています。雑に書くと、ニューラルネットワークの各ノード(パーセプトロン)にはS字型のシグモイド関数などがそのノードの出力値を決める活性化関数として組み込まれています。1つ後ろの階層は前の階層の出力値を引き継ぐので、前の階層の活性化関数を入れ子で持つようになります。階層が深くなるほど一番後ろの出力層が持つ活性化関数の入れ子が雪だるま式に多くなるので計算が大変なのです。誤差逆伝播学習はそれを逆手に取った逆転の発想で、出力層から入力層に逆流するように遡ります(出力結果を微分しながら遡っていきます)。
上記以外にも、出力結果から入力値を再現する砂時計型のニューラルネットワークである自己符号化器や、一度に全体を最適化せず1階層ごとに学習・最適化していく積層符号化器についても基本的な考え方が分かりやすく書かれています。
深層ボルツマンマシン
ボルツマンマシンは1980年代に考案された確率的相互結合型機械学習モデル(何のことやら分からないですね)ですが、当時のコンピュータの性能に対して計算量が大きすぎて現実的ではありませんでした。この確率的~というのは、観測されたデータは未知の確率分布によって生成されたものであり、その未知の分布を近似できるモデルを作ろうという考え方です。未知の分布を推定する手法としてベイズ推定やマルコフ確率場という数学的な推定手法が紹介されています(概念はなんとなく理解できたけど、数学的なところはちんぷんかんぷん)。ボルツマンマシンには、ノードが増えることによる組み合わせ爆発(計算量の飛躍的な増大)という大きな欠点があり、まじめに計算せず数学的に近似するギブスサンプリングや平均場近似法という手法についても解説されています。
最後に現在の機械学習の基礎となった制限ボルツマンマシンについて解説されています。一般的なボルツマンマシンは各ノードが網目状に結合していますが、制限ボルツマンマシンは網目状ではなく階層状に結合します。双方向につながった階層型ニューラルネットワークなのです。
事前学習とその周辺
機械学習ではまりがちなのは、訓練データ(教師データ)に最適化された過学習が起こることです。モデル構築のために与えられたデータに対しては高い精度を示すものの、それ以外のデータに対する精度が低い状態です。汎化性能が低いとも表現されます。この過学習を抑制する手法として、多層ニューラルネットワークの各パラメータに良い値を与える事前学習の手法について解説されています。
大規模深層学習の実現技術
ここまではディープラーニングの概念の解説が中心でしたが、これ以降は実践的な内容になります。まずは、ディープラーニングにおける大量の計算の分散実行についてです。計算内容を細分化して複数のコンピュータで並列実行する手法や、並列計算に適したGPUを使う手法が紹介されています。
複数のコンピュータで並列実行する場合は、コンピュータごとに計算能力(CPU性能・メモリ量など)がばらつくので、タスクの細分化やタスクの割り当て方がポイントになります。わんこそばで例えると、1杯あたりのそばの量とつぐタイミングをどうすれば早く大量に食べられるのかということです。
GPUはCPUと比較して大量のコアを積んでいるため、並列計算に適しているのです。わんこそばで言うと、みんなで一気に食べる感じです。
他にもドロップアウトや蒸留といった効率よくモデルを最適化する手法や、ReLUなどの簡易に表現できる活性化関数など計算量を抑制する仕組みが紹介されています。
画像認識のための深層学習
画像認識で使われる畳込みニューラルネットワークについて図を交えて解説されています。畳込みニューラルネットワークは縦・横・奥行きなどを検出する畳込み層と、畳込み層からの出力を集約するプーリング層で構成されています。畳込み層は画像をぼかしたりエッジを協調するようなフィルタの役割をするのです。アイサイトや自動運転などで使用されている車の周辺状況の認識や顔認識のような物体認識の難しさは角度の違いなどによる見た目の変動が大きいことであり、角度などに依存しない不変な特徴を取り出す必要があります。その手法として、SIFT (Scale invariant feature transform)と呼ばれる入力画像内の線分の長さや方向をマッピングして局所特徴を抽出する手法が紹介されています。
また、画像認識を行うニューラルネットワークでは下位層(入力データに近い層)で検出される特徴ほど不変性を持っていて、他の画像認識にも活用できるのだそうです。この性質を活かして下位層の学習結果を他のモデルに移植することを転移学習と呼び、効果が高いことが実証されているのだそうです。スパース正則化という画像認識の精度を大きく上げることのできる手法についても解説されています。
音声認識のための深層学習
音声認識では単語列から音素列を取出し、音声特徴ベクトルに変換し、その音声特徴ベクトルの系列から対応する単語列を推定します。例えば「ディープラーニング」という音に対して「で ぃ ぃ ぷ ら ぁ ぁ に ん ぐ」みたいな感じで一定時間間隔で音素を取り出して、音素をベクトル(数値)に変換して、辞書(AIのための単語帳的なもの)と照合して、一番近そうな単語を見つけるという感じです。単語がどのような確率で出現するかを記述する言語モデルを使うと音声認識の精度を上げることができます。「くるま」という言葉の後に続くのは「のる」「うんてんする」の確率が高いだろうと推測するようなイメージです。ここでは隠れマルコフモデルというものが紹介されています。音声認識では後続の音声が直前の音声と密接に関係するので、言葉の時系列を考慮する必要があります。「くるまにのる」であれば、「くるまに」までの認識結果を保持しておき、続く言葉が「のる」だろうとアタリをつけるような感じです。ニューラルネットワークとしては、ノードの出力(認識結果)を次の音の認識の入力にする回帰結合ニューラルネットワークが使われます(認識した結果を次の音声認識に繰り返しいれていくようなイメージです)。具体的な手法として、時系列に対して恒等関数で重みづけをするLong Short-Term Memory法や同時に複数の情報入力するマルチストリーム学習、同時に複数の識別問題に対応できるニューラルネットを作るマルチタスク学習などが紹介されています。
また、音声認識では音声に含まれるフィラーを適切に除去できるかで精度が大きく変わってきます。フィラーとは意味を持たない音声のことで、日本語だと「えーと」とか「あー」、英語だと「you know」みたいなやつです。
自然言語処理のための深層学習
最後は機械翻訳やチャットボットなどで使われている自然言語処理についての解説です。まずは、評判分析・文書自動要約・機械翻訳などで使われているBag-of-wordsモデルが紹介されています。例えば機械翻訳では入力を正しく双方向に再現できるネットワーク構造を学習するのだそうです。MBAやってた頃、課題(英語で提出)を出す前に自分で書いた英文をGoogle翻訳に放り込んで意図した日本語になるかチェックしていました。AIも同じようなことやっているんですね。音声認識でも登場した言語モデルでは単語が文書中に出現する確率を使います。例えば機械翻訳では翻訳した文書が翻訳先の言語でどの程度自然かを各単語の出現確率(頻度)を使って評価しているそうです。一昔前の機械翻訳は英和辞典の約をそのまま並べた直訳っぽいものでしたが、最近のGoogle翻訳などはだいぶ改善されているように思います。自然に近い訳ができるようになっている裏にはこのようなモデルが使われているんですね。
↓気になったらここからポチっと↓