tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニート → 米国CS PhDが諸々書いてます

Ph.D.編入が決まったので入学からあったことを時系列で書いてみる

皆様久しぶりです、tkmです。

夏休みも始まって1ヶ月経ち、鬼のような3授業履修+研究から心身ともに癒えて来たので修士入学〜Ph.D.編入が決まるまであったことを可能な限り時系列で振り返ってみます。

以前のブログで支援お願いした手前、私の留学模様はコンテンツとして楽しんで貰らうべくTwitterで事細かに報告するようにはしていますが、やはりブログとして残しておかないと後から見た人とかは振り返りづらいと思うので、これを期にまとめようと思います。

あと夏の留学向け奨学金戦線も始まってきており、米国大学院への留学する人が少しでも現地の想像がしやすくなるように何でも書いて行きます

修士も受験したほうが良いよ!

振り返る前に、多分このブログを読む人は米国で大学院を考えている人が多いと思うので一言

修士も受験したほうが良いよ!」

特にCSでの留学を考えている人は一応出しておいたほうが良いです。この分野の倍率はマジ異常です。

「既に留学先の教授と連絡が取れてポジティブな反応が帰ってきている。」レベルの人は心配しなくて良いと思いますが、

このツイートにあるように米国Ph.D.受験はまず落ちるものだと思ってよいです。

こんな話も出るレベルです

なので修士を受けておくと

  • 全落ちは流石に精神的に辛いので回避できる
  • 全落ちすると自分が米国の大学からみてどのレベルかを把握出来ない
  • 修士だとPh.D.よりも上位大学から合格をもらいやすい (PhD編入できると旨味が大きい)
  • 日本から受験する時と違って指導教員を見て(実際に授業受けて)から選べる
  • 英語がアレでも、ラボに入ってしまえば実力でゴリ押せる
  • 米国Ph.D.は雇用にほぼ近いので、教授達はレジュメで優秀な遠くの人より、知っている真面目に働く近くの人を採用しやすい傾向がある
  • Ph.D.に行くにしても同一大学だと授業を持ち越せるので卒業が早まる可能性
  • 他大Ph.D.でも米国大学間なら授業移管はしやすい
  • Ph.D.受験時に推薦状を米国大学の人にお願いできる
  • 米国仕様のGPAが手に入る
  • 最悪上手く行かなくても米国で就労できるビザが手に入る

などなどメリットがあります。

デメリットとしては生活費も含めて州立大でも500万円はかかる計算になります。

結局、修士はお金で時間を買う形になります。私の場合修士の間にPh.D.卒業要件の授業をほぼとり終えているのでPh.D.では研究に集中できるという夢のような状態になってます。

500万円はCS関連でしっかり大学で勉強した結婚してないエンジニアが30歳まで働けば払える金額と思うので、500万で1年買えると思えばアラサーのおっさん的にはありな選択な気がします。

とはいえ500万円は大金なので、一番スマートな方法は夏のインターンで研究室に潜り込む方法です。夏だけでなくインターンは年中募集しているので潜り込んでハードワークを見せつけるのが多分一番近道です。

CSの建物内の掲示板ですが、こんな感じにインターンは普通に募集しています。

f:id:tkm2261:20190808110239p:plain

その他修士の情報はこちら

米国大学院でCS修士について書いてみる - tkm2261's blog

この1年の振り返り

前置きが長くなりましたが、本編を始めます。

入学までのことは前の記事に書いているのでそちらもどうぞ。

2018年9月前半

  • 9/10にLAX空港に降り立つ
  • simは日本で買っておいたのですぐセットアップが完了
    • 今も使っていて大体月30ドルぐらい
  • LAX->大学は50ドルで乗り合いシャトルバスで移動
  • 共有の寝室は嫌だったので自転車で30分ぐらいの一軒家の一部屋を月700ドルで借りる
    • ただしこの物件キッチンは大家が使うから使えないという不思議な契約
    • このせいで外食とかお菓子で空腹を誤魔化してたせいでかなり太った
  • 入居日に大家にシーツだけは買ってくるようにと言われて片道30分歩いて最寄りのTargetに行くことに
  • その後、同じ家に住んでいたポスドクの人から要らなくなった自転車をもらえたので行動が一気に楽に

2018年9月後半

  • 9/20 に入学生オリエンテーションから大学生活がスタート
  • 留学生にはメンターが割当られており、そのメンターに付いているグループが同じテーブルに割当られて、交流を図る。
  • 修士学生の辛いところは基本友人のつながりがないので、自分で色々調べなきゃいけない
    • Ph.D.の場合は研究室に先に顔を出すのでラボの先輩方から諸々の情報を貰える
  • 後々、この時同じテーブルだった人と話すと、「あの時はお前の英語何言っているか全然わからんかった」と言われる。どんだけ酷かったんだ私の英語は。。。

秋学期(2018年10月〜12月)

研究室所属

  • クォーター制なので3ヶ月が1学期
  • 必修セミナーで、UCIに赴任したばかりの今の指導教員の話を聞く(10/14)
    • セキュリティの研究者でスマホへの攻撃をとかを研究していて、
    • 最近はスマート交通網への攻撃や自動運転車のセキュリティを研究しているとのこと
    • 交通の話だと、私の専門の最適化が生きるし、自動運転車は機械学習いっぱい使ってるしで興味を持つ
  • セミナーの最後でmotivatedな学生募集中ということでメールで連絡
    • セキュリティとか全くわからなかったけど、漫然と過ごして研究歴つかないのが一番リスクかなと
  • レジュメと過去の成績表を送ってと言われて送ったあと、受け入れてくれる旨の連絡をもらった
  • ラボに行くと、指導教員を変更してラボに来た3年目Ph.D.学生と、ボスが着任してすぐ夏から指導を受けている修士2年の二人がいた。
  • その後すぐに、修士1年の別の学生も追加で加入。彼も修士Ph.D.を目指しており、同じようにお金で苦労してたので、意気投合。後述するがボスは研究の要求がかなり高く大変だったが彼と励まし合いつつ何とか乗り越えることができた。
  • というかラボのメンバー全員ジェントルマンで最年長の私が一番幼く見える始末。
    • 私が英語で落ち込むたびにいつも励ましてくれて感謝しかない。
    • 英語は環境に飛び込んでやれば上達するが、最初期にそれを支えてくれる人がいるかどうかがかなり大きいと思う。私は幸運だった
  • とはいうものの、Ph.D.の学生からは「お前とのMTGは今でも覚えてて、全く何言っているかわからなかった」と言われ、
  • ボスからは論文輪読の発表のあと「全くわからんけど、何とか推測した」と言われる。
  • マジで最初期の英語やばかったな。。。

授業

  • 3授業を履修
    • 卒業には11授業の履修が必要で、3授業履修すると1年3ヶ月(4クォータ)で卒業ができる
  • CS273A: Machine Learning
    • 昨今のブームでかなりの人気授業
    • 評価は宿題+中間試験+期末試験+期末プロジェクト
    • 別学期に同じ授業を担当するもう一人の教授の評判が悪く、この教授が担当する学期に集中する
    • 内容としてはかなり基礎的な内容を広く浅く触れる感じ
    • 研究と他の授業が忙しかったのもあって資料だけ読んで、ほぼ授業は聞いてなかった
    • 調子ぶっこいて中間試験を勉強なしで望んだら点が低かったので、期末は頑張って挽回したらAは取れた
    • 期末プロジェクトは与えられたデータ・セットから選んで機械学習的何かをする感じで適当にこなした。
      • 一応チームプロジェクトだけど私以外はあまり機械学習知らなかったので、適当に私が進めて終わった
    • Akaike's Information CriterionがAikeke's Information Criterionになってたのが未だに忘れられない
  • CS268: Intro to Optimization
    • さすがに専門の最適化の授業なので問題なし
    • 評価は宿題+中間+最終プロジェクト
    • 内容は大体この2冊から
        1. Belegundu & T. Chandrupatla, Optimization Concepts and Applications in Engineering, 2nd ed. Cambridge U. Press.
        1. Luenberger, Linear and Nonlinear Programming.
    • 証明は端折りぎみで、使うことに特化した感じ。というか一冊目の教科書がそんな感じ
    • ただ教授の説明が整理されてなくてあっちこっちに行く上、授業の進捗は早いので正直履修せずに、この授業を日本の修士の授業から移管すればよかったと後悔(後述)
  • CS222: Principles of Data Management
    • あとから知ったがUCIのCSで最も大変な授業の一つ。無知ゆえに取れた授業
    • 小さいデータベースをほぼスクラッチC++で作成、2週間毎に以下の課題を提出
      • ページファイルシステム
      • リレーションマネージャ
      • インデックスマネージャ (B+ tree)
      • クエリエンジン(whereやjoinなど)
    • 成績はプロジェクトが60%で中間と期末が40%の評価
    • プロジェクトの成績は提出ごとに公開されたテストコードを通れば90点、非公開のテストコードを通ると100点以上が貰える
    • 恐ろしいのは、実装を積み上げていくので、過去にテストコードを通っててもバグがあると後の課題提出で爆死する可能性があるところ
    • 秋学期の週末はすべてこれに溶けた

研究生活

  • 研究室に入ったあとは、とりあえず関連論文を10本ぐらいアサインされてそれを個別の研究ゼミで報告
  • 今思うとボスも着任したばかりで忙しく、研究の要求は全然激しくなかった
  • 11月中旬ぐらいにテーマがしっかり定まった。(ボスが投稿前に言うなというのでまだ秘密)
  • 加えて論文輪読ゼミとCTFゼミがあって、週3回MTGがある感じ。これは他のラボと比べても多いと思う
  • ただ英語が壊滅状態の中、輪読ゼミと、CTFゼミは持ち回りでホストを務めなければならなかったので結構苦労した
  • とはいえ週三回必死にやっていると英語は上達するもんだなと感じた

2018年11月下旬〜12月初旬

  • 2ヶ月経って大体の生活に慣れてきた
  • 留学前は「授業やったるでー」と思っていた熱い思いはもうなく、授業が研究の邪魔に感じるように
  • 日本の修士から授業が移管出来ると聞いたのでGraduate Counselorを訪問
  • 色々調べた結果、修士学生は2授業まで移管できて3授業を履修すると9ヶ月で卒業できることに気づく
  • 1年以下で修士をおえた前例は聞いた限りなく、Graduate Counselorを何回も訪問して卒業できることを確認
  • 「あれ?1年で修士終えて今年もPh.D.応募出来るんじゃね?」と思い始める

インターン応募

  • PhD進学が第一志望であるものの受からない可能性を考えて翌年のインターンの応募を開始。
  • 最初は自力でとか思ったけど、リファラルないと面接すら出来ないことに気づいてリファラルもらったところ(10社前後?)を受験
  • 最終まで行ったのもあるけど、英語が壊滅してたのでダメだった。
  • コーディング試験もコーディングというより私には常に英語の試験という感じ
  • 最終的にPhD決まったあと、ボスが夏に給料くれるということで、夏は研究に専念することに。どのみち修士だと研究インターンは厳しい

出願に向けて

  • ボスになんか1年で卒業出来そうだから、Ph.D.出願して良いかと相談
  • ボスは乗り気でなく、「今年無理に出さなくても、研究結果が出てから来年で良いのでは?」「着任したばかりでUCIの入試制度がわからないので何の保証も出来ない」などなどを言われた。
  • 「引き続きボスの元で研究したいけど、お金が最大2年目の秋学期までしか持たない」旨を伝えて、
  • J-1ビザに切り替えて卒業後も残るとか(F-1->J-1って出来るのか?)、OPTで残るとか(制度上無理だった)、Graduate Counselorに「私の口からそれが可能とは言えない」という超裏道的な方法までボスに色々伝えて議論した
  • 結局、受験してもデメリットはないでしょと説得して、推薦状は貰えることに。
    • この時既に研究プロジェクトで結果が出始めてたのが大きかったと思う
    • 最適化と機械学習がガッツリ関わってたので私以外を探すのは無理だったと思う
  • なんの保証は出来ないということで、ほかのUCI教授に連絡を取る旨と他大学(GaTechとUT Austin)も受けることを伝える
  • ただこの時既に12月になっており、出願締切が12/15の中、インターン応募&面接しつつ秋学期の期末試験対策しつつPhD出願書類を用意した自分を褒めてあげたい

冬学期スタート(2019年1月〜3月)

  • 3授業+研究の大変さは身にしみており学期の最初に恐れおののいていたのをおぼえている。
  • 冬休み明け最初の研究MTGでボスから研究進捗が少ないことを言われる。「いや冬休みやん。。。」と思うものの、この頃から要求がとても高くなる。

授業

  • 今季は3授業履修+英語授業
  • CS265: Graph Algorithms
    • ラボのPh.D学生の勧めで履修
    • 成績はほぼ中間と期末で決まる仕様
    • 週に1時間×3コマの授業で集中が続きやすくてよかった
    • 内容もグラフの初歩から復習出来て満足
    • 完全な板書スタイルで私好みだった。(人間は板書よりも速いスピードで理解は出来ないと思っている)
  • CS230: Distributed Computing Systems
    • 選択必修なので履修
    • かなりふわっとした分散コンピューティングの話
    • 行列積の分散計算はためになったけど、微妙な授業だった
  • CS 272: Statistical NLP
    • PhD受験するにあたって連絡した教授の授業
    • ウチ入りたいならこの授業とってと言われたので履修
    • 宿題+プロジェクトで成績が決まる
      • プロジェクトはワークショップレベルと言われて、ACLのフォーマットで最大6ページ
      • 過去にプロジェクトをそのまま論文投稿した人もいるとのこと
    • 履修が遅れたせいで余っていた学部生と組むことに
    • 最初色々気を使っていたが、まったく進まないので力技で私がすべて実験+レポート執筆
      • 最初私が研究テーマを提示
      • チームメイトは出来る自信がないとのことで、泣く泣く既存論文を再現実装するプロジェクトに変更
      • 彼らがリードしてくれると思いきや何もせず教授に心配される事態に
      • 説明が面倒だったので気合の5日で実装を終わらせて、教授に初期結果を見せて事態を鎮火
        • かなり実装ヘビーな論文を選んでたのでまたチームメイトに殺意が湧いた
      • 論文に書いてあることと、著者実装のGithubコードが違うことに気づくのが遅れてクソ時間が掛かった上に、最終的に再現せず。
      • 再現しない愚痴とか論文間違ってるとかを最終レポートに記載
      • 再現実装した論文の第3著者が授業の教授で、多分これで私のことを覚えてくれたのだと思う。
      • 風のうわさで、私のPhD合格にあるML系の教授が賛成してくれたのが大きかったと聞いたので、プロジェクト大変だったけどやってよかった
    • いま思うとPhD受験で本気アピールしようとしている業務経験アリの機械学習エンジニアに学部生を付き合わせたのは申し訳なかったと思う。英語が堪能だったら導いてあげるとかも出来た気がするけど。。。
  • 英語授業
    • 自分の英語のあまりの酷さに気づいたので履修
    • 英語の授業を受けに来るレベルでも一番英語が出来ないという始末。。。
    • 週2回授業+メンターがついて毎週1時間個別にメンターがマンツーマンしてくれるので、コスパはいいとおもう
    • ただこの時既に研究がかなり忙しく、為にはなったけど身を入れて授業には参加していない

研究

  • この頃から本格的にボスの要求がかなり高くなる
  • 多分真剣にPhDを考え始めてくれてたのだと思う
  • MTG前にラボに泊まることも多くなってきた

就活

  • PhD落ちた時のことも考えて、就活を開始
  • といってもまだそんな本腰入れてないのでGAFAの辺りにだけ出願
  • GoogleのML EngineerとGoogle residency programだけ連絡がきた。
  • Googleはとりあえずコーディング面接までは他の企業より行きつける印象があるが、その分コーディング試験は厳し目と聞く
  • 冬学期の試験勉強しつつ就活しつつPhDの合格待ってるのは精神的にかなりキツかった

春休み

  • 3授業+英語授業+研究は相当つらく、このころから慢性的に頭がぼーっとして研究とかにも集中しきれなくなってきた。
  • 春休みになってもPhDの連絡どこからもなく、研究をしっかり終わらせるために秋学期までは大学にいることを決意
  • 春休みに兄の結婚式で帰国予定だったので、その前にボスに秋まではいることを伝えることに
  • そのことをボスに話したら「君を真剣にPhDに考えている」と言われる。
    • ボス曰く私の英語力が低すぎて、いきなりコミッティーに推薦できないので4月過ぎてからこそっと通すと言われる
    • あと裏でボスがオファー出した人が一杯断ってるのを聞いていた。UCIだとそうなるよな。。。
  • 半分PhDの内定が出た状態で日本に帰国、良い精神状態で楽しむことができた。
  • Googleのコーディング試験も無対策で受けて無事撃沈。もう就職考えてなかったし

春学期スタート(2019年4月〜6月)

  • 帰国して、すぐ合格のメールが届く。ボスには感謝しかない。
  • この時初めて、ボスに英語の上達を褒められて嬉しかった
  • ただボスは本格的に私のことをPhD学生と扱うようになり、研究の要求がより一層増加
  • 前述のとおり、慢性的な疲労で常に頭にモヤがかかってる感じで春学期が始まった。
  • 同じ大学のPhDということで修士は卒業せずに、退学->再入学という形にした。無理に卒業しようとすると授業が増えて多分死んでた
  • 修士は卒業しなくても履修した授業がPhDに持ち越せることを各所に何度も確認した

授業

  • 今季も3授業履修
  • CS295: Advanced Computer and Network Security
    • ボスの記念すべき最初のUCIでの授業
    • 週二回の授業ごとに論文がアサインされて全員でディスカッションする大学院ぽい授業
    • 授業前に500字程度の論文サマリを提出する必要があって英語的に結構大変だった
    • 期末プロジェクトはボスが今やってる研究をそのまま授業プロジェクトにしていいと言われたので問題なかった。いい感じの結果でてたし
  • CS295: Deep Generative Model
    • こちらも新任の教授の授業
    • 昨年ICMLに5本通しており、UCI待望のピュアなML系の教授
      • なんでUCIに来たのか謎だったけど、前の職場もLAだったので多分移動したくなかったと予想
      • 気候とか治安とかの環境面ではUCIマジで最強
    • 私もGANは雰囲気しか知らなかったので授業を興味持って楽しめた
    • 授業プロジェクトのディスカッションで共同研究をお願いしたら実現。いまボスも含めて一緒にやっている
  • CS230: Data Structures
    • 選択必修だったのと、データ構造好きなので履修
    • 楽勝かと思ったがさすが大学院の授業、フィボナッチヒープの計算量解析+実装詳細とかBalanced Binary treeの実装詳細とかが求められて、為になったけど大変だった
    • 中間試験で計算ミスやらかしまくって冷や汗をかいたけど、期末で挽回出来る仕様だったので事なきを得る

研究

  • 前学期よりは忙しさが緩和されたが、まだ忙しい上に頭にモヤがかかってる感じで集中できず
  • 結局集中出来ずに、MTG前日に徹夜して挽回する悪循環が生まれる。
  • 前期より時間あるのに集中出来ずに進捗が生まれないことに、逆に精神的に追い込まれる事態に。生活リズムもめちゃくちゃ
  • 何とかごまかしていたが、学期の最後の方に「朝起きたあと体が動かない」という鬱の症状で聞いたことが自分にも起こって驚く
  • 最終的にボスに正直に話して、試験のある学期最終週から3週間は研究で休みをもらった

夏休み(2019年7月〜現在)

  • 3週間の休みで頭リフレッシュ
  • もともと研究したいのに、授業に時間とられて出来なかったのがストレスだったので精神面も改善
  • ボスの要求が高いのも、逆にハードワークすれば怒られないと割り切れたので、何か生活にメリハリが出てきた
  • CVPR/ICMLにも派遣してもらって、そこで仕入れたネタが研究にも生きている
  • 今やってる2つのプロジェクトも第一著者確定で、かなり良い結果が出てるので超順調
  • 給料が出るのでSSNを取得したり、車買ったり運転免許をとったりと、9ヶ月目にしてやっと大学以外の生活に目が向くようになってきた

最後に

多分この9ヶ月間のことを一生忘れないと思う。

日本語だったら問題なくこなせた自信あるけど、英語で、PhD受験の為に高GPAを維持しつつ3授業受けて、2ヶ月で推薦状貰うレベルで研究してを9ヶ月間維持しつつ、インターン就活PhDの応募と神経使うことを並行するのは、もう二度とやりたくない。

ただ私の場合は報われたので良かった。論文なくても米国PhDにパワープレイで入学出来ることを示せたと思う。

(というか私の分野で修士で論文持ってるとかほぼ無かったし、分野と時代によるところが大きい気もする)

最大のファインプレーは勢いで決めたPhD出願。その時の自分を褒めてあげたい。

ただこれから留学を志す方々は、私みたいに泥臭いパワープレイをしないですむように、学部生and修士でしっかり論文を投稿したり、予めインターンで渡米して教授に自分の仕事ぶりを見てもらったりとかして苦労が少なくなる事を祈っています。