自编码器基本原理

自编码器(Autoencoder,AE)是一类在半监督学习和非监督学习中使用的人工神经网络,其功能是通过将输入信息作为学习目标,对输入信息进行表征学习(representation learning)。本文主要对MATLAB2020实现堆栈自编码器的相关知识进行整理。

Autoencoder类

MATLAB提供了Autoencoder class,对2020版网页的简要翻译如下:
Description描述
一个自动编码器对象包含一个自动编码器网络,该网络由一个编码器和一个解码器组成。 编码器将输入映射到隐藏的表示形式。 解码器尝试将此表示映射回原始输入。
Construction结构
autoenc = trainAutoencoder(X) 返回使用X中的训练数据进行训练的自动编码器。
autoenc = trainAutoencoder(X,hiddenSize) 返回一个自动编码器,其隐藏表示大小为hiddenSize。
autoenc = trainAutoencoder(___,Name,Value) 返回上述任何输入参数的自动编码器,并带有一个或多个名称-值对参数指定的附加选项。比如可以指定稀疏比例或训练迭代的最大次数。
Input Arguments输入参数
X — 训练数据,数据类型:matrix | cell array of image data,数据类型:single | double | cell
训练数据,指定为训练样本矩阵或图像数据的单元格数组。 如果X是矩阵,则每一列都包含一个样本。 如果X是图像数据的单元格数组,则每个单元格中的数据必须具有相同的维数。 图像数据可以是用于灰度图像的像素强度数据,在这种情况下,每个单元都包含一个m×n矩阵。 替代地,图像数据可以是RGB数据,在这种情况下,每个单元包含一个m×n×3矩阵。

hiddenSize —自动编码器的隐藏表示形式的大小,要求为正整数值,默认为10。数据类型:single | double
自动编码器的隐藏表示形式的大小,指定为正整数值,表示隐藏层中神经元的数量。

More About中还介绍了相关的计算公式和原理,

Name-Value Pair Arguments名称-值对参数

trainAutoencoder网页中还介绍了自编码器训练设置的名称-值对参数,具体情况如下:

'EncoderTransferFunction' — Transfer function for the encoder
'logsig' (default) | 'satlin'

以上表示编码器的传递函数,指定为以逗号分隔的一对,由“ EncoderTransferFunction”和以下项之一组成,分别是logistic函数(默认)和正饱和线性传递函数,见下图。

自编码器神经网络好处 自编码器实现_机器学习

'DecoderTransferFunction' — Transfer function for the decoder
'logsig' (default) | 'satlin' | 'purelin'

以上表示解码器的传递函数,指定为以逗号分隔的一对,由“ DecoderTransferFunction”和以下项之一组成,分别是logistic函数(默认)、正饱和线性传递函数以及线性传递函数,见下图。

自编码器神经网络好处 自编码器实现_自编码器_02

'MaxEpochs' — Maximum number of training epochs
1000 (default) | positive integer value

MaxEpochs表示训练轮次或迭代的最大数量,指定为以逗号分隔的一对,其中包括“MaxEpochs”和一个正整数,默认为1000,具体数值需要自己摸索。

'LossFunction' — Loss function to use for training
'msesparse' (default)

LossFunction表示训练过程中的损失函数,指定为由“LossFunction”和“msesparse”组成的逗号分隔对。 它对应于为训练稀疏自动编码器而调整的均方误差函数,如下图所示:

自编码器神经网络好处 自编码器实现_神经网络_03


其中λ是L2正则项的系数,β是稀疏正则项的系数。分别使用L2WeightRegularization和SparsityRegularization名称-值对参数来指定λ和β的值。

'L2WeightRegularization' — The coefficient for the L2 weight regularizer
0.001 (default) | a positive scalar value

损失函数中L2权重调整器的系数λ,指定为以逗号分隔的对,由“L2WeightRegularization”和正标量值组成,默认为0.001。

'SparsityRegularization' — Coefficient that controls the impact of the sparsity regularizer
1 (default) | a positive scalar value

控制稀疏正则器对成本函数的影响的系数β,指定为由“ SparsityRegularization”和正标量值组成的逗号分隔对。

'SparsityProportion' — Desired proportion of training examples a neuron reacts to
0.05 (default) | positive scalar value in the range from 0 to 1

期望比例的神经元反应的训练示例,指定为由“ SparsityProportion”和正标量值组成的逗号分隔对。 稀疏比例是稀疏正则化器的参数。 它控制隐藏层输出的稀疏性。 较低的SparsityProportion值通常会为少量训练示例提供高输出,从而导致隐藏层中的每个神经元“专业化”。 因此,稀疏比例低会鼓励较高的稀疏度。 请参阅稀疏自动编码器。
默认为0.05,相当于说,在训练过程中,隐藏层中的每个神经元的平均输出应为0.1。

'ShowProgressWindow' — Indicator to show the training window
true (default) | false

显示训练窗口的指示器,指定为以逗号分隔的一对,由“ ShowProgressWindow”和true或false组成。

'TrainingAlgorithm' — The algorithm to use for training the autoencoder
'trainscg' (default)

TrainingAlgorithm表示用于训练自编码器的算法,指定为由“TrainingAlgorithm”和“trainscg”组成的逗号分隔对,代表比例共轭梯度下降[1]。

'ScaleData' — Indicator to rescale the input data
true (default) | false

ScaleData用于重新缩放输入数据的指示器,指定为以逗号分隔的对,由“ ScaleData”和true或false组成。自编码器尝试在其输出处复制其输入。为了使其成为可能,输入数据的范围必须与解码器的传递函数的范围匹配。trainAutoencoder在训练自编码器时会自动将训练数据缩放到此范围。如果在训练自编码器时缩放数据,则预测方法,编码方法和解码方法也会缩放数据。

'UseGPU' — Indicator to use GPU for training
false (default) | true

经过训练的自编码器,作为自编码器对象返回。有关此对象的属性和方法的信息,请参见Autoencoder class页面。

参考文献

[1].Moller, M. F. “A Scaled Conjugate Gradient Algorithm for Fast Supervised Learning”, Neural Networks, Vol. 6, 1993, pp. 525–533.