見出し画像

マンガで分かるニューラルネットワーク 第1話 〜フィードフォワードネットワーク関数〜

ワンちゃんでもわかるNN_003

ワンちゃんでもわかるNN_004

ワンちゃんでもわかるNN_005

ワンちゃんでもわかるNN_006

ワンちゃんでもわかるNN_007

ワンちゃんでもわかるNN_008

ワンちゃんでもわかるNN_009

ワンちゃんでもわかるNN_010

ワンちゃんでもわかるNN_011

マンガで分かるニューラルネットワーク〜目次〜

次 : 2話 ネットワーク訓練

以下、文字起こし。

ニューラルネットワーク 作:うぇるち(@welchi)
アナウンサー「ディープラーニングがまた快挙です。なんかすごい事をやりました」
うぇるち「もうだめだ。世界はAIに支配されてしまうんだ。私の職もAIに奪われてしまんだ。」
???「それは間違っておるぞ!」
う「誰!?ぶっ」
う「あ…あなたは…10歳で東大を主席で卒業した後ハーバード大学で3日で博士号を取って今ではNASAで働いているお姉ちゃん!」
姉「ジョブズはワシが育てた」
姉「お前はまだAIのなんたるかを知らない!ワシが教えるからついて来い!」
う(なんであたし殴られたの…)
姉「ところでお主、ニューラルネットワークは知っておるか?
う「し、知らない…」

5.1 フィードフォワードネットワーク関数
姉「最近AIがブームじゃろ?あれは、ニューラルネットワークという人間の脳を模したAIが、すごい精度を達成して流行ったんじゃ」
う「人間の脳を真似したっていうのがよくわからないわ」
姉「よし、では説明してやろう。カモン!ニューロンくん!」
う「うげぇ!!!」
姉「脳の中身はニューロンという神経細胞が、電気信号を送り合うことで成り立っておる」
「眩しかったら目をつむるじゃろ?あれは、目から飛び込んだ光という信号を、ニューロンが処理していった結果、目をつむるという行動を出力しているのじゃ」
「ニューロンくんのパーツはこうじゃ」
「入力を受ける樹状突起。次のニューロンに情報を伝達する軸索。出力を司るシナプス」
「シナプスと樹状突起がくっついて軸索を電流が通ることで情報が伝達されるのじゃ」
「脳は1000億個ほどのニューロンが繋がりあって成り立っておるのじゃ」

姉「そしてこのニューロンの連鎖をコンピュータ上で再現したのが…」
パカッ
う「ひえっ」
姉「ニューラルネットワークの中でも、もっとも基本的なアルゴリズム、多層パーセプトロンじゃ」
「多層パーセプトロン ではニューロンのことを ユニットと呼ぶぞ」
ユニット君「僕ユニット君」
う「なるほど、AIといってもたくさん種類があるのね」
姉「うむ、その中にニューラルネットワークという種類があって、さらにその中に多層パーセプトロンがあるというわけじゃ」
「多層パーセプトロン でもユニット君は他の ユニット君と繋がって 情報を送るぞ」(触手は次層のユニット数だけ増える)
「とは言っても コンピュータじゃから 受け取る情報は、 数値じゃな」
「多層パーセプトロンでは、複数の入力信号を受け取って一つだけ次へ出力するぞい」
う「数字なんて送って何になるの?」

姉「そうじゃのう、では犬と猫を分類する問題を考えようか」
「最初のユニット君に 識別したい動物の情報を与える」
「そしたらユニット君は、それぞれの情報のうち、犬と猫を分類するのに重要な情報ほど強く送る。これが重みパラメータじゃ」
「重要な情報ほど 強い信号として、 送られるメカニズムじゃな」
う「んー?重みとかいう情報の重要度って、どうやって決めてるの?」
姉「おー! いい質問じゃな 正解は「AIが自動で学習する」じゃ」
「要するに機械学習とは この重みをデータから 自動で学習してしまう というだけのことじゃ」
う「ふーん 情報の重要度を 自動で学習する感じなのね」
姉「じゃじゃじゃ」
姉「そして、それぞれの信号に重要度をかけたものを足す」
う「待ってそれも分かんない なんで信号を足すの?」
姉「これは本物のニューロンの 動きを再現しとるんじゃな。 ニューロンでも受け取った 信号の総和が一定値以上であれば 次のニューロンへ情報を 伝達するんじゃ」
「ニューロンが受け取った 信号の総和を活性と呼ぶ そしてニューロンが 閾値(限界値)を超えて 次のニューロンへ情報を 伝達することを発火と呼ぶぞい」
ユニット君「閾値超えたし伝えよー」

姉「そしたらユニット君は 活性を複雑な数値に 変換するぞい。この活性を変換する関数を 活性化関数と呼ぶ」
「活性化関数は非線形関数(※) であることが重要じゃ 複雑なデータを識別する ことができんからじゃ」
※ 非線形関数...線形(直線でない形)に変換する関数

う「ん?ん? 複雑なデータって?」
姉「活性化関数が無い場合ユニット君はいくら 情報を伝達しても線形(直線)な識別しかできんのじゃ」
「しかし活性化関数を使うと表現力が向上し こうした複雑なデータも識別できるのじゃ」
「多層パーセプトロンは ユニットを3層以上 重ねれば、 どんなに複雑なデータ も識別できるぞ」
「このことから ニューラルネットワークは 万能近以器と呼ばれておる」

姉「そしてネットワークを 数値が流れ、最後に出力 されるのが識別結果 という訳じゃ」
「こうやって情報が、 前へ前へ伝わって いくことを順伝播 と言うぞい」
「順伝播するためには、ネットワークが フィードフォワード(※1)な構造で あることが重要じゃな これは出力が入力の決定論(※2)で あることを保障するためじゃ」
う「フィードフォワード でない場合はどうなるの?」
姉「フィードフォワードじゃないと ネットワークを関数の形で表す ことができないからそもそも 数式で表したり出来んなるのう」
「ループする リカレントニューラルネットワーク というものはあるがここでは 扱わんぞ」
姉「で、答えが間違ってたら、躾けてやるんじゃがこれは次以降でな」
「それは 犬じゃ 」
う「ひえっ」

ネットワーク図

姉「さてと... 数学的にもきちんと 理解しとくかの、 ここでは次のような 2層ネットワークを 考えるぞい」
う「えーと、隠れ層って何?」
姉「人間には入力層、出力層以外の入出力が見えんじゃろ?なので、 この間にある中間層を隠れ層と言うんじゃ。俗に言うディープラーニングは この隠れ層がめっちゃ多いニューラルネットワークのことじゃな」
う「あ、あと3層あるのに2層と言うのね?」
姉「ユニットが実際に仕事をしとるのが、隠れ層と出力層の2層じゃからな。入力層は 数値を渡すだけじゃからカウントしていないんじゃ」
「さて、各ユニットが行う計算を見ていこうか。ここではZ1に注目するぞい。Z1の活性 (入力の重み付き線形和)alを数式で表すとこうなる。」
う「えーと、W10X0というのがわからないわね。 バイアス項?黒いユニットがあるけどこれは何?」
「バイアス項はただの定数1じゃな。バイアス項の重みはバイアスと言って、発火しやすさをコントロールする特別な重みじゃな」
う「発火のしやすさ?」
姉「うむ、バイアスは閾値を式変形して1つの式で表したもの、じゃな。 」
「次のように式変形して、-θをW10x0で表記した、と言えば良いかのう?」
う「わざわざ閾値を重みとして表す理由は何?」
姉「こうすると活性をシンプルに表せるんじゃな。」
う「あ、a1の式がシンプルになった。」
姉「楽をするための手間は惜しまないのがエンジニアリングの醍醐味じゃ」
う「 Σ ← この記号の意味が分からないけどね。」
姉「これはシグマといって、総和を表す記号じゃな。 ここでは WiXiを0〜1まで順々に代入して全部足す、という意味じゃ。」
う「入力値に重みを掛けて全部足しているということね。」
姉「そうじゃ、そして、最後に活性化関数を通す。」
「これがユニットZ1の出力じゃな。」
「他の隠れユニットを表すには、添字1を任意のjに置き換えれば良いだけじゃ。 」

ネットワーク全体を表す式
姉「さて、では、出力層のユニットも見てみようか。 ユニットYに注目するぞ。Yの活性はこうじゃ。」

う「あ、隠れ層の活性と同じ」
姉「さらに活性化関数を通す。」
う「あ、隠れ層の出力と同じ形になった」
姉「そのとおりじゃ。多層パーセプトロンは、層が増えるたび、 同じ式を合成していくんじゃ。最後に、ネットワーク全体を式で表すぞ。」
「yk(x, w)は入力値x,重みwのときのk番目のyの出力、という意味じゃぞ。」

う「ほえ~。ニューラルネットワークって人間の脳を真似したものだったわよね? 人間の脳も数式にできるのかしら?」
姉「こんなに簡単ではないと思うがのー。そうじゃったら面白いな」

この記事が気に入ったらサポートをしてみませんか?