LSTM で足し算しています。私の誤りは私に帰属します。お気付きの点がありましたらコメント等でご指摘いただけますと幸いです。
レンダリングが崩れていない版はこちら(GitHub Pages)
雑記
以下の記事を読みます。
- Transformer の原論文:
- 他の観点からの Transformer の解説:
- The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.
- The Annotated Transformer
- Attention Is All You Need
- Attention の解説:
入力として系列データを受け取って何らかの出力をするタスクでは、本質的に「異なるステップの情報を束ねる」ことが必要だからでしょ。とても長い系列データを束ねるとなると、すべてを全結合するなんてできないから、素朴には「逐次的に束ねていく(再帰)」か「現在のステップに近い範囲を束ねる(畳込み)」かくらいしかないよね。
そういわれると再帰か畳込みをせざるを得ないような気がしてきました。しかし、では Transformer はいったい何をすると…? というのを解説するのが参照している記事ですが。最初に以下の式が出てきますね。
その更新式はそのまま GRU だね。ただ、GRU の更新ゲートの表式は前回のコンテクストに をかけて新たなコンテクスト候補に をかける流儀が多いように思うけど。 GRU だったら新たなコンテクスト候補は になるね( はリセットゲート)。
ええ、参照している記事ではリセットゲートのない GRU を想定しています。そして、上式のような更新式は shortcut connection(residual connection)と解釈できると。… と がなければ、 は前回のコンテクストから今回のあるべきコンテクストまでの残差というのはわかりますが。この観点を掘り下げるためか、上の式を時間方向に展開していっていますね。
ある時刻のコンテクスト候補 ★ が伝わっていく様子を図で描くとこうかな。
論文読みメモ: Bivariate Beta-LSTM(その2)
以下の論文を読みます。
昨日のあらすじはこうでしょうか。
- LSTM のシグモイド型ゲートは、結局効果的に開閉しない(ゲートの値が0~1の間を動くというよりはほんの少ししか動かない)ことがあるし、入力ゲートと忘却ゲートは互いがどうなっているかを全く考慮していない。
- なお、このような問題意識で、過去に以下のようなゲートが提案されている。
- 温度パラメータ付きシグモイド型ゲート(シグモイド関数をステップ関数に近くする)
- G2-LSTM(入力ゲートと忘却ゲートが確率的に 0 か 1 を取る)
- CIFG-LSTM(入力ゲートと忘却ゲートが完全に -1 の相関をする)
- RNN におけるドロップアウト。
- Variational RNN(VRNN)。
- 確率的ゲート → 詳細は後述。
まあ、確率的な要素を取り入れて新しいことができるようになった例だと捉えればいいんじゃないのかな。次の段落からゲートの話になるけど、最初にパラメータを削減した話として以下が引用されているね。
この Simple Recurrent Unit: SRU(下図)は GRU 同様に自然言語処理の研究から提案されたネットワーク構造なんだね。ゲートが2つに集約されている点は GRU に似ているけど、GRU と違って出力と記憶セルが分離しているな…でも LSTM と違って前回のステップの出力は使用していない。出力が入力と記憶の線形和というのはかなり制約されているようにみえるけど、名前の通りこれ単体じゃなくてネットワーク構造の構成ユニットとして補助的に使うものなのかな。アブストラクトに Transformer に組み合わせることで翻訳タスクの精度を向上させたとあるね。LSTM | GRU | SRU | |
---|---|---|---|
記憶セルと出力が分離しているか | 出力とは別に記憶セルを設置する | もう記憶セルを出力として使用する | やっぱり記憶セルから出力を分離する |
記憶セルに足し合わせるもの(※)は | 入力と前回出力の線形変換の和を活性化したもの | 入力と前回出力をリセットゲートに通したものの線形変換の和を活性化したもの | 入力の線形変換 |
記憶セルと ※ の混合比を決めるのは | 忘却ゲート(記憶セル側)、入力ゲート(※ 側) | 更新ゲート | 忘却ゲート |
出力するのは | 記憶セルを活性化して出力ゲートに通したもの | 記憶セルをそのまま出力 | 記憶セルと入力をリセットゲートが決める混合比で混合したもの |
まとめると | 記憶セルを活用しながら現在のコンテクストを出力する | 記憶セルを現在のコンテクストによせる | コンテクストを出力するというより入力を modify する |
論文読みメモ: Bivariate Beta-LSTM(その1)
以下の論文を読みます。
LSTM はシグモイド関数で活性化したゲート(ゲートというと「通る」or「通らない」という印象があるので、「何%だけ通る」という意味ではフィルターなどといった方がいいように感じますが)で
- 「特徴(※)をどれだけ記憶に取り入れるべきか」(Input Gate)
- 「記憶をどれだけ忘れるべきか」(Forget Gate)
※ ここで特徴とよんでいるのは下図の のこと。
いや、そう言っちゃうと関係ないように感じるけど、でも、入力ゲートが好きに「特徴を取り入れた方がいいな」と思って、忘却ゲートが好きに「忘却しない方がいいな」と思ったら、記憶はどんどん肥大してシフトしていっちゃいそうだよね。まあそれじゃ困るからそんな風には学習されないだろうけど、記憶を安定させるためには入力ゲートと忘却ゲートはある程度は連携した方がいいんじゃないのかな。あちらを生かしたらこちらは生かさないというようにね。
あちらを取り入れたらこちらが立たず…ああ、わかりました。「人の精神は伸縮のきかない容れ物です。より多くの真理と完全な正気の両方を容れることは出来ないのです」というやつですね。
違うかな。
イントロダクションに入ると、シグモイド関数ではゲートの値が実は0~1のうち狭い範囲しか動かず、ゲートが意図通りに機能していないのではという疑問が投げかけられていますね。ここで引用されている以下の論文のアブストラクトは、「ちゃんとゲート機能を実現するならゲートの値は 0 or 1 にすべきで、実際そのようにしてもパフォーマンスはよかった」というように読めますが、本当なんでしょうか。
この論文のイントロダクションの続きを読むと、上の論文ではシグモイド関数に温度パラメータを導入することでステップ関数に近くするようなこともしたんですかね? でも、ちゃんとしたゲート機能を実現するにはもっと抜本的な修正が必要だと。それで、やはり上の論文で G2-LSTM なる LSTM も提案されたようです。4枚目の右下ですかね。これは入力ゲートと忘却ゲートが確率的なのですかね。入力ゲートと忘却ゲートが抜本的に修正されていることは理解しますが、なぜこうした方がいいと思ったのかはこちらの論文を読まなければならないでしょうか。それが Figure 1 かな。これはセンチメント分類の例みたいだけど、入力ゲートと忘却ゲートに大きな負の相関(赤い棒グラフ)が出ているのは "but" や "not" という単語だ。"but" や "not" が来たら忘却ゲートをぐっと閉じて入力ゲートをぐっと開くというのはわかりやすいよね。それまでがネガティブな文章でも、そこからポジティブな文章に変わるかもしれないし。でも、"not" の次の "over-priced" では大きな正の相関(青い棒グラフ)になっている。これもわかりやすいかな。"not" の後の単語はちゃんと受け取らないといけないけど、だからといって直前が "not" であったことも忘れちゃ駄目だから、入力ゲートも忘却ゲートもぐっと開かないといけない。
論文読みメモ: Named Entity Recognition without Labelled Data: A Weak Supervision Approach(その2)(終)
以下の論文を読みます。
- 「固有表現抽出を学習したいが対象ドメインのラベル付きデータがなく」、「対象ドメイン向けではない『弱い』ラベリング関数ならいくつか用意できる」というときに、弱いラベリングたちをいい感じに統合する(→ その統合したラベリングで改めて何らかのモデルを学習する)手法を提案した。以下の手順による。
- 【仮定1】個々の「弱い」ラベリングは、対象ドメインに即した真のラベルではないが、「そのトークンの真のラベルがAのとき、弱いラベリングはBかCになりやすい(=真のラベルと個々のラベリング関数に依存するディリクレ分布にしたがう)」というような傾向があると仮定する。
- 【仮定2】トークン毎の真のラベルはマルコフ性をもつと仮定する。
- これらの仮定の下に HMM を学習し、EMアルゴリズムのような方法で「各トークンの真のラベル」、「ディリクレ分布及び遷移パラメータ」を最適化する。
- 提案手法で改めて学習したモデルは、Reuters & Bloomberg ニュース記事からの固有表現抽出において、ドメイン外の最も信頼できるモデルや、個々のラベリング関数の多数決などの素朴なモデルの組み合わせの性能を上回った。
- 「個々の弱いラベリングは真のラベリングから確率的に生成されていると考えて、得意分野が異なるラベリングたちを統合する」というのは可搬性があるアイデアのように思われる。特に固有表現抽出のような自然言語処理タスクの場合は「出力されるラベル系列に制約がある」点で、HMM で真のラベルを推定する意義があると思われる。
- ただし、弱いラベリングたちがいい感じに互いの欠点を補うように揃っている必要があるはずである。手持ちの弱いラベリングたちの揃いっぷりにかなり依存した手法であるようには思われる。
前回: その1
前回まででわかったことは以下でしょうか。(?)のところはまだわかっていません。
- 固有表現抽出を学習したいが対象ドメインのラベル付きデータがない。
- 多少でもラベル付きデータがあれば転移学習できるがないので転移学習すらできない。
- 対象ドメイン向けではない「弱い」ラベリング関数ならいくつか用意できる。
- Out-of-domain NER models ― 他の様々なドメインで学習したNERモデル
- Gazetteers ― 辞書(ウィキペディア、会社名辞書、地名辞書、…)
- Heuristic functions ― 手作りの抽出ルール(時刻、日付、金額、…)
- Document-level relations ― 文書レベルの制約(?)
- なのでこれらのラベリングをいい感じに統合して(?)そのラベルを学習する(?)。
肝心なことが何もわかっていない…。
なので今回は3節の「Approach」から読もうと思うんですが、冒頭で、今回のラベルの統合はクラウドソーシングしたアノテータさんのラベルを統合するのとは以下の2点において毛色が違うといっていますね。
- 1点目は個々のラベリングに「地名辞書」などといった特定の固有表現に特化したラベリングがある点です。クラウドソーシングの個々のアノテータさんはラベリングを誤ることはあっても特定のラベルしか付けてくれないということはないのでそこは違いますね。
- 2点目として個々のラベリングが予測確率分布であることを許容しているようですね。クラウドソーシングのアノテータさんに依頼する場合は「人名: 25%、地名: 60%、会社名: 15%」などといったラベリングはないでしょうからね。アノテータさん的に一番正しいと思う固有表現を考えて選んでもらうことになるでしょう。しかし、今回は個々のラベリングはニューラルネットモデルなんかの場合もあります。確率最大なラベルを取ることもできるでしょうが、予測確率分布のまま扱うということですね。
文書単位で整合性を取るってことだよね。でも、他のラベリング関数とどう組み合わせたのかな。例えば「地名辞書」みたいに「地名」というラベルしか付けられないラベリング関数には適用する意味がないよね。文書レベルのポスト処理をしようとしまいと「地名」ってラベルしか付いてないわけだから。組み合わせ方はこの辺を読んでもよくわからないな…。
ディリクレ分布…いわば、「サイコロを生成するサイコロ」だね。どのラベリング関数も、真のラベルが であるトークンに対してサイコロ を振った結果を出すと考えているんだね。そして、真のラベルは1つ前のトークンの真のラベルに縛られていると。 によってね。なるほど、部長が最初にかいてくれた前回のあらすじに続けるならこんなストーリーだね。
- 固有表現抽出を学習したいが対象ドメインのラベル付きデータがない。
- 対象ドメイン向けではない「弱い」ラベリング関数ならいくつか用意できる。
- 【仮定1】個々の「弱い」ラベリング関数の結果は、対象ドメインに即した真のラベルではないが、「そのトークンの真のラベルがAのとき、弱いラベルはBかCになりやすい(=真のラベルと個々のラベリング関数に依存するディリクレ分布にしたがう)」という傾向があると仮定する。
- 【仮定2】また、真のラベルはマルコフ性をもつと仮定する。
- これらを仮定すれば、EMアルゴリズムのような方法で「各トークンの真のラベル」、「ディリクレ分布及び遷移パラメータ」を最適化できる。得られた「各トークンの真のラベル」(の分布)を正解ラベルに改めて何らかのモデルを学習する。
何ですかその上から目線は…というか HMM の最適化までまだ読んでいませんよ。学習対象は以下ですね。
- 個の遷移パラメータ。
- 個のサイコロ(どのサイコロも 個の目が出る)。
- 隠れ変数の事前分布は、「最も信頼できるラベリング関数のカウントに基づいたディリクレ分布」にするということですが、カウントというのは同じ文字列が何回固有表現に判定されそのラベルの内訳がどうなっているかに基づいてディリクレ分布にするということでしょうか?
- 遷移パラメータも最も信頼できるラベリング関数に基づいて初期化するようですね。
- サイコロの初期値は…個々のラベリング関数 のラベル に関する感度 と精度 を見積もって以下のようにするとのことですが…何ですかこれは…?
その式を日本語訳しただけだけど、あるラベリング関数が「地名」であるトークンにどんな確率分布にしたがったラベルを割り当てるかは、以下のように決めるということだね。
- 正しく「地名」と判定する確率は、そのラベリング関数の「地名」への感度に比例するとする。
- 誤って「人名」と判定する確率は、(1 - そのラベリング関数の「人名」への感度)×(1 - そのラベリング関数の「地名」への精度)に比例するとする。