经典三级片,distance,重生之名流巨星-基金天使,万种基金等你来选

admin 7个月前 ( 05-27 01:08 ) 0条评论
摘要: 全文共5718字,预计学习时长20分钟或更长变分自动编码器可以说是最实用的自动编码器。但是在讨论VAE之前,还必须了解一下用于数据压缩或去噪的传统自动编码器。...

全文共5718字,估计学习时长20分钟或更长


变分主动编码器(VAE)能够说是最有用的主动编码器,可是在评论VAE之前,还有必要了解一下用于数据紧缩或去噪的传统主动编码器。

变分主动编码器的凶猛之处


假定你正在开发一款开放性国际端游,且游戏里的景象设定适当杂乱。

你聘用了一个图形规划团队来制造一些植物和树木以装修游戏国际,可是将这些装修植物放进游戏中之后,你发现它们看起来很不天然,由于同种植物的外观看起来如出一辙,这时你该怎样办呢?

首要,你或许会主张运用一些参数化来测验随机地改动图画,可是多少改动才满足呢?又需求多大的改动呢?还有一个重要的问题:完结这种改动的核算强度怎样?

这是运用变分主动编码器的抱负状况。咱们能够操练一个神经网络,使其学习植物的潜在特征,每逢咱们将一个植物放入游戏国际中,就能够从“已学习”的特征中随机抽取一个样本,生成共同的植物。事实上,许多开放性国际游戏正在经过这种方法构建他们的游戏国际设定。

再看一个更图形化的比如。假定咱们是一个修建师,想要为恣意形状的修建生成平面图。能够让一个主动编码器网络依据恣意修建形状来学习数据生成散布,它将从数据生成散布中提取样原本生成一个平面图。详见下方的动画。


关于规划师来说,这些技能的潜力无疑是最杰出的。

再假定咱们经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选为一个时装公司作业,需求规划一种新的服装风格,能够依据“时髦”的服装来操练主动编码器,使其学习时装的数据生成散布。随后,从这个低维潜在散布中提取样本,并以此来发明新的风格。

在该节中咱们将研讨fashion MNIST数据集。

主动编码器


传统主动编码器

主动编码器其实便是十分简略的神经结构。它们大体上是一种紧缩方法,类似于运用MP3紧缩音频文件或运用jpeg紧缩图画文件。



主动编码器与主成分剖析(PCA)密切相关。事实上,假如主动编码器运用的激活函数在每一层中都是线性的,那么瓶颈处存在的潜在变量(网络中最小的层,即代码)将直接对应(PCA/主成分剖析)的首要组件。一般,主动编码器中运用的激活函数对错线性的,典型的激活函数是ReLU(整流线性函数)和sigmoid/S函数。

网络背面的数学原理了解起来相对简略。从本质上看,能够把网络分红两个部分:编码器和解码器。



编码器函数用表明,该函数将原始数据X映射到潜在空间F中(潜在空间F坐落瓶颈处)。解码器函数用表明,该函数将瓶颈处的潜在空间F映射到输出函数。此处的输出函数与输入函数相同。因而,咱们根本上是在一些归纳的非线性紧缩之后重建原始图画。

编码网络能够用激活函数传递的规范神经网络函数表明,其间z是潜在维度。


类似地,解码网络能够用相同的方法表明,但需求运用不同的权重、差错和潜在的激活函数。


随后就能够运用这些网络婚外性函数来编写丢掉函数,咱们会运用这个丢掉函数经过规范的反向传达程序来操练神经网络。


由于输入和输出的是相同的图画,神经网络的操练进程并不是监督学习或无监督学习,咱们一般将这个进程称为自我监督学习。主动编码器的意图是挑选编码器和解码器函数,这样就能够用最少的信息来编码图画,使其能够在另一侧从头生成。

假如在瓶颈层中运用的节点太少,从头创立图画的才能将遭到约束,导致从头生成的图画含糊或许和原图画不同很大。假如运用的节点太多,那么就没必要紧缩了。

紧缩背面的理论其实很简略,例如,每逢你在Netflix下载某些内容时,发送给你的数据都会被紧缩。一旦这个内容传输到电脑上就会通解压算法在电脑屏幕显现出来。这类似于zip文件的运转方法,仅仅这儿说的紧缩是在后台经过流处理算法完结的。

去噪主动编码器

有几种其它类型的主动编码器。其间最常用的是去噪主动编码器,本教程稍后会和Keras一同进行剖析。这些主动编码器在操练前给数据增加一些白噪声,但在操练时会将差错与原始图画进行比较。这就使得网络不会过度拟合图画中呈现的恣意噪声。稍后,将运用它来铲除文档扫描图画中的折痕和暗黑区域。

稀少主动编码器

与其字义相反的是,稀少主动编码用具有比输入或输出维度更opds书源地址大的潜在维度。可是,每次网络运转时,只要很小一部分神经元会触发,这意味着网络本质上是“稀少”的。稀少主动编码器也是经过一种规则化的方法来削减网络过度拟合的倾向,这一点与去噪主动编码器类似。

缩短主动编码器

缩短编码器与前两个主动编码器的运转进程根本相同,可是在缩短主动编码器中,咱们不改动结构,仅仅在丢掉函数中增加一个正则化器。这能够被看作是岭回归的一种神经方法。

现在了解了主动编码器是怎样运转的,接下来看看主动编码器的弱项。一些最显着的应战包含:

潜在空间中的空隙

潜在空间中的可分性

离散潜在空间

这些问题都在以下图中表现。

MNIST数据集的潜在空间表明


这张图显现了潜在空间中不同符号数字的方位。能够看到潜在空间中存在空隙,咱们不知道字符在这些空间中是长什么样的。这适当于在监督学习中缺少数据,由于网络并没有针对这些潜在空间的状况进行过操练。另一个问题便是空间的可分性,上图中有几个数字被很好地别离,但也有一些区域被标签字符是随机散布的,这让咱们很难区别字符的共同特征(在这个图中便是数字0-9)。还有一个问题是无法研讨接连的潜在空间。例如,咱们没有针对恣意输入而操练的核算模型(即便咱们填补了潜在空间中的一切空隙也无法做到)。

这些传统主动编码器的问题意味着咱们还要做出更多尽力来学习数据生成散布并生成新的数据与图画。

现在现已了解了传统主动编码器是怎样运转的,接下来评论变分主动编码器。变分主动编码器选用了一种从贝叶斯核算中提取的变分推理方法,因而会比前几种主动编码器略微杂乱一些。咱们会在下一节中更深化地评论变分主动编码器。

变分主动编码器


变分主动编码器连续了传统主动编码器的结构,并运用这一结构来学习数据生成散布,这让咱们能够从潜在空间中随机抽取样本。然后,能够运用解码器网络对这些随机样本进行解码,以生成共同的图画,这些图画与网络所操练的图画具有类似的特征。


关于了解贝叶斯核算的人来说,编码器正在学习后验散布的近似值。这种散布一般很难剖析,由于它没有封闭式的解。这意味着咱们要么履行核算上杂乱的采样程序,如马尔可夫链蒙特卡罗(MCMC)算法,要么选用变分方法。正如你或许猜想的那样,变分主动编码器运用变分推理来生成这以后验散布的近似值。

咱们将会用适量的细节来评论这一进程,但张文友是假如你想了解更深化的剖析,主张你阅读一下Jaan Altosaar编撰的博客。变分推理是研讨生机器学习课程或核算学课程的一个主题,可是了解其根本概念并不需求具有一个核算学学位。

若对背面的数学理论不感兴趣,也能够挑选越过这篇变分主动编码器(VAE)编码教程。

首要需求了解的是后验散布以及它无法被核算的原因。先看看下面的方程式:贝叶斯定理。这儿的条件是要知道怎样从潜变量“z”生成数据“x”。这意味着要搞清p(z|x)。可是,该散布值是不知道的,不过这并不重要,由于贝叶斯定理能够从头表达这个概率。可是这还没有处理一切的问题,由于分母(依据)一般很难解。但也不是就此束手无辞了,还有一个挺有意思的方法能够近似这个后验散布值。那便是将这个推理问题转化为一个优化问题。


要近似后验散布值,就有必要找出一个方法来评价提议散布与实在后验散布比较是否更好。而要这么做,就需求贝叶斯核算员的最佳同伴:KL散度。KL散度是两个概率散布类似度的衡量。假如它们持平,那散度为零;而假如散度是正值,就代表这两个散布不持平。KL散度的值为非负数,但实践上它不是一个间隔,由于该函数不具有对称性。能够采李淑显用下面的方法运用KL散度:


这个方程式看起来或许有点杂乱,可是概念相对简略。那便是先猜想或许生成数据的方法,并提出一系列潜婚礼紧急在散布Q,然后再找出最佳散布q*,从将提议散布和实在散布的间隔最小化,然后因其难解性将其近似。但这个公式仍是有一个问题,那便是p(z|x)的不知道值,所以也无法核算KL散度。那么,应该怎样处理这个问题呢?

这儿就需求一些熟行常识了。能够先进行一些核算上的修正并针对依据下界(ELBO)和p(x)重写KL散度:


风趣的是ELBO是这个方程中仅有取决于所选散布的变量。而后者由于不取决于q,则不受所选散布的影响。因而,能够在上述方程中经过将ELBO(负值)最大化来使KL散度最小化。这儿的重点是ELBO能够被核算,也便是说现在能够进行一个优化流程。

所以现在要做的便是给Q做一个好的挑选,再微分ELBO,将其设为零,然后就功德圆满了。可是开端的时分就会面对一些妨碍,即有必要挑选最好的散布系列。

一般来说,为了简化界说q的进程,会进行均匀场变分推理。每个变分参数本质李晓棠上是彼此独立的。因而,每个数据点都有一个独自的q,可被相等以得到一个联合概率,然后取得一个“均匀场”q。


实践上,能够选用恣意多的场或许集群。比如在MINIST数据会集,能够挑选10个集群,由于或许有10个数字存在。

要做的第二件事一般被称为再参数化技巧,经过把随机变量带离导数完结,由于从随机变量求导数的话会由于它的内涵随机性而发生较大的差错。


再参数化技巧较为艰深,但简略来说便是能够将一个正态散布写成均值加规范差,再乘以差错。这样在微分时,咱们不是从随机变量自身求导数,而是从它的参数求得。

这个程序没有一个通用的闭型解,所以近似后验散布的才能仍然遭到必定约束。可是,指数散布族的确有一个闭型解。这意味着规范散布,如正态散布、二项散布、泊松散布、贝塔散布等。所以,就算实在的后验散布值无法被查出,仍然能够运用指数散布族得出最接近的近似值。

变分推理的奥妙在于挑选散布区Q,使其满足大以求得后验散布的近似值,但又不需求很长时刻来核算。

已然现已大致了解怎样操练网络学习数据的潜在散布,那么现在能够评论怎样运用这个散布生成数据。

数据生成进程


调查下图,能够看出对数据生成进程的近似以为应生成数字‘2’,所以它从潜在变量质心生成数值2。可是或许不期望每次都生成一摸相同的数字‘2’,就好像上述端游比如所提的植物,所以咱们依据一个随机数和“已学”的数值‘2’散布规模,在潜在空间给这一进程增加了一些随机噪声。该进程经过解码器网络后,咱们得到了一个和原型看起来不相同的‘2’。


这是一个十分简化的比如,笼统描绘了实践主动编码器网络的系统结构。下图表明了一个实在变分主动编码器在其编码器和解码器网络运用卷积层的结构系统。从这儿能够调查到,咱们正在别离学习潜在空间中生成数据散布的中心和规模,然后从这些散布“抽样”生成本质上“虚伪”的数据。


该学习进程的固有性代表一切看起来很类似的参数(影响相同的网络神经元放电)都集合到潜在空间中,而不是随意的涣散。如下图所示,能够看到数值2都集合在一同,而数值3都逐渐地被推开。这一进程很有协助,由于这代表网络并不会在潜在空间随意摆放字符,然后使数值之间的转化更有实在性。

整个网络系统结构的概述如下图所示。期望读者看到这儿,能够比较明晰地了解整个进程。咱们运用一组图画操练主动编码器,让它学习潜在空间里均值和规范值的差,然后构成咱们的数据生成散布。接下来,当咱们要生成一个类似的图画,就从潜在空间的一个质心取样,运用规范差和一些随机差错对它进行细微的改动,然后使其经过解码器网络。从这个比如能够显着看出,终究的输出看起来与输入图画类似,但却是不相同的。

变分主动编码器编码攻略


本节将评论一个简略的去噪主动编码器,用于去除文档扫描图画上的折痕和污痕,以及去除Fashion MNIST数据会集的朱彦辉噪声。然后,在MNIST数据集操练网络后,就运用变分主动编码器生成新的服装。

去噪自编码器

Fashion MNIST

在第一个操练中,在Fashion MNIST数据集增加一些随经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选机噪声(椒盐噪声),然后运用去噪自编码器测验移除噪声。首要进行预处理:下载数据,调整数据巨细,然后增加噪声。

## Download the data
(x_train, y_train), (x_test, y_test) = 候明旲datasets.fashion_mnist.load_data()
## normalize and reshape
x_train = x_train/255.
x_test = x_test/255.
x_train = x_train.reshape(-1, 28, 28, 1)
x_test = x_test.reshape(-1, 28, 28, 1)
# Lets add sample noise - Salt and Pepper
noise = augmenters.SaltAndPepper(0.1)
seq_object = augmenters.Sequential([noise])
train_x_n = seq_object.augment_images(x_train * 255) / 255
val_x_n = seq_object.augment_images(x_test * 255) / 255


接着,给自编码器网络创立结构。这包含多层卷积神经网络、编码器网络的最大池化层和解码器网络上的晋级层。

# input layer
input_layer =Input(shape=(28, 28, 1))

# encodingarchitecture
encoded_layer1= Conv2D(64, (3, 3), activation='relu', padding='same')(input_layer)
encoded_layer1= MaxPool2D( (2, 2), padding='same')(encoded_layer1)
encoded_layer2= Conv2D(32, (3, 3), activation='relu', padding='sam海口天气预报一周e')(encoded_layer1)
encoded_layer2= MaxPool2D( (2, 2), padding='same')(encoded_layer2)
encoded_layer3= Conv2D(16, (3, 3), activation='relu', padding='same')(encoded_layer2)
latent_view = MaxPool2D( (2, 2),padding='same')(encoded_layer3)

# decodingarchitecture
decoded_layer1= Conv2D(16, (3, 3), activation='relu', padding='same')(latent_view)
decoded_layer1= UpSampling2D((2, 2))(decoded_layer1)
decoded_layer2= Conv2D(32, (3, 3), activat经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选ion='relu', padding='same')(decoded_layer1)
decoded_layer2= UpSampling2D((2, 2))(decoded_lay翱翔石家庄er2)
decoded_layer3= Conv2D(64, (3, 3), activation='relu')(decoded_layer2)
decoded_layer3= UpSampling2D((2, 2))(decoded_layer3)
output_layer = Conv2D(1, (3, 3), padding='same',activation='sigmoid')(decoded_layer3)

# compile themodel
model =Model(input_layer, output_layer)
model.compile(optimizer='adam',loss='mse')

# run themodel
early_stopping= EarlyStopping(monitor='val_loss', min_delta=0, patien诛仙往生咒ce=10, verbose=5,mode='auto')
history =model.fit(train_x_n, x_train, epochs=20, batch_size=2048,validation_data=(val_x_n, x_test), callbacks=[early_stopping])

所输入的图画,增加噪声的图画,和输出图画。

从时髦MNIST输入的图画。

增加椒盐噪声的输入图画。

从去噪网络输出的图画。

从这儿能够看到,咱们成功洪荒操纵之万界黑手从噪声图画去除适当的噪声,但一同也失去了必定量的服装细节的分辨率。这是运用稳健网络所需支付的价值之一。能够对该网络进行调优,使终究的输出更能代表所输入的图画。

文本整理

去噪自编码器的第二个比如包含整理扫描图画的折痕和暗黑区域。这是终究取得的输入和输出图画。

输入的有噪声文本数据图画。

经整理的文本图画。

为此进行的数据预处理略微杂乱一些,因而就不在这儿进行介绍,预处理进程和相关数据可在GitHub库里获取。网络结构如下:

input_lay经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选er= Input(shape=(258, 540, 1))

#encoder
encoder= Conv2D(64, (3, 3), activation='relu', padding='same')(input_layer)
encoder= MaxPooling2D((2, 2), padding='same')(encoder)

#decoder
decoder= Conv2D(64, (3, 3), activation='relu', padding='same')(encoder)
decoder= UpSampling2D((2, 2))(decoder)
output_layer= Conv2D(1, (3, 3), activation='sigmoid', padding='same')(d清果金服ecoder)

ae =Model(input_layer, output_layer)

ae.compile(loss='mse',optimizer=Adam(lr=0.001))

batch_size= 16
epochs= 200

early_stopping= EarlyStopping(monitor='val_loss',min_delta=0,patience=5,verbose=1火热热心脏,mode='auto')
history= ae.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,validation_data=(x_val, y_val), callbacks=[early_stopping])


变分自编码器

最终的压轴戏,是测验从FashionMNIST数据集现有的服装中生成新图画。

其间的神经结构较为杂乱,包含了一个称‘Lambda’层的采样层。

batch_size = 16
latent_dim = 2 # Number of latent dimension parameters
# ENCODER ARCHITECTURE: Input -经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选> Conv2D*4 -> Flatten -> Dense
input_img = Input(shape=(28, 28, 1))
x = Conv2D(32, 3,
padding='same',
activation='relu')(input_img)
x = Conv2D(64, 3,
padding='same',
activation='relu',
strides=(2, 2))(x)
x = Conv2D(潜组词64, 3,
padding='same',
activation='relu')(x)
x = Conv2D(64, 3,
padding='same',
activation='relu')(x)
# need to knoben10剧场版变身之谜w the shape of the network here for the decoder
shape_before_flattening = K.int_shape(x)
x = Flatten()(x)
x = Dense(32, activation='relu')(x)
# Two outputs, latent mean and (log)variance
z_mu = Dense(latent_dim)(x)
z_log_sigma = Dense(latent_dim)(x)
## SAMPLING FUNCTION
def sampling(args):
z_mu, z_log_sigma = args epsilon = K.random_normal(shape=(K.shape(z_mu)[0], laten热爱邪魅公主t_dim),
mean=0., stddev=1.)
return z_mu + K.exp(z_log_sigma) * epsilon
# sample vector from the latent distribution
z = Lambda(sampling)([z_mu, z_log_sigma])
## DECODER ARCHITECTURE
# decoder takes the latent distribution sample as input
decoder_input = Input(K.int_shape(z)[1:])
# Expand to 784 total pixels
x = Dense(np.prod(shape_before_flattening[1:]),
activation='relu')(decoder_input)
# reshape
x = Reshape(shape_before_flattening[1:])(x)
# use Conv2DTranspose to reverse the conv layers from the encoder
x = Conv2DTranspose(32, 3,
padding='same',
activation='relu',
strides=(2, 2))(x)
x = Conv2D(1, 3,
padding='same',
activation='sigmoid')(x)
# decoder model statement
decoder = 经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选Model(decoder_input, x)
# apply the decoder to the sample from the latent distribution
z_decoded = decoder(z)


这便是系统结构,但仍是需求刺进丢掉函数再兼并KL散度。

# construct a custom layer to calculate the loss
class CustomVariationalLayer(Layer):
def vae_loss(self, x, z_decoded):
x = K.flatten(x)
z_decoded = K.flatten(z_decoded)
# Reconstruction loss
xent_loss = binary_crossentropy(x, z_decoded)
# KL divergence
kl_loss = -5e-4 * K.mean(1 + z_log_sigma - K.square(z_mu) - K.exp(z_log_sigma), axis=-1)
return K.mean(xent_loss + kl_loss)
# adds the custom loss to the class
def call(self, inputs):
x = 武侠之运朝兴起inputs[0]
z_decoded = inputs[1]
loss = self.vae_l仁青多杰oss(x, z_decoded)
self.add_loss(loss, inputs=inputs)
return x
# apply the custom loss to the input images and the decoded latent distribution sample
y = CustomVariationalLayer()([input_img, z_decoded])
# VAE model statement
vae = Model(input_img, y)
vae.compile(optimizer='rmsprop', loss=None)
vae.fit(x=train_x, y=None,
shuffle=True,
epochs=20,
batch_size=batch_size,
validation_data=(val_x, None))


现在,能够检查重构的样本,看看网络能够学习到什么。


从经典三级片,distance,重生之名人巨星-基金天使,万种基金等你来选这儿能够清楚看到鞋子、手袋和服装之间的过渡。在此并没有标出一切使画面更明晰的潜在空间。也能够调查到Fashion MNIST数据集现有的10件服装的潜在空间和颜色代码。

可看出这些服饰分红了不同的集群。


留言 点赞 重视

咱们一同共享AI学习与开展的干货

欢迎重视全渠道AI垂类自媒体 “读芯术”

文章版权及转载声明:

作者:admin本文地址:http://www.jjths.com/articles/1537.html发布于 7个月前 ( 05-27 01:08 )
文章转载或复制请以超链接形式并注明出处基金天使,万种基金等你来选