プログラムの本って、ほとんど買わない(笑)
Gitがあったり、ネット上にいろんな情報が出ているので、学生時代は沢山かったけど、それ以降は、ほとんとプログラムの本は買わないんですよね。。 Microsoft全盛時代はMSDNとかをとっていたり、S言語やRをやっていたころは、Wikiが出てきていて、その方が、コードをコピペできたりしてよかった。。 今は、コードにあふれているような状況だから、何からやったらいいか分かんないよねぇ~。。僕らの頃の方が勉強の最初のステップは楽だったかも。。でも今のことは全然わからない(笑)。。
で・・・学生時代に、ニューラルネットでロボットを動かすのをやってたこともあったり、最近ラジコンも。。こんなのに興味があったりで・・
http://tom2rd.sakura.ne.jp/wp/2016/04/13/post-801/
DeepLearningのこと、Pythonのこと少し勉強してみようかと思って、こんな本を買ってみました。
そういえば、2~3年前に、大学の同期から、FacebookのMessageがあって、「Deeplearningって凄そうだけど、どんなものなの?新しいの?」って聞かれて少し調べたんですが、「当時のバックプロバケーションは3段の層だったんだけど、それが増えたんだよね。計算機のパワーやメモリが増えたから学習できることが増えたんじゃないの?」なんて、バックプロバケーションができた時に、多くの人に言われた「パーセプトロンの計算をシグモイド関数でできるようになったんだよね。計算機のパワーの話だよ」っていうのとほとんど同じ答えをしている(笑)
最近、この本を読んで、いろいろ見過ごしていることが、多いのかな?と反省している(笑)
http://tom2rd.sakura.ne.jp/wp/2016/08/30/post-1834/
内容
この本は、DeepLearningを使うということの本というよりは、Anaconda、PythonのNumPyライブラリを使って、ニューラルネットの基礎になる行列計算について、各層の計算が何をしているか?学習はどうしているか?ということを解説している本だと思いました。DeepLearningまで、書かれていますが、MINSTの手書き文字を例題にして、パーセプトロンの時代から、バックプロバケーション、CNN(コンボリューションニューラルネット)など最近使われている計算方法について、書かれています。
なんとなくですが・・・
に書かれている手法を順序をおって学んでいくという感じです。
DeepLearningを学ぼうと思っている人には、かなり適切な内容なのかな?って思います。
実際にDeepLearningに関することが書かれているのは、8章のみで、8章は、ほとんどがDeepLearningで学習した事例集になっています。
この本で紹介されているPythonのコードは、Gitで手に入れることができるので、Pythonだけで、いろんな手法を試すことができるようになっています。
昔(1990年代)と今は何が違うの??
僕が知りたかったのは、ここですが、この本に書かれているところによると・・(この本、昔のパーセプトロンから始まってくれているので、僕にはわかりやすい。。)
- ニューロンの活性を表すシグモイド関数よりReLU(ランプ)関数が使われていることが多い。
なぜこんな関数が使われるのか??っていうと、まだまだ計算資源が足りないからなんでしょうね。。シグモイドでも同じような形は作れますから・・・
- 正規化層や、Dropoutという伝搬経路の欠落などを積極的に使っている
つ~ことは、昔のコンボリューションNN(CNN)とほとんど変わっていないんですね。。あとは、本当にさまざまなテクニックの世界になっていますね。
- 層を深くするための学習の逆伝搬は、層をスキップして計算してたりする(笑) Microsoftさん、これって物理的には、どういう意味かな?(笑)←そういうことを言うのはオヤジなんでしょうねぇ(笑)
- 非対称の形のネットや、サイズ違いのコンボリューション層を並列につなげてニューラルネット構成していたりする(笑) Googleさん これって、遠目で見るのと近くを見るってことかな?
- DropOutっていう方法が面白いのは、それで過学習を回避しようとしているところ。これも計算資源削減?物理的には、ちょっと頭をぶつけて違うニューロン使っている感じですね(笑)
- DQNっていう強化学習の近似関数を、CNNで作っている。DeepLearnigは、そこに使うのね。。っていうところが偉いんだろうな。Alpha-Goですね。これって。。
とりあえず、僕が興味あるのは、DQNとSegNetっていうやつだな。。ここから少しまた勉強しようっと。。
DQNの説明だと。。
http://qiita.com/Ugo-Nama/items/08c6a5f6a571335972d5
これもOPEN AIでPythonライブラリになってる。。また試してみようっと。。ゲームの得点を全体の評価関数にして、ゲームの画面が入力層、ゲームの操作がアウトプット層になってる。。この方法で、あのハッカーは、自動運転とか作ってるのかな?。。なるほど。。
http://qiita.com/icoxfog417/items/242439ecd1a477ece312
SegNetは、ケンブリッジの方法なんですね。。これだと、道がどこか?とか木があるからどけよ~とかわかるような気もする。。
http://mi.eng.cam.ac.uk/projects/segnet/#demo
でも、CPUだけだと、時間がかかりそうですね。。
https://iwaki2009.blogspot.jp/2016/01/segnetubuntu.html
なるほどなぁ~
結局、データ量の増加と、計算機資源の増加に伴って問題となるのは、昔と同じで、実時間というか、許容できる時間で計算できるようにする工夫で、それらの積み重ねなんですね。
ニューラルネットの歴史を学ぶには、このスライドがいいかも。。この記事書いている時に見つけました(笑)
コメントを残していただけるとありがたいです