自动编码器

winterSky 2024-03-18 AM 288℃ 0条

2024-03-17T22:17:35.png

                 图为 :Typical Autoencoder Architecture

自编码器:

  • 获取有标签的训练数据通常代价昂贵。
  • 自编码器是一种无需监督的神经网络架构,其核心思想是使输出与输入相同(重建)。
  • 包含一个编码器和一个解码器。
  • 生成输入的编码或潜在表示。
  • 避免平凡的解决方案(那些只是复制输入的),通过:

    • 瓶颈层(限制潜在表示的大小)
    • 添加噪声
  • 对以下应用有用:

    • 维度缩减
    • 无监督预训练
    • 生成模型

典型自编码器架构:

  • 深度自编码器通常在编码器和解码器部分具有对称结构。
  • 编码器层的神经元数量逐渐减少。
  • 解码器层的神经元数量逐渐增加。
  • 输出层与输入层匹配。

表示学习(Representation Learning)

2024-03-17T22:20:59.png

  • 编码器:将输入映射到潜在表示的识别网络。
  • 解码器:将潜在表示转换回输出的生成网络。

表示学习(Representation Learning),也被称为特征学习(Feature Learning),是机器学习中的一个概念,其目标是自动发现输入数据中的有用表示。这些表示可以更好地揭示数据的结构,使得机器学习模型(例如分类器或其他任务的算法)能够更有效地学习。

在表示学习中,模型试图学习输入数据的变换,这些变换可以将数据从原始空间(例如图片的像素值)映射到一个新空间,这个新空间的特征通常更有助于机器学习任务。这个过程涉及到识别和提取输入数据中最有信息量的部分,忽略不相关的噪声。

  • 编码器 是识别网络(recognition network),它将输入映射到一个潜在表示。这个表示是对输入数据的一个压缩形式,捕获了数据最重要的特征。
  • 解码器 是生成网络(generative network),它将潜在表示转换回输出(可能是原始输入的重建,或者是一个新的表现形式)。

表示学习在无监督学习中尤为重要,例如在自编码器中,因为这种情况下模型必须自己发现结构而没有标签指导。这种学习方法的一个关键优势是,一旦学会了表示,它可以用于多种不同的任务。例如,通过图像识别任务学习的表示可能也有助于物体检测或图像分割任务。这种能力使表示学习成为构建灵活、多用途机器学习系统的强大工具。


去噪自编码器:

  • 通过添加高斯噪声(使用 GaussianNoise 层)或使用 Dropout,使重构变得非平凡(更加复杂)。

2024-03-17T22:22:55.png


深度生成模型(关键思想)

2024-03-17T22:24:04.png

  • 变分自编码器(Variational autoencoders):

    • 潜在表示是高斯分布。
    • 通过采样潜在分布具有生成能力。
  • 生成对抗网络(GANs):

    • 有一个鉴别器,其目标是将假图像从真图像中区分出来。
    • 有一个生成器,其目标是欺骗鉴别器。

Fashion MNIST 数据集的自编码器示例

# Autoencoder example using fashion MNIST
# Load image data
fashion_mnist = keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

# Define class names for fashion MNIST dataset
# 定义 Fashion MNIST 数据集的类别名称
class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat", "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

# Data preparation:
# 数据准备:
# Map intensities from [0--255] to 0.0--1.0
# 将图像像素的强度从 [0--255] 映射到 0.0--1.0
x_train = x_train / 255.0
x_test = x_test / 255.0

# Define the encoder model
# 定义编码器模型
encoder = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28, 28]),
    keras.layers.Dense(100, activation="selu"),
    keras.layers.Dense(30, activation="selu")
])

# Define the decoder model
# 定义解码器模型
decoder = keras.models.Sequential([
    keras.layers.Dense(100, activation="selu", input_shape=[30]),
    keras.layers.Dense(28*28, activation="sigmoid"),
    keras.layers.Reshape([28, 28])
])

# Combine encoder and decoder to form autoencoder model
# 组合编码器和解码器,构建自编码器模型
ae = keras.models.Sequential([encoder, decoder])

# Compile the autoencoder model
# 编译自编码器模型
ae.compile(loss="binary_crossentropy", optimizer=keras.optimizers.SGD(learning_rate=1.5))

# Train the autoencoder model
# 训练自编码器模型
history = ae.fit(x_train, x_train, epochs=10, validation_split=0.1)
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~