「Machine Learning – A Probabilistic Perspective」第5章を読んだ

前回(「Machine Learning – A Probabilistic Perspective」第4章を読んだ)の続き。

第5章はベイジアン統計について。基本的に著者はベイジアンの立場を取っているようで、本書はここまでベイズ統計の立場から機械学習モデルの解説をしている。次の章は、頻度統計の立場の話だが、そこではなぜ頻度統計ではなくベイジアンの見方を取るべきなのかということが語られている。

分かりやすい解説スライドへのリンクを張っておきます。

目次は以下の通り。

  • 5 Bayesian statistics
    • 5.1 Introduction
    • 5.2 Summarizing posterior distributions
      • 5.2.1 MAP estimation
      • 5.2.2 Credible intervals
      • 5.2.3 Inference for a difference in proportions
    • 5.3 Bayesian model selection
      • 5.3.1 Bayesian Occam’s razor
      • 5.3.2 Computing the marginal likelihood (evidence)
      • 5.3.3 Bayes factors
      • 5.3.4 Jeffreys-Lindley paradox *
    • 5.4 Priors
      • 5.4.1 Uninformative priors
      • 5.4.2 Jeffreys priors *
      • 5.4.3 Robust priors
      • 5.4.4 Mixtures of conjugate priors
    • 5.5 Hierarchical Bayes
      • 5.5.1 Example: modeling related cancer rates
    • 5.6 Empirical Bayes
      • 5.6.1 Example: beta-binomial model
      • 5.6.2 Example: Gaussian-Gaussian model
    • 5.7 Bayesian decision theory
      • 5.7.1 Bayes estimators for common loss functions
      • 5.7.2 The false positive vs false negative tradeoff
      • 5.7.3 Other topics *

最初の方はベイズ統計を使って、どのようにモデルを決めていくかといった内容。MAP推定など。

5.6に経験ベイズの話があり、少し理解しきれていない箇所があるので調べた。以下のページが詳しい。

経験ベイズ

つまりは、事前確率が良く分かっていない状況で、データをもとにして事前確率分布を求めるということだろうか。

最後の方はFalse positiveとFalse negativeについてや、ROCカーブなどについて。この辺は適宜必要な時に見返せば良さそう。

線形代数の復習に「Linear Algebra and its Applications」を読んだ

機械学習とは切り離すことのできない、重要な数学分野である線形代数。はるか昔に習った線形代数を思い出すために「Linear Algebra and its Applications」という教科書を読みました。この本はAx=Bという式について一環して書かれており、評判も良いので選びました。

線形代数自体は昔に習っていたので、問題無いかと思っていましたが、SVD(特異値分解)が線形回帰の文脈で出て来て、「はて、SVDってなんだっけ?」と思い復習することに決めました。また、すでに日本語で知っている用語を英語でなんて言うのかという勉強も兼ねています。

本当に初歩の行列の掛け算から始まり、逆行列、固有値、SVD、線形回帰、PCA、などなど機械学習の初歩的な部分までをカバーしていきます。演習問題も豊富なので独習に向いているかと思います。

例えば、以下のサイトにて言及もあります。

一人で読めて大抵のことは載っている教科書(洋書編):数学からラテン語まで(追記あり)

基本的に日本語で勉強できる内容ではありますが、将来的に英語を使って研究開発を行いたいと考えているのであれば、英語で学んでおくことはとても有意義であると思います。

私の場合は、日本語なら答えられるのに、英語でどう言うんっだっけ?という部分が多かったので初めから英語で学べるのであればこういった本で勉強を始めていくのが良いかと思います。

Kerasによるニューラルネットワーク本「Deep Learning with Keras」を読んだ

Deep Learningの基本的な仕組みなどについては大体把握してきたと思うので、実際に動くコードを書くにはどうすればよいのかということを学ぶために、Kerasによるニューラルネットワーク本、「Deep Learning with Keras」を読みました。

Kerasはご存知の通り、TensorflowやTheanoなどのDeep Learning基盤を使いやすくするためのフレームワークです。実際にKerasを使ってみると、難しそうなイメージがあるDeep Learningは積み木のように構築出来て、結構簡単じゃないかという自信を得られるので、一般的なユーザーには生のTensorflowを使うよりもお勧めです。

この本の内容は、Kerasのインストール、基本的なフィードフォワードNNから始まり、CNN、RNN、WordEmbedding、GAN、転移学習、強化学習、などと幅広くカバーされています。すべての内容にサンプルコードが付いているので、実際に動かすことができます。段々と後ろの章に進むにつれて、学習に時間がかかるコードが増えてくるので、手元の環境で動かそうとする場合にはGPUがあったほうが良いかと思います。サンプルコードはKeras2.0で書かれていますが、現在の最新版だと微妙にAPIが変わっている部分もあるようで修正が必要な個所もありましたが、調べればすぐに出てくるレベルの違いなので(少なくとも現時点では)特に大きな問題にはならないかと思います。

基本的にはサンプルはそんなに複雑な内容を扱っているわけではなく、コードを部分ごとに解説とともに説明されているので、Kerasの深い知識が無くてもサクサク読むことが出来ました。実際に自分が作りたいアプリケーションに向けて参考にするにはとても良いサンプルが揃っていると思います。

個人的にはGANについて概要レベルで仕組みを知ることが出来たのが大きな収穫でした。何となく理論は知っているんだけど、いざ実際にコードに落とすにはどうしたら良いのか?と思う方にはお勧めです。日本だとChainerがこの手のフレームワークとして人気だと聞きますが、世界的にみるとKerasの人気は強いとも聞きます。今後の開発がどのように進んでいくのかにもよりますが、こういったフレームワークは一つ手を付けておけば他のフレームワークを使う際も似た部分は多いかと思うので、応用が効くかと思います。

次はもう少し数学的な基礎を固めようかと思うので、統計の教科書やMurphy本あたりを読んでみようかと思っています。

Deep Learningによる自然言語処理の教科書「Neural Network Methods for Natural Language Processing」を読んだ

タイトルの通り、Deep Learningによる自然言語処理の教科書「Neural Network Methods for Natural Language Processing」を読みました。全体として色々と理解が深まった部分があるのでお勧めです。

まさにタイトルの通り、自然言語処理とDeep Learningに特化した本でした。そもそもニューラルネットワークとは、というようなところから始まっているのでDeep Learningの深い知識が無くても読み始めることは可能だと思います。

また、自然言語処理の部分についても適宜基本的な内容が解説されながら進んでいくので読みやすいと思います。

図が多いので、CNNやRNNなどのネットワーク構造がどのようになっているのかというのも理解しやすいです。個人的にはこの本で、モヤモヤしていたLSTMやGRUといった内容やAttention機構がどういった仕組みであるかが理解できたのが収穫でした。

最近出たばかりの本なので、いまだ発展途上であるDeep Learningによる自然言語処理という分野で数多くの論文が参照されており、新しいものだと2017年に出た論文もカバーされているところが素晴らしいと思います。

どちらかというと理論的な面が重視して解説されているので、ここからどのように実装に落とし込んでいくかは別途TensorflowやKerasなどの記事を読むことになるかと思います。

 

ソフトウェアエンジニアの方向性を指し示す一冊:The Complete Software Developer’s Career Guide

Soft Skills で有名なJohn Sonmez氏による最新作、「The Complete Software Developer’s Career Guide: How to Learn Your Next Programming Language, Ace Your Programming Interview, and Land The Coding Job Of Your Dreams」を読んだ。

現時点で、アメリカのAmazonでレビューが265個ついて、そのうち92%が星5つという高評価。

内容はSoft Skillsと被る部分も多いが、メインはキャリア形成について書かれている。

対象読者はソフトウェアエンジニアを目指す人、もしくは自分のスキルを今後どうやってどの方向に伸ばしていこうかと考える若手エンジニアに向けて書かれているように感じた。

アメリカのソフトウェア業界が主眼で書かれているので、日本では事情が異なることもあるかと思うが、今後日本でもキャリア形成の方法はアメリカ的になっていくのではないかと思うので、今読んでおくことは意味があると思う。

例えば、給与交渉の章では、「給料を上げる一番良い方法は転職することだ」と書いており、これは徐々に日本でも浸透してきているのではないかと感じている。

その他にも、Job Securityの章では、「Even in Japan, where for a long time it was generally understood that once you started working for a company, you worked for that company for life, those ways are coming to an end.」と名指しで、日本社会でも終身雇用が終わりつつあることを述べている。

また、給与交渉の部分で、自己評価を書かされる場合は常にパーフェクトスコアを付けるようにと書いてあった。理由は、「自己評価は主観的な評価しかできない。上司に修正させられるか、そのまま受け入れられるかであり、最初から低評価を付けて上司が上げてくれるのを期待するよりも期待値が高い」という、面白いが納得させられるものだった。

個人的にこの本から影響を受けたことは、自分の名前を売り込む方法とその重要性だ。

筆者はブログを書くことやカンファレンスで講演することなど、様々な部分を通じて自分をいかにして市場に売り込むかを重視している。

ブログも広範な内容を書くのではなく、とてもニッチな特定の分野に特化した内容を掘り下げて書くことを勧めている。

そして一番大事なことは書くのをやめないことだ、とも言っている。これはブログ以外の分野でも共通していることだが、小さく始めてとにかく続けること、これが大事だと様々な章で述べている。

とにかく内容が広範なので、まとめきれないが、著者が最後に述べている通り、読んだだけではなく一つずつ実践していくことがとても重要だ。

実際にこのブログ記事を書いてみたように、小さなことから少しでも始めていければと思う。

「GE 巨人の復活」を読んだ

「GE 巨人の復活」を読んだ。素晴らしい本であった。


GEがデジタルトランスフォーメーションという標語を掲げて、近年事業を行っていることは何となく聞いたことがあった。
正直に言うと、せいぜい経営層が時代の流れに合わせて流行り言葉を並べているだけだろう、と思っていた。

この本を読んで、GEは本気でシリコンバレー流の仕事を行っているのだと分かった。
例えば、全従業員30万人にたいしてリーンスタートアップの手法を学ばせたり、ソフトウェアを内製に切り替える、シリコンバレーのエンジニアをスカウトしてくる、待遇を変える、人事評価手法を変える、失敗を許すカルチャーに変える、などなどドラスティックに企業文化を変えているのが驚きであった。

やはり以下にあるようにトップの強い意志が会社をここまで変えたのであろう。

“企業を形作っているのは、そこで働く人である。そして人を動かすのは、突き詰めれば「人の熱意」しかあり得ない。トップの熱意がなければ、戦略も文化も変わることはない。”

恐らくこの本は著者からの、日本の製造業の経営層へのメッセージであるのだと思う。
日本の製造業が復活するためには、従順にシリコンバレー方式の仕事へ転換する必要があり、もはやそこで失敗するとGEのような転換を上手く果たした企業に置いて行かれることになるだろう。

シグナル&ノイズ

ビッグデータが完全にバズワードになっている昨今、大量のデータを集めるだけでなく、本当に重要な何かをデータから見つけ出すことがとても重要であると言われている。
本書はまさに、そのような大量のノイズから何かを示すシグナルを見つけ出すことを書いている。

内容は多岐にわたっており、気象予報、経済、チェス、ポーカー、地震予測、テロ予測などなど興味深い。

特に、テロ予測などは、類書でもあまり見ない分析であり、未知の未知を考慮することが重要だと筆者は解く。9.11が今までで一番ひどいテロだったと考えると、これ以上のテロが起こらないように思えてしまう。
しかし、テロの規模と発生頻度はベキ乗則に従っており、100万人規模のテロが起こる可能性は捨てきれない。

結局のところ、人間は見たいものを見てしまう傾向があるため、何かのパターンを見いだすためには過剰適応をしていないかなど常に注意深くモデルを作ることが重要である。

Science Fiction Prototyping

少し前に読んだ本。

インテルにはSFにアイデアを得て、新たな製品開発に活かす部署があるらしい。
これだけの余力と、一種の遊び的な部分がある企業に日本企業が勝つのは厳しいだろうなというのが感想。

Rubyプログラマを一段深い次元に連れ込む一冊 “Working With Unix Processes”

 
Working With Unix Processes という本を読みました。

この本はUnixのプロセスやシステムコールがどのような機能をするのかということをRubyを使ってみていくというものです。
Rubyの前提知識はほとんどいらないので、Web系プログラマが一段深いレベルに落ちるために役に立つと思います。

達人出版会から翻訳版が出るそうですが、何と3,360円(税込)!?
ここはKindle版洋書(現在933円)をオススメします。
IT技術者なら恐らく一つはKindleが使用できるデバイスを持っていると思いますし、量も少なめなので読破できて洋書を読めたという経験を得るのにうってつけだと思います。
少なくともTOEICとかの勉強の100倍は面白いですし、コードが読めれば流れも十分追えるでしょう。