【書評】『Python機械学習プログラミング 達人データサイエンティストによる理論と実践』

f:id:Ichiei:20171220232632j:plain


衝撃的だ。

このような本は出会ったことがない。
こんなに実践的で理論的で書かれておりvalueがある本を知らない。

本書はPython機械学習を勉強するための本だ。

この分野は様々な本が出ているが、こんなにも色々と書かれている本を知らないし、こんなにもvalueがある本を私は知らない。

本書の最後をそのまま引用しよう。

機械学習の刺激的な旅(中略)を楽しんでいただけただろうか。(中略)この分野の基本的なテーマは全て取り上げた。それらの手法を実際に手に取り、現実の問題を解決するための準備はもう十分に整っているはずだ。」

そうこの本に機械学習について

全て

書かれているのだ。

あとは実装すればいいだけ。
しかも、サンプルコードが全てネット上に上がっている。

 

こんな素晴らしい本がたったの4,000円。

なんていい世界なんだ。

 

L1正則化とL2正則化について

f:id:Ichiei:20171224144314j:plain


絶対忘れそうなので、まとめておく。

 

機械学習の本を読んでいると当たり前のように出てくるのですが

当たり前なんですか?)

 

まず、ちゃんと言葉の整理。

 

正則化

 

wikipedia先生曰く

正則化(せいそくか、: regularization)とは、数学統計学において、特に機械学習逆問題でよく使われるが、機械学習過学習を防いだり、逆問題での不良設定問題を解くために、追加の項を導入する手法である。モデルの複雑さに罰則を科すために導入され、なめらかでないことに罰則をかけたり、パラメータのノルムの大きさに罰則をかけたりする。」

 

要は

f:id:Ichiei:20180110185011p:plain

 

L1正則化

f:id:Ichiei:20180110185032p:plain

不要なパラメータを削りたいことを削る時に使う

 

L2正則化

f:id:Ichiei:20180110185051p:plain

過学習を抑止するのに役にたつ

 

 

この図を見れば一目瞭然!!

(理解するまで30分かかった汗)

 

f:id:Ichiei:20180110185129p:plain

 

(引用:

RL1 / L2正則化を実践する

http://tjo.hatenablog.com/entry/2015/03/03/190000

 

 

 

最後に3つ言わせてくれ。

LL2の「L」の何の略だ?(ルベーグ??)

・こんなことを当たり前のように書くのやめてほしい

・大学の時に教授がノルムノルムとか言っていたけど、もはやキレイだなぁとしか思わない

 

 

参考

 

wikipedia 正則化

https://ja.wikipedia.org/wiki/正則化

 

RL1 / L2正則化を実践する

http://tjo.hatenablog.com/entry/2015/03/03/190000

 

機械学習LPノルムってなんだっけ?

https://qiita.com/kenmatsu4/items/cecb466437da33df2870

 

Lpノルム

https://ja.wikipedia.org/wiki/Lp空間

最近のAIについて思っていること

f:id:Ichiei:20180110175449j:plain

『最近のAIについて思っていること』

 

AIについてかなり表面的な情報しかとってませんが、思うことがあります。

 

 

AIって大きく分けると、

 

「教師あり学習」

 

「教師なし学習」

 

「強化学習」

 

3つあります。

 

 

「教師あり学習」は、

答えを与えるとそれに近いかどうか判別してくれます。

 

なので、猫の画像を見せておけば、新たに与えた画像が猫であるかどうか判別できます。

動画は画像の集合なので、人が通ったかどうかなんてことも判別できるわけです。そのため、自動運転なんかもできちゃいます。

AIは目を手に入れた!ってのが正しいのはこのためです。

 

「教師なし学習」は、

主に分類をする際に使われます。

 

当社のターゲットってどういう風に分類できるんだっけ?みたいな際に使えるし、教師なし学習を教師あり学習にする方法とかもあって、この商品を買ってくれやすいかどうかの分類なんてのもできます。

 

さて、問題は「強化学習」です。

強化学習って一般に「ある環境内におけるエージェントが、現在の状態を観測し、取るべき行動を決定する問題を扱う機械学習の一種」。

(普通の人には理解不能です)

 

強化学習を社会実装するのが難しいのです。

 

アルファ碁は強化学習なんですが、ディープマインド社はなんで「囲碁」をやっているかといえば、このくらいしか社会実装できないからです。

 

「教師あり学習」みたいに「車の自動運転」みたいなことはできないわけです。

 

正確には、強化学習を使って社会実装できるものは教師あり学習で社会実装できます。(たぶん)

 

 

なので、

強化学習をほいほい実装できるような世界の天才達の脳を、

なにに使うのかをマジで考えて、それを提示できるリーダーに全てかかっていると思います。

 

 

強化学習を使うと良いものの例。

今までのデータはあるが本当にそれがベストかどうかわからないようなことに使うとよいです。

そうすると今までのベターからベストを導いてくれます。

(こういうもので、パイがでかいものってなんだ?)

 

こういう世の中になるといいと思う

f:id:Ichiei:20180104205536j:plain

 

こういう世の中になるといいと思う

 

テクノロジーは常に進化しており、新しいテクノロジーはいくらでも出てきているし今後もそうである。

 

この”テクノロージー”とエンジニアはどうやって向き合っていけばいいか。

 

結論はこうだ。

エンジニアは決して「このテクノロジーを使ってある問題を解決しよう」といった態度をとるべきではない。

「ある問題があった際に、このテクノロジーを使えば解決できる」という態度をとるべきである。

 

例えば、いくらデータベースが進化したからと言っても、データベースを使ってデータをストックして、業務効率化をしようといった提案をするべきではない。

業務効率化という問題がある際に、データベースの利用といった方法で問題を解決すべきだ。

 

なぜか。

 

それはそのテクノロジーが最適であるかどうかわからないからである。

 

昨今のAIのニーズを見ていると違和感しかない。その違和感は、前者だからだ。AIを使って投資のレコメンドとかそのようなものしかない。

 

これが真の解決策であるだろうか。

〇〇という問題があるから、××を使おうというのが正しい解決策であると思うのだ。

 

そのためにエンジニアはありとあらゆる分野に目を向ける必要があるし、常に新しいテクノロジーを学ぶ必要があると思った次第。

 

精進します。

 

以上。

SEをバカにする優秀なプログラマーの皆さんへ

f:id:Ichiei:20180104000747j:plain

 

たぶん、IT業界には、

SE vs プログラマー みたいな対立構造がある。

 

私はSEなのでですが、プログラマーから

「コードも書けないのかよ」

git使えないのかよ」

デッドロックの対応もわかんないのかよ」

と散々に言われていそうだが、

 

これだけは言わせてください。

 

「お前、デリバティブ取引に対するヘッジ会計の自動処理バッチ、設計できんのかよ」

 

できちゃうスーパープログラマーの方もいるので、そういう方ごめんなさい。

 

精進します。

【書評】『ゼロから作るDeepLearning』斎藤 康毅 著

f:id:Ichiei:20171228102826j:plain

この業界ではとても有名な本書。

今更感がありますが、読みました。

結構良い本です。

 

↓昨年の1位はこの本です。

f:id:Ichiei:20171228104257p:plain

ITエンジニアに読んでほしい!技術書・ビジネス書 大賞 2017より引用

 

良かった点と微妙な点を書きます。

 

良かった点は5つ。

 

1.2パーセプトロンの話がコンピュータの本質的な話をしている気がして感動できる。

f:id:Ichiei:20171228104903p:plain

人工知能「冬の時代」が到来 - THE ZERO/ONE より引用

2.気合いで読めば丸一日で読める

f:id:Ichiei:20171228105956j:plain

全部は写経は無理かもしれませんが読めます。

 

3.pythonに慣れることができる

f:id:Ichiei:20171228110154j:plain

pythonの変数を宣言しない感じとか、インデックスに意味がある感じとかわかります。

 

4.チューニングの方法がわかる

f:id:Ichiei:20171228110020j:plain
6
章にまとめて書いてあってとても良いです。

DeepLearningはなんかこうすると良いといった法則があるのでそれを知れて良かったです。

 

5.5章の逆伝播の説明が、「まぁ」わかりやすい

f:id:Ichiei:20171228102858j:plain

「まぁ」が入るのがポイントです。

本質は全てクロスエントロピーシグモイド関数です。

 

微妙な点

(著者としては当たり前な話でしょうが)

 

1.偏微分がわからないと多分読めません

f:id:Ichiei:20171228110149j:plain

ちゃんと書いてあるぶん、ある程度の知識は必要です。

 

2.初めてプログラミングする人には、、、 

f:id:Ichiei:20171228103102j:plain

ゼロからって書いてあるから、買って勉強しようとするプログラミング未経験者は多分無理です。 

カレントディレクトリを移動できない人は、3章で詰まります。

(私はそもそもオープンにソース公開されていることに知らず、詰まりました)

 

3.結局は、データの前処理な気がしました、、、

f:id:Ichiei:20171228110244j:plain

MNISTに対する前処理のところがサンプルコードでは既にされいるので、いざ何かに適用するとすると、そこに膨大な時間がかかるかと思いました。

(それはそうですよね)

 

結論:

DeepLearningの理論をかじったことがあって、pythonディレクトリの移動なんてググれば余裕だぜ!っていうpython未経験者にはオススメです。

(狭いですが、いるかと思います)