#まえがき
最近巷で流行っている人工知能だのAIなるものを、素人の自分もしてみむとしてするなり
ということで、1冊本を買ってきて、それの実装をやってみるという流れを記録することにしました。
対象の本は以下の通り。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
自分の目標として、書いたものを人に見せることで、発信したいという思いもあるので、
アウトプットの訓練も兼ねて、Qiitaに投稿することにしました。
生暖かい目で見守ってやってくださればと思います。
5/5現在、3章の途中まで執筆中。さいごまで心折れないようにがんばる。
筆者レベル
- 業務としては4年ほどASP.NET MVCを触って開発しています。Windowsプログラマです。
- 業務で触る言語は上記以外だとC#がメインで、少しだけC++を触ります。
- またWebフロントエンドも触るのでHTML/Javascript(jQuery含む)の知識はすこしあります。
- なお、業務ではPythonは全く出てきませんし、ほとんど触ったことはありません
- 況や人工知能をや。(大学の授業で習ったけれども、身についている感はないです)
というわけで、プログラミングはできるけど、Pythonや人工知能はよーわからん、という人向けのお話になります。
とはいえ、本の内容そのままのコードをここに記載することは無いと思います(本に書いてあるままですし)
実装に入る前に
※ 今後、この記事ではWindows 10 Pro(x64)を使用することとします。
個人的に、ちゃんとしたIDE(統合開発環境)は欲しい。
Visual Studioに慣らされた体の自分にとって、IDEがないのはとんでもない苦痛です。
ということで、本の中では特に触れられていませんが、統合開発環境を入れることにしました。
入れたのはこちら → PyCharm
とりあえず、FreeのCommunity版を入れることにします。
ついでに、1章で言及されているAnacondaディストリビューションから、Python 3.6を入れます。 → Anaconda
使っているうちに嫌になったら、お気に入りのエディタを探す旅に出ることにしますが、今の時点ではこれでいきます。
本題
1章 Python入門
1章はサクッと。メソッド名定義はdef
、コンストラクタは__init__
で定義するのね。
自分のインスタンスをself
で明示するのは変な感じするけど、こういうものなんですね
と思ったら、そのままではPyCharmがnumpyを引いてくれない事案発生。検索して以下の方法で解消する
PyCharmでNumPyを使うためのメモ書き
実行用の仮想環境にnumpyやらmatplotlibを明示的にinstall packageしないといけないらしい
plotまで試して終了。
2章 パーセプトロン
いよいよ人工知能らしいワードが。入力値に重みをかけたものを足し合わせて、一定値Θを超えたかどうかで0/1を決めるのがパーセプトロン。
原理はわかりやすい。これでAND/NAND/ORを作るということね。
線形関数を使ってパーセプトロンを作る = 座標面のあらゆる点を直線で2つに識別する
だが、点の分布によっては直線で分けられないことがある。まぁそうだよね
ということで、曲線もOKにする = 非線形関数を使って識別する ということだが、
「非線形に識別する」ということを、パーセプトロンを多層にする(2層以上)にすることで実現できる。
この「多層に出来る」ことがパーセプトロンの強みだそう。
3章 ニューラルネットワーク
ニューラルネットワークは多層にしたパーセプトロンと同じつながり方で実現出来る。
すなわち、
入力層(第0層) → 中間層(第1層) → 出力層(第2層)
の構造。
入力層 → 中間層 を 活性化関数h(x)を使って表す。
活性化関数はステップ関数やシグモイド関数など、いくつか種類があるが、コレがいずれも非線形関数であることが重要。
なぜなら、非線形関数でないと多層にするメリットがなくなってしまうから。
線形関数を何層に重ねても意味が無い(何層にも重ねたものも、1層で表現できてしまう)から、とのことだ
とりあえずここまで。また読み進めたら先に行きます。