放养的深度学习-浅谈自编码器(4)
假设你在训练中发现数字8和数字6总是容易区分不开,那你可以根据一个新的图片在数字6和8中对应的自编码器中的重构误差进行人为的调整,比对在经过softmax时放大其中的差异。这使的深度学习不在是一个黑盒,使得研究者可以看到预测过程中发生了什么。
在模型训练的过程中,也可以针对原始图像和生成图像的距离进行类似Relu函数的截断。通过更改权重,让模型在重构误差小于一定cutoff的情况就不进行优化,而只关注那些重构误差还相对较大的样本。这里的思路就类似Xgboost中将预测结果不好的样本再放回重新训练的思路了。
假设现在数字8的样本数已经是其他数字的100倍了,上述的使用自编码器的分类模型不会像传统的分类模型那样,受到样本数不均的负面影响。这对于医疗,金融这种正负样本量差距很大的应用场景,极其有用。同时,这样的方法进行的预测,更加稳健,不用担心图像修改一个像素,模型的预测结果就会改变。
将自编码器用于图像生成,可以避免GAN中的模式塌缩问题(只生成黄色的猫)。分别用猫和狗的图像训练自编码器,将原始图像的降维表示进行微调,就可以用来生成新的猫和狗的照片。由于生成的图片都在原始图片降维后的空间附近, 自编码器生成的照片,不会出现GAN那样五条腿的猫这种明显不符合常识的图片。
使用自编码器降维,还会有更好玩的应用。还是MINST数据集,将所有6的图片,分别转90,180,270度,这样一张图片就变成了4张,通过自编码器降维再进行Kmeans 聚类(K取4),是可以将图像按照转动的角度分成4类的。现在拿一张正常的9的图片交给自编码器去降维,这个图片会被分到旋转180度的那一簇6中,这说明模型可以学到图片的语义信息,这种在不同事物间进行关联的能力,是人类推理的基石。
更哲学一些的论述,非监督学习做的是根据现有的数据去预测将来。MInst数据集的例子可以看成是将一个人写数字的过程拍了下来,假设一个人要花3秒写数字,自编码器做的可以看成根据第三秒后的笔迹预测前一秒之前的笔迹,最终能够达到在一个数字还没有写完的时候就预测出这个数字本身是什么。(空间的降维再升维对应时间上的历史匹配加预知)
总结一下,这篇小文介绍了自编码器的原理,训练方法及在分类和聚类和图像生成中多种的应用场景及优势。自编码器的变种很多,发展很快,代码相比于CNN,RNN来,实现起来也不难,是一个值得细致学习的探索深度学习框架,这篇小文要做的只是抛砖引玉。
更多越多
原创不易,随喜赞赏