Archive for the ‘講義/実験’ Category

進化計算班3回目終了、企業さんと顔合わせ

木曜日, 10月 18th, 2012

午前中はデュアル・ソリューションさんと顔合わせ。(農学部の)鹿内先生→宮城先生→河野先生→遠藤先生、という流れであちこち突っついてみているらしい。所長挨拶に書かれてるように、「ポータルサイト・比較サイト等のWEBサイト」とか「ソーシャルゲームの企画・開発」をしてるようで、取りあえず次回はこちらが先方に伺って具体的な中身を見せてもらえる予定。

進化計算班は3回目が終了。本題は「拡張GA紹介」という名目で、プログラム自体を自動生成する「遺伝的プログラミング」と、人間に評価してもらう事で定性的な観点を組み込む「インタラクティブGA」のお話。

オプションは、FizzBuzzで相互にコードレビュー(学生らで簡単ではあるけどコメントし合う)に加えて、システム設計のプチ体験。具体的にはマインスイーパを例に、ユースケース図を考え、簡易的な外部設計として全体フローをフローチャートで捉え直し、機能項目毎にユースケース記述を途中まで設計してみました。そんなに大きくない規模なはずですが、機能洗い出し漏れやら共通機能浮かび上がるやらを体験できるので、面白いんじゃないかと想像。(多分)。

P.S.
研究室紹介の日程は、まだ調整中らしいです。学生間ではSkypeで周知されてるっぽいですが、「現時点の案」がどこかのタイミングで「決定事項」として誤解されて伝わってたりしませんか?

進化計算班2回目終了

木曜日, 10月 11th, 2012

今日は学生実験な一日。

午前中は準備で終わって、昼食時間で明日から始まる情報ネットワーク演習2の準備。長田先生&TAの皆さんがほぼやってくれて、私がやったのはスイッチ本体の稼働&変な設定保存されてないかの確認ぐらいですが。news-ieで告知済みですが、情報ネットワーク演習(実験2)ではLANケーブル1人1本持参して来ないと実習で一部困ります。自作/購入/借りるなりしてゲットしてきてください。(LANケーブル作成演習も予定してますが、時間の猶予次第でやるかどうかが変わる可能性あり)

午後過ぎに買っておいたバジルチキンサンドを食べて、小休憩。どちらのサンドも200円ですが、相変わらず旨い。下手なバーガー食べるよりこっちが旨いって。

本日メインの実験4・進化計算班は今回が2週目。今日のテーマは「GA基礎」で、先週の復習から質問攻めしつつ、ナップサック問題を例にコーディング決定、集団作成、点数付与、自然淘汰、交叉、突然変異といった具体的な処理手続きについて実装イメージできる程度に紹介したつもりです。振り返りとして、探索空間での動作イメージや、巡回セールスマン問題でのイメージ、また「組み合わせ最適化問題」に適用する観点からの整理をして本題を終了。

オプションではemacs lisp (auto-install.el, auto-complete.el) のインストール(PDF)をして自動補完できるようにして、FizzBuzz30分(PDF)してもらいました。コードレビューする時間はなかったので、来週に持ち越しです。というか一つのリポジトリを6人+αでcommit+pushしまくって使ってるので、衝突やらブランチいつの間にか誰かが作ってしまった嘉本か混乱模様に陥り、pushするのに時間がかかってただけかもしれない。

以前ブログで選書記事として紹介した「データを未来に活かす」に関連した話をすると興味を持つ学生がいたので、貸してみたり。GA関連本は1冊しか売れませんでしたが、ま、Web上にいろんな情報転がってるキーワードだし。

進化計算班1回目終了

木曜日, 10月 4th, 2012

昨日から後期の授業が始まり、今日が3年次向け学生実験「情報工学実験4」の木曜クラス1回目です。進化計算班も木曜クラスということで、1回目が終了しました。

全体的な流れは前に書いた記事を参照してもらうとして、1回目はガイダンス探索/最適化問題/近似解法/客観的評価といったことについてのお勉強。最初の1コマ目(90分)は、座学に近い形でやりつつ説明中に学生へ質問しまくるという形式でやってるので、(同じ質問を複数人に当ててるのでユニーク数は一桁台だと思うけど)累積質問回数は多分20〜30ぐらいなんじゃないかと。週に1回はパス可能ですが、基本的には何かしら答えてもらい、その理由や背景について突っ込んだり解説を加えたりしながらやってます。私自身が質問を楽しんでいるという側面はあるのですが、聞かれる方も聞かれた方が参加する意義を持ちやすいだろうという意図で昔からこの形式は続けています。

2コマ目は、実習上「複数人で同一リポジトリを共有しながら開発を進める」ことが避けられないというかそれを体験させること自体が一つの目的ではあるので、メンバ全員で共用のリポジトリを用意しつつMercurial演習してました。一人一人プロジェクタに移しながら hg clone/edit/commit/push させたり、意図的に衝突起こさせてどうなるかを確認しつつ、衝突解消したり。

一人だけ hg commit がうまくいかなかったのですが、後で聞いたら commit log を記入した後でエディタを一時停止(EmacsならCtrl+z)してたらしい。その場で気づかなかったのが悔やまれるw

リポジトリを共有利用する時にパーミッションとかどうしてるのかという質問が届きましたが、進化計算班では専用アカウントを用意しています。一般的にはauthorized_keysで管理するような気がしますが、そこまではやってない(それに気づいてる学生はやってる、ぐらいだ)な。ググると「Gitosis は、authorized_keys ファイルを管理したりちょっとしたアクセス制御を行ったりするためのスクリプト群」なんていうのもあるらしい。

進化計算班が(ほぼ)終了

水曜日, 8月 8th, 2012

午前中は進化計算班の最終提出物(ソース、プレゼン、ドキュメント一式)に目を通し、気になる点へコメント。発表時には「第三者が見ても設計がイメージしにくいな」という点も多々あったのですが、コーディング周り等当日コメント指摘した点についてのブラッシュアップが追加されててGoodです。ベストには遠いかもしれませんが、こういう経験を次回(後期の実験なり4年次での卒研なり、就職後なり)に繋げていってもらえればそれで良いんじゃないかと。「ほぼ終了」なのは、一つ未提出っぽいのがあるのでその確認中ってことです。

ちなみに、進化計算班は3年次向けの学生実験の一つ(サーバ班、コンテンツ班などなど多数あり)で、遺伝的アルゴリズムの実装を通したプチ卒研体験を目指してやってます。大まかな流れとしては、最初の3週間は「お勉強の時間」で、「探索」という概念を勉強しつついくつかの探索アルゴリズムと共に遺伝的アルゴリズムの特徴をイメージできることを目指す。次の2週間程度は「自分で問題を設計する」のが目標で、実際に探索したい問題を設計する。過去の成果物を眺めると分かりますがいろんな提案してきてくれますし、一部は別講義でのオフィシャル・ツールに格上げされたりもしました。残りの10週間程度が具体的な実装。ただし、自分たちで考案した問題を直接実装するのではなく、それを別の人に開発依頼しつつ自分たちはその別の人(クライアント)から開発を請け負うという形式を取っています。

この「開発を請け負う」というのは面倒な方針だし、自分でやりたいことを実装する訳でもないという点で苦痛なこともあるかもしれない。けど、就職後はそういうことが当然になってきたりするし、他人が何を望んでいるかをうまく引き出すスキルであったり、より良いものに仕様をブラッシュアップしていくスキルだったり、実際の現場で求められるであろう事柄の一つは実際に起きるだろうということを期待してこういう方針で続けています。

学生実験という点で特に力を入れている教育効果としては、「同じ世代の人らがどういう風にコーディングしているか」を見ながらコメントすることで、ステップアップしやすくすることを心がけているつもり。例えばFizzBuzzとか小さな問題でリアルタイム・コーディングして貰う様子を眺めつつ、コミットしてもらったソースをベースにリファクタリングをしてみたり。コードのテスト方法や、テストの自動化をTipsとして紹介したり。実際のGA実装に入ってからはコードレビューを主体として「グローバル変数使わないように設計し直そう。例えばここはどうしたら良い?/ここはこういうロジックで書いた方が読みやすい/実際にデバッグしよう!」とか、その時々でやってる事は違いますが基本はコード・レビューです。

そんなこんなで現在やってる学生実験では、主に「ゼロから1,000行程度のコードを書ける」レベルを目指しています。問題設定次第でもありますが、大抵どのグループも最低そのぐらいの量を書くことが多い。当初は「関数って何?」レベルの人もいますが、commit logを眺める限りでは最終的には30回ぐらいはコミットしてて、実験中にもそれなりに説明できつつ、こちらのコメントを理解できるようになってるらしい。勿論そこまで到達できない人もいることはいますが、それでも共同開発を通して自分のコミットが活かされてシミュレーションが動くという体験は必要なんだと思ってます。

という感じで進化計算班をやっていますが、来年度からは別テーマに変更することを想定しています。もう少しNAL研に近い内容にしたい。テーマ次第でもありますが、そもそもの達成目標をどうしようかなぁ、と悩んでいます。便利なツールを使いながら云々という方向にするか、泥臭い所から実装するようにするか、etc.。

(info1/shell) 提出状況

月曜日, 4月 16th, 2012

情報工学実験1/スクリプトプログラミングのレポート提出状況は以下の通りです。チェック頻度はそんなに高くないです。

チェック時刻: 4/26, 18:00

アカウントの次に書かれている数字は遅延日数です。


火曜日

e055754, 未提出
e085717, 未提出->(応答あり)->OK, 7日遅れ
e085741
e085751, 未提出->(応答あり)
e085759, 未提出
e095709
e095757
e105709
e105734
e105750, 未提出
e115703
e115705
e115707, 7日遅れ
e115709, rsync失敗?->OK
e115711, rsync失敗?->OK
e115713, rsync失敗?->OK
e115715
e115717
e115719, スクリプト未提出->OK
e115721, rsync失敗?->OK
e115723, 未提出->(応答あり)
e115725, rsync失敗?->OK
e115727
e115729
e115731, rsync失敗?->OK
e115733
e115735, rsync失敗?
e115737
e115739
e115741, rsync失敗?->OK
e115743
e115745, rsync失敗?->OK
e115747, rsync失敗?->OK
e115748, 要再アップロード->OK
e115749
e115751
e115753
e115757
e115759, メール添付?
e115760, rsync失敗?->OK
e115761
e115763


金曜日

e085746, texファイル未提出->OK
e085753, 未提出
e095726, 未提出
e095766, Level1のみ(相談あり)->OK
e105724
e115702
e115704, rsync失敗?->OK
e115706
e115708
e115710
e115712
e115714,notyet->OK
e115716
e115718
e115720
e115722, rsync失敗?->OK(授業未登録?)
e115724
e115726
e115728, 未提出
e115730
e115732
e115734, rsync失敗?->OK
e115736
e115738
e115740
e115742, 1日遅れ
e115744, rsync失敗?->OK(1日遅れ)
e115746
e115750
e115752
e115754
e115756
e115758
e115762
e115764

[upload] 情報工学実験1:スクリプトプログラミング

火曜日, 4月 3rd, 2012

実験1のテーマ「スクリプトプログラミング(4/10, 4/13)」の資料を仮アップしました。

ほぼ例年通りですが、オプション課題例やデモを少し追加する予定です。

修了生によるミニワークショップ(与儀)

火曜日, 3月 20th, 2012

修士修了生がそれまでに得た知見の中で、特に論文などの文章として書かれているもの「ではない」部分として、これまでに作成したプログラムや実施した計算機実験の一部を体験してもらうため、研究室新配属生を対象としたワークショップのような形式で実施してもらいました。

前回の下地くんに引き続き、今回はTwitter上の議論要約関連をやってる与儀さん(FIT2010FIT2012未踏)が担当です。


イントロ紹介をした後、B3向けnal研チュートリアル – よぎぶろぐに沿って進めるらしい。

前回の「もう少し手を動かしてもらう所があると良かった」という話をしていたこともあって、全体としては説明4割+環境構築4割+動かす2割ぐらいはあったんじゃないかと。途中から説明というか実演で済ましちゃうのが増えましたが、全体像が記事化されてる分見直しやすいだろうから問題にならないだろうし。

環境構築で R, mecab, RMeCab とインストールしていく所でまずはつまづく。こういう失敗に遭遇できるのがワークショップする意義の一つだと思う。

検索しながら試行錯誤した結果「ソースパッケージ」としてインストールすると良いらしい。

その後は上述資料に沿って形態素解析、特徴ベクトル作成、クラスタリングするといった一連の流れを通しながらRの使い方をあれこれ実演。

終了後に、未踏での話含めて与儀さんの1,2年での取り組んだこととか情報源/書籍/RSSとか幅広いTipsを紹介してくれてました。
「エディタは何使ってる?emacsとか?」「vim使ってますね」「はっはっはっは。でもorg-modeはvimにもあってねー」とか微笑ましいですね。

(研究室内アクセス制限付きの場所かもしれないけど)多分その資料も後でどこかにおいてくれるんだと想像。

他の4年次やM1が参加できなかった(一人途中から来たけど)のはちょっと残念ですが、その分「聞かなくてもそのぐらい分かってる(キリッ」という事なんだと理解していいんですよねw

修了生によるミニワークショップ(下地)

土曜日, 3月 10th, 2012

修士修了生がそれまでに得た知見の中で、特に論文などの文章として書かれているもの「ではない」部分として、これまでに作成したプログラムや実施した計算機実験の一部を体験してもらうため、研究室新配属生を対象としたワークショップのような形式で実施してもらいました。

残念なことに帰省している慶留間くんはタイミングが合わず、参加者は玉城くんのみ。マンツーマンで指導して貰えるとか恵まれてますねw

今日は、一般物体認識やってる下地くん(参考:FIT2010FIT2011)が担当です。

修了生に向けて指示した中身は以下の通り。

>目標と補足
・修論成果物のイントロor部分課題or全体像を体験してもらう。
・細かい内容はがっつり割愛し、イメージとして伝えるよう工夫。
 *例えば実験2の探索アルゴリズムでは「NNがどういうものか」を
  簡易説明だけで終わり、入力ファイルと出力ファイル、パラメータの説明だけで「学習」
  についての試行錯誤を体験させています。
  詳細は修論や参考文献読めば良いだけなので、おまじない/こういうもの、という説明でも良いです。
・必要に応じて成果物を参照できるようにする。
 *sharkにデータやプログラムを置くだけじゃなく、
  それらをどのように使うのかのドキュメントも用意しましょう。
  修論付録だけでドキュメントを完結する場合には「修論のありかを明示しつつ、付録参照」のように書いてもOK。
 *修論付録を用意できたら印刷(製本)前に一度確認させてください。
・「機械学習」など計算に時間がかかる部分では、
 ワークショップ中では小さなデータで試し、
 処理の過程を理解してもらった後で「3分クッキング方式」で「予め処理しておいた結果」を用意しておくとベター。

>内容と実施方法の例
下記の例全部というわけじゃなく、どれかを組み合わせて90分程度で収めるという意味で例示してます。

>下地くんバージョン
(1) SIFT特徴量からBoFでベクトル表現するやり方。
(2) ベクトル表現された特徴量を用いたSVMによる学習&認識の仕方。or 投票制による簡易学習&認識の仕方。
(3) SIFT特徴量から共起情報を構築するやり方。
(4) 構築した共起情報の可視化や傾向を観察するやり方。
(5) 構築した共起情報を用いて認識するやり方。

これを踏まえて実施してもらったんですが、大半の時間が説明になってて「体験」する部分が殆どなかったのが少し残念。

今回のやり方は、「下地くん本人が動かして結果を示しながら(見ながら)説明する」という形になっていました。これはこれで「下地くん本人が対象問題をどう捉えて、それについてどうアプローチしたのか、その結果どういう知見を得たのか、どこに難しさ/面白さがあるのか、残されてる問題が何か」といった一般的な研究紹介という点での面白さは伝わる紹介だったかと思います。

この方式は、確かに一人で修論読みながら学ぶよりはイメージしやすくなっているのですが、冒頭で述べた「これまでに作成したプログラムや実施した計算機実験の一部を体験してもらう」が少し落ちてるのが勿体無いかな。それでも「こういう説明をする時にこういうデモができると分かりやすい」ぐらいの意味合いがあったとは思うし、説明を通して「クラスタリング、ベクトル空間モデル、重心、Visual words」とかいろんな技術用語についてのイントロにはなったと思うので、やっぱりやってもらって良かったとは思います。


という感想を書いてたら「予定より早く70分ほどで終了」しちゃったので、「じゃ、実際に聴講者本人に動かしてもらうために環境構築から」という無茶ぶりを注文。昔はともかく最近だとMacPortsで、

% sudo port selfupdate
% sudo install opencv

ぐらいでPyhton binding含めていけるかも、という話らしい。
それは良かったというか、頑張った人お疲れさまです。

で、30分ぐらい関連パッケージ含めてインストール終了して、Cのサンプルソースをコンパイルする所までをやりました。

【OpenCVインストール&サンプルソースをコンパイルするまで】
% export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
(ここによると「opencv.pc が配置されているディレクトリ([OpenCVをインストールしたディレクトリ]/lib/pkgconfig)」を指定するらしい)
% mkdir -r temp/opencv
% cd temp/opencv
% cp -r /opt/local/share/OpenCV/samples/C/ C/
% cd C
% sh build_all.sh
(コンパイルエラーが出なければOK)

HDとSSDの違いが出たのか、学生の方はまだOpenCV本体のインストールに辿り着けず、下地くんの都合上今回はここでお開きに。自作プログラム周りは修論付録として使い方書いてもらってるので、残りはなんとかなるのかなと期待。


次年度以降はもう少しイベントの振り方を考えてみよう。
指示メールで「やり方」と書いたのが悪かったかも。

一方で、一般的な研究紹介という点で今回の内容も重要ではあるし、論文として書ききれていない「熱意」のような部分も面白いことは面白い。じゃ、数回に分けてやれば良いじゃん、と思わなくもないですが。

ちなみに、3/20には与儀さん担当で実施してもらう予定です。

情報工学実験2/探索アルゴリズム1の口頭試問日調整

月曜日, 1月 23rd, 2012

探索アルゴリズム1の口頭試問日調整用の記事です。
「空き時間目安」を参照の上、「口頭試問希望の手順」に沿って調整してください。


口頭試問希望の手順

(1) レポートを提出(サーバにアップロード)する。
(2) メールで提出報告する際に、空き時間目安を参照の上、希望日&時間帯を申請する。
 なお、原則としてグループ単位での実施です。
 どうしても全員が揃う日程で調整できない場合には個別相談ください。
(3) 特に問題無ければ、私から承認メールを返信します。
(4) 予約時間帯にグループメンバ全員で口頭試問。(約15-20分程度。長いと30分オーバーになることも)
 *場所は當間部屋(705室)です。


空き時間目安

あくまでも目安です。実際には下記時間帯で対応できないこともありますので、ご了承ください。

1/24(火), 2〜5時限目
 15:30-15:50, 月グループ6
1/25(水), 午前中
 9:00-9:20, 月グループ1
1/26(木), (午前中)
 *代休のため基本的には休みですが、午前中なら希望受け付けます。
1/27(金), 4時限目

1/30(月), 2~5時限目
 12:50-13:10, 金グループ6
 13:40-14:00, 金グループ4
 14:00-14:20, 金グループ4(探索アルゴリズム2)
 16:20-16:40, 月グループ7
 16:40-17:00, 月グループ3
 17:20-17:40, 金グループ3
1/31(火), 2~5時限目
 14:40-15:00, 月グループ4
2/1(水), 午前中
 9:00-9:20, 月グループ1(探索アルゴリズム2)
 13:00-13:20, 金グループ8
2/2(木), 2~5時限目
 10:20-10:40, 月グループ5
 15:00-15:20, 金グループ5
2/3(金), 3時限目
 12:50-13:10, 月グループ8

2/6(月)
 10:20-10:40, 月グループ8(2名)
2/8(水)
 15:00-15:20, 金グループ7
 15:20-15:40, 金グループ7(探索アルゴリズム2)

2/6(月)以降については適宜メール相談ください。


口頭試問未実施グループのリスト

>未実施
月(8),9or10
金1

>終了
月1,2,3,4,5,6,7,(8)
金3,4,5,6,7,8

>探索アルゴリズム2(希望制)
月1,(8)
金4,7


メモ

提出状況一覧(メール報告があった分)。
下記の日付&時刻は、レポートPDFファイルのタイムスタンプです。

>探索アルゴリズム1
月1: 1/20, 12:08 -> 1/25, 22:03(4カ所修正)
月3: 1/23, 23:47
月4: 1/23, 19:58
月5: 1/23, 23:49
月6: 1/18, 19:47
月7: 確認中(対応中)-> 1/25, 20:36
月8: 1/23, 14:31(Level2はまだ)
月10: 確認中(リプライ無し)
金1: 1/27, 23:56
金3: 1/27, 13:49
金4: 1/26, 20:43 -> 1/30, 15:06(4カ所修正)
金5: 1/27, 13:25
金6: 1/27, 16:06 -> 1/30, 13:53(3カ所修正)
金7: 連絡あり -> 1/29,4:47
金8: 1/27, 18:08

>探索アルゴリズム2
月1: 1/23, 19:52 -> 2/2, 20:48(1カ所修正)
月3: 1/23, 23:44
月4: 1/14, 0:13
月5: 1/23, 23:57(3.1, 3.2について後で再提出希望あり) -> 1/28, 13:08追加提出。
月6: 1/23, 19:34
月7: 確認中(対応中) -> 1/25, 21:11
月8: 1/23, 13:26(Level1, 2, 3.4はまだ)
月10: 確認中(リプライ無し)
金1: 1/27, 23:38
金3: 1/27, 21:25
金4: 1/27, 23:54 -> 1/30, 15:19(4カ所修正)
金5: 1/27, 11:10
金6: 1/27, 18:20
金7: 連絡あり -> 2/1, 2:54
金8: 1/27, 22:32

[upload] 情報工学実験2: 探索アルゴリズムその2

月曜日, 12月 26th, 2011

情報工学実験2の探索アルゴリズムその2を公開しました。
探索アルゴリズムその1と同様に、ほぼ昨年通りの内容で、やや課題や説明の仕方を修正しています。

なお、実験中にも説明しますが、今回は通常の実験とは異なる部分が多々あります。

  • グループ単位でのレポート作成。
  • 口頭試問あり(「その1」では必須。「その2」は希望するグループのみ実施)。口頭試問も配点あり。
  • 2回分のレポートで合計200点満点で採点。(片方手抜きしてもう一方に注力するというやり方でも良いし、両方とも同程度に頑張るやり方でもOK)
  • ボーナス得点として、「その2」のLevel3.1で「最も早く収束するパラメータの組み合わせ」を見つけたグループには「加点+20」が加算されます。