自然言語処理 画像キャプションのデータセット Cornell NLVR

Hacker Newsで取り上げられていた自然言語処理のデータセット Cornell NLVRの紹介です。

公式ページ:http://lic.nlp.cornell.edu/nlvr/

データセット:https://github.com/clic-lab/nlvr

論文:http://alanesuhr.com/suhr2017.pdf

これは、色の付いた図形が複数描かれた画像とキャプションのセットが与えられて、そのキャプションが正しく図を説明しているかを true/ falseで判定するタスクのためのデータセットです。データ数は92,244個でクラウドソーシングでデータを集めたそうです。

例えば、以下の画像のキャプションとして「There is exactly one black triangle not touching any edge」(他のエッジに触れていない黒い三角形がただ一つある)が与えられており、この正解ラベルは「true」となっています。

他にも、例えば次の画像のキャプションとして「There is a box with multiple items and only one item has a different color」(複数アイテムとともに一つ箱があり、ただ一つのアイテムが異なった色を持つ)が与えられ、この正解ラベルは「false」といったようになっています。

 

現在の、トップのテスト精度は公開データに対して約67%程度であり、ランダムに答えた場合よりも少し良いといった程度でしょうか。まだまだ、発展させる余地があるテストデータのようです。

Rustで書かれたNeural Network実装:Jaggernaut

Rust言語で書かれたJaggernautというNeural Networkの実装を見つけた。WebAssemblyに変換されて、ブラウザ上で動作させることが出来る。

Juggernaut: Neural Networks in a web browser

デモページでは3種類のデータセットに対して、学習率とエポック数を設定して、データが分類されていく過程が見れる。デモの実装にはReactとD3.jsを使っているが、Neural Networkの学習部分にはJavaScriptは一切使っておらずRustのみで書かれているとのこと。

まだ機能的にはフィードフォワードネットワークのみ対応しているようだが、数種類の活性化関数やコスト関数を用意しているとのこと。

こういったアプリケーションが増えて、将来的にRustは果たしてC/C++を置き換える言語に成りえるのか見守っていきたい。

「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カーブなどについて。この辺は適宜必要な時に見返せば良さそう。

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

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

4章は多変数ガウシアンモデルについて。この章は数学的に他の章よりも難しいと、一番初めに書かれており確かにその通りで難しい。流し読みな感じだけど大丈夫だろうか。

分かりやすい解説スライドを見つけたのでこれで復習しよう。

 

目次は以下の通り。(*がついているところは数学的に難易度が高いところ)

  • 4 Gaussian models
    • 4.1 Introduction
      • 4.1.1 Notation
      • 4.1.2 Basics
      • 4.1.3 MLE for an MVN
      • 4.1.4 Maximum entropy derivation of the Gaussian *
    • 4.2 Gaussian discriminant analysis
      • 4.2.1 Quadratic discriminant analysis (QDA)
      • 4.2.2 Linear discriminant analysis (LDA)
      • 4.2.3 Two-class LDA
      • 4.2.4 MLE for discriminant analysis
      • 4.2.5 Strategies for preventing overfitting
      • 4.2.6 Regularized LDA *
      • 4.2.7 Diagonal LDA
      • 4.2.8 Nearest shrunken centroids classifier *
    • 4.3 Inference in jointly Gaussian distributions
      • 4.3.1 Statement of the result
      • 4.3.2 Examples
      • 4.3.3 Information form
      • 4.3.4 Proof of the result *
    • 4.4 Linear Gaussian systems
      • 4.4.1 Statement of the result
      • 4.4.2 Examples
      • 4.4.3 Proof of the result *
    • 4.5 Digression: The Wishart distribution *
      • 4.5.1 Inverse Wishart distribution
      • 4.5.2 Visualizing the Wishart distribution *
    • 4.6 Inferring the parameters of an MVN
      • 4.6.1 Posterior distribution of μ
      • 4.6.2 Posterior distribution of Σ *
      • 4.6.3 Posterior distribution of μ and Σ *
      • 4.6.4 Sensor fusion with unknown precisions *

Linear Discriminant Analysisがどういうものか何となくわかった気がする。もうちょっと復習が必要だが、とりあえず先に進んでみる。先ほどのスライドにもあったが、ガウス分布はシンプルでありながら現実に即した分布であるので、解釈がしやすい分布であり、線形代数で計算がすむということで広く使われている。

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

前回の続き。「Machine Learning – A Probabilistic Perspective」第3章を読みました。

第三章の目次は以下の通り。この章は、離散データをもとにナイーブベイズなどの手法でモデルを生成しようという話です。段々と数学的に難易度が上がってきた。

  • Generative models for discrete data
    • Introduction
    • Bayesian concept learning 65
      • Likelihood
      • Prior
      • Posterior
      • Posterior predictive distribution
      • A more complex prior
    • The beta-binomial model
      • Likelihood
      • Prior
      • Posterior
      • Posterior predictive distribution
    • The Dirichlet-multinomial model
      • Likelihood
      • Prior
      • Posterior
      • Posterior predictive
    • Naive Bayes classifiers
      • Model fitting
      • Using the model for prediction
      • The log-sum-exp trick
      • Feature selection using mutual information
      • Classifying documents using bag of words

この章で例として出てくるのは、いくつかの数字を観測したうえで、どのモデルから数字が生成されているかを推定するというもの。例えばD={16,8,2,64}を観測したうえでは、2の累乗というモデルの確率が一番高くなります。

その他にも、いくつかのデータが追加された場合に事後確率を更新することができる、ということが書かれています。これによりベイズ推定がオンライン学習に適しているということが言えるそうです(詳しくは8章)

ナイーブベイズについてもこの章の後半で述べられています。ナイーブという言葉の意味はフィーチャーが独立であることを仮定しないから付けられたとのことです。もしこの仮定が成り立たなくても、モデル自体がシンプルなためオーバーフィットしづらく、結果的に良い性能が出ることが多いそうです。

最後にはドキュメントの単語から、内容を分類するタスクが述べられています。Dirichlet Compound Multinominalという分布を使うと、一度観測されたデータはより観測されやすいとモデル化できるそうです。単語のようなスパースなデータを扱う際に、一度登場した単語は同じ文章中に再び登場しやすい、という直感的な感覚に合っているモデルです。

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

前回の続き。

2章は確率論の復習です。一通り、確率は習っているのでスムーズに進めました。確率分布の性質などの部分は後から出てきたときに見返せば良いかなという感じです。

最後に情報理論の節があります。データの分布の相関を測るために使われるのかな。

2章の目次は以下の通り

  • Probability
    • Introduction
    • A breif review of probability theory
      • Discrete random variables
      • Fundamental rules
      • Bayes’ rule
      • Independence and conditional independence
      • Continuous random variables
      • Quantiles
      • Mean and vairance
    • Some common discrete distributions
      • The binomial and Bernoulli distributions
      • The multinomial and multinoulli distributions
      • The Poisson distribution
      • The empirical distribution
    •  Some common continuous distributions
      • Gaussian (normal) distribution
      • Degenerate pdf
      • The Laplace distribution
      • The gamma distribution
      • The beta distribution
      • Pareto distribution
    • Joint probability distributions
      • Covariance and correlation
      • Multivariate Student’s t-distribution
      • Dirichlet distribution
    • Transformations of random variables
      • Linear transformations
      • General transformations
      • Central limit theorem
    • Monte Carlo approximation
      • Example: change of variables, the MC way
      • Example: estimating π by Monte Carlo integration
      • Accuracy of Monte Carlo approximation
    • Information theory
      • Entropy
      • KL divergence
      • Mutual information

以下は、メモしておきたいことを列挙。

Bayesianなアプローチをとってモデルを構築することのメリットは、長期間の頻度が手に入らないイベントを予測するモデルを構築出来ることである。

二項係数nCkは”n choose k”と発音する。

ガウス分布は外れ値(outlier)の影響を受けやすいので、そういう場合は The Stuent’s t distribution を使うとよい。

2つの確率密度分布のdissimilarityを測る尺度として、KL divergenceがある。

低い相関係数であっても、高いMIC(maximal information coefficient)があれば、非線形な関係がある。

 

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