HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

機械学習の分野別概要【ディープ〜ベイズ】

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

今回は機械学習のいろいろな分野(便宜的に分けているだけですが)についてそれぞれ概要とツールをまとめておきたいと思います。具体的には以下の3つに分けて書いています。

  • ディープラーニング
  • 伝統的機械学習
  • ベイズ機械学習

注意点として、これらは本来別々に完全に分けて考えるものでもなく、混ぜて使うことができたり、あるいは理論的背景を共有していたりするものです。しかし、現状多くの場面ではこれらは用途に応じて使い分けられているのが実体であるため、あくまで使う側の立場でこれらの概要とツールについて述べていきます。

ディープラーニング

概要

ディープラーニングは言わずと知れた、機械学習の大流行の引き金となった存在です。

ディープラーニングのメインとなる存在であるニューラルネットワークは決して最近生まれた技術ではなく、ずっと長い間研究が行われてきました。もともとはデータから自ら学習をする機械として提案され、脳の神経(ニューロン)の特徴であるヘブ則を実装したために「ニューラルネットワーク」と名付けられたと思われます。

現在、脳の機能を再現するというモチベーションでの研究活動もあるとは思われますが、殆どの拡張は数学的な事情から生まれており、それほど脳の再現であるとかなんとかを気にしなくても良いかと思います。

ニューラルネットワークの概念は古くからあるものの、これを実際に計算機で動作させるには相応のハードの発展を待つ必要がありました。というのも、ニューラルネットワークよりも軽く、性能が同程度かそれ以上に出せる手法が他にもあったからです。近年のハードの発展によってニューラルネットワークが実用的に動くということになりました。その後も更に専用の演算器が準備されるなどの、ニューラルネットワークを支援する環境の整備はどんどん進んでいます。

ニューラルネットワークの最たる特徴としては、比較的簡単にモデルを拡張することが可能であるという点です。これは方法論のところで更に詳しく述べますが、ほとんど数理的な専門知識を要さず、まるでレゴブロックを組み立てるかのようにモデルを構築することができます。このような応用の簡易性が社会に広く受け入れられた要因ではないかなと私は推測しています(もしも、実装が難しかったとしたら、劇的な性能が発表されたとしてもここまではやらなかったと思う)。

方法論

ニューラルネットワークの学習は「勾配法」と呼ばれるかなり単純な仕組みになります。 勾配法に関する解説は至る所で見受けられるのでここでは省略します。例えば以下のような記事があります。

確率的勾配降下法とは何か、をPythonで動かして解説する

勾配法を改良するためにモーメンタムの導入やAdamなどの手法が提案されていますが、まあ、あくまで改良であって根本は勾配法に従います。そういう改良もあるのだくらいに捉えておいてかまわないでしょう(改良と述べたが、別に理論的に必ず良くなるという保証はない)。

勾配法では「微分」の計算が必要になるのですが、諸々の事情によってニューラルネットワークの微分は結構な面倒が伴います。それをシステマチックに求めることができるとして「誤差逆伝播法」が提案され(これも歴史的には古い)、使う側としてはあれこれ学習方法をゴチャゴチャ考える必要というのはあまりありません。

www.hellocybernetics.tech

  1. モデルをレゴブロックのように作る
  2. 損失関数(何をもって学習が進んだとするかの指針のようなもの)を決める
  3. 学習を行う(ここは殆ど決まりきった手法を使う)
  4. 学習の性能を未知データでテストする

というのが基本的なワークフローになります。損失関数も多くの場合は、問題設定に応じて代表的なものが提案されているため、ここもさして考えなければならないことはあまりありません。ただし、ニューラルネットワークの学習には、事前に決めておかなければならない設計変数のようなもの(ハイパーパラメータ)が多数存在します。これらを何通り、何百通りと試さなければならない(それだけ学習をやり直す)ため、この点が大きなコストとなってくるでしょう。

実情としては、ある特定のタスクに対してはどのようなモデルが良いのかもある程度提案されているため、いよいよ応用上やらなければならないことは、「3」と「4」の繰り返しということになります。あるいは学習データセットを取り揃えることが最も重要な課題になるでしょう。

ツール

ツールとしては圧倒的に「TensorFlow」の利用が多く、その中でも高レベルAPIである「Keras」の人気は絶大です。簡単なモデルならばまさにレゴブロックを組み上げるだけと言っても過言ではない簡単さです。

もしもモデルの構築を(勉強が目的であるなどの理由で)もっと自由に最初からやりたいということであれば、TensorFlowの低レベルAPIを用いるか、「PyTorch」が良い選択肢になるでしょう。

www.hellocybernetics.tech

ニューラルネットワーク自体の勉強を真面目にやりたいというのであれば、基本的なモデルを実装しながら学ぶのが効率よく、例えば以下の記事で紹介している書籍が大人気です。

www.hellocybernetics.tech

伝統的機械学習

概要

ここではディープじゃない手法を伝統的な機械学習と便宜的に呼ぶことにします。具体的には「ロジスティック回帰」、「サポートベクターマシン」、「決定木・ランダムフォレスト」とか、個々に発展してきた手法群全体を指します。

これらの手法をしっかり学びたいということであれば、個々の手法の解説に当たらねばならないため、手っ取り早くいろんな問題に適用できるものを学びたいと考える多くの社会人にはディープな手法に比べて不人気な印象を感じます。また、モデルの自由度がディープな手法に比べ低いことから、各手法を使った学習をする前に適切な特徴抽出を行う必要があるという欠点(これはある種の誤解だ。ディープだってデータに対する加工は必要である)も不人気の要因かと思われます。

ただし、多くの手法は数学的に綿密に設計されているため、数値の解釈性や学習の効率の良さなどが担保されているものも多く、もしも望む性能が達成されるのであればディープよりも優先的に使っていきたい存在です。すなわち、応用を考えていく上でも是非とも抑えておいたほうが良い分野になります。

方法論

多くの場合、タスクに応じて適切に手法を選択する必要があります。ただし、理論的にあれこれ考えるという小難しい話ではなく、いくつか手法の候補を準備しておいて、実験を通して性能を比較するくらいの感覚になります。

この場合、適切な前処理・特徴抽出というのは機械学習の手法に応じて変えなければならない場合があるため、この点が若干面倒な点になるかもしれません(スケールを揃える必要があるのか、ノイズにロバストであるか否か⇔ノイズ除去を前処理で必要とするか)。研究で手法の比較をする場合は、前処理を固定して機械学習手法だけを変えて性能を見る場合がありますが、実応用上、結果が正義ですので、最も良い方法を見つけることが大事になります。

前処理・特徴抽出は機械学習の性能を引き出すために重要な立ち位置になり、前述の通りディープでもそれは同じだが、そのウェイトはこちらの方が重いかなと思われます(ディープ手法が特徴抽出いらずと勘違いされたのは、偶然にもそのタスクではそうだった結果が誇張された結果だと思われます。例えば画像認識では、人手での特徴抽出処理は確かに実際かなりなくなったと言えます)。

ワークフローとしては

  1. データの可視化をしつつ前処理と特徴抽出をする
  2. いくつかの手法で学習を行う
  3. 未知データを用いて性能を比較・検討する

ということになります。実は「1.」が強く利いているということもあるため、データ解析のスキルが相応に求められると思われます。ただ、ディープでも(ウェイトの違いはあれど)それは変わらないと思いますし、勉強になるのはこっちを実直に実行していくことかなと思います。

個々の手法を解説した書籍を読んで、その手法のプロフェッショナルになっても良いかもしれませんが、応用上の立場では以下のような網羅的な書籍を1冊持っておけば十分すぎるかなと思います。

統計的学習の基礎 ―データマイニング・推論・予測―

統計的学習の基礎 ―データマイニング・推論・予測―

  • 作者: Trevor Hastie,Robert Tibshirani,Jerome Friedman,杉山将,井手剛,神嶌敏弘,栗田多喜夫,前田英作,井尻善久,岩田具治,金森敬文,兼村厚範,烏山昌幸,河原吉伸,木村昭悟,小西嘉典,酒井智弥,鈴木大慈,竹内一郎,玉木徹,出口大輔,冨岡亮太,波部斉,前田新一,持橋大地,山田誠
  • 出版社/メーカー: 共立出版
  • 発売日: 2014/06/25
  • メディア: 単行本
  • この商品を含むブログ (6件) を見る

ツール

ご存知「scikit-learn」があります。ディープをやるためにKerasから入った人もビックリするほど簡単です。

ベイズ機械学習

概要

もっとも入り口の敷居が高いのがこのベイズ機械学習だと思われます。

私は不幸にも(幸いにも?)最初の機械学習の学びが下記の書籍であったため、

パターン認識と機械学習 上

パターン認識と機械学習 上

  • 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松本裕治,村田昇
  • 出版社/メーカー: 丸善出版
  • 発売日: 2012/04/05
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 33回
  • この商品を含むブログ (20件) を見る

知らないうちにベイズの方法論というのに触れることとなりました。ハッキリ言って最初に触るにはあまりにも小難しすぎます。まず、機械学習の概念を捉えるのに少々手間取ってしまうため、すこし機械学習について学んだ後の方が懸命だと思われます。

ベイズ機械学習あるいはベイズ統計について学ぶとき、多くの紹介で「ベイズの定理」を使うという話が出てきます。これは半分正解で半分間違いということになります。なぜなら、ベイズ的な手法でなくとも「ベイズの定理」は(明示的にそう呼ぶかは別として)使うからです。ベイズ的な手法の根本的な部分は、まず登場するほぼ全ての数値(データや背後に潜む潜在変数やモデルのパラメータなど)を確率変数であると考えることです。そして、周辺化(加法定理)によって自分たちが知りたい・予測したい確率変数以外を積分消去してしまいます。

ここで積分消去というのは、簡単に言えば、予測したい数値に関連している確率変数の考えうるすべての可能性を考慮しつつ、「予測したい数値(の分布の)期待値を取る」ということになります。この期待値を取る操作のときに「データに基づいた消去したい変数の確率分布=事後分布」が必要になります。この事後分布が多くの場合ベイズの定理によって求められることになるのです。

ただし、どうしても事後分布を求めるときには、いわゆる仮定するモデルの設計変数(ハイパーパラメータ)を予め決めなければならず、(ディープな手法にも伝統的手法にもハイパーパラメータはあるにも関わらず)主観的すぎると批判される原因にもなりました(ベイズの手法ではハイパーパラメータはパラメータや潜在変数の事前分布の形状を定めることになる)。

更に厄介なことに、事後分布を求める方法、あるいは事後分布を含んだ期待値計算(予測分布)が普通には求まらないことも問題になります。何らかの近似を入れるか、適切なサンプリングアルゴリズムを導入しなければ学習が実行できません。この近似を入れる操作は、言わばモデルに対して何らかの仮定を追加で導入することになり、その仮定が不自然だと結果もおかしいことになります(簡単に言えば変数間の相関を無視したりする近似が入る)。真っ当な近似を行うにはデータに対する鋭い考察が必要になります。

また、サンプリングのアルゴリズムも種類がたくさんあり、どれを選択すれば良いのかというのは自明ではありません。ただし、これらは決して悪いということではなく、たいてい結構いい加減な近似やサンプリング法を導入した結果が、ニューラルネットワークの学習と一致していたりするので、そもそも充実した選択肢が与えられていると見るほうが妥当です。

方法論

ベイズの方も適切な前処理・特徴抽出が必要ですが、ベイズモデリングの中に特徴抽出そのものを含んだ形にすることが可能です。レゴブロックのようにとは行かないものの、比較的自由度の高いモデリングが可能になっています。ただし、それに対して適切な学習アルゴリズムを得るのは容易ではなく(少なくとも私はスラスラできないため、ツール頼りである)、応用上も難易度が高いなという印象です。

ワークフローとしては

  1. データに対して考えうる確率変数(パラメータや潜在変数)を列挙し同時分布を考える
  2. 実際に予測したい変数を表す予測分布を得る(事後分布による期待値演算)
  3. 事後分布あるいは予測分布を得るアルゴリズムを導出・実行する
  4. 未知のデータにより評価を行う
  5. ハイパーパラメータの調整を行う(経験ベイズなど)

と言うかたちになると思われます。 まともにオリジナルなことをやろうとすると最も難易度の高い分野になると思われますが、そもそも、伝統的機械学習では対応できない、あるいは表現できないものを表現する事ができるものであるため、仕方の無い代償です。

もしも、性能(分類の正解率など)だけが必要でそれが伝統的手法でパッとできるならば、必ずしも手を出さなければいけないものではありませんが、逆に伝統的手法でできないならば「ベイズを使うしかどうしようもない」という場面も現れますし、その場面に対応ができるのは「ベイズを使うことができる人」だけです。

モデリングについて述べた書籍としては以下

ベイズモデリングの世界

ベイズモデリングの世界

プログラムを叩きながら学べるのは以下

Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

モデリングと学習のアルゴリズムについて丁寧な数式を元に学べるのは以下

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

ベイズ機械学習で必要となる計算を効率的に実行できるマルコフ連鎖モンテカルロ法について述べた本は以下

計算統計II――マルコフ連鎖モンテカルロ法とその周辺【統計科学のフロンティア12】 (岩波オンデマンドブックス)

計算統計II――マルコフ連鎖モンテカルロ法とその周辺【統計科学のフロンティア12】 (岩波オンデマンドブックス)

  • 作者: 伊庭幸人,種村正美,大森裕浩,和合肇,佐藤整尚,高橋明彦
  • 出版社/メーカー: 岩波書店
  • 発売日: 2018/07/10
  • メディア: オンデマンド (ペーパーバック)
  • この商品を含むブログを見る

ツール

近年はTensorFlowにベイズのハイレベルAPIとしてEdward2や今後TensorFlowをバックエンドにしたPyMC4が整備されていくはずです。 PythonとRから使うことのできるStanも多くのユーザーがいます。特にRは統計分析に特化した言語であるため、ユーザーが多い印象です。

最後に

ディープが手っ取り早い。 伝統的機械学習がバランス良く勉強になる。 ベイズが一番楽しい。

というのが僕の印象ですが、いちばん大事なのはデータを実際に自分で触り、いろいろ試すことです。それぞれの分野を摘みながらでも良いので、まずは広く触ってみるのが良いと思います。