📝

合成データアルゴリズム table-GAN

はじめに

Generative Adversarial Networks(GAN) [1][2]をベースとして用いた、テーブルデータに対する汎用的な合成データのほぼ初出のアルゴリズムである table-GAN [3] について解説します。GANについては、前のブログで解説しているので、その知識を持っていることを前提とします。
テーブルデータ用としては、table-GAN の前にmedGAN[4]が提案されていたり、ほぼ同時期に他のアルゴリズムが提案されていましたが、汎用的なものとしては、ほぼ初出のアルゴリズムになります。
 
前のブログで書いたように、画像に対しての生成モデルは飛躍的に発展を遂げました。近年、Deep Learning の技術で最も発展を遂げた分野と言っても過言でないかもしれません。
 
一方で、テーブルデータに対してはそこまで多くの研究がなされてはいません。画像と違い、デーブルデータはカラムごとのスケールや分布がバラバラであるため、2次元的なアプローチが難しい傾向にあります。しかし、プライバシー文脈では、テーブルデータの生成モデルこそ重要であったりします。
そこで、今回はテーブルデータに対する論文として初出(2018年)の、table-GAN[1] について解説していきます。
 

概要

table-GANは一言で言うと、Deep Convolutional GAN(DCGAN)[5]という画像に対するモデルをテーブルデータ用に直したようなモデルです。なので、まずは簡単にDCGANについて解説をします。
 

DCGANについて

DCGAN[5]は、GANに比べて高解像度であり、学習も安定化されたモデルです。元々のGANは全結合層しか採用されていませんでしたが、DCGANは転置畳み込み層(Transposed Convolution)と畳み込み層(Convolution)を採用しています。それぞれ、生成器(Generator)が転置畳み込みを、識別器(Discriminator)が畳み込み層を使用します。
畳み込み層は Convolutional Neural Networks (CNN) [6][7] で採用される層で、LeNet[8]で提案され、後に AlexNet[9]、ResNet[10] など Deep Learning のアルゴリズムで採用され、画像認識の精度が飛躍的に上がったことで知られるようになったものです。
畳み込みは、フィルタと呼ばれるものを使い、画像を縮小していき、feature map(畳み込みでできる画像っぽいもの) を作成していく処理です。
転置畳み込みは、画像を拡大していく処理です[11]。これは、入力データを拡大するためにデータの間や外側を0などで補完し、画像サイズを大きくしてから畳み込みを行うという処理です。畳み込みの逆計算とは言えませんが、feature map の画像サイズは大きくなります。
 

ネットワーク構造

Generatorのネットワーク構造を以下に示します。Discriminatorはこのネットワーク構造を逆にしたような構造です。
[5] DCGAN論文: Alec Radford, et al. “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”(2016) arxiv: https://arxiv.org/abs/1511.06434
[5] DCGAN論文: Alec Radford, et al. “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”(2016) arxiv: https://arxiv.org/abs/1511.06434
 
画像のCONV1などの処理が転置畳み込みにあたります。
 
DCGANをPytorchのクラス形式の擬似コードにすると以下のようになります。kernel_size など、画像サイズが倍や半分になることしか論文で明言されていなかったので、[12]の Pytorch の turorial を参考にさせていただきました。後述しますが、画像サイズが半分になる kernel_size, stride, padding の組み合わせは大体決まっているのでそのようなパラメータにすれば良いです。
 
全て畳み込み層で構成され、全結合層はありません。最後の出力層では、Generator は tanh 、Discriminator は sigmoid を使います。sigmoid を使うことで、(0,1) の連続値になります。これにより、 で偽物、 で本物と識別するように Neural Network (NN) を設計できます。
Batch Normalization [13] は、どの層でも毎回使用し、活性化関数としてGenerator はReLU[14] 、Discriminator は LeakyReLU [15]を使用します。
nz は入力のノイズベクトルのサイズで(論文だと100)、ncは色の数です(カラーなら3)。
ngf, ndfはConvolution時の Generator, Discriminator のベースのチャネル数です。チャネル数は、層を畳み込み等をしたときの入力及び出力の feature map の枚数に当たります。畳み込みの際に、出力のチャネル数分の異なるフィルタを使用して feature map を作成しますが、出力のチャネル数=フィルター数です。
例えば、Discriminator(0) の nc → ndf のところだと、nc=3, ndf=64, kernel_size=(4,4) とした場合、フィルターのサイズは (4,4,3) になり、このサイズのフィルターを 64 個使い、畳み込み処理をします。詳しい説明は、[5][6] を見てください。Pytorchでは第一引数が入力チャネル数、第二引数が出力チャネル数であり、出力チャネル数=フィルター数です。
論文では、ngf=ndf=128 です。Pytorch のサンプルでは 64 になっていました。
 
ちなみに、畳み込みした後の feature map の画像サイズは以下の計算式で決まります。kernel_size, padding, stride の意味するところは[5][6]を見てください。
: 入力画像のサイズ。(64とする)
: kernel のサイズ。(4とする)
: padding をする量。(1とする)
: stride の幅。(2とする)
それぞれ、縦横が違う場合は別々に設定して別々に計算すれば良いです。
今回のケースに当てはめると、例えばDiscriminator(2) のConv2dのところは、
で、(64,64)の画像が、(32,32)になります。それぞれのパラメータを適切に調整して、画像のサイズを小さくしていきます。転置畳み込みは、この式を考慮した上で大きくなるように画像の間や外側に補完を入れた上で畳み込みして大きくしていきます。
 

loss 関数

NN が定式化できたので、次は loss 関数を見ていきます。GAN と全く同じです。
GANの loss 関数の式を示します[1][3]。DCGAN も全く同じ式で学習をします。
ここで、 は学習に使う本物のデータの分布、 は Generator の入力のノイズベクトル の分布、 はGenerator 関数、 は出力が範囲 に及ぶ Discriminator 関数です( 0~1 の連続値です)。 は、Discriminator がサンプル を偽物として分類し、 は本物として分類することを意味します。 は期待値を意味します。期待値を取るということは、特定のイベントが発生する確率によって適切に重み付けされた、取りうるすべての値を「平均化」することを意味します。
 
 

table-GAN

DCGANから変化したアルゴリズムの箇所を見ていきます。全体図は以下のような形になっています。
[1] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure1,2
[1] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure1,2
 

前処理

まず、テーブルデータを畳み込みするために、2次元の形に成形します。
テーブルデータの1行と、画像の1枚が等価なわけですが、テーブルデータを2次元に変換することができます。例えば、1行に9カラムのデータがある場合、これを3つに分割しての2次元データにするという具合です。
1行のカラムを正方行列形式に並べていきます。足りないところはzero padding、つまりゼロ埋めをして成形します。
例えば、24カラムあった場合、 の行列に変換して、最後の25個目はゼロで埋めます。
論文では、入力の2次元化したサイズが(16,16)になっています。基本的に、2次元化するときは、8の倍数のサイズにするのが良いでしょう。これは3回畳み込みをして、最後は1/8のサイズになるからです。そうではない場合は kernel_size や padding 、 stride を調整する必要があります。
 

学習について

大体DCGANと同じですが、新規で追加されたNNがあります。分類器(Classifier)と呼ばれるNNです
Discriminatorと全く同じ NN 構造を持ち、元のデータの正解ラベルのカラムから学習を行います。つまり、元のデータにClassなどというカラムを作っておいて、そのカラムの値を正解ラベルとして学習するものとなっています。
このClassifierの目的はカラム間の相関関係を識別するもののようです。
これにより、例えば、コレステロール= 60.1、糖尿病= True のような、コレステロールが低いにも関わらず糖尿病と診断されてしまうような矛盾したレコードの生成を防ぐことができると論文中では述べられていました。
カラム同士の相関やスケールの不一致は画像にはあまりないテーブルの特徴なので、Classifierによってうまく対処しようとしたのだと思います。
 
GAN と同じように、Generator の学習時は 、Discriminator と Classifier は固定されます。Generator の学習には、Discriminator と Classifier の両方を使います。
Discriminator の学習時は、Generator は固定されます。Classifier は本物のデータから単独で学習を行います。
 

NN 構造

さて、それぞれの NN の構造を見ていこうかと思いますが、GeneratorとDiscriminatorの NN の構造は DCGAN とほぼ同じです。そして、Classifierの NN 構造は、Discriminator と全く同じです。
しかし、loss 関数の計算の仕方がかなり違います。Discriminator だけが DCGAN と同じです。
NN 構造は DCGAN と全く同じで、上の図に示されています。疑似コードは、同じなので省略します。
 

loss 関数

Original Loss
まず、GAN の元の loss 関数も使っていきます。
Discriminator は (1)式のGANと同じ loss 関数をそのまま使い、 とします。Generator は固定されています。以下の式を最大化するように学習します。
Generator は loss 関数の一部に、(1)式の損失関数を使います。この部分を、 とします。Discriminator は固定されているので、損失関数から除外します。こちらは最小化する問題です。
Information Loss
次に、information loss という新たな loss 関数を定義します。これは Generator の loss 関数に使うものです。
ここで、 はDiscriminatorの最後の層のシグモイド活性化の直前から取り出した feature map(つまり、高次元ベクトル)を表し、 はデータセット内のすべてのレコードの平均機能(つまり、ベクターの重心)を意味します。L-2ノルム ( ユークリッドノルム ) を使用して、2つの平均特徴の距離を計算します。
ここでの の定義は、データ全体に対して計算するものです。そのため、ミニバッチ単位では正確とはいえず、後述のアルゴリズムで修正作業をします。
 
 
次に、標準偏差も同じようにやります。
ここで、 の標準偏差を表します。 および は、実際のデータと合成データが Discriminator の観点から統計的に同じ特徴を持っていることを意味します。これは、元のデータに非常に似ていることを意味します。
あまり似ていないデータを意図的に作りたいケースもあるので、閾値として という値を導入します。 information loss は以下のように定義されます。
の時、 (6)式の第一項は 0 になります。 つまり、 以下の差分を無視するので、似せすぎないようにすることができます。
しかし、後述の classification loss を導入したことで、 の場合でも、元のテーブルのすべての値を思い出せないことがあることがわかりました。このことは、[1]の論文中で述べられています。
 
Classification Loss
次に、Classifier の loss 関数を定義します。これは、Generator も追加で使用します。
Classifier が上の式、Generator が下の式です。
ここで、 は入力レコードのClass正解ラベルを返す関数であり、 は入力レコードのClass正解ラベルを削除する関数、 は分類子ニューラルネットワークによって予測されるラベルです。
 
は、本物のデータでは、Class正解ラベルを事前に作っておいて、そのデータの中のClassのカラムを取ってくる関数に当たります。最も基本的には2値分類にして、例えば Class というカラムの値が0 か 1 にします。これは、2値である必要はなく、何値でもいいです。増やした場合、Classifier が多クラス分類できるように NN の最後の活性化関数を sigmoid から softmax 等にします[16]。Classifier はこの Class の値を Classラベルがない値から推測するような関数になります。多クラス分類の場合、式を見る限り、順序を持たせた分類にする方が望ましいです。例えば、Class が 0 と 5 の場合は となり、 Class が 0 と 1 の場合は となってしまいます。クラスに順序がない場合、クラスが違うという同じ事象に関わらず、5 の方がより大きな損失と認識されてしまいます。
Generator は Classラベルを生成データの一カラムとして生成することができます。 loss 関数に があることにより、だんだん Classifier を騙せるようになっていきます。
Classifier は(7)の上の式を最小化するように学習します。この式から分かるように、Generatorの手は借りません。単純に、元の Class正解ラベルをそれ以外の値から予測できるように学習する NN となっています。Generator も(7)の下の式を最小化するように学習します。
 
論文中では、Class正解ラベルをどのように作るかは述べられていませんでした。おそらく、何かしらのクラスタリング手法で作成したか、ルールベースで作成したのだと思われます。機械的に作成するなら、Gaussian Mixture Model(GMM)[17] などを用いてクラスタリングすると良いかもしれません。
 
table-GANの実装[18]を見た限りでは、Classifier を消して実装していました。これにより、Class正解ラベルを入れる必要がなくなります。そして、 GMMを使用して、連続値を指定してクラスタリングした離散値に直してから学習させて、生成した後で連続値に直すということをしていました。
別の実装[19]を見てみると、Classラベルを入力する形になっていて、label_col という引数で指定し、Classifier の学習も行う形で論文に準拠した形になっていました。
 
ここで、全ての loss 関数が揃いましたので、それぞれの loss 関数についてまとめ直します。
最適化する方向を明確にするため、 をつけて示します。
Discriminator
Classifier
Generator
[3]の論文中の全体的なアルゴリズムを表示します。
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Algorithm2
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Algorithm2
は本来は全体のデータに対して計算したいものですが、ミニバッチでしか学習することが難しいので、アルゴリズム中で示されているような更新式を用います。論文では、 を使用していました。
ミニバッチ単位で計算された などを用いて毎ステップで少しずつ などを更新していき、この値を用いて を計算します。
 
 

精度

累積度数分布
[3]の論文では、4つの手法を用いて、3つのデータの生データと合成データの累積度数分布を比較しています。
手法は、table-GAN の low-privacy 設定 ( および )、high-privacy 設定 ( および )、DCGAN、Condensation method[20] の4つです。
データはオープンデータの LACity[21], Adult[22], Airline[23] の3つです。それぞれのカラムから機密属性と思われるカラムが選択され、そのカラムに対して評価されています。LACityデータセットはbase salaryのカラム、Adultデータセットはwork class属性の4つのカラム、Airlineデータセットはdestination airport ID のカラムに対して行われています。
 
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 4
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 4
 
累積度数分布を見ると、low-privacy設定のtable-GANとhigh-privacy設定のtable-GAN共に他のメソッドより良い評価が得られていることがわかります。low-pribacy 設定のtable-GANは非常に高品質の合成性能を示しており、high-privacy 設定のtable-GANはDCGANより優れています。
 
モデル適合性(分類)
このテストでは、Healthのデータセット[25]が新たに一つ追加されています。
次に、機械学習を使った モデル適合性テスト ( model compatibility test ) を以下のような4つの手法で行なっています。スコアが低かったDCGANとCondensation method は削除され、代わりにk-匿名化の手法である、ARX[26], sdcMicro[27]のライブラリを利用する手法が追加されています。sdcMicroの手法は、準識別子に micro-aggregation[28]、機密属性に post-randomization method (PRAM)[29]という手法が適用されています。
このテストではまず、データを学習データとテストデータに分け、学習データで機械学習させたモデルと、学習データから合成データを作成して、その合成データで機械学習させたモデルを作成します。次に、この2つのモデルで同じテストデータを予測し、実際の値と比べることでそれぞれのモデルでスコアを算出します。学習データで予測した時の F1 score [30] ()と合成データで予測した時の F1 score () を取って、をプロットしたものが以下の表になります。
 
のラインが元のデータと同じ F1 score を出していることを示し、 は元のデータより F1 score が落ちていることを示します。データセットは分類です。
機械学習は、decision tree、random forest、Adaboost、multi-layer perception(MLP) でそれぞれ10個のパラメータ (合計40プロット) が使用されました。
 
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 5
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 5
図5 (a-d) はtable-GANのlow privacyがギリギリ2番目に良い結果で、図5 (e-h)はARX, sdcMicroのケースより僅かに悪いケースとなりました。図5 (i-l) の場合は一番良い結果と言え、図5 (m-p) ではARX, sdcMicroに続いて3番目に良い結果になりました。まずまずのモデル適合性と言えそうです。
 
 
モデル適合性(回帰)
分類と同様に、F1-scoreの代わりにMSEを使って回帰タスクに対して同じような評価がなされました。機械学習の手法は、linear regression, Lasso regression, passive aggressive regression, Hurber regression の4つです。Healthは回帰できるカラムがなかったのか、消されています。
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 6
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Figure 6
どのデータセットでも、 table-GAN, ARX, sdcMicro は良い適合性を示しています。
 

学習時間

学習時間を以下に示します。Tensorflow[24]で実装され、i7 3.4 Ghz CPU , GTX970 GPU で学習は行われたようです。25 epochs で最適化には Adam optimizer を使用したようです。
 
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Table3,4
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Table3,4
これだけでは他のアルゴリズムとの比較はできませんが、まずまずの速度だと思います。
 

最識別性

最近傍レコード距離(Distance to the Closest Record)
データの最識別性の評価をします。
元データの 1レコードを としたとき、k-匿名化や合成データなどの加工後のデータセットから に最もユークリッド距離が近いレコードを とします。
元のデータの全レコードに対して、 のペアの平均距離と標準偏差を算出して、これを最近傍レコード距離として、データのプライバシーがどれだけ保たれているか(データの最識別性)の評価基準とします。遠いほど、プライバシー性が高いということになります。
結果は以下のようになっています。
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Table 5
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018., Table 5
QIDs は準識別子を意味します。結果的に、table-GAN の手法はプライバシー性が高く、さらにhigh-privacy設定のときに優れたプライバシー性が得られています。
 
メンバーシップ推論攻撃
メンバーシップ推論攻撃[31][32] をtable-GANに行います。メンバーシップ推論攻撃とは、任意のデータをAIモデルに入れて、入力したデータがAIの学習データに含まれるか否か(メンバーシップか否か)を推論する攻撃です。要するに、学習データを復元しようとする攻撃になります。
 
[32]より、以下のような流れで実行されます。
メンバーシップ(つまり学習データである)と判断されたら、そのデータは学習に使われたデータだと判断できるため、無限に生成したデータを無限に入れたら学習データを復元することができると言うことになります。
 
攻撃は、Discriminator を対象に行われました。Attack network は機械学習モデルを使い、Multilayer Perceptron, DecisionTree, AdaBoost, Random-Forest, SVMで、それぞれ10個のパラメータを使用し、最も良いスコアを表示しています。その結果が以下になります。
0.64 や、0.6 はそこそこ攻撃が成功していると言うことになります。逆に0.19等はほとんど攻撃失敗です。high-privacy の設定にするほど、攻撃を防げていることがわかります。
 
 

まとめ

  • table-GANは、テーブルデータで合成データを作成する汎用的な最初のDeep Learningのモデルである。
  • table-GANは、k匿名化の手法と同程度の精度(モデル適合性)を示し、従来の手法より高い適合性を示した。
  • table-GANは、k匿名化の手法と比べてより高いプライバシー性を持ち、プライバシー性をコントロールすることができる。
 

参考文献

[1] GAN論文 : Goodfellow, Ian, et al. "Generative adversarial Nets." (2014) arXiv url:https://arxiv.org/abs/1406.2661
[2] GAN論文 : Goodfellow, Ian, et al. "Generative adversarial networks." Communications of the ACM 63.11 (2020): 139-144. https://dl.acm.org/doi/abs/10.1145/3422622
[3] table-GAN論文 : Noseong Park, Mahmoud Mohammadi, Kshitij Gorde, Sushil Jajodia, Hongkyu Park, and Youngmin Kim. “Data Synthesis based on Generative Adversarial Networks”. PVLDB, 11 (10): 1071-1083, 2018. DOI: https://doi.org/10.14778/3231751.3231757 (https://www.vldb.org/pvldb/vol11/p1071-park.pdf) arXiv url : https://arxiv.org/abs/1806.03384
[4] medGAN , medWGAN : E. Choi, S. Biswal, B. Malin, J. Duke, W. F. Stewart, and J. Sun, “Generating Multi-label Discrete Patient Records using Generative Adversarial Networks,” Machine learning for healthcare conference, pp. 286–305, 2017. https://arxiv.org/abs/1703.06490
[5] DCGAN論文: Alec Radford, et al. “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”(2016) arxiv: https://arxiv.org/abs/1511.06434
[8] CNN論文 : LeCun, Yann, et al. "Comparison of learning algorithms for handwritten digit recognition." International conference on artificial neural networks. Vol. 60. No. 1. 1995. url: https://onl.bz/1rtzDTC (長すぎて短縮)
[9] AlexNet論文: A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification with deep convolutional neural networks. In Proc. of NIPS, 2012. url: https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
[10] ResNet論文: K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In Proc. of CVPR, 2016. url: https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf, arXiv url: https://arxiv.org/abs/1512.03385
[12] DCGAN実装 : pytorch https://pystyle.info/pytorch-dcgan/
[14] ReLU : Glorot, X., Bordes, A., and Bengio, Y. (2011). Deep sparse rectifier neural networks. In AISTATS’2011.
[15] leakyReLU : Xu, Bing, et al. "Empirical evaluation of rectified activations in convolutional network." arXiv preprint (2015). arXiv url: https://arxiv.org/pdf/1505.00853.pdf
[18] table-GAN 実装: https://github.com/sdv-dev/TGAN
[20] Condensation method : C. C. Aggarwal and P. S. Yu. A condensation approach to privacy preserving data mining. In Proceedings of the 9th International Conference on Extending Database Technology, pages 183–199, 2004.
[21]  Los Angeles City Government Employee Payroll Dataset.
[26] ARX - Data Anonymization Tool : http://arx.deidentifier.org [27] sdcMicro: Statistical Disclosure Control Methods for Anonymization of Microdata and Risk Estimation. url: https://cran.r-project.org/web/packages/sdcMicro/index.html 論文: https://link.springer.com/book/10.1007/978-3-319-50272-4
[31] Membership 推論攻撃 : R. Shokri, M. Stronati, C. Song, and V. Shmatikov. Membership inference attacks against machine learning models. In 2017 IEEE Symposium on Security and Privacy, pages 3–18, May 2017. url:https://www.cs.cornell.edu/~shmat/shmat_oak17.pdf, arXiv url:https://arxiv.org/abs/1610.05820 [32] Membership 推論攻撃解説 : https://jpsec.ai/miattack/