什么是自编码器?
自编码器是用于无监督学习的神经网络。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 训练前每个数据点的样本数
翻译:风一样的男子
如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!