電通生のにこにこ調布日記

自然言語処理を学ぶ大学生のブログ

最近読んだCNN系論文ざっくりまとめ [ 自然言語編 ]

前回の投稿では画像認識においてCNN(Convolutional Neural Network)に関して読んだ論文についてまとめました。
今回は、自分が専門として研究室でやっていこうと思っている自然言語処理においてCNNを応用した研究に関する論文で自分が読んだものの中から何本かを簡単にまとめようと思います。
自然言語処理の勉強をしようとしていて、どんな論文を読んでみようか迷っている方のお役に立ったとしたら幸いです。 初学者につき間違い等ありましたら、コメントなどでご教授いただければ幸いです。


  1. Multi-Perspective Sentence Similarity Modeling with Convolutional Neural Networks(link)
    この論文は、Toyota Technological Institute at Chicagoっていうそんなのあったんだ、っていう感じの場所の人が出している論文ですね。 タスクとしては二つの文章を入力としてそれらをモデリングした結果を利用して言い換え表現や、二文章間の類似度を学習しています。本論文でも行われている、NLPにおいてCNNを適応させる際に、畳み込み層を複数用意しkernelサイズをそれぞれ変えて元文章中の異なる粒度の情報を抽出することは多く行われているのですが、この論文ではpooing層の種類も複数(max, min, mean pooling)組み合わせておりそれぞれに対して実験結果を比較している点が興味深いです。CNNのkernelサイズがn-gramを表現しているという主張はなんとなく同意できそうな気もするのですが、poolingの種類を組み合わせることに関しては自然言語処理的にどんな結果を期待できるのかは理解しがたい印象を受けました。

  2. Tweet2Vec: Learning Tweet Embeddings Using Character-level CNN-LSTM Encoder-Decoder(link)
    これは論文のタイトルを見た瞬間に印刷して読み始めました。タイトルではtwitterを強調していますが、その背景としては近年増加してきている短い文章をうまくモデリングできるようにすることがモチベーションとしてあるようでした。
    実際のモデルは、encoder-decoderをベースとしていて特徴の抽出の際にmax-poolingとCNNを複数層重ねており、その特徴を利用して二層のLSTMでtweetをdecodeしています。CNNを使用した特徴量の抽出の手法は割と一般的なものですが、短い文章の特徴を学習するのにencoder-decoderモデルを使用するというのは自分でもいろいろ試してみる価値があるなと感じました。

  3. Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts(link)
    これもまた短い文章を対象にしているモデルを提案している論文ですね。目的としては極性分析を行っており、モデルの特徴としては短い文章は保持している情報量の少ないので一つの文章を文字レベル、単語レベルの二つの方法で埋め込んでからそれらを入力としてCNNを用いたモデルで学習をしています。
    論文内では、単語レベルの埋め込みがsyntactic, semantic informationを捉えているのに対し、文字レベルの方はmorphological, shape informationを捉えていることを期待しているとありました。ここで若干、単語レベル、文字レベルの埋め込みベクトルは異なる空間?に存在していそうなのに、それらをただ連結したものを入力としていたので本当にそれでちゃんと情報が保持されているの中は気になったところです。(タスクにおける精度はちゃんと出ていた。)

  4. Convolutional Neural Network Architectures for Matching Natural Language Sentences(link)
    本論文は二つの文章間の関係性のモデリングを目標としており、畳み込み層とpooling層を使用して文章の階層的な特徴を抽出しながら、文章間のパターンマッチングも複数レイヤーで行おうというものです。
    モデルはarc-1, arc-2と二つ提案されており、arc-1が二文章の特徴を独立に抽出してから全結合層を使用してマッチングを取っているのに対して、arc-2では最初に同じ畳み込み層を通す頃で、二つの文章をまとめ上げた後に特徴をCNNを使用して抽出し学習をしている。二つの文章のマッチングを学習するという意味ではarc-2で行われているものの方が直感的であり、実際に実験結果でも精度がarc-1に比べて高くなっている。

  5. Multichannel Variable-Size Convolution for Sentence Classification(link)
    この論文はタイトルに"Multichannel"と入っていたので、自分が最近興味を持っていることに近い内容かと思って読んでみたものです。
    内容としては一般的には埋め込み層は一つのみ用意し、word2vec等で事前学習された行列を初期値として使用することが多いが、本論文は複数手法で学習された分散表現を初期値として持つ埋め込み層をそれぞれ用意し、それらで生成された分散表現を一つの文章に対して複数チャンネルという形でネットワークへの入力とするものです。実際に使用された分散表現の初期値としては、HLBL, Huang, Glove, SENNA, Word2Vecの五つで学習されたものが使用されていました。
    結果として、自分が興味が持っていた手法とは異なる意味での"Multichannel"でしたが、NNでの学習の強みでもある気がしていた、複数の情報を同じオペレーションで扱うことができるということを再確認した論文でした。

  6. Convolutional Neural Networks for Sentence Classification(link)
    これはCNNがNLPに使用され始めた頃の論文らしく、引用数が非常に多く有名なものらしいです。
    モデル自体はCNNを使用した基本的なものなのですが、実験内容として二つの埋め込み層を用意して両方ともword2vecで事前学習された分散表現を初期値として保持しておくのですが、片方は学習の対象として更新され、もう片方あはword2vecの初期値のまま学習しないということをしており、その結果が非常に興味深いものになっています。詳しくは論文の最後の方を見ていただきたいのですが、word2vecの特徴の一つに、good/badやlove/hateが似たようなベクトルになるというものがあるのですが、SST-2という極性分類タスクを学習した後の埋め込み層から取り出した分散表現を見てみると、goodにはポジティブな属性、badにはネガティブな属性がちゃんと学習されているということが報告されています。


論文メモの方は以上になります。紹介したものを含め、CNNの自然言語への応用に関する論文をいろいろ読んでみてざっくりと感じたのは画像認識等Computer Visionで十二分に証明されていたCNNの特徴を抽出する能力は非常に優れているというものはNLPに関しても言えるのだなということでした。文章分類をはじめとしてデータ数が十分にあるようなタスクでは大きな成功を収めていることからもそれは伺えます。(pythonを使用した実装もいくつかしているので、それもいつかここにメモできたらなと思っています。)
これはデータと計算資源があればCNNをとりあえず試すべきということではあるのですが、大学四年生としてはそこでの筋肉勝負ではなく自然言語の特徴をうまく発見・利用できるモデルを考えたいなと思ってはいるのですが、具体的には何も案が出ていない状態です。
だんだん暑くなってきたので体調に気をつけつつ、引き続き勉強していこと思います。

最近読んだCNN系論文ざっくりまとめ [ 画像編 ]

自分の研究室は自然言語処理を扱っている研究室で、自分自身も自然言語を扱った研究をしたいと考えているのですが、 「CNNの気持ちを理解できるかな?」と思いComputer Visionで有名そうな論文を何本か読んでみたので、 日記をつける程度の感覚でものすごく簡単にまとめてみようと思います。どんな論文を読んでみようか迷っている方のお役に立ったとしたら幸いです。 初学者につき間違い等ありましたら、コメントなどでご教授いただければ幸いです。


  1. ImageNet Classification with Deep Convolutional Neural Networks (link)
    おそらくこれはDeepLeaningが盛り上がり始めた頃の論文ですね。 これを読んでみた理由としては、学習に使用するデータの正規化等の方法が他の論文から多く引用されているのを発見したからです。 Local Response NormalizationやData Augmentationについてちゃんと書いてあるので、画像初心者の自分に知っておいたほうがいい情報がたくさんありました。ネットワークの構造等に関しては少し古いものなので割愛しようと思います。

  2. Very Deep Convolutional Networks for Large-Scale Image Recognition(link)
    VGGと呼ばれているネットワークを提案している論文です。次に紹介するResNetが登場するまではある画像認識コンペで最高精度を出していたネットワークで、19 weight layersまで層を深くしても学習が進んでいることを提唱しています。 これを読んだ際に興味深いなと感じたのは同構造のネットワークのハイパーパラメータや、層の深さが異なるモデルを使用してアンサンブル学習をするという実験がされているのですが、 複数の組み合わせを試した結果、それぞれに割と大きな精度の差が出てきており細かい違いしか持たないモデルであっても、その組み合わせがうまくはまると精度が大きく上がることがわかります。 Kaggle等のコンペでよく用いられる手法ですね。

  3. Deep Residual Learning for Image Recognition (link)
    これは言わずと知れたResNetです。 このResidual構造が提案されるまでのCNNを使用したネットワークでは、層をある程度まで深くしていくと精度がむしろ悪化してしまうという問題があったみたいなのですが、Residual (残差)関数を学習することによりその問題を解決したみたいです。

  4. Identity Mappings in Deep Residual Networks (link)
    さっきのResNetの論文で紹介された構造にいろいろ手を加えてみて検証をしてみようという論文です。 Residual機構では、Convolutional layer等での計算を飛ばすshortcut connectionがメインに存在しているのですが、 それらのshortcut connectionをデータが通過する際にいろいろな方法で加工したりしています。 現時点でResidual Networkというと、3番で紹介したshortcut connectionの手法ではなく、この論文で提案されている方を指すことが一般的なようにいろんな方の実装等を見ていると感じたりすることもあります。

  5. Network in Network (link)
    この論文はタイトルからはかなり謎感が出ているのですが実際にやられていることは、これまで一般的にCNNで画像の特徴量を抽出してきたけど、それをMLP (Multi Layer Perceptron) で置き換えてみようという内容です。 おそらく全体の大きなネットワークの中に、小さなMLPが入っていることを表現している「Network in Network」なのですね。

  6. Going deeper with convolutions(link)
    Google発のInceptionというネットワークを提案している論文です。 全然内容とは関係ないのですが、著者が全部で9人名前が載っていてその配置がなんかかっこいいな、と初見でまず感じました。 この論文を読んだ理由の一つに、画像系のネットワーク中にCNNのkernel sizeが 1 * 1 のものがたまに使用されているのですが、そのオペレーションが何のために選択されているのかを知りたくて、というものがありました。 読んでみた結果として 論文内に以下のような記述があったのと、

    1 * 1 conv have dual purpose. most critically, they are used mainly as dimension reduction modules to remove computational bottlenecks, that would otherwise limit the size of our networks. this allows for not just increasing the depth, but also the width of our networks without significant performance penalty.

What does 1x1 convolution mean in a neural network?を読んでみた感じからざっくりと 「計算資源節約のためにCNNのkernel数を減らしている」というのが、主な理由であるように考えました。 これに関して追加事項等ご存知の方おられましたら是非教えていただきたいです。

内容があまりないような気もしますが、論文紹介は以上になります。 初めてComputer Vision系の論文を読んでみて感じたのはやはり局所的な特徴を抽出するのにCNNはかなり適しており、ResNetの登場で層を深くできない問題もある程度解決されていて、想像していたよりもかなりいろいろな手法が試されてきた分野なんだなーということでした。 ただ精度が出ているとはいっても、ResNetの「残差を学習したらうまくいったよ!」というのは、入力時の情報を下層まで伝えることができているからなのかな?とは思いつつもしっかりと腹落ちはしていないので、実際に自分で実装したものを動かしてみるとこまでやってみたいなと感じています。