input & output

完全文系プログラミングど素人が機械学習に興味を持ってしまった。

完全文系プログラミングど素人視点からの、機械学習の学習 〜あなたは実装と理論のどっちに興味があるの?〜

 

完全文系プログラミングど素人が機械学習*1に興味を持った。

完全文系プログラミングど素人(以下、愛着を込めてこのような人たちを「同類」と呼ぶ)が機械学習に興味を持って、仕事の傍ら独学して数ヶ月が経った。学習成果は思わしくなく、Pythonは多少理解できたけれど、肝心の機械学習の実装には至っていない。更に言えば、数学的な面*2はさっぱりだ。

なぜ自分の学習がうまくいかなかったのかを振り返りつつ*3これから機械学習に進む人のためにアドバイスをしていきたい

 

機械学習はロジックを完全に理解していなくても、実装できる

 機械学習に興味を持ったのは、書店で一冊の本に出会ったからだ。そう、言わずと知れた「ゼロから作るDeep Learning」だ。 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

Amazonでは☆4.5だし、書店では平積みで置いてあり、機械学習系のおすすめ本のような記事でもよく出てくる*4から、手に取った人も、これから読もうという人も多いかと思う。

ただ、同類にはオススメできない。理論は、数学的な面(行列の扱い方、微分偏微分の計算過程)が書かれていないため、理解が難しい、というかできない。実装については、3周くらいすればPythonの書き方になれてきて、なんとなく「こうなっているの……ね?」くらいに思えてくるが、多分それはPythonになれただけであって、機械学習の理解は進んでいない。しかも、Tensorflowとか、scikit-learnとかの機械学習ライブラリを使うのであれば、ここで紹介されている実装部分を自分で記述することは(ほぼ)ないと思う。

 誤解を恐れずにいうと、同類に知ってほしいことは、理論なんてからっきしわからなくても、機械学習で使えるツールはたくさんあって、ツールだけ使えばひとまずなんとかなるよ!ってことだ。以下のような機械学習系のライブラリは、学習できるデータを放り込めば、理論がわからなくても学習結果を出してくれる。理論でつまずくぐらいだったら、これらのライブラリのチュートリアルを見ながら実装の経験を積んだ方が楽しいんじゃないかな、と思う。

http://scikit-learn.org/stable/index.html

 

www.tensorflow.org

 

 

興味の対象が、結果にあるのか、それとも背後にある理論にあるのかを明確にした方が良い。そして、興味のない方に時間を使わない方が良い

 自分の学習での1番の失敗要因は、結果とロジックの両方に中途半端に興味を持ってしまい、どちらの理解も不十分になってしまったことだ。仕事して、育児・家事しながらできる学習時間なんてたかが知れている中で、苦手な数学に手をつけつつ、不慣れなプログラミングを並行してしまったことで、どっちつかずになってしまった。理論も実装もわかるスーパーマンには憧れるけど、そんなものにならなくても活躍の場所はたくさんある、ということに気づくのが遅かった*5

結果に興味があるのであれば、どんどん実践して見てほしい。Kaggle: Your Home for Data Science に行けば、たくさんのデータセットが待っている。データセットの作り方について書かれている本やWeb上の記事があるのかは知らないけど*6、Kaggleのいろんなデータセットを見て学ぶのが早いんじゃないだろうか。

理論に興味がある?同類でそんな人はなかなかいないと思うけど、ひとまず論文でも読み漁ったら良いんじゃないだろうか。とりあえず、GitHub - songrotek/Deep-Learning-Papers-Reading-Roadmap: Deep Learning papers reading roadmap for anyone who are eager to learn this amazing tech! にたくさん有益な資料がまとめられているから、端から読んで行きますか*7

 

まとめ:興味に向かってまっすぐ進んでみよう

興味がないことをやるのは辛い。ましてや、趣味でやるのであれば、やりたくないことは後回しにして良いじゃないか*8

ひとまず自分は実装方面に突き進むために、kaggleにこもります。

 

*1:安直に機械学習と表現しているけれど、深層学習を含んだものとして読んでほしい。本来はきちんと分けて書くべきかもしれないけれど、クドくなるし、多くの読者はその区別に興味ないと思うから。

*2:機械学習の理論の背景にある、確率、統計、線形代数あたりの理解。

*3:機械学習だったら、モデルを変えたり、中の細かい変数を変えればうまくいくかもしれないけれど、人間の学習はそういうもんじゃない。「学習」という言葉は難しいなぁ。

*4:もちろんこのブログでも扱った。今となっては、「オススメ」という表現はできないが……。

 

input-and-output.hatenablog.com

 

*5:というか遅すぎた。

*6:何かあったら教えてください

*7:ちなみに、最初の「Bengio, Yoshua, Ian J. Goodfellow, and Aaron Courville. "Deep learning." An MIT Press book. (2015)」は800ページくらいあって、ページ数見ただけで自分は挫折しました。

*8:さて、機械学習の実装に興味がありすぎて、今の仕事への興味を失いかけているのだが、どうすれば良いだろうか。。。