深层神经网络
先说说神经网络
神经网络是由一个个的神经元所构成,其中每个神经元的内部都封装着一个线性或者是非线性的模型。每一个节点都会对应一个权重向量W。这个向量会与前面的输入所组合(透过tanh函数)组合后的输出又当做是新一轮的输入。我们希望模型的预测与我们的标签一样,那么我们最终的权重的大小就应该和物体的特点所一致这就是权重的意义。同时也说明了我们中间的隐藏层的转换就是我们对资料特征的萃取。最后我们通过反向传播算法更新我们的权重到最优解此时我们就得到了最终的模型。
浅层网络与深层网络
浅层网络与深层网络有如下的特点:
浅层网络:
①更容易去训练。
②结构更容易去设计。
③越多的节点会有越强大的能力。
深层网络:
①训练起来非常困难。
②结构的设计非常复杂。
③越多的节点会有越强大的能力。
直接指明深层的网络模型也就是深度学习模型。
深度学习的意义所在
如图中所示,我们喂给这个网络的是一些像素点(当然我们人脑一下子就识别出来这是1,5),通过第一层的萃取我们会得到比像素点更具有意义的一些偏旁。到了下一层的时候我们就能够得到更为复杂的特征,比如这个网络已经能够识别我们的像素点是1还是5了。我们最后判断这个像素点是1还是5就要依靠这些权重了。比如说现在要判断为1的资料点它对于左面三个偏旁来说权重为正的(带表很重要),右面三个权重为负(带表很次要)。总的来看越深的网络就越能够萃取到更为复杂的特征。从而广泛应用到图像语音识别的领域。
深度学习遇到的挑战与解决方案
①复杂的结构难以设计
我们会将一个些领域的知识用到我们的网络设计中,使得一些结构得到简化。
②更高的模型复杂度
高的模型复杂度容易过拟合。大量的资料是一个防止过拟合的手段。除此之外我们还可以使用正则化,这里深度学习有自己特有的正则化方式比如:dropout与denoiseing。
③最优化问题
容易陷入局部最优。由于最优的结果与起始点有很大的关系,所以我们不再是随机给出权重值而是使用预训练来给出一个很好的起始点然后再慢慢微调。
④计算复杂度的问题
使用mini-batch的方式+GPU来并行的计算。
简单说说预训练的过程
预训练主要是分层进行权重的初始化。从第一层开始进行初始化要确保初始化之后的权重能够封装资料中的关键特征。然后将第一层的结果作为第二层的输入重复上述步骤。直到所有的权重都初始化之后我们在利用反向传播算法进行权重的微调。
自动编码器
信息保护原则
我们希望在我们的权重里封装资料的特征,将我们的资料换成不同的表现形式。同时,由于我们不知道每一层权重之后会做什么,所以我们在初始化权重的时候会尽量维持原来信息的特征转换,从而保证信息不丢失。检验信息没有损失,可以利用转换后的资料经过一定的转换将信息还原回去。整个过程就像是编码和解码一样。
自动编码器
为了将信息封装到权重里我们设计了这样的神经网络。我们将原始的资料通过一些权重转换到一些节点中,之后我们任然可以通过另一些权重将这些节点中的信息还原出来。这里需要注意的是我们希望输出的节点与原始的输入资料的个数相等,然后希望输出节点的值与原始的资料值很相似这样的话我们就能够确保我们的资料没有损失而且得到了一个合理的转换。
这个网络的名字就叫自动编码器,W(1)为编码权重,W(2)为解码权重。整个过程看来我们没有做任何的转换。但是这样做有什么好处?
我们能够在最后输出的结果中做到g(x)≈x,究其原因必须依赖一些输入资料中的一些潜藏的特征。也就是无论怎么转换我们的原始资料的特征已经萃取到了在我们的网络中。我们这些权重也是一种非常好的萃取方式。
当我们初始化好这样的一个自动编码网络的时候,我们再拿一个典型的资料(或者说是与训练时用的类似的资料)我们也会得到类似的结果,因为他们的特征没有变。相反我们如果拿到一个非典型的资料的话我们就可能不能做到还原。因为编码与解码的权重中蕴含的是典型资料的特征。这也是我们最终训练网络所想要达到的目的,就是说我们现在的初始化给出了一个不错的起点(已经拿到了资料中大部分潜藏的特征了)剩下的只是在使用反向传播法来做一些权重上的微调。
利用上面的自动编码器我们还能够选择哪些资料是典型的资料哪些是非典型的资料。这里的权重也就是一种大部分资料的表现形式。
基本自动编码器的特点
①他是一个浅层的网络比较容易训练。
②我们一般会要求中间层的节点数比较低,这样我们就找到了另一个更为精炼的表示方式。
③整个预训练的过程不需要用到标签。X的输入我们希望得到x的输出。所以它算是一个非监督式学习。
④我们加上了一些限制,就是编码权重 = 解码权重,这样的条件也相当于一些正则化。
用自动编码器做预训练
假设我们要训练第一层的权重。那么我们就让第0层的节点作为输入,第1层的节点当做是自动编码器中的中间节点就行。然后依次将后面几层做好初始化我们就完成了预训练这个过程了。
过滤杂讯的自动编码器
深度学习中的正则化
由于深度学习的节点与权重的数量都很多所以它的更能也非常的强大,与此同时还带来了过拟合的危险。所以我们就要想办法去正则化深度学习模型。一般有以下的几点:
①在设计的时候设计一些简单的结构。
②使用我们的L2或者L1的正则化,使得权重的数量降低从而使得模型的维度也降低。
③使用神经网络中常用的方法earlystopping来减小模型复杂度。
事实上这些都可以,但是接下来我们去介绍一个全新的正则化方法。
过拟合的原因
一般情况下过拟合就是因为在资料量不足的情况下杂讯过多所造成的,那么我们该如何处理杂讯?直觉来说我们要在训练模型的时候要尽可能的去避免杂讯减少杂讯。但是这一次我们要在与训练中加入杂讯!!!对你没有听错!
我们在与训练中加入杂讯的初衷是让我们的权重学到更为具有代表性的特征,即使在有杂讯的情况下也能够准确的判断资料的情况。也就是我们要使用的是一个带有过滤杂讯功能的自动编码的过程。这时候我们输入的资料就可能没有那么干净,但是输出来的确是干净的结果。这种人工制造杂讯的手段与我们以前见过的在资料量不足的情况下人工制造资料有相似的思想。
PCA学习(Beta版)
首先说它的作用是将我们得输入资料进行线性的降维处理。
其它的完了补上: - )。