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

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

2019年5月 ~ 9月までに読んだ本 おすすめtop3

目的

今年度頭にKindle paperwhiteを購入して、読書頻度が上がったので振り返りも兼ねて簡単なまとめを書きます。

背景

  • 理系学生
  • 何でも読むけど、ビジネス、哲学系がすき。
  • けど、あんまり重いものは読めない。
  • 趣味の会う友達欲しいので、傾向似ている人いたら (twitter @sobamchan) まで。

top 3は一番下。

読んだ本 (厳選) + 一行感想

ピクサー流 創造するちから――小さな可能性から、大きな価値を生み出す方法

意外とがち理系が創業していたピクサーの物語、自分をよりよい環境に置きたい学生にいい刺激になる。

物語 メキシコの歴史 太陽の国の英傑たち

タコス好きなので読んだ (タコスは出てこなかった。)。

夜は短し歩けよ乙女

今更読んだ、文体・表現が結構癖になる。読みやすい内容だけど、河川敷とかで読むとかっこいい気持ちになれる。

快楽主義の哲学

刺激強め。自分に一本芯を通したい学生に間接的に参考になる気がしている。

哲学的な何か、あと数学とか 哲学的何か、あと科学とか

ものすごく優しくフェルマーの最終定理、理系学生には物足りないかも。

完全教祖マニュアル

いろんな人を怒らせそうな内容を、面白く書いてある。教祖結構大変。

鳥類学者 無謀にも恐竜を語る

公園散歩と恐竜好きには必読書。

東京いちどは訪れたいお寺の名建築

よく知らんけどお寺行くの好きな人におすすめ。写真かっこいいし、詳しめなのでオタクも満足。

動きすぎてはいけない ジル・ドゥルーズと生成変化の哲学

タイトルに惹かれて買ったけど難しくてよくわからん。

FACTFULNESS(ファクトフルネス)10の思い込みを乗り越え、データを基に世界を正しく見る習慣

話題になっているだけあって、マジおすすめ。最後泣いた。

ダークウェブ・アンダーグラウンド 社会秩序を逸脱するネット暗部の住人たち

インターネットって基本的にアングラ起源なので、ネガティブな方向に進んでいくのは本質的にしょうがないよな。ってなる一冊。ソフトオタクにおすすめ。

日本一カンタンな「投資」と「お金」の本

わかりやすいし、変な煽りみたいなのもなくてわかりやすい。本をおすすめしたひとが、投資を始めた (自分は一文無しなので論外)。

健康の結論

結構パラノイドになるが、優先順を付けてくれているので行動を開始できる。健康意識低めの親を持つ大学生にいいかも。

メモの魔力 -The Magic of Memos-

本屋での平積みの魔力に負けて買ってしまった。

世界悪女物語

とりあえず、自分の食事に毒が混ぜられていないか心配するようになった (悪女は毒殺が得意。)。

精子戦争 性行動の謎を解く

自分が生まれてきたのは、本当にものすごい戦いの結果。色々感謝。

四畳半神話大系

はまった。個人的には乙女よりこっちが好き。

「死」とは何か イェール大学で23年連続の人気講義 日本縮約版

デリケートで重い話を、易しく、優しくまとめてある。色々考えるきっかけになるし、人に優しくなれる気がする。

top 3

これを読んだ他の人と話ししてみたいなって観点で選択しました。

  1. 「死」とは何か イェール大学で23年連続の人気講義 日本縮約版
  2. FACTFULNESS(ファクトフルネス)10の思い込みを乗り越え、データを基に世界を正しく見る習慣
  3. 快楽主義の哲学

(アフィリエイトリンクなのでここから買ってもらえたら、もっと本が買える、、、)

最近読んだ 強化学習 × 自然言語 論文ざっくりまとめ

自然言語処理の研究室に所属しているのですが、最近強化学習を使用した論文がたくさん出てきているのを見て少しづつ読んでいます。 それを簡単にまとめて公開し、アクセス数を見る事で研究の進捗が全然出ていないことによる不安を軽減しようと思います。 意見交換等する人が周りにおらず、間違った認識のまま論文を読んでいる可能性もあるのであくまで参考程度にしていただけたらと思います。 間違い等ありましたら、コメントなどでご教授いただければ幸いです。

自分用のメモを切りはりしてこの記事を書いたのですが、完成後に見直して見ると 結構わかりずらいことに気づきました。ご了承ください。


  1. Towards Deep Symbolic Reinforcement Learning(link)
    deep reinforcement learningはいろんな成果を出しているが、 deep learningからの欠点もまた継承していて、学習コストやデータ数等がある。 それに加えて、モデルの人間に対する不透明性等がある。 これらを解決するために、neural backendでsymbolic frontendな構造を提案している。 結果として、効率的に学習するし、人間に分かりやすい形のsymbolic rulesを獲得し 複数の簡単なgame環境において精度向上をした。

  2. Task-Oriented Query Reformulation with Reinforcement Learning(link)
    検索エンジンからの検索結果をより良いものにしようとしている論文。 検索エンジン自体はブラックボックスとして扱い、ユーザーからの検索クエリを検索結果の評価スコアを最大化するように変換する。 目的関数はREINFORCE Algorithmを使用し、ネットワークへの入力は、元のクエリとそれで一度検索かけた結果から得られた文字列を使用している。 それらの埋め込み表現をCNNで畳み込み、RNNでdecodeし新クエリとしている。

  3. An Actor-Critic Algorithm for Sequence Prediction(link)
    Actor-Criticを導入することにより、翻訳の精度を強化学習を使用してあげるときの学習の収束速度が速くなることを s2sによる機械翻訳で示している論文。 Criticの方にはground truthの翻訳文を使用して計算を行っている。 この他にも学習を安定させるための工夫が施されており、大きいaction spaceを扱うためにrareなactionに対して制約をかしたり、delayed actorを導入しactionのsamplingをおこなうagentは学習対象のものよりもweightの更新が遅いものにしていたりする。 あと他の類似論文とは違い、文章を生成し終わってから報酬を計算する方法ではreward sparseの問題があることを解決しようとしており、部分的な文字列に対してrewardを随時計算し使用することで問題を軽減しようとしている。

  4. Ask the Right Questions: Active Question Reformulation with Reinforcement Learning(link)
    QAタスク従来のシステムを学習した後に、その重みを固定する。 そこで別のNNをbackendにもつagentをuserとシステムの間に立てて、 userからのquestionのテキストをシステムの正解率を最大化するように変換するように学習している。 reformulationのモデルはone-shot learningにも応用されるような multilingualのMT modelをベースにpretrainされている。 実際にはreformulation modelはN個の新しいquestionをseq2seqで生成して、 それらすべてに対してblock-box化しているQAモデルに答えさせて、 それをbinary-classificationを解くように学習するKimのCNNベースのモデルで回答を(original question, new question, answer)のtripletから選択させている。

  5. Composite Task-Completion Dialogue Policy Learning via Hierarchical Deep Reinforcement Learning(link)
    actionの決定(発話)までのプロセスをsubtaskに切り分けてhierarchicalに定式化している。 応用しているタスクとしてはtask-completion dialogueで この方式をとることでsparse reward problemを軽減することに成功した。 さらにcoherence of the dialogue flowも改善。

  6. Language Expansion In Text-Based Games(link) N個のテキストベースのゲームを解くことのできる 単一のエージェントの学習を N個のteacherを学習し そこからつくったreply bufferからサンプリングして、studentの学習に使用した。 このpolicy distillationを行うことで安定した学習を行うことに成功した。

  7. Hybrid Code Networks: practical and efficient end-to-end dialog control with supervised and reinforcement learning(link)
    対話システムにおけるユーザーからの発話以外の情報等を 適宜埋め込んで発話の生成に役立てる手法を提案している。 domain specificな情報を使用することでデータ数が少ない中でも 安全な発話生成ができるようになっている。

  8. Semi-Supervised QA with Generative Domain-Adaptive Nets(link)
    QAタスクにおいて、文章と回答のみあるデータから 質問文を生成することで、半教師あり学習をしてデータセットが 小さくても精度を維持することに成功している。 質問文の生成にはlabelの付いているものでseq2seqをpretrainし それをさらにunlabeledデータから質問文を生成して answering modelへの入力とした時に、 最終的な精度が向上するようにreinforce algorithmを使用して質問文生成モデルを学習した。

  9. Agent-Aware Dropout DQN for Safe and Efficient On-line Dialogue Policy Learning(link)
    対話モデルのオンライン学習における、学習開始時の挙動の悪さを ruleベースのteacher agentを用意し、適宜メインのstudent agentに 変わってactionをとったりすることで軽減した。 t時点での beliefからN回 DQNからq-valueを計算し それの数え上げからmax(q)から選択したactionに対するuncertaintyを計算し 十分でなければteacherにactionを決定してもらい学習をしている。

  10. A Deep Reinforced Model for Abstractive Summarization(link)
    abstractive summarization taskにおいて、 intra-attentionとRLによる目的関数を新しく設定することで rougeスコアと、長文における生成された要約文章の可読性を上げることに成功している。 intra-attentionは主にdecoderが同じ単語を生成することを回避するための手法で、一回の生成で同じtokenに対してなんども高いattentionをかけないようにpenalizingしている。 さらにすでに生成された文字列に対してもattentionをかけるということもしている。 policy learningに関しては、rougeとmaximum-likelihoodとは相性が悪いので生成結果のcoherentを担保するためにもrougeを最大化するように報酬を設定している。 baselineと予測を一回のfeedforwardの計算で行えるように工夫もしている。

  11. Automatic Text Summarization Using Reinforcement Learning with Embedding Features(link)
    extractive summarizationタスクをDQNを使用して行った論文。 agentはrougeスコアが最も高くなるように、 入力文章から要約に最適な文章を選択することができるよう Q-functionを最適化する。 agentに対する入力としてすでに要約文として選択されている文の情報と、 candidate sentencesの情報が埋め込みベクとして渡される。 結果としてextractiveタスクにおけるbaselineとなるようなモデルはDUC データセットにおいて上回ることに成功している。 入力情報、agent内のネットワークともに比較的シンプルなものでも うまく要約することができることを言っている。

  12. Sequence Level Training with Recurrent Neural Networks(link)
    翻訳、要約等の文章生成タスクにおいて学習時と推論時の指標が異なり 学習が安定しないことを改善しようとした論文。 つまり、学習時は単語の予測問題をMSEで評価しながらおこなるが、 テスト時にはbleuやrouge等の文章全体を見た評価を行っていたのを、 学習時からbleuやrougeを行うことで差異をなくそうとしている。 実際にはいきなりRLを使用してbleu等を最大化するとaction spaceが 大きすぎて学習が困難なので、まずこれまで通りMSEでs2sを学習してから 徐々にlossをRLのものに差し替えていくというcurriculum learningを採用している。 RLに関してはRNNをagentとして、actionは各stepでの単語の選択。 stateはこれまでに生成した単語達、そして 文章生成が完了してらそれをbleu等で評価し、それをrewardとした。 これらの結果、非常に大きなaction spaceでも学習を行うことができ、 greedyに生成をして速度を向上しながら精度でもこの時点での baselineをoutperformすることに成功した。 ただrewardの設定に荒さが残るので、それの改善をfuture workとしている。

  13. Deep Reinforcement Learning for Dialogue Generation(link)
    RLを導入してs2sを制御することによって、 短絡的に条件付き確率の高い発話を返すのではなく、 長期的な見通しを立てた発話を返すモデルを作ろうとした論文。 これまでの短絡的なモデルで問題になっていた点を中心に rewardを設計しそれらを最大化するようにs2sベースのpolicyを学習することで実現しようとした。 さらに実験では二つのvirtual agentsを用意して対話のシミュレーションを 自動的に行うことで学習した。 それに加えて人間を使用した評価も行っている。 開発者が必要だと思ったrewardを設定し外的にs2sを制御することはある程度できた。 それを行うことによって、発話レベルではなく対話レベルで より良い対話を行うようにagentを学習へ促すことにも成功した。 ただ人間設計のrewardで学習の方向を定めているので本当にそれが正しいか 分からないし、agents間の対話がloopに陥ってしまう問題は やはり発生してしまっている。

  14. Deep Reinforcement Learning for Multi-Domain Dialogue Systems(link) multi domain task oriented dialogue systemタスクに対して multi domainに成ると、state, action spaceがどんどん大きくなってしまい 学習が困難になるのを回避するためにdomain特化したagentを 複数用意してnaiiveな学習器で分類器を作成し各agentに 発話を振り分けて学習している。 agentを複数用意したとこ以外にも、同義語等をまとめることでspaceの削減を頑張っている これらの手法の元、学習に必要な時間を大きく減らすことができた。

最近読んだ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の「残差を学習したらうまくいったよ!」というのは、入力時の情報を下層まで伝えることができているからなのかな?とは思いつつもしっかりと腹落ちはしていないので、実際に自分で実装したものを動かしてみるとこまでやってみたいなと感じています。