糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

「施策デザインのための機械学習入門 データ分析技術のビジネス活用における正しい考え方」 読んだ

著者よりご恵贈いただきました.いくつか読むべき本があったのですが,社内で読書会をするために優先して読みました.感想を書きます.

著者は当時学部生とは思えないスピードでトップカンファレンスに論文を通している齋藤優太氏サイバーエージェントにて機械学習と経済学 (特に因果推論) の研究を行っている,「効果検証入門」の著者でも知られる安井翔太氏.監修はホクソエム社

第一線で活躍する若手研究者が日本語で本を書くことがどんなに貴重か (一部の研究者が「日本語の原稿や国内学会は業績ではないので意味がない.運営負荷も高いために縮小・廃止すべきだ」「日本語の専門書は不要であり,原著を読める人間だけが読めばいい.」と主張している背景があります) という話をしても一部の人にしか伝わらないと思うので本の話を順にします.

本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.また,この領域の研究者がどのような問題意識を持っているのか,どのような単語や記号で定式化しているのかがわかるため,論文を読むための足がかりとしても有効だろうと思います.

1章「機械学習実践のためのフレームワーク

1章「機械学習実践のためのフレームワーク」では,本書の根底にある「フレームワーク」の導入が行われます.これは目次にそのまま書かれているのですが,本書において特に強調されているのは「データの観測構造をモデル化する」「観測データを用いて解くべき問題を近似する」の2点ではないでしょうか.

データの観測構造への理解・認識が曖昧なままだと,誤った仮定や思い込みを解消することができず,その結果得られるモデルにバイアスが生じます.これを説明しているのが前者です.そしてバイアスを観測データからいかに除去するか,また,いかにして軽減できるよう (本来解くべきであるが様々な理由によって解けない真のモデルを) 近似したモデルを構築できるかが後者です.

表1.3 の例はその最たるものです (「効果検証入門」の読者には見覚えがあるでしょう).この表から「クーポン配布は性別に関わらずランダムに配信されている」という思い込みに従ってナイーブにクーポンの効果を計算してしまうと,本来の効果 (そもそもこれが観測できないから困っているわけであり,永遠の課題ですが) とは異なる値が得られてしまいます (ここまで読んだところで「効果検証入門」で述べた回帰による効果の推定が本書では行われていないことに気付きました).

この1章のフレームワークにもとづいて,続く章では具体的な問題とバイアスについて触れています.

2章「機械学習実践のための基礎技術」

ここからは具体的な問題に取り組みます.まずは属性推定です (これは属性推定だけでなく, look-alike などにも適用可能でしょう).この時,学習は属性情報が付与された会員データが対象であり,予測 (推論) 時には属性情報が付与されていない非会員データが対象であるため,「会員になるかならないか」がランダムではなく,何らかの要因によって偏っている場合,モデルにはバイアスが含まれてしまいます.言葉にすると何となく分かることを数式を用い「ここにバイアスが生まれる余地がある」「よっての項を追加すると良い」と説明されるのでとても気分が良いです.

次に取り組むのは,既に何らかの意思決定モデルが動作しており,その結果として得られるログを対象により良い意思決定を推定する問題です.過去動作していた意思決定モデルによるバイアスを軽減するために IPS (Inverse Propensity Score) 推定量や Doubly-Robust (DR) 推定量の説明が行われます.ここの説明も一見 IPS だけでいいように見せかけてよく考えるとこれデータがもったいないのでは? という気持ちから DR の説明に入るので理解が進みます.しかし DR 推定量は特に数式の説明がなく唐突に現れるため,この道理を知るためには元論文を読む必要がありそうです.

著者らの研究成果である Open Bandit Pipeline についての説明も1節を割いて行われています.これは社内読書会で検証する際にちゃんと読みます.

3章「Explicit Feedback を用いた推薦システム構築の実践」

続いては商品推薦タスクです. Explicit Feedback と呼ばれるシチュエーションでは,ユーザは商品の評価を uniform に行うわけではなく,そもそもユーザは興味がある程度ある商品しか評価を行わないため,結果として観測されるデータにはバイアスが含まれてしまいます.ではこのデータからより良いモデルを学習するにはどうすればいいのか? という話と,研究用データセットを用いた検証が行われています.

4章「Implicit Feedback を用いたランキングシステム構築の実践」

こちらも商品推薦タスク (タイトルは「ランキングシステム」ですがここでは簡単のため商品推薦タスクと呼びます) です. Implicit Feedback という状況において,3章とは異なるバイアスを考慮しています.それは

  • ポジションバイアス : 商品がユーザに表示される順序が上位であればあるほどクリックされやすい.反対に順序が下位のアイテムがクリックされなかった場合,興味がないのか,そもそもユーザの目に入っていないのかの区別がつかない
  • 選択バイアス : そもそも商品がユーザに表示されていない
  • クリックノイズ : ユーザが誤って興味が無い商品をクリックしているかもしれない

の3つです.これらをどう組み込むかを段階的に説明しています.

5章「因果効果を考慮したランキングシステムの構築」

最後に,「クリック後の購買行動」などを KPI にした時の「推薦機能由来での KPI を最大化する施策」と「プラットフォーム全体での KPI を最大化する施策」の推定について触れています.特に後者は推薦枠が有限である場合,推薦しなかった場合の売上と推薦した場合の売上それぞれを考慮し,最も良いものを探す,という話で uplift modeling の雰囲気を感じます.

本書の良いところと限界

本書の良いところは「バイアスから目をそらすな」という話を繰り返し述べている点です.本書を読み終わり,思想をある程度理解した読者においては,つい手癖で手元のデータに対して何も考えずにモデルを作ってしまう前に「お前の手元にあるデータにはこのような偏りが入っているはずだが?」という内なる著者らからの指摘がきっと入るでしょう.

とはいえ本書の内容がそのまますぐに日々の業務に反映できるかと言われると,そのまま適用できる人は少ないのではないかと思います.

たとえば3章の IPS 推定量に必要な傾向スコアの計算には,完全にバイアスが存在しないデータが必要であり,後段の Yahoo! R3 データでの実験でも (ランダムに収集されバイアスが存在しない) テストデータの一部を用いて傾向スコアを計算しています.3.6 にて補足が入るものの,「このデータにはバイアスがかかっています.それをどう補正したらいいでしょう?」 -> 「ここにバイアスのかかっていないデータがあるので補正に使います」の流れには困惑しました.

また,2章では「過去,どのような値にもとづいて施策を行ったか」を示す (「古い意思決定モデルの行動選択確率」と呼ばれています) \pi_{b} の値が必要です (とはいえ p79 において既存のデータから推定する方法にも触れられています).4章においても,説明している手法の学習には「これまでどのユーザにどの順序で商品を表示していたか」のデータが必要です.これらのデータが現行のシステムにて保存されていない場合には本書の手法をそのままでは適用できません.

とはいえ「では本書は全く役に立たないのか」というわけではなく,

  • これからはなるべく今後のために施策にまつわるデータを収集しよう
  • 「現状のデータにはバイアスが含まれている」と意識することにまず意味がある
  • バイアスを軽減するためのさまざまな手法が研究・開発されているのだから,困ったら本書や本書が言及している論文を読もう

という話ではないかと思います.繰り返しになりますが,本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.

細かい話

  • 2章で「データサイエンティストはこうやってナイーブな統計量を出してしまうがそれでは駄目」と散々な書き方をしており,そこまで言わなくてもいいのではないかと思いました
  • 表1.2 と表2.2 の話,気持ちはわかるのですが表現が適切でないように思います.ここでは「推定した値と真の値との誤差」でどちらのモデルが良いかを議論し,誤差が小さいモデルで意思決定をすると失敗する (モデルの推定誤差と,そのモデルに従って振る舞った時との結果が食い違う) という話なのですが,そもそも真の値を知っているのならばモデルを推定する必要がない (真の値にもとづいて意思決定すればいい) でしょうし,「モデル評価では真の値を確認できるが意思決定時には参照できない」というのも不自然に思います.より正確には「既知のデータでモデルを推定する」「未知のデータに当てはめる」「既知と未知のデータは同様であるという強い仮定がある」「よって既知のデータに対する誤差が優れたモデルを採用し未知のデータの意思決定に用いる」だと思うのですが,お気付きのようにこの説明はとても面倒です
  • p170 の式は先頭の項に閉じ括弧が一つ足りないと思います.恐らくは  (C(u_{j}, i_{1}, y_{j}(i_{1})), C(u_{j}, i_{2}, y_{j}(i_{2})),\cdots, C(u_{j}, i_{m}, y_{j}(i_{m})))

A Method to Anonymize Business Metrics to Publishing Implicit Feedback Datasets (Recsys 2020) 読んだ

論文

Gunosy理研AIPの論文.

企業が持つ implicit feedback のデータを公開するためには

  • アクティブユーザ数や収益や平均クリック数といった business metric を隠したい
  • 公平性を担保したい
  • Population Bias を減らしたい

という三つの気持ちがある.

今回はログ中のユーザをサンプリングして公開用データを構築するわけですが,ユーザごとにサンプリング時の重み w を推定する問題として定式化する.

この時

  • business metric を隠すために,サンプリング後のクリック数の分布と特定の分布 (zipf など) との Wasserstein distance を取る L_{\mathrm{click}}(w)
  • 公平性のためにサンプリング後のユーザの属性の分布と uniform distribution との KL divergence L_{\mathrm{attribute}}(w)
  • Population Bias 対策でサンプリング後の記事のカテゴリ分布と uniform distribution との KL divergence L_{\mathrm{category}}(w)
    • ここで uniform するのが fairness っぽい研究の匂いがする

の3つを重みのハイパーパラメタをかけた線形和を最小にするように w を推定する.以上.

よくわからなかったところ

  • 数学力が低すぎて 3.4 を読んだだけではどうやって w を推定していいか全く分からなかった.一番ナイーブな方法は w をただの user の重みとみなして適当にやることですがきっとそういうわけではないだろう.5.4 で Faking Fairness via Stealthily Biased Sampling (AAAI 2020)が言及されていますが査読で何か言われなかったのだろうか
  • サンプリングの方針としてユーザを選ぶ sampling user とユーザの行動ログをサンプリングする sampling behavior log の二つがあって本論文では前者が採用されている.後者を採用しない理由は時系列つきのログでよくやる「次に登場するアイテムは何か?」というタスクに対応できないからだと言われているが一部が欠けていても (よほど強烈なマルコフ性などが存在しない限り) できなくはないのではないかと思った
  • Table 1 の最下段は 2CCtypo だと思う
  • 4.2.4 にて Zipf(1) における Population Bias を考慮した結果が考慮していない結果とあまり差がない (これは本当に悲しい) 理由がよくわからなかった
  • 4.3 で述べられている timestamp の分布が近いみたいな話,いい話ではあるのだけど狙っていないのにどうしてこうなったのかがよくわかっていない
  • そもそも「企業が持つデータセットが有用である」とは一体どういう事なのかを考え始めるとよくわからなくなってきた
    • 思いついたひとつに「公開データセットで得られた知見は未公開のデータセットにおいても有用である (だからこそ公開データセットでの精度改善には意味がある)」というのがありそうだけど,これは一体どうやって検証したものだろうか
    • 十分に検討された疑似データと実データセットの差とは何か,実データセットだとどのような価値があるのだろうか.「実データセットを用いた検証の結果〜」とは論文の abstract に死ぬほど登場する言葉ではあるが,それは一体どういう価値があるのか考え直したい気持ちがある (IrisMushroom だって実データセットだ)

声優統計コーパスに存在する誤りの告知と JVS コーパスの利用推奨

声優統計コーパスの音素バランス文,および音声データについて告知します.

告知

今後,音声を新規収録される場合には声優統計コーパス付属のバランス文ではなく,句読点情報が付与された JSUT コーパスまたは JVS コーパスvoiceactress100 (以降, voiceactress100 と呼びます) の使用を推奨します.

  1. 声優統計コーパスのバランス文と voiceactress100 は一部の単語が異なっており,完全な互換性がありません
    1. voiceactress100 は声優統計コーパスバランス文を音声処理の研究者が洗練したものです
    2. 声優統計コーパスの一部の読みはバランス文と一致していません.また,アクセントや句読点位置も統一されていません
  2. 上記の理由により,今後,音声を新規収録される場合には声優統計コーパス付属のバランス文ではなく voiceactress100 の使用を推奨します
    1. その際のイントネーションはプロ話者によって発話された JVS コーパスに従うことを推奨します
  3. 感情表現を活用したい場合,またはプロ話者かつ高サンプリングレートのデータを使用したい場合のみ声優統計コーパスの音声データを用いるのが良いと私たち (日本声優統計学会) は考えます

声優統計コーパスと JSUT/JVS コーパスの関係

1.-i. に関して,声優統計コーパスと JSUT/JVS コーパスの関係について補足します. 両者とも,条件付で自由に利用 (コピー・共有・編集) できるコーパスです.それぞれの関係は

  • Wikipedia : CC BY-SA ライセンスにもとづいて本文データを公開
  • 声優統計 : Wikipedia のライセンスを継承してバランス文を構築 (翻案・利用)
  • JSUT : 声優統計のライセンスを継承して翻案・利用
  • JVS : JSUTのライセンスを継承して翻案・利用

です.

声優統計コーパスにおける既知の誤り

1.-ii. について,現在判明している誤りです (ご指摘してくださったつくよみちゃん様,本当にありがとうございました).これらは全て私たちの力不足・確認不足によるものです.

  • 「いしつみ」を「いしづみ」と読み上げている音声がある
  • 「鎮痛薬」を「鎮痛剤」と読み上げている音声がある
  • 「酸素供給」を「酸素配給」と読み上げている音声がある
  • プロ野球球団の大洋ホエールズ」を「プロ野球球団・大洋ホエールズ」と読み上げている音声がある
  • 「漁獲」を「りょかく」と読み上げている音声がある
  • バファローズ」を「バッファローズ」と読み上げている音声がある
  • ヴュルテンベルク」を「ヴェルテンベルク」と読み上げている音声がある
  • 「謙吉」を「けんいち」と読み上げている音声がある
  • 「プルヴァマ」を「パルヴァマ」と読み上げている音声がある

なぜこの文章を書いたか

声優統計コーパスは名称や内容のキャッチーさから (ある程度権利が自由な) バランス文および音声データとして音声研究に詳しくない人にも認知が広がっています.この現状は公開当時想定していなかったことであり,非常に嬉しく思います.

しかしその結果,より適切に品質が管理された JSUT/JVS コーパスに人々が到達しにくくなっていると考えます.特に,音声コーパスを自ら収録する人が増えている現状においては,適切なコーパスへの誘導が重要だと考えました.

最後に,本文章における声優統計コーパスと JSUT/JVS コーパスの関係,および JVS コーパスの利用推奨は JSUT/JVS コーパスの作者である高道慎之介 助教に事前に確認を取り,合意を得ています.

補足

声優統計コーパスを歌にした PJS: Phoneme-balanced Japanese Singing-voice corpus が公開されました

PJS: Phoneme-balanced Japanese Singing-voice corpus

[2006.02959] PJS: phoneme-balanced Japanese singing voice corpus

Junya Koguchi さんと東大高道慎之介助教によって作成された,音素バランスを考慮した日本語歌声コーパスが公開されました.

このコーパスには声優統計コーパスの音素バランス文を歌詞としてメロディが付与された歌が含まれています.arXiv 原稿の

A native Japanese male in his twenties composed all the songs. He is not a professional composer but has work experience using his singing, composing, and recording skills.

という記述が良い.

握手会が延期になったので「効果検証入門」を読んで Python で (ほぼ) 実装した

ゴールデンウィークの握手会が延期になり気力が完全に尽きてしまい(そもそも2020年のほとんどのイベントが延期または中止になっているわけですが),同じく握手会が延期になった友人と「アイドルとシロクマのことを考えないでください状態になっていてつらい」「何か没頭できる事は無いの」という話になった結果,「効果検証入門」を読んだ.

「どうせ読むのならば短期集中で」ということで,一日目午後に1章と2章,二日目午前に3章,午後に4章,三日目午前に5章のペースで Zoom で交互に節単位を音読しながら進めた.2020年,30歳を過ぎて音読.

感想

数学力が低い自分でわかった気分になれる,非常に参考になった.明日からでも試したい.随所に「実際のビジネスの現場ではこんな滅茶苦茶なことが行われている」という記述が出てくるので考えさせられてしまう.「正しい効果を知るインセンティブとは何か?」に最後の章で触れていたのも良かった.耳が痛い.

脱落変数バイアスの概念はとても面白かったし,Difference-in-Differences はシンプルながら (その分平行トレンド仮定が強力ですが) 試したいと思えた.反対に causalimpact についてはそこまでモチベーションが湧かなかった.十分に学習された予測器にもとづいて何かをする,というのがどうにも受け入れにくい.回帰不連続デザインは話としては面白そうに見えたものの,「単に回帰をする」という話になっていて肩透かしを感じた.

そもそもが本書で紹介されているテクニックはどれも比較的シンプルでありながら多くの仮定のもとに成り立っており, AUC や Prec/Recall のようになんらかの定量的な「確からしさ」が出るわけでなく,セレクションバイアスは正負どちらにも発生するため,非常に扱いが難しいように思う.「今回の施策による効果量は『〜〜〜』という仮定が成立すると考えて計算していますが,『〜〜〜』というバイアスが排除しきれていない事は念頭に置かねばなりません.ですが,何も考えずに推定するよりは確からしいと考えられます」といったように,多くの留保にもとづいて説明するのが因果推論を用いた分析において取るべき態度なのでしょう.

いくつかのトピック,たとえば Conditional Independence Assumption や Post treatment bias や Bayesian Structual Time Series Model や合成コントロールについてはより詳しく知りたくなりました.また,因果ダイヤグラムやバックドア基準という単語も本文には登場しなかったので次はそのあたりを知っていきたい.

次は星野崇宏「調査観察データの統計科学」Pearl「入門 統計的因果推論」岩波データサイエンス Vol.3宮川雅巳「統計的因果推論」を読むべきなのでしょうが全部会社に置いたままです.

Python による実装

ybenjo/cibook_by_python にアップロードしました.注意点を書きます.

  • タイトルに「ほぼ」と入れたのは以下の実装を行っていないため
    • 各種図表の描画
    • 4章の causalimpact を用いた実験
    • 5章の Nonparametric RDD の実験
  • セレクションバイアスを発生させたメールデータの値が本文と一致せず,かつ,乱数の seed によっては本来の値とは逆のセレクションバイアスが発生してしまう
  • RData の読み込みは ofajardo/pyreadr が良かった
  • 3.4.4 の傾向スコアの推定において本文では re74re75 の二乗を共変量に追加しているが,実験したところ傾向スコアが著しく悪化したために除外した
  • 傾向スコアマッチングは greedy にやってしまった
  • pandas の使い方が全く分からなくて途中で挫折した. groupby() して sum() した結果の加工が本当に分かっていない
  • R と違って欠損のある行を明示的に除外している

誤植・不明点

他の人も指摘しているかも知れないけれどネタバレが怖くて他人のエントリを読んでいない.自分の勘違いも多く含んでいると思う.

  • 著者の実装は R を用いているわけですが,目的変数または説明変数に NA を含んだ場合,その行を除外して推定を行うのがデフォルトの挙動だと思うが,欠損値のある行を消してしまうのは新たなバイアスを産むのではないか
  • p31 recencyが3より小さい場合6より小さい場合 の誤り
  • p55 \beta_1 - \alpha_1 = \gamma_1 \beta_1\alpha_1 - \beta_1 = \gamma_1 \beta_1 の誤り
    • 関連して p57 の \beta_1 - \alpha_1 はすべて \alpha_1 - \beta_1
  • p87 相関が強いと分子は0に近づき相関が強いと分母は0に近づき の誤り
  • p108 共変量のバランス における 平均の差をその標準偏差で割ったその がよくわからない.検索したところこの値は Cohen の d と呼ばれているらしい
    • 自分の実装では一部の共変量がバランスしないままだった.そういうこともあると思いたい
  • p141 よって,この分析の結果による効果量はそれらの差分をとって-1,554若しくは-43%ということになり は何に対して -43% なのか,分母は何なのかが明示されていないために分からない
  • p142 1853年の〜 という記述は全て 1854年
  • p151 Cigar データセットの導入が面倒だったので github の著者レポジトリで配布して欲しいと思いましたがライセンスが GPL2 だから無理なのでしょうか
    • なぜか自分が構築したさまざまな R の環境では Ecdat パッケージのインストールに失敗し続けた
    • 最終的に RStudio Cloud 上でデータを抽出
  • p156 著者実装 ch4_did.Rcausalimpactselectdplyr::名前空間を指定しないとエラーが出る
  • p176 nonparametric RDD の説明がされておらず,このモデルは一体何を行っているのかが全くわからない
  • p180 5.4.1
    • 二つの施策を行う状況はそもそも RDD と関係無いのでは
    • では施策以外で非連続になる状況は何か

声優統計コーパスのバランス文を修正しました & 引用されている論文を列挙しました

音素バランス文の読みの修正

対応が遅れてしまい申し訳ありません.

GitHub の Issue でも指摘されていた (#6および#7) バランス文の読みを修正しました.該当箇所は 020,043,057,076,079,087 の読みと対応する音素です.変更差分はこの commit を参考にしてください.

声優統計コーパスを引用している論文の列挙

また,声優統計コーパスを利用してる論文を検索して列挙しました.名の知れた会議の原稿に y_benjo and MagnesiumRibbon と書かれているのを読むのは気分が良いものです.

高道さん以外の研究室でも使われているのを見かけて驚きました.

引用先を arXiv にしたい

しかし今更になって思うのですが引用先をホームページにするのではなく arXiv などの原稿にしておけば引用件数が Google に拾ってもらえたのではないでしょうか(検索結果に 被引用数 が表示されて欲しい).今からでも間に合うのでしょうか.誰か arXiv への投稿を承認してくれる人を探さなければならない.この日記を読んでいる承認可能で「承認してもいい」という奇特な方はご連絡ください.

ここまで書いたところで「そもそも arXiv は実名で無い名前で原稿を投稿できるのだろうか」と思い調べたところ

It is a violation of our policies to misrepresent your identity or organizational affiliation. 
Claimed affiliation should be current in the conventional sense: e.g., physical presence, funding, e-mail address, etc. 
Misrepresentation of identity or affiliation, for any reason, is possible grounds for immediate and permanent suspension.

とあるので y_benjo and MagnesiumRibbon 名義で原稿を投稿するのは無理ということが分かりました.誰か回避策をください.

Google Dataset Search への対応

これは些細なことですが, GoogleDataset Search に反映されるように schema を書きました.早くクローラに検出されたい.

Synthesizing Tabular Data using Generative Adversarial Networks (preprint) 読んだ

[1811.11264] Synthesizing Tabular Data using Generative Adversarial Networks]

GAN を使って表形式のデータを生成する論文は既に読んだわけですが,その発展形. 著者らによる実装も公開されており(DAI-Lab/TGAN: Generative adversarial training for synthesizing tabular data),実装を試した人もいる(テーブルデータ向けのGAN(TGAN)で、titanicのデータを増やす - u++の備忘録).

前述した tableGAN との違いは CNN を用いずに LSTM を用いていること,交差エントロピーを用いるのではなく KL divergence を使って周辺分布を学習していることの二点.

データ変換

データが n_{c} 個の連続値の変数 c_{i}n_{d} 個の離散値の変数 d_{i} で構成されているとし,各行の各列についてそれぞれが連続値の変数なのか,離散値の変数なのかを区別して話を進める.

連続値の変数について

多くの場合連続値の変数は多峰 (multimodal) である.なのでそのまま表現せず,次のような手続きを踏む.

  • (-1, 1) に変換する
  • それぞれの変数について混合数 m のGMM (Gaussian Mixture Model) を学習し,平均 \tau_{i}^{(1)},\tau_{i}^{(2)},\cdots,\tau_{i}^{(m)} および標準偏差 \sigma_{i}^{(1)},\sigma_{i}^{(2)},\cdots,\sigma_{i}^{(m)} を得る
  • i 番目の変数の j 列目の値 c_{i, j} が GMM の各要素から得られる確率 u_{i, j}^{(1)},\cdots,u_{i, j}^{(m)} を得る
  • c_{i, j}v_{i, j} = (c_{i, j} - \tau_{i}^{k}) / 2\sigma_{i}^(k) とする.この時 k=\textrm{argmax}_{k} u_{i, j}^{k} である.その後 v_{i, j}[-0.99, 0.99] に clip する

一言で言えば連続値の変数を m 個の正規分布クラスタリングし,一番当てはまりが良い分布に関する情報を持つ.論文では m=5 とし,もし単峰の変数だったとしても m-1 個の正規分布に対する重みがゼロになるから構わないとしている.この手続きの結果,連続値の変数 c_{i, j}u_{i, j}^{(1)},\cdots,u_{i, j}^{(m)}v_{i, j}m+1 次元で表現する.

離散値の変数について

  • i 列目の離散値の全要素を D_{i} として離散値 d_{i, j} を one-hot encoding して \mathbf{b}_{i, j} とする
  • \mathbf{b}_{i, j} の各次元 \mathbf{b}_{i, j}^{(k)}\textrm{Uniform}(0, 0.2) なノイズを加える
  • \mathbf{b}_{i, j} を確率に正規化する

これら二種類の処理により, n_{c} + n_{d} 次元のデータは n_{c}(m + 1) + \sum_{i=1}^{n_{d}} |D_{i}| 次元に変換される.

また,これから説明する GAN は上記の v_{1:n_{c},j},\, u_{1:n_{c},j}^{1:m},\, \mathbf{d}_{1:n_{d},j} を生成するわけですが,本来の値に戻すには次のように変換すればいい.

  • 連続値 c_{i, j} = 2v_{i, j}\sigma_{i}^{(k)} + \tau_{i}^{(k)},\ k = \textrm{argmax}_{k} u_{i, j}^(k)
  • 離散値 d_{i, j} = \textrm{argmax}_{k} \mathbf{d}_{i, j}^{(k)}

生成

Generator には LSTM を使う.LSTM を使う理由は we use LSTM with attention in order to generate data column by column. としか書かれていないが,気持ちを汲み取ると各変数間の相関などを陽に考慮したいからだと思う. LSTM の出力を h_{t} として hidden vector f_{t}=\textrm{tanh}(W_{h}h_{t}) を求め,更に \textrm{tanh}(W_{t}f_{t}) として各変数を出力する.その後,t+1 ステップの LSTM に f_{t} を渡す.連続値の場合は v_{i} を得,次に u_{i} を得る.また,離散値の場合は t+1 ステップにはそのまま渡さずに f_{t}' = E_{i}[\textrm{argmax}_{k} \textrm{d}_i ] として渡す(E_{i}|D_{i}| \times n_f 次元の embedding).

Discriminator には mini-batch discrimination vector 入りの MLP を用いる(Generator が LSTM なのだから Discriminator も LSTM で良かったのではないか).

通常の GAN の損失関数に加え, Generator 側の損失関数について連続値変数 u に関する KL divergence \sum_{i=1}^{n_c} \textrm{KL}(u_i', u_i) と離散値の変数そのものの KL divergence \sum_{i=1}^{n_d}\textrm{KL}(\mathbf{d}_i', \mathbf{d}_i) を追加することで学習が安定するらしい.

実験

評価は三種類.

  • 学習を生成したデータ,予測対象を元データとした時にどの程度精度を保つことができるかの Machine learning efficacy
    • 前回の論文で model compatibility と呼んでいたもの
  • 「変数間の相関が保存されているか」の検証として,連続変数を離散化して変数間の normalized mutual information を計算し描画
  • 「真のデータにどれほど近いか」の検証として,学習データとテストデータまたは生成データ全対の距離のヒストグラムを描画