自编码器简介

作用

AutoEncoder,中文译名自编码器。主要用于特征提取,可以理解为一种基于神经网络的压缩、降维算法,和PCA等类似。自编码器为一种有损压缩算法,通过压缩(编码)获得数据等抽象特征,并可以通过解压缩(解码),将抽象特征尽可能地还原成原始数据。
因此,根据原PPT中对自编码器“学习用户高度抽象的特征”这一描述,可以推测出在模型任务中,主要使用自编码器对数据进行特征提取。

网络结构

自编码器网络结构分为两部分:编码器和解码器,在训练时需要同时训练编码器和解码器,在使用时可以根据实际需要,单独运行编码器或解码器。自编码器基本都基于神经网络实现,根据数据种类的不同,具体使用不同的网络结构。例如,对于图片使用“卷积-最大池化”交替的网络结构,对于普通的特征向量,则一般使用全连接层。
例如,对于一个维度为784维的特征向量,使用如下网络结构构件自编码器,代码来自CSDN博客,使用Keras框架:

input_img = Input(shape=(784,))
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
decoded_input = Dense(32, activation='relu')(encoded) 
decoded = Dense(64, activation='relu')(decoded_input)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(784, activation='sigmoid')(encoded)
autoencoder = Model(inputs=input_img, outputs=decoded)

对于784维的输入数据,通过3层全连接(Dense)层,压缩为32维的特征向量,然后再次经过3层全连接层,还原为784维的特征向量。

训练和使用

由于编码和解码是一个相对应的过程,所以训练时必须同时进行。自编码器网络的训练思路如下:
1. 对于输入数据,通过前文所述的网络结构进行计算,得到结果;
2. 将1中得到的结果和原始数据进行比较,得到损失;
3. 根据2中得到的损失优化网络;
4. 反复迭代至收敛。
训练完毕后,导出模型,即可开始使用。使用时往往仅涉及到编码,而不涉及解码,此时可以通过在网络中导出中间结果的方式,在使用时仅计算网络的前半部分,从而得到编码结果。
此时得到的编码结果即为高度抽象的用户特征。

你可能感兴趣的:(机器学习)