"機械学習","信号解析","ディープラーニング"の勉強

HELLO CYBERNETICS

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

【ただのボヤキ】統計学と機械学習とディープラーニングと

 

 

f:id:s0sem0y:20170609220346j:plain

 

はじめに

この記事は最近のディープラーニングの、特に応用的面に関して、私が完全に個人的に思っていることをボヤいているだけの記事です。浅学非才な私の勝手な戯れ言であって、真実を突きつける内容とはなっていないと思われますが、機械学習をやっていて思うことをとりあえず書きます。

 

機械学習の発展とそのモチベーション

機械学習の発展

以下の記事で人工知能の歴史について語りました。

s0sem0y.hatenablog.com

 

機械学習は人工知能を達成しようという試みの中で出てきた、1つの手段と考えることができます。そしてこの手段は近年、実用的な面で多大な成果を挙げ、人工知能というロマンを離れても十分に有用なものであることが認識されてきました。 

 

特に人間の脳を模倣したと言われるニューラルネットワークは、近年ディープラーニングとして大流行し、画像認識や音声認識などで成果を挙げ、専門外の人にもその名が轟くようになっています。

 

人間のように振る舞うことのできる人工知能という夢から一旦離れたとしても、ディープラーニングはある特定のタスクを解決する上で非常に有効な手段であることが認められ、本当に様々な分野(工学、医学、金融など)で用いられるようになってきました。

 

以下、人間のように振る舞える人工知能(汎用人工知能)ということから離れ、アプリケーションとしての機械学習について述べていきます。

 

統計学と機械学習のモチベーション

機械学習は予測がしたい

機械学習を使うモチベーションは「手元のデータからモデルを構築し、そのモデルで未知のデータを予測する」ことです。簡単に言えば、データを突っ込んだら未知のデータの予測ができるような何かが出来上がると嬉しいという話です。

 

従って、機械学習で構築したモデルが、どれだけ正しく未知のデータを予測できるかが性能を測る指標となってきます。予測を正しくするためには、単に手元のデータ(たかだか有限のデータ)だけに特化した学習が行われないように(過学習しないように)、学習を上手く制御する方法が必要になります。ココらへんの工夫が機械学習での肝になってくると言っていいでしょう。

 

統計学は真実を知りたい

統計学では手元のデータから、それを説明できるモデルを作ることそのものが大きなモチベーションになります。当然、正しくモデルを構築できた際には、それを予測に用いることもできるのですが、どちらかといえば「大量に集めたデータから、人間がその背後にある真実を知りたい」ということに重点が置かれるように思います。

 

従って、予測が上手くいくかいかないかも重要ではありますが、統計学では、構築したモデル(たかだか有限のデータで作っただけのモデル)が本当に真っ当なものであるかを調べる手段が用意されています。

 

また人間がモデルから何かを解釈することが必要であるため、使われるモデル(仮定)は比較的単純なものが多いです。例えば、データはガウス分布から生成されるとか、ポアソン分布から生成されるとか、ある程度性質の知られた分布を上手く使って説明しようとします。

 

統計学と機械学習の違い

数理的な背景はかなり似ているものがあるはずです。

しかし、これらを実際にデータに使おうと思った時、「機械学習を使う」という場合と「統計学を使う」という場合では、そのときの人間の心情は全く違うと思われます。

 

  • 機械学習は予測に重きを置く
  • 統計学はモデルの解釈に重きを置く

 

と言った感じでしょう。

 

 f:id:s0sem0y:20170609164207p:plain

仮にデータ\bf xに対して、パラメータ\bf θとしてモデルf({\bf x,θ})があったとすれば、機械学習で最も興味があるのは、モデルの出力y = f({\bf x,θ})の方になってきます。出力が思ったとおりにならなければ、色々条件を変えて学習をし直します。

 

統計学ではむしろf({\bf x,θ})自体、更に強調するならばパラメータ\bf θに興味があると言えます。例えばガウス分布を仮定するならば、\bf θは平均と分散に興味があり、線形回帰モデルを考えるのであれば、回帰係数に興味があるというわけです。

 

 

 

モデルの話

ここで言うモデルというのは、確率分布だったり関数だったり、数理モデルのことを指します。

数理モデルの例

一般的によく知られている数理モデルとして、距離と速度と時間の関係があります。

距離L、速度Vで時間tとすれば

 

L=Vt

 

です。これも立派な数理モデルです。ご存知の通り「Vが時間的に変化するとしたら本当にこの積の形で済むのか?」などと考えて微積分なり運動学なりが発展していきました。

 

他にも、電圧Vと抵抗Rと電流Iの関係も、オームの法則として

 

V=RI

 

であることが知られています。これもまた単純ではありますが数理モデルです。

 

モデルを構築するときの姿勢

例えばオームの法則では電圧計と電流計が手元にある場合に

 

  1. 電流を色々変えた時の電圧を測定。
  2. どうやら一方が増加するともう一方も増加していそうだ
  3. それが直線的であればy=ax+bなどとモデル化
  4. a,bを決定して数理モデルを構築
  5. aを抵抗と名付けよう。一方b=0であった。

 

などとすることができます(歴史的にそうであったかは知りませんが)。

「1.」はデータ取得であり、自然現象そのものを知っただけです。「4.」は既に知られている計算手法を用いた結果であり、人間の意思の介在の余地はありません。「5.」は人間がモデルを解釈するフェイズです。

 

しかし「2.」と「3.」に関しては、明らかに人間が勝手に置いている仮定です。そしてこの仮定は、モデル構築の結果を大きく左右するものとなります。

 

数理モデルというのは明らかに人間の意思が介在しているのです。仮にオームの法則を知らない人が、実験データからその規則を見出そうとした時に、

 

y=c \sigma (ax+b) +d

 

と仮定した場合にはどのような結果が待っていたでしょうか。

 

ディープラーニングの話

ディープラーニングでも何らかのモデル化が行われている

ディープラーニングではニューラルネットを用いて入力と出力の関係をモデル化しようとします。入力というのは何らかのデータであり、出力はその分類結果であったり、少し先の未来のデータであったりです。

 

いずれにしても、ディープラーニングは多層化された合成関数という形でこの入出力関係をモデル化します。果たして、このときそのモデル化は正しいのでしょうか。

 

オームの法則の話を見てきました。モデル化が真実を知ることから(あるいは正しい予測をすることから)遠ざかってはいないでしょうか。

 

回帰に使う二層のニューラルネットワークですら以下のように入力\bf xと出力\bf yの関係をモデル化します。

 

y= {\bf W_2} \sigma ({\bf W_1x+b_1) +d_2}

 

多層になれば、更に括弧が増えていき、もはや一体何を表現しようとしているのかはわからなくなります。先程オームの法則を以下のようにモデル化した場合はどうなるでしょうか?と問いました。

 

y=c \sigma (ax+b) +d

 

これはニューラルネットワークの1次元バージョンだと考えることができます。このモデル化は、明らかに真実に対して冗長です(それどころか真実が得られない可能性も)。

 

仮に、ディープラーニングで上手く現象を表現できる(予測精度が高い)としても、モデルを複雑にしたが故、結局人間の解釈できるところではなくなることのほうが多いです。

 

というわけで、最初に説明した「機械学習」と「統計学」という2つの人間の姿勢において、ディープラーニングは専ら機械学習側に属しており(もちろん手法という観点でもそうだが)、しかも群を抜いて振り切っています。

 

だとしても、ディープラーニングは(人間にわからないだけで)何かをモデル化しているということだけは事実です。

 

多層化は悪ではない

ここで主張したいのは、だから多層化というのは非常に効率の悪い、更に人間にとって扱いづらいモデルですよということではありません。現にディープラーニング自体は大成していると言っていい状況です。

 

もとより、データの規則そのものを説明することが目的でなく、なんだかよくわからないけど予測さえ上手くやってくれればそれで良いというケースもあります。

 

例えば触媒化学なんていうのは(もちろん背景には自然現象という法則があるのでしょうが)、有効な触媒の発見をするためには、多くの実験を積み重ねてデータを集める必要があります。仮に良い触媒が見つかったとして、触媒が化学反応の中でどのように電子の受け渡しを行っているのかを完全に把握することはできません。

 

そういうわけで、機械学習的な発想で触媒を発見する試みをするということも十分に考えられるわけです(実際既に行われている)。そのときディープラーニングというのは極めて有効な解決手段になりうるでしょう。

 

使う側の姿勢の問題

 

問題はこれを扱う人間側の姿勢の方です。

 

ディープラーニングが何やら何でもこなしてくれるというようなイメージが持たれているように感じます。そこまでのイメージを持っていなくとも、「なんとなく凄そうだからディープラーニングを使おう。じゃあデータ持って来い!」という雰囲気が出てしまっているような気もします。

 

ディープラーニングを使った時には、大抵統計学的な姿勢でモデルを見直すことは困難です。出来上がった変数から、データの詳細な規則などを知ることは難しいです。ですから、「なんだかよくわからないけど上手く行きそうだ」と思う事自体は何もおかしくありません。

 

それでもディープラーニングは何かをモデル化しています。

 

もう人間が、そのタスクにおいてモデル自体に興味がなくとも、実際にはパラメータをフィッティングしているだけの関数近似なのです。

 

例えば線形自己符号化器なんてのは主成分分析の劣化版です。ディープラーニングを使うからには、既存の手法の劣化版の形で利用してはいけません。単に学習資源を無駄遣いするだけです。

 

ディープラーニング利用の姿勢

まずはデータとそれに対する目的があって、以下のような思考の順序があるべきだと感じています。「1.」と「2.」はビッグデータの時代であり、逆転しうる可能性もあります。

 

  1. 何らかの目的がある。(あるいはデータが大量にある。)
  2. 目的を達成するためのデータを集める。(データを有効活用する方法を考える。)
  3. データを説明するモデルを考えてみる。
  4. 既存の方法ではどうやら上手くいかない。
  5. ディープラーニングなどの複雑なモデルを適用する(データの説明は半ば諦め)。
  6. 予測が上手くいくようなモデル(層の組み合わせ方)を考える。
  7. (上手くいったら)複雑な規則がデータに内在していたと考える。
  8. その複雑な規則とやらを人間が理解する必要は無いかを今一度考える。

 

これくらいの順序がいるように思います。

ハッキリ言って既存の手法でできるならその方が良いです。お金も時間も掛かりません。しかもモデルの解釈もしやすいはずです。その学習結果から予測精度うんぬん以上に得られる情報があるはずです。

 

それでもディープラーニングは偉大です。多くの場面で活躍してきました。

 

ディープラーニングは人の仕事を奪うか

医療への活用

f:id:s0sem0y:20170609215429j:plain

画像診断への応用

医療への応用がどんどん進んでいます。がん細胞の特定や、白血球を識別する応用がなされており、これで診断が更に正確になることが期待できます。

 

しかし、ディープラーニングはなぜがん細胞を見つけなければいけないのかを知りませんし、がん細胞ができる理由も知りません。もとより、画像診断装置によって人間の体から、画像という特徴量を抽出した後であるので、ココに関して当たり前といえば当たり前ですが、医者が必要なくなるということはないでしょう。

 

生データへの応用の先

仮に人の血液だとか体温だとか、生のデータから病気を当てられるような手法が見つかれば医者の存続も怪しくなるかもしれません。それでも、「このような症状があり、それは●●の理由だと考えられる。従ってあなたは××という病気です」という説明をしてくれる人間と、「データからあなたは××という病気です」と言う人工知能のどちらに安心感があるかは言うまでもありません。

 

将来の医者と人工知能

とは言え、あまりに予測精度が高くなれば、理由はともわれ人工知能の診断を信じてみようということは出てくるかもしれません。そうしたら、医者は人工知能と協力して診断をしつつ、病気になってから事後報告をしてくれる人工知能とは異なり、病気の原因を突き止め、予防する手法を考える必要が出てきます。

 

そのためには病気になる根本的な原因を知る必要があり、この点においては(現状は)人工知能の得意とする分野ではないでしょう(もしかしたら、ディープラーニングは特徴量としてそれを認識しているかもしれないが、それを予防に活かす術は人間が見出さなければならない)。

 

ディープラーニング利用の姿勢「8.」が非常に大事になってくる場面です。

 

 

地震の予測

f:id:s0sem0y:20170609220218j:plain

地震予測に対する応用

地震について、地域や発生頻度などを見ながら、どれくらいの規模の地震がいつ発生しうるかを予測できれば災害対策に繋がります。現状、この地震の予測は明らかに不完全であり、地球という自然が織りなす規則的な振動現象を、人間は解明するに至っていません。

 

仮に様々なデータから地震の規模だとか発生時期を予測することができたとしましょう。個人的にはこれはディープラーニングで達成されればそれで良い問題だと考えています。

 

すなわち「8.」において、データに対する詳細な解釈を人間がする必要はなく、とにかく発生時期を何がなんでも予測できればいいということです。サイエンス的な興味で、更に地震のメカニズムを知っていこうという試みがあってもいいと思いますが、知ったところで地震を止めることは難しいでしょう。

 

予測結果の正しさが最も重要視されてくる場面であり、ディープラーニングの本領が発揮されるところだと思います。

 

 

保険数理への応用

保険料算出

生命保険や損害保険、年金などは「保険数理人(アクチュアリー)」と呼ばれる職業の人たちによって算出されています。これらは専ら統計学に基づいており、どのような掛け金にしておけば、対象を保証しつつ安全に資産を運用できるかを計算しています。

 

例えば自動車保険ならば、自動車の車種や年式、走行距離、所持者の年齢など様々な情報から掛け金が算出されています。事故を起こせば、明らかに掛け金以上の負担を保険会社が担ってくれますが、一方で統計によって保険会社はしっかりと利益が出るように掛け金を組んでいます。

 

機械学習が使えそうな分野だと個人的に思うが

これは私は機械学習が得意とする分野であるように思います。なぜなら、自動車の年式や車種、走行距離、所持者の年齢などの情報から知りたいのは、結局適正な掛け金の方であって、例えば走行距離がどれくらい事故率に寄与するか、あるいは年齢などとの相関関係がどうであるかを詳細に知ることが目的ではないからです。

 

これらを知ることはやはり、あくまで掛け金の算出を正確に行うために使われるのであって、それ自体が目的になることはないでしょう。

 

しかし、保険商品を売り出す際には国の認可が必要です。

国は「ディープラーニングがこんくらいが良いって言った」なんて説明には納得しないでしょう。目的は適正な掛け金の算出かもしれませんが、アクチュアリーの役割として「他人に説明する」という業務がある以上は、実はそう簡単に人工知能に取って代わるものではないとも考えられます。

 

 

 

最後に

結局、何が言いたいかというと、ディープラーニングを正しく使いましょうということです(私も未熟ですが、がんばります)。

 

 

 

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com