読者です 読者をやめる 読者になる 読者になる

アラカン"BOKU"のITな日常

あれこれ興味をもって考えたことを書いてます

専門用語ナシ!ディープラーニングの仕組みを15分で説明する。

専門用語や数式・数学用語がでてくるとフリーズしてしまう人達相手に、15分程度の持ち時間で、専門用語は一切つかわず、ディープラーニングの仕組みを説明して理解させろという、相当に、無茶な依頼に対応する機会がありました。

 

そんな資料は見たことないので、仕方なく自分で資料をつくりました。せっかくなので、ブログでも紹介しておこうと思います。

 

そもそも、ディープラーニングは何ができるのか?

ディープラーニングでできることは、入力したデータに対して、予め用意されている選択肢のどれである確率が一番高いのかを推測することです。

 

例えば、入力されたデータ(写真とでもしましょう)が「りんご」なのか「みかん」なのかを推測する時のイメージはこんな感じです。たいては、確率が一番高いものを選んで、答えとして返します。

f:id:arakan_no_boku:20170415130344j:plain

 

ポイントは「予め用意された選択肢」が必要であることです。

 

この選択肢がたくさんあってもいいのですが、人間のように、「これは、用意された中にはないけど、ひょっとしたら、栗かもしれない」みたいに、用意されてない選択肢までふくめて推測するようなことはできせん。

 

 どういう仕組みで推測を行うのか?

最初から最後まで計算です。

 

データを細かい単位に分割して、それと「重み」と呼ぶ数字を掛け算したものを、全部足しこんでいって、その答えから用意された選択肢ごとの確率(上記例なら、りんごである確率、みかんである確率)を計算します。

f:id:arakan_no_boku:20170415143150j:plain

 

ポイントが2つあります。

ひとつは「重み」です。

 

正解率を左右するのは、この「重み」です。「重み」を、正解率がいちばん高くなるような数値に設定することで、計算だけで答えを導きだせるようにしているわけです。

 

つまり、ディープラーニングで「学習する」というのは、この「重み」の数値を適切な値に調整していく作業のことを言います。

 

もうひとつは「掛け算した結果に一手間加えている」ことです。

 

その一手間とは、データと重みを掛け算した結果をそのまま全部合計するわけではなく、計算結果が「0以上」の場合はそのまま合計するけど、「0より小さい」場合は合計しない(0を合計する)みたいな判断を毎回していることです。

 

これは、そのデータの特徴(他との違い)をより明確にするためにやってます。違いの小さな部分を切り落とせば(0にすれば)、特徴の部分だけが残り、判断しやすくなって正解率もあがるという仕掛けです。

 

正解率が高い「重み」はどうやって見つけるのか?

人間と同じで学習をします。学習のイメージはこんな感じです。

f:id:arakan_no_boku:20170415150205j:plain

 

学習するには、入力データと答えがセットになった「学習用データ」が必要です。

 

学習用データを今の重みで計算して答えを出して、セットになっている正解と計算結果で答え合わせをして、どのくらい間違っているか「正解との差」として求めます。そして、その正解との差が小さくなるように「重み」の数値を、少しだけ増やしたり減らしたりするわけです。

 

一度の学習だと、重みの変化はほんの少しですが、これを何万回も繰り返さすことで、だんだんと正解率の高い「重み」に調整されていくわけです。まさしく「学習」ですね。

 

なぜ、”ディープ”ラーニングと言うのか?

さっきまでの例は、わかりやすくするために単純化していますが、実際には重みを使って掛け算していく部分は1回やって終わりではありません。

 

下図のように、複数の階層で上位の結果を入力データにして計算して、結果を次の階層に渡すようにして、繰り返し計算していくのが普通です。

f:id:arakan_no_boku:20170415153739j:plain

 

 理由は「そうすると正解率があがる=性能がよくなる」からです。

 

最初の頃は18階層とか20階層くらいでしたが、最近は150階層を超えるような構成まででてきています。

 

このように複数階層を積み重ねて処理を行うので、ディープ(深い)ラーニングと呼ばれるわけです。

 

以上・・です。

 

ゆっくり喋って、だいたい15分くらいだとこんなもんです。

 

エッセンスだけですけど、こんな感じでアウトラインがわかってから本を読むと、上で書いていた「正解との差」が「損失率」のことだったのか、とか、「そのデータの特徴(他との違い)をより明確にするために、違いの小さな部分は切り落として(0にして)」の部分が「reLu関数」のことなのかなどと、多少は理解できる部分が増えたみたいです。

 

この記事も、どなたかのお役にたてば、いいんですけど。 

 

f:id:arakan_no_boku:20170404211107j:plain