半监督笔记-1

引:
LadderNet:
https://blog.csdn.net/shangjiankeji/article/details/112681450
https://zhuanlan.zhihu.com/p/54719656
自编码器:
https://blog.csdn.net/qq_24407657/article/details/82499677
https://www.sohu.com/a/224516673_99992181

1. Γ Model:Semisupervised learning with ladder networks,2015
在这里插入图片描述
在这里插入图片描述

网络由两个部分构成,分别是降噪自编码器(Encoder+Decoder) 以及 无噪的前向网络(网络结构一般与 Encoder 部分一致)。

对于有标签的数据, 数据只会流经降噪自编码器的 Encoder 模块,并通过顶层的输出与原始输入构建有监督的目标函数。

对于无标签数据, 数据经过 Encoder 模块实现了加噪编码,随后经过 Decoder 模块进行逐层解码,并获取到一系列隐层表示。另一方面,最右侧无噪的前向网也会对原始无标签数据进行逐层编码,这正是 Decoder 模块对应隐层的目标值。 通过最小化二者的均方误差,即可从无标签数据中提取到学习信号。


初步分析,望指点:
有标签数据流经左侧,通过迭代,encoder的参数为可进行预测的参数;
无标签数据通过其参数,得到代表性特征(相当于进行的是预测,acc逐渐增高),将其特征反编码,利用自编码器的重构,逐步减小误差;
所谓特征反编码,其实可以将右侧的encoder与decoder看作一个自编码器,反编码的特征要重构成输入,即与右侧进行优化,减小误差;

我家对象补充:左侧是加噪,右侧无噪,权重共享,实现一致性正则化


通过上述网络设计,实现了有监督和无监督的部分分离。

一般,监督学习,对于high level的任务,只希望保留任务相关的信息,保留某种内在不变的信息;
无监督学习(Auto Encoder),一般用重构样本进行训练,目的是尽可能保留样本信息,很明显,这两者是互相矛盾,不能强行直接结合在一起的。

Ladder network 属于半监督,多任务的模型,它将加噪,去噪的任务设计到了一个encoder 和decoder的结构中,结合分类网络,取得了较好的性能。

LadderNet 在每层的编码器和解码器之间添加跳跃连接(skip connection),减轻模型较高层表示细节的压力,使得无监督学习和有监督学习能结合在一起,并在最高层添加分类器,LadderNet 就变身成一个半监督模型。

自编码器希望保留大多数信息以便重构,而分类器希望只学习到与任务相关的、具有不变性的信息,那么其他的信息,对于分类器就相当于某种噪声,换句话说,分类器学习的过程,也可以解释为是一种降噪的过程。

降噪自编码器,在编码时进行去噪,在解码时进行重构。 因此降噪自编码器的编码过程,很好地符合了分类器希望去噪(去掉与任务无关的信息)的目的。因为降噪自编码器的训练学习,强化了分类器的降噪能力,而且因为是无监督降噪,这种降噪是一种通用降噪,可以提升分类器的泛化能力。


自编码器是一种能够通过无监督学习,学到输入数据高效表示的人工神经网络。

自编码器(Auto-encoder)是一种旨在将它们的输入复制到的输出的神经网络。他们通过将输入压缩成一种隐藏空间表示(latent-space representation),然后这种重构这种表示的输出进行工作。这种网络由两部分组成:

编码器:将输入压缩为潜在空间表示。可以用编码函数h = f(x)表示。解码器:这部分旨在重构来自隐藏空间表示的输入。可以用解码函数r = g(h)表示。
在这里插入图片描述
自编码器通过简单地学习将输入复制到输出来工作。我们希望通过训练自编码器将输入复制到输出中,使隐藏表示的h拥有有用的属性。

通过在复制任务上创建约束条件来实现这点。比如,可以限制内部表示的尺寸(这就实现降维了),或者对训练数据增加噪声并训练自编码器使其能恢复原有。这些限制条件防止自编码器机械地将输入复制到输出,并强制它学习数据的高效表示。

简而言之,编码(就是输入数据的高效表示)是自编码器在一些限制条件下学习恒等函数(identity function)的副产品。

想要从自编码器中获得有用特征,一种方法是约束h的维度小于x,在这种情况下,自编码器被称为欠完备(undercomplete)。通过训练不完整的表示,我们迫使自编码器学习训练数据的最有代表性(显著的)的特征。

普通的自编码器是最简单的自编码器,它有三层网络,包含一个隐藏层,输入和输出是相同的。使用adam优化器和均方误差损失函数, 学习如何重构输入。 简单复制了代码,未运行,只是为了参考解析原理;

# -*- coding: utf-8 -*-
import tensorflow as tf
from tensorflow.contrib.layers import fully_connected

n_inputs = 3 
n_hidden = 2 
n_outputs = n_inputs

learning_rate = 0.01


X = tf.placeholder(tf.float32, shape=[None, n_inputs])

hidden = fully_connected(X, n_hidden, activation_fn=None)

outputs = fully_connected(hidden, n_outputs, activation_fn=None)


reconstruction_loss = tf.reduce_mean(tf.square(outputs - X)) # MSE

 
optimizer = tf.train.AdamOptimizer(learning_rate)

training_op = optimizer.minimize(reconstruction_loss)


init = tf.global_variables_initializer()


X_train, X_test = [...] # load the dataset


n_iterations = 1000

codings = hidden # the output of the hidden layer provides the codings

with tf.Session() as sess:

    init.run()

    for iteration in range(n_iterations):

        training_op.run(feed_dict={X: X_train}) # no labels (unsupervised)

    codings_val = codings.eval(feed_dict={X: X_test})

编码(codings),其维度一般远小于输入数据,使得自编码器可用于降维。

自编码器可作为强大的特征检测器(feature detectors),应用于深度神经网络的预训练。

此外,自编码器还可以随机生成与训练数据类似的数据,这被称作生成模型(generative model)。比如,可以用人脸图片训练一个自编码器,它可以生成新的图片。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值