ニューラルネットワークの一番基礎のとこ
風邪引いた。クソが。(体調管理には気をつけましょう)
気怠さがなかったとはいえ高熱出た上に他の症状がそれっぽかったのでインフルの検査受けたけど陰性でした。一応抗生剤と症状緩和の薬は処方してもらいましたが。
まあそれはさておき、自分は最近AI分野をちょっとつまんでいます。
基礎理論のとこで「微積分?線形代数って何だっけー。うーん!忘れたw」ってレベルだったのでまずはそこから始め、さっと、ニューラルネットワークの基本、単純パーセプトロンやロジスティック回帰あたり勉強してます。
今回は数学の話を1割、ニューラルネットワークの基本の話を8割くらいして、残り1割で次回実装する予定の単純パーセプトロンやロジスティック回帰の簡単な紹介をして締めます。
細かい理論とか抜きで雑に基礎となる数学の紹介
微積分
・微分
極小レベルで瞬間の変化量を算出するためのほにゃらら
・積分
極小レベルの瞬間の変化を集めて、ある範囲での変化を算出するためのほにゃらら
線形代数
・ベクトル
お馴染みの矢印のやつ。要素(成分)の集合という側面が重要。
・行列
多次元配列。ベクトルは行か列の配列で表せるので行列∋ベクトルといえる(かも)。
ニューラルネットワークの入力と出力の基本
・ニューラルネットワーク
ニューロンが複数集まって形成される。いくつか層をもつ。
・ニューロン
閾値が設定される。入出力がある。
ある入力に対して、ニューロン同士の結合度に基づく重みを掛け合わせた値が、ニューロンに設定された閾値(θ)を超えるかどうかで次のニューロンへの出力が変化する。入力xに対する重みをwとし、そのニューロンにおける出力を計算する関数をfunc(…)とするとy=func(xw-θ)で表せる。
入力が複数あるとするとy=func((x1w1+x2w2+x3w3…)-θ)。・・・(1)
ベクトルの内積がA[a1,a2,a3…]*B[b1,b2,b3…]=a1b1+a2b2+a3b3+…なので
入力の集合を列ベクトルX[x1,x2,x3…],重みの集合を列ベクトルW[w1,w2,w3…]とみなし、(1)式をy=func(X*W-θ)に簡略化できる。・・・(2)
ニューラルネットワークを訓練するというのは、入力に対し、望む出力を得られるように重み(w)と閾値(θ)を最適化するということ。
モデル
単純パーセプトロン
・出力が0か1のいずれか
・(2)式のfunc(…)がステップ関数と呼ばれるもので実装される
ロジスティック回帰
・出力が0から1(範囲)
ex)0.77など
・(2)式のfunc(…)がシグモイド関数と呼ばれるもので実装される
次回予告
単純パーセプトロンとロジスティック回帰をそれぞれpythonで実装する。(気分で変わる)