DL4J中文文档/模型/自编码器

什么是自编码器?

自编码器是用于无监督学习的神经网络。Eclipse DL4J支持某些自动编码器层,如变分自编码器。

受限波尔滋曼机在哪?

0.9.x版本已不再支持受限波尔滋曼机了,对于多数机器学习问题它们不再是最好的选择了。

支持的层


AutoEncoder(自编码器)

[源码]

自编码器层,添加噪声到输入并学习重建函数。

corruptionLevel

public Builder corruptionLevel(double corruptionLevel) 

构建器 - 设置损坏级别- 0(无)到1(所有值损坏)

  • 参数 corruptionLevel 损坏级别 (0 to 1)

sparsity

public Builder sparsity(double sparsity) 

自编码器稀疏参数

  • 参数 sparsity 稀疏性

BernoulliReconstructionDistribution(伯努利重建分布)

[源码]

变分自编码器的伯努利重构分布。

输出由伯努利分布建模——即,伯努利分布应该用于二分类数据(所有值是0或1);变分自编码器将输出的概率建模为0或1。

因此,应使用sigmoid活函数将限制激活范围为0至1。避免产生不在0至1范围内数据的激活函数(包括relu、tanh和许多其它)。

hasLossFunction

public boolean hasLossFunction() 

用默认Sigmoid激活函数创建一个伯努利重建分布


CompositeReconstructionDistribution(组合重建分布)

[源码]

组合重建分布由其它重建分布构建而来。典型的用途是将例如连续数据和二分类数据组合在同一个模型中,或者组合连续变量的不同分布。不何哪种情况下,此类允许用户建模(例如)前10个值。

addDistribution

public Builder addDistribution(int distributionSize, ReconstructionDistribution distribution) 

添加另一个分布到一个组合分布中。在任何先前的添加后,这将为下一个‘distributionSize’值添加分布。例如,在由指定的分布X建模时调用addDistribution(10, X)一次会导致值为0到9(包括)。在由指定的分布Y建模时调用addDistribution(10, Y)一次会导致值为10到19(包括)

  • 参数 distributionSize 使用指定分布模型的值的数目
  • 参数 distribution 模型数据分布

ExponentialReconstructionDistribution(指数重建分布)

[源码]

指数重建分布
支持数据范围 [0,无穷)

这里使用的参数化:网络模型分布参数gamma,其中gamma=log(lambda),用 gamma in (-inf, inf)

这意味着一个来自自编码器的输入gamma = 0 给出lambda = 1,这与指数均值有关。

关于激活函数的选择:上面的参数化支持gamma范围(负无穷大,无穷大),因此优先选择对称激活函数,如“identity”或“tanh”。

hasLossFunction

public boolean hasLossFunction() 
  • 弃用 

GaussianReconstructionDistribution (高斯重建分布)

[源码]

变分自编码器的高斯重建分布

输出由高斯分布建模,其中均值和方差(对角协方差矩阵)由网络正向传递确定。

具体地说,高斯重建分布模型均值和log(STDEV ^ 2)。这个参数化给出log(1)=0,并且输入可以在范围(无穷大,无穷大)内。用于方差的其他参数化当然是可能的,但是关于平均预激活函数值和激活函数范围可能是有问题的。

对于激活函数,identity和tanh可能是典型的,尽管tanh(不同于identity)意味着平均值和对数方差的最小/最大可能值。应避免不对称激活功能,如sigmoid或relu。

hasLossFunction

public boolean hasLossFunction() 

创建具有默认identity激活函数的高斯重建分布。


LossFunctionWrapper(损失函数包装器)

[源码]

损失函数包装器允许训练具有标准(可能确定性)神经网络损失函数的VAE(分变自编码器)模型。

注意:大多数功能都被支持,但是显然在使用损失函数包装器时不能计算重建对数概率,因为ILossFunction实例既没有(a)概率解释,也没有(b)计算负对数概率的方法。


ReconstructionDistribution

[源码]

指定分布的形式 p(数据|x). 例如,真实值数据可以被建模。 


VariationalAutoencoder(变分自编码器)



[源码]

变分自编码器层

查看: Kingma & Welling, 2013: 自动编码变分贝叶斯 - https://arxiv.org/abs/1312.6114

这种实现允许多个编码器和解码器层,其数量和大小可以独立设置。

关于预训练期间的分数的注释:这个实现Kingma & Welling中描述的变分下限目标的负值最小化;该文章中的数学是基于变分下限的最大化。因此,在DL4J预训练报告的分数是本文的变分下界方程的负值。反向传播和学习过程就是在那里描述的。

encoderLayerSizes

public Builder encoderLayerSizes(int... encoderLayerSizes) 

编码器层的大小,单位。每个编码器层在功能上等同于 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解码器层的数量和大小 (通过 {- link #decoderLayerSizes(int…)设置} )类似于编码器层。

  • 参数 encoderLayerSizes 变分编码器中每个编码器层的大小

decoderLayerSizes

public Builder decoderLayerSizes(int... decoderLayerSizes) 

解码器层的单位大小。每个解码器层在功能上等同于 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解码器层的数量和大小与编码器层相似。(通过 {- link #encoderLayerSizes(int…)设置}。

  • 参数 decoderLayerSizes 变分编码器中每个解码层的大小

reconstructionDistribution

public Builder reconstructionDistribution(ReconstructionDistribution distribution) 

给定隐藏状态数据的重建分布- i.e., P(data|Z).
这应该根据建模的数据类型仔细选择。例如:

  • {- link GaussianReconstructionDistribution} + {identity 或 tanh}用于实际值(高斯)数据
  • {- link BernoulliReconstructionDistribution} + sigmoid 用于  二分类  (0 or 1) 数据

  • 参数 distribution 重建分布

lossFunction

public Builder lossFunction(IActivation outputActivationFn, LossFunctions.LossFunction lossFunction) 

配置变分自编码器以使用指定的损失函数进行重建,而不是重建分布。注意,这不遵循标准的变分自编码器设计(根据Kingma & Welling),它假定一个概率输出,即一些p(x|z)。然而,它是一个有效的网络配置,允许优化更传统的目标,例如均方误差。

注意:显然,设置损失函数将取代任何先前设置的重建分布。

  • 参数 outputActivationFn输出/重建的激活函数
  • 参数 lossFunction 使用的损失函数

lossFunction

public Builder lossFunction(Activation outputActivationFn, LossFunctions.LossFunction lossFunction) 

配置变分自编码器以使用指定的损失函数进行重建,而不是重建分布。注意,这不遵循标准的变分自编码器设计(根据Kingma & Welling),它假定一个概率输出,即一些p(x|z)。然而,它是一个有效的网络配置,允许优化更传统的目标,例如均方误差。

注意:显然,设置损失函数将取代任何先前设置的重建分布。

  • 参数 outputActivationFn输出/重建的激活函数
  • 参数 lossFunction 使用的损失函数

lossFunction

public Builder lossFunction(IActivation outputActivationFn, ILossFunction lossFunction) 

配置变分自编码器以使用指定的损失函数进行重建,而不是重建分布。注意,这不遵循标准的变分自编码器设计(根据Kingma & Welling),它假定一个概率输出,即一些p(x|z)。然而,它是一个有效的网络配置,允许优化更传统的目标,例如均方误差。

注意:显然,设置损失函数将取代任何先前设置的重建分布。

  • 参数 outputActivationFn输出/重建的激活函数
  • 参数 lossFunction 使用的损失函数

pzxActivationFn

public Builder pzxActivationFn(IActivation activationFunction) 

输入到P(z|数据)的激活函数。
应该注意这一点,某些激活函数(relu等)由于在[0,无穷大]范围内有界而不适用。

参数 activationFunction  p(z|x)的激活函数

pzxActivationFunction

public Builder pzxActivationFunction(Activation activation) 

输入到P(z|数据)的激活函数
应该注意这一点,某些激活函数(relu等)由于在[0,无穷大]范围内有界而不适用。

参数 activationFunction  p(z|x)的激活函数

nOut

public Builder nOut(int nOut) 

设置VAE(变分自编码器)状态Z的大小。这是标准正向传播期间的输出大小,以及预训练期间的分布P(Z|数据)的大小。

参数 nOut  P(Z|数据) 和输出数据的大小

numSamples

public Builder numSamples(int numSamples) 

设置每个数据点(来自VAE状态Z)在进行预训练时使用的样本数。默认值:1。

这是来自Kingma和Welling的参数L:“在我们的实验中,我们发现,只要小批量M足够大,每个数据点的样本L的数量就可以设置为1,例如M=100。”

  • 参数 numSamples 训练前每个数据点的样本数

猜你喜欢

转载自blog.csdn.net/bewithme/article/details/83654158