CTGAN(Modeling Tabular Data using Conditional GAN读书笔记)有实验代码

摘要

  对表格数据中行的概率分布进行建模并生成真实的合成数据是一项非常重要的任务,有着许多挑战。本文设计了CTGAN,使用条件生成器解决挑战。为了帮助进行公平和彻底的比较建模这类数据的方法,本文设计了一个基准测试,包括7个模拟数据集和8个真实数据集,以及几个贝叶斯网络基线。CTGAN在大多数真实数据集上都优于贝叶斯方法,而其他深度学习方法则不然。

介绍

  GAN在建模分布方面比其统计对应方法具有更大的灵活性。新的GAN方法的激增需要一个评估机制

  • 为了评估这些GAN,本文使用了一组真实的数据集来建立一个基准系统,并实现了三种最新的技术
  • 为了进行比较,本文使用贝叶斯网络创建了两种基准方法

  在使用模拟数据集和真实数据集对这些模型进行测试后,我们发现,表格数据建模对GAN提出了独特的挑战,导致它们在许多指标上无法达到基线方法,如合成生成数据的可能性适合度机器学习效率。这些挑战包括:

  • 需要同时对离散列和连续列进行建模
  • 每个连续列中的多模态非高斯值
  • 以及类别列的严重不平衡问题
      为了应对这些挑战,在本文中提出了条件表格GAN(CTGAN)。引入了几种新技术方法:
  • 通过针对模式的归一化架构更改来增强训练过程。
  • 通过使用条件生成器采样训练来解决数据不平衡问题。

  当使用有基准测试的相同数据集时,CTGAN的性能明显优于贝叶斯网络基线和其他测试的GAN。如下图所示。
在这里插入图片描述
论文的贡献如下:

  • 一个用于合成表格数据生成的条件GAN。本文建议CTGAN作为一个合成表格数据生成器由于以下几点:
    - CTGAN比迄今为止的所有方法都要好,在至少87.5%的数据集上超过了贝叶斯网络。
    - 为了进一步挑战CTGAN,采用变分自动编码器(VAE)来生成混合类型的表格数据,称之为TVAE。VAE直接使用数据构建生成器;即使有这样的优势,CTGAN在许多数据集上都实现了有竞争力的性能,并且在3个数据集上优于TVAE。
  • 一个合成数据生成算法的基准测试系统。使用多个表格数据集和不同的评估指标,以及多个基线和最先进方法的实现,设计了一个全面的基准框架。同时系统是开源的,可以用其他方法和额外的数据集进行扩展。在撰写本文时,基准有5种深度学习方法2种贝叶斯网络方法15个数据集2种评估机制

相关工作

  在过去的十年中,合成数据是通过将表格中的每一列视为随机变量,对联合多元概率分布进行建模,然后从该分布中进行采样而生成的。

  • 一组离散变量可能使用决策树和贝叶斯网络建模。
  • 空间数据可以用空间分解树建模。
  • 一组非线性相关的连续变量可以使用copulas建模。

  这些模型受到分布类型和计算问题的限制,严重限制了合成数据的理想性。
  由于在表示数据时提供的性能和灵活性,使用VAE和GANs及其众多扩展开发生成模型非常有吸引力。GANs还用于生成表格数据,尤其是医疗记录。例如

  • 使用GANs生成连续的时间序列医疗记录
  • 使用GANs生成离散的表格数据。
  • medGAN将自动编码器和GAN结合起来,生成异构的非时间序列连续和/或二进制数据。
  • ehrGAN生成增强的医疗记录。
  • tableGAN试图解决使用卷积神经网络生成合成数据的问题,该网络优化了标签列的质量;因此,生成的数据可用于训练分类器。
  • PATE-GAN生成不同的私有合成数据。

表格数据生成任务中的GANs挑战

符号说明
T T T表格
G G G数据生成器
T s y n T_{syn} Tsyn生成表格
{ C 1 , … , C N c } \left\{C_{1}, \ldots, C_{N_{c}}\right\} {C1,,CNc}表格 T T T中的 N c N_c Nc个连续列
{ D 1 , … , D N d } \left\{D_{1}, \ldots, D_{N_{d}}\right\} {D1,,DNd}表格 T T T中的 N d N_d Nd个离散列
P ( C 1 : N c , D 1 : N d ) \mathbb{P}\left(C_{1: N_{c}}, D_{1: N_{d}}\right) P(C1:Nc,D1:Nd)每一列都被认为是一个随机变量,这些随机变量遵循未知的联合分布
r j = { c 1 , j , … , c N c , j , d 1 , j , … , d N d , j } , j ∈ { 1 , … , n } \mathbf{r}_{j}=\left\{c_{1, j}, \ldots, c_{N_{c}, j}, d_{1, j}, \ldots, d_{N_{d}, j}\right\}, j \in\{1, \ldots, n\} rj={c1,j,,cNc,j,d1,j,,dNd,j},j{1,,n}每一行,即联合分布的一个观察结果
T t r a i n T_{train} Ttrain T T T中分割出的训练集
T t e s t T_{test} Ttest T T T中分割出的测试集

  在 T t r a i n T_{train} Ttrain上训练 G G G后,通过使用 G G G独立采样rows来构建 T s y n T_{syn} Tsyn。本文沿着两个方向评估生成器的效能:

  • Likelihood fitness: T s y n T_{syn} Tsyn中的列是否遵循与 T t r a i n T_{train} Ttrain相同的联合分布 ?
  • Machine learning efficacy:当使用其他列作为特征预测一列去训练一个分类器/回归器时,在 T t e s t T_{test} Ttest上进行测试,从 T s y n T_{syn} Tsyn上学习的分类器/回归器能否获得与在 T t r a i n T_{train} Ttrain上学习的分类器/回归器相似的性能?

CTGAN 模型代码在此
基准代码在此

表格数据的几个独特特性GAN模型的设计提出了挑战

  1. 混合的数据类型:现实世界的表格数据由多种类型组成。为了同时生成离散列和连续列的混合,GANs必须将softmaxtanh都应用于输出。
  2. 非高斯分布:图像中,像素值遵循类高斯分布,可以使用最小-最大变换归一化为[−1,1]。tanh函数通常用于网络的最后一层,以输出该范围内的值。表格数据中的连续值通常是非高斯的,其中最小-最大变换将导致消失梯度问题
  3. 多模式分布:本文使用核密度估计来估计列中的模式数。但是在8个真实数据集中,57/123连续列有多种模式。有论文表明原始GAN无法在一个简单的2D数据集上对所有模式进行建模。因此,它也很难对连续列的多模式分布进行建模
  4. 从稀疏独热编码向量中学习:当生成合成样本时,使用softmax训练生成模型生成各个类别的概率分布,而真实数据则用独热向量表示。这是有问题的,因为鉴别器只会检查分布稀疏性而不会考虑样本整体的真实性
  5. 高度不平衡的分类列:在数据集中,有636/1048个分类列是高度不平衡的,其中主类别出现在90%以上的行中。这会造成严重的模式崩溃。缺少一个次要类别只会导致数据分布发生微小变化,鉴别器很难检测到这些变化。不平衡的数据还导致小类别训练不足

CTGAN模型

  CTGAN是一种基于GAN的方法,用于对表格数据分布建模从分布中采样。在CTGAN中发明了针对模式的归一化,以克服非高斯和多模式分布。设计了一个条件生成器通过采样进行训练,以处理不平衡的离散列。使用全连接网络和几种最新技术来训练高质量的模型。

符号表

符号说明
x 1 ⊕ x 2 ⊕ … x_{1} \oplus x_{2} \oplus \ldots x1x2向量 x 1 , x 2 , … x_1,x_2,\ldots x1,x2,串联
g u m b e l τ ( x ) gumbel_{\tau}(x) gumbelτ(x)在向量 x x x上应用参数为 τ τ τ的Gumbel softmax
l e a k y γ ( x ) leaky_{\gamma}(x) leakyγ(x)在向量 x x x上应用leaky率为 γ \gamma γ的leaky ReLU激活函数
F C u → v ( x ) \mathrm{FC}_{u \rightarrow v}(x) FCuv(x) u u u维输入应用线性变换以获得 v v v维输出

  同时也使用了tanh、ReLU、softmax,BN用于进行批量归一化,dropout用于进行丢弃。

针对模式的归一化

  离散值可以自然地表示为独热向量,但表示有着任意分布的连续值是非常重要的。以前的模型使用最小-最大归一化将连续值归一化为[−1, 1]。 在CTGAN中设计了一种针对模式的归一化方法来处理具有复杂分布的列。
  下图展示对一个连续列使用针对模式的归一化方法。
在这里插入图片描述

  CTGAN的方法中,每列都是独立处理。每个值都被表示为一个指定模式的独热向量和一个指定模式内值的标量。一共包含三步:

  1. 对于每个连续列 C i C_i Ci,使用变分高斯混合模型(VGM)估计模式数量 m i m_i mi并拟合高斯混合。例如,在Figure 1中,VGM找到3种模式( m i = 3 m_i=3 mi=3),命名为 η 1 , η 2 \eta_{1}, \eta_{2} η1,η2 and η 3 \eta_{3} η3 。学习到的高斯混合为 P C i ( c i , j ) = ∑ k = 1 3 μ k N ( c i , j ; η k , ϕ k ) \mathbb{P}_{C_{i}}\left(c_{i, j}\right)=\sum_{k=1}^{3} \mu_{k} \mathcal{N}\left(c_{i, j} ; \eta_{k}, \phi_{k}\right) PCi(ci,j)=k=13μkN(ci,j;ηk,ϕk),其中 μ k \mu_{k} μk ϕ k \phi_{k} ϕk分别为模式的权重标准偏差
  2. 对于 C i C_i Ci中的每个值 C i , j C_{i,j} Ci,j计算来自每个模式的概率。例如,在Figure 1中,概率密度是 ρ 1 , ρ 2 , ρ 3 \rho_1, \rho_2, \rho_3 ρ1,ρ2,ρ3。概率密度的计算为 ρ k = μ k N ( c i , j ; η k , ϕ k ) \rho_{k}=\mu_{k} \mathcal{N}\left(c_{i, j} ; \eta_{k}, \phi_{k}\right) ρk=μkN(ci,j;ηk,ϕk)
  3. 从给定的概率密度中采样一个模式,并使用采样模式对值进行归一化。例如,在图1中,我们选择给定 ρ 1 , ρ 2 , ρ 3 \rho_1, \rho_2, \rho_3 ρ1,ρ2,ρ3的第三个模式。然后我们将 c i , j c_{i,j} ci,j表示为独热向量 β i , j = [ 0 , 0 , 1 ] β_{i,j}=[0,0,1] βi,j=[0,0,1](表示第三个模式),以及一个标量 α i , j = c i , j − η 3 4 ϕ 3 \alpha_{i, j}=\frac{c_{i, j}-\eta_{3}}{4 \phi_{3}} αi,j=4ϕ3ci,jη3表示模式内的值。

那么一行数据的表示为
r j = α 1 , j ⊕ β 1 , j ⊕ … ⊕ α N c , j ⊕ β N c , j ⊕ d 1 , j ⊕ … ⊕ d N d , j \mathbf{r}_{j}=\alpha_{1, j} \oplus \beta_{1, j} \oplus \ldots \oplus \alpha_{N_{c}, j} \oplus \beta_{N_{c}, j} \oplus \mathbf{d}_{1, j} \oplus \ldots \oplus \mathbf{d}_{N_{d}, j} rj=α1,jβ1,jαNc,jβNc,jd1,jdNd,j
其中 d i , j d_{i,j} di,j为离散值的独热编码表示。

条件生成器和抽样训练

  传统上,GAN 中的生成器被输入一个从标准多元正态分布 (MVN)变量中采样的向量。 通过与鉴别器或批评者神经网络一起训练,最终获得将标准 MVN 映射到数据的确定性变换。 这种训练生成器的方法没有考虑分类列中的不平衡
  如果对训练数据进行随机抽样,则属于次要的行类别将无法充分表示,因此可能无法正确训练生成器。
  如果对训练数据进行重采样,生成器学习与训练数据不同的重采样分布真实数据分布。
  目标是以一种方式有效地重采样,即在训练过程中有规律地(但不必均匀地)采样离散属性中的所有类别,并在测试过程中恢复(未重采样的)真实数据分布。让 k ∗ k^* k为来自第 i ∗ i^* i个离散列 D i ∗ D_{i^∗} Di的值,这个值必须与生成的样本 r ^ \hat{r} r^ 匹配,那么生成器可以被解释为给定的特定列特定值 行的条件分布,即 r ^ ∼ P G ( r o w ∣ D i ∗ = k ∗ ) \hat{\mathbf{r}} \sim \mathbb{P}_{\mathcal{G}}\left(\mathrm{row} \mid D_{i *}=k^{*}\right) r^PG(rowDi=k)。 因此,在本文中,我们将其命名为条件生成器,在此基础上构建的GAN称为条件GAN。

  将条件生成器集成到GAN的体系结构中需要处理以下问题:

  • 需要设计条件的表示,并为其准备输入
  • 生成的行需要保留给定的条件
  • 条件生成器需要学习真实数据的条件分布,即 P G ( \mathbb{P}_{\mathcal{G}}\left(\right. PG( row ∣ D i ∗ = k ∗ ) = P ( \left.\mid D_{i *}=k^{*}\right)=\mathbb{P}\left(\right. Di=k)=P( row ∣ D i ∗ = k ∗ ) \left.\mid D_{i *}=k^{*}\right) Di=k), 这样我们就可以重建原始分布为
    P ( r o w ) = ∑ k ∈ D i ∗ P G ( r o w ∣ D i ∗ = k ∗ ) P ( D i ∗ = k ) \mathbb{P}(row)=\sum_{k \in D_{i^{*}}} \mathbb{P}_{\mathcal{G}}\left(\right.row\left.\mid D_{i *}=k^{*}\right) \mathbb{P}\left(D_{i^{*}}=k\right) P(row)=kDiPG(rowDi=k)P(Di=k)

  文章提出了一个由三个关键元素组成的解决方案,即:条件向量、生成器损失和采样训练法。

  1. 条件向量:引入变量 c o n d cond cond作为指定条件 ( D i ∗ = k ∗ ) (D_{i^*} = k^*) Di=k的方式。
    i i i个独热向量为 d i = [ d i ( k ) ] \mathbf{d}_{i}=\left[\mathbf{d}_{i}^{(k)}\right] di=[di(k)], for k = 1 , … , ∣ D i ∣ k=1, \ldots,\left|D_{i}\right| k=1,,Di。让 m i = [ m i ( k ) ] \mathbf{m}_{i}=\left[\mathbf{m}_{i}^{(k)}\right] mi=[mi(k)], for k = 1 , … , ∣ D i ∣ k=1, \ldots,\left|D_{i}\right| k=1,,Di为独热向量的第 i i i个掩码向量。因此条件可用掩码向量表示为 m i ( k ) = { 1  if  i = i ∗  and  k = k ∗ 0  otherwise  \mathbf{m}_{i}^{(k)}= \begin{cases}1 & \text { if } i=i^{*} \text { and } k=k^{*} \\ 0 & \text { otherwise }\end{cases} mi(k)={10 if i=i and k=k otherwise 
    将向量 c o n d cond cond定义为 c o n d = m 1 ⊕ … ⊕ m N d cond =\mathbf{m}_{1} \oplus \ldots \oplus \mathbf{m}_{N_{d}} cond=m1mNd。例如,对于两个离散列, D 1 = 1 , 2 , 3 D_1={1,2,3} D1=1,2,3 D 2 = 1 , 2 D_2={1,2} D2=1,2,条件 ( D 2 = 1 ) (D_2=1) D2=1由掩码向量 m 1 = [ 0 , 0 , 0 ] m_1=[0,0,0] m1=[0,0,0] m 2 = [ 1 , 0 ] m_2=[1,0] m2=[1,0]表示;所以 c o n d = [ 0 , 0 , 0 , 1 , 0 ] cond=[0,0,0,1,0] cond=[0,0,0,1,0]

  2. 生成器损失:在训练期间,条件生成器可以自由地生成任意独热离散向量集合 { d ^ 1 , … , d ^ N d } \left\{\hat{\mathbf{d}}_{1}, \ldots, \hat{\mathbf{d}}_{N_{d}}\right\} {d^1,,d^Nd}。特别是,给定 c o n d cond cond向量形式的条件 ( D i ∗ = k ∗ ) (D_{i^∗} = k^∗) (Di=k),再产生 d ^ i ∗ ( k ) = { 1  if  and  k ≠ k ∗ 0  otherwise  \mathbf{\hat{d}}_{i^*}^{(k)}= \begin{cases}1 & \text { if } \text { and } k\not=k^{*} \\ 0 & \text { otherwise }\end{cases} d^i(k)={10 if  and k=k otherwise 
    为了强制条件生成器生成 d ^ i ∗ = m i ∗ \mathbf{\hat{d}}_{i^*} = \mathbf{m}_{i^*} d^i=mi,通过增加 d ^ i ∗ \mathbf{\hat{d}}_{i^*} d^i m i ∗ \mathbf{m}_{i^*} mi之间的交叉熵,对批处理的所有实例求平均来惩罚损失。

  3. 采样训练法:条件产生器产生的输出必须由鉴别器评估,鉴别器估计学习到的条件分布 P G ( \mathbb{P}_{\mathcal{G}}\left(\right. PG( row ∣ D i ∗ = k ∗ ) \left.\mid D_{i *}=k^{*}\right) Di=k)和实际数据上的条件分布 P ( \mathbb{P}\left(\right. P( row ∣ D i ∗ = k ∗ ) \left.\mid D_{i *}=k^{*}\right) Di=k)之间的距离。真实训练数据的采样和条件向量的构造应符合帮助鉴别器估计距离的要求。适当地采样 c o n d cond cond向量和训练数据可以帮助模型均匀地探索离散列中所有可能的值。出于以上目的,建议采取以下步骤:

    1. 创建 N d N_d Nd个0填充掩码向量 m i = [ m i ( k ) ] k = 1 … ∣ D i ∣ \mathbf{m}_{i}=\left[\mathbf{m}_{i}^{(k)}\right]_{k=1 \ldots\left|D_{i}\right|} mi=[mi(k)]k=1Di, for i = 1 , … , N d i=1, \ldots, N_{d} i=1,,Nd,第i个掩码向量对应于第i列,每个分量都与该列的类别相关联。
    2. 以相同的概率从所有 N d N_d Nd离散列中随机选择一个离散列 D i D_i Di。让 i ∗ i^∗ i 成为所选列的索引。例如,在Figure 2中,所选列是 D 2 D_2 D2,因此 i ∗ = 2 i^*=2 i=2
    3. 在被选中的 D i ∗ D_{i^*} Di列,即第2列的值范围内构建PMF(概率质量函数)。每个值的概率质量是在列中频率的对数。
    4. k ∗ k^* k根据上述PMF随机选择一个值。例如,在Figure 2中,范围 D 2 D_2 D2有两个值,第一个值被选中,所以 k ∗ k^∗ k = 1。
    5. 设置第 i ∗ i^* i个掩码向量的第 k ∗ k^* k个元素为1,即 m i ∗ ( k ∗ ) = 1 \mathbf{m}_{i^*}^{(k^*)} = 1 mi(k)=1
    6. 计算向量 c o n d = m 1 ⊕ … m i ∗ ⊕ m N d cond =\mathbf{m}_{1} \oplus \ldots \mathbf{m}_{i^∗} \oplus \mathbf{m}_{N_{d}} cond=m1mimNd。例如,在Figure 2中,我们有掩码 m 1 = [ 0 , 0 , 0 ] m_1=[0,0,0] m1=[0,0,0] m 2 ∗ = [ 1 , 0 ] m_{2^∗} = [1,0] m2=[1,0],所以 c o n d = [ 0 , 0 , 0 , 1 , 0 ] cond=[0,0,0,1,0] cond=[0,0,0,1,0]
      在这里插入图片描述

网络框架

  由于一行中的列没有局部结构,所以在生成器和鉴别器中使用全连接网络来捕获列之间所有可能的关联
  具体来说,在生成器和鉴别器中都使用两个全连接的隐藏层
  在生成器中使用批处理归一化Relu激活函数
  在两个隐藏层之后,使用混合激活函数生成合成的行表示。
  标量值 α i \alpha_i αi t a n h tanh tanh生成,而模式指示符 β i \beta_i βi和离散值 d i \mathbf{d}_i di g u m b e l gumbel gumbel s o f t m a x softmax softmax生成。

  在鉴别器中,我们在每个隐藏层上使用 l e a k y leaky leaky r e l u relu relu函数和 d r o p o u t dropout dropout

  条件生成器被正式描述为:
{ h 0 = z ⊕  cond  h 1 = h 0 ⊕ ReLU ⁡ ( B N ( F C ∣ cond  ∣ + ∣ z ∣ → 256 ( h 0 ) ) ) h 2 = h 1 ⊕ ReLU ⁡ ( B N ( F C ∣ cond  ∣ + ∣ z ∣ + 256 → 256 ( h 1 ) ) ) α ^ i = tanh ⁡ ( F C ∣ cond  ∣ + ∣ z ∣ + 512 → 1 ( h 2 ) ) 1 ≤ i ≤ N c β ^ i = gumbel ⁡ 0.2 ( F C ∣ cond  ∣ + ∣ z ∣ + 512 → m i ( h 2 ) ) 1 ≤ i ≤ N c d ^ i =  gumbel  0.2 ( F C ∣ cond  ∣ + ∣ z ∣ + 512 → ∣ D i ∣ ( h 2 ) ) 1 ≤ i ≤ N d \begin{cases}h_{0}=z \oplus \text { cond } & \\ h_{1}=h_{0} \oplus \operatorname{ReLU}\left(\mathrm{BN}\left(\mathrm{FC}_{\mid \text {cond }|+| z \mid \rightarrow 256}\left(h_{0}\right)\right)\right) & \\ h_{2}=h_{1} \oplus \operatorname{ReLU}\left(\mathrm{BN}\left(\mathrm{FC}_{\mid \text {cond }|+| z \mid+256 \rightarrow 256}\left(h_{1}\right)\right)\right) & \\ \hat{\alpha}_{i}=\tanh \left(\mathrm{FC}_{\mid \text {cond }|+| z \mid+512 \rightarrow 1}\left(h_{2}\right)\right) & 1 \leq i \leq N_{c} \\ \hat{\beta}_{i}=\operatorname{gumbel}_{0.2}\left(\mathrm{FC}_{\mid \text {cond }|+| z \mid+512 \rightarrow m_{i}}\left(h_{2}\right)\right) & 1 \leq i \leq N_{c} \\ \hat{\mathbf{d}}_{i}=\text { gumbel }_{0.2}\left(\mathrm{FC}_{\mid \text {cond }|+| z|+512 \rightarrow| D_{i} \mid}\left(h_{2}\right)\right) & 1 \leq i \leq N_{d}\end{cases} h0=z cond h1=h0ReLU(BN(FCcond +z256(h0)))h2=h1ReLU(BN(FCcond +z+256256(h1)))α^i=tanh(FCcond +z+5121(h2))β^i=gumbel0.2(FCcond +z+512mi(h2))d^i= gumbel 0.2(FCcond +z+512Di(h2))1iNc1iNc1iNd

  本文使用PacGAN框架,每个pac中有10个样本,以防止模式崩溃。鉴别器(pac大小为10) C ( r 1 , … , r 10 , c o n d 1 , … , c o n d 10 ) C(r_1,…,r_{10},cond_1,…,cond_{10}) C(r1,,r10,cond1,,cond10)的体系结构可以正式描述为
{ h 0 = r 1 ⊕ … ⊕ r 10 ⊕ cond ⁡ 1 ⊕ … ⊕ cond ⁡ 10 h 1 = drop ⁡ ( l  eaky  0.2 ( F C 10 ∣ r ∣ + 10 ∣  cond  ∣ → 256 ( h 0 ) ) ) h 2 = drop ⁡ ( l  eaky  0.2 ( F C 256 → 256 ( h 1 ) ) ) C ( ⋅ ) = F C 256 → 1 ( h 2 ) \left\{\begin{array}{l} h_{0}=\mathbf{r}_{1} \oplus \ldots \oplus \mathbf{r}_{10} \oplus \operatorname{cond}_{1} \oplus \ldots \oplus \operatorname{cond}_{10} \\ h_{1}=\operatorname{drop}\left(l \text { eaky }_{0.2}\left(\mathrm{FC}_{10|\mathbf{r}|+10 \mid \text { cond } \mid \rightarrow 256}\left(h_{0}\right)\right)\right) \\ h_{2}=\operatorname{drop}\left(l \text { eaky }_{0.2}\left(\mathrm{FC}_{256 \rightarrow 256}\left(h_{1}\right)\right)\right) \\ \mathcal{C}(\cdot)=\mathrm{FC}_{256 \rightarrow 1}\left(h_{2}\right) \end{array}\right. h0=r1r10cond1cond10h1=drop(l eaky 0.2(FC10r+10 cond 256(h0)))h2=drop(l eaky 0.2(FC256256(h1)))C()=FC2561(h2)
  本文使用带梯度惩罚的WGAN损失来训练模型,Adam优化器,学习率为 2 × 1 0 − 4 2\times10^{−4} 2×104

TVAE 模型

  变分自动编码器是另一种神经网络生成模型。通过使用相同的预处理和修改损失函数,我们使VAE适应表格数据。我们称之为TVAE模型。
  在TVAE中,我们使用两个神经网络来建模 p θ ( r j ∣ z j ) p_θ(r_j | z_j) pθ(rjzj) q φ ( z j ∣ r j ) q_φ(z_j | r_ j) qφ(zjrj),并使用证据下限 ( E L B O ) (ELBO) (ELBO)损失对它们进行训练。

  网络 p θ ( r j ∣ z j ) p_θ(r_j | z_j) pθ(rjzj)的设计需要以不同的方式进行,以便能够准确地建模概率。具体设计是神经网络输出 2 N c + N d 2N_c+N_d 2Nc+Nd个变量的联合分布,对应于 2 N c + N d 2N_c+N_d 2Nc+Nd个变量 r j r_j rj。我们假设 α i , j α_{i,j} αi,j服从具有不同均值和方差的高斯分布。所有的 β i , j β_{i,j} βi,j d i , j d_{i,j} di,j都遵循一个分类的PMF。
{ h 1 = ReLU ⁡ ( F C 128 → 128 ( z j ) ) h 2 = ReLU ⁡ ( F C 128 → 128 ( h 1 ) ) 1 ≤ i ≤ N c α ˉ i , j = tanh ⁡ ( F C 128 → 1 ( h 2 ) ) 1 ≤ i ≤ N c α ^ i , j ∼ N ( α ˉ i , j , δ i ) 1 ≤ i ≤ N c β ^ i , j ∼ softmax ⁡ ( F C 128 → m i ( h 2 ) ) 1 ≤ i ≤ N d d ^ i , j ∼ softmax ⁡ ( F C 128 → ∣ D i ∣ ( h 2 ) ) p θ ( r j ∣ z j ) = ∏ i = 1 N c P ( α ^ i , j = α i , j ) ∏ i = 1 N c P ( β ^ i , j = β i , j ) ∏ i = 1 N d P ( α ^ i , j = α i , j ) \left\{\begin{array}{lr} h_{1}=\operatorname{ReLU}\left(\mathrm{FC}_{128 \rightarrow 128}\left(z_{j}\right)\right) & \\ h_{2}=\operatorname{ReLU}\left(\mathrm{FC}_{128 \rightarrow 128}\left(h_{1}\right)\right) & 1 \leq i \leq N_{c} \\ \bar{\alpha}_{i, j}=\tanh \left(\mathrm{FC}_{128 \rightarrow 1}\left(h_{2}\right)\right) & 1 \leq i \leq N_{c} \\ \hat{\alpha}_{i, j} \sim \mathcal{N}\left(\bar{\alpha}_{i, j}, \delta_{i}\right) & 1 \leq i \leq N_{c} \\ \hat{\beta}_{i, j} \sim \operatorname{softmax}\left(\mathrm{FC}_{128 \rightarrow m_{i}}\left(h_{2}\right)\right) & 1 \leq i \leq N_{d} \\ \hat{\mathbf{d}}_{i, j} \sim \operatorname{softmax}\left(\mathrm{FC}_{128 \rightarrow\left|D_{i}\right|}\left(h_{2}\right)\right) & \\ p_{\theta}\left(\mathbf{r}_{j} \mid z_{j}\right)=\prod_{i=1}^{N_{c}} \mathbb{P}\left(\hat{\alpha}_{i, j}=\alpha_{i, j}\right) \prod_{i=1}^{N_{c}} \mathbb{P}\left(\hat{\beta}_{i, j}=\beta_{i, j}\right) \prod_{i=1}^{N_{d}} \mathbb{P}\left(\hat{\alpha}_{i, j}=\alpha_{i, j}\right) & \end{array}\right. h1=ReLU(FC128128(zj))h2=ReLU(FC128128(h1))αˉi,j=tanh(FC1281(h2))α^i,jN(αˉi,j,δi)β^i,jsoftmax(FC128mi(h2))d^i,jsoftmax(FC128Di(h2))pθ(rjzj)=i=1NcP(α^i,j=αi,j)i=1NcP(β^i,j=βi,j)i=1NdP(α^i,j=αi,j)1iNc1iNc1iNc1iNd
   α ^ i , j , β ^ i , j , d ^ i , j \hat{α}_{i,j},\hat{β}_{i,j},\hat{d}_{i,j} α^i,j,β^i,j,d^i,j是随机变量。 p θ ( r j ∣ z j ) p_θ(r_j|z_j) pθ(rjzj)是这些变量的联合分布。在 p θ ( r j ∣ z j ) p_θ(r_j|z_j) pθ(rjzj)中,权重矩阵和 δ i δ_i δi是网络中的参数。这些参数使用梯度下降法进行训练。
  对 q ϕ ( z j ∣ r j ) q_{\phi}\left(z_{j} \mid \mathbf{r}_{j}\right) qϕ(zjrj)的建模与条件VAE相似。
{ h 1 = ReLU ⁡ ( F C ∣ r j ∣ → 128 ( r j ) ) h 2 = ReLU ⁡ ( F C 128 → 128 ( h 1 ) ) μ = F C 128 → 128 ( h 2 ) σ = exp ⁡ ( 1 2 F C 128 → 128 ( h 2 ) ) q ϕ ( z j ∣ r j ) ∼ N ( μ , σ I ) \left\{\begin{array}{l} h_{1}=\operatorname{ReLU}\left(\mathrm{FC}_{\left|\mathbf{r}_{j}\right| \rightarrow 128}\left(\mathbf{r}_{j}\right)\right) \\ h_{2}=\operatorname{ReLU}\left(\mathrm{FC}_{128 \rightarrow 128}\left(h_{1}\right)\right) \\ \mu=\mathrm{FC}_{128 \rightarrow 128}\left(h_{2}\right) \\ \sigma=\exp \left(\frac{1}{2} \mathrm{FC}_{128 \rightarrow 128}\left(h_{2}\right)\right) \\ q_{\phi}\left(z_{j} \mid \mathbf{r}_{j}\right) \sim \mathcal{N}(\mu, \sigma \mathbf{I}) \end{array}\right. h1=ReLU(FCrj128(rj))h2=ReLU(FC128128(h1))μ=FC128128(h2)σ=exp(21FC128128(h2))qϕ(zjrj)N(μ,σI)
  TVAE使用Adam进行培训,学习率为1e-3。

基准测试合成数据生成算法

  表格数据建模有多种深度学习方法。但所有方法及其相应的论文既没有使用相同的数据集,也没有在类似的指标下进行评估。这一事实使得比较方法具有挑战性,并且无法识别每种方法相对于表格数据建模时提出的内在挑战的弱点和优势。为了解决这个问题,我们开发了一套全面的基准测试套件

基线和数据集

  在基准测试套件中有由贝叶斯网络(CLBN、PrivBN)和当前用于合成数据生成的深度学习方法(MedGAN、VeeGAN、TableGAN)组成的基线。我们将TVAE和CTGAN与这些基线进行比较。
  基准测试包含7个模拟数据集和8个真实数据集。

  • 模拟数据:我们手工制作了一个数据 oracle S S S来表示已知的联合分布,然后从 S S S中抽取 T t r a i n T_{train} Ttrain T t e s t T_{test} Ttest。这个oracle是高斯混合模型贝叶斯网络。我们生成 G r i d Grid Grid R i n g Ring Ring高斯混合oracle。我们将随机偏移添加到 G r i d Grid Grid的每个模式中,并将其称为 G r i d R GridR GridR。我们选取了4个著名的贝叶斯网络——alarm, child, asia, insurance——并构建了贝叶斯网络oracle。
  • 真实数据集:我们从UCI机器学习库中选取了6个常用的以表格形式列出了特征和标签列机器学习数据集——adult, census, covertype,
    intrusion
    news,从Kaggle那里获得了credit
    我们还对MNIST数据集进行了28×28的二值化,并将每个样本转换为784维特征向量加上一个标签列,以模拟高维二值数据,称为MNIST28。我们将图像的大小调整为12×12,并使用相同的过程生成一个我们称为MNIST12的数据集。总之,我们的基准测试套件中有8个真实的数据集。

模拟数据集:

  • oracle (高斯混合模型贝叶斯网络
  • G r i d Grid Grid高斯混合oracle
  • R i n g Ring Ring高斯混合oracle
  • alarm(著名的贝叶斯网络)
  • child(著名的贝叶斯网络)
  • asia(著名的贝叶斯网络)
  • insurance(著名的贝叶斯网络)

真实数据集:

  • adult(UCI机器学习库常用数据集)
  • census(UCI机器学习库常用数据集)
  • covertype(UCI机器学习库常用数据集)
  • intrusion(UCI机器学习库常用数据集)
  • news(UCI机器学习库常用数据集)
  • credit(Kaggle中获取)
  • MNIST28(MINIST数据集二值化)
  • MNIST12(MINIST数据集二值化)

评估指标和框架

在这里插入图片描述

  模拟数据的概率分布已知,可以通过似然适应度度量(Likelihood fitness metric)来评估生成的合成数据。
  真实数据集,有一个机器学习任务,我们通过机器学习效率(Machine learning efficacy)评估合成数据生成方法。

  • Likelihood fitness metric:在模拟数据上,我们利用模拟数据oracle S来计算似然适应度度量。计算 S S S T s y n T_{syn} Tsyn的似然度为 L s y n L_{syn} Lsyn L s y n L_{syn} Lsyn倾向于过拟合模型。
    为了克服这个问题,使用另一个指标 L t e s t L_{test} Ltest。使用 T s y n T_{syn} Tsyn重新训练模拟数据oracle S ′ S' S S ′ S' S S S S结构相同,参数不同。如果 S S S是高斯混合模型,我们使用相同数量的高斯分量,并重新训练每个分量的均值和协方差。如果 S S S是一个贝叶斯网络,我们保持相同的图形结构,并在每条边上学习一个新的条件分布。那么 L t e s t L_{test} Ltest是在 S ′ S' S T t e s t T_{test} Ttest的似然度 。该指标克服了 L s y n L_{syn} Lsyn中的问题。它可以检测模式崩溃。但这个度量引入了不一定是用 T s y n T_{syn} Tsyn编码的 S ′ S' S结构的先验知识。
  • Machine learning efficacy:真实数据集无法计算似然适应度,所以评估使用合成数据作为机器学习训练数据的性能。在 T s y n T_{syn} Tsyn上训练预测模型,并使用 T t e s t T_{test} Ttest测试预测模型。我们使用精确度F1评估分类任务的性能,并使用R2评估回归任务。对于每个数据集选择在每个数据上实现合理性能的分类器或回归器。因为不试图选择最佳分类或回归模型,所以采用多个预测模型的平均性能来评估生成器G的指标。

基准结果

  使用基准框架评估了CLBN、PrivBN、MedGAN、VeeGAN、TableGAN、CTGAN和TVAE。
  对每个模型进行了batch_size=500的培训。
  每个模型都经过300个epoch的训练。
  每个epoch包含 N b a t c h _ s i z e \frac{N}{batch\_size} batch_sizeN个步骤,其中N是训练集的行数。我们假设,对于任何数据集,除了 L s y n L_{syn} Lsyn之外的任何指标, T t r a i n T_{train} Ttrain都能实现最佳性能。因此,我们提出了输出 T t r a i n T_{train} Ttrain的Identity方法。基准测试结果如下图所示:
在这里插入图片描述
  对于高斯混合的模拟数据,CLBN和PrivBN因为在使用贝叶斯网络建模之前必须对连续的数值数据进行离散化会受到影响。MedGAN、VeeGAN和TableGAN由于模式崩溃会受到影响。但通过特定于模式的规范化,CTGAN模型在这些二维连续数据集上表现良好
  在贝叶斯网络的模拟数据上,CLBN和PrivBN具有天然优势。与MedGAN和TableGAN相比,CTGAN实现了略好的性能。TableGAN在这些数据集上运行良好,尽管它将离散列视为连续值。其中一个可能的原因是,在模拟数据中,大多数变量的类别少于4个,因此转换不会造成严重问题。
  在真实数据集上,TVAE和CTGAN的表现优于CLBN和PrivBN,而其他GAN模型的效果不如贝叶斯网络。对于大规模真实数据集,学习高质量的贝叶斯网络是困难的。因此,基于CLBN和PrivBN合成数据训练的模型比基于真实数据训练的模型差36.1%和51.8%。
  TVAE在某些情况下优于CTGAN,但GAN确实有几个有利的属性,这并不意味着我们应该总是使用VAE而不是GaN来建模表。GANs中的生成器在整个培训过程中无法访问真实数据可以让CTGAN比TVAE更容易实现差异隐私

消融实验

  我们做了一项消融实验,以了解模型中每个组件的有用性。消融实验结果如下。
在这里插入图片描述
  针对模式的归一化。在CTGAN中使用变分高斯混合模型(VGM)对连续列进行归一化。我们将其与
(1)GMM5:具有5个模式的高斯混合模型。
(2)GMM10:具有10个模式的高斯混合模型.
(3)最小-最大:最小-最大归一化到 [ − 1 , 1 ] [−1, 1] [1,1]
  使用GMM会略微降低性能,而最小-最大规格化的性能最差。

  条件生成器和抽样训练:我们依次删除这两个组件,
(1) w / o S w/o S w/oS.:我们首先在训练中禁用采样训练,但生成器仍然得到一个条件向量,其损失函数仍然具有交叉熵项。条件向量从训练数据频率而不是对数频率中采样
(2) w / o C w/o C w/oC:进一步删除生成器中的条件向量的结果表明,采样训练和条件生成器对于不平衡数据集都至关重要。尤其是在高度不平衡的数据集(如 c r e d i t credit credit)上,消除抽样训练导致F1指标为0%。

网络架构:本文中使用WGANGP+PacGAN。将其与三种替代品进行比较,仅WGANGP、仅原始GAN损失原始GAN+PacGAN。我们观察到,WGANP比原始GAN更适合于合成数据任务而PacGAN有助于原始GAN的损失,但对WGANP不那么重要。

讨论

  本文试图找到一个灵活和稳健的模型来学习具有复杂分布的列的分布。作者观察到现有的深度生成模型中没有一个能比将连续值离散和贪婪学习的贝叶斯网络更好。于是展示了使这项任务独特的几个特性,并提出了CTGAN模型。
  从经验上看,CTGAN模型可以比贝叶斯网络更好地学习分布。针对模式归一化可以将任意范围和分布的连续值转换为适合神经网络的有界向量表示。条件生成器和采样训练可以克服训练数据不平衡的问题。此外,作者认为条件生成器可以帮助生成具有特定离散值的数据,这些离散值可用于数据扩充。
  未来的工作是从理论上证明为什么GANs可以处理离散和连续数据的分布。

CTGAN训练算法

在这里插入图片描述

  • 19
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值