修士論文

トップページ >> 授業概要 >>
作成:2006/08/06
更新:2007/02/19

はじめに

修士論文の取り組み方を日記形式で紹介していきたいと思います。

基礎知識として、私の所属する大橋研は、
コンピュータシミュレーションという技術をベースにしながら、
教授、助教授、講師の三人の先生がそれぞれ、
流体・進化計算、経済物理、ネットワークといった専攻を持っています。
学生は自分で考えた自由なテーマをもとに、
一番適した先生に指導してもらう形式となっています。
私は、ネットワークに関する研究がしたかったので、講師の橋本先生につくことにしました。

7月27日

この時点までにやったことといえば、
研究分野を「ネットワーク」に関するものと大まかに決めたことくらいです。
関連論文なんかは自慢じゃないけど一つも読んでません。
参考書は一冊買って、ぱらぱらと目を通したくらい。
あと、週に1度の勉強会(輪講)で関連論文を数ページ読んだことかな。
7月上旬まで就職活動をしていたことが最大の遅れの原因ですが、やる気がないのも確か。

この日に研究室会(2週間に一度開催されるゼミみたいなもの)があり、
そこで教授から、研究が進んでいないと言われてしまいました。
たしかに8月21日の中間発表資料提出まで1ヶ月切ってるのに何もしてないですから。
研究室の修士2年7人中で、一二を争うほどの遅いペースです。
さすがにテーマは決めようということで、
私の指導教員が橋本先生と確定された上で、
翌日の勉強会の後にテーマを決めることになりました。

7月28日

勉強会終了後に、いよいよテーマを決めることになりました。 先生とマンツーマンでの対話です。

まずネットワークに関するどのような研究がしたいかという話になりました。
自分としては無線などのアドホックネットワークが面白いと思っていたので
そういう方向で文献を一緒に検索していったのですが、
どうもなかなか面白いテーマが見つからない。
簡単そうなテーマは既に研究されているて面白くもないし、
面白そうなテーマは修士レベルでは厳しそうな専門的なものになりそうだということ。
2時間ほど調べたのですが、結局修論になりそうなテーマは見つからず、
週明けに持ち越すことになりました。

便利なツールを作ったり、見てて綺麗なものを作ったりすることは得意なんですが、
工学部的には、「だから何?」ってことで修論には到底なりません。
プログラムとかホームページを作るだけで修論になるならいくらでもやるんですがね。
卒論もそうでしたが、研究のテーマを決めるってのは一番難しいところだと思います。

8月2日

7月28日に引き続き、先生とマンツーマンでテーマ論議です。
論議っていうほど会話もないのですが・・・。
結局、アドホックネットワークは面白そうだが難しいということで、
先生の専攻の一つである、コミュニティ分析をしてはどうかということになりました。

自分としてもコミュニティ分析には興味があったので乗り気です。
関連資料を検索しながら取捨選択していき、結局以下にあるような論文をもとに、
「隣接行列をもとにコミュニティ分析を進める」という方向性で行くことになりました。

コミュニティ検出の基礎
Uncovering the overlapping community structure of complex networks in nature and society
Finding and evaluating community structure in networks
Community structure in social and biological networks
コミュニティ検出法の紹介
→Community Discovery Methods for Complex Networks
隣接行列
A Local Method for Detecting Communities
Information中心性
Method to find community structures based on information centrality
大規模ネット
Finding community structure in very large networks
PNAS
Defining and identifying communities in networks

約2時間の面談の結果、先生が8月3日から8月6日まで所用で大学にいなくなるので、
とりあえずは7日までに参考文献を読んで、できるとこまで進めてみるという話になりました。
当初のアドホックとは全く違う方向になりそうだけど、
とりあえずテーマも固まってきたし、そろそろ本気出したいですね。

8月4日

8月3日は結局、家でだらだらして終わってしまったので、
研究室に行くことにしました。

資料を読もうと思っても、相手は英語なわけで、私には難関なんです。
日本語でもわかるか微妙な文章を英語で読むとなるとねぇ。
あぁ、これが修論したくない一番の原因に違いない。

参考資料はまず最初に A Local Method for Detecting Communities から読むことにしました。
冷房病での肉体疲労と、慣れない英語での心身疲労の相乗効果によって、
英語を1段落必死に解読(≠読む)すると、精魂尽き果てて1,2時間睡眠する。
というパターンを繰り返すことになりました。
結果、朝から夕方まで研究室にいたのに、全16ページの文献の最初の1.5ページしか読んでません。

この調子でいくと、資料読むだけでタイムオーバーになりますね。
ほんとに・・・同情するなら、訳をくれ

Appendix.0804

とりあえず、やる気を出すためにカウントダウンプログラムを作りました。
不要なPCとディスプレイを机の脇において、
JavaScriptで造ったカウントダウンプログラムを、ブラウザで表示させ、全画面にして終了です。
これで、残り時間が何時間あるか一目瞭然。
カウントダウン:「日」表示 カウントダウン:「時間」表示
クリックして拡大してもらえばわかると思うけど、
特殊なフォントを入れていかにもカウントダウンっぽくしています。
しかも、日の出・日の入までリアルタイムに計算しているので、徹夜しても時間間隔はばっちりです。
そのうえ、3秒ごとに残り時間を「日」と「時間」で自動切換えしてくれるという便利機能付。
はぁ、、、こういう無駄なことには1,2時間でも簡単に時間かけれるんだけどね。

8月7日

5日、6日は、週末なんで本当にまったりしてました。
緊張感足りなくてすいません。

7日も研究室に行かず、自宅でまったりしてたものの、
さすがに危機的状況な自分に少し目覚めたので、
頑張って「A Local Method for Detecting Communities」解読にいそしみました。
久々にこれだけ真面目に英語読みましたよ。
しかし、約3000語あった論文のうち、3分の2を解読し終えた時点で7日は終了。
今ドラえもんがいたら、翻訳コンニャクが欲しいです。

8月8日

金曜日以来研究室に行ってなかったので、今日こそは研究室に行くことにしました。
ただ、やることは前日に引き続き、英語文献の解読です。
そして、夕方近くになってようやく解読が終了!

必死に訳しているとその文章に集中して、以前の段落で訳したことを忘れてしまいそうなので、
訳した結果を箇条書きとしてメモしておきました。
A Local Method for Detecting Communitiesのメモ
メモというより全訳に近い感じがあるし、一部の日本語が変ですよね。
これが実力です、ごめんなさい。でも9割方は理解できたはずです。
論文の内容を簡単にまとめると次のような感じです。

・通常はコミュニティを求める際にはグラフの全体構造が必要
・しかし本論文ではemerging次数というものを使うことで、局所的にコミュニティを求めることが可能
・このアルゴリズムにより特定の点がどのコミュニティに属しているかを簡単に判別できる
・この際に用いる変数αは任意で、この大小により検出するコミュニティレベルも変更できる
・この局所アルゴリズムを全体に適用するという応用により、membership行列というものを生成する
・membership行列により、グラフ全体のコミュニティ分割や、系統樹作成が行える

訳した結果を携えて、先生の元へ。今後の方針についての話し合いです。
話し合いの内容は以下のような感じ。
専門外の人には何のことかわからないでしょうが、備忘録もかねてるので
とりあえず疲れたのでこれで今日は終了です。

・membership行列を生成した後で、後処理(ソート等)をしてコミュニティ抽出をするのは面倒
・隣接行列を直接いじったり、後処理を簡略化することはできないだろうか
・隣接行列をいじる際は、疎行列をある程度密に変換してから処理を行ったほうが効果的なのでは
・membership行列は0と1のビット情報しかないので、これをdouble型などの多値情報にしてみる
・αの適切な与え方についての議論がないので、統計量と適切なαの関連について考える
・後処理の計算量をO(N^3)から減らすことは少し難しいのではないか
・アルゴリズム全体の精度があまりよくないことを改良できないか
・モンテカルロ法や、GAの導入などを考えることはできないか
→とりあえず、空手クラブネットワークをサンプルとして研究を行う
→隣接行列を直接操作してコミュニティ分析ができないか確認する
→mebership行列を多値情報にすることで、αの試行錯誤を軽減できないか確認する

8月9日

修論をほったらかして、夜更かししてDVD観たりしてたので、起きたら夕方でした。
だから、修論しなきゃだめだよね・・・。
というわけで、9日というより10日に近い時間帯ですが、プログラミング開始です。

ちなみに、今回の中間発表のプログラミングにはPerlを使うことにしました。
扱うデータも小さいから、それほど実行時間はかからないと予想したことと、
何よりC言語よりPerlの方が素早くプログラミングできること。
残された時間は少ないので、簡単にプログラミングできることが大事です。

というわけで、Perlの特性を生かして、
ハッシュとか、無名配列とか、($a,$b)=($b,$a)とか、mapとか、使いまくりです。
配列使うときにallocとかfreeとかしなくていいのが便利でいいわ。
ただ、やっぱり、配列操作はC言語に比べて1桁遅いですね。

8月10日

8月10日(前後)の行動は、
前日から、自宅で徹夜してプログラミングし、
昼に大学に行って研究室でプログラミングし、
研究室の休憩室の床で4時間ほど倒れこんで、
日付が変わるまで再びプログラミングをし、
自宅に帰っても徹夜でプログラミングをした
というプログラミング漬の生活でした。

こんなに時間がかかっているのは、プログラミングが難しいいというよりも、
私の性格である「凝り性」がでてしまっているから。だと思う。
まず、他人の作ったプログラムを使うのは嫌なので、
既にライブラリがあるようなものでも、極力自分で作っちゃいます。
他に、単に動けばいいというよりもやっぱりできるだけ高速で動いて欲しいので、
アルゴリズムを試行錯誤しながら、一番高速稼動するものを探求していきます。
当然、プログラムの書き方も綺麗じゃないと気が済まないので何度も書き直す。
時間がかかるはずです。

特に凝った部分は、出力部分ですね。出力部分だけで半日かかってます。
出力した結果をそのまま綺麗に論文とかに貼り付けたかったので、
WMF/EMFというWindows内部でよく使われる画像形式を使おうとして、
3時間くらいWMF/EMFの仕様を調べたんだけど、GDI使うから複雑で今回は間に合わないと判断。
そこで次にEPS(ベクトル画像)形式を調べました。
そしたら、EPS=PostScriptって意外と簡単な言語なんですね。
これならすぐに実装できそうってことで、
こういうPostScript参考資料を参考に実装しました。
この参考資料以外にも色々調べたので、もう気分はPostScript屋さんです。
「2 copy exch .5 mul exch .5 div rmoveto lineto」とかプログラミングできるし。
ただ、EPSの問題点はEPSを扱える対応ソフトが少ないこと。
プログラミングの時は、Acrobat Distillerを使ってPDFに変換して確認していました。
「program.pl && image.ps && sleep 1 && image.pdf || image.log」
というスクリプトを書いて、毎回PDFを手動起動しなくていいようにもしたんですが、
それでも何十枚という画像を処理するのが面倒ということで、
最終的にはGhostscript+Image-Magickを使ってEPS→PNGに変換するスクリプト作ったわけです。

他にも色々と凝った部分はあるのですが、面倒なので省略。
というわけで、中間発表進捗率で言うと15〜20%程度の状況における結果が、
このプログラム(8月10日現在)です。
プログラムの説明を簡単にすると、
あるネットワーク(空手クラブ)が与えられていて、
その隣接行列にある方法で点数をつけ、その点数が高くなるように行列を入れ替えたときに、
隣接行列=ネットワークがグループにわかれるかどうかを確認するためのものです。
結果としては、「なんとなくは分かれるけど、よくわからん」という微妙なデータがでています。
ちなみに、プログラムのおすすめの引数は
「shuffle=1 link_own=1 link_add=double srand=1 adjacency」で
EPS画像が見たい人は、「eps=image」という引数を追加すると数十個作成されます。

8月11日

前日に書いたプログラミングに関して考察。

・ネットワークの接続方法を直接表している「隣接行列」というものが対象
・隣接行列に対して直接的な操作をすることで、面白い結果が出ないかという実験
・「直接的な操作」というものは、ランダムに行列を入れ替えてみること
・「面白い結果」というものは、ネットワークの構造であるコミュニティが出てくること
・有意な結果は現れたが、論文に書くほど特筆すべき結果とはいいがたい
・つまり、既存の方法にくらべて計算量が桁違いに多い割には、精度が桁違いに悪い
というわけで
・以前読んだ「A Local Method for Detecting Communities」をベースにプログラムしなおすことに
・実際に論文の方法でプログラムを組んでみて、効果を確かめ、更に改良するという方向へ

そんなこんなでプログラムを追加していく作業を始めるのですが、
それまで書いたプログラムは殆ど役に立たたないので、追加というか書き直しですね。
しかも、ひどく眠い。
学校に行っても眠気が治まらず、休憩室で仮眠してたら、
6時間くらい寝てしまって、これは仮眠とは言わないですね。

8月12日

朝まで徹夜でプログラミングして、なんとか論文の実装は終了。
簡単な論文でよかった。これから、何か独自のアプローチをしなきゃいけないわけ。
とりあえず徹夜で疲れたから、寝るという誘惑もよぎったが、実際は・・・

昼からは気分転換も兼ねて人生で始めてのコミケに行ってきました。
(注:コミケ=オタク=同人誌+コスプレ=の聖地!?)
詳しくはまた別の機会に紹介しますが、
高校の同級生と会って久々に徹夜でカラオケしました。
というわけで午後移行は何もせず。

8月13日

前日の影響で、朝帰って夜まで爆睡。
ワンピースが始まる頃起きました。
結局何もしてません。

8月14日

14日に日付が変わるくらいから、心を入れ替えてプログラミング再開。
論文に書いた方法は実装したので、あとはオリジナリティの部分です。
ここからは、試行錯誤しながら、プログラミングしていくことになります。

プログラミングしては、実行して結果解析して改良するという繰り返し。
なかなか思うようにならないわけです。
とりあえず次の点に注力することにしました。

論文の方法
・隣接行列からk-shell法というものを使ってmembership行列というものを生成
・membership行列の、行と列の順番を規則に従って適切に並び替える
・そうすると行列からコミュニティ(=ネットワークの塊)がみえてくるというもの
改良する点1
・k-shell法を使う際に変数αという値を使う
・変数αはこれより小さければコミュニティでないという閾値(しきいち)
・このαを一つだけではなく、複数用いて、より柔軟なものとする
改良する点2
・membership行列を並び替える方法は、論文で示されているものはすごく簡単な方法
・より高度なソートアルゴリズムを使うことで、精度のよい並び替えができるのではないか

8月15日

前日に引き続きプログラムの改良です。
そしてある程度の結果が出てきたので、結果の検討とともに
今後の方針について先生と協議することに。
まとめると次のような結果です。

試行錯誤の結果
・ソートアルゴリズムの改良は、複雑なものにしたら逆に精度が悪くなった
・もとの論文に後処理を加えると精度が上がったが、当たり前の結果なので面白くない
・αの値を多く取ると、精度はあがりそうだが、劇的に向上するわけではなさそう
協議の結果
・以前の隣接行列を直接いじる方法は今回は発表しない
・αの値を多く取るのは面白い結果が期待できそうだ
・ソートアルゴリズムについては、それほど面白そうではない
・αを多値にすることに加えてあともう一つ何かポイントが欲しい。

ちなみに先生に夕食をおごってもらいました。
研究室に遅くまで残ってるといいことあるものです。
ただ、このときは残ってるというか、休憩室で夜まで寝てただけですが。

8月16日

この日は修論を一時中断して、他の作業をすることになりました。
私が管理してるサーバの一つが、とある事情で移転することになったので、そのための準備です。
サーバ移転を自動化するためのプログラム書いたり、
新サーバに不具合がないかをチェックしたり、修論とは全く関係ありません。
お盆であるこの時期に移転することになっていたので、仕方ないですよね。 修論を早めにしておかない自分が悪いわけです。

8月17日

論文を書き始めることに。 何せ、同じ研究室修士2年の6人中、4人は既にほぼ完成している模様なのです。
残る1人は最近みかけないだけなので、もしかしたらできてないのは私だけかもしれません。
そんなわけで少しだけ危機感を抱いたので、プログラムは完璧ではないけど、執筆開始。

事務室から示されたフォーマットはこれだけです。
卒論のときはもっと細かく指定してきたのにな。
この日は全4ページ中の最初の半ページにあたる「はじめに」を書いて終了です。

8月18日

本日も論文を書いてます。
第二章になる「アルゴリズム」についてを半分くらい書いて、
1.2ページ埋めたところで終了です。

8月19日

今までの二日間の論文執筆ペースが異様に遅いのは、
冷房病のためか満身創痍でやる気がなくて寝てたりしてたせいです。
しかも17日と18日は、16日にやったサーバ移転作業の続きもあったしね。
でも、残り100時間切ってるし、そろそろやばい、本当に。
というわけで臨戦態勢入ります。

臨戦態勢に入って、8時間経過しました。
途中、プログラムのバグをみつけて修正に2,3時間かかってしまいましたが、
ようやく修論中間発表の草稿が完成!。
担当教員にメールで添付して、とりあえず終了。
プログラムの可読性をあげとくかな。

修士論文中間発表草稿(PDF:97KB)

8月20日

週末ということもあってか、結局校正は帰ってきませんでした。
時間もないので、教授と助教授にもメールで草稿を添付。
久々に修論からの解放ということで、家事雑用で一日終了です。

8月21日

昼過ぎになって教授と担当教員からの校正が帰ってきました。
殆ど校正箇所もなかったので、すぐに校正も終わりました。
あとは、翌日の研究室内の発表会をクリアして、事務室に提出すればおしまいです。

30日の口頭発表用の資料を作って、それを研究室内発表で使おうと思ってたんですが、
校正で指摘された箇所を修正したら、急にやる気がなくなったので、帰ることに。 研究室の他の人も提出論文のほうは殆どできてるようだったので、
ようやく人並みの進捗ペースになってきたと思います。

8月22日

本日は遂に、修士論文中間審査要旨提出日です。
加えて、研究室内での発表も直前にあります。

というわけで、まずは発表準備。
22日の午前2時くらいに起きて、10時の研究室内発表直前まで、超特急で仕上げました。
30日に行われる専攻内での口頭発表の発表時間が15分なので、その時間が目安です。
つまり研究室内発表=修論中間発表の草稿ってことですね。
3時間くらいしか寝てないのに、よく頑張った、自分。

ただ、いざ10時の研究室会が始まってみると、
研究室の自分以外のメンバーは特に発表資料を準備するでもなく、
今日提出する要旨を片手に説明している程度。
もしかして、私だけ無駄に頑張りすぎたかしら。
実際に30日の発表練習は本日ではなく28日に別途開催されるとのこと。
私は既に今回が発表練習だったので、28日はやらなくてもいいことになりました。

発表内容に関しては特筆すべきような質問事項もなかったですが、
やはり完成度としてはまだ7〜8割なので、
もっとわかりにくい部分や無駄な部分を削ったりして、
30日の発表に向けて、徐々に修正していく必要がありますね。

発表が終わってからは、提出する要旨の校正です。
先生方に校正してもらったのですが、誤字や間違いなどがないように、
自分で何度も何度も目を通します。5回以上は読んだね。
そして、締め切り時間17時の2時間ほどまえに、プリントアウトした要旨を提出しました。

結局、実質10日くらいしかやってないのに、
よく短時間でこれだけ作れたと今更ながら感心。
進捗状況もダントツでビリだったのに、発表資料も既に作成しているため、
いつのまにかトップを争うほどに。
いやぁ、やればできるもんです。

研究室内用プレゼン資料(PDF:1.25MB)
修士論文中間審査要旨(PDF:97KB)
中間発表で用いたプログラム(pl:31KB)

8月29日

22日に要旨を提出してからというもの、
DVDで白い巨塔を見たり、DSでFF3をやったりして遅い夏休みを謳歌してました。
そして、中間審査(口頭発表)当日に日付が変わるくらいになって、
ようやく発表資料の手直し開始。

大体は研究室発表の際にできあがっているので、
作りこみがたらない部分や、わかりにくかった部分を修正して、
発表の際に読み上げる原稿を作るだけです。

8月30日

遂に迎えた修士論文中間審査!
朝方には発表資料も完成したので、戦闘服(スーツ)を着用して、いざ出陣(登校)。
発表1時間半前の9時に学校に到着です。

しかし、誰もいない・・・
発表は50音順なので、私は研究室で最初に発表です。
だから私以外いなくてもいいんですが、まさか誰もいないとは・・・
10時頃には他のメンバーも現れはじめたけど、寂しかったなぁ。

発表自体は、審査の先生は5人ほどで、発表15分+試問10分。
発表は準備した資料をプロジェクター投影しながら原稿を読むだけ。
質疑応答も、予想範囲内の質問だったので、特に問題もなく終了です。
質疑応答で何があったかよく覚えてないのはご愛嬌。

発表が終わったあとは4ヶ月の夏休み開始!
とりあえず研究室に戻って他のメンバーの発表が全員終わるまで、無駄話。
普通の研究室ならば、打ち上げなどあるんでしょうが、
ここは何もなくて、自由解散なのが大橋研クオリティです。

修士論文中間審査発表資料(PDF:1.38MB)読み原稿

9月1日

教授より、修士論文の中間審査が全員合格となったというメールがありました。
これで心置きなく夏休みを謳歌できるわけですね。

9月5日

教授より再びメール。
中間審査のコメントが届いたとのことです。
私のコメントは以下にあるとおり。

・用語の説明がもう少し親切であれば良い。
・大規模問題への適要可能性があるか?原稿を読まず、聴衆に向かって発表を。
・ソートを可視化ではなくクラスタリングと考えると改良の余地がないか

用語の説明を丁寧にしすぎると、肝心の中身を伝える時間が無い気もします。
読み原稿は直前まで編集していたので、覚える時間がなかったのと、
審査の先生方は論文読んでて、こっちを見てないから無駄だと思ったわけです。
あとは、真摯に聞き入れておきたいと思います。

12月19日

中間発表が終わってからというもの、
非常に長い夏休みを過ごしていたわけですが、気付くいたら冬!
2週間に1回ある研究室会も私以外は皆、1,2回は進捗報告を既にしている。
私だけが何も進んでないという雰囲気を払拭するために、
週末の研究室会で何かしらの報告をすることを決定しました。
ちなみに決定しただけで結局何もしてません。

12月21日

決心した研究室会が翌日に迫ったということでそろそろ研究開始です。
行列のソート方法を少しいじってみました。

まず、以前は行列を整理するときに選択ソートぽかったのを、
より精度を上げるために挿入ソートに変更したりしてみた。
しかし結果は微妙。
よくなったといえばよくなったような「気がする」感じ。

ソートを改良しても限界があると思ったので、
ソートをする際に用いる行ごとの「距離」の計算方法を工夫することに。
以前は単に絶対値を使っていたのだが、列情報を利用してみたり、重みを書けてみた。
これは効果は抜群。ソートよりも距離の算出の方が重要らしいですね。

12月22日

仮眠しながら研究を続け、朝方くらいから発表資料作り。
そして10時からの研究室会直前に発表資料完成。
内容はあまり無いものの、無事に発表できました。
発表後に先生方から頂いたコメントは以下のとおり。

・距離を計算するときに重みを乗じたりしているが、次元が二乗になったりするのは大丈夫か?
・行列の結果の定量的評価方法として、「モジュラリティ」と呼ばれるものを利用してはどうか?
・行列のソートについては、「クラスタパーティショニング」と呼ばれる
 大規模行列の固有値を求める際などに使われているものを参考にしてみてはどうか?

距離の次元については、「距離」と銘打っているものの、
もともと無次元な値なので問題ないという答えをしておきました。
モジュラリティとクラスタパーティショニングについては、
研究室会のあとにちょこっと調べてみましたが、
よくわからない&研究に直結しそうなものは無いという感じでした。
ちなみにこの日の夕方は忘年会でした。

12月22日研究室会資料(PDF:1.08MB)

1月9日

研究室内発表から殆ど進んでないわけですが、
このままではまずい!と思い始めたので、
とりあえず指導教員の部屋に行って、今後の方針について話し合いすることに!
そして小一時間の話し合いの結果は以下のメモ参照。

・モジュラリティには2種類ある
 最初に提案されたモジュラリティはグラフ全体で一つの値を持つ?
 次に提案されたモジュラリティはグラフを2個に分けたときの値?
 →検討の結果、前者のモジュラリティは大きいほどよく分離されているが
  値自体を絶対的に比較できるものではないが、
  後者のモジュラリティは完全分離で1、ランダムなときに0になるように正規化されている
・クラスタパーティショニングなどのソート関係は、
 既存論文などで既に様々な手法が出尽くしていると思われて面白くない
 ありきたりの方法である
・よってモジュラリティの適用や、シェル法の改良を進める
・まずは実数値の適用
・うまくいかない場合、シェル法が悪いのか距離の計算が悪いのかソートが悪いのかわからない
 しかし、シェル法を改良した結果が、ソート方法を改良すると逆に悪い結果となることはないはず
 だからソート方法は今回は後回し
・ニューマンの方法は一本一本切っていくので、ネットワーク構造が失われており意味がわからない
 こちらの方がより直感的
・視点を変えた際のモジュラリティ値をグラフにして、どこが一番みやすいかを載せるとよい
・ソートに関するキーワードとしては
 行列、クラスタリング、固有値、METIS、マルチレベルパーティショニングアルゴリズム
・タイトルには「マルチスケールクラスタリング」という言葉がかっこよくてよい
・人がやっていない部分を積極的に進めるべき
・視点を自由に変えられる&コミュニティ検出ができるという点がポイント

1月12日

修論も近いというのに10日はTDLへ遊びに行き、
11日はgoogleのロゴ画像なんか収集してました。
こんなんじゃいけないと思い、今日は修論モード。
まずは1月15日までに提出しなければいけない題目(研究テーマ名)を決めます。

一応中間発表では
「多閾値Membership行列を用いたコミュニティ検出に関する研究」
というのを1時間くらいで考えて勝手に名付けて論文の見出しにつけて、
そのまま担当教員から何も言われなかったので、気にせずに提出しまいた。

さて、修論本体ですが、これはずっと残るものなので
適当に名付けるのはやめたい。
しかも研究が順調に進むのであれば、
「多閾値」という離散値ではなく「連続閾値」になるんですよね。
ただ順調に進むかどうかわからないので両方とも敢えて使いたくはない。
加えて「Membership行列」ってのは研究内容として重要なものの、
参考にしている論文にオリジナルな語であるので一般的には全く通じない。
というわけで、一般的な言葉を使って、
少しでも題名だけで中身までわかるようなテーマ名にしたいのです。

基本骨格としては「〜の〜に関する研究」とか
「〜を用いた〜に関する研究」という二つの言葉の組み合わせで行くことに。
まず、メインとなる後半部分をどうするかですが、
9日の話し合いで出てきた「マルチスケールクラスタリング」を使おうと早々に決定。
やっぱり響きが格好いいし、マルチスケール=多重階層ってことで、
今回の研究内容を非常によく表していますからね。
「〜に関する研究」っていうタイトルはなんだかまどろっこしかったので、
「〜マルチスケールクラスタリング手法の開発」とすることにしました。

続いて前半部ですが、なかなかいい言葉が見つからない。
検出・可視化・効果的・視点・自由・可変・・・
などの単語を考えてみるものの、なかなかピンとくるものがない。
そうやって2時間くらい中間発表の資料を見ながら考えていたら、
ふと頭の中に「局所的」「構造」「ネットワーク」という単語が!
そうやってテーマ名の草稿である、
「ネットワークの局所的構造を利用したマルチスケールクラスタリング手法の開発」
が決定しました。

指導教員にテーマ名を確認してもらったところ、
基本的にはこれでいいんじゃないということ。
ただ何かしっくりいかないようです。
しばらく考えこんで、「局所的構造」だと様々な「局所的構造」があるので
具体的にどの「局所的構造」を使うかはっきりさせた方がいいということになり、
結局「局所的構造」の代わりに「殻構造」という限定した用語を使うことにしました。
単語の認知度としてはかなり下がったものの、
研究内容の表現性という観点からは良いタイトルではないでしょうか。

というわけで、今日の結論=テーマ名。
「ネットワークの殻構造を利用したマルチスケールクラスタリング手法の開発」
参考のため英名も考えておきました。
「Development of a Multi-Scale Clustering Method using Network Shell Structure」
英語の方がわかりやすいという意見もあります・・・
たしかに日本語のうち過半数がカタカナだからな・・・・・・・

1月15日

本日から真面目にプログラミングをしますね。
まずは中間発表の時に作ったプログラムを確認。
えー…もう殆ど覚えてませんが

まずはプログラムの「改良」に取り掛かります。
「研究」といえるほどの大それたものではなく、単に使いやすくするための「改良」です。
なのでこれをしたところで研究自体は何も進まないんですけどね。
どういうところを改良したかというと、
中間発表では一つのファイルにプログラムをまとめてごちゃ混ぜになってたんですが、
今回は昨日ごとにプログラムファイルを分けて、
機能もより豊富にしようという試みです。

今日やった部分は、
従来のプログラムの入力部分を別ファイルにパッケージ化してみました。
データ入力部分ということで、当然研究には直接関係ないですね。

1月16日

引き続いてプログラムの「改良」をやってます。
今日はプログラムの出力部分を中心に改良。
これでプログラムの中でデータがどのように加工されてるかがわかりやすくなったかな。

こんな調子で「研究」は相変わらず進んでないわけですが、
昨日といい今日といい、夜になると頭が痛くなるんですよね。
これはもしかして修論が進まないことが精神的ストレスになってるのかしら。

1月17日

プログラムの出力部分を更に発展させてみました。
結果を画像として出力する部分の機能を大幅に拡張させてみました。
普通はデータを数値とかでプログラムから出力して、
専用のソフトとかExcelとかで図にするんですが、
それが面倒くさいと思った私は直接に図を書き出すことにしてたわけです。
図の形式はEPSとかいってプリンタとかで使われるやつなんですが、
そこのところをより見やすいように大幅に拡張したわけですね。

しかし、相変わらず研究本体とは全く関係ない部分の研究。
あ、敢えて言うならば論文に載せる図が綺麗になる!
そして今日も夜になると頭が痛くなる原因不明の病気です。

1月18日

入出力部分のプログラム改造がひと段落したので、遂に計算部分の改造に取り掛かります。
ようやく研究に少し関係のある部分まできました。
ただ、今日やったのは中間発表のプログラムがわかりにくかったので、
より汎用性が高くなるように全面的に書き換えたってこと。

周囲を見渡すと、私以外の修論生5人は既に論文本体を書き始めています。
裏切りものどもめ!
ちなみに頭痛のほうは、学校に深夜までいるせいか大丈夫です。
もしかしてあの自宅に何かある!?

1月19日

修論関係で初めて研究室に泊まってしまいました。
といっても2時くらいから8時くらいまで寝てたんですけど。。。
起きてから昨日やってた計算部分のプログラム改良を続行。
計算部分には、主に値算出→距離計算→ソートの3段階があるんですが、
昨日は距離計算を改良してた途中で寝てしまったのでそこから再開。
そして改良作業を昼前には一段落したわけです。
とりあえずバックアップをかねてプログラムを置いておこう。
プログラム類(1月19日昼現在)です。
プログラム詳細は説明するの面倒くさいのでまた今度。

一度帰宅して風呂に入って再び研究室へ。
研究に使うデータは今まで手動で作ってたんですが、
自動生成するプログラムを作ることに決定して、作業開始です。

Appendix.0119

要旨提出まで2週間を切り、300時間も下回ったこの状況、
私の机がどうなっているかを説明しましょう。
研究に飽きたからこんなこと書いてるのかと言えば…その通り…
※ちなみに以下の写真は全てクリックすると拡大されます。

まずは机の上全般ですがこんな感じ。
机全景
・中央に研究(プログラミング)に使っている私物ノートパソコン
(某研究室から借りてきたヘッドフォンが繋がっていてBGMも迷惑かけずに高音質で楽しめます)
(ちなみに最近のBGMはFF12のサントラ)
・中央奥には研究室のPCとディスプレイを無駄に使ってカウントダウン表示
(当然100分の1秒単位の超高速で時間が減っていってます…)
・左側には参考文献(殆どない)と中間発表の資料
・右側にはメモ用紙(PCで全て作業するのであまり使われない)

写真右奥に、食料備蓄があったのにお気づきでしょうか?
脳を活性化するために糖分=チョコレートと、
甘くなった口を正常化するためのクッキー(雑穀なので健康的?)があります。
当然飲料の備蓄も完璧で、研究室冷蔵庫のチルド室は私の飲料で占拠しておきました。
菓子類 水
これらで我慢できなくなったら、自転車で3分ほどの場所にある吉野家に行くわけです。

お菓子の山に一際、燦然と輝くチョコレートの山。
そう、それは明治製菓による「チョコレート効果」
なんと、「健康とおいしさを考えた大人のチョコレート」らしい。
ボトルの中には一口サイズのチョコが入っており非常に食べやすい。
チョコ全景 チョコ
糖分により脳が活性化されて、1ボトル(66g)食べても400kcalしかなく、
まさに研究のお供に最適(違?
ただ、最近食べすぎのせいか、消費量が落ち込んできた…

さて、そろそろ現実逃避も終わらせて研究に戻るか…

1月20日

ちょっと所用ができて何もできず。
別にセンター試験を受験してたわけではありません。
一応、今後やることを考えてみたので備忘録的に。

・距離計算法の改良
 →EMERGの上限を設ける
・ソート法の改良
 →適当な値を抽出して総当たり
 →従来の方法に履歴係数をかけてはどうか
 →マージ的方法を用いてはどうか
・サンプルデータの作成
 →プログラムを作って自動生成させるか、手動作成か
 →現実ネットワーク→mixi or 先生からもらう
 →理想ネットワーク→ランダムグラフ、WSグラフ、階層構造モデル
・モジュラリティの適用
 →四角形(グループ)をどのように定義するか
・クラスタ係数など、従来の値との比較はできないか

1月21日

昨日の備忘録の一部を進めてみた。
研究と直接的な関係の薄い部分から始めてみた。
別に現実逃避したいからというわけではなく、単に手がつけやすいから。

その結果、「EMERGの上限」を設ける改造はすぐに終わった、効果はまぁあるんじゃない?
続いて、ソート法の改良、これは先生からはやらなくていいといわれているところ。
やらなくていいって言われてるけど、ずっと気になってるんだよね。
でも時間ないから、今日改造してダメだったら諦めようと思ってたの。
そしたらね、マージソートを彷彿とさせるアルゴリズムによって中間発表以来の懸案事項が解決。
サンプルデータが少ないので、完璧かどうかはわからないが、かなりいい感じよ。
人生捨てたもんじゃないね。

さぁ、あとはサンプルデータ作成とモジュラリティの適用。
どっちを先にしようかと思いながら日付が変わったので眠くなる。
明日は月曜だし、一回先生のところにいってみるかな。

1月22日

モジュラリティの適用は予想してたよりも簡単に実装完了。
ただ思ったより単調なデータしか出ず不満。改良が必要かな。
しかも昨日成功したと思ってたソートなんですが、
たまたま成功しただけで実際はあまり結果がよくないことが判明。
前途多難だわ…

とりあえず機能実装が一段落したので、
週の最初でもあるし、一度担当教員と簡単にミーティング。
そして、以下のように今後の方針を確定。

・距離の計算方法に現在絶対値を用いてるが、行列のcosを用いた方法も追加
・既存方法との比較
 →BCと呼ばれる量を用いてコミュニティ分割を行い、その時のmodularityを比較
 →BCの説明はhttp://syrinx.q.t.u-tokyo.ac.jp/~yas/graph/tutorial.html#EX_BETWEENNESSCENTRALITY
・サンプルデータ
 →現実ネットワーク→http://www-personal.umich.edu/~mejn/netdata/
 →理想ネットワーク→「複雑ネットワークの科学」7.1階層的モデル に掲載されている方法
・ソート法の改良
 →マージ的方法の改良
 →マージの途中過程を利用してmodurarityを計算できないか

今日は朝5時前に研究室で力尽きて11時頃まで床の上で寝てました
6時間きっちり寝たはずなのに、夕方からすごく眠くてずーっとだらけモード
だらけてたせいで、距離の計算方法にcosを用いる方法を追加するという、
10分ちょいで終わる作業をしただけで実質的に午後は終了して
あまりに眠いので仮眠して日付変わるくらいに起きてきましたよ
要旨提出まで200時間ちょいしかないのに、いいのかしら、こんなんで。

1月23日

cosを用いる方法は、あんまり賢くない方法であることがわかって少し凹みました。
そして、なんだかやる気をなくして、23日は昼に帰宅してからずっと寝てましたとさ。
寝だめ…です。

1月24日

午前中まで死んだように寝てました。寝すぎです。
そして午後から研究開始かと思いきや、
研究室でビジネスマナーテストが大流行?してマナーテストをしてたら夕方に。
これじゃいけないと思って、日が沈んだ頃から研究開始。

まずはBCと呼ばれる方法を実装して、それをもとに結果評価値であるモジュラリティを計測。
最初は1〜3時間で終わるかなぁと楽観的に考えていたら、なんと4時間もかかってしまった。
実装にバグがあっては困るので、2つの違う方法で実装して結果をつき合わせたりしたからだな。
そんでもって、BCによる方法と、今回研究している方法を比較した結果、
予想はしていたものの、BCによる方法の方がよい結果がでます。
なんとか逆転できないかとちょこちょこいじってみたんですが、だめっぽいです。
モジュラリティと呼ばれる値が全てというわけではないにしろ、ちょっとショックですね。

あとはサンプルデータを充実させて、ソート法がこれ以上改良できないか試行錯誤するのみです。
というわけである意味ひと段落ついたので、現時点でのプログラムをバックアップ。
プログラム類(1月24日深夜現在)です。

1月25日

朝方までプログラミングして、研究室の椅子の上で寝てたのはいいが、
寒いし寝心地が悪いので、朝方に一時帰宅してベッドで睡眠。
やっぱベッドはいいね、寝心地が最高だよ。
午後に少しミーティングに参加してたので、結局研究始めたのは夕方から。

まずはサンプルデータを作成してみて解析したみたものの、なかなかいい結果は得られず。
ソート法も改良したり、いじってみたわけですが、逆に悪化したので元に戻す。
いまさらながら、今回の手法って、万能じゃないなぁと思う。
でもまぁ全く使えないわけではないので、なんとか結果を導こう。
そろそろ要旨書かないといけないし、今晩あたりから確定事項分だけを利用して要旨書こうかな。

1月26日

要旨を書き始めようかとも思ったのですが、やる気がでないので、
論文本体の章だとか目次などのテンプレートをWordで作ってました。
論文テンプレート(DOCX:26KB)
Texという選択肢もあったんですがMicrosoft信者としてはやはりWordでしょう。
拡張子を見てわかるとおり、普通のWord(doc形式)ではありません。
1月30日に発売予定の新Office2007でベータ版です。
ベータ版故に、バグっぽいのもあるし製品版とも挙動が違うかもしれないけど仕方ない。
30日午前0時に販売解禁で秋葉原ではVista&Officeの深夜販売やるようなので、
買いだしに行って、購入&インストールしてからが論文本番ですね。

昨日判明した、結果があまりよくないという報告を先生にしてきました。
本当は昨日したかったけど24時間近くつかまらなかったのよね。
それがやる気がでなかった原因の一つなんだけど。
結果について相談した結果、あまり好ましくないけど仕方ないという方向に。
いまさらどうすることもできないので、
良くできた理想的な結果はそのまま掲載して、
あまり良くなかった(悪かった)結果は理由をしっかり考察することで対処することにしました。

というわけで、あとは論文掲載用のデータを生成したりしていよいよ要旨&本論です。
一応、目標として週末中に要旨を仕上げるという宣言を先生にしてきました。

1月27日

嵐の前の静けさ、、、というわけではないですが、本日は定休日です。
週末中に仕上げると宣言したからには土曜にやるべきなんですが、
日曜だけでできあがるだろうと甘く見ているわけです。
早い話、家にいるとやる気でないし、かといって学校に行く元気もないわけ。

1月28日

午後になるまでだらけていたものの、
さすがに残り時間が少なくなってきたのでぼちぼち要旨を書き始めます。
中間発表のときの要旨をベースにするので大半は同じ内容なのですが、
4ページという限られたスペースの中で、載せる情報を決めるのは大変なこと。
語句も丁寧に説明するとスペースが足りないし、割愛すると意味不明だし。
そんなこんなで要旨の一部を変えるだけだから数時間で終わると思っていた作業は
日付をまたいでも続くのでした。
(つまり、週末中に終わらなかったということです)

ちなみに要旨を執筆している場所は研究室ですが、
場所を修論研究室から卒論のときの研究室に移しました。
なんでかというと
・家からの距離がやや近い
・コンビニまで徒歩1分弱
・カラープリンタが最新で起動や印刷が早い
・土足厳禁なので床で寝れる
・しかも簡易ベッドとタオルケットくわえて巨大ビーズクッションもある
ただいいことばかりではなくて短所もあります。
・修論の打ち合わせをしたくても修論の研究室まで自転車でも5分かかる
(キャンパスの端と端に卒論と修論の研究室があるため)
・修論研究室に比べてうるさい
(例の賑やかな教授が昼夜を問わず仕事してるんで、仕方ないわけです)
やっぱり大事なのは環境だよね。

1月29日

前日から日をまたいでやっていた要旨は、ようやく朝方完成しました。
かかった時間12時間。
4ページで12時間でしょ、そうすると本文80ページ書くのに240時間。
今から寝ないでしても間に合いそうにありません。
というわけで、相当なペースアップが必要だということに気付いた次第です。
とりあえず完成した草稿を先生方に送って、そのまま研究室の床に倒れこみました。

修論要旨:草稿(PDF:613KB)

研究室がうるさいので昼前に起きて、自分でも要旨を校正。
とりあえず一部の図が見にくかったので作成しなおしました。
そして夕方に仮眠して来るべき戦いに備えます。

22時前、戦いのときは来た!
秋葉原に行ってきます。
なぜかって?
そこにVistaとOffice2007があるからです。
つまりマイクロソフト恒例(?)の深夜販売に行ってくるのです。

1月30日

午前零時に早速買ってきました。
・Windows Vista Ultimate Upgrade
・Office 2007 Ultimate Academic
・Acrobat 8 Professional
さすがにOSを入れ替える時間と勇気はないので
これまで使ってきたOffice2000+OfficeXP+Office2007Betaの混成環境を
きれいさっぱりすべてアンインストールしてOffice2007をインストール。
これで本格的に修論を作成できます。
さすがにベータ版は落ちすぎて使えなかったし…

修論のほうですが、校正が帰ってきたので修正して自分でも校正。
それに久々に研究室の修士2年の6人全員が揃ったので雑談。
そうこうしてるうちに、本論文のほうは1,2ページしか作成できずに終了。
1日10ページ書く目標だったのにな…
とりあえず要旨の最終版を担当教員に送付して終了です。

1月31日

担当教員に電話で最終校正版でいいかを確認。
いいようなので、自分でも最終確認して早速印刷。そして提出。

修論要旨:完成稿(PDF:573KB)

なんか一段落して今日はこのままやる気が出ないけれどもそんなわけにはいかないよな。
【現在進行中】

2月16日

2月7日に提出したあと、二日間くらい疲れ果てて寝てて、
そのあとも自宅のサーバ修理だとか、花粉症だとか、風邪だとかで死んでました。
そして、気づいたら日付も変わって16日だね。

16日は研究室内での修論口頭発表の練習会。
それなのに日付が変わっても結局何も作っていない!
さすがにそろそろはじめなければと思って作業開始です。

中間発表は15分で、今回の発表は20分。
というわけで、中間発表をベースに大幅改修。
内容も半分くらいは重複しているので、簡単に終わるだろうと思ってた…
それが終わらないんですよね
一度修正し始めると、細かい部分まで凝り始めちゃうんです
結果的にほとんど新規作成に近くなったりしてるし…

朝6時くらいになったところで目標20枚のうち半分しかできてない!
発表練習は10時からだけど、このままでは間に合いそうにない!
そこで一大決心しました。
私は発表順序が一番最後になっていたので、発表練習は夕方頃
というわけで発表練習の場に最初から出席するのはあきらめて、
自宅で自分の資料を作って、完成してから登校して発表練習に参加することに
先生&みなさんごめんなさい。ほんといっぱいいっぱいですね。

結局できあがったのは午後1時ぐらい。
登校したらちょうど昼休みで誰もいなかったけどね。
そして昼休みの間に、作りこみが足らなかったところを修正っと。

肝心の発表のほうですが、パワポをリハーサルモードにして時間を確認しながら
20分の口頭発表をおこなって、そのあと先生方や研究室生から若干の質疑応答がある感じ
質疑応答といっても、殆どは、ここをこうしたほうがいいよというアドバイスですね。
それにしても、さすが東大の先生方は突っ込みがするどい。
自分でも不安だったところや、怪しいと思ってたポイントを的確についてきますね。
以下に発表内容とメモを記しておきます。

修士論文口頭発表:草稿(PDF:2.36MB)読み原稿

・数式を読むよりも、物理的な説明をしたほうがよい
 (モジュラリティの第1項は何で、第2項は何だというような)
・モジュラリティのグラフが要旨と違う
・モジュラリティは提案ではなく、単に使っただけ
・「モジュラリティを適用した」ではなく「モジュラリティを用いて評価した」へ
・モジュラリティの評価は最大値ではなく、最大値のときの横軸の値ではないか?
・階層構造がないことがわかる
・ソート部分は軽く触れるだけでよい
・質問があってから数式やアルゴリズムは説明すればよい
・諮問に対する答えは短く、完結に

発表が終わってからも、自分の研究室の引っ越し準備したり、
みんなでご飯食べに行ったり、他の研究室の手伝いしてたりしたら、
気づいたら日付が変わりそう。なんだか眠いと思って考えたら徹夜明けなのでした。

2月19日

現在進行中

administrated by umekkii -> admin@umekkii.jp