文系社会人から東大情報理工に進学する話(2019冬入試)

約一年ぶりの更新です。

タイトルにある通り、東京大学情報理工学系研究科創造情報学専攻に合格し、今年度から大学院に進学することにしました。

自分のような経歴の人が少ないこともあり、進学のプロセスや院試の勉強を進めるにあたって難儀なことが色々あったので、今後の誰かの参考となるようにそれらのことについて書いておきます。

TL;DR:東大情理院試は勉強過程でCS・数学・プログラミングの知識が身につくのでお勧め

略歴

自分の経歴は MARCH文系卒→IT企業→1年ニート→現在です。
普通に社会人してたら今年度で四年目になります。

会社では営業・マーケティング・ディレクターの仕事をしていました。
ニート期間は4~8月プログラミングスクール、9~2月 院試勉強という感じで過ごしていました。

9月時点での知識はCS関連はゼロ、数学の知識は高校2年レベルも無いくらいでした。
数学については例えば、Σの意味すら知らなかったし、logの意味さえ忘れていました。
プログラミングはRailsでウェブアプリ作れる程度でした。


試験概略・結果

試験は、
・専門科目(コンピュータサイエンス )
・プログラミング(or数学(夏のみ選択可))
・英語(TOEFLibt(orTOEFLitp(夏のみ選択可)))からなります。

また、最近は時流もあってか試験の倍率が上がってきています。
2019冬入試の合格者は14/51でした。
ところが、得点率で言えばそこまで高くは要求されないように思います。
5割前後で合格する人もいたようでした。
要求される知識の幅が広いのでそのくらいに落ち着くのかもしれません。

自分は下記の点数で合格しました。
専門科目 178/300
プログラミング 180/300 (去年の200点から配点が上がった?)
TOEFL 89/120

専門科目

大問3構成で得点率は7割解けたら十分、最低5割って感じかなと思います。

勉強量は、当初過去問を見ても見積もりが難しかったのですが、とりあえず
「とても広い分野の基礎知識を抑えて頭の中で再構成できる程度の知識量」が必要かなと思います。具体的には僕は約2000h程度時間を投下しました。

というのも他の大学院試では、毎年同じような分野から問題が出題されるので割と少ない勉強時間で行けるようなのですが、
創造情報学専攻では、専門科目の特に大問1,2は近年顕著な傾向が掴めないため特定の分野のみ勉強するという事が難しいように感じたので多めに勉強しました。

まぁ、とは言ってもなんとなく出やすい分野に若干偏りもあるような気がします。
また、「自分が出題者だったらどこが出しやすいか?」を想像しながら勉強すると結構絞れる気がします。
例えばアルゴリズムなら、効率の悪いアルゴリズムの処理を追わせた後にそれを改善ができるかを考えさせる問題、
アーキテクチャなら、なぜ3オペランド形式が採用されているのか、などの本質的な問いが出やすい、などが見えてきます。
そういった出題の思想を理解するためにも過去問は早めにやってみると良いかもしれません。

他にも、ILSVRCで深層学習が優勝した翌年(2013)には画像処理の問題が出たり、
アルファGOがバズった年(2016)には強化学習の問題が出たりと、その年のニュースをテーマにした問題が出ているようにも感じました。

参考に自分の勉強した分野を記載します。降順で優先順位って感じです。
アルゴリズム
論理回路
・コンピュータアーキテクチャ
機械学習
・ネットワーク
オペレーティングシステム
・コンピュータグラフィックス
---頻度の壁-----
・ロボティクス
情報理論
離散数学
数値計算
・(信号処理、形式言語、言語論) *語彙問題のために軽く勉強


■大問1,2
とても範囲が広いので、自分の合格志望度と勘案してどの範囲をどの程度やるのか考えて勉強するのが良いと思います。

そして、当たり前なのですが、専門科目の顔してその内容には普通に数学が入ってきます。
アルゴリズムの計算量証明、機械学習のパラメータ最適化法、グラフィクスの座標変換など)
なので、全く数学をやってなかったという人は、最低限の微積・確率統計・線形代数(学部2年程度?)は結局必要になるなと感じました。
そしてそれらの理解には、当然指数対数関数・三角関数・ベクトルなどの知識が必要になります。  
これらの概念を直感的に理解、再現するのに結構時間を使ったので勉強時間は多くなりました。


本番では、下記の問題が出ました。結構忘れてるので雰囲気のみ参考にしてください。
①ハフマン符号化
⑴:ナイーブに符号化した場合の平均符号長
⑵:⑴の欠点
⑶:⑴の改善方法
⑷:⑶の平均符号長
⑸:⑶のアルゴリズム
⑹:⑸の計算量と証明
⑺⑻:符号化の問題を最適化問題として定式化する?(わからなかった))

②色々な構成でのメモリアクセス速度・キャッシュヒット率
⑴:1階層のメモリアクセス速度
⑵:配列[0]、[8]、[16]と飛び飛びにアクセスする際のキャッシュヒット率
⑶:⑵の平均メモリアクセス速度
⑷:忘れた
⑸:キャッシュを2階層にした時の⑵を100回行った時のキャッシュヒット率)

■大問3(語彙問題)
他の人を参考にwikiで概念をまとめ、自分で再現できるまで覚えました。
具体的には、8行まとめを200個くらい作って覚えました。
他の大問の問題の振れ幅が大きいので、ここで9割程度取っておきたかったのですが本番では事前に覚えたうちの1つしか出ず焦りました。w
(他の3つは字面から予想して書いて、幸運にもあとで調べたら合っていました。)なのであまりお勧めはしません。

本番では下記の用語が出題されました。
サポートベクタマシン
サーバーのスケールアウト
ハッシュ表
ブルートフォース攻撃
ラグランジュの運動方程式
ボリュームレンダリング
ECL(emitter coupled logic)(多分)

プログラミング

1つのテーマに沿ってアルゴリズミックな問題が合計7問程度出ます。7割程度を目標に、でも3割でも合格している人もいるみたい。。?

1日2時間程度、創造情報の過去問を1年分またはAtCoderのABCセットを解いていました。

行列計算・文字列処理・乱数生成・メモ化・コッホ雪片・フィボナッチ数列・幾何など様々な分野から出題されます。
基本的な処理を覚えて過去問練習とAtCoderC問題が7割くらいの確率で解けるようになれば割と解けるようになるかと思います。

本番では無向グラフ問題が出題されました。
「1 0 1 0 1 0 0 0 1」のように1と0からなる数字が無数に並んでいる1次元データを隣接行列に直して色々答える問題です。
⑴連結成分の数
⑵頂点/辺/次数の最大数
⑶⑵の最短経路
⑷別のファイルの頂点/辺/次数の最大数
⑸⑷の最短経路(実装の際に工夫したところを口頭試問で問う)
  (テキストファイルが圧縮されているのでそれを復元し)
⑹橋となる辺の数
⑺忘れた


午前のプログラミングパートは全ての回答を回答用紙に記入してそれを提出する形式でした。
午後は、⑸の工夫した点、1次元データをどのようにグラフ処理したか、と最短経路算出にどの程度時間がかかったか聞かれました。
めちゃくちゃシンプル。

終わりに

今回の院試の勉強はそれなりの時間をかけて勉強をしたので、とても身になることが多かったです。
一年前までは数学はlogすら忘れており、プログラムも全く書けず、だったのでできることは増えました。
特に数学は本来は高校3年から積み上げていくものを半年で詰め込んでいるのでまだまだ穴だらけかと思いますが、
それでも応用を視野に入れた数学の勉強はとても楽しかったのでこれからも毎日継続していきたいと考えています。
入って終わり、にならないようにこれまで以上に研究に力を入れて成果を出せるように精進しないと。。

そして、自分の場合は身近に院進している人が少なく得られる情報が少なかったのですが、
ネットで受験記を書いている人やツイッターでの質問に快く答えてくれる人のおかげで適切にやるべきことを整理できて、結果合格できたと思います。
その方々には本当に感謝しています。

最後に、もし今受験を考えている人がいるのであればできる限り力になりたいと思うので、
お気軽にコメントやツイッターのDM等で質問いただけると嬉しいです!

勉強につかった資料・その他

自分が勉強で使った資料をここに貼っておきます。

アルゴリズム
定番。ですが今年はここにないアルゴリズムの問題が出ています。

データ構造とアルゴリズム (新・情報 通信システム工学)

データ構造とアルゴリズム (新・情報 通信システム工学)

でかいけどこれもやっていた方が良いかも。
アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書

アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書

わかりやすい
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

論理回路
鉄板。ですが過去問の出題形式と問題で若干違う。
(カウンタをD-FFで作るか、JK-FFを使うのか、など)

論理回路入門

論理回路入門

コンピュータアーキテクチャ
鉄板。わかりやすい。今年のアーキテクチャの問題もここにはなかった。

コンピュータアーキテクチャ (電子情報通信レクチャーシリーズ)

コンピュータアーキテクチャ (電子情報通信レクチャーシリーズ)

キャッシュヒット率とかの問題はこっちの演習問題にあった。

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 下

コンピュータの構成と設計 第5版 下

機械学習

東京大学工学教程 情報工学 機械学習

東京大学工学教程 情報工学 機械学習

パターン認識と機械学習 上

パターン認識と機械学習 上

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

ネットワーク

オペレーティングシステム

オペレーティングシステムの仕組み (情報科学こんせぷつ)

オペレーティングシステムの仕組み (情報科学こんせぷつ)

コンピュータグラフィックス

コンピュータグラフィックス [改訂新版]

コンピュータグラフィックス [改訂新版]

ロボティクス

http://www.eo.u-tokai.ac.jp/eo-suzuki/VL_RT/%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%81%AE%E9%81%8B%E5%8B%95%E5%AD%A6.pdf

情報理論

情報理論 (ちくま学芸文庫)

情報理論 (ちくま学芸文庫)

離散数学

やさしく学べる離散数学

やさしく学べる離散数学

IT Text 離散数学

IT Text 離散数学

数値計算

工学基礎数値解析とその応用 (新・工科系の数学)

工学基礎数値解析とその応用 (新・工科系の数学)

数学


参考書読んでもわからないところ、高校までの範囲は下記の動画お勧めです。

・高校の全範囲を短い時間でおさらいできる www.youtube.com

・高校の範囲を単元ごとに問題とともにおさらいできる www.youtube.com

・大学の単元をスーパーわかりやすく説明してくれている。雑談系の動画も面白い。 www.youtube.com

ためになるブログ sho-yokoi.hatenablog.com

blog.taketo1024.jp

serihiro.hatenablog.com