infoMode

情報セキュリティからテクノロジー、お役立ち情報などを発信します。

猫でもわかる機械学習、深層学習入門と重要性

目次

機械学習や深層学習が話題になっているようだけど?

最近よく耳にするようになった機械学習深層学習(ディープラーニング)という言葉。

例えば”コンピューターの見る夢”などキャッチーな画像とともに語られることも多い一方、何じゃそりゃ?って思う人もたくさんいると思います。

 

これらの仕組みの結果は誰にでも理解できますし、インパクトを与えることが多いためよく注目されます。

しかしながら、その背後にある理論は非常に高度な数学に基づいており、機械学習を体系立てて学習するのはなかなか難しいものです。

 

というわけで、今回は難しい言葉等使わずできる限りわかりやすくまとめてみました。難しい言葉のところはスルーしてください。(興味があれば少しググってみてください。)

スポンサーリンク

 

 また間違っている点など指摘していただければ、修正していきますので宜しくお願いします。その他、適宜加筆修正予定です。

学習する記事です、機械学習だけに。

そもそも機械学習って何?

単純に言えば、任意のデータを元に法則を見出して、その法則に則った正しいデータを吐き出す仕組み(アルゴリズム)のことです。必ずしも目的を必要としません

・入力(データ)

・処理(パターン認識、形態素解析等)

・出力(処理結果に基づく最適なデータの表示)

が基本的な流れとなります。

 

そんなん、ただのf(x) = yじゃないかと思ったかも知れません。(であれば、ここでなぜy = f(x)と書かなかったかも考えてみてください)

では、今までは誰がその関数f(x)を決めていましたか?

 

それは、人間です。

学習ってなんだろう?

人間社会には教育という仕組みがあります。

・数字は0から9まで

・1に1を足したら2になる

こんなことは当たり前に学びますし、常識の範囲内だと思うことでしょう。

 

では、そもそも誰が0から9なんて使い始めたんでしょう。

なんで物が10個あると一桁で表現できないんでしょうか。(16進法)

そもそもケタ数って誰が決めたの?

 

意外と、シンプルなことのなかにも疑問はたくさん湧き出てきます。

生き物の強み、学習能力について

では、算数や国語を何も知らない大昔の人間になった気持ちで考えてみてください。

ある日、森に行った時に、りんごが2個落ちているのを見つけ、村に帰ったとします。

 

あなたはどうやって村人に、”森”に行った時に、”りんご”が、”2個”落ちていたのを伝えれば良いでしょうか。

森にさえいけばりんごの場所は明確ということと、”行った”と”落ちていた”という言葉はわかる前提で。

 

村人にこの状況を伝えるのは非常に難しいことが分かりますか?

この場合どういう風に村人が学習すれば良いかを考えてみましょう。

 ・”森”と”りんご”とは?

 ・”2個”とは?

森とりんご

簡単な方法は、村人達を引き連れて森の前に行き、森を指差して”もり!もり!mori!”と叫ぶのが良いでしょう。

りんごについては実物を持って帰ってきて、村人に”りんご!りんご!ringo!”と叫べばみんなそれを指差して”ringo! ringo!”って言ってくれるはずです。

その後、その村人が例えば犬を見て、”ringo!”ということも、"mori!"ということもないでしょう。

 

それは、村人が”色”と”輪郭”というデータを元に、”森”と”りんご”の特徴を理解したからです。

 

・森にはよくわかんないけど似ているものがたくさんあって、その色はほとんどが緑で、隙間は暗くて、緑の下には茶色っぽい線がある。

・りんごはまんまるくて赤くて、上の方は少しくぼんでいてちょろっと茶色い線が出ている。

 

このぐらいの認識かも知れません。でもこれだけでも犬を区別することはできますね。上が緑で下が茶色の犬も、赤くてまんまるい犬もいませんから。

では、”森”と”りんご”は、”色”と”輪郭”で区別できる=学習できることが分かりました。

 

あなたの村の村人は、これで”森”と”りんご”をだいたいの精度で学びました。

2個とは?

2個ってそもそもどういうことかを伝えたい時にどうすればいいか。数を表現するのに水は使い勝手が悪いです。

そこであなたはりんごをいっぱい抱えてきます。そして、りんごを1個、2個、3個、4個、5個のグループに分けて村人達を呼びます。その際、”カズ(数)!”、”カズ!(数)”と叫びましょう。

 

1個のグループでは”イッチ!イッチ!”。2個のグループでは”ニッ!ニッ!”と繰り返していきます。

その後すぐに、村人Aにりんごを2個同時に見せたら”ニッ!ニッ!”と微笑みながら返してくれることでしょう。5個見せたら”ゴッ!”って。いいですね。

 

あとは石ころを持ってきて石ころの説明(イシ!イシ!)と数の説明をやり直しましょう。

 

もう村人は、同じ”色”と”輪郭”を持つものが複数あった時に、二つ見えれば2と答え、三つ見えれば3と答える。

 

あなたの村人はこれで”数”を学びました。

やっと、2割の村人が森にりんごを2つ見つけられる

あとはあなたは村人を呼び出し、”モリ、(自分を指差し)イッタ、リンゴ、ニッ、オチテイル”といえば村人は理解してくれます。

で、実際に見つけに行こうとした村人のうち2割しか見つけられないんです。

 

見つけられない理由としては、以下のようなものがあるでしょう。

・森ではなく草むらにいってしまった。(上は緑で下は茶色、隙間は暗い、線いっぱい)

・さくらんぼを見て、りんごが二つと勘違いした。(赤くて丸く、上がくぼんで茶色い線がある物体が二つ)

そうですね。”サイズ感(=寸法)”を伝えるのを忘れてしまったようです。

 

森に行けばりんごは見つかるという前提を仮定しましたが、本当はりんごまでの道のりを伝える必要だってあります。そうすると一気に難易度が跳ね上がりますね。

 

ところで、”数が2個”というところで間違える村人は少ないかも知れませんね。これが、”定量化”することによるメリットでもあります。

大量の画像を解析して、人の顔などを判別するソフトなども実は裏側でさっきのりんごのようなことをやっているんです。

画像認識における機械学習

先ほどの機械学習の3点に戻りましょう。

・入力(データ)

・処理(パターン認識、形態素解析等)

・出力(処理結果に基づく最適なデータの表示)

先ほどの例で言えば、入力はりんごや森のような”視覚情報”です。今回あなたは指を差して村人に伝えましたが、機械に伝えるのであれば写真のデジタルデータが適切でしょう。

次に処理を行う必要があります。入力された写真が”りんご”なのかそうじゃないのかを判別する必要があります。

 

言うのは簡単ですが、適切なデータを入力し、適切な処理を行うのは非常に難しいのです。

次元の呪いと特徴抽出

さて、怖い言葉が出てきました。次元の呪いという言葉があります。

 

例えばある写真からりんごを見つけ出すには、どのような点に着目しますか?私ならまず赤いものを探します。

つまり、””という情報ですね。色だけ見ればいいなら簡単です、すぐ見つかります。

 

でも、色だけに着目してしまうと、赤いものならなんでもりんごといいかねません。では、輪郭も追加しましょう。丸いものだけ。

 

では、”色”と”輪郭”を見ながら少し頑張りました。その結果、さくらんぼを見てりんごが2個と言ってしまいました。困りましたね・・・。

 

じゃありんごのサイズを規定してその範囲内に収まったらりんごということにします。色と、輪郭と、寸法ですね。定規を持って頑張ります。

 

今度はどアップになっているりんごを見落としました・・・。そうか、スケールを考えなければいけないのか。では、写真に写っている他のものとの割合でなんとかしよう。

 

色と、輪郭と、寸法と、スケールですね。もはや調べるのが面倒です。

 

このように、着目すべき特徴を”次元”と呼びます。次元が多ければ大きいほど精度は高まりますが、その状態を認識するための必要なサンプル写真数も増えていきます。

 

赤色を認識するのに必要な写真はそれほど多くないでしょうが、赤くて丸くてりんごぐらいのサイズの物体が映る写真を識別するために必要なデータは膨大な量です。

 

つまり、特徴を増やせば増やすほど判別の精度は高まるのですが、その代わりに必要なサンプル数も増えてしまいます。

特徴が増えていくと、その他の特徴との組み合わせで認識すべき状態は指数関数的に増えてしまいます。(他にも、過学習という弊害もあります。)

 

これが、次元の呪いと呼ばれる所以です。(ここでは省きますが、他にも球面集中現象と呼ばれるものがあります)

実際問題、データは有限で増やすのも大変なことから、有限のデータからいかに効率的に精度を高く保ったまま解析を行うかというのも機械学習のキモなんですね。

 

また、りんごを見分けるために必要と仮定した色と、輪郭と、寸法と、スケールはりんごの特徴であり、そのりんごの特徴を見分けるために必要な情報を抽出することを特徴抽出といいます。

必要な特徴を減らすことができれば次元数が落ち必要サンプル数も減るため、次元圧縮と呼ばれます。

コンピューターと計算機理論が発達した今問題になることは少ないものの、次元が増えれば計算に必要な多項式時間も指数関数的に増えてしまいますから次元圧縮は重要です。

情報の重み

では次に、りんごを特徴付けるにあたって一番重要な情報はなんだと思いますか?赤色、丸み、サイズ・・・。色かな?どうだろう?良くわかりませんね。

よく”物事の優先順位をつけろ”と言われますね。そう、すべての特徴が全く同じ重みを持っているはずはないのです。

人間の顔であれば、”目”の重要性はとても高いでしょう。一方で、”肌の色”は”個人を特定するには”十分でない情報です。

 

ではコンピューターに認識させる際、特徴抽出だけじゃなくその優先順位付けも行ってやらなければいけないんでしょうか。大変ですね。機械単独で、なんとかできないものか。

それを実現するのには高度な技術が求められます。そこで登場するのが、深層学習・ディープラーニングと呼ばれるものです。

深層学習・ディープラーニングとニューラルネットワーク

深層学習のキモは、以下の2点です:

 

・どのような特徴抽出が、目的に対して適切か(最適なサンプル数・多項式時間)

・情報の重み付け(評価関数)を機械が学習し、勝手に改善していく

 

そして深層学習という概念は、ニューラルネットワークと呼ばれる手法と密接的に関わっています。

ニューラルネットワークって何?

ニューラルネットワークとは、Neural Network - 脳神経細胞のつながりを模した計算手法のことです。

では、どういうことか詳しく見ていきましょう。

 

脳神経細胞であるニューロンは、他のニューロンとシナプスと呼ばれる繋ぎ目で結びついており、その結合強度は可変です。

そして、無数のニューロンは無数のシナプスを通じて複雑な情報処理を行っています。

そして特徴的なのは、外からの刺激(インプット)を学習することで、シナプスの結合強度が最適化されていくことです。

 

例えば、”森にいく”という行動を例にとってみましょう。

まず

・危険度を判定するニューロン群は、森の野生動物に襲われる可能性があり危険と判断。

・空腹度を判定するニューロン群は、森にいって狩りをするか木の実を取らないと確実に餓死すると判断。

結果、空腹の時は森に行くという行動が推奨され、満腹であればリスクをとって森に行くという行動は否定されます。

 

つまり、空腹かどうかという点がこの行動において支配的になり、結果空腹度を判定するニューロン群のシナプスの結びつきが強化されます。

そうした最適化の結果、満腹なのにノコノコ森にいって危険を冒すという行為を避けることができます。

 

このように入力に対して、脳神経細胞はある目的の元”何が判断基準として適切で”、”何が重要”か、という処理を最適化できるのです。

似たような働きをコンピューターモデルで再現しようという試みがニューラルネットワークです。(パーセプトロン

ニューラルネットワークの模式図

では、ここで図を見てみましょう。

f:id:rk12liv:20160515102440p:plain

引用元:ニューラルネットワーク - Wikipedia

左端が入力、大きな丸がノードと呼ばれる処理を担当する部分、右端の矢印が出力です。

ある入力に対して複数のノードが反応・演算を行い、その結果をまたいくつかのノードに受け渡し、並列的に計算が行われます。(多くの従来的な手法は、ノードが1つの線形計算でしたがこの手法のおかげで非線形の問題も解けるようになりました)

更に、その結果の良し悪しをフィードバックすることによって各ノードの重み付けが最適化されます。

 

おかげで入力(サンプルデータ)が増えれば増えるほど重み付け(優先順位)が洗練・最適化され、例えば例外(アノマリー)と思われる入力に対しては優先順位を下げるといった機能向上が認められます。

 

別に小規模な問題であれば手計算でも行える程度の話で画期的ではないんです。

 

このノードを数億に増やしても、巨大な入力データ(ビッグデータ)を突っ込んでも、有限の多項式時間で解けるコンピューターのおかげで凄まじく強力な計算手法になるのです。

しかも、データさえ突っ込んでおけば機械が勝手にやってくれるんです。人間が食事をしている間にも、寝ている間にも。 

スポンサーリンク

 

深層学習・ディープラーニングの真髄

ニューラルネットワークをビッグデータに適用することで、機械は勝手にこんなことをしてくれます:

・大量の入力データから、ある程度共通化する要素を抜き出し着目すべき次元数を減らす

・その共通化する要素を判断している処理の重み付け(優先順位)を高める

 

お気づきでしょうか。機械学習のキモである”特徴抽出”と”重み付け”を人間の手を借りずに機械単独で行えるのです。

 

例えば世界中からランダムに写真を1億枚集めて、ニューラルネットワークに突っ込んだとします。

そうすると、ニューラルネットワークは写真の持つ”色・明るさ”の情報を元に”人の顔”や”海”、”空”などといった似たような特徴の写真を勝手に分類してくれます。

更に、”人の顔”を判断する上では瞼の位置と暗さ、”海”や”空”を判断する上では水色・青色の分布具合などそれら特徴を判別するノードの優先順位をあげてくれます。

 

もちろん教師なしのニューラルネットワークではそれらの特徴が”何か”はわからないので、その後”人の顔”、”空”、”海”などというように定義を教えてあげる必要はあります。

 

ディープラーニングでは、機械は人間の手を借りずに入力データを元に自分で考え、優先順位をつけ、なんらかの有意なアウトプットを出せるんです。

機械学習の汎用性と重要性

データさえあれば、機械学習における深層学習は勝手に分類・特徴抽出・重み付けを行ってくれるため非常に汎用性が高いのです。

今や音声データ、画像データ、文字データ(もっといえば実験データや金融データなど)など世界中には様々なデータが集まっています。

それらを機械学習に回すだけで、今まで人類が気付いていなかった特徴を抽出してくれるかもしれません。

 

つまり、例えば金融と化学という全く違う分野でも同じ機械学習の手法が適用できるんです。これこそまさに、人工知能というべきでしょう。

だからこそ、ありとあらゆる分野に応用されようとしていて、ここまで多角的に話題になっているのです。

機械学習の裏側にある数学

機械学習や深層学習の裏側は非常に高度な数学で埋め尽くされています。

 

例えば、

 

・大量のデータ入力に対する処理→理論計算幾科学、パターン認識、形態素解析

・特徴抽出→統計学、情報学

・重み付け(最適化)→離散数学

 

など一つの分野だけで既に4年間みっちり大学で勉強できるものの集大成です。当然、ここにプログラミング技術が加味されます。

なのでこれから機械学習について学んでいこうとする方も、すべてを理解しようとするのは避けるべきです。

全体像を把握し、処理の流れを理解した上で興味のある領域を見つける。その後、その領域は詳細に理解し、関連のある分野を大まかに勉強することが大事です。

まとめ

つまり、

・機械学習とは任意のデータを元に学習し、その学習を元に結論を出すことができる仕組み。でも学習の部分は、多少人の手が必要

・深層学習-ディープラーニングとは、機械が特徴抽出と重み付けを”自動化する”つまり勝手に賢くなる仕組み

ということです。もう一度目次を貼っておきますので、今一よくわからなかった部分をおさらいしましょう。