ブログではないです

ブログでなくはないです

Modeling Relational Data with Graph Convolutional Networks [Schlichtkrull+, arXiv'17]

https://arxiv.org/pdf/1703.06103.pdf

概要

Graph Convolutional Network(GCN) を関係ラベル付き有向グラフも扱えるように拡張して、ノードのタイプの推定や欠けたエッジの補完を行う話。 Quitaの解説記事 がとてもわかりやすいのであまり自分で書くことがない・・・。

思ったこと

R-GCNの式(1)での重みについて,

{ \displaystyle W_{r}^{(l)} = \sum_{b=1}^{B} a_{rb}^{(l)} V_{b}^{(l)} }
のように基底変換を重み付け和するやり方と

{ \displaystyle W_{r}^{(l)} = \bigoplus_{b=1}^{B} Q_{br}^{(l)} }
のように小さな基底変換のdirect sumを取る、つまり{ \displaystyle W_{r}^{(l)}}をブロック対角行列の形で表す方法の二種類を取っている。これはrelationが多くて全部について行列を学習するのが大変だからということだと思うんだけど一方でLink Predictionの方では{ \displaystyle R_r} として別個に学習してるように見えるがそこは良いのか??

DistMult単体で用いた場合との違いはentityのベクトルをR-GCNを使って作るか,それともembeddingとして同時最適化しているかの違い? グラフ系のNN,もしくはそれ以外の既存手法あまり知らないので関連研究辿る。

テストでは同様にtriple (subject, relation, object) が与えられ、 subject/object のどちらかを抜いた状態(両方やる)で全entityについてそのtripleに入るかどうかのスコアを算出する。正解のentityのMRR (平均逆順位)と Hit@k (上位k位に正解がいる割合) で評価。

メモ

ここ にDistmult含め既存研究のグラフKBに関する研究をまとめたスライドがあった。

Unsupervised Domain Adaptation by Backpropagation [Ganin+, ICML'15]

概要

Adversarial Multi-task Learning for Text Classification [Liu+, arXiv'17] の中で使われていたgradient reversal layerとは何だ?という事で読んだ.手法の部分しか読んでないので細かい実験結果などは省略.

文脈としてはMulti-task learningというよりDomain adaptationで,大まかなやりたいことは↑の論文と同じ. 入力から抽出した特徴量がf, fを入力として推定するソースドメインにおけるラベルをy, 同じくfを入力として推定する現在のドメインをdとして,y,d に関する損失を { \displaystyle L_y, L_d} とする.
y, d についてのパラメータ{ \displaystyle \theta_y, \theta_d}はそれぞれの損失{ \displaystyle L_y, L_d} を最小化するように,fについてのパラメータ{ \displaystyle \theta_f}{ \displaystyle L_y}を最小化し,かつ欲しいのはドメイン不変な特徴量であるため{ \displaystyle L_d}を最大化するように学習したい.つまり,以下が更新式になる.

{ \displaystyle
\theta_f \leftarrow \theta_f - \mu (
\frac{\partial L^i_y}{\partial \theta_f}
- \lambda \frac{\partial L^i_d}{\partial \theta_f})
}

{ \displaystyle
\theta_y \leftarrow \theta_y - \mu \frac{\partial L^i_y}{\partial \theta_y}
}

{ \displaystyle
\theta_d \leftarrow \theta_d - \mu \frac{\partial L^i_d}{\partial \theta_d}
}

この { \displaystyle \theta_f}の第二項目にあたる符合の逆転を誤差逆伝搬時に上手いことやっているのがgradient reversal layer.
{ \displaystyle R_{\lambda} (\textbf{x}) = \textbf{x}}
{ \displaystyle \frac{dR_{\lambda}}{d\textbf{x}} = - \lambda \textbf{I}}
となる関数がf -> d の間にあると考えれば良いとのこと。
DL系のフレームワークの内部で自動微分をどうやっているか詳しくないので何とも言えないが、関数を定義する時に順方向・逆方向の処理をそれぞれ持っておくような形になっているんだろうか? ここにCaffe実装のコードと補足資料があったのでどうやってるか今度確認・・・.

しかしこういうのがあるならなんでGANとかではDiscriminatorとGeneratorを交互に訓練するようなことをやっているんだろう?同じ理屈で一括で出来そうな気もする・・・。 (話は少し変わるが,過去に読んだGANのコードではGeneratorの訓練時にDiscriminatorのパラメータを固定していなかったのだが、これは一般的な実装?Discriminatorの方のパラメータをわざわざ悪い方向に動かす理由がないと思うのだが・・・。)

Adversarial Multi-task Learning for Text Classification [Liu+, ACL'17]

概要

元論文

ACL'17採録予定の論文。Multi-task learningのText classificationタスクへの応用。よくあるMulti-taskもののモデルではhidden layerやembedding layer全体をタスク間で共有する事が多く、そうした際に上手くタスク共有(shared)のパラメータとタスク依存(private)のパラメータを分離して学習できないかという話。

モデル

f:id:jack_and_rozz:20170614170904p:plain:w200f:id:jack_and_rozz:20170614170907p:plain:w200
single-taskでのベースモデルはLSTMを用いた単純な分類モデル。筆者の言う従来のmulti-taskモデル(FS-MTL)が上図 (a), 提案モデルその1 (SP-MTL)が (b).これだけだと最近domain adapationの文脈なんかでもちょくちょく出てきているタスク(ドメイン)非依存の層をMLPなりRNNなりで独立に作ってタスク依存の出力とconcatという単純なモデルだけど,この論文では共有部分にタスク非依存の情報が現れやすくなるように最近流行りのAdversarial Trainingを応用している。最終的な提案モデル(ASP-MTL)は下図。

f:id:jack_and_rozz:20170614172012p:plain:w200

具体的には、このモデルでは目的関数に { \displaystyle  L_{adv} } (eq.13)と {  L_{diff} } (eq.14)が加わっている。
{ \displaystyle  L_{adv} }は「shared-LSTMの出力を使って今どのタスクを解いているのかを識別する」 タスクの損失。しかし、shared-LSTMの出力には当然タスクを識別出来るような情報は含まれて欲しくないので,shared-LSTMは損失を最大化するように,Discriminatorは最小化するようにmin-maxな学習を行う。
良く分からなかった部分としてはGANのようなモデルの場合は実データの分布(画像とか)が存在するためDiscriminatorとGeneratorのそれぞれの訓練時に最適化は非対称になる。しかし,今回はいわばGeneratorの出力だけを用いて訓練を行なうようなケースであるため普通に交互に学習すると同じ形をした目的関数をそれぞれ逆側に引っ張り合うような状況になってしまうのではないか?と思ったがgradient reversal layer [Ganin+, '15] とかいうのを使うらしい。後で読む。

また、{  L_{diff} = \sum^K_{k=1} ||{\textbf{S}^k}^{\mathrm{T}} \textbf{H}^k ||^2_F } はOrthogonality Constraintsと呼ばれており,S, Hはそれぞれshared, private-LSTMからの出力を1列として横に並べたもの。つまり同じ入力に対するshared, privateの出力がどれだけ近くなってるかを損失としている? フロベニウスノルムを使っているのは最適化が楽だから? その辺は[Bousmalis+, '16]にあるらしい。。

評価実験

データセットとしてアマゾンの商品に関するレビューのAmazon product review dataset, 映画のレビューに関するIMDB dataset, MR dataset. を用いたポジネガ判定。

比較モデルは MT-CNN [Collobert and Weston, '08], MT-DNN [Liu+, '15]. 前者は入力として単語IDを変換する部分だけembedding layerを共有したmulti-taskモデル, 後者は読んだこと無いので詳しくは分からないが入力はBOW, 隠れ層を共有した普通のMLPらしい。

結果(tbl.2)としてはやはりsingle-task <= 比較手法 <= FS-MTL <= SP-MTL < ASP-MTL で、特にadversarialな学習とOrthogonality Constraintsの効果が大きい。 各単語ステップごとのポジネガの分析では、例えば 赤ちゃんがよく眠れる〜という文脈で'sleepy' が出てきた時、映画の文脈ではこれはネガティブな単語なのでSP-MTLでは他タスクでの学習結果を引きずってネガティブ寄りに動いてしまうが、ASP-MTLではそれが解決されている (fig.5)。 また、あるタスクのshared-LSTMをn-1個のタスクでpre-trainingして固定した状態で学習させた所、多少劣るものの十分な精度が出ている(tbl.3) ことから十分タスク非依存で汎用的な情報が捉えられていそう。

Overcoming catastrophic forgetting in neural networks [Kirkpatrick+, arXiv'17]

解説スライドを見つけたのでメモ。

以前読んだ論文でもそうだったが、Multi-task Learningにおいて普通にそれぞれのタスクの最適化をしてしまうと前のタスクの情報を忘れてしまう、そのためにどうにかして前のタスクの重みを覚えておこうという話。
全タスクを含むデータの分布Dとパラメータ{ \displaystyle \theta}に対して最適化対象となる

{ \displaystyle
\log p (\theta| D) = \log p (D|\theta) + \log p (\theta) - \log p(D)
}

はタスク別にデータを考えた時ベイズの定理から

{\displaystyle \log p (\theta| D) = \log p (D_B|\theta) + \log p (\theta|D_A) - \log p(D_B) }
となる。第三項はconstとして無視,問題は第二項をどうするかだが[MacKay+, '92] によるとそれぞれのタスクAを訓練した後のパラメータ{ \displaystyle \theta^*_A} を平均としたガウス分布を仮定し,フィッシャー情報行列Fでこの項を近似する。最終的な目的関数は以下のようになるらしい。

{ \displaystyle
L(\theta) = L_B (\theta) + \sum_i {\lambda \over 2} F_i (\theta_i - \theta^*_{A,i})^{2}
}

実験ではMNISTの手書き数字認識タスクで評価。ピクセルをそれぞれのタスクごとに共通のランダムな置換パターンを用いてシャッフルして,擬似的に複数のタスクを作っている。結果は以下の通り。図Aでは普通にSGDした場合とL2正規化をかけた場合と提案手法(EWC)を比較。L2正規化の場合は逆に制限が強すぎて新しいタスクについて学習されない。図BではEWC, single taskの場合, [Goodfellow+, '14] の手法の比較.
また,この手法で結果的に得られたネットワークはそれぞれのパラメータがどちらにも使えるような形で学習されているのか,それともタスク間で使うパラメータを上手いこと分けているのかを確認するためにタスク間でのoverlapを図Cで確認している。(Fisher overlap についてはAppendix参照) 置換したピクセル数が多い(=それぞれのタスクが異なる)ほど低レイヤでのoverlapは低くなるが,出力ラベルが各タスクで共通のため高レイヤではoverlapが大きくなるのではないかとのこと。

f:id:jack_and_rozz:20170509165622p:plain

また、MNISTだけではなく最近盛んなDRLでAtariを解くタスクでも手法の評価を行っている。この辺りあまり詳しくないので採用している既存研究の手法との絡みが分からなかったが、グラフを見る限り明らかに上手くいっているっぽい。 フィッシャー情報行列で近似できる云々の根拠がよくわからなかったので要確認。

MULTI-TASK SEQUENCE TO SEQUENCE LEARNING [Luong+, ICLR'16]

概要

元論文

前回に引き続きニューラルネットによるmulti-task learningもの。 橋本さんの論文中のモデルでは各タスクを1つずつ解き状態ベクトルを後段のタスクへと渡していく構造であったが、 それに対してこのモデルではEncoder-Decoderモデルで解けるそれぞれのタスク間でEncoderやDecoderを共有することでmulti-task learningを行っている。

実験では
1. Encoderを共有してtranslation, parsing, unsupervised taskを解く(one-to-many)
2. Decoderを共有してtranslation ,image captioning, unsupervised taskを解く(many-to-one)
3. タスクによってどちらかを共有してtranslation, unsupervised taskを解く(many-to-many)
の3種を試している。論文中の図が分かりやすい。

Unsupervised taskとしてはauto-encoderやskip-thoughtを試している。skip-thoughtって何?と思って調べると Skip-thought Vectorsに関する解説記事 があった. 複数文からなる文章を入力として取り、Encoder-Decoderモデルである文をEncoderで読み込んだ後Decoder側でその前後の文を生成するモデルを学習することで文ベクトルを構築するとか。

学習の際はハイパーパラメータとして各タスクがどれだけ学習されるかの比率を設定した上で、それぞれのタスクを切り替えながら行う。(大きい方に対して1x, 0.1x, 0.01xで比較)

結果としては、多くの場合multi-taskで解くことによって結果は改善されている。ただし比率によってはデータがそこまでないタスクが頻繁に学習されて過学習っぽくなってしまったいる場合も。 また、one-to-manyモデルにおけるautoencoderタスクによるtranslation, parsingの改善は特に無かったらしい。autoencoderの導入によってEncoderが出力する意味表現が頑健なものになるんじゃないか、との考えは前からあったのでこれは意外な結果。

一方、many-to-manyモデルではunsupervised taskの導入によって改善している場合も。ただしautoencoderとskip-thoughtでその様相は異なり、 autoencoderではtranslationに対して小さめの方が精度が上がるのに対してskip-thoughtではtest pplは近いほど良くなるが,BLUEはむしろ下がってしまう。 筆者の考えとしてはskip-thoughtsはある文の前後の文を予想するタスクであるため、Encoder-Decoder間で同じ意味の文を扱うtranslationとタスクが異なってしまっている事が原因だろう、と述べている。

データ量に差があるタスクならともかく、unsupervised taskのデータ量はかなり大きめで、タスク間でDecoderを共有していないにも関わらず比率をメインのタスクよりもかなり小さくしたほうが良い、というのもうーん?この辺の比率をパラメータサーチしたくないよなあ・・・

雑感

Decoderを共有する(Many-to-one, Many-to-many)モデルではEncoderから異なるタスクの似たような文が与えられた際、文自体にはどのタスクの入力かの情報がないのでどのタスクのDecodeをすればいいのか混乱するんじゃないか?という気もする。Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot TranslationのようにタスクのシンボルをEncoderに加えるとかすれば結果が良くなったりしないだろうか。

A Joint Many-Task Model: Growing a Neural Network for Multiple NLP Tasks [Hashimoto+, arXiv'16]

概要

元論文

鶴岡研の橋本さんの論文。単一のモデルで複数タスクを同時に解く事で全体性能を向上させる話。 対象とするタスクは基礎的なものから順に POS Tagging, Word Chunking, Dependency Parsing, Semantic Relatedness, Textual Entailment.

モデルの構造としてはある文中のcharacter-n-gram-embeddingとpre-trainingされたword-embeddingを入力として取り, 複数タスクのうち基礎的なものから順に解いていき,各タスクの内部状態が後段へとフォワードされる事で品詞を考慮して係り受けを解析する、とか係り受けを考慮してRTEを解く、といったような効果を狙っている。詳細は論文の図参照。結果,全部繋げたモデルがどのタスクでもsotaかそれに近い精度を出している。

訓練時はそれぞれタスクごとに異なるデータを使って基礎的なものから順に訓練していき,あるタスクを訓練・テストするときにはその前段のタスクについては正解ラベルを必要としない。また、後段のタスクを訓練した事による前段のパラメータの変化の大きさを損失関数の中にペナルティとして加える事で,例えばDependencyタスクの訓練をすることで前段のChunkingタスクに関するパラメータが大きく変わってしまい性能が悪化する、というようなことを防ぐようにデザインされている。

雑感

マルチタスクを単一のモデルで解くことでそれぞれのタスクの性能向上が見込める、という説には直観的にも非常に同意。特にデータが少ないタスク(本論文で使っていたSICKデータセット(RTE)は全部合わせて10,000行程度しかない)では不可欠になると思う。 微妙に気になったのは最適化の方法。あるタスクの学習による他タスクのパラメータの変化をペナルティとするのは、単一モデルで複数タスクを実行する事で相補的に知識を学習しよう、という目的と矛盾していないだろうか?(そうすることで少し抑えた方が結果的に良かった、ということなのだと思うが) これは1タスクずつ最適化を行っていることに起因する問題だと思うので、それぞれのタスクの損失を重み付け和するなどの方法で同時最適化する事でどうにかならないだろうか?

ちなみに語彙の構築時は単一コーパスだと頻度上位◯◯語、という方法を取るのが普通だと思うのだが、 こういうサイズの異なる複数のコーパスを単一モデルで使う場合はどう定めているのだろう?

COLING2016 6日目

Bilingual Autoencoders with Global Descriptors for Modeling Parallel Sentences (Biao Zhang; Deyi Xiong; jinsong su; Hong Duan; Min Zhang)

ある文を多言語で表した時(例:你是谁? <-> "Who are you?") 、それらの文にAutoEncoderを使って構築される分散表現をより近いものにしよう、という研究。そうすることによって、同じく対応し得る別の文と遠くなってしまう欠点はあるが・・・と言っていた。

まずタイトルにある Golobal Descripter とは、単語のembedding列から各次元の min/max/avg/std(standard deviation) をそれぞれ取り出す操作のこと。 提案手法では、AutoEncoder中で自身の min/maxをinputとしてavg/stdを出力とするタスク(もしくはその逆)を学習させている。 どうしてこうすることでAutoEncoderの学習がより良くなると思ったのだろう?よくわかっていない。

この設定のもと、筆者が行った工夫としては以下の2つ。
1. Decoder側のパラメタ(W, b)を言語共通にする
2. 両言語のベクトル空間全体(もしくはバッチ毎)の中心距離を最小化すること

1についてはそうすることで Encodeされた時点で言語共通のパラメタになっていなければいけない、という制約を与えることができ、ついでにDecode側の行列に対して与えられるデータも増える。 2についてはそもそも言語間での文の対応は一対一ではなく多対多なところがあったり、データ中でもきっちり対応関係が有るとは言えないものが大量にあるので文単位では制約として厳しすぎてノイズになってしまう。そのためバッチごとに緩く全体で距離を近づけており、そこも既存研究との違いだと言っている。

最終的な目的関数は以下の通り。 (論文式(10)より)

 E_{ae} がそれぞれの言語でのAutoEncoderの損失、

 E_{sem} が言語間の距離。

f:id:jack_and_rozz:20161216111358p:plain

Joint Embedding of Hierarchical Categories and Entities for Concept Categorization and Dataless Classification (Yuezhang Li, Ronghuo Zheng, Tian Tian, Zhiting Hu, Rahul Iyer, Katia Sycara)

Posterより。 ある単語が属するカテゴリについてもembeddingがあるとクラスタリングや学習の素性として便利なのでどうにかして作ろうというのがモチベーション。既存研究で提案されているCE(Category Embedding)Modelでは、Wikipediaの記事タイトルをTarget word ( e_t), 記事に含まれるentity (同じく記事が存在する単語) をContext word( e_c)とした時、 あるtargetの記事内におけるcontext wordの出現率に加えて、targetの記事カテゴリ( c_i) のもとでののcontext wordが出現する確率の和を最大化している。

f:id:jack_and_rozz:20161216132256p:plain
f:id:jack_and_rozz:20161216132300p:plain

これに加えて、カテゴリの階層的情報も考慮した HCE (Hierarchical Category Embedding) Model が提案手法。 やっていることは目的関数の中でtargetの上位カテゴリについても条件付き確率をそれぞれ計算して、重み付け和を取っているだけ。

f:id:jack_and_rozz:20161216133922p:plain

この重みをどう決めているかというと、target word/context wordのカテゴリは同じくらいの粒度で考えるべき、というアイディアからtarget wordのそれぞれのカテゴリについて、context wordのカテゴリとの階層の差に反比例する形で和が1になるように定義している。(つまりcontext wordについてはカテゴリの階層構造を考えていない?)

Neural Machine Translation with Supervised Attention (Lemao Liu, Masao Utiyama, Andrew Finch and Eiichiro Sumita)

Posterより。NMTでの入力単語へのAttentionは厳密には入力単語に対するものではなく (入力単語 + その時点までの入力の畳み込み) に対するものなので、 PBTモデルにおけるalignmentほどしっかり単語の並びを学習している訳ではない。AERを比較するとGIZA++が30.6%, NMTで50.6%と結構差が有る。 そこで、attentionの部分だけGIZA++の結果に対して教師あり学習してやるというのが提案手法。学習したweightは(おそらく)翻訳モデル全体の訓練の中では更新されない。
実際の翻訳システムでそれやるか?と聞かれるとうーんという感じだけど、NMTの中で最適化されたattentionよりもきっちりword alignmentを外部で学習した方が結果が良くなる、というのは面白かった。

A Character-Aware Encoder for Neural Machine Translation (Zhen Yang, Wei Chen, Feng Wang, Bo Xu)

入力とその前後の文字(窓幅  \tau )を重み付け+concatしてcontext vector  c_iを作り、

Sequence to Backward and Forward Sequences: A Content-Introducing Approach to Generative Short-Text Conversation(Lili Mou; Yiping Song; Rui Yan; Ge Li; Lu Zhang; Zhi Jin)

対話において、入力が十分な情報を持ってない・複数の応答が考えられる・汎用的な応答が単純に多く登場しているなどの理由から何を言っても 'I don't know. ' のような応答が返ってくる、という話は大きな問題となっており、Diversity-promoting objective function [Li+, '16]、Variational encoding the source [Serban+, '16] をはじめとして手法が検討されている。

この研究における手法としては入力文の各単語とのPMI平均が最も高いキーワード(名詞)を先に推定し、その後そのキーワードを起点としてRNNで前後の文を生成するというもので、3種類の生成方法を提案しており、3.のasyn-B/Fが最も自然だと考えている。

  1. sep-B/F:前の文・後ろの文を独立に生成する
  2. syn-B/F:前の文・後ろの文を1単語ずつ同時に生成する
  3. asyn-B/F :後ろ向きに生成した後、その文を入力して続きを前向きに生成する

(下図は論文fig1より) f:id:jack_and_rozz:20161216162549p:plain:w400

データセットについて

Chinese dataset of human conversation crawled from the Baidu Tieba1 forum. We used 500,000 query-reply pairs to train the seq2BF model

評価は人手評価・BLEU・生成文のEntropy平均で行っている。人手評価は0/1/2の3段階(Pointwise)と、純粋なseq2seqと比べてどっちが良いか(Pairwise)結果は下図。(論文table1より) )

f:id:jack_and_rozz:20161216162841p:plain

A Neural Network Approach for Knowledge-Driven Response Generation(Pavlos Vougiouklis; Jonathon Hare; Elena Simperl)