zoukankan      html  css  js  c++  java
  • 深度学习之自编码器

    1、自编码的定义

      自编码器是一种数据的压缩算法,属于无监督学习,以自身X作为输出值,但输出值X‘ 和自身X之间还是有一些差异的。自编码器也是一种有损压缩,可以通过使得损失函数最小,来实现X’ 近似于X的值。简单的自编码器是一种三层的神经网络模型,包含数据输入层、隐藏层、输出重构层,同时也是一种无监督学习模型。从输入层到隐层称为编码过程,从隐层到输出层称为解码过程。自编码其就相当于自己生成标签,而且标签就是样本数据本身。三层自编码神经网络的模型如下:

      

      自编码的两个过程

      1)输入层——隐层的编码过程:

        

      2)隐层——输出层的解码过程

        

      这之间的压缩损失就是

        

      很多人在想自编码到底有什么用,输入和输出都是本身,对于这样的操作有和意义,主要有两点:

      1)自编码可以实现非线性降维,只要设定输出层中神经元的个数小于输入层中神经元的个数就可以对数据集进行降维。反之,也可以将输出层神经元的个数设置为大于输入层神经元的个数,然后在损失函数构造上加入正则化项进行系数约束,这时就成了稀疏自编码。

      2)利用自编码来进行神经网络预训练。对于深层网络,通过随机初始化权重,然后用梯度下降来训练网络,很容易发生梯度消失。因此现在训练深层网络可行的方式都是先采用无监督学习来训练模型的参数,然后将这些参数作为初始化参数进行有监督的训练。

    2、常见的自编码器

      1)欠完备自编码器

      欠完备自编码器就是将输出层中神经元的个数设置为小于输入层中神经元的个数,以达到非线性降维的效果(在神经网络的传递过程中由于激活函数的存在,因此是非线性的传递)。

      2)稀疏自编码器

      稀疏自编码就是对隐层的神经元加入稀疏约束,以便约束隐层中神经元不为0的个数,我们希望达到用尽可能少的神经元来表示数据X,以达到稀疏降维。稀疏自编码有加速网络训练的功能。

      3)收缩自编码器

      收缩自编码是在损失函数中加入一项平方Frobenius范数的正则项,其表达式如下

        

        

      4)栈式自编码

      栈式自编码主要是用来实现深度学习的无监督预训练的,其无监督预训练过程如下

      对于一个四层的神经网络

      

      首先采用稀疏自编码器,训练从输入层到H1层的参数

      

      训练完毕之后我们去除解码层,接着把H1层的输出数据作为H2层的输入数据,然后进行自编码

      

      训练完之后去除H2层的解码器。对于更高层的网络,依次去训练两层之间的参数,直达最后一层隐层,然后利用softmax进行多分类

      

      做完无监督预训练之后,将得到的参数作为初始化参数,之后采用监督学习对模型参数进行微调。

  • 相关阅读:
    java Thread和Runnable区别
    java sleep() 、yield()
    Java Thread.join()方法
    内存管理_深入剖析volatile关键字
    内存管理_JAVA内存管理
    内存管理_原子性、可见性、有序性
    小程序wx.showToast()方法实现文字换行
    常用表单校验(手机号、固话、身份证、真是姓名、邮箱、银行卡)
    通过CSS实现 文字渐变色 的两种方式
    substring和substr的区别
  • 原文地址:https://www.cnblogs.com/jiangxinyang/p/9302179.html
Copyright © 2011-2022 走看看