最近流行りのディープラーニングって何?
ディープラーニングってちょっと勉強しようと思うと、謎の数式が
出てきたりして、げっそりするパターンありますよね。
ここでは数式も使いますが、数式が理解できなくても
「とりあえず人に説明できるくらいには理解する」
を目指したいと思います。
ディープラーニングとは、ニューラルネットワークを多層にして構築したものです。
、、、、。にゅーらるねっとわーくって何だよって話ですよね?
まずはニューラルネットワークを理解しましょう。
ニューラルネットワークを理解する事がディープラーニングを理解するための王道です。
ニューラルネットワークとは機械学習の入口
ニューラルネットワークは人の神経細胞(ニューロン)をモデルにしたものです。
下のような図で表します。
図で示したのは1つのニューロン(単一ニューロン)です。
上の図をざっくり説明すると、”入力1と入力2のそれぞれの入力に重みをつけて計算するとなにかが
出力されるということです。そして、何が出力されるかは中間の円の部分で決まります。
中間の円の部分でもし計算結果zがtで表された値以上であれば1を出力、
それ以外は0を出力します。
zの計算式として描くと次のようになります。
$$z=x_1w_1+x_2w_2$$
シグマを使って書くと
$$z= \sum_{i=1}^2 x_iw_i$$
、、、、、。この数式なんだっけ?と思いましたね?
大丈夫です。なんとなく理解できるように以降は書いていきます。
つまりはzの値とtの値を比較して0か1を出力するということです。
どのように利用するか。試してみます。
産業まつりに行くべきか否か。それが問題だ。
週末に産業まつりが行われます。あなたは産業まつりに行くかどうか決めようとしています。
あなたの判断に影響を及ぼす要因は、2つあります。
- 天気はいいか?
- あなたの恋人も一緒に行きたがっているか?
この2つの要素を入力として使います。
天気がいい:\(x_1=1\)
天気が悪い:\(x_1=0\)
恋人が行きたがっている:\(x_2=1\)
恋人が行きたがっていない:\(x_2=0\)
値:\(99\)
値が99を超えた時に祭りに行くことを決意するということにします。
意外と分かってくる「重み」
「重み」についてなんとなくわかってくるものがありませんか?
そうです、重みは貴方の重要とする要素を表します。
重み\(w_1\)が大きいほど、天気を重要視します。
例えば\(w_1\)が100なら天気が良いだけで、祭りに行くことを決意します。
もし\(w_1\),\(w_2\)ともに50の場合は「天気が良くて、彼女が行きたがってる場合」
のみ、祭りに行くことになります。
単一ニューロンの計算はなんとなく理解できましたか?
次はもう少し人工知能らしい例で説明します。
機械に学習させてリンゴを区別する
リンゴを判別するモデルを作ってみます。
これは、どうなるでしょう。
条件は次のようにします。
色が赤:\(x_1=1\)
赤以外:\(x_1=0\)
重さが500グラム以上:\(x_2=1\)
重さが500グラム未満:\(x_2=0\)
値:\(3\)
式は先ほどと同じです。
$$z=x_1w_1+x_2w_2$$
これで赤くて500グラムのものはリンゴと判断できます。
ただ、この条件だと赤いピーマン(パプリカ)もリンゴになっちゃいます。
じゃあどうすればよいかというとニューロンを増やしていくのです。
例えば、形や大きさを判断に加えてもいいと思います。
球体であるか、大きさが30センチ以内かどうか等です。
このようにニューロンをネットワークにすることで複雑な処理も可能になります。
このネットワークをニューラルネットと呼びます。
これをたくさんつなげると複雑な処理ができそうだなということが感覚的に
理解できると思います。
機械学習とは重みを調整する事
機械学習というのは端的にいうと、重みを変えていくことです。
同じリンゴの例ですが、
先ほどの例とは重みが異なります。
色が赤:\(x_1=1\)
赤以外:\(x_1=0\)
形が丸い:\(x_2=1\)
形が丸以外:\(x_2=0\)
値:\(3\)
今回の場合、たとえば500グラムのみかんを入力した場合でもリンゴと判断します。
もちろんニューロンを増やして対応するのも1つの手ですが、また改善の余地があります。
そう、重みです。
これを読んでるあなたもリンゴとみかんを区別する場合、形よりも色を重視するはずです。
色の重み1は小さすぎます。逆に形の重みが大きすぎるのです。
この重みを\(w_1=3\),\(w_2=2\)変更することで500グラムのみかんをリンゴと判断せずに済みますね。
この重みを変更して適切な回答を得ることを「学習」と呼びます。
ディープラーニングの本質
最初に書きましたがディープラーニングとは、ニューラルネットワークを多層にして構築したものです。
階層化されただけで基本的な考え方は同じです。
一番左の入力層と右端の出力層の間にあるのが中間層。これがディープラーニングのポイントです。
ここの階層が深い(ディープ)であれば、より高度な処理ができるというのは
ニューラルネットワークの内容からお伝えした通りです。
では機械学習について考えてみましょう。
ある画像認識を上のようなたくさんの階層があるネットワークで処理するとします。
このとき、良い結果が得られなかった場合、重みを変更しますが、どこの重みを変更して
いいかわかりません。
すべてのニューロンが結合しているので、1つの重みを変更するとほかにも影響が
出てしまいます。そして重みの変更をするにも、増やせばいいのか、減らせばいいのか
どちらに変更したら良い結果が出るのかわからないのです。
ではどうするか。
ニューロンは変数をもつ数式で表すことができるので、グラフで表すことができます。
先ほど学んだ単一ニューロンの式は0または1のみ出力します。
結果、グラフは次のような形になります。
この形だと、wを増減させても値の影響で出力に変化が見えないため、
最適なwの値を決めることが困難です。少し難しくゆうと、微分ができない関数です。
この問題を解決するために、値を用いず、zの値を活性化関数と呼ばれる微分可能な関数に
適応することで学習を効率よく進めていきます。
微分ができるということは、関数の増減方向が判断できるため学習に適しています。
シグモイド関数
ReLUとソフトプラス関数
青がReLU(ランプ関数)、緑がソフトプラス
難しいようにみえますが、値で0または1の値ではなく、細かい数字を出力させるのが
活性化関数を利用する目的で、得られた数値は重みを変更する指標として有用なものとなります。
画像識別のディープラーニング
最後に例として画像認識を行うディープラーニングについて簡単に説明します。
人間が見るとどちらも9と認識することができますが、コンピュータで解析
する場合、少しのずれがあった場合でも融通が利かず、異なるものとして認識されます。
人間が9と認識できるのは、9の「特徴」を捉えることができるからです。
画像の処理でよく用いられるConvolution Neural Network(CNN)ディープラーニングで解析すると、入力から出力までの間に特徴を抽出することできます。
得られてた特徴に重みをつけて認識を行っていくということです。
どのような処理で機械が学習できるようになるのか
実際の処理を大まかに説明つると、入力された画像を小さなパーツ毎に分けて
一致する部分がないかを調べていきます。
今回の例では3×3マスのパーツとして左上から1マスずつずらして特徴を計算していきます。
「9」の場合は円の部分と右下から伸びる部分に一致する特徴がみられます。
次は取り出した特徴が元の画像とどのように関連しているか調べていきます。
この時黒の部分を1,白の部分を-1として、各ピクセルの値を掛け算したものの総数を掛けたピクセルで割ります。
もし特徴がすべて一致する場合は結果は1になります。特徴が全く一致していない場合は-1に
なります。
この処理を全ての特徴で行います。
1つの特徴を使って計算した結果が次の通りです。
円の左上の部分の特徴部を持つ部分に特徴が表れていることがわかります。
このような特徴抽出を繰り返し行うことで、より具体的な特徴を得ることができます。
画像の解析においてはこの特徴に重みを付けて判断をおこないます。
猫が移った画像をたくさん処理すれば
猫の特徴を認識するのです。
つまり、ひげがある、耳がとがっている、毛が生えてるなんて特徴を
人が指示する必要がない、ニューラルネットが自ら特徴をとりだすんです。
もしかしたら中間層の部分はもう人とは違う特徴をとらえているのかもしれません。
コンピュータにしか分からない特徴なんてものがあるかもしれません。
第一回ディープラーニング塾まとめ
いかがでしたか?数式まできっちり理解しなくとも、ざっくりディープラーニングが
理解できたのではないでしょうか。
あくまでここで書いたのは機械学習の表面的な部分をざっくりまとめたものです。
ディープラーニングについてはこれからも書いていきたいと思います。
それでは、また。
- ディープラーニングとはニューラルネットワークを階層化したものである。
- 機械学習とは重みを変更することである。
- ディープラーニングでは重の変更を効率化するために活性化関数を利用する
- ディープラーニングはピクセルに分けて画像の特徴を抽出する