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

段々と機械学習の概要や基本的な数学が身についてきたと思うので、巷の評価が高い「Machine Learning – A Probabilistic Perspective」を読み始めることにした。

1000ページを超える大著であるため、挫折しないように章ごとにまとめを書いていきたいと思う。

第一章の目次はこんな感じ

  • Machine learning: what and why?
    • Types of machine learning
  • Supervised learning
    • Classification
    • Regression
  • Unsupervised learning
    • Discovering clusters
    • Discovering latent factors
    • Discovering graph structure
    • Matrix completion
  • Some basic concepts in machine learning
    • Parametric vs non-parametric models
    • A simple non-parametric classifier: K-nearest neighbors
    • The curse of dimensionality
    • Parametric models for classification and regression
    • Linear regression
    • Logistic regression
    • Overfitting
    • Model selection
    • No free lunch theorem

目次を見て分かる通り、第一章は機械学習の分類と概要について。

本のタイトルにProbabilistic Perspectiveとある通り、線形回帰の部分からしっかりと確率的になぜ回帰曲線が選ばれるかということが書かれている。

知らなかった言葉としては、latent factorがある。これは高次元のデータのなかに潜在する多くの変数を説明するfactorのこと。

parametric, non-parametricという用語も何となく聞いたことがあるレベルだったが、モデルが固定長のパラメータを持つ場合はparametric、そうでなければnon-parametricということらしい。

線形代数の復習に「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などの記事を読むことになるかと思います。