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:さて、機械学習の実装に興味がありすぎて、今の仕事への興味を失いかけているのだが、どうすれば良いだろうか。。。 

僕らはいつまでスキルアップし続ければ良いのだろうか?


 今、あなたに求められる能力はなんだろうか?

 誰かと楽しく話をする力。
 専門知識を生かして頭で考える力。
 何かを書いたり、工作したりして生み出す力。

 会社勤めをしていても、学生でも、ニートでもフリーターでも、1つくらいは思い浮かぶんじゃないだろうか。

 次に、今後どんな能力が必要なのか考えて欲しい。

 プログラミングを理解する能力、自分で組み立てる能力?
 英語で文書を書いたり会話したりする力?
 専門分野以外の知識?
 会社の色々な部署の業務やルールの理解?

 仕事をしていたり、勉強が進んだりするに連れて、どんどん必要な能力は増えてくる。
 本当に必要なのかはわからないけれど、「必要かもしれない」と考え出すと際限がなくなる。

 僕らはどこまでいってもスキルアップが求められる。

 スキルアップ(能力向上)、スキルメンテナンス(能力維持)、スキルチェンジ(能力変更)

 今自分が取り組んでいることが、スキルアップなのか、メンテナンスなのか、それともチェンジなのかということは意識しておいた方が良い。

スキルメンテナンス:最新の会計基準を理解する。
スキルアップ:日本基準の他に、国際会計基準や米国基準も身につける。
スキルチェンジ:プログラミングの能力を得る。

 スキルアップしているつもりが、実はメンテナンスレベルではないだろうか。






大量のtextファイルから、使用されている単語の数を集計する(英語限定)

本日のメニュー


先日下ごしらえした大量のtextファイルから頻出英単語を抽出する。

 

input-and-output.hatenablog.com

 

 

調理台の環境


Python version: 3.6.1 |Anaconda 4.4.0 (x86_64)

 

調理器具


os , re

今日はあまり特殊なモジュールは使わない。

 

調理の失敗として想定されること


以下のプログラムでは、pythonファイルを実行したフォルダのtextファイルが対象となるので、textファイルとpythonファイルは同じフォルダに投入しておかないと失敗する。

 

今日の鍋


テキストファイルで使用されている英単語の数をカウントする。

 

完成品


さっぱりと仕上がった単語リスト。

単語リストを眺めてみると、上位1000単語は非常に基礎的な、多分中学生レベルの単語がほとんどだ。英語論文が読めないのは単語を知らないせいというよりも、単語の使い方、イディオム、文法が弱いことに原因があるような気がして来た。

また、結果を全て眺めてみると、pdfminerでうまくtext化できず文字化けしているものや、( )がくっついているものなど、正確な単語となっていないものが多くあった。こういったものは、文字化けしないように抽出方法を改善すべきか、それとも思い切ってサンプルから除外してしまうかは難しいところ。今回は同系統の論文群で、使われている単語に大きな差はないって前提のもと、サンプルから除外して上記pythonファイルを実行した。

 

参考文献、参考URL


いつも通りの「退屈なことはPythonにやらせよう」。

タイトル長いから、「TaiPy」って略しちゃいたい。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

 

 

今日の電車


https://www.instagram.com/p/BYU749KnIRn/

#箱根登山鉄道 #実物を撮り忘れる #ぷらレールで代用