AIってよく聞きますよね。

AIが人工知能であるということは知っていて、画像認識とか翻訳とか何でも学習できるものっていうイメージですよね。

ではこのAIはどのようにして学習しているのでしょうか。

AIというのはプログラムからできているのでそこにはアルゴリズムがあるはずですよね。

そのAIが学習していく仕組みをわかりやすく説明できたらと思ってます。


 

 ニューラルネットワークとは

AIはどのように学習するのでしょうか。

その学習の基本はニューラルネットワークにあります。

ではそのニューラルネットワークとは何でしょうか。

ニューラルネットワークとは人間の神経細胞を真似したものです。

人間の神経細胞を単純化してコンピュータの中に落とし込んだのです。

ではその具体的な仕組みはどうなっているのでしょうか。

 

ニューラルネットワークでは最初に情報を数値として受け取ります。

その数値に掛け算と足し算をすることで答えとなる情報を数値として計算しているのです。

例えば犬の画像を認識するにはどうすればよいでしょうか。

画像を細かく分割し、1ピクセルごとの色を数字として表した情報をニューラルネットワークの中に入れます。

(実際はもっと最適な方法で計算されているそうです)

そしてその数字を足し算や掛け算をして、犬を表す数値に近い値が出ればAIとして機能していることになります。

この犬の画像を数値として入力したとき、犬を表す数値に近い値を出すようにうまく足し算や掛け算を指せるようにすることを学習と言います。

 

その学習については後程説明します。

このニューラルネットワークの具体的な計算についてこれから説明しようと思います。

具体的な計算を知ると、意外と中身が難しくないことがわかりAIの本質を理解することにつながると思います。

そして単純なものならニューラルネットを自分で作ることもできるようになると思うので、ぜひ読んでみてください。

 

以下、多くの専門用語が登場します。

しかしこれは言葉が長くならないようにし、文章をすっきりさせてわかりやすくするためです。

例えば以下登場する「重み」という単語は、「ノードという数値が入る箱に入った数値にかける変数で、ノード同士をつなげるエッジという線それぞれに異なる値として対応する。」

と非常に長くなります。

しかしすべてわかりやすく説明しているので、読んでいるうちにこの単語なんだっけと忘れてしまったら元に戻って読み返すと思い出せるようにしてありますので安心してください。

 

ニューラルネットワークのしくみ

ニューラルネットワークの足し算や掛け算の計算を図式化すると以下のようになります。

 

f:id:KyoyoBanana:20200912002257p:plain



 

ニューラルネットワークはこのように円がつながった構造で表されます。

この円をノードと言い、数字が入る箱を表します。

このノードをつなぐ線をエッジと言います。

このエッジにつながれたノードにどんな風に数字が入っていくのかを説明します。

最初の情報を数字として入力されるノードの集まりを入力層と言います。

そしてその入力にwという変数がかけられます。

このwを重みといいます。

重みはエッジごとにそれぞれ異なる数値です。

この入力に重みがかけられた数値はエッジでつながった次のノードへ進んでいきます。

この入力層の次に進んだ先のノードの集まりを中間層と言います。(隠れ層とも言います)

 

この中間層には入力に重みがかけられた数値が足されて、活性化関数と呼ばれるものに入れられた数値が入ります。

 

急に活性化関数というものが出てきましたが、これは数値を答えに近づきやすくするために調整するものです。

詳しくは後でまた説明します。

 

これまでをまとめると、

 

  1. 入力層のノードという数値の入る箱に、情報が数値として入る
  2. その入力に重みという変数がかけられる
  3. 同じ中間層のノードにつながった入力層のノードの数値が足し合わされる
  4. 足しあわされた数値が活性化関数に入れられる
  5. 活性化関数に入れた後出てきた数値が中間層のノードに入る

 

ここまできたらもう理解したも同然です。

中間層からエッジでつながった先のノードの集まりを出力層と言いますが、出力層への計算は入力層から中間層への計算と全く同じだからです。

中間層のノードの数値はまた重みという変数がかけられ、同じ出力層のノードにつながった数値が足しあわされ、活性化関数に入れられて出力層のノードに入ります。

 

この出力層のノードに入った数値が答えとなります。

先ほど挙げた例で犬の画像を入力して犬と猫を判別するのなら、犬を0、猫を1と決めておき、0に近ければ犬の画像であるとわかります。

また出力層が複数ある場合、出力層のひとつのノードを犬、もう一つのノードを猫に対応させ、0~1の値を出すような活性化関数に入れれば、犬に対応したノードの数値の方が猫に対応したノードより1に近ければその画像は犬の画像だとわかります。

 

ではその犬に対応した値を出力層に出力するにはどうしたらいいでしょうか。

犬の画像を入れられた時に犬に対応した値を出せるようにすること、すなわち適切な出力をできるように調整することを学習と言います。

この学習の方法について具体的に説明していきたいと思います。

 

 

と、思ったのですが結構長くなってきたので説明は次回に回そうと思います。

次回はバックプロパゲーションと勾配降下法についてです。

微分の知識が必要になってきますができるだけわかりやすく書きたいと思います。