#はじめに
私は前職ではソーシャルゲームのwebエンジニアをやっていました。
いわゆる APIサーバーの構築などをやっていました。
数学とか数字とかすっごい苦手な雰囲気エンジニアです。
そんな私が、縁あってAIベンチャーに入ったので、AIの勉強をしてみることにしました。
まず、手始めに Udemy の 「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」 からニューラルネットワークについて勉強してみたので、数式とか使わずにざっくりまとめてみたいと思います。
#ニューラルネットワークとは
「人間の脳神経系のニューロン(神経細胞)が結合によりネットワークを形成したもの」だそうです。
AIのニューラルネットワークは人間のニューラルネットワークを模倣したものになります。
#ニューラルネットワークは層構造
下の図のように層に分かれて構成されています。
左の入力層から中間層へ、中間層から出力層へデータが流れていきます。
この丸1子がニューロンとなり、複数のニューロンがつながっているこがイメージできます。
#ニューロンについて
1つ1つのニューロンについてはこんな感じになります。
複数の情報を受取ります。
その「入力値」に「重み(Weighat)を掛けた」ものに、「バイアス」を足して結果を求めます。
重みとは結合の強さを表し、バイアスとは結果に偏りをもたせるためのスパイスのようなもの?
考え方としては、ここのニューロンは学習の中で、それぞれ別の重みとバイアスを持つようになり、それぞれのニューロンに個性(差)ができあがり、それぞれ別の判断を下すニューロンが複数つながることにより、複雑な結果を返すことができるらしいです。
上記で「入力値に重み(Weighat)を掛けて、バイアスを足したものが結果となる」と言いましたが、正確にはその結果を活性化関数を通したものが出力されます。
活性化関数
活性化関数とは、出力値を決定する関数のことを言います。
いろんな関数が活性化関数として使用されるようです。
例えば Udemy の講座でもでてきた シグモイド関数 という関数は、「0または1」という2つの解を求める場合によく使用されるそうです。
活性化関数を通ることで、入力値から 「これは〇〇である」 or 「これは〇〇ではない」 といった結果を返すことができるそうです。
#ニューラルネットワーク
さて、ニューロンが重みとバイアスによって、それぞれの解釈で結果を返すということがわかりました。
このニューロンがたくさん結合したものがニューラルネットワークということもわかりました。
では、これがどうやって機械学習をするのでしょうか?
#学習とは?
過去1000日分のビールの売上を学習し、未来の売上を予測したいとします。
このとき、1000日分の売上(答え)とそれに紐づくインプット(例えば1000日分の気温 と 天候)の情報を渡します。
そうすると、インプットから答えを出し => 答え合わせをする といったことを繰り返します。
結果、インプットと答えの中の関係性を勝手に見出し、未来を予測するようになるそうです。
#バックプロパゲーション
上記で説明した、「インプットと答えの中の関係性を勝手に見出し、未来を予測する」ことを実現しているのが、__バックプロパゲーション__です。
先程、ニューロンには重みやバイアスがあり、それにより回答が変わるという話をしましたが、この重みやバイアスを適切に調整することが学習となります。
さきほどのビールの学習でいうと、インプットから予測した結果を正解と比較します。
そして、正解に近づくように重みやバイアスを調整していきます。
この重みやバイアスが調整されたニューラルネットワークは、インプットと答えの中の関係性を見出した結果になるわけですね。
この、関係性にそって未来を予測すると、それなりに実績にそくした結果が得られるようになります。
#まとめ
これが ニューラルネットワークのざっくり概要です。(はずです)
本当は自前のソースコードなんかも書いてみようと思ってたのですが、間に合わなかったので割愛しました。
ニューラルネットワークについては、ネット上でしらべても数式が出てきた時点でサッとページを閉じていたのですが、ようやく概要が理解できました。
機械が物事を考えるってこういう仕組みで成り立ってるんだなって事がわかりました。
人間の脳の仕組みと同じって...
脳の仕組みを解いた事もすごいし、それをロジックにして機械に落とし込むなんて驚きでしたね。
さて、私もどんどん勉強して目指せ__スカイネット__!!