当前位置:网站首页>自动编码器的相关内容
自动编码器的相关内容
2022-07-21 11:40:00 【V丶Chao】
- 20210909
0. 引言
对于自动编码器的内容,平时仅仅是使用最简单的自编码器,就是隐藏层或者说中间层比输入层的维度小,这样的方式,相对来说比较简单。以前的时候,也知道比如说降噪自编码器,或者说稀疏自编码器这类,但都没有关注过。最近翻阅了一些相关的文章,例如[1],对自编码器中一些比较有名的方式进行了介绍。本篇文章就针对其中的某些类别展开具体的研究。
1. 稀疏自编码器
1.1 概念介绍
在文章[1]中对稀疏自编码器有所介绍,第一感觉跟添加了Dropout差不多。
为了更深入的理解这部分内容,又搜索了另外一篇文章[2]。这篇文章着重介绍了稀疏自编码器。这篇文章在介绍时,先介绍了自动编码器的具体原理,不过他之类对自编码器的损失函数添加了一个惩罚项。
O b j = L ( x , x ^ ) + r e g u l a r i z e r Obj = L(x, \hat x)+regularizer Obj=L(x,x^)+regularizer
我觉得这个惩罚项就是为了后面其他的一些类型添加的;稀疏自编码器就是在自编码器的基础上添加了稀疏惩罚,对于实现来说,包括两种形式,一种是 L 1 L_1 L1正则化,和KL散度的方式,这篇文章中主要讨论了 L 1 L1 L1的方式。
1.2 激活正则
既然前面提到了跟这类惩罚项,就进一步翻阅了文章[3],这篇文章主要是讲述激活正则化。其实对于深度学习中的正则化,l1-l2这种我没怎么关注过,主要用的就是dropout这种方式来减缓过拟合。在读这篇文章的时候,发现他说出来一个问题,就是通过l1-l2正则化的方式来获取到更加准确,效果更好的特征,其实这个点我平时还真没想到过,一直以来的概念都是通过正则化来减轻过拟合。
不过,其实因为本身深度学习就是一种表征学习,他说这个目的,我倒也不惊讶。
但是这篇文章,因为也没有具体的代码,整体都是理论介绍,所以看起来也有点吃力,没有理解透彻。
不过其实,我之前的时候,也看到过相关的代码,keras是能够直接通过api来进行限制的,所以感觉使用应该没什么问题。
但是这里还有一个问题,就感觉,这个稀疏的概念还没有理解清楚,到底是利用L1-L2这种正则来进行描述,还是说用dropout,这两中到底哪个是针对稀疏自编码器的。
1.3 代码实现
我觉得看过的这些文章中,这篇文章[4],应该算是具体将这个稀疏自编码器让我理解了。不过这篇也没有太多代码。我觉得这篇文章介绍还算不错,从最开始自动编码器是什么,然后降噪自编码器,最后稀疏自编码器。主题呢,都是重点关注特征提取;对于为了达成特征提取的目标,在自编码器的角度,他提出了三种措施:
1)将中间层的维度降低(正常使用自编码器的方式)
2)降噪自编码器
3)稀疏自编码器
其中降噪自编码器:在这种文章中的实现,是将原始的图片添加了噪声,然后在fit()
的时候,原始数据是加了噪声的数据。而稀疏自编码器的话,先上代码:
#code中间层
#非稀疏
code = Dense(code_size, activation='relu')(input_img)
#稀疏
code = Dense(code_size, activation='relu', activity_regularizer=l1(10e-6))(input_img)
不过因为他仅仅给出了中间层的代码,并没有给出其他层的;当然也可能是因为他仅仅只有这一层中间层。
前面的时候,我感觉我吧dropout和这种激活正则项给闹混了;特别是我看到这个代码中,直接将activity_reqularizer
放在了dense
层里面。
1.4 简单总结
目前来说,简单理解了对于正则化的方式,不过感觉还是没有理解透彻,因为还有很多其他的方式;比如dropout,而且对于前面提到的L1和L2他们的具体不同点是什么,还需要再深入理解。虽然说,通过通过代码也就是一行的事情,但是有必要好好理解。
1.5 具体代码实现(20210909增加)
在keras的官网上,对于自编码器部分,有相关的代码实现[5],我觉得这个代码,还是具备非常高的参考价值的。基本上前面介绍过的代码,这个部分都有。
在稀疏自编码器的部分,他也是采用了和文章[3]一样的方式,都是在dense层使用了一个参数来进行调整。从这个角度来看,既然官方都是这么写的,那么代码肯定是具备一定的权威性的。
不过,我其实,对有一个部分还是没理解,就是在最后编译的部分,他是使用了二进制的交叉熵函数,我平时可能使用的更多的就是直接MSE,这个部分具体有什么讲究,还没有考虑清楚,可能是因为这个最后的sigmoid的问题。
1.6 疑问解答
为什么可以使用二进制的交叉熵来作为损失函数?这里找到了两篇文章比较相关。
1)为什么可以使用二进制交叉熵[7]
2. 变分自编码器
前端时间学习对抗自编码器的时候,对变分自编码器也简单了解过,变分自编码器属于一种生成模型,从代码的角度来看,在中间层变成了某个分布的参数,训练过程中,中间层就是为了学习这个分布的参数;然后损失函数是两个部分,一部分是重构损失,另外一部分是KL散度的相关信息,主要是这样的一个过程。代码在文章[5]中同样有,不过他在最后利用散点图的形式展现这个编码效果的部分,感觉并不是非常好,就是重叠度还是挺高。
3. 文章记录
(20211005)
今天看了一个文章[8],专门介绍自动编码器的,包含了大部分的编码器变种。当时是因为看到了这个KL惩罚项的部分,感觉跟我写的代码不太一样,所以有点疑惑。在[8]中看到了。其实我这篇文章的前面也已经记录了,有两种惩罚方式。
前面也已经说过了,对于KL散度的惩罚没有找到相应的代码,都是直接使用了L1惩罚项。在github[9]中给出了这种KL方法的计算方式,这种方式应该就是我需要的。
参考
[1][自编码器:理论+代码]:自编码器、栈式自编码器、欠完备自编码器、稀疏自编码器、去噪自编码器、卷积自编码器
[2]What happens in Sparse Autoencoder
[3]A Gentle Introduction to Activation Regularization in Deep Learning
[4]Applied Deep Learning - Part 3: Autoencoders
[5]Building Autoencoders in Keras
[6]How does binary cross entropy loss work on autoencoders?
[7]Why binary crossentropy can be used as the loss function in autoencoders? [duplicate]
[8]Introduction to autoencoders.
[9]sparse_autoencoder
边栏推荐
- Compile php7 to specify the Remi extension directory and the configuration directory of ini
- 使用shell将一个目录的所有文件移动以年月为名的文件夹中
- 基于ABP实现DDD--领域服务、应用服务和DTO实践
- Top understanding notes of LSTM
- Xlnet: operation mechanism and comparison with Bert -- Summary
- 登陆状态如何管理?登录流程?
- Mobile end Foundation
- Google浏览器另存为图片出现假死现象
- Paper reading: cocon: a self supervised approach for controlled text generation
- ionic4学习笔记11-某东项目热门商品展示
猜你喜欢
Xlnet learning: Research Summary
4.基本类型和引用类型?
9.BOM对象?
When uploading jars on the nexus management page, jars can be pulled to the project normally. Jars published using the deploy of idea lifecycle can only be pulled to POM. 401 problem
defineExpose ,父组件获取子组件中的属性值
情人节礼物------用她的照片和我们的聊天记录生成词云~
基于ABP实现DDD--领域服务、应用服务和DTO实践
Judge whether the binary tree is symmetric
How to recover the problems that appear when you first write a blog - use the CSDN markdown editor template
无锡对全市必胜客门店开展食品安全隐患大排查
随机推荐
ionic4学习笔记6--在自定义组件中使用原生的ionic4组件
How to unlock and decompile Cisco switch firmware
ionic4学习笔记3
关于Hook unistd中open, read, write, close的一些技巧
第三方之百度AI使用总结
菜鸟同事贵我2k,原是背了涨薪秘籍?(赶紧收藏!)
libpng error: iTXt: chunk data is too large error: PNG unsigned integer out of range
Basic principles and differences between countdownlatch and cyclicbarrier
Mobile end Foundation
神牛TT685C闪光灯ETTL模式不同步解决方案
9.BOM对象?
How to use the download tool proayee down
Word2vec (II)_ Implementation based on negative sampling method
Xlnet: operation mechanism and comparison with Bert -- Summary
Welcome to the CSDN markdown editor template
水仙花数
[dark horse morning post] Suning Zhang Kangyang lost the lawsuit and was "debt recovery" of 1.7 billion; The president of hengchi said that hengchi's big sale was a foregone conclusion; Iphone14promax
C # use timer and ProgressBar controls to make a countdown timer
情人节礼物------用她的照片和我们的聊天记录生成词云~
如何在gdb里打印unicode 16(utf-16) C#的字符串