ジョイジョイジョイ

ジョイジョイジョイジョイジョイ

大学で読んだ情報科学関連の教科書

先日、博士(情報学)になりました。学部と大学院をあわせた 9 年間で読んだ情報科学関連の教科書・専門書を思い出を振り返りつつここにまとめます。私は授業はあまり聞かずに独学するタイプだったので、ここに挙げた書籍を通読すれば、大学に通わなくてもおおよそ情報学博士ほどの知識は身につくものと思われます。ただし、特に大学院で重要となる論文を読み書きすることについては本稿には含めておりません。それらについては論文読みの日課について論文の書き方などを参考にしてください。

joisino.hatenablog.com

凡例:(半端)とは、数章だけ読んだ場合か、最後まで読んだものの理解が浅く、今となっては薄ぼんやりとしか覚えていないことを指します。☆は特におすすめなことを表します。

学部一年

2015 年春、京都大学工学部情報学科に入学しました。受験期は情報科学の勉強を抑えていたので、入学後はやっと専門の勉強ができると喜んでいたのですが、思ったより教養科目が多くてがっかりしたのを覚えています。学部一年生の間は、適度に自習しながら、空いた時間はすべて競技プログラミングにつぎ込むという生活でした。当時はアルゴリズム系の研究に進むか、ソフトウェアエンジニアになるというイメージでしたが、Indeed のサマーインターンに応募して落ちたりもして、バカヤローと思いながらますます競技プログラミングにのめり込んでいきました。

寺田 文行『線形代数 増訂版』

線形代数の講義で指定された教科書です。189 ページでかなりコンパクトにまとまっています。私は大学受験のときにも、一冊を完璧に仕上げるのが好きな人間だったので、コンパクトにまとまったこの本はかなり気に入って何度も読み返しました。本文はかなりあっさりしていますが、演習問題がかなり濃密です。本文に登場しないエルミート行列が演習問題で突然登場して性質を自力で証明することになったり、突然微分方程式の解が線形空間をなすことを証明することになったりします。行間を自力で埋めて独学するのはかなり力になったと思います。最低限だけ学習したい人は本文だけ読み、しっかり学習したい人は演習問題ガッツリやるという棲み分けができる点で、講義の教科書としてとても良いと思います。

黒田 成俊『微分積分』

微分積分の講義の中で、いくつか参考書を指定するので自習したい方はどうぞというなかの一つだったと思います。微分積分の講義は一通り標準的なことは解説するものの、位相空間論や測度論などを念頭に置いた独自路線でした。先生が1の分割について嬉しそうに話しており、ああ、大学に入学したんだなと実感しました。そういう講義は楽しかったものの、やはり標準的な微分積分を身につけるためには参考書での自習は必要でした。その点、この本は行間が狭く説明が丁寧で独学にはぴったりだったと思います。

河野 敬雄『確率概論』

確率概論

確率概論

Amazon

確率論の講義の参考書だったと思います。講義はいきなりσ-加法族の話からはじまるなど、なかなかハードだったと記憶しています。この本は確率の公理をかなり丁寧に導入しており分かりやすいです。今でも概収束と確率収束と法則収束ってどれが何だっけ、など確率論の基礎的な話が分からなくなるとこの本を参照することがあります。

東京大学教養学部統計学教室『統計学入門』

言わずと知れた統計学の教科書です。夫婦のへそくりの金額の分布や、体重の重い人が飛行機に乗って大丈夫なのかなど、登場する例やコラムが面白く、細かいところが今でも印象に残っています。標本分散の項を読んだ当時、自由度の概念がどうしてもよく分からず、ずいぶん後になって『自然科学の統計学』の第二章で線形代数を使った証明を読んでよくやく腑に落ちました。やはり直観的な説明だけでは腑に落ち切れない場合があるので、証明が付いているのが理想ですね。

五十嵐 淳『プログラミング言語の基礎概念』

この本はプログラミング言語の解析を念頭においた形式的証明の教科書です。情報オリンピックの夏季セミナーでこの本を担当するチューターになりました。もともと証明論や形式的証明に興味があり、Coq演習に参加したりしていました。夏季セミナーで使う教科書を @qnighy さんに相談してこの本に決めたと記憶しています。著者の五十嵐先生は京大の先生で、学部一年の講義も担当されていたので、講義後にサインを貰いに行きました。

まずはペアノの公理などからはじまります。本を読み進めるうち、四則演算、変数、関数などの要素が加わっていき、この式を評価したらこうなる、ということを形式的に証明していきます。最終的には ML(プログラミング)風のプログラミング言語ができあがり、型付けなどの静的解析をすることになります。これらは手で導出木を書いて証明しても良いですし、自動証明するプログラムを書いても良いです。私は完全な自動証明まではやらず、証明を補助するプログラムを書いた記憶があります。本書にはオンライン演習システムが付属しており、書いた証明を自動で採点してくれます。競技プログラミングのようにゲーム感覚で進められるのもとても良い点だと思います。

横内 寛文『プログラム意味論』(半端)

プログラミング言語の基礎概念のチューターをするにあたり、深いところまで知っておかねばという気持ちで買って読みましたが、学部一年当時では難しくあまり理解できませんでした。不動点定理の話などは度々読み返し、三年生の言語処理系の講義のときにようやく腑に落ちたように思います。クリーネの不動点定理(とベルマンフォード法) - ジョイジョイジョイ はそのときに書きました。

joisino.hatenablog.com

前原 昭二 『記号論理入門』

医学部の友人と二人の自主ゼミを開催して読みました。前述のように証明論や形式的証明に興味があって選んだ記憶があります。前原 昭二先生の書く教科書(あるいはこの分野やこの時代を通しての雰囲気のようにも思いますが)は筆致が軽快で読んでいて楽しかったです。独学でも十分読める行間で、かつ無矛盾性や、古典論理と直観論理が異なることの証明など奥深いことも書かれていて、これらをうまく両立している稀有な本だと思います。当時、複雑な命題の導出木を手で早解きするのが好きでした。

前原 昭二 『数理論理学序説』

こちらも『記号論理入門』と同じ前原先生のものです。『記号論理入門』の巻末でもおすすめされていて、次の本として選びました。こちらはもう少しカッチリと公理から導出していく感じだったと思います。

岡谷 貴之『深層学習』

言わずと知れた日本語の深層学習の代表的な教科書です。現在第二版が出ていますが、当時は第一版が出たてでした。情報オリンピックの夏季セミナーで、私はこの本の担当ではなかったのはずなのですが、担当者がコミケに行くため早退したのでこの本も非公式に受け持つことになりました。夏季セミナーでは、@potetisensei と一緒に深層学習のフレームワークを C++ でスクラッチから実装しました。Chainer のリリースが2015年6月9日なので遅れること 2 ヶ月ほどという時期です。Chainer とは比べ物にならないくらいお粗末ながらも、線形層、畳み込み層、ドロップアウトなどを実装し、犬猫の画像分類で精度 80 パーセントをなんとか達成したのを覚えています。その後、この自作フレームワークを使ってオートエンコーダーを実装して、櫟井唯ちゃんの画像を無限に生成したりして遊びました。

joisino.hatenablog.com

結果的に、この本を受け持ったことが自分の進路を大きく変えたことになったと後で思います。もともと機械学習や深層学習に興味は持っていたものの、あくまで趣味程度で、自分にとっての本業はアルゴリズムだと思っていましたが、これを境に徐々に機械学習のウェイトが大きくなっていきました。後に述べるように、学部四回生のときにはちょうど半々くらいになっており、結果として機械学習の進路に決めました。このとき受け持っていなければ、四回生のときに半々とはならず、アルゴリズムの道に進んでいたように思います。

福島 雅夫『数理計画入門』

線形計画の講義の教科書でした。200 ページほどでコンパクトですが、線形計画の項には内点法とその数値例まで載っています。シンプレックス法は端点を辿るので有限回で停止するのは分かるが、内点法はそもそも停止しないし、なぜ多項式時間を主張しているのかが分からず、教授に直訴しに行ったのを覚えています。教授は優しくも参考文献を渡してくれましたが完全には腑に落ちず、理解できたのは随分後に Boyd の Convex Optimization を読んでからだったと思います。また、授業では線形計画の章まででしたが、ネットワーク計画の章ではプリフロープッシュ法なども解説されており、競技プログラミング脳だった私はこちらの方を興味を持って読んでいました。

ベルンハルト・コルテら『組合せ最適化』(半端)

組合せ最適化についての世界的に有名な教科書です。サークルでこの本の輪講を主催しました。700 ページ超、全部で 22 章もあるのですが、結局輪講は 4 章あたりの線形計画で終わってしまいました。なかなか行間が広く、式変形を追うのが大変でした。その後もたびたび輪講をやったり読み返したりしていますが、結局最後までは読んでいません。割と自分の専門にも近いので、読んだ方がよいと思いつつ、9 年が経ってしまいました。しっかり読むととても力が付くはずです。学部一年のときに @DEGwer がこの本を常に持ち歩いていて、枕にしたりしつつ、最後まで読み切っていた記憶があります。やはりすごい人はすごい。

平井 有三『はじめてのパターン認識』

パターン認識と機械学習の有名な教科書です。いわゆるはじパタ。主成分分析やクラスタリングやアンサンブルなど、現場でも使うようなデータ分析の基本事項が丁寧にまとまっています。私は深層学習ネイティブなのですが、機械学習の基本事項も学んでおいた方が良いと思い購入しました。PRML などと比べても記述が分かりやすく、独学もしやすいです。今でも機械学習の入門におすすめの一冊です。

学部二年

二年生になると計算機科学コースと数理科学コースに振り分けられます。私は計算機科学コースでした。学部一年の間にかなり単位を取っていたので、学部二年のときにはスケジュールに余裕ができ、やはり空いた時間はすべて競技プログラミングにつぎ込むという生活でした。

クリストファー・ビショップ『パターン認識と機械学習』(半端)

機械学習の世界的な名著です。いわゆる PRML。しっかり機械学習を学ぶためにも読まねばという気持ちで買いましたがなかなか難しかったです。上巻は一通り読みましたが、当時は上巻の内容すら怪しかったです。正直に告白すると、下巻はチラチラ参照するくらいで、今でも最後まで読んでいません。一応機械学習の研究をしているはずなんですけどね。この本は機械学習の登竜門的な顔をしていますが、正直かなり難しい(しベイズ寄っていてクセがある)ので、難しいと思った方は潔く諦めて『はじめてのパターン認識』や『深層学習(機械学習プロフェッショナルシリーズ)』などから始めるのが良いと思います。

海野 裕也ら『オンライン機械学習』

2016 年の情報オリンピックの夏季セミナーはこちらを担当しました。『深層学習』は既に読んでいたし、実用に寄った本が良いかと思ってこちらを選びました。本のタイトルからするとリグレット解析などがゴリゴリ出てきそうな感じですが、そういう訳ではなく(一部出てきますが)、どちらかというとストリーミングでデータを処理する現実的なアプローチの紹介が中心です。この年の夏季セミナーの講演は @iwiwi さんで、講演後に PRML 片手にドヤ顔している(が頭の中はハテナだらけの)私に話かけてくれ、とても嬉しかったのを覚えています。

久保 拓弥『データ解析のための統計モデリング入門』

これまでは深層学習か、機械学習の中でも理論よりのことを中心に勉強していたので、地に足のついたデータ解析を学ぶために読みました。もしかするとふつうは学ぶ順が逆かもしれません。評判に違わぬ良い本で、現実のデータを丁寧に分析する方法が分かりやすく載っています。技術書と専門書の中間くらいの立ち位置ですかね。

リチャード・S・サットン『強化学習』(半端)

強化学習の世界的な名著です。Alpha Go でブームになったりして、ちゃんと強化学習学びたいなと思ったので購入しました。一応最後までは読んだのですが、細かいところは理解せずじまいでした。正直いまでも細かいところはあやふやで、強化学習に苦手意識(思想が苦手とかではなく、私の理解が甘いという意味です)があったりします。現在は第二版が出ており、内容は随分拡充されたようです。そちらも購入はしたのですが積んでいる状態です……。

高木 直史『論理回路』

論理回路の講義の教科書でした。高木先生本人が講義担当でした。カルノー図やフリップフロップなど、論理回路の基本事項が一通り詰まっています。学んだあとは、頭では理解しつつも実態はよく分からないなと思っていましたが、次の『CPUの創りかた』を読んで一挙に理解が深まりました。

渡波 郁『CPUの創りかた』☆

CPUの創りかた

CPUの創りかた

Amazon

内容はタイトルの通りです。かなり思い出深い本です。この本を読むまでは、ハードウェアや電子回路にはかなりの苦手意識を持っていたのですが、この本のおかげで克服できました。苦手意識を取り除くというのは途轍もないことだと思います。本の価値は本を読む前と読んだ後の差(介入効果)にあると考えていますが、その点では私にとって相当な価値のある本でした。今でも理想の書籍の一つと心の中で崇めながら、自分がテキストを書くときにマインドをひっそり参考にしています(もう一つ挙げるなら Boyd の Convex Optimization を崇拝しています。)

デイビッド・パターソンら『コンピュータの構成と設計』☆

コンピュータアーキテクチャの世界的名著です。いわゆるパタヘネ。扱っている内容は広範ながら、記述がとても丁寧でわかりやすいです。基礎的な事項も解説しながら、Intel Core i7 ではこう、みたいに現実的に親しみのあるプロセッサについても解説があるので、座学と現実世界を結びつけやすいのも大きな特徴です。研究者でなくとも、コンピュータを扱う職業であれば、この本を読むとかなり色々なことの理解が深まると思います。

小野 寛晰『情報科学における論理』

あまり意識してませんでしたが、こうやって並べると当時結構論理学の本を読んでますね。こちらは標準的な命題論理や述語論理からはじめながらも、論理とプログラムの関係を述べたり、証明導出のアルゴリズムについて述べたり、タイトルにある通り情報科学との繋がり強く意識していることが特色です。また、様相論理を深く扱っていることも大きな特色です。最終的にはラムダ計算が出てきて、カリーハワード同型対応で着地するという流れです。『記号論理入門』などだと情報科学との繋がりが見えづらく、『プログラム意味論』はかなり難しいので、情報科学応用前提で論理学を学ぶのであれば『プログラミング言語の基礎概念』かこちらを読むのが良いと思います。

ガレス・A・ジョーンズら『情報理論と符号理論』

タイトルの通り情報理論と符号理論の教科書です。高校 3 年生のときの情報オリンピック夏季セミナーで使った本です。当時はこんな発表をしました。囚人の帽子の問題、今でもかなり好きです。

www.slideshare.net

しばらく読んでいませんでしたが、学部二年で情報理論の講義があるにあたって読み返しました。

今井 秀樹『情報理論』

情報理論の講義の教科書でした。ガレス・A・ジョーンズら『情報理論と符号理論』で一通り学習はしていたのですが、講義や試験がこの教科書に沿って展開していたのと、二冊目を読んで理解をロバストにしておくかという気持ちで読みました。巡回符号のあたりなど、工学応用が強く意識されているのが特徴です。2019 年に第二版が出たようです。

マイケル・シプサ『計算理論の基礎』☆

理論計算機科学について幅広い内容を扱った入門書です。最初はオートマトンなどからはじまり、計算可能性や計算階層にまで話が及びます。特に第 7 章から第 10 章の計算階層では、領域複雑性(サビッチの定理など)や確率的アルゴリズム(クラス BPP など)など発展的なことも扱っており、今でも度々見返しています。理論計算機科学の研究をするならぜひおすすめです。

ラインハルト・ディースティル『グラフ理論』(半端)

グラフ理論

グラフ理論

Amazon

グラフ理論の世界的に有名な教科書の一つです。私はグラフニューラルネットワークの研究をしていたり、グラフ理論はかなり近い分野なのですが、正直に告白するとちゃんと通読していません。内容は情報科学というよりはかなり数学に寄っている印象です。最終的にはグラフマイナー理論的な話で着地するようです。いつかはちゃんと最後まで読みたいです。

岡野原 大輔 『高速文字列解析の世界』

文字列解析のための高度なアルゴリズムがまとまった稀有な本です。自然言語処理よりもさらに低レイヤーな、文字列検索などの話です。競技プログラミング用にウェーブレット行列を学ぶために読みましたが、それ以外の簡潔データ構造や BW 変換などの話もとても面白くためになりました。当時はあの PFN の岡野原さんだとは意識せずに読んでいました。

Raghu Ramakrishnan et al. "Database Management Systems"(半端)

データベースの教科書です。1000 ページ超えでとても分厚いです。データベースの講義は独自の講義資料を基にしたものだったのですが、2相ロックのあたりと、ロールバックのあたりがどうしても理解できず、こちらの本にあたりました。流石に記述がとても詳しく、こちらの本を読んで完全に理解したのを覚えています。当時はあまり洋書を読む習慣はありませんでしたが、あまりに簡潔な二次・三次資料を読んで理解できない場合は浩瀚な洋書にあたってじっくり読んだ方が早いということを学ぶ良い機会でした。

東京大学教養学部統計学教室『自然科学の統計学』

前述の『統計学入門』のシリーズです。『統計学入門』が直観的な導入が多かったのに対して、数式多めで証明やスケッチが載っていて、ちゃんと数学を学んだ後ではこちらのほうが納得感が強かったです。ただし、買った当時は数学が難しく、ちゃんと腑に落ちたのは買ってからかなり後だったように思います。

斎藤 毅『線形代数の世界』(半端)

純粋数学に寄った線形代数の教科書です。いきなり体と線形空間の定義からはじまるほど容赦はないですが、例や余談が豊富で読みやすいです。上で紹介した『線形代数 増訂版』をはじめ、線形代数の工学よりの教科書や標準的な入門書は行列計算に重きを置いている場合が多いですが、この本は抽象的な空間の扱いに徹しており、別の角度から直観を養うのに役立ちました。双対空間のあたりは何度か読み返しました。

高橋 大輔『数値計算』

二年生の後期に数値計算の授業があり、独学用の最初の一冊として読みました。200 ページ未満とコンパクトですが、方程式の求根(ニュートン法など)、曲線補完、数値積分、微分方程式、線形方程式など、基本的な事項が一通りまとまっており、入門書としておすすめです。当時書いたオイラー法とルンゲ・クッタ法の振り子のシミュレーションを見つけたので貼っておきます。エネルギー保存則を無視するオイラー法単振り子くん、かわいいですね。数値シミュレーションのトンデモ失敗例を見るのが好きです。

オイラー法単振り子
ルンゲ・クッタ法単振り子
ルンゲ・クッタ法二重振り子

私の研究分野(機械学習)では物理シミュレーションをすることは少ないですが、オイラー法やルンゲ・クッタ法は勾配流の計算に使われたり、拡散モデルの計算に使われたり、意外と接点が多いです。

山本 哲朗『数値解析入門』(半端)

数値計算の二冊目の教科書として使いました。高橋 大輔『数値計算』よりも幅広く、証明も詳しいです。さらっと通読しましたがすべては習得できず、数値計算が分からなくなるたびに読み返しています。

小野寺 嘉孝『なっとくする複素関数』

複素解析の入門書です。複素解析の授業にあたり、独学用に読みました。直観を多く提供してくれたり、一部会話形式だったり、とても読みやすいです。それでいながら、一致の定理や解析接続まできちんと説明しており、入門書としてとても優れていると思います。複素解析の本では一番読み返しました。ちなみに、留数定理は数学の定理の中でもトップクラスに好きです。

神保 道夫『複素関数入門』

複素解析の授業の参考書だったと思います。王道の教科書なので、万人におすすめです。私は『なっとくする複素関数』を何度か読んだあと、標準的な流れを確認するために使いました。張り切ってアールフォルス『複素解析』も買ったのですが、そちらは結局ほとんど読めていません……。

矢ヶ崎 一幸『微分方程式の基礎と解法』

微分方程式の授業の教科書か参考書だったと思います。130 ページで 1300 円と内容も値段もお手頃。微分方程式を学んだことが無かったので、一通り内容を知るのに役立ちました。

柳田 英二ら『常微分方程式論』

こちらも微分方程式の授業の教科書か参考書だったと思います。ボリューム感、難度ともに、学部 2~3 年で微分方程式を学ぶにはちょうど良いと思います。当時は割と真剣に勉強したはずなのですが、その後(進んだ分野的に)使うことがほとんどなかったので、今読み返すと理解が怪しい部分も多いですね……。

武藤 義夫『ベクトル解析』

ベクトル解析の授業の教科書か参考書でした。こちらもボリューム感、難度ともに、学部 2~3 年で微分方程式を学ぶにはちょうど良いと思います。微分方程式やベクトル解析は私の専門(最適輸送や機械学習)とも遠からずなのですが、当時の講義も私の理解の仕方も物理を念頭に置いたもので、このときの勉強が今の研究の理解と直接結びついていない感じがするのが歯がゆいです。余裕ができたらこのあたりの話題をもう一度勉強して橋渡ししたいですね。

白鳥 則郎ら『情報ネットワーク』

コンピュータネットワークの講義の教科書でした。当時も今も、ネットワークが不得意だという自認があり、暗記に頼ったりしつつ、必死に勉強したのを覚えています。コンピュータネットワーク完全理解には程遠いですが、用語などは記憶の隅にあり、折に触れて脳内検索に引っかかってとっかかりを作れるようになったのはとても役立っています。

Piro『まんがでわかるLinux シス管系女子』

情報オリンピックのサーバー担当になったりして、実際のコンピューターの使い方を学ばねばなと思って最初に手に取った本です。ユルい感じですが、ユースケースに基づきながら少しずつコマンド等を覚えていけるので、本当の初心者にはおすすめです。

学部三年

学部三年は色々なターニングポイントがありました。

一番は PFN のサマーインターンに採用されたことです。これが機械学習分野に進む決定打になりました。インターン同期は 30 人ほどいたのですが、皆さんとても優秀で、同期全員で食事会に行ったり、発表会に参加したり、とても刺激的な二ヶ月間でした。インターンの準備をしているあたりから論文を読むのに目覚めて、このころはこのブログにたくさん記事を書きました → 2017-01-01から1年間の記事一覧 - ジョイジョイジョイ。冬には Wantedly での機械学習系のインターンにも参加しました。当時担当していただいた @awakia さんとは今でも交流があり、こちらのインターンも良い経験になりました。

大学ではハードウェア実験がとても印象に残っています。一人でマルチコア CPU を作ったり、自作 CPU 用のコンパイラを作ったりしました。その時の記録はこちらをご覧ください。

joisino.hatenablog.com

この実験は大学の授業の中では断トツで思い出深く、かつ一番勉強になりました。冒頭で述べたように、私は授業はあまり聞かずに独学するタイプだったのですが、この実験のためだけでも情報学科に入って良かったと思います。

後期の実験 4 では、はじめて論文を書いて国際会議に投稿しました。深層学習を使って短期間の天気予報をする論文 "Short-Term Precipitation Prediction with Skip-Connected PredNet" です。今読むと手法も論文もかなり拙いですが、素人発想だったのが良かったのか、2024 年現在で 27 件引用されており、ベースライン用に書いた ConvLSTM の実装も割と参照されており、思いの外活躍しました。研究者になる最初の一歩として思い出深いです。

あとイランに行ったりしました → 第29回国際情報オリンピック(IOI 2017) イラン大会

この年はインターンなど外部のプロジェクトに関わることが多かったのと、論文を読むようになっていったので、読んだ本は少なかったです。

ジョン・L・ヘネシーら『コンピュータアーキテクチャ』(半端)

『コンピュータの構成と設計』と同じくコンピュータアーキテクチャの世界的名著です。著者順のために『コンピュータの構成と設計』がパタヘネ、『コンピュータアーキテクチャ』がヘネパタと呼ばれますが、今でもどっちがどっちか分からなくなります。『コンピュータアーキテクチャ』の方が発展的な内容で、サブタイトルに「定量的アプローチ」とあるように、実際の速度や消費電力は具体的にどのくらいかということを軸に、記憶階層や並列計算などの技法について書かれています。700 ページを超える大著で最後までは読めていませんが、投機実行や OoO のあたりなどは CPU を作る際に勉強しました。

Hisa Ando『コンピュータ設計の基礎』『高性能コンピュータ技術の基礎』

コンピュータアーキテクチャの有名な和書です。『コンピュータ設計の基礎』はパタヘネと重なるところも多かったのでさらさらと読みましたが、『高性能コンピュータ技術の基礎』の方は投機実行、アウト・オブ・オーダー実行、スーパスカラなど性能強化に欠かせない概念が解説されており、ヘネパタよりもコンパクトにまとまっているのでこちらをよく読みました。

デイビッド・M・ハリスら『ディジタル回路設計とコンピュータアーキテクチャ[ARM版]』

実践的なコンピュータアーキテクチャの本です。FPGA + System Verilog のコード例が豊富に付いており、CPU を作る際に書き方などを参考にしました。

湯淺 太一『コンパイラ』

コンパイラの授業で使ったのと、自作 CPU のコンパイラを作るために参考にしました。オートマトンや LL(1) 構文解析など基礎よりの話もしつつ、実際の Intel のアセンブリやコンパイラのコード例も交えつつ、基礎と応用を幅広く扱っています。私はアセンブリなどはパタヘネで一通り学び、コンパイラについても概ね理解した上で、字句解析やレジスタ割付などコンパイラ特有の話題をこの本で学びました。

大久保 英嗣『オペレーティングシステムの基礎』

OS の授業の参考書でした。エンジニアリングの細かいところには踏み込まず、抽象的に仕組みを解説しているのが特徴です。デッドロックの検出・回避や、ページの Least Recently Used (LRU) 開放などは、情報科学とエンジニアリングがうまくハマってる感じがして好きです。ですが正直、OS もやや不得意だという自認があります……。教科書に書いてあることは一通り理解しましたが、やはりこのあたりは実際の OS を自分でいじらないと完全には腹落ちしないのでしょうね。

藤重 悟『グラフ・ネットワーク・組合せ論』

タイトルの通り、グラフとネットワークと組合せ論にフォーカスを当てた専門書です。特にフローについて詳しいです。競技プログラミングで使うことを念頭に買いましたが、どちらかというと研究のためによく使いました。200 ページくらいでコンパクトですが、マトロイドの話や、ネットワークシンプレックス法の話、組合せ論の章では単体的復体のホモロジーの話など、発展的な話題も広く触れられているのが特徴です。

学部四年

学部四年の一大イベントはなんと言っても研究室配属です。当時京大にできたばかりの湊先生のアルゴリズム系の研究室か、鹿島先生の機械学習系の研究室かで非常に悩みました。どちらの研究室にも個人的にアポを取って先生からお話を伺ったりしました。これまで述べてきたように学部二年のときの深層学習フレームワークの実装や、学部三年のときの PFN のインターンなどの契機があったのと、学部三年のときに書いた天気予報論文では鹿島先生にも指導いただきとても良い体験だったので、鹿島研を選びました。結果的に、とても自由に研究させてもらい、アルゴリズムっぽい研究もでき、鹿島研に入ってとても良かったと思っています。湊先生とはその後 AFSA などで軽くディスカッションさせていただき、とても楽しかったので湊研に入っていた if も良かったことには違いありませんが。

また、学部四年のときには ACM ICPC のジャカルタ大会で 2 位になり、世界大会にも進出しました。大学でやっていた競技プログラミングの集大成のような形で結果を残せたのがとても嬉しかったです。

学部四年の前半は院試勉強を若干やりつつも、ここからは研究が大きなウェイトを占めていくことになります。そのため、情報源は成書よりも論文が中心となっていき、また成書を読むにしても 1 冊を腰を据えて読むというよりは必要なところだけを確認するというような使い方をすることが多くなっていくため、紹介できる本は少なくなります。

金谷 健一『これなら分かる最適化数学』

院試を見据えて研究室の同期で輪講を行いました。勾配降下法やニュートン法などの標準的なトピックのほか、EM アルゴリズムやストリングマッチングなどまで含まれており、機械学習などのデータ科学分野との接続性がよい最適化の教科書だと思います。

中川 裕志『機械学習』

こちらも院試を見据えて研究室の同期で輪講を行いました。『はじめてのパターン認識』が機械学習のユーザーとして知っておきたいことを学べるのに対して、こちらは機械学習手法を作ったり、機械学習を専門とするために知っておいた方が良いことがよくまとまっています。PRML ほどは難しくなく、大学での機械学習の教科書としてちょうど良いと思います。

須山 敦志『ベイズ推論による機械学習入門』

院試の勉強のために独学用に使いました。今も昔もベイズに若干の苦手意識(思想が苦手とかではなく、私の理解が甘いという意味です)があるのですが、分からなくなったときに基本に立ち戻るために今でもこの本を参照することがあります。

佐藤 文広『石取りゲームの数学』

組合せゲーム理論について教科書です。最近『組合せゲーム理論の世界』を上梓された末續さんが主催するこちらの本の輪講に誘っていただき参加しました。実は末續さんは高校の先輩で、私が高校 2 年生のときの教育実習生でもあります。そのときにニムをはじめとする組合せゲーム理論の講義を受け、その後も競技プログラミングでも組合せゲーム理論系の問題にはしばしば触れており、組合せゲーム理論とは何かとご縁があります。競技プログラミングでは典型ゲームは普通のニムとワイトホフくらいですが、こちらの本は制限ニムについてのマニアックな定理や、そのほか様々なゲームが紹介されています。パズル的な頭の体操としても面白かったです。

Gabriel Peyré et al. "Computational Optimal Transport" ☆

機械学習 + 最適輸送の有名な教科書です。記述が分かりやすく、応用例も豊富でとても良い本です。測度を意識せずに読める地の文と、離散測度の囲み文と、一般測度の囲み文に分かれている点も応用者に優しくとても良いやり方だと思います。当時は測度論についてあまり分かっておらず、むしろこの本の記述を対訳文のようにして測度論の概観を掴むことができました。指導教員の山田さんの縁で、学部四回の終わりごろに当時 ENSAE/Google Paris の Marco Cuturi と共同研究することが先に決まり、決まってから慌ててこちらで最適輸送を学びました。きっかけは急でしたが、今では自分の専門トピックの一つとなりました。その土台を築いてくれたという点でも頭が上がらない一冊です。

修士課程

修士一年の間はまだ博士課程に進むか、エンジニアとして就職するか決めかねていました。修士一年の夏にメルカリにサマーインターンに行き、秋には Marco のいるフランスに 1 ヶ月ちょっと滞在しました。どちらもとても楽しい経験でした。論文が連続して不採択されて研究について落ち込んだ時期もありましたが、修士一年の夏にはじめて NeurIPS に論文が採択されたこともあり、博士課程に進むことを決めました。

修士一年の終わり〜修士二年の始まりごろに新型コロナウイルスのパンデミックがはじまりました。学会などにあまり参加できなかったのは残念ですが、私はもともと引きこもり体質だったので、生活にはすぐ順応できました。むしろ、引きこもりグセが悪化してしまったのがコロナ禍の弊害なように思います。

論文読みの日課について - ジョイジョイジョイ で紹介している論文読みの日課は修士一年の終わり頃からはじめました。そのこともあり、ますます情報源は成書よりも論文が中心となっていきました。

金谷 健一『これなら分かる応用数学教室』☆

買ったのは随分前でしたが、しっかり読んだのは修士の頃だったと思います。学部・修士を通してフーリエ変換を含む講義を取らなかったのですが、流石にフーリエ変換を知らないとマズいと思って読みました。直交基底の話などフーリエ変換の前段となるところから丁寧に準備がありとても分かりやすく、独学にもぴったりで非常におすすめです。

河原 吉伸ら『劣モジュラ最適化と機械学習』

劣モジュラ最適化は機械学習と組合せ最適化の両方に関係が深いです。私の興味とも近いはずなのですがこれまであまりご縁がありませんでした。IBIS 2019 で相馬さんが劣モジュラ最大化のチュートリアルをされていて、気になって購入しました。それまでは劣モジュラ≈収穫低減というイメージすらなかったのですが、読んでみると文書要約や特徴選択やカットなどあらゆるものが劣モジュラに見えてきました。組合せ的な話題も多く、私の興味にぴったりでした。

増田 直紀ら『複雑ネットワーク』

競技プログラミングでグラフ理論やグラフアルゴリズムはさんざん触れてきましたが、この本を読むまでは、ネットワーク科学といえば六次の隔たりやべき則をなんとなく聞いたことがあるくらいでした。何気なく手に取ったのですがとても面白かったです。SIRモデルはコロナ禍のときに感染症の流行モデルとして話題になりましたね。

Mark Newman "Networks"(半端)

『複雑ネットワーク』が面白く、本格的に学ぶべく読み始めました。とても面白かったのですが、大著のため読み切ることはできず、たまに関連する話題を確認するために参照するくらいに留まっています。

Deepayan Chakrabarti et al. "Graph Mining: Laws, Tools, and Case Studies"

当時(今もですが)Christos Faloutsos 先生の研究の大ファンで購入しました。内容も興味のある話ばかりで楽しく読めました。研究室に置いてきたので今手元になく参照できませんが、preferential attachment などの基本事項はもちろん、このグループが力を入れていた R-MAT などのグラフ生成モデルが結構詳しく載っていた印象です。SIRモデルのような複雑ネットワークの話もあり、PageRank や HITS などのアルゴリズムの話もあり、グラフマイニングについてかなり幅広くという感じの内容です。

Stephen Boyd et al. "Convex Optimization" ☆

凸最適化のための世界的名著です。記述がとても分かりやすく、例も豊富で、扱っている範囲もとても幅広く、ためになった書籍ランキングではトップクラスです。この本を読むまでは連続最適化には苦手意識がありましたが、克服することができました。『CPU の創り方』の項でも述べましたが、本の価値は本を読む前と読んだ後の差(介入効果)にあると考えており、その点で私にとって相当な価値のある本でした。こちらも理想の書籍の一つと心の中で崇めながら、自分がテキストを書くときにマインドをひっそり参考にしています。

Roman Vershynin "High-Dimensional Probability" ☆

データサイエンス応用寄りの確率統計の専門書です。確率統計の教科書となると、確率の公理などからはじまるカッチリしたものか、あるいは応用に振り切ったもののどちらかが多い印象ですが、こちらは応用を見据えた理論について学べる稀有な本です。カバーしている範囲もとても広く、カバリングナンバーや VC 次元のような機械学習寄りの話から、ランダムグラフの話、最大カットの SDP 近似アルゴリズムの話まで様々です。機械学習の理論寄りの研究がしたい方はぜひともおすすめです。

Vijay V. Vazirani "Approximation Algorithms"

近似アルゴリズムの教科書です。当時 "Approximation Ratios of Graph Neural Networks for Combinatorial Problems" や "Random Features Strengthen Graph Neural Networks" など近似アルゴリズムに関する研究をしていたので、もっときっちり学ぶために読みました。TSP、ビンパッキング、集合被覆などの有名問題の近似アルゴリズムを一つずつ設計しながら、設計技法を学んでいけて、スムーズに力のつく良い本だと思います。

Krishna B. Athreya "Measure Theory and Probability Theory"(半端)

最適輸送を研究するうえで測度論はやはり避けては通れず、本格的に学ぶために購入しました。積分の定義のあたりまでじっくり読み、収束についての話などをつまみ食いして、あとは辞書代わりに使っているという感じです。

Sheldon Axler "Linear Algebra Done Right"(半端)

作用素論などを念頭に置きつつ、従来とは違ったアプローチからの線形代数の教科書です。上に述べた斎藤 毅『線形代数の世界』とも少し近い気もしますが、この本はそこまで抽象的ではなく柔らかめな導入だった印象です。この頃、線形代数の直観を得ることに苦心しておりこの本に当たりました。その頃書いたのが 実対称行列が直交行列で対角化できる直感的な証明 - ジョイジョイジョイ です。

joisino.hatenablog.com

ロナルド・グラハムら『コンピュータの数学』(半端)

これまでも何度か触れてはいたのですが、この頃、暇なときに演習問題を解いたりしていました。合同な凸図形でn要素ベン図を構成する方法 - ジョイジョイジョイ はその時の話です。当然中身も面白いのですが、組版からかなりこだわっていて、生徒の声が柱に載っているなどのギミックも面白く、読んでいて楽しいです。じっくり演習問題を解いたり、ぱらぱら面白そうな章を眺めたり、触れ合っている時間は長いのですが、通読は未だ叶えられていません。

joisino.hatenablog.com

博士課程

博士に進んでからは研究ほとんど一筋です。博士論文の中間発表があまりうまくいかず、途中で Readable の開発に浮気したりした時期もありましたが。まあこれも広い意味では研究ですし、この時にはエンジニアになることは頭にはなく、基本的に研究のことを考えていたように思います。

金森 敬文ら『機械学習のための連続最適化』

内容はタイトルの通りです。機械学習のための連続最適化というピンポイントなトピックでありながら 351 ページと和文専門書としてはとても分厚く、かなり広い話題がカバーされています。定理の証明も付いているのも魅力的です。和文かつ丁度よいサイズ感なので、連続最適化について参照したときにはまずはこの本を開き、次いで Boyd の Convex Optimization などの洋書を当たることが多いです。

梅谷 俊治『しっかり学ぶ数理最適化』

数理最適化全般の教科書としては和書のなかで一番よくまとまっていると思います。連続最適化・離散最適化の両方を手広く扱っているのが特徴です。当時 Twitter で話題になっているので読みました。既に Boyd の Convex Optimization や Vazirani の Approximation Algorithms などを読んだ後だったので、未知の内容はほとんど無かったですが、知識を改めて整理するのには役立ちました。フルカラーで図なども見やすく、学部生のときに刊行されていればこちらで勉強していただろうと思います。

結城 浩『暗号技術入門』☆

有名な暗号技術の教科書です。ずっと気にはなっていたのですが、"Embarrassingly Simple Text Watermarks" で電子透かし関係の研究をするにあたって通読しました。流石、説明がとても分かりやすく、また入門書といいながらも奥深いところまで説明があり勉強になりました。ちょっとかじりたいだけの人もガッツリ学びたい人も、暗号技術や関連技術を学ぶには最適な本だと思います。

持橋 大地ら『ガウス過程と機械学習』

ガウス過程はずっとなんとなく知っているという状態で、論文を読むときにも雰囲気でごまかしていた節があり、気持ち悪くなったのでこちらでしっかり勉強しました。ごく基本的なところからはじまり、ガウス過程のイメージの導入があり、使い方を学ぶうちに最後は研究に近いところまで引き上げてくれます。評判に違わない素晴らしい本だと思います。やはり MLP シリーズは特定のトピックを学ぶのにとても便利ですね。

瀬戸 道生ら『機械学習のための関数解析入門』

カーネル法の入門書です。研究でちょくちょくカーネル法に触れてはいたものの、福水先生の講義資料をチラチラ読むくらいで体系的にカーネル法を勉強したことがなかったところ、折りよく出版されたのを見かけて読みました。150 ページくらいのコンパクトなサイズでカーネル法について一通りさらえるので良かったです。

相馬 輔ら『組合せ最適化から機械学習へ』

組合せ最適化と機械学習という私の興味ど真ん中だったので発売後すぐに買って読みました。内容は劣モジュラ最適化を軸に、グラフマイニングや能動学習など関連するデータマイニングと機械学習のトピックについてです。グラフ上の情報拡散などはデータマイニング系の会議でもたびたび読んでいたのですが、散発的な知識だったのを改めて学べてよかったです。また、紹介されているアルゴリズムは理論や証明がキレイものが多く、読んでいて楽しかったです。単純なアルゴリズムで非自明かつきれいな理論保証が付いているものが好きな人は気に入ると思います。

今泉 允聡『深層学習の原理に迫る』

深層学習の理論を一般向けに解説した書籍です。理論の直観がとてもよく示されており、数式がほとんど登場しないのに完全に理解した気持ちになれます。ちゃんと理解している著者が、細かい所は置いておいて本質的な部分を抜き出して説明している感じが伝わってくる、理想的な一般向けの解説書です。ある程度は深層学習の理論に馴染みがありましたが、あまり考えがまとまってなかったところに明快な説明がスッと入ってきて腑に落ちたりもしました。B6 版で 100 ページ強なので手軽に読める点も嬉しいです。

鹿島 久嗣ら『ヒューマンコンピュテーションとクラウドソーシング』

今更ですが指導教員の本を読みました。研究室にはクラウドソーシング系のことをやっている人と機械学習系のことをやっている人がおり、私は機械学習系だったので、クラウドソーシングの話は研究会などで聞きかじっている程度でしたが、改めて読むと曖昧だった知識をまとめられて良かったです。reCAPCHA やメカニズムデザインなど、話として面白いトピックも多く、読んでいて楽しかったです。

佐久間 淳ら『データ解析におけるプライバシー保護』

タイトルの通り、データ解析におけるプライバシー保護の教科書です。差分プライバシーや秘密計算、準同型暗号などのトピックが学べます。"Making Translators Privacy-aware on the User's Side" などプライバシー関連の研究をするにあたって読みました。前半では実世界でのプライバシーの事例や法律について解説されており、プライバシーに関わるデータを扱う実務家の人たちにも役立つと思います。Netflix が匿名化して公開したデータを IMDb のデータと突き合わせることでアカウントを特定できたり、AOL が匿名化して公開した検索ログデータから特徴的な検索クエリを組み合わせることで個人を特定できたりといったことは話としても面白かったです。差分プライバシーのあたりは数理的にもしっかり書かれており、研究をする際にもよく参照して便利でした。

ロバート(モンロー)モナーク『Human-in-the-Loop 機械学習』

メルカリのインターンでお世話になった @hurutoriya さんが訳者として参加されており、そのご縁で共立出版さまよりご恵贈いただきました。機械学習にとってとても重要な、しかし見落とされがちなデータの準備や人間との関わりについての幅広い知見が詰まった稀有な本です。詳しい書評は 『Human-in-the-Loop 機械学習』 - ジョイジョイジョイ にまとめたのでそちらをご覧ください。

joisino.hatenablog.com

Hisa Ando『GPUを支える技術』

深層学習でユーザーとして利用することは多いものの、GPU の仕様をよく理解できていなかったので読みました。深層学習用途も念頭に置きつつ、従来の CG 応用も含めて GPU の技術が一通り学べました。

戸根 勤『ネットワークはなぜつながるのか』☆

コンピュータネットワークについて有名な和書です。ユーザーがブラウザに URL を入力してからウェブページが表示されるまでの情報の経路をツアーガイドするという形でネットワークについて解説がなされます。ツアー形式が見事です。実際の動作がイメージしやすく、読んでいてワクワクしました。記述も非常に丁寧で、入門書でありながら深いところまで解説があります。前述のようにコンピュータネットワークには苦手意識がありましたが、本書のおかげで随分和らぎました。コンピュータネットワークを学ぶ最初の一冊としては最適だと思います。

Jorge Nocedal et al. "Numerical Optimization"

世界的に有名な最適化の教科書です。こちらも Boyd の Convex Optimization 同様に記述が非常に丁寧です。線形計画の扱いが詳しかったり、ゼロ次最適化などを含む非凸最適化まで扱っているのが特徴です。Boyd の Convex Optimization を読んだあと、補完的に最適化の理解を深めたい方におすすめです。

Guido W. Imbens et al. "Causal Inference for Statistics, Social, and Biomedical Sciences: An Introduction"

因果推論の世界的権威のお二人が執筆した因果推論の教科書です。"Twin Papers: A Simple Framework of Causal Inference for Citations via Coupling" など因果推論関係の研究をするために勉強しました。傾向スコア逆重み付けやマッチングなど典型手法だけ知っている状態でしたが、フィッシャーの厳密p値など基本的なところから改めて勉強すると理解が深まって良かったです。実際にデータを使って計算・分析をする例も多く、イメージが湧きやすいのも良いところです。

Thomas M. Cover et al. "Elements of Information Theory" ☆

世界的に有名な情報理論の教科書です。エントロピーやハフマン符号など学部の授業でやるような基本的なところはもちろん、大偏差原理やコルモゴロフ複雑性など発展的な話題も詳しいです。数理的な導出がかなり丁寧です。式変形のときに等号・不等号の上に (a) (b) などの記号を振って地の文で解説するという方法が繰り返し用いられており、私もこのやり方を気に入ってよく使っています。英語テキストのエントロピーの話や、情報量とギャンブルの話など、挿話も面白く読んでいて引き込まれます。洋書に抵抗がなければ、情報理論を学ぶのには最高の一冊だと思います。

『岩波 数学入門辞典』『朝倉数学辞典』

これまで数学辞典を引くという習慣は無かったのですが、書籍を執筆する際に理解が曖昧なままで用語を使ってはいけないと思い、専門から少し離れた数学用語を使うときなどにはよく引くようになりました。使い始めてみるとあちこち教科書を引っ張り出してくるより時短にもなってかなり便利です。こういう古典的なツールを堅実に使いながらテキストを書けるようになるというのも、博士課程の重要な要素だと思います。

佐藤 竜馬『最適輸送の理論とアルゴリズム』☆

著者です。ここまで書いてきたように、私は本を読むのがとても好きです。書籍出版を打診されたときにはとても嬉しく、自分が書く側に回れるようになるというのはとても感慨深かったです。しかも、これまで度々取り上げているように、機械学習プロフェッショナルシリーズは私が機械学習分野に進むきっかけにもなったシリーズですし、研究の道のりでもたびたび助けていただいたシリーズでした。

最適輸送は確率分布の比較のための道具で、損失関数の設計や、少し前だと敵対的生成ネットワーク、最近だと拡散モデルなどの生成モデルにもよく使われています。拡散モデルについてはついこの間記事にしました。 joisino.hatenablog.com ありがたいことに好評をいただき、現在第 5 刷となっています。自分の書いた本に☆を付けるのは気が引けましたが、やっぱり皆に読んでほしいので付けちゃいます。

佐藤 竜馬『グラフニューラルネットワーク』☆

来月 25 日発売予定のグラフニューラルネットワークについての本です。なぜ発売前なのに読んだリストに入っているかというと、著者だからです。この本は自分でもとても良く書けたと思います。和書でありながら洋書にも引けを取らない世界一の専門書にすることを目指しました。丁寧で幅も広く、多くの人に面白いと思ってもらえる本になったはずです。現在校正作業の終盤ですが、自分で校正しながら読んでいても面白いな〜と正直に思います。これまで自分の作品に対する自信があまり無かったのですが、ようやく自分の作品を真正面から褒められるようになってきました。研究者としてはまだ歩み出したばかりですが、今後ますますよい作品を世に送り出せるよう精進いたします。

終わりに

本稿の執筆にあたっては大学生活の勉学まわりの回顧録を参考にしました。都竹さんが修了されたときにこの記事を読み、とても良い取り組みだと思いました。自分も修了時にはやろうということがずっと頭の片隅にあり、この度晴れて修了して本稿を書く運びとなりました。

こうやって並べると、たくさん読んできたことが感じられて感慨深いです。歩みは遅く、ときには後戻りすることもありましたが、流石に 9 年間も学び続けると遠くまで来られました。もちろんこれからも、多くの本を読み、書いていきたいと思います。今後ともよろしくお願いいたします。

連絡先: @joisino_ / https://joisino.net