naoya_t@hatenablog

いわゆるチラシノウラであります

今週のCoursera(〜6/2)

(see also:先週のCoursera

今週からどのビデオを見たか、どの演習をやったか等をGoogle Spreadsheet上でチェックしながら進めています。このシートを見ればまあどの辺りにいるのか分かりますが

という声もありますし時々の振り返りも重要かと思うので今週のCourseraメモ行ってみます。

参加しているクラス

Machine Learning (Andrew Ng, Stanford) - 4/23開講。現在第7週

  • 機械学習システムの設計の指針
    • 闇雲にデータを大量に集めれば良いってものでもない
      • 「そのデータがあれば専門家は自信をもってクラス分類できるのか?」
      • 「大量に訓練データを用意できるか?」
    • さくっと(汚くても良いので)1発目の実装を。そして学習曲線取ってみてbias/varianceを見る。分布の偏ったクラス分類(99%:1%みたいな)にはprecision/recallとF1スコアが効く。
  • そして期待のサポートベクタマシン(SVM
    • 「最大マージン分類器」
    • 原理はPRML(下巻の最初)でもちゃんと説明されてるわけだが
    • カーネルの説明。超わかりやすかった。cf.
    • Ng先生のビデオ見て色々と腑に落ちた。分かりやすい。というか、すっと分かるための取っ掛かりの与え方がうまい。
    • 最後に説明してる全ての訓練データ点にカーネル適用して素性として使うのってNadaraya-Watson modelか
  • Programming Assignment
    • 引き続きOctaveです
    • SVM実装させられるのかな?とかみんな期待しますよね。
    • そこまではしません><
    • ガウシアンカーネル関数くらいは実装しますけど
    • あと、最適なパラメータの選択もさせられますけど
    • 分類境界がヴィジュアライズされるのは気持ちいいです
  • これで、講義ビデオと課題の消化がやっと追いついた

Compilers (Alex Aiken, Stanford) - 4/23開講; 5/10参戦。現在第6週

  • Midterm(中間試験)がある
    • Week 4までの講義の内容から
    • といってもこれまでの講義ビデオの半分ぐらいしかまだ消化できてない
    • Midtermの期限 (5/28月 15:59:00 JST) までに試験範囲の未消化ビデオを見て、Midtermも受けないと
    • やばい時間足りない
    • 1.25〜1.5倍速再生乱用。と言っても英語字幕付けれるしメモ取りたいところで止めれるし分からないところは巻き戻せるから無問題
    • handleとかviable prefixとかの辺りってなんか説明が曖昧で難儀。purple dragon bookでもその辺りで右往左往(right-/leftmost derivationとかright-/left sentencial formとか的な)した記憶
    • 試験範囲のQuizとDeduceItもやっとこう(同じ問題出るかもしれないし)
  • 15:59まであと残り1時間半… というところでMidtermを受けた。
    • 2時間半、といってもいつもの復習Quizと同じ形式なので正味20分もあれば解ける。但しいつもと違うのは一回しか受けられないこと。
    • 投了。
    • 採点すぐに出た。7.4 / 9 …なにそれそんなに間違ってるのかorz
      • Q3. ルールが6つあって文字列があってどのルールでacceptされるかという問題。全ルールが定義されていると思ってなかった(まあ問題文で言ってないし)ので「この文字列をacceptするにはどれとどれを使えば良いか」問題を解いてた。(-0.428571)
      • Q5.「This language produces exactly 2 strings of length 2.」をNOにした。確かに長さ2の文字列は2つacceptするが、他にもacceptするものがあるから。問題文がambiguous (-0.1666)
      • 講義で言ってたままの実装の再帰降下パーサでproductionを数えるとちゃんと奥までバックトラックできてないので違う数字を返す (-1.0)
    • あまり良い問題セットとは思えない
    • まあいい。先へ進もう
  • Programming Assignment 3に着手
    • COOL言語の型チェックとかSemantic analysisとか。
    • 型チェックはASTに対し何をする作業なのか講義ビデオで説明されているものの、用意されているスタブコードを読み解いて自分がやるべき差分を見つけ出すのがちょっとハードル高いような。
      • まあこれはハッキング課題なのだなと思って進めた

    • SELF_TYPEの仕様が(仕様書にちゃんと書いてあるっちゃあるけど)厄介で、最初に書き進めていた型チェッカでは74項目のチェックのうち1つだけどうしても通らないものがあって、1箇所採点サンプルしか通らないチート的コードを書いて最初の74点。
    • ちなみにCompilersクラスのプログラミング課題の採点は、(VirtualBox上で)プロジェクトをビルドして、74本のテストを行う採点スクリプト(perl)を走らせて、スクリプトが吐き出したハッシュ文字列をCourseraのwebフォームに貼り付けることで採点される仕組み。COOL言語で記述されたテストコードと、それに対する模範解答は与えられている。(この模範解答なしにはそもそもどういう文言のエラーメッセージを吐かないと通らないのか分からない。いわばこれらが仕様書である)
    • しかし、これでは気持ち悪い。コード提出求められたら(先生が)泣く。
    • SELF_TYPE問題に対処するため、型を保持するデータ構造にちょっと手を加えて途中から(40点ぐらいから)やり直した。今度はチートなしで74点行けた。採点スクリプトが吐くハッシュコードはチート込み74点も正攻法の74点も同じだった。
    • というわけで今回は期限2週間前に完了 (74.00/74)

Automata (Jeffrey Ullman, Stanford) - 4/23開講。全6週。

  • Programming Assignment を覗いてみたら簡単そうだったので、締め切り6/12だけど先に手を付けた。実装言語はPython/Javaで、もちろんPythonを選択。
    • 1つ目は正規言語のε-NFA化。先日来Schemeで書いてた物のごくごく一部にすぎない。こんなのでいいの?ってくらい簡単な課題。(てかCompilersの課題がでかすぎる)
    • 2つ目はCYKアルゴリズムの実装。

  • 締め切りの迫った復習クイズを消化。消化に必要なところからビデオを消化。(まだ1本20分ぐらいの未消化ビデオが5本ぐらいある)
    • Ullman先生のビデオって1本1本が長めだし先生の英語の抑揚が苦手だしちょっと億劫

    • 1.25倍速で聴いて理解できてるのかというと怪しい。Ullman先生の説明は帰納法的な証明が多いのと、ドラゴンブック的書物で背景的な知識*1がある程度あるから類推でなんとなく分かった気になってるけど、自分の英語解釈的には非常に怪しくて、1倍速で聴いても0.75倍速に落としても、クローズドキャプチャ+穴埋めディクテーションしてテキストで読んでも何が言いたいのかわからなくて、そのちょっと後に描かれた図を頼りに当てはめていくと説明の意味が分かる、という事がしばしば。
    • ていうかクローズドキャプチャのタイミングが合ってないので付けると意味不明
  • 6/11〜18にFinal Examがあるのでそれまでに全部見ないと><

Computer Vision:The Fundamentals (Jitendra Malik, UCB) - 4/23開講; 5/25参戦

  • 提出期限のある課題が(今のところ)ない、という事もあってまだIntroしか見てないまま

*1:Ullman先生の英語、も含め