1TensorFlow实现自编码器-1.1自动编码器基本原理

来源:互联网 发布:研究生论文数据造假 编辑:程序博客网 时间:2024/05/19 00:36

1TensorFlow实现自编码器-1.1自动编码器基本原理

传统机器学习的瓶颈:传统机器学习任务很大程度上依赖于好的特征工程!

这里写图片描述

特征工程往往是非常耗时耗力的!在图像、语音、视频中提取有效特征就更难了!
工程师必须在某种数据处理专业领域有很深的造诣!比如CV工程师,NLP工程师,语音处理工程师,量化交易工程师、……

由人脑启发的深度机器学习
人脑的特征提取是怎样的呢?难道会为每种不同的数据准备一个特别的处理算法吗?
这里写图片描述

无监督特征学习基本原理
深度学习在早期一度被认为是一种无监督的特征学习(Unsupervised Feature Learning),模仿了人脑对特征逐层抽象提取的过程。深度学习可以解决人工难以提取有效特征的问题,可以大大缓解机器学习模型对特征工程的依赖!

无监督特征学习最重要的两点:

1、无监督学习:即我们不需要标注数据就可以对数据进行一定程度的学习,这种学习是对数据内容的组织形式的学习,提取的是频繁出现的特征。

2.逐层抽象:特征是需要不断抽象的,就像人总是从简单基础的概念开始学习,再到复杂的概念。深度学习也是一样,从简单的微观的特征开始,不断抽象特征的层级,逐渐往复杂的宏观的特征转变。

特征表示的粒度:
特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度。那对于特征,我们需要考虑什么呢?
学习算法在一个什么粒度上的特征表示,才能发挥作用?就一个图片来说,像素级的特征根本没有价值。例如下面的摩托车,从像素级别,根本得不到任何信息,其无法进行摩托车和非摩托车的区分。而如果特征是一个具有结构性(或者说有含义)的时候,比如是否具有车把手(handle),是否具有车轮(wheel),就很容易把摩托车和非摩托车区分,学习算法才能发挥作用。

这里写图片描述

初级(浅层)特征表示
既然像素级的特征表示方法没有作用,那怎样的表示才有用呢?

1995年前后,Bruno Olshausen 和 David Field两位学者任职Cornell University,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题。

他们收集了很多黑白风景照片,从这些照片中,提取出400个小碎片,每个照片碎片的尺寸均为16x16像素,不妨把这400个碎片标记为S[i],i=0,…,399。接下来,再从这些黑白风景照片中,随机提取另一个碎片,尺寸也是16x16像素,不妨把这个碎片标记为T。

他们提出的问题是,如何从这400个碎片中,选取一组碎片,S[k],通过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片T,尽可能相似,同时S[k]的数量尽可能少。用数学的语言描述,就是:
Sumk(a[k]S[k])>T,其中a[k]是在叠加碎片S[k]时的权重系数。
为解决这个问题,Bruno Olshausen 和 David Field发明了一个算法,稀疏编码(Sparse Coding)。

稀疏编码是一个重复迭代的过程,每次迭代分两步:
1、选择一组S[k],然后调整a[k],使得Sum_k(a[k]*S[k])最接近T。
2、固定住a[k],在400个碎片中,选择其他更适合的碎片S[k],替代原先的S[k],使得Sumk(a[k]S[k])最接近T。
经过几次迭代后,最佳的S[k]组合,被遴选出来了。令人惊奇的是,被选中的S[k],基本上都是照片上不同物体的边缘线,这些线段形状相似,区别在于方向。
Bruno Olshausen和David Field的算法结果,与David Hubel和TorstenWiesel的生理发现不谋而合。
也就是说,复杂图像,往往由一些基本结构组成。比如下图:一个图可以通过64中正交的edges(可以理解成正交的基本结构)来线性表示。比如样例的x可以用1-64个edges中的三个按照0.8,0.3,0.5的权重调和而成。而其他基本edge没有贡献,因此均为0。
这里写图片描述

另外,大牛们还发现,不仅图像存在这个规律,声音也存在。他们从未标注的声音中发现了20中基本的声音结构,其余的声音可以由这20种基本结构合成。
这里写图片描述

自动编码器基本原理
结构性特征表示
小块的图形可以由基本edge构成,更结构化,更复杂化,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如V2,V4.因此V1看像素级是像素级。V2看V1是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是基basis。V1提取出的basis是边缘,然后V2层是V1层这些basis的组合,这时候V2区得到的又是高一层的basis。即上一层的basis组合的结果,上上层又是上一层的组合basis……
这里写图片描述
直观上说,就是找到make sense的小patch再将其进行combine,就得到了上一层的feature,递归地向上learning feature。

在不同的object上做training是,所得的edge basis是非常相似的,但object parts和models就会completely different(那分辨car或者face是不是容易多了):
这里写图片描述

从文本来说,一个doc表示什么意思?我们描述一件事情,用什么来表示比较合适?doc表示的概念-topic(千-万量级)-term(10万量级)-word(百万量级)。一个人在看一个doc的时候,先看到的是word,由这些word在大脑里自动切词形成term,在按照概念组织的方式,得到topic,然后再进行高层次的learning。

AutoEncoder自动编码器
Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。

1、给定无标签数据,用非监督学习学习特征:
这里写图片描述
在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input,target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?
这里写图片描述
如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?

。。。

Denoising AutoEncoders降噪自动编码器:
降噪自动编码器DA是在自动编码器的基础上,训练数据加入噪声,所以自动编码器必须学习去除这种噪声而获得真正的没有被噪声污染过的输入。因此,这就迫使编码器去学习输入信号的更加鲁棒性的表达,这也是它的泛化能力比一般编码器强的原因。DA可以通过梯度下降算法去训练。
这里写图片描述

阅读全文
0 0