自编码器基本原理
自编码器(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函数(默认)、正饱和线性传递函数以及线性传递函数,见下图。
'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”组成的逗号分隔对。 它对应于为训练稀疏自动编码器而调整的均方误差函数,如下图所示:
其中λ是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.