精华内容
下载资源
问答
  • 生成对抗网络判别器Generative models have been used in a myriad of applications across different domains — starting from quantitative finance to model and minimize tail risk to hydro-climate ...

    生成对抗网络的判别器

    Generative models have been used in a myriad of applications across different domains — starting from quantitative finance to model and minimize tail risk to hydro-climate research to study the joint effects of extreme weather. The power of generative models lies in its ability to encapsulate the entire dependence structure and the underlying probability distribution of the datasets. This is very useful because, using generative models we can not only create future representations of datasets, but also sample new realistic data points that preserves the cross correlation across the original training dataset.

    摹 enerative车型已经在跨越不同领域无数的应用中使用-开始从量变到财务模型,并尽量减少尾部风险水文气候研究,研究极端天气的共同作用。 生成模型的能力在于它能够封装整个依存结构和数据集的潜在概率分布。 这非常有用,因为使用生成模型,我们不仅可以创建数据集的将来表示形式,还可以采样新的现实数据点,从而保留原始训练数据集之间的互相关性。

    Generative Adversarial Networks (GANs) are a new class of generative models that was first introduced by Goodfellow et al. (2014). Since then, GANs have found widespread adoption within the machine learning community to solve unsupervised machine learning problems including image/text generation and translation. In this article, let us explore how we can use GANs to model discrete-time stochastic processes, and on-demand create plausible samples to construct synthetic time series of weather data.

    生成对抗网络(GAN)是一类新的生成模型,最早由Goodfellow等人引入 (2014年) 。 从那时起,GAN已在机器学习社区中得到广泛采用,以解决无监督的机器学习问题,包括图像/文本生成和翻译。 在本文中,让我们探索如何使用GAN来建模离散时间随机过程,并按需创建合理的样本来构建天气数据的合成时间序列。

    GAN的简要回顾: (Brief Review of GAN’s:)

    Image for post
    Schematic Architecture of Generative Adversarial Networks (Image by Author) 生成对抗网络的示意性架构 (作者提供)

    GANs architecture comprise of two sub-modes called Generator (G) and Discriminator (D), that compete with each other with the goal of achieving Nash equilibrium through the training process. The Generator learns to map the latent space (e.g. Noise ~ N(0,1)) to the data space over which the given data samples are distributed, and the Discriminator evaluates the mapping done by the Generator. The principle role of the Generator is to generate synthetic data that mimics the training dataset to an extent where the Discriminator cannot distinguish the synthetic data from the real data.

    GAN架构包含两个子模式,分别称为Generator(G)Discriminator(D) ,它们相互竞争,目的是通过训练过程达到Nash平衡 。 生成器学习将潜在空间(例如,噪声〜N (0,1) )映射到在其上分发给定数据样本的数据空间,鉴别器评估生成器完成的映射。 生成器的主要作用是生成模仿训练数据集的合成数据,以使鉴别器无法将合成数据与真实数据区分开。

    The input to the Generator is a random noise vector x’ (usually a uniform or normal distribution). The noise vector is mapped to a new data space via Generator to obtain a fake sample, G(x’), which is a multi-dimensional vector. The Discriminator is a binary classifier that takes in both the synthetic G(x’) and the training (x) dataset and learn to classify them as fake and real. Optimal state of the GAN model is reached when the Discriminator cannot determine whether the data comes from the real dataset or the Generator.

    生成器的输入是随机噪声矢量x' (通常是均匀或正态分布)。 噪声向量通过Generator映射到新的数据空间,以获得伪样本G(x') ,它是多维向量。 鉴别器是一个二进制分类器,它吸收了合成G(x')和训练( x )数据集,并学习将它们分类为假的和真实的。 当判别器无法确定数据来自真实数据集还是生成器时,便会达到GAN模型的最佳状态。

    Several variations of GANs have been developed over time to address specific needs of the problem in hand, but all these variants employ Adversarial training that happens in two phases:

    随着时间的推移,已经开发了GAN的几种变体来解决当前问题的特定需求,但是所有这些变体均采用对抗性训练,该训练分为两个阶段:

    Phase I: Train the Discriminator and freeze the Generator. This is done by passing samples of both the real and fake data to the model and evaluate if the Discriminator can predict them correctly. During Phase I of the training process, the network will only do the forward pass and no back-propagation of error will be applied.

    第一阶段:训练鉴别器并冻结发生器。 这是通过将真实数据和虚假数据的样本传递到模型并评估鉴别器是否可以正确预测它们来完成的。 在训练过程的第一阶段,网络将仅进行前向传递,并且不会应用错误的反向传播。

    Phase II: In this phase we train the Generator, and freeze the Discriminator. This is done by optimizing the Generator to create realistic samples that would fool the the trained Discriminator from Phase I.

    第二阶段:在这一阶段中,我们训练生成器,并冻结鉴别器。 这是通过优化生成器来创建逼真的样本来完成的,该样本将使受过训练的鉴别器从第一阶段中消失。

    Once trained, the GANs model is optimized to produce synthetic time series that’s realistic enough to mimic the real time series data. After training, the Generative model can be used to create new plausible samples, on demand.

    经过训练后,GANs模型将经过优化,以生成足够逼真的模拟时间序列数据的合成时间序列。 训练后,可根据需要使用生成模型来创建新的合理样本。

    什么是随机天气生成器? (What is a stochastic weather generator?)

    Image for post
    Image by Author
    图片作者

    A stochastic weather generator is a statistical model that aims to produce synthetic time series of weather data of unlimited length for a location or a region based on analysing the statistical characteristics of weather in that region. Most stochastic weather generators use a combination of Markov procedure and frequency distribution of different weather variables.

    随机天气生成器是一种统计模型,旨在通过分析某个区域或某个区域的天气统计特征,生成该区域或区域无限长度的天气数据的合成时间序列。 大多数随机天气生成器结合使用马尔可夫过程和不同天气变量的频率分布。

    In climate modeling, multivariate distributions have been traditionally modeled using Copulas. A copula function is a multivariate distribution with standard uniform marginals. Any multivariate distribution can be written as a composition of its marginal distributions and its copula. For example, in a bivariate case, given two continuous random variables “x” and “y”, with marginal distributions “F” and “G”, and a joint distribution “Q”, there exists a copula “C” such that Q(x,y) = C[F(x),G(y)]

    在气候建模中,传统上使用Copulas对多元分布进行建模。 copula函数是具有标准均匀边际的多元分布。 任何多元分布都可以写成其边际分布和系数的组合。 例如,在双变量情况下,给定两个连续的随机变量“ x”“ y” ,边际分布为“ F”“ G” ,联合分布为“ Q” ,则存在系数“ C”使得Q (x,y)= C [F(x),G(y)]

    GANs offer a completely different framework to model multivariate distributions. Using a combination of Generative and Discriminative models, along with adversarial training, we would be able to transform noise into realistic weather data.

    GAN提供了一个完全不同的框架来建模多元分布。 结合生成模型和判别模型,再加上对抗性训练,我们将能够将噪声转换为真实的天气数据。

    数据: (Data:)

    For this study, we will use the total monthly precipitation from five weather stations located in the Bay Area, CA. For training the GAN model, we will use the monthly precipitation data from year 1893 to 2012 obtained from the NOAA’s USHCN database. The precipitation values are in hundredths of inches. We will focus on GANs ability to capture the spatial correlation across five weather stations by modeling the total monthly precipitation.

    在本研究中,我们将使用位于加利福尼亚州湾区的五个气象站的每月总降水量。 为了训练GAN模型,我们将使用从NOAA的USHCN数据库获得的1893年至2012年的月降水量数据。 降水值以百分之一英寸为单位。 通过模拟月总降水量,我们将重点关注GAN捕获五个气象站之间空间相关性的能力。

    Image for post
    Weather Stations in Bay Area (Image by Author) 湾区的气象站 (作者提供)

    模型: (Model:)

    For both the Generator and Discriminator components of the GAN, we will employ a three layer Sequential model. The latent vector would comprise of 20 values sampled from a normal distribution. We will use the popular ReLU activation function in the hidden layers, and train the model using mean absolute percentage error (MAPE) loss and the Adam version of stochastic gradient descent. To prevent model from overfitting, we will adopt Dropout regularization technique. Schematic of the the GANs architecture used in this study is shown below

    对于GAN的生成器和鉴别器组件,我们将采用三层顺序模型。 潜在向量将包含从正态分布采样的20个值。 我们将在隐藏层中使用流行的ReLU激活函数,并使用平均绝对百分比误差(MAPE)损失和随机梯度下降的Adam版本训练模型。 为了防止模型过度拟合,我们将采用Dropout正则化技术。 这项研究中使用的GANs架构示意图如下所示

    Image for post
    GAN Architecture (Image by Author) GAN建筑 (作者提供)

    Our model output will have 10,000 synthetic data samples with 5 output features corresponding to total monthly precipitation across Livermore, Berkeley, Napa, Petaluma and Santa Cruz locations. The model was implemented using Keras library in Python, and code snippets are provided below.

    我们的模型输出将包含10,000个合成数据样本,并具有5​​个输出特征,这些特征分别对应于Livermore,Berkeley,Napa,Petaluma和Santa Cruz位置的每月总降水量。 该模型是使用Python中的Keras库实现的,下面提供了代码段。

    # Function to generate "true" samples from original data
    def generate_real_samples(dataset, n_samples):
        ix = np.random.randint(0,dataset.shape[0]-n_samples) #choose random index to start the sequence of n_samples
        X = dataset.iloc[ix:ix+n_samples].values
        y = np.ones((n_samples,1)) #class lables is set to 1 for real samples
        return X, y
    
    
    # Function to generate "Fake" samples from a defined latent space
    def generate_latent_points(latent_dim, n_samples):
        #generate points in latent space
        x_input = np.random.randn(n_samples,latent_dim) #use "randn" for normal distribution and "rand" for uniform distribution
        x_input = x_input.reshape(n_samples,latent_dim)
        return x_input
    
    
    def generate_fake_samples(generator, latent_dim, n_samples):
        x_input = generate_latent_points(latent_dim, n_samples)
        X = generator.predict(x_input)
        y = np.zeros((n_samples,1)) #class label is set to 0 for fake samples
        return X, y
    
    
    # Define Generator
    def define_generator(latent_dim, nr_features):
        model = Sequential(name='Generator')
        model.add(Dense(64, activation='relu', kernel_initializer='he_uniform',input_dim=latent_dim, name='G-Input'))
        model.add(Dropout(0.25))
        model.add(Dense(32, activation='relu', name='G-Layer1'))
        model.add(Dropout(0.25))
        model.add(Dense(nr_features, activation='tanh', name='G-Output'))
        plot_model(model, show_shapes=True, to_file='G_Model.png')
        return model
    
    
    # Define Discriminator
    def define_discriminator(nr_features, opt):
        model = Sequential(name='Discriminator')
        model.add(Dense(64, activation = 'relu', kernel_initializer='he_uniform',input_dim=nr_features, name='D-Input'))
        model.add(Dropout(0.25))
        model.add(Dense(32, activation='relu', name='D-Layer1'))
        model.add(Dropout(0.25))
        model.add(Dense(1, activation = 'tanh', name='D-Output'))
        model.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['accuracy'])
        plot_model(model, show_shapes=True, to_file='D_Model.png')
        return model
    
    
    # Define GAN
    def define_GAN(generator, discriminator, opt):
        discriminator.trainable = False # make weights in the discriminator not trainable
        model = Sequential(name='GAN')
        model.add(generator)
        model.add(discriminator)
        model.compile(loss='mean_absolute_percentage_error', optimizer='adam') 
        plot_model(model, show_shapes=True, show_layer_names=True,expand_nested=True,dpi=200,to_file='GAN_Model.png')
        return model

    结果: (Results:)

    As mentioned in the introductory part of the article, one of the greatest strengths of GANs is its ability to generate data on demand. Using the trained GANs model, 10,000 new synthetic data points were generated for each of the five weather stations. The plots and table below compares the descriptive statistics of the actual data used for training the model and the synthetic data generated by the GANs model.

    如本文的引言部分所述,GAN的最大优势之一就是它能够按需生成数据。 使用训练有素的GAN模型,为五个气象站中的每个气象站生成了10,000个新的综合数据点。 下面的图和表比较了用于训练模型的实际数据和GANs模型生成的综合数据的描述统计量。

    Image for post
    Box-Plot of Precipitation Data Across Different Weather Stations (Actual) 跨不同气象站的降水数据箱线图(实际)
    Image for post
    Box-Plot of Precipitation Data Across Different Weather Stations (Synthetic) 跨不同气象站(合成)的降水数据箱线图
    Image for post
    Descriptive Statistics and Correlation Comparison Between Actual (Training) and Synthetic Data 实际(训练)与合成数据之间的描述性统计和相关比较

    A quick review of the model results show that the GAN model was able to learn the distribution of data at each of the weather stations relatively well, while simultaneously preserving the cross correlation across the stations. For Santa Cruz station, the modeled estimates are slightly higher than the observed values. But in general, the sample minium, lower quartile (25%), median (50%), upper quartile (75%), and sample maximum of the synthetic data are matching well with the corresponding statistics from the actual data. The performance of the GAN model can be further improved by optimizing the size of latent vector, number of layers, cost functions, training algorithm and activation functions.

    对模型结果的快速回顾表明,GAN模型能够较好地了解每个气象站的数据分布,同时保留了各个气象站之间的互相关性。 对于圣克鲁斯站,建模的估计值略高于观测值。 但是通常,合成数据的样本最小值,下四分位数(25%),中位数(50%),上四分位数(75%)和样本最大值与实际数据中的相应统计数据很好地匹配。 通过优化潜矢量的大小,层数,成本函数,训练算法和激活函数,可以进一步改善GAN模型的性能。

    基于GAN的数据增强: (GANs Based Data Augmentation:)

    For most of real world applications, data scarcity is one of the biggest bottlenecks to address. This is particularly true in the insurance and risk analytics domain where the problem of data scarcity is further compounded by the quality of data. GANs offer a powerful pre-trained modeling framework that can artificially synthesize new labeled data that can be used to develop better models and risk analytics. This study just scratches the surface of potential application of GANs for risk modeling. Stay tuned for more.

    对于大多数实际应用而言,数据稀缺是要解决的最大瓶颈之一。 在保险和风险分析领域尤其如此,因为数据质量问题进一步加剧了数据稀缺性的问题。 GAN提供了功能强大的预训练建模框架,可以人工合成新的标记数据,这些数据可用于开发更好的模型和风险分析。 这项研究只是摸索了GAN在风险建模中潜在应用的表面。 敬请期待更多。

    Thanks for reading this article! All feedbacks are appreciated. For any questions feel free to contact me.

    感谢您阅读本文! 感谢所有反馈。 如有任何疑问,请随时与我联系。

    If you liked this article, here are some other articles you may enjoy:

    如果您喜欢这篇文章,可以参考以下其他一些文章:

    翻译自: https://towardsdatascience.com/stochastic-weather-generator-using-generative-adversarial-networks-a9856b0f83ef

    生成对抗网络的判别器

    展开全文
  • DDcGAN:用于多分辨率图像融合的双判别器生成对抗网络

    📝论文下载地址

      [论文地址]

    🔨代码下载地址

      [GitHub-official-Tensorflow]
      [GitHub-unofficial-PyTorch]

    👨‍🎓论文作者

    Jiayi Ma,HanXu, Junjun Jiang, Xiaoguang Mei, and Xiao-Ping Zhang,Senior Member, IEEE

    📦模型讲解

    [背景介绍]

      GAN是Generative Adversarial Networks的缩写译为生成对抗模型,GAN最早是2014年提出的网络模型,有兴趣可以去看原文[Generative Adversarial Networks]。GAN在近几年是一个比较热门的研究话题,它可以生成想要的图片,如下图所示,可以将图片中原本的马或斑马互相交换,或者是夏天和冬天风景的互换:

      或者是近期比较热门的风格转换,可以把实际拍到的图片转换成油画、二次元等风格:


      另外还有图像的修复、换脸等应用,这里有几百种GAN的网络,可以访问[GAN-ZOO]
      传统的GAN主要由两部分组成:Generative Network和Adversarial Network也就是生成网络和判别网络,也叫生成器和判别器。在GAN中两个网络是单独进行训练。首先训练判别器,让判别器能够对图片的真假进行判别。之后训练生成器,通过生成器生成图像,利用判别器生成的图像进行判别。
      如果样本服从真实分布 P d a t a ( x ) P_{data}(x) Pdata(x),生成器会从样本 { x 1 , x 2 , . . . , x m } \{x^1,x^2,...,x^m\} {x1,x2,...,xm}的概率分布 P d a t a ( x ) P_{data}(x) Pdata(x)中学习由 θ \theta θ参数化的模型 P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ),其中 P m o d e l ( x ; θ ) P_{model}(x;\theta) Pmodel(x;θ)是高斯混合模型。生成样本的可能性定义如下: L = ∏ i = 1 m P m o d e l ( x i ; θ ) L=\prod_{i=1}^mP_{model}(x^i;\theta) L=i=1mPmodel(xi;θ)执行最大似然估计:
    θ ∗ = arg max ⁡ θ ∑ i = 1 m log ⁡ P m o d e l ( x i ; θ ) \theta^*=\argmax_\theta\sum_{i=1}^m\log P_{model}(x^i;\theta) θ=θargmaxi=1mlogPmodel(xi;θ)
      可以认为是使 P d a t a ( x ) P_{data}(x) Pdata(x) P m o d e l ( x ; θ ) P_{model}(x;θ) Pmodel(x;θ)之间的Kullback-Liebler方差最小化。但是,如果 P m o d e l ( x ; θ ) P_{model}(x;θ) Pmodel(x;θ)是更为复杂的概率分布,则很难计算其似然函数来执行最大似然估计。为了解决这个问题,GAN通过同时训练两个模型(生成器 G G G和判别器 D D D),通过对抗过程来估计生成模型。
      生成器是一个可以捕获数据分布并生成新样本的网络。如果输入从潜在空间采样的噪声 z z z,它将生成一个样本 x = G ( z ) x=G(z) x=G(z)。借助神经网络,由生成器生成的样本形成的概率分布 P G ( x ) P_G(x) PG(x)变得更加复杂。 G G G的训练目标是使 P G ( x ) P_G(x) PG(x) P d a t a ( x ) P_{data}(x) Pdata(x)尽可能接近,并且优化公式可以定义为:
    G ∗ = arg min ⁡ G D i v ( P G ( x ) , P d a t a ( x ) ) G^*=\argmin_GDiv(P_G(x),P_{data}(x)) G=GargminDiv(PG(x),Pdata(x))
    其中 D i v ( ⋅ ) Div(·) Div()表示两个分布之间的差异。但是,由于 P G P_G PG P d a t a P_{data} Pdata的公式未知,因此难以计算差异。
      判别器 D D D可以巧妙地用于解决此问题,因为它会判断样本来自训练数据而不是 G G G生成的概率。 D D D的目标函数可以表示为:
    D ∗ = arg max ⁡ D V ( G , D ) D^*=\argmax_DV(G,D) D=DargmaxV(G,D)
    其中 V ( G , D ) V(G,D) V(G,D)定义如下:
    V ( G , D ) = E x ∼ P d a t a [ log ⁡ D ( x ) ] + E x ∼ P G [ log ⁡ ( 1 − D ( x ) ) ] V(G,D)=\mathbb E_{x\sim P_{data}}[\log D(x)]+\mathbb E_{x\sim P_{G}}[\log (1-D(x))] V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x))]
      上式较大时意味着 P G P_G PG P d a t a P_{data} Pdata的Jensen-Shannon(JS)差异很大,并且易于区分。因此,可以将 G G G的优化公式转换为:
    G ∗ = arg ⁡ min ⁡ G max ⁡ D V ( G , D ) G^*=\arg\min_G\max_D V(G,D) G=argGminDmaxV(G,D)
      当训练 G G G时,判别器 D D D是固定的。 G G G D D D的对抗过程组成了一个两人游戏,其中 G G G试图欺骗 D D D,而 D D D被训练来辨别生成的数据。因此,生成的样本与真实数据越来越难以区分。
      如果生成器和判别器都以某种额外信息为条件,则GAN可以扩展为条件模型,这些信息可以是任何种类的辅助信息。可以通过提供额外信息作为附加输入层来执行条件化,并且将该模型定义为条件生成对抗网络,也就是条件GAN,cGAN。

    [论文解读]

      本文中作者提出了一种通过双判别器条件GAN(DDcGAN)的融合方法。

    [DDcGAN总体结构]

      作者提出的DDcGAN的整个过程如下图所示。

      给定可见图像 v v v和红外图像 i i i,作者假设可见图像 v v v的分辨率是红外图像 i i i分辨率的4×4倍。最终目标是学习以它们为条件的生成器 G G G,并鼓励生成的图像 G ( v , i ) G(v,i) G(v,i)足够实际和有用,以欺骗判别器。判别器的输出是一个概率,表示输入是真实数据不是生成器 G G G生成的概率。
       D v D_v Dv旨在将生成的图像与可见图像区分开,而 D i D_i Di则经过训练以区分原始的低分辨率红外图像 i i i和下采样(平均池化)的生成/融合图像。
      注意为了在生成器和判别器之间保持平衡,除了输入鉴别器外,作者不将源图像 v v v i i i作为附加/条件信息提供给 D v D_v Dv D i D_i Di。即每个判别器的输入层是包含样本数据的单通道,而不是同时包含样本数据和对应的源图像作为条件信息的两通道。因为当条件和待判别的样本相同时,判别任务被简化以判断输入图像是否相同,这对于神经网络来说太简单了。当生成器无法欺骗鉴别器时,对抗关系将无法建立,并且生成器将倾向于随机生成。 因此,该模型将失去其原始含义。注意作者的意思可能是判别器的设计输入的是一张图片,如果是源图 v v v或者 i i i那么判别器输出应该是“real”,如果输入是样本图像也就是 G G G生成的图像,判别器输出应该是是“fake”,这也就对应上面的结构图,两者要输入一个。如果样本图像在判别器后输出的是“real”的话就不会构成对抗关系了,应该是这个意思。如果大家认为我理解有误,可以评论告诉我。
      将下采样算符表示为 ψ ψ ψ,由两个平均池化层实现。,这两层的kernal_size为3×3,stride为2。因此, G G G的训练目标可以表述为最小化以下对抗目标:
    min ⁡ G max ⁡ D v , D i { E [ log ⁡ D v ( v ) ] + E [ log ⁡ ( 1 − D v ( G ( v , i ) ) ) ] + E [ log ⁡ D i ( i ) ] + E [ log ⁡ ( 1 − D i ( ψ G ( v , i ) ) ) ] } \min_G\max_{D_v,D_i}\{\mathbb E[\log D_v(v)]+\mathbb E[\log (1-D_v(G(v,i)))]\\ +\mathbb E[\log D_i(i)]+\mathbb E[\log(1-D_i(ψG(v,i)))]\} GminDv,Dimax{E[logDv(v)]+E[log(1Dv(G(v,i)))]+E[logDi(i)]+E[log(1Di(ψG(v,i)))]}
    相反,判别器的目的是使上式最大化。
      通过生成器 G G G和两个判别器( D v D_v Dv D i D_i Di)的对抗过程, P G P_G PG和两个实际分布(即 P V P_V PV P I P_I PI)之间的差异将同时变小,其中 P G P_G PG是生成样本的概率分布, P V P_V PV是可见图像的真实分布, P I P_I PI是红外图像的分布。

    [损失函数]

      在本文中,生成器不仅被训练来欺骗判别器,而且还被要求约束内容中生成的图像和源图像之间的相似性。 因此,生成器的损失函数由对抗损失 L G a d v \mathcal L^{adv}_G LGadv和内容损失 L c o n \mathcal L_{con} Lcon组成,权重 λ λ λ控制权衡:
    L G = L G a d v + λ L c o n L G a d v = E [ log ⁡ ( 1 − D v ( G ( v , i ) ) ) ] + E [ log ⁡ ( 1 − D i ( ψ G ( v , i ) ) ) ] \mathcal L_G=\mathcal L^{adv}_G+\lambda\mathcal L_{con}\\\mathcal L^{adv}_G=\mathbb E[\log(1-D_v(G(v,i)))]+\mathbb E[\log(1-D_i(ψG(v,i)))] LG=LGadv+λLconLGadv=E[log(1Dv(G(v,i)))]+E[log(1Di(ψG(v,i)))]
      作者使用Frobenius范数来约束融合而图像的强度信息,使其与输入的红外图像更相似。而融合图像的梯度信息则是由可见光继承,利用TV损失函数:
    L c o n = E [ ∣ ∣ ψ G ( v , i ) − i ∣ ∣ F 2 + η ∣ ∣ G ( v , i ) − v ∣ ∣ T V ] \mathcal L_{con}=\mathbb E[||ψG(v,i)-i||^2_F+η||G(v,i)-v||_{TV}] Lcon=E[ψG(v,i)iF2+ηG(v,i)vTV]
      上面是针对生成器的损失,下面是判别器 D v D_v Dv D i D_i Di的损失:
    L D v = E [ − log ⁡ D v ( v ) ] + E [ − log ⁡ ( 1 − D v ( G ( v , i ) ) ] L D i = = E [ − log ⁡ D i ( i ) ] + E [ − log ⁡ ( 1 − D i ( ψ G ( v , i ) ) ] \mathcal L_{D_v}=\mathbb E[-\log D_v(v)]+\mathbb E[-\log (1-D_v(G(v,i))]\\ \mathcal L_{D_i}==\mathbb E[-\log D_i(i)]+\mathbb E[-\log (1-D_i(ψG(v,i))] LDv=E[logDv(v)]+E[log(1Dv(G(v,i))]LDi==E[logDi(i)]+E[log(1Di(ψG(v,i))]

    [网络具体结构]

    [生成器]

      生成器由2个反卷积层,一个编码器网络和一个对应的解码器网络组成,如下图所示。

      由于红外图像的分辨率较低,反卷积是为了提高图像的分辨率,同时还将可见图像通过另一个独立的反卷积层,该层会生成具有相同分辨率的特征图,这里是为了统一可见光与红外的分辨率。将反卷积层获得的结果进行通道相连作为编码器的输入。特征提取和融合的过程都在编码器中执行,并生成融合的特征图作为输出。然后featuremap输入到解码器以进行重构,并且所生成的融合图像具有与可见图像相同的分辨率。

    [判别器]

      判别器旨在对生成器起对抗作用。 D v D_v Dv D i D_i Di旨在分别将产生的图像与可见图像和红外图像区分开。不仅应考虑生成器和判别器之间的对抗关系,还应考虑 D v D_v Dv D i D_i Di的平衡。否则,随着训练的进行,一个的优势或劣势最终将导致另一个的效率低下。

      判别器 D v D_v Dv D i D_i Di共享相同的体系结构,与生成器体系结构相比,其设置要简单一些,如上图所示。所有卷积层的stride都设置为2。在最后一层, 使用Tanh函数生成标量,该标量代表是源图像而不是 G G G生成的概率。

    [医学影像的融合]

      作者将提出的方法应用于融合图像,例如MRI和PET图像融合。将以假彩色显示的PET图像视为彩色图像,并将DDcGAN用于融合高分辨率MRI图像和低分辨率强度的PET图像。MRI图像在以高空间分辨率捕获大脑,心脏和肺等器官的软组织结构细节方面表现出色。PET图像通过核医学成像获得,以提供功能和代谢信息,例如血流和供水活动。

      假设MRI图像的分辨率是PET图像的4×4倍。整个融合过程如上图所示。首先对具有RGB通道的多光谱输入PET图像进行变换到IHS,其中强度通道显示光谱的亮度,色相通道显示光谱波长的属性,饱和度通道显示光谱的纯度: ( I P E T V 1 P E T V 2 P E T ) = [ 1 / 3 1 / 3 1 / 3 1 / 6 1 / 6 − 2 / 6 1 / 2 − 1 / 2 0 ] ( R P E T G P E T B P E T ) \left(\begin{array}{c} \text {I}_{PET} \\ V 1 _{PET} \\ V 2 _{PET} \end{array}\right)=\left[\begin{array}{ccc} 1 / \sqrt{3} & 1 / \sqrt{3} & 1 / \sqrt{3} \\ 1 / \sqrt{6} & 1 / \sqrt{6} & -2 / \sqrt{6} \\ 1 / \sqrt{2} & -1 / \sqrt{2} & 0 \end{array}\right]\left(\begin{array}{c} R_{\mathrm{PET}} \\ G_{\mathrm{PET}} \\ B_{\mathrm{PET}} \end{array}\right) IPETV1PETV2PET=1/3 1/6 1/2 1/3 1/6 1/2 1/3 2/6 0RPETGPETBPET
    H和S通道的分量可以用变量V1和V2表示,如下所示: H P E T = tan ⁡ − 1 ( V 1 P E T V 2 P E T ) S P E T = V 1 P E T 2 + V 2 P E T 2 \begin{array}{l} H_{\mathrm{PET}}=\tan ^{-1}\left(\frac{V 1_{\mathrm{PET}}}{V 2_{\mathrm{PET}}}\right) \\ S_{\mathrm{PET}}=\sqrt{V 1_{\mathrm{PET}}^{2}+V 2_{\mathrm{PET}}^{2}} \end{array} HPET=tan1(V2PETV1PET)SPET=V1PET2+V2PET2
      融合过程是在PET图像和MRI图像的I通道的分量上产生的。也就是说,只有I通道才会进行融合。 I f u s e = G ( M , I P E T ) I_{fuse} = G(M,IPET) Ifuse=G(M,IPET)
      在训练过程中,判别器 D i D_i Di被训练以区分 I f u s e I_{fuse} Ifuse I P E T I_{PET} IPET之间的差异,而判别器 D v D_v Dv获得MRI图像而不是 G G G生成的概率。因此,损失函数可以表示为:
    L G = L G a d v + λ L c o n \mathcal L_G=\mathcal L_G^{adv}+\lambda\mathcal L_{con} LG=LGadv+λLcon
    其中 L G a d v \mathcal L_G^{adv} LGadv L c o n \mathcal L_{con} Lcon定义为:
    L c o n = E [ log ⁡ ( 1 − D v ( G ( M , I P E T ) ) ) ] + E [ log ⁡ ( 1 − D i ( ψ G ( M , I P E T ) ) ) ] L c o n = E [ ∣ ∣ ψ G ( M , I P E T ) − I P E T ∣ ∣ F 2 + η ‖ G ( M , I P E T ) − M ‖ T V ] \mathcal L_{con}=\mathbb E[\log(1-D_v(G(M,I_{PET})))]+\mathbb E[\log(1-D_i(ψG(M,I_{PET})))]\\ \mathcal L_{con}=\mathbb E[||ψG(M,I_{PET})-I_{PET}||^2_F+η‖G(M,I_{PET})−M‖_{TV}] Lcon=E[log(1Dv(G(M,IPET)))]+E[log(1Di(ψG(M,IPET)))]Lcon=E[ψG(M,IPET)IPETF2+ηG(M,IPET)MTV]
    以上是生成器的损失,判别器损失如下: L D v = E [ − log ⁡ D v ( M ) ] + E [ − log ⁡ ( 1 − D v ( G ( M , I P E T ) ) ) ] L D i = E [ − log ⁡ D i ( I P E T ) ] + E [ − log ⁡ ( 1 − D i ( ψ G ( M , I P E T ) ) ) ] \begin{aligned} \mathcal{L}_{D_{v}}=& \mathbb{E}\left[-\log D_{v}(M)\right] \\ &+\mathbb{E}\left[-\log \left(1-D_{v}\left(G\left(M, I_{\mathrm{PET}}\right)\right)\right)\right] \\ \mathcal{L}_{D_{i}}=& \mathbb{E}\left[-\log D_{i}\left(I_{\mathrm{PET}}\right)\right] \\ &+\mathbb{E}\left[-\log \left(1-D_{i}\left(\psi G\left(M, I_{\mathrm{PET}}\right)\right)\right)\right] \end{aligned} LDv=LDi=E[logDv(M)]+E[log(1Dv(G(M,IPET)))]E[logDi(IPET)]+E[log(1Di(ψG(M,IPET)))]
      为了保留PET图像中的色度信息,PET图像和融合图像的H和S通道的分量应尽可能相同。对于这两个通道,作者直接采用双三次插值作为上采样操作。上采样的分量表示为 H n e w H_{new} Hnew S n e w S_{new} Snew,其分辨率均为 H P E T H_{PET} HPET S P E T S_{PET} SPET的4×4倍,那么可以得到:
    V 1 n e w = S n e w s i n H n e w V 2 n e w = S n e w c o s H n e w V1_{new}=S_{new}sinH_{new}\\V2_{new}=S_{new}cosH_{new} V1new=SnewsinHnewV2new=SnewcosHnew
      从IHS通道获得RGB通道中最终融合图像的逆变换可以表示为:
    ( R new  G new  B new  ) = [ 1 / 3 1 / 6 1 / 2 1 / 3 1 / 6 − 1 / 2 1 / 3 − 2 / 6 0 ] ( I fusc  V 1 new  V 2 new  ) \left(\begin{array}{l} R_{\text {new }} \\ G_{\text {new }} \\ B_{\text {new }} \end{array}\right)=\left[\begin{array}{ccc} 1 / \sqrt{3} & 1 / \sqrt{6} & 1 / \sqrt{2} \\ 1 / \sqrt{3} & 1 / \sqrt{6} & -1 / \sqrt{2} \\ 1 / \sqrt{3} & -2 / \sqrt{6} & 0 \end{array}\right]\left(\begin{array}{c} I_{\text {fusc }} \\ V 1_{\text {new }} \\ V 2_{\text {new }} \end{array}\right) Rnew Gnew Bnew =1/3 1/3 1/3 1/6 1/6 2/6 1/2 1/2 0Ifusc V1new V2new 

    [结果分析]

    [数据集以及参数设置]

      作者在公开可用的TNO数据集上验证了DDcGAN图像融合方法。从数据集中选择36对红外图像和可见图像,并将它们裁剪为27264个像素对,分辨率为84×84。当用于融合不同分辨率的图像时,作者将红外图像下采样到四分之一分辨率。因此,所有可见图像patch的尺寸为84×84,所有红外图像patch的尺寸为21×21。
      DDcGAN在MRI和PET图像融合中的应用在哈佛医学院网站上进行了验证。原始PET和MRI图像的尺寸均为256×256。为了验证方法在融合不同分辨率的图像上的有效性,将PET图像的每个通道下采样到64×64的大小。下载了83对PET和MRI对,并将其裁剪为9984个补丁对作为训练集。 同样,所有MRI的patch的大小为84×84,所有PET图像的patch的大小为21×21。

    [训练细节]

      模型中的参数设置为 λ = 0.5 λ= 0.5 λ=0.5 η = 1.2 η=1.2 η=1.2。整个网络以 2 × 1 0 − 3 2×10^{-3} 2×103的学习率进行训练,每个周期后指数衰减至原始值的0.75,批次大小设置为24。详细的训练过程可以查看下表:

    算法1 DDcGAN的训练过程
    参数说明: G 、 D v 、 D i \\G、D_v、D_i GDvDi的训练步数分别表示为 I G 、 I D v 、 I D i I_G、I_{D_v}、I_{D_i} IGIDvIDi I m a x \\I_{max} Imax是训练的最大步数, I m a x = 20 I_{max}=20 Imax=20 L m a x 、 L m i n 、 L G m a x \\\mathcal L_{max}、\mathcal L_{min}、\mathcal L_{Gmax} LmaxLminLGmax是停止训练的标志。 L m a x 、 L m i n \\\mathcal L_{max}、\mathcal L_{min} LmaxLmin G G G D D D之间的对抗损失, L G m a x \mathcal L_{Gmax} LGmax G G G的总损失。 L m a x = 1.8 \\\mathcal L_{max}=1.8 Lmax=1.8 L m i n = 1.2 \mathcal L_{min}=1.2 Lmin=1.2 L G m a x = 0.8 × L G \mathcal L_{Gmax}=0.8×\mathcal L_G LGmax=0.8×LG
    初始化 D v D_v Dv D i D_i Di的参数 θ D v \theta_{D_v} θDv θ D i \theta_{D_i} θDi,初始化 G G G的参数 θ G \theta_{G} θG;
    在每次训练迭代中:
     — 训练判别器 D V D_V DV D i D_i Di
      ● m m m张红外图像 { v 1 , . . . , v m } \{v^1,...,v^m\} {v1,...,vm},以及对应的可见光图像 { i 1 , . . . , i m } \{i^1,...,i^m\} {i1,...,im}
      ●获得生成器生成的数据 { G ( v 1 , i 1 ) , . . . , G ( v 1 , i m ) } \{G(v^1,i^1),...,G(v^1,i^m)\} {G(v1,i1),...,G(v1,im)}
      ●通过SGD优化器最小化损失 L D v \mathcal L_{D_v} LDv更新判别器参数 θ D v \theta_{D_v} θDv(步骤 1)
      ●通过SGD优化器最小化损失 L D i \mathcal L_{D_i} LDi更新判别器参数 θ D i \theta_{D_i} θDi(步骤 2)
      ●当 L D v > L m a x \mathcal L_{D_v}>\mathcal L_{max} LDv>Lmax并且 I D v < I m a x I_{D_v}<I_{max} IDv<Imax时重复 (步骤 1),令 I D v ← I D v + 1 I_{D_v}←I_{D_v}+1 IDvIDv+1
      ●当 L D i > L m a x \mathcal L_{D_i}>\mathcal L_{max} LDi>Lmax并且 I D i < I m a x I_{D_i}<I_{max} IDi<Imax时重复 (步骤 2),令 I D i ← I D i + 1 I_{D_i}←I_{D_i}+1 IDiIDi+1
     — 训练生成器 G G G
      ● m m m张红外图像 { v 1 , . . . , v m } \{v^1,...,v^m\} {v1,...,vm},以及对应的可见光图像 { i 1 , . . . , i m } \{i^1,...,i^m\} {i1,...,im}
      ●获得生成器生成的数据 { G ( v 1 , i 1 ) , . . . , G ( v 1 , i m ) } \{G(v^1,i^1),...,G(v^1,i^m)\} {G(v1,i1),...,G(v1,im)}
      ●通过RMSProp优化器最小化损失 L G \mathcal L_{G} LG更新生成器参数 θ G \theta_{G} θG(步骤 3)
      ●当 L D v < L m i n \mathcal L_{D_v}<\mathcal L_{min} LDv<Lmin或者 L D i < L m i n \mathcal L_{D_i}<\mathcal L_{min} LDi<Lmin,并且 I G < I m a x I_{G}<I_{max} IG<Imax时通过RMSProp优化器最小化损失 L G a d v \mathcal L^{adv}_{G} LGadv更新生成器参数 θ G \theta_{G} θG,令 I G ← I G + 1 I_{G}←I_{G}+1 IGIG+1
      ●当 L G > L G m a x \mathcal L_{G}>\mathcal L_{Gmax} LG>LGmax并且 I G < I m a x I_{G}<I_{max} IG<Imax时重复 (步骤 3),令 I G ← I G + 1 I_{G}←I_{G}+1 IGIG+1

    [评估指标]

      部分指标访问图像融合定量指标分析

    [红外与可见光图像融合的结果与分析]

    [对比不同的损失函数的结果与分析]

    [在医学影像融合上的结果与分析]

    在图像数据融合上,主要研究的数据有可见光图像(RGB)、SAR图像、全色图像、红外图像、多光谱图像、高光谱图像。红外图像一般都是单通道的热红外。

    🚪传送门

    ◉ 🎨RGB💥🔥红外
    📦数据集
    [TNO-RGB红外图像]
    [FLIR-RGB红外图像]
    [医学MRI与PET图像数据集]
    [Multispectral Image Recognition-RGB红外目标检测]
    [Multispectral Image Recognition-RGB红外语义分割]
    [INO-RGB红外视频]
    [SYSU-MM01行人重识别可见光红外数据]
    📚论文
    📌无监督图像融合方法
    [DenseFuse:红外和可见图像的融合方法]
    [VIF-Net:RGB和红外图像融合的无监督框架]
    [Gradient Transfer Optimization Model:基于梯度转移优化模型的红外与可见光图像融合]
    📌基于GAN的融合方法
    [DDcGAN:用于多分辨率图像融合的双判别器生成对抗网络]
    📌有监督融合应用模型
    [SiamFT:通过完全卷积孪生网络进行的RGB红外融合跟踪方法]
    [TU-Net/TDeepLab:基于RGB和红外的地形分类]
    [RTFNet:用于城市场景语义分割的RGB和红外融合网络]
    [MAPAN:基于自适应行人对准的可见红外跨模态行人重识别网络]

    ◉ 🌆多光谱💥🌁高光谱
    📦数据集
    [高光谱图像数据]
    📚论文
    [Deep Attention Network:基于深层注意力网络的高光谱与多光谱图像融合]

    ◉ 🎨RGB💥🥓SAR
    📦数据集
    [待更新]
    📚论文
    [待更新]

    ◉ 🎨RGB💥🔥红外💥🥓SAR
    📦数据集
    [待更新]
    📚论文
    [待更新]

    💕大家有数据融合方向的优秀论文可以在评论分享一下,感谢。🤘

    展开全文
  • 本文来给大家分享一下笔者最近的一个工作:通过简单地修改原来的 GAN 模型,就可以让判别器变成一个编码,从而让 GAN 同时具备生成能力和编码能力,并且几乎不会增加训练成本。 这个新模型被称为O-GAN(正交 GAN...

     

    2019-03-08 08:36

    作者丨苏剑林

    单位丨广州火焰信息科技有限公司

    研究方向丨NLP,神经网络

    个人主页丨kexue.fm

    本文来给大家分享一下笔者最近的一个工作:通过简单地修改原来的 GAN 模型,就可以让判别器变成一个编码器,从而让 GAN 同时具备生成能力和编码能力,并且几乎不会增加训练成本。

    这个新模型被称为 O-GAN(正交 GAN,即 Orthogonal Generative Adversarial Network),因为它是基于对判别器的正交分解操作来完成的,是对判别器自由度的最充分利用。

    FFHQ线性插值效果图

    背景

    笔者掉进生成模型的大坑已经很久时间了,不仅写了多篇有关生成模型的文章,而且还往 arXiv 上也提交了好几篇跟生成模型相关的小 paper。自掉坑以来,虽然说对生成模型尤其是 GAN 的理解渐深,有时也觉得自己做出了一点改进工作(所以才提交到 arXiv上),但事实上那些东西都是无关痛痒的修修补补,意义实在不大。

    而本文要介绍的这个模型,自认为比以往我做的所有 GAN 相关工作的价值总和还要大:它提供了目前最简单的方案,来训练一个具有编码能力的 GAN 模型。

    现如今,GAN 已经越来越成熟,越做越庞大,诸如 BigGAN[1]、StyleGAN[2] 等算是目前最先进的 GAN 模型也已被人熟知,甚至玩得不亦乐乎。不过,这几个最先进的 GAN 模型,目前都只有生成器功能,没有编码器功能,也就是说可以源源不断地生成新图片,却不能对已有的图片提取特征。

    当然,带有编码器的 GAN 也有不少研究,甚至本人就曾做过,参考BiGAN-QP:简单清晰的编码 & 生成模型。但不管有没有编码能力,大部分 GAN 都有一个特点:训练完成后,判别器都是没有用的。因为理论上越训练,判别器越退化(比如趋于一个常数)。

    做过 GAN 的读者都知道,GAN 的判别器和生成器两个网络的复杂度是相当的(如果还有编码器,那么复杂度也跟它们相当),训练完 GAN 后判别器就不要了,那实在是对判别器这个庞大网络的严重浪费!

    一般来说,判别器的架构跟编码器是很相似的,那么一个很自然的想法是能不能让判别器和编码器共享大部分权重?

    据笔者所知,过去所有的 GAN 相关的模型中,只有 IntroVAE[3] 做到了这一点。但相对而言 IntroVAE 的做法还是比较复杂的,而且目前网上还没有成功复现 IntroVAE 的开源代码,笔者也尝试复现过,但也失败了。

    而本文的方案则极为简单——通过稍微修改原来的GAN模型,就可以让判别器转变为一个编码器,不管是复杂度还是计算量都几乎没有增加。

    模型

    事不宜迟,马上来介绍这个模型。首先引入一般的 GAN 写法:

    为了不至于混淆,这里还是不厌其烦地对符号做一些说明。其中,p(x) 是真实图片集的“证据分布”,q(z) 是噪声的分布(在本文中,它是元标准正态分布);而和自然就是生成器和判别器了,f, g, h 则是一些确定的函数,不同的 GAN 对应着不同的 f, h, g。

    有时候我们会加一些标准化或者正则化手段上去,比如谱归一化或者梯度惩罚,简单起见,这些手段就不明显地写出来了。

    然后定义几个向量算符:

    写起来貌似挺高大上的,但其实就是向量各元素的均值、方差,以及标准化的向量。特别指出的是,当 nz≥3 时(真正有价值的 GAN 都满足这个条件),[avg(z),std(z),N(z)] 是函数无关的,也就是说它相当于是原来向量 z 的一个“正交分解”

    接着,我们已经说了判别器的结构其实和编码器有点类似,只不过编码器输出一个向量而判别器输出一个标量罢了,那么我可以把判别器写成复合函数:

    这里 E 是的映射,而 T 是的映射。不难想象,E 的参数量会远远多于 T 的参数量,我们希望 E(x) 具有编码功能。

    怎么实现呢?只需要加一个 loss:Pearson 相关系数!

    其中:

    如果 λ=0,那么就是普通的 GAN 而已(只不过判别器被分解为两部分 E 和 T 两部分)。加上了这个相关系数,直观上来看,就是希望 z 和 E(G(z)) 越线性相关越好。为什么要这样加?我们留到最后讨论。

    显然这个相关系数可以嵌入到任意现成的 GAN 中,改动量显然也很小(拆分一下判别器、加一个 loss),笔者也做了多种 GAN 的实验,发现都能成功训练。

    这样一来,GAN 的判别器 D 分为了 E 和 T 两部分,E 变成了编码器,也就是说,判别器的大部分参数已经被利用上了。但是还剩下 T,训练完成后 T 也是没用的,虽然 T 的参数量比较少,这个浪费量是很少的,但对于有“洁癖”的人(比如笔者)来说还是很难受的。

    能不能把 T 也省掉?经过笔者多次试验,结论是:还真能!因为我们可以直接用 avg(E(x)) 做判别器:

    这样一来整个模型中已经没有 T 了,只有纯粹的生成器 G 和编码器 E,整个模型没有丝毫冗余的地方,洁癖患者可以不纠结了。

    实验

    这样做为什么可以?我们放到最后再说。先看看实验效果,毕竟实验不好的话,原理说得再漂亮也没有意义。

    注意,理论上来讲,本文引入的相关系数项并不能提高生成模型的质量,所以实验的目标主要有两个:1)这个额外的 loss 会不会有损原来生成模型的质量;2)这个额外的 loss 是不是真的可以让 E 变成一个有效的编码器?

    刚才也说,这个方法可以嵌入到任意 GAN 中,这次实验用的是 GAN 是我之前的 GAN-QP 的变种:

    其中:

    数据集上,这次的实验做得比较完整,在 CelebA HQ、FFHQ、LSUN-churchoutdoor、LSUN-bedroom 四个数据集上都做了实验,分辨率都是 128 × 128 (其实还做了一点 256 × 256 的实验,结果也不错,但是没放到论文上)。模型架构跟以往一样都是 DCGAN[4],其余细节直接看论文或者代码吧。

    上图:

    CelebA HQ随机生成

    CelebA HQ重构效果

    CelebA HQ线性插值

    FFHQ随机生成

    FFHQ重构效果

    FFHQ线性插值

    LSUN-church随机生成

    LSUN-church重构效果

    LSUN-church线性插值

    LSUN-bedroom随机生成

    LSUN-bedroom重构效果

    LSUN-bedroom线性插值

    不管你们觉得好不好,反正我是觉得还好了。

    1. 随机生成效果还不错,说明新引入的相关系数项没有降低生成质量;

    2. 重构效果还不错,说明 E(x) 确实提取到了 x 的主要特征;

    3. 线性插值效果还不错,说明 E(x) 确实学习到了接近线性可分的特征。

    原理

    好,确认过眼神,哦不对,是效果,就可以来讨论一下原理了。

    很明显,这个额外的重构项的作用就是让 z 尽可能与 E(G(z)) “相关”,对于它,相信大多数读者的第一想法应该是 mse 损失

    而非本文用的 ρ(z,E(G(z)))。但事实上,如果加入

    那么训练基本上都会失败。那为什么 ρ(z,E(G(z))) 又会成功呢?

    根据前面的定义,E(x) 输出一个维的向量,但是 T(E(x)) 只输出一个标量,也就是说,E(x) 输出了个自由度,而作为判别器,T(E(x)) 至少要占用一个自由度(当然,理论上它也只需要占用一个自由度)。

    如果最小化,那么训练过程会强迫 E(G(z)) 完全等于 z,也就是说个自由度全部被它占用了,没有多余的自由度给判别器来判别真假了,所以加入大概率都会失败。

    但是 ρ(z,E(G(z))) 不一样,ρ(z,E(G(z))) 跟 avg(E(G(z))) 和 std(E(G(z))) 都没关系(只改变向量 E(G(z)) 的 avg 和 std,不会改变 ρ(z,E(G(z))) 的值,因为 ρ 本身就先减均值除标准差了),这意味着就算我们最大化 ρ(z,E(G(z))),我们也留了至少两个自由度给判别器。

    这也是为什么在 (6) 中我们甚至可以直接用 avg(E(x)) 做判别器,因为它不会被 ρ(z,E(G(z))) 的影响的。

    一个相似的例子是 InfoGAN[5]。InfoGAN 也包含了一个重构输入信息的模块,这个模块也和判别器共享大部分权重(编码器),而因为 InfoGAN 事实上只重构部分输入信息,因此重构项也没占满编码器的所有自由度,所以 InfoGAN 那样做是合理的——只要给判别器留下至少一个自由度。

    另外还有一个事实也能帮助我们理解。因为我们在对抗训练的时候,噪声是的,当生成器训练好之后,那么理论上对所有的,G(z) 都会是一张逼真的图片,事实上,反过来也是成立的,如果 G(z) 是一张逼真的图片,那么应该有(即位于 N(0,Inz) 的高概率区域)。

    进一步推论下去,对于,我们有 avg(z)≈0 以及 std(z)≈1。那么,如果 G(z) 是一张逼真的图片,那么必要的条件是 avg(z)≈0 以及 std(z)≈1。

    应用这个结论,如果我们希望重构效果好,也就是希望 G(E(x)) 是一张逼真的图片,那么必要的条件是 avg(E(x))≈0 以及 std(E(x))≈1。

    这就说明,对于一个好的 E(x),我们可以认为 avg(E(x)) 和 std(E(x)) 都是已知的(分别等于 0 和 1),既然它们是已知的,我们就没有必要拟合它们,换言之,在重构项中可以把它们排除掉。而事实上:

    也就是说在 mse 损失中排除掉 avg(E(x)) 和 std(E(x)) 的话,然后省去常数,它其实就是 −ρ(z,E(G(z))),这再次说明了 ρ(z,E(G(z))) 的合理性。并且由这个推导,重构过程并不是 G(E(x)) 而是:

    最后,这个额外的重构项理论上还能防止 mode collapse 的出现。其实很明显,因为重构质量都不错了,生成质量再差也差不到哪里去,自然就不会怎么 mode collapse 了。

    非要说数学依据的话,我们可以将 ρ(z, E(G(z))) 理解为 Z 和 G(Z) 的互信息上界,所以最小化 −ρ(z, E(G(z))) 事实上在最大化 Z 与 G(Z) 的互信息,这又等价于最大化 G(Z) 的熵。而 G(Z) 的熵大了,表明它的多样性增加了,也就远离了 mode collapse。类似的推导可以参考能量视角下的GAN模型(二):GAN=“分析”+“采样”。

    结语

    本文介绍了一个方案,只需要对原来的 GAN 进行简单的修改,就可以将原来 GAN 的判别器转化为一个有效的编码器。多个实验表明这样的方案是可行的,而对原理的进一步思考得出,这其实就是对原始判别器(编码器)的一种正交分解,并且对正交分解后的自由度的充分利用,所以模型也被称为“正交 GAN(O-GAN)”。

    小改动就收获一个编码器,何乐而不为呢?欢迎大家试用。

    后记

    事后看,本文模型的思想其实本质上就是“直径和方向”的分解,并不难理解,但做到这件事情不是那么轻松的。

    最开始我也一直陷入到的困境中,难以自拔,后来我想了很多技巧,终于在的重构损失下也稳定住了模型(耗了几个月),但模型变得非常丑陋(引入了三重对抗 GAN),于是我着手简化模型。后来我尝试用 cos 值用重构损失,发现居然能够简单地收敛了,于是我思考背后的原理,这可能涉及到自由度的问题。

    接着我尝试将 E(x) 分解为模长和方向向量,然后用模长 ||E(x)|| 做判别器,用 cos 做重构损失,判别器的 loss 用 hinge loss。这样做其实几何意义很明显,说起来更漂亮些,部分数据集是 work 的,但是通用性不好(CelebA 还行,LSUN 不行),而且还有一个问题是 ||E(x)|| 非负,无法嵌入到一般的 GAN,很多稳定 GAN 的技巧都不能用。

    然后我想怎么把模长变成可正可负,开始想着可以对模长取对数,这样小于 1 的模长取对数后变成负数,大于 1 的模长取对数变成正数,自然达成了目的。但是很遗憾,效果还是不好。后来陆续实验了诸多方案都不成功,最后终于想到可以放弃模长(对应于方差)做判别器的 loss,直接用均值就行了。所以后来转换成 avg(E(x)),这个转变经历了相当长的时间。

    还有,重构损失一般认为要度量 x 和 G(E(x)) 的差异,而我发现只需要度量 z 和 E(G(z)) 的差异,这是最低成本的方案,因为重构是需要额外的时间的。最后,我还做过很多实验,很多想法哪怕在 CelebA上都能成功,但LSUN上就不行。所以,最后看上去简单的模型,实际上是艰难的沉淀。

    整个模型源于我的一个执念:判别器既然具有编码器的结构,那么就不能被浪费掉。加上有 IntroVAE 的成功案例在先,我相信一定会有更简单的方案实现这一点。前前后后实验了好几个月,跑了上百个模型,直到最近终于算是完整地解决了这个问题。

    对了,除了 IntroVAE,对我启发特别大的还有 Deep Infomax[6] 这篇论文,Deep Infomax 最后的附录里边提供了一种新的做 GAN 的思路,我开始也是从那里的方法着手思考新模型的。

    参考文献

    [1] Andrew Brock, Jeff Donahue, Karen Simonyan, Large Scale GAN Training for High Fidelity Natural Image Synthesis, arXiv:1809.11096.

    [2] Tero Karras, Samuli Laine, Timo Aila, A Style-Based Generator Architecture for Generative Adversarial Networks, arXiv:1812.04948.

    [3] Huaibo Huang, Zhihang Li, Ran He, Zhenan Sun, Tieniu Tan, ntroVAE: Introspective Variational Autoencoders for Photographic Image Synthesis, NeurIPS 2018.

    [4] Alec Radford, Luke Metz, Soumith Chintala, Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, ICLR 2016.

    [5] Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel, InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets, NIPS 2016.

    [6] R Devon Hjelm, Alex Fedorov, Samuel Lavoie-Marchildon, Karan Grewal, Phil Bachman, Adam Trischler, Yoshua Bengio, Learning deep representations by mutual information estimation and maximization, ICLR 2019.

    展开全文
  • 自编码与GAN网络

    千次阅读 2020-01-27 11:10:01
    在神经网络中分为监督学习和非监督学习,而自编码就是通过非监督学习,学到输入数据高效表示的人工神经网络。输入数据的这一高效表示称为编码,其维度一般远小于输入数据,使得自编码可用于降维。更重要的是,自...

    前言:有监督学习和无监督学习

    有监督学习就是通过已有的训练样本去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现预测和分类的目的,也就具有了对未知数据进行预测和分类的能力

    在有监督学习有两类任务,可分为回归和分类。

    回归:即给出一堆自变量X和因变量Y,让你来拟合出一个函数,来进行预测。
    分类:也是由特征向量X和它们的标签Y组成,当你利用数据训练出模型后,给你一个自变量,让你求它的因变量是什么?例如logistics、SVM、KNN等。

    无监督学习:在无监督学习中,事先没有任何训练样本,也就是事先对输入没有一个明确的函数映射关系,神经网络需要直接对数据进行建模,让它进行学习。无监督学习主要任务是聚类,所谓聚类就是通过计算样本间和群体间距离,把类似的群体聚集在一起。主要算法包括Kmeans、EM算法。

    自编码器

    在神经网络中分为有监督学习和无监督学习,而自编码器就是通过无监督学习的神经网络。对输入数据的进行处理得过程表示称为编码,编码后的维度一般远小于输入数据,使得自编码器可用于降维。更重要的是,自编码器可作为强大的特征检测器,应用于深度神经网络的预训练。
    此外,自编码器还可以随机生成与训练数据类似的数据,这被称作生成模型。比如,可以用人脸图片训练一个自编码器,它可以生成新的图片。

    import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets("/tmp/data/", one_hot=False)
    
    learning_rate = 0.01
    training_epochs = 5
    batch_size = 256
    display_step = 1
    examples_to_show = 10
    
    
    n_input = 784  
    X = tf.placeholder("float", [None, n_input])
    
    
    n_hidden_1 = 256 
    n_hidden_2 = 128 
    weights = {
        'encoder_h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
        'encoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
        'decoder_h1': tf.Variable(tf.random_normal([n_hidden_2, n_hidden_1])),
        'decoder_h2': tf.Variable(tf.random_normal([n_hidden_1, n_input])),
    }
    biases = {
        'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])),
        'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])),
        'decoder_b1': tf.Variable(tf.random_normal([n_hidden_1])),
        'decoder_b2': tf.Variable(tf.random_normal([n_input])),
    }
    
    
    def encoder(x):
        
        layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),biases['encoder_b1']))
        
        layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']), biases['encoder_b2']))
        return layer_2
    
    
    
    def decoder(x):
       
        layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),biases['decoder_b1']))
        
        layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']), biases['decoder_b2']))
        return layer_2
    
    
    encoder_op = encoder(X)
    decoder_op = decoder(encoder_op)
    
    y_pred = decoder_op
    y_true = X
    
    cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2))
    optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)
    
    
    with tf.Session() as sess:
    
        if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
            init = tf.initialize_all_variables()
        else:
            init = tf.global_variables_initializer()
        sess.run(init)
        total_batch = int(mnist.train.num_examples/batch_size)
    
        for epoch in range(training_epochs):
    
            for i in range(total_batch):
                batch_xs, batch_ys = mnist.train.next_batch(batch_size)  
               
                _, c = sess.run([optimizer, cost], feed_dict={X: batch_xs})
           
            if epoch % display_step == 0:
                print("Epoch:", '%04d' % (epoch+1),
                      "cost=", "{:.9f}".format(c))
    
        print("Optimization Finished!")
    
    
        encode_decode = sess.run(
            y_pred, feed_dict={X: mnist.test.images[:examples_to_show]})
    
        f, a = plt.subplots(2, 10, figsize=(10, 2))
        for i in range(examples_to_show):
            a[0][i].imshow(np.reshape(mnist.test.images[i], (28, 28)))
            a[1][i].imshow(np.reshape(encode_decode[i], (28, 28)))
        plt.show()
    
    

    从本质上说,自编码器就是一种数据压缩的算法。它通过编码器和解码器分别进行对输入的压缩,和对压缩后的数据进行重构。一个好的自编码器可以高效还原压缩过的数据。
    在这里插入图片描述

    自编码器的特点

    • 数据相关性:自编码器只能够压缩和自身分布类似的数据,倘若用猫狗数据集训练出来的自编码器去压缩人脸,肯定是不行的。
    • 数据有损性:在进行编码和解码的过程中,肯定会造成数据的损失。
    • 自动学习性:因为自编码器是从数据样本中自动学习的,所以在输入输出的过程中,不需要进行任何新的工作。

    GAN是什么,又是为什么而生?

    GAN是在学习从随机变量到训练样本的映射关系。其中随机变量可以选择服从正态分布,那么就能得到一个由多层感知机组成的生成网络,网络的输入是一个一维的随机变量,而输出则是一张图片。生成网络的作用就是如何让输出的伪造图片看起来像训练样本;在生成网络后面接上一个多层感知机组成的判别网络,这个网络的输入是随机选择一张真实样本或者生成网络的输出,输出是输入图片来自于真实样本或者生成网络的概率;当判别网络能够很好地分辨出输入不是真实样本时,也能通过梯度的方式说明什么样的输入才更加像真实样本,从而通过这个信息来调整生成网络。从而需要尽可能的让自己的输出像真实样本,而则尽可能的将不是真实样本的情况分辨出来。

    在GAN网络中,有两个模型:
    生成模型:比作是一个样本生成器,输入一个噪声/样本,然后把它包装成一个逼真的样本,也就是输出。简单来说,生成网络是制造样本的,它的目的就是使得自己造样本的能力尽可能强,强到判别网络没法判断是真样本还是假样本。

    判别模型:判别模型就比作一个二分类器,来判断输入的样本是真是假,也就是能判别出来属于的一张图它是来自真实样本集还是假样本集。假如输入的是真样本,网络输出就接近1,输入的是假样本,网络输出接近0。这样就可以很完美地达到了很好判别的目的。

    在GAN中,有一个很重要的思想就是博弈思想。
    和上面所说的一样,一个生成逼真的数据,让你无法分清是真是假,而另一个则要尽力去分辨出哪一个是真,哪一个是假。
    在这里插入图片描述
    在GAN的训练过程中,在同一轮梯度传递的过程中可以细分为2步:先训练判别器,再训练生成器。(注意不是等所有的判别器训练好以后,才开始训练生成器,因为判别器的训练也需要上一轮梯度反传中生成器的输出值作为输入)

    当训练判别器的时候,上一轮生成器产生的图片会和真实图片直接拼接在一起,作为x输入。然后按顺序摆放0和1,假图对应0,真图对应1。然后就可以通过,x输入生成一个score(从0到1之间的数),通过score和y组成的损失函数,就可以进行梯度传递了。

    当训练生成器的时候, 需要把生成器和判别器当作一个整体。输入一组随机向量,就可以在生成器生成一张图,通过判别器对生成的这张图进行打分。这里的目标是使score=1,score和y=1之间的差异可以组成损失函数,然后可以作为反向传播梯度。注意,这里的判别器的参数是不可训练的,因为此时判别器不能改变,保证生成器符合当下判别器的标准进行打分。

    from __future__ import print_function, division
    
    from keras.datasets import mnist
    from keras.layers import Input, Dense, Reshape, Flatten, Dropout
    from keras.layers import BatchNormalization, Activation, ZeroPadding2D
    from keras.layers.advanced_activations import LeakyReLU
    from keras.layers.convolutional import UpSampling2D, Conv2D
    from keras.models import Sequential, Model
    from keras.optimizers import Adam
    
    import matplotlib.pyplot as plt
    
    import sys
    
    import numpy as np
    
    class GAN():
        def __init__(self):
            self.img_rows = 28
            self.img_cols = 28
            self.channels = 1
            self.img_shape = (self.img_rows, self.img_cols, self.channels)
            self.latent_dim = 100
    
            optimizer = Adam(0.0002, 0.5)
    
    
            self.discriminator = self.build_discriminator()
            self.discriminator.compile(loss='binary_crossentropy',
                optimizer=optimizer,
                metrics=['accuracy'])
    
    
            self.generator = self.build_generator()
    
         
            z = Input(shape=(self.latent_dim,))
            img = self.generator(z)
    
    
            self.discriminator.trainable = False
    
          
            validity = self.discriminator(img)
    
         
            self.combined = Model(z, validity)
            self.combined.compile(loss='binary_crossentropy', optimizer=optimizer)
    
    
        def build_generator(self):
    
            model = Sequential()
    
            model.add(Dense(256, input_dim=self.latent_dim))
            model.add(LeakyReLU(alpha=0.2))
            model.add(BatchNormalization(momentum=0.8))
            model.add(Dense(512))
            model.add(LeakyReLU(alpha=0.2))
            model.add(BatchNormalization(momentum=0.8))
            model.add(Dense(1024))
            model.add(LeakyReLU(alpha=0.2))
            model.add(BatchNormalization(momentum=0.8))
            model.add(Dense(np.prod(self.img_shape), activation='tanh'))
            model.add(Reshape(self.img_shape))
    
            model.summary()
    
            noise = Input(shape=(self.latent_dim,))
            img = model(noise)
    
            return Model(noise, img)
    
        def build_discriminator(self):
    
            model = Sequential()
    
            model.add(Flatten(input_shape=self.img_shape))
            model.add(Dense(512))
            model.add(LeakyReLU(alpha=0.2))
            model.add(Dense(256))
            model.add(LeakyReLU(alpha=0.2))
            model.add(Dense(1, activation='sigmoid'))
            model.summary()
    
            img = Input(shape=self.img_shape)
            validity = model(img)
    
            return Model(img, validity)
    
        def train(self, epochs, batch_size=128, sample_interval=50):
    
    
            (X_train, _), (_, _) = mnist.load_data()
    
    
            X_train = X_train / 127.5 - 1.
            X_train = np.expand_dims(X_train, axis=3)
    
     
            valid = np.ones((batch_size, 1))
            fake = np.zeros((batch_size, 1))
    
            for epoch in range(epochs):
    
              
                idx = np.random.randint(0, X_train.shape[0], batch_size)
                imgs = X_train[idx]
    
                noise = np.random.normal(0, 1, (batch_size, self.latent_dim))
    
               
                gen_imgs = self.generator.predict(noise)
    
        
                d_loss_real = self.discriminator.train_on_batch(imgs, valid)
                d_loss_fake = self.discriminator.train_on_batch(gen_imgs, fake)
                d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
    
                noise = np.random.normal(0, 1, (batch_size, self.latent_dim))
    
              
                g_loss = self.combined.train_on_batch(noise, valid)
    
               
                print ("%d [D loss: %f, acc.: %.2f%%] [G loss: %f]" % (epoch, d_loss[0], 100*d_loss[1], g_loss))
    
              
                if epoch % sample_interval == 0:
                    self.sample_images(epoch)
    
        def sample_images(self, epoch):
            r, c = 5, 5
            noise = np.random.normal(0, 1, (r * c, self.latent_dim))
            gen_imgs = self.generator.predict(noise)
    
      
            gen_imgs = 0.5 * gen_imgs + 0.5
    
            fig, axs = plt.subplots(r, c)
            cnt = 0
            for i in range(r):
                for j in range(c):
                    axs[i,j].imshow(gen_imgs[cnt, :,:,0], cmap='gray')
                    axs[i,j].axis('off')
                    cnt += 1
            fig.savefig("images/%d.png" % epoch)
            plt.close()
    
    
    if __name__ == '__main__':
        gan = GAN()
        gan.train(epochs = 30000, 
        		  batch_size = 16, 
        		  sample_interval = 200)
    
    
    展开全文
  • 最后描述 DFN 完整的编码-解码器网络架构。 图 2:判别特征网络概览。(a)网络架构。(b)优化残差模块(Refinement Residual Block/RRB)的组件。(c)通道注意力模块(CAB)的组件。红线、蓝线分别表征上...
  • 概率生成模型简称生成模型(Generative Model),是概率统计和机器学习中的一类重要模型,指一系列用于随机生成可观测数据的模型。...深度生成模型就是利用深层神经网络可以近似任意函数的能力来建模一个复杂的...
  • D:判别模型,目的:实现对数据来源的二分类。 G:生成模型 生成模型: 生成假数据,结合判别模型,最终达到生成以假乱真的数据。 判别模型: 判别数据是真/假。 自编码: 通过训练网络忽略信号中噪声的数据...
  • 生成式对抗网络(GAN)是基于可微生成器网络的另一种生成式建模方法。 GAN一般有两个内容,一是生成(generator),二...其对手判别器网络(diacriminator network)试图区分从训练数据中抽取的样本和从生成中抽取的
  • 从多层感知到卷积网络(一)

    万次阅读 多人点赞 2015-06-01 20:34:26
    这两种网络都属于前馈型网络(Feedforward network),其中多层感知(MLP)是最简单也是最常见的一种神经网络结构,它是所有其他神经网络结构的基础,所以不出意外,在介绍卷积网络前,不得不提一提...
  • 伪造图片训练集的真实数字图片一起进入判别器判别器判别输入为真还是假,刚开始生成图片离真实图片差距很大,在判别器的不断优化过程生成也不断提高水平,二者同时优化,最后达到目的辨别器很好的基础上依然...
  • 从线性分类到卷积神经网络

    千次阅读 2018-09-03 14:54:43
    从线性分类到卷积神经网络 前言 本文大致分成两大部分,第一部分尝试将本文涉及的分类统一到神经元类模型中,第二部分阐述卷积神经网络(CNN)的发展简述和目前的相关工作。 本文涉及的分类(分类方法)有...
  • 判别网络的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来 MinMax Game 对抗训练 生成网络要尽可能地欺骗判别网络 判别网络将生成网络生成的样本与真实样本中尽可能...
  • 网络安全第五讲 网络攻击技术分析

    万次阅读 多人点赞 2020-10-24 17:06:30
    网络信息安全第五讲 网络攻击技术分析 按照攻击目的,可将攻击分为破坏型和入侵型两种类型。 破坏型攻击以破坏目标为目的,但攻击者不能随意控制目标的系统资源。 入侵型攻击以控制目标为目的,比破坏型攻击威胁更...
  • 注意在定义生成判别器时,我们要指定变量的 scope,这是因为 GAN 中实际上包含生成辨别器两个网络,在后面进行训练时是分开训练的,因此我们要把 scope 定义好,方便训练时候指定变量。 在这个网络中,...
  • 文章目录什么是GAN纳什均衡GAN的学习过程GAN的局限性如何改善GAN的局限性 ...判别器目的是尽量正确判别输入数据是来自真实数据还是来自生成 生成判别器就是一个矛和盾互相PK的过程 为了取得游戏胜利,
  • 生成对抗网络判别器在二分类游戏上表现了强大的区分能力, RSGAN  使用相对判别器将真假样本混合利用“图灵测试”的思想削弱了判别器的能力, T-GANs  将 RSGAN 一般化到其它 GAN 模型下,判别器得到限制在整体...
  • 神经网络之感知准则,delta准则

    千次阅读 2015-07-03 22:26:05
    这篇文章主要介绍神经网络中两个基本单元,感知和线性单元,以及他们的训练法则。 所谓训练法则就是定义一个或一组规则,通过这些规则能让我们的到一组合适的权向量。 神经网络包括集中主要的基本单元,主要是...
  • 上面过程中网络的两个分支所用的是同一个函数,也就是权值、网络结构是同一个,我们完全可以把Gw(x)看成是一个特征提取,因此siamese network网络其实就是一个提取一直图片的特征算子的过程,然后再网络的最后一...
  • 生成对抗网络(GAN)

    2020-11-12 17:28:17
    生成(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器 判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成做的“假数据” 参考: 1.生成对抗网络:...
  • 贝叶斯分类与贝叶斯网络

    千次阅读 2015-11-19 17:55:28
    原文地址:贝叶斯分类与贝叶斯网络作者:yfx416 贝叶斯分类是一种基于贝叶斯公式的分类,是一种基于统计的分类,它计算在某一特征向量的前提下,各种分类可能出现的概率.把概率最大的那个类当作最终的分类...
  • 目录一、生成对抗网络原理二、GAN网络结构详解三、生成判别器训练思路四、实现代码 一、生成对抗网络原理 生成对抗网络,是一种基于博弈思想的网络训练思路,其主要网络模块由两部分组成,分别为generator(生成...
  • 生成对抗网络GANs理解(附代码)

    万次阅读 多人点赞 2017-01-20 12:36:28
    生成模型和判别模型理解对抗网络,首先要了解生成模型和判别模型。判别模型比较好理解,就像分类一样,有一个判别界限,通过这个判别界限去区分样本。从概率角度分析就是获得样本x属于类别y的概率,是一个条件概率P...
  • 生成对抗网络GAN

    2020-10-31 15:59:43
    设定参与游戏的双方分别为一个生成(Generator)和一个判别器(Discriminator), 生成捕捉真实数据样本的潜在分布, 并生成新的数据样本; 判别器是一个二分类, 判别输入是真实数据还是生成的样本。 为了取得游戏...
  • 生成对抗网络学习笔记 生成对抗网络有两个关键结构:生成模型、判别模型。 生成模型:输入是一个服从正态分布的N维向量,利用这个N维向量...结合代码来看生成对抗网络中,生成判别器的训练过程: 判别模型的训...
  • BP神经网络分类的设计

    万次阅读 2016-03-10 20:12:54
    3层BP神经网络学习训练过程主要由4部分组成:输入模式顺传播(输入模式由输入层经隐含层向输出层传播计算)、输出误差逆传播(输出的误差由输出层经隐含层传向输入层)、循环记忆训练(模式顺序传播与误差逆传播的...
  • DDcGAN: A Dual-Discriminator Conditional Generative Adversarial Network for Multi-Resolution Image Fusion​​​​​​ DDcGAN:一种用于多分辨率图像融合的双鉴别条件生成... 生成目的是生成一个真实的..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,255
精华内容 12,502
关键字:

判别器网络的目的