とある京大生の作業ログと日々の雑記

コンピュータサイエンスについて学んだことを可視化したり日々の雑記をまとめてます。

無料で拾える機械学習系の本のPDFまとめ

最近はツイッターでいろんな人に普段どんな感じで勉強してるのかということを聞かれるのですが、ぼくはだいたいネットでPDFを拾ってきて読んでます。




そこでぼくが今まで読んだ中で良さげな機械学習系の本のリンクをまとめておこうと思います。




ちなみに全て英語ですので日本語じゃないとやだ〜〜〜って泣いちゃう方はタブを閉じるか日本語訳を書店で探してきてください。




PRML (Pattern Recognition and Machine Learning)






Pattern Recognition and Machine Learnng

www.microsoft.com






まず1冊目はみんな大好きPRML




機械学習の本というよりかはベイズの本と言っていいようなお気持ちもあるのですが、基礎力として非常にいい本だと思います。




特にグラフィカルモデルの章はめちゃくちゃ読み応えあるので個人的には大好きな一冊。




ただ、線形代数とか微積についてある程度理解してないと爆死します。数学をある程度固めてから臨みましょう。




Deep Learning






Deep Learning

www.deeplearningbook.org






GANのパパことGoodfellow先生の一冊。




ディープラーニングというと2013年くらいのAlexNetあたりからバズってだいぶすごいことになってきましたが、その深層モデルの研究はもう少し前から行われています。




本書は最近話題のディープラーニングの初期モデルであるVAE(Variational AutoEncoder)などからしっかり解説してあるので、ディープラーニングに対してわかりみを生やしたい人はオススメです。




ちなみに数学のレベルはそこまで高くないので比較的平易に読めるかと。




カステラ本






Elements of Statistical Learning - data mining, inference, and prediction

web.stanford.edu






TJOさん(@TJO_datasci)さんオススメのカステラ本。




PRMLがかなりベイズベイズしてる本で理論ばかりであまり実装面をカバーしていないのですが、こちらのカステラ本は実装面をある程度カバーしているので、PRMLよりかはとっつきやすいかも。




PRMLと違っていいなぁと思ったポイントとして、割と教師なし学習の手法についてまとめてあることやリッジ回帰をカバーしてることですね。




オススメです。




Information Theory, Inference, and Learning Algorithm






Information Theory, Inference, and Learning Algorithm

www.inference.org.uk






上に挙げた本と比べるとあまり有名ではないのですが、非常に名著だと思っています。




日本語訳がないのはなぜだろう....(日本語訳するんだったら協力します)




Computer Vision






Computer Vision

szeliski.org






今までは学習理論とかそういう話でしたが、これはちょっと毛色が変わってコンピュータビジョンの本です。




ぼくはCVについてはこの本で勉強しました。




あまりCV系が専門ではないのでアレですが、読みやすい本です。




Bayesian Reasoning and Machine Learning






Bayesian Reasoning and Machine Learning

web4.cs.ucl.ac.uk






ベイズの本。まだ未読だけどザッと見た感じ面白そう。




Think Stats






Think Stats

greenteapress.com






プログラマーのための統計と確率の本。




Foundations of Statistical Natural Language Processing






Foundations of Statistical Natural Language Processing




統計的自然言語処理の本。




ニューラル系のアレじゃないから少し昔の本なんだけど、n-gramとかコーパスに基づく云々の泥臭い研究が眺められる一冊。




まあでもNLPだったら今なら素直にゼロから作るディープのNLP編をやった方がいいのかな?




Feature Engineering for Machine Learning






Feature Engineering for Machine Learning




機械学習のための特徴量エンジニアリングの本。




結構ツイッターで話題になってて、それで英語版をググってみたらPDFが拾えた。




かなり良書だったのでオススメ。




Reinforcement Learning






Reinforcement Learning




Suttonの強化学習本。クッソ読みにくい。




強化学習勉強したいんだったらぼくの強化学習本読んでください。









まとめ






今回は色々機械学習の本を紹介しました。




まあ多分ほとんど日本語訳があるのかも。ただ、英語でよければ無料で勉強できるよってお話。




ぜひぜひ皆さんも機械学習勉強してAI人材としての市場価値を高めましょう。

『特徴量エンジニアリング』が読み終わったので書評をば。

前にツイッターで話題になった『特徴量エンジニアリング』ですが、流行に乗り遅れる形で読み始め、先日読み終わったので書評エントリーを。









きっかけ






読み始めるに至ったきっかけは特にないです(すっぱり)




最近は就活であっちゃこっちゃしててゆっくり勉強できる時間が取れてなくて、それで一度サクッと読めそうな本をスキマ時間に読んでおこうと思いまして、それでぼくのPDFコレクションの中で探ってみたら特徴量エンジニアリングが良さげだったので読み始めました。




もちろんネット拾ってきたやつなので英語版です。




感想






感想としては




データサイエンスをやりたい人にはぜひオススメしたい一冊




本書ではあんまり機械学習について云々するという感じではなくて、いわゆる特徴量というものがデータの中ではどのように表現されているのか、ということに焦点を当てて話を展開していきます。




いわゆる機械学習というのはデータの中の特徴量を用いて予測モデルを作成するということがメインタスクですが、そのみんな大好き機械学習をやるにあたって特徴量をどのように扱うかということがとても大切となってきます。




前にツイッターで流れてきた文言ですが、データがゴミだと予測モデルもゴミと言われていて、実際まさにそうだと感じています。




少し具体的な話をすると、例えば猫がどうかを判別する画像認識モデルを作成したいとき、学習データに猫以外のものがたくさん写ってるといわゆるディープラーニングではうまく特徴量抽出ができないわけです。




これはかなり極端な話ですが、とにかく機械学習において特徴量は大切という話です。




本書では大きく分けるとOne-hotベクトルなどのデータの表現方法テキストデータ画像データの3つに分かれています。




ぼくはもともと専門が強化学習の理論などで、それに付随して画像系はある程度知識があるのですが、一方であまりNLPについては強くないのでテキストデータについて解説したパートに関しては面白いなぁと思いながら読み進めていました。




それ以外のパートについても非常に興味深く、あまりこういうタイプの本はないので非常に面白かったです。




最近はデータサイエンスがバズワードとなっていて機械学習業界に参入する人が増えてきましたが、機械学習などについて全くの未経験の人は機械学習の理論的な書籍と合わせて読み進めれば現場では即戦力になれると思います(多分)




まとめ






今回は『特徴量エンジニアリング』について簡単なレビューをしました。




非常に読みやすい内容となっており、ぼくは手を動かしながら3日くらいでサクサク読んでしまいました。




ツイッターでいろんな人の間で話題になっていたのも頷けます。




ぜひぜひ、皆さんも読んでみてください。




『Foundations of Statistical Natural Language Processing』を読んだ

今回は書評エントリーになります。




読んだのは『Foundations of Statistical Natural Language Processing』という20年くらい前の本です。




邦訳版として『統計的自然言語処理の基礎』という本が出ております。









読んだきっかけ






ぼく機械学習については少しだけ勉強した感じなんですけど、自然言語処理に関してはホントに素人だったんですよね。




最近だとBERTとかいう自然言語処理の手法が登場して結構ツイッターとかで話題になってたわけです。




それでずっと自然言語処理やってみたいなぁって思ってたんですけど、つい最近こんなイベントを発見したわけです↓




recruit-tech.co.jp






リクルート自然言語処理ハッカソンというやつで、10人限定ながらもホテル4白5日の交通費付きという素晴らしい案件で、コレ見てなんか直感的に申し込むしかねえ!!!!ってなったんですよねw




まあそれで申し込んで、無理やり自然言語処理を勉強する理由を作ることに成功したわけです。




それで書店をぶらぶらしてたところ、この本の邦訳版が並んでて、その場でググってみたところこの原著PDFが拾えたのでやってみるか〜ってなったわけですね。




感想






ざっとひとことでまとめると




ニューラルネット全盛期を迎えるまでの自然言語処理の発達の歴史を学べる一冊




という感じになります。




自然言語処理というのは大きく分けて2つ手法があって、シソーラスカウントベースがあります。




シソーラスについて、単語を辞書などで調べるとたくさん類義語なり関連ワードが出てきますよね?




例えば「カレー」を調べると「食べ物」とか「スパイス」、「インド」、「茶色」などなど....




そして同時に、ある単語を表す際に、その関連ワードたちは階層構造を持っているわけです。




このように、ある単語について関連ワードの階層構造を持って単語の意味をなすようにする手法がシソーラスというものです。




このシソーラスWordNetという膨大なデータベースに蓄えられていて、それを用いればパソコンも自然言語の単語を意味をもって理解することができるわけですね。




しかし、このシソーラスは問題点があって、例えばデータベース構築の手間がめちゃくちゃかかるわけです。




シソーラスは単語の意味を認識する際には有用な手法ではあるのですが、取り扱いが難しいので自然言語処理がややしんどいと。




そこでシソーラスと別の手法がカウントベースです。




カウントベースとは、名前から想像できる通り単語の出現などを数えて処理しようというものです。




ここで自然言語の単語や文の総体をコーパスといい、カウントベースではコーパスにおける単語の出現頻度を統計的に処理して意味構造を抜き出そうというわけですね。




まあつまり機械学習の出番というわけです。わかりやすい。




で、実際の解析方法としてどうやるかというと、n-gramという連続する文をn語で分割するテキスト分割手法を用いて解析区分を仕切り、そうして隣接する単語を見るわけです。




具体的にどうするかというと、例えば"I apply the algorithm to the problem."という文章を見たとき、"apply"という動詞の出現に対して"to"が対応してそうと統計的にわかっている("apply"が出現した後に"to"が出現する確率が高い)という場合、このような語法があると知っているモデルを形成することができるわけですね。




また、別の例として、"He ate the cake."と"He ate an apple."では"He ate 〇〇"という形になっていて、文は似たような構造を持っていることから"the cake"と"an apple"は似たような意味を持ってそうだなと理解することができるわけです。




このような単語の類義語推定問題について、単語の分布マップ(知識空間と言ったりするらしい)において、"the cake"と"an apple"は近しい場所にマッピングされることになります。




まあこんな感じでシソーラスの対をなす自然言語処理の手法としてカウントベースがあるわけですね。




で、本書ではどんな感じのことを論じるかというと、このカウントベースについて単語推定モデルをいかに形成するかということを無限に展開していきます。




先ほどモデルを形成すると言いましたが、具体的な自然言語処理アルゴリズムとしては単語出現率を用いてベイズEMアルゴリズムSVMなどをひたすら振り回します(笑)




ここで解析手法としてEMアルゴリズムSVMが登場するあたりやはり2000年前後の本なんだなぁ...となりますねw




今はニューラルネットの時代なのでアレですが、自然言語処理については基本はあまり変わっていないそうで、このモデル構成において単語の出現確率推定などをEMアルゴリズムからニューラルネットに置き換えた感じが最近の自然言語処理のようです。




一応ニューラルネットにおいてはword2vecやらseq2seq、Attension等で色々工夫して成功してるっぽいんですけど、今でも自然言語処理の基本構造は本書に書いてある感じなので、そういった意味で本書は自然言語処理の基礎を学ぶにあたって良い書籍なのかと思います。




まあぶっちゃけ読む必要があるかというと微妙なんですけど、読んで損することはないと思います。




実際にぼく自身かなり自然言語処理の勉強になりましたし、これなら今からでもニューラルネットでスクラッチで色々実装できそうな感じがしてます。




てことで地力をあげたい人には良い書籍です。オススメします。




# まとめ




今回は『Foundations of Statistical Natural Language Processing』を紹介しました。




本書を読んで、自然言語処理何もわからんマンだった身としてはちょっとだけ理解が進んだと思います。




ちなみに冒頭に述べたリクルート自然言語処理ハッカソンなんですが、無事に選考を突破して参加者10人の中に入ることできたのでハッカソンに参加することになりました。




f:id:komi1230:20190204223611p:plain
合格のメール





今回自然言語処理の理論的な勉強もしたし、ハッカソンではがんばってこようと思います〜




ではでは、お疲れ様でした!

『工学のための関数解析』を読んだ

今回も書評エントリーです。









読んだきっかけ






前に『情報幾何学の基礎』を読んでちょっと数学楽しいなって思って、それで今回また数学寄りなやつをって感じですね。









で、なんかツイッターとかでよく数学科の人たちが機械学習に活きる数学なら関数解析っしょ!(意訳) 的なことを言ってて、じゃあ次にやるなら関数解析かなって感じのモチベです。




まあそんなこんなで関数解析の本を探してたわけなんですけど、まあ関数解析の本ってめっちゃあるわけですね(笑)




それで色々探してる中で、どうもツイッターでの有名人の方々が『工学のための関数解析』と『工学系の関数解析』の2冊が結構いいぞ的なことをおっしゃってたわけですよ。









ということでどっか書店で立ち読みして、どっちにするか立ち読みしてから決めよって思ってたわけです。




しかしここで問題が。近くの書店ではどこにも売ってないことが発覚(笑)




仕方ないので、前に丸の内の方に行く用事があったので、その流れで神保町の三省堂に行ってようやく発見したわけですねw




まあそんなこんなで色々見てたわけなんですけど、どうやら『工学のための関数解析』と『工学系の関数解析』の2冊は基本的には内容はそこまで変わらなくて、『工学のための関数解析』は最終章で凸最適化アルゴリズムについて紹介し、『工学系の関数解析』は逆問題とか再生核ヒルベルトについて触れているようでした。




ぼくは全く関数解析については強くない人間なので、まあ余裕があれば両方ともやろうかなって思ってたので、とりあえず値段が安い方の『工学のための関数解析』を手に取ったわけです。




感想






ざっと感想をまとめると




微分積分学レベル100みたいな気持ちになれる The 解析 って感じの本




といった感じでした。




本書の構成としては、最初に「写像とはなんぞや」みたいなところから丁寧に積み上げていって、距離空間とかの定義、そうしてノルム空間とか内積空間に話を拡張してそこから得られる性質について議論し、最終的に凸空間での最適化について論じていくという構成です。




この構成を見て気づいた人はいると思いますが、あまり具体的に数学を工学的に応用するみたいな本じゃありません。




むしろ、普段から工学で使われてる最適化手法がどのような背景のもとに数学的に保証されているかを丁寧に解説した本となっています。




なのでこれから関数解析を勉強して機械学習にバリバリ応用していくぜ〜みたいな人にはあまり向いてないのかもしれません。




そういう人はむしろ数値解析とかの本を勉強した方がいいのかな....?




まあ本書はそんな感じで、あまり機械学習の先進的に云々するというわけではないのですが、既存の最適化手法がヒルベルト空間のどのような性質から帰結される事柄なのか〜みたいなことが書いてあるので、本書を読むと最適化手法について数学的な確信が得られるというような表現がベストかもしれません。




実際、ツイッターでもいろんな人が関数解析機械学習には必要ないけど、やると景色が良くなるというような旨のことを言っていて、ぼくもなるほどなぁって思いました。




まあだから、今回は微分積分学レベル100という表現を使わさせていただきました(笑)




ちょっと具体的な話をすると、ヒルベルト空間とは内積構造を持った完備(極限の存在が保証されている)な空間であり、ユークリッド空間を一般化したもので、微分積分学の知見を活かすことができるわけですね。




この性質から、例えば距離を測ることができたり幾何的な性質を導き出すことができて、まあ色々おいしいわけですね。これは自然と最適化とかに応用できるわけです。




ちなみに本書では直交性の議論をよく行っていて、幾何的な説明に結構力を入れているような感じがして数弱なぼくには非常にイメージがわきやすいものでした。




本書での証明は多分それなりに工学の人に寄せたんだんなぁという感じがあって、結構簡潔に示されているので工学の人でもそれなりに読みやすいと思います。




まあ最初に言った通り、これは応用の本でもないし数学科のための本でもない感じがしてて、だから読者のターゲット層としては工学系の大学院生向けなのかなぁって感じです....




で、だからちょっと手放しにはオススメできるわけではないのですが、ある程度数学をまともに取り組みたいなって人にはまさに良い書籍だと思います。




必要ではないが、やると最適化についてかなり景色が良くなるって感じですね。




まとめ






今回は『工学系のための関数解析』についての書評でした。




実はぼくが京大理学部を志望したの、最初は数学がやりたかったからなんですよね(笑)




でも1回生の時に履修した集合と位相の授業で、こんなん自明やん!みたいな定理にクソ長い証明がついてたり、逆には?コレ何が起きてるんみたいな定理の証明に自明って書かれてたりで、当時の大学数学のお作法がわかってないぼくはそれで完全に心が折れたわけです(笑)




本書の最初の方は簡単な集合論の話から入るのですが、かつての自分が絶望したのをふと思い出しつつ、しかしちゃんと簡潔にわかりやすく説明してあったので、あの頃の自分がこの本に出会ってたらもう少し何かが変わってたのかもなぁって思ったりした次第です....w




本書のいいところは、こうした数学の基礎的なところが最終的に工学的に役立つよ!ってことが示されているので、ぼくはそういう意味で数学の授業が退屈だと感じてしまっているような1, 2回生にぜひとも読んでほしいなって思います。普通に微分積分の勉強とかになるし。




内容はそこまで行間が広いという感じもないし、数学書の中では結構読みやすい部類だと思いますので、ぜひともオススメいたします。









ではでは、お疲れ様でした!




P.S. この前SONYのWH-1000XM3というノイズキャンセリングのヘッドホン買いました。QoL爆上がりです。ホントにサイコーなので、皆さんも買ってサイコーになりましょう。




『細胞の中の分子生物学』を読んだ

今回は書評エントリーです。




読んだのは森和俊教授の『細胞の中の分子生物学』です。









読んだきっかけ






普段から読んでるのはだいたいCSの教科書だったり機械学習の本、数学の本あたりなんですけど、そういえば(実は?)ぼくの所属って工学部情報学科とかじゃなくて理学部理学科生物系なんですよね。




まあそれで最近ちょっと卒研が多少頭の中でチラついてて、一応やらせてもらう内容はバイオインフォマティクス系のネタで多分機械学習をぶん回してデータ整理するって感じになりそうなんですけど(もしかしたら前処理職人になる可能性の方が大きいのだけれど)、その前にちょっと生物科学の知識たらなさすぎるなって思ったわけです。




そんなこんなで何か生物の勉強しようと思ったんですけど、まあ細胞生物学とか分子生物学神経科学あたりの本ってみんな鈍器みたいな厚さなわけですね...




生物科学を勉強しようと思ったわけなんですけど、まあぶっちゃけそこまで分厚い本をこなすほどモチベはないわけです(笑)




それでどうしたもんかなって書店をぶらぶらしてたらブルーバックスで森教授の『細胞の中の分子生物学』を発見。




森さんは京大理学部で細胞のこととかやってるめちゃくちゃすごい先生で、何回か授業を受けたことがあるので知ってる先生だったわけですね。




それでちょっとパラパラって見てみると分子生物学周りのことをザザッとまとめてある感じで、しかも内容も200ページちょっと(しかもブルーバックスの本のサイズ!)だからこれはチャチャっと勉強できるぞと思い即購入したわけです。




感想






ぼくの専門はどちらかというとCSとか数学とかそっち側なのであまり生物科学に関して偉そうなことは言えないので、あくまで今回のエントリーは素人の読書感想文ということにご留意ください。




さてさて、感想ですが




素人の自分でもよくわかる、非常に惹きつけられるような内容だった




という感じです。




まあ理学部生物系ということで細胞生物学の授業とか履修したりはしたんですけど、ぼくはとにかく授業でじっと話を聞いてるのが嫌いなタイプだったのであまり授業に行ってなかったし、とりあえず単位だけ取れればいいやって感じでテスト前だけチャチャっと勉強してって感じでした。




なので生物科学についてはほとんど知識がなくて(てか今までそれらの知識が必要となるケースがなかったので)、スプライシングとか分子シャペロンとかの単語についてはなんとなく聞いたことあるような....ってレベルでした。




そんな人間だったのですが、今回この本を読んで分子生物学の全体がふわっと景色が良くなった気がします




先ほど述べた通り、生物科学の本って基本的にゴツいので、そこまでモチベがないぼくにはそういう読んでも途中で挫折するし、あとあんまり全体像が見えてこないわけですよ。




まあここらへんは完全にぼくの不徳の致すところであって偉そうなことは言えないんですけど、だけど今回読んだ本はかなり内容がコンパクトにまとまっていていたので途中で迷子にならずに全体像がハッキリしたまま読み切ることができました。




多分生物ガチ勢からすれば物足りなくていろいろ議論したいところがあるんでしょうけど、ぼくみたいな人間にはちょうど良かったです。




てことでなんとなく教養として分子生物学のことを知識として身に付けたい人にはちょうどいいかもしれません。




多分ぼくのブログを読んでる人だと機械学習とかそこらへんをやってる人がメイン層っぽいのでオススメしづらいのですが、まあ気晴らしに読んでみるといいかもです。




機械学習とかそこらへんに直接的に役立つ感じはないんですけど、まあ昨今クオリティが落ち続けているメディアに対してマサカリ投げる手段が一つ増えるという意味で役に立つかもしれません。




ちなみに本書の具体的な内容として、最初に生物とはなんだろうという話から始まり、遺伝子からゲノムヘ、DNAからタンパク質へ、細胞にはどんな働きとは、というようにだんだんと複雑な話へ組み上がるような構成となっており、ちょうどコンピュータアーキテクチャで言うならば AND回路などの基本素子からALUを組み上げて、みたいな感じとなっています。




説明の中では時代背景やノーベル賞の話が出てきて、定期的に親しみのある事柄が出てくるので面白く読み進めることができると思います。




非常に読みやすい一冊でした。




まとめ






今回は森和俊教授の『細胞の中の分子生物学』を読みました。




卒研ではバイオインフォ系のことをやると言ったけど、前に教授と面談させてもらったときにぼくの背景を伝えたところ問題設定はある程度やってくれるらしいので、まあぶっちゃけ生物学の知識は必要ないのかもしれないんですよね。




ただまぁ流石に生物系を名乗っといて生物学の知識ゼロってのは流石にマズイだろうし、あと研究室でのミーティングなりディスカッションで自分だけ知識が欠けてるってのはいろいろマズイだろうということで....




今回この本を読んで、流石に論文を書けるわけではないけど普通に学部1, 2回生程度の知識はついたかなと思います(前に同じ生物系の友達が「この本を読めば多分その程度にはなる」と言っていた)




ま、そんな感じです。




機械学習とかプログラミングとかそこらへんやるのもいいですけど、たまには気晴らしにこういう分野にも手を出してみるといいかもですので、オススメさせていただきます。




ではお疲れ様でした!




勉強スタイルの云々

最近よく普段はどんな感じで勉強してるのかとか今までどんな教科書を読んだのか英語と日本語だったらどっちの書籍読みますかみたいな質問が来るので、今回はそれらを簡単にまとめておくエントリーになります。




まあぶっちゃけ他人の勉強法なんか聞いてどうすんだよってのが率直な感想なんですけどね.....




ましてや、ぼくなんかに聞いても何の参考にもならんだろうって思ったりもしてるんですけど....




そんな感じでぼく個人としてはあまり理解が及ばないんですけど、なんか需要があるみたいなんでとりあえずザザッとまとめていきます。









勉強法






まあ勉強法って言っても数学とか物理の本みたいな理論書の場合とOSとか言語処理、機械学習の本みたいな技術書を読む場合とで多少はやり方が変わるので、まずはそこらへん分けていきましょう。




理論書






この場合の理論書というのは、例えば情報幾何学とか熱力学みたいな数式がゴリゴリ出てくるやつですね。




ぼくはこの手の本を読む場合は基本的に精読しながら数式を追います。




計算が必要そうな箇所については計算用紙を使って自分で手を動かして計算します。




やっぱり自分で手を動かしてみるのが一番ですよね。




あと、後になって重要になってくる定理とか定義は手元に定義式を書いておいてます(何回もページを戻るのがめんどくさいので)




まあ読み進め方はこんな感じですが、進め方としてはちゃんと理解できてから次に進むっていうのを徹底してるので1日に何ページ進めるみたいな目標は特にないです。




まあたくさん進んだらハッピーって感じの認識です。




ここでは理論書と書いたんですけど、例えばPRMLとかカステラ本みたいな数式ゴリゴリだけど最終的には実装しますよみたいな本はできる限りコードに起こして計算結果をMatplotlibやSeaborn等のツールを使って可視化します。(使用言語はPythonです)




技術書






この場合の技術書とは、まあSICPとかLand of LispみたいなCSの本ですね。




この場合は全部コードに起こしながら読み進めます。




環境とかバージョン等によってコンパイルが通らなかったり、そもそも環境構築がうまくいかなかったりするんですけど、まあそれは色々工夫しますね。




例えば最近の話で言えば、Land of LispCommon Lispを用いたソケットプログラミングが処理系によってAPIが異なっていて、Land of LispではCLISPを想定していたのですが個人的にSBCLでのソケットプログラミングを独自でやったりしました。(以下にまとめておいたので興味があれば参照してください)




qiita.com




まあこんな感じでガチャガチャ自分で手動かしながら進めてます。




ただ、環境構築がマジで厄介なタイプ(主に仮想環境でさらに色々やるようなタイプ)はもう環境構築諦めて理論だけ読み進めるみたいなこともたまにやります(笑)




英語の本か日本語の本か






PDFが無料で拾えるなら英語だろうが読みます。お金ないので。




アメリカの大学の教授とかはよく教科書を無料で公開してたりしてて、なのでテキトーにググればPDFが拾えたりします。




ぼくはよくそれでググってはPDF収集してストックしてます↓




f:id:komi1230:20190113000027p:plain




まあ中には著作権とかグレーっぽいやつもあるんですけどね.....w




とりあえず商用に利用したりしてないしぼく個人でエンジョイしてるので問題ないと信じてます....




たまに来る質問で英語だと読むのしんどくない?的なことを言われるんですけど、ぼくの意見としてはむしろ英語で勉強したほうがいいんじゃないのって感じです。




実際、国際ジャーナルとかに載る論文って英語で書かれてるじゃないですか。




それにソフトウェアのドキュメントだって英語で書かれますし、StackOverFlowだって英語で議論がなされてますよね。




だからもう英語はやらざるを得ないわけで、もう大学生なのに英語がーなんて言ってらんないと思うんですよ。




そりゃぼく自身も日本語ネイティブですし日本語で書籍を読んだ方がスピードも速いんですけどね、それでもやっぱり英語で読まなきゃいけないと思ってるんです。




まあもちろん最初は英語で勉強するのはしんどいと思うけど、それでも英語の教科書で勉強し続けたらそのうちスピードも上がってくるし、英語の言い回しも覚えられるし、勉強したかったことが勉強できて一石三鳥だと思います。




あと、これぼく思うんですけど日本語で書かれた専門書って高すぎません??




PRMLだって原著は無料なのに邦訳版だと上下巻合わせて13000円とかしますよね???




ここらへんのコストってハンパないですし、そういう意味で英語で勉強できた方がめちゃくちゃアドだと思うんです。




まあここらへんはぼくの意見なので日本語で勉強する派を否定するつもりはないんですけど、とりあえず英語で勉強できるとこんな感じのメリットがあるよーってお話です。




PDFを読む媒体






ぼくは図書館とかカフェで腰を据えて勉強するときはPDFはMacbookで読んでます。




iPadは持ってるんですけど、今は家で論文読んだり映画見たりするくらいにしか使ってないですね。




ぼく基本的に勉強するのは外でって決めてて、なので外にパソコンとノートとかファイル、本、筆記用具を持ってくとそれでバッグの重量はいい感じになって、iPadをそこに入れると微妙に重いんですよね....




あとiPadでやりたいことってMacbookでできるので、あとカフェの机とかだとあんまり広く使えなかったりするので、そんなこんなで勉強はMacbookだけで完結してます。




今まで勉強






前に質問箱で1回生からの勉強したことリストみたいなのあったら教えてくださいってのが来たんですよね。




ねえよ!!!そんなの作ってるわけないだろ!!!!




まあ本来はこの手の質問はだいたい無視するんですけど、この質問が通算10回くらい来てて、多分これここでまとめておかないと無限にこの手のやつ来るんだろうなって.....




ということで時系列ごとにざざっとまとめます。




入学前(京大の合格発表から入学まで)






まず1回生のときのやつから書いていこうかと思ったんですけど、今思えば自分がCSにドップリ浸かってるのは入学前に原点があるなぁと思ったので、まず入学前から。




2016年3月10日にドキドキの合格発表が終わって(合格を確信してたのでそこまでドキドキしてなかったが)、諸々の入学準備を終わって京都に移住するまで結構暇だったんですよね。




ぼく自身あんまり中高で友達が多くなかったので大学受かってからわざわざ遊ぶ友達とかそこまでいなくて、なので合格祝いにもらった20万円を使ってMacbook Airを買ってプログラミングの勉強を始めました。




参考にしたサイトは以下のサイトで、この頃にUnixコマンドとかひと通り覚え、C言語で色々やってました。




webkaru.net




まあただ最初はよくわかってなかったのでC言語を触ってたと言ってもポインタとか理解してなかったし、アドレス演算子とかなにそれ状態でしたね....




そんな感じだったんですけど、とりあえず一応プログラミングとはどんな感じのことをするのかというのはこの時点である程度把握してました。




ちなみにこの最初のプログラミング学習なんですけど、当時は周りに詳しい人もいなかったのでわからないことはググりながら全部一人で解決してて、なので今の授業嫌いで全部独学するスタイルの原点がここにあると思います。




プログラミングについてはこんな感じですが、実はこれと並行して線形代数の勉強も進めてて、なんか工学部の学生向けみたいな線形代数の本を買って、入学前の時点でジョルダン標準形くらいまでわかってました。




あとこれと並行して高木貞治の解析概論もやってて(もちろん工学部向けのやつ)、フーリエ変換とかは理解してたつもりです。




なので京大に入る前から院試の基礎数学くらいは解けるようになってたのかな?




とりあえずこんな感じです。




あ、高木貞治の解析概論は名著なのでオススメです。




主に微積を扱ったもので、厚いですけど結構読みやすいと思います。









学部1回生前期

新歓とかあったりして大学生活ウェーイってやってたので全く勉強しませんでした。




学部1回生後期






ちょっと生物科学やってたけど、まあ近似的にゼロです。




学期中は色々迷走してたんですけど、春休みにゼロから作るディープラーニングをやり、そこでPythonを学びました。




このゼロから作るディープラーニングがぼくの機械学習ライフの始まりを告げる書だったのです....









学部2回生前期






ゼロから作るディープラーニングを読んだぼくはちょっとAIわかるぜみたいな顔してたわけですね。




ちょうどそのタイミングで京大のバイト紹介サイトで日立製作所の研究員募集があったので、応募してみたところ合格し、そこから機械学習の論文調査をすることになります。(なんか雇用契約上は特任研究員みたいな感じのノリだったと思う)




どうも後から聞くところによるとぼくはポテンシャル採用だったらしく、現時点では実力不足だけどそのうち伸びるでしょうっていう日本企業らしい感じで日立の中に入りました。




で、割り当てられたのが強化学習で、まずそこから強化学習の勉強から始まって、無限に機械学習の書籍を渡されてそれらを読んで勉強した内容を上司に解説するとお賃金をもらってました。




今考えればとんでもないな....




ちなみに読んだ本は以下の三冊。









ちなみにこの中だとぼくの一番のオススメは森北出版の『これからの強化学習』です。




割と数学的に内容がしっかりしてて、かつある程度進んだ内容も書いてあって良かったですね。




2回生後期






先述の通り日立では勉強してコードを書いてって感じの日々を送ってたのですが、ある程度時間が経って知識も整理されてきたので本格的に論文読みをすることになりました。




まあ論文読んで実装してパワポにまとめて発表してっていうサイクルだったんですけど、それでお金がもらえてたので授業はほとんどサボってましたね。




ぼくが日立にいた頃の上司がめちゃくちゃギークな人で、もうぼくはその人から影響受けまくってCSの勉強をめちゃくちゃガチるようになりました。




それでそのときに日立のラボにいないときに色々読み進めてました。




読んでたのが以下の通り。









もうね、魔物狩りみたいな感じですね。




なんか勧められたものを淡々と読み進めてました。




まあ機械学習とかCS関係に関してはそんなこんななのですが、12月に交換留学に行けることが決定したのでフランス語の勉強が始まりました。




フランス語の勉強に関してはスルーします。(ぼく自身結局のところそんなにフランス語が上手じゃないので)




語学に関連して、英語は毎日TED見たりAmazon Prime Videoで洋画を字幕で見たりしてました。




多分それらが起因して英語の耳はある程度鍛えられてたんだと思う(?)




3回生前期






留学準備が本格化した段階ですね。




この頃に読んでたのは以下の書籍。









この3冊は全部名著なので無限に推してます。推しメンです。




コンピュータシステムの(ryはハードウェアからOS構築までを一冊にすっきりまとめて解説した本で、コンピュータというものがいかに面白いものかを伝えてくれます。マジで名著です。




策謀本はセキュリティの観点から色々ガチャガチャやるのですが、C言語を使ったバッファオーバーフローなどを再現したりとメモリへの理解が無限に深まります。




ネットワークセキュリティとか暗号論とか色々網羅してるし、サイバーセキュリティとはどんなものか理解できるのでとにかく楽しいです。超オススメ。




アルゴリズム本はソートアルゴリズムとか色々載ってて、しかも実装まで丁寧に解説してあるからオススメです。




最初のコンピュ(ryは初学者でもガンガン読み進めれらるけど、あとの2冊はちょっと初学者だとしんどいかも...?




まあ魔物狩りの気持ちで、とりあえずチャレンジするのが大切です。




3回生後期






この頃はスイスにいます。




だいたいここら辺からブログで書評やり始めたりしたんで、多分探せば書評ネタがボロボロ出てくると思われ。




読んだ書籍は以下の通り。





タネンバームのコンピュータネットワーク
Computer Vision: Algorithms and Applications
GoodfellowのDeep Learning
Introduction to Algorithms
K&R
カステラ本
Linux Kernel Development
Low Level Programming
パタヘネ
Practical Common Lisp
Practical Malware Analysis
PRML
Reverse Engineering for beginners
ドワンゴのScala解説資料
Security Engineering
SICP
ALife





うーん、めっちゃ勉強したなぁ....自分でも感心だ.....




まあこんな感じ。




ちなみに帰国してからLand of LispとかOn Lisp、情報幾何学の基礎を読みました。









まとめ






今回は度重なる質問箱での勉強の質問を一括で処理するためにこんな感じのエントリーを書きました。




こうやって振り返ってみるとそれなりに勉強してきたなぁって感じがしますね....




これ以外にも結構勉強したことはあるんですけど、まあCSとかに関連するとこんな感じです(ホントは数理生物学とか神経科学、統計力学、電磁気とか色々やってたりする)




まあとりあえず今後も勉強がんばりましょ〜




ではでは、お疲れ様でした!

情報幾何学の基礎の書評

今回は書評エントリーです。




今回読んだのは『情報幾何学の基礎』というやつですね。









読んだきっかけ






最初にこれをやるきっかけはというと....ぶっちゃけあんまり覚えてないんですよね(笑)




おぼろげな記憶を辿ると、約1年半くらい前に京大理学部の友達からツイッター経由で情報幾何学とかいう分野があるらしいぞと教えてもらったはずなんです。




で、それで自主ゼミで一緒に読んでいこうって感じになったんですけど、結局みんな予定が合わなかったりぼくが留学準備とかあったりで自主ゼミは空中分解したわけです(笑)




まあそんなこんなで今回ぼくが帰国するまで実家の自室で埃をかぶってました。




それで今回スイスから帰国してちょっと暇してたんで少しずつ読み進めてたんですけど、それがようやく読み終わったという背景です。




感想






まず最初に、ぼく自身は一応理学部という所属ではありますが、中身は完全に工学の人なので工学的な視点での感想を述べさせていただきます。(理学的な数学は1回生の頃の集合と位相の授業で心が折れてしまいまして....)




それで感想はというと




統計的パラメータ推定など応用例が豊富な、めちゃくちゃわかりやすい微分幾何の教科書




というところかな、と。




てかまずそもそもで微分幾何ってなんぞそれって人のために簡単な説明をしておくと、例えば地球の地図を作るとして、何枚かの地図をペタペタ貼り合わせて地球全体の地図を作るわけじゃないですか。




このペタペタ貼り合わせる部分的な地図を微分幾何の言葉では局所座標系と言い、好きなところで局所座標系を組めるような図形を多様体と言います。




で、多様体上では色んな局所座標系の取り方ができるわけなんです。(球はxyzの座標でも取れるし極座標でも取れますよね)




微分幾何学という分野ではベクトル空間などを考えながらこういう局所座標系の変換(接続という)や、ベクトル場の内積(計量という)をイジイジします。




で。こうした計量や接続から平行とか平行移動ってなんなのかということが言えたりするわけです。




平行とか平行って言葉はなんか幾何学っぽいですよね(?)




まあそんな感じなのが微分幾何学なんですけど、結局のところ情報幾何学ってなんなのかというと、こうした多様体上の接続や計量によってダイバージェンスという量を定義することが一つのゴールのようです。




で、この情報幾何学によってどんな帰結が得られるかというと、確率分布空間における期待値などを幾何学的な言葉で説明できたり、または統計学におけるパラメータ推定や仮説検定を多様体とかを使って説明しちゃえるんです。




まあ情報幾何学というのは厳密には双対アファイン接続の微分幾何学を指すらしいのですが、どうやら今はこうした確率論や統計学、または統計力学量子力学への応用も含めて情報幾何学と呼んだりするらしいですね。




ぼくは統計学はある程度勉強していたのでKLダイバージェンスとかは理解していたのですが、それが幾何学的な事柄と結びついているというのを知ってメチャクチャ感動しました(笑)




あと、個人的に今回一番学びがあったと思えるのはフィッシャー情報行列の幾何的な意味を確認できたという点ですかね?




機械学習やってるとたまに登場するフィッシャー情報行列なんですけど、毎回よくわかってなくて、定義とか導出のフローを確認していてもあんまりしっくりきてなくて....




でも今回情報幾何学をやったおかげでちゃんとフィッシャー情報行列がどういう文脈でどう意味を持つのかというのをしっかりできて、個人的にメチャクチャ満足してます。




まあ情報幾何学とはそんな感じです(笑)




さて、内容はここらへんにしておいて、本書の構成と語り口について。




ぼく自身全く幾何学をやったことはなかったのですが、非常にわかりやすく説明してあってかなり読み進めやすいと思いました。




実際、本書は工学系の学生や微分幾何を習ったことのない1, 2回生を対象に微分幾何とはどんな感じで、どんな応用ができるのかというのを念頭に書かれたようです。




構成として、3章までは微分幾何学の説明をして4章では狭義の情報幾何学を解説、5章では確率分布空間の幾何構造を調べ、6章以降では各分野への応用例を見ていきます。




最初の0章では写像や双対空間、テンソルとはなんぞやといったことから始まり、1章ではユークリッド空間での座標系や微分を論じます。




2章では1章の内容を拡張して多様体上でのベクトル場やテンソル場を解説していきます。




そして3章では、多様体上のベクトル場を公理的に定義することで曲率や捩率を定義しながら多様体上での平行や平坦とはどういうことかを解説します。




4章では狭義の情報幾何学として、リーマン多様体での双対アファイン接続を調べ、5章ではそれがマルコフ埋め込みにおいてどのように関連づけられるかを見ます。




6章では統計力学への応用、7章では統計的推論への応用、8章では量子力学への応用を解説していきます。




このように、機械学習をやってる人からすれば本書は分野としてはかなりクリーンヒットな気がしますね。




ページ数も200前後とそこまで厚くないし、めちゃくちゃ読みやすかったので機械学習をひと通り学んだような人は読むべきだと思います。




確率分布とかへの景色がかなり良くなるのでオススメです。




まとめ






今回は『情報学の基礎』を紹介しました。




ぼく自身あまり数学は得意ではないのですが、やはり機械学習をやっていく身としては数学はやらざるを得ないですね....




実際、今まで幾何学は全くの未修だったのですが今回これで勉強したことで一応"お気持ち"は理解できたと思います。




この本やってよかったなぁって感じですね。




ということもみなさんも情報幾何学を学んで一歩ステップアップしてみてはいかがでしょう?




それではお疲れ様でした!