そろそろ明後日の勉強会で話す事考えないとなぁ
前回の勉強会の自分の当番が半分くらいしか終わらなかったのであさってもう一回やる事になってる。
前回一通り話す事は考えたのだが、時間が空いたので思い出す為にもここにだらだら書いてみる。
まず前回はGCPのインスタンス作ったりpythonとかjupyterとかの設定したり、dockerの入門を説明しつつportフォワードのベストプラクティスとかを教えたりgitの入門をしたりした。5時間くらいかかった…
環境設定系で残ってるのは
- gist
- クラウドストレージ
- screenとSIGHUP
- Jupyter notebook入門
くらいか。この辺はちゃっちゃと終わらせてtensorfrowとプログラミングの話をしたい。
Tensorflowは、とりあえず何もしらない所から説明していく。 あまり写経とかするんじゃなくて、ちゃんと自分でオリジナルのモデル作れるように、簡単な奴を動かしていく感じで進めたい。 線形回帰とか。
その過程でプラスとかの二項演算がどういうシンタックスシュガーになっているのか、各式からどういうグラフが出来るのか、グラフと普段のコードはどう違うか、tf.Variableとは何か、とかを説明していきたい。
この過程でGPUとは何か、とか、GPUプログラミングの基本みたいな話をついでにしていき、どうしてこういう風になってるか、をふわっと理解してもらう。 ここでcondとかはあんまりよろしくなく、reluとかはmaxを組み合わせて実装する、みたいなのも伝えたい。
その後tensorflowはコア部分とpython部分に分かれてコア部分は自動微分とかの機能は無くてグラフの分散実行だけである事、optimizeがどうやって微分対象の変数を集めるか、などの説明をしつつ、以前の勉強会でやったPRMLの知識を実際にどう実装していくかを考える。
ここでなんか数式的に簡単な例でしかも簡単に改善出来そうなオリジナルの分離問題とかを解いてもらいつつ、勝手に改善案考えて試したりしてもらいたい。
そんな感じで幾つかコードを書きつつ、合間にプログラミングのベストプラクティス的な事を話していきたい。
データ分析のコーディングの全てを支配するYAGNIから始まり、目視で個々を確認する重要性と、それをコードのどこでも確認出来る状態を保つ為のコーディング原則。
さらにデータ分析が進展していく過程で不要なコードが増えていきどこを実行したらいいか分からなくなる、というような問題の発生と、それにどう立ち向かっていくのか、という基本的な方法を話した上で、ライフサイクルを意識する必要性、YAGNIとどう両立するか(必要になった時に直す)、必要になった時にどう安全に直すか、という話をしていく。
さらにそうしたライフサイクルの進展に応じてgitのフォルダ構成のベストプラクティスをそれぞれ紹介していく。
そうしたベストプラクティス的な事を伝えつつ、もっと足元の「とりあえず何やったらいいか良く分からなくて、手が動かない」というプログラムの根本問題にどうアプローチしていくか、という話もしていく。
この辺はたとえばTDD本での頻繁なフィードバックの重要性をコード片を頻繁にShift Enterしていくという事に置き換えて、その大切さを説きつつ、どう最速でそこまで持っていくか、という話をする。
さらにscafoldなどの議論にヒントを得て、何も無い所から始めるのでは無く動く基本的な事から始める重要性、そのためにはどこから始めるか、新しいフレームワークが出た時にそれをどう手に入れるか、という話をしていき、実際にやってもらう。
コーディングの初歩は理論というよりは正しいフォームで繰り返し練習する方が大切なので、そうした背景を意識しつつ手頃な問題をいろいろ書いてみる、という事を、なるべく余計な面倒の無い形でやってもらいたい。
幸いTensorflowは理論に詳しければ試す事はたくさんあり、しかも既存の本やドキュメントは全然そういう風にはなっていないので、私がわざわざ話してやってもらう価値もあるだろう。
自分は何かの目的の為に一人で最初からコードを書く、という経験に関しては、相当な量をこなしていると思う。 コーディングの背景知識的な事についても相当詳しい方だと思う。
という事で自分がそれらの全てを元に、機械学習の理論を知ってる人が、とりあえず自分で試せるようになる為に必要な事について10時間くらい語る事になる訳だから、結構な物を伝えられるんじゃないかなぁ、と思うが、どうかなぁ。