【自编码器】梳理(上)

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言

梳理有关自编码器

1. 自编码器

1.1 原理

Auto-Encoder,中文称作自编码器,是一种无监督式学习模型。利用输入数据 X X X本身作为监督,来指导神经网络尝试学习一个映射关系,从而得到一个重构输出 X R X^R XR

可以用于异常检测场景,异常对于正常来说是少数,所以我们认为,如果使用自编码器重构出来的输出 X R X^R XR 跟原始输入的差异超出一定阈值(threshold)的话,原始时间序列即存在了异常。和之前介绍的padim、patchcore等思想类似。

算法主要分为:encoder和decoder。

  • 编码器的用于将高维输入 X X X编码成低维的隐 变量 h h h,从而强迫网络学习有用信息特征
  • 解码器用于把隐变量 h h h还原到初始维度,最好的状态是解码器的输出能够近似恢复原始输入。

如果输入神经元个数n大于隐藏层个数m,那么就相当于把数据从n维降到m维,类似PCA。

img

1.2 作用

  • 特征学习:通过学习数据的有用表示,自动编码器可以用于特征学习任务,有助于提高监督学习模型的性能
  • 降维:自动编码器可以将高维数据映射到低维空间,从而实现数据的降维,有助于可视化和减少计算复杂度
  • 图像去噪:通过训练自动编码器来学习对输入数据的干净表示,可以用于去除图像中的噪声
  • 生成模型:通过改变自动编码器的架构,可以设计生成对抗网络(GAN)等生成模型

1.3 demo

def getModel():input_layer = Input(shape=(x.shape[1],))encoded = Dense(8, activation='relu', activity_regularizer=regularizers.l2(10e-5))(input_layer)  # l2正则化约束decoded = Dense(x.shape[1], activation='relu')(encoded)autoencoder = Model(input_layer, decoded)autoencoder.compile(optimizer='adam', loss='mean_squared_error')return autoencoder 

2. 降噪自编码器

论文: Extracting and Composing Robust Features with Denoising Autoencoders

原理: 原始数据X上加入了噪声X’,然后再作为网络的输入数据,来重构输出原始还未加入噪声的数据。

因此降噪自编码的损失函数是构造原始数据X与网络输出X’'之间的一个差异性度量。加入噪声,然后训练恢复原始数据,可以让我们的网络具有更强的抗噪能力,使得自编码更加鲁邦。

通过对原始数据输入神经元,进行人为随机损坏加噪声,得到损坏数据X’。主要有:

  • 采用高斯噪声
  • 把输入神经元随机置0(类似dropout)

img

3. 稀疏自编码器

损失函数加入一个KL散度作为网络的正则约束项

img

4. 收缩自编码器

同样是修改损失函数,

img

5. 栈式自编码器

开始讲什么是栈式自编码前,让我们先来了解一些深度学习中的无监督预训练。我们知道,在深度学习中,一般网络都有很多层,因为网络层数一多,训练网络采用的梯度下降,在低层网络会出现梯度弥散的现象,导致了深度网络一直不招人待见。直到2006年的3篇论文改变了这种状况,由Hinton提出了一种深层网络的训练方法,改变了人们对深度学习的态度。Hinton所提出的训练思想,整体过程如下;

A、网络各层参数预训练。我们在以前的神经网络中,参数的初始化都是用随机初始化方法,然而这种方法,对于深层网络,在低层中,参数很难被训练,于是Hinton提出了参数预训练,这个主要就是采用RBM、以及我们本篇博文要讲的自编码,对网络的每一层进行参数初始化也就是我们这边要学的稀疏自编码就是为了对网络的每一层进行参数初始化,仅仅是为了获得初始的参数值而已(这就是所谓的无监督参数初始化,或者称之为“无监督 pre-training”)。

B、比如采用自编码,我们可以把网络从第一层开始自编码训练,在每一层学习到的隐藏特征表示后作为下一层的输入,然后下一层再进行自编码训练,对每层网络的进行逐层无监督训练。

C、当我们无监督训练完毕后,我们要用于某些指定的任务,比如分类,这个时候我们可以用有标签的数据对整个网络的参数继续进行梯度下降调整。

这就是深层网络的训练思想,总体归结为:无监督预训练、有监督微调。

OK,我们回到本篇文章的主题,从上面的解释中,我们知道稀疏自编码仅仅只是为了获得参数的初始值而已。栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入。栈式自编码就是利用上面所说的:无监督pre-training、有监督微调进行训练训练的深度网络模型。接着就让我们来学一学具体的栈式自编码网络训练。

训练如下网络如下分类任务:

img

step1: 无监督pre-training阶段:

先采用自编码的方式,训练第一个隐藏层:

img

训练完以后,继续训练第二个隐藏层:

把h1作为输入,把h2作为隐藏层,然后进行自编码训练

img

至此,我们对两个中间层的参数进行的训练初始化。

后面就是正常的网络训练了。

参考

  1. https://blog.csdn.net/hjimce/article/details/49106869
  2. http://sofasofa.io/tutorials/anomaly_detection/
  3. https://blog.csdn.net/lijj0304/article/details/136269138
  4. https://blog.csdn.net/liangjiubujiu/article/details/81286770
  5. https://zhuanlan.zhihu.com/p/80377698
  6. https://zhuanlan.zhihu.com/p/133207206
  7. https://zhuanlan.zhihu.com/p/68903857

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564360.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUC(二)

1、wait notify Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒 WAITING 线程会在 Owner 线程调用 …

python综合实战案例-数据分析

Python是进行数据分析的好工具,今天就是借助一个案例给大家进行数据分析讲解。 本例设计一个log.txt⽂件,该文件记录了某个项⽬中某个 api 的调⽤情况,采样时间为每分钟⼀次,包括调⽤次数、响应时间等信息,⼤约18万条数…

Vue2(十):全局事件总线、消息订阅与发布、TodoList的编辑功能、$nextTick、动画

一、全局事件总线!! 任意组件间通信 比如a想收到别的组件的数据,那么就在a里面给x绑定一个demo自定义事件,所以a里面就得有一个回调函数吧,然后我要是想让d组件给a穿数据,那就让d去触发x的自定义事件&…

【C++】如何用一个哈希表同时封装出unordered_set与unordered_map

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.哈希桶源码 2.哈希…

【算法】小强爱数学(迭代公式+数论取模)

文章目录 1. 问题2. 输入3. 输出4. 示例5. 分析6. 思路7. 数论,取模相关公式8. 数论,同余定理9. 代码 1. 问题 小强发现当已知 x y B xyB xyB以及 x y A xyA xyA时,能很轻易的算出 x n x_ {n} xn​ y n y_ {n} yn​ 的值.但小强想请你在已知A和B的…

vue3项目初始化

初始化项目newsapp VSCode 打开终端,newsapp项目目录,可自定义 vue create newsapp 有提示“因为在此系统上禁止运行脚本”的话,请执行 set-ExecutionPolicy RemoteSigned 执行后再重复执行vue create newsapp 注意选择Vue 3版本 测试项…

CSS案例-2.简单版侧边栏练习

效果 知识点 标签显示模式 块级元素 block-level 常见元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等。 特点: 独占一行长度、宽度、边距都可以控制宽度默认是容器(父级宽度)的100%是一个容器及盒子,里面可以放行内或者…

24计算机考研调剂 | 【官方】山东工商学院

山东工商学院 考研调剂招生信息 招生专业&#xff1a; 学院概况&#xff1a; 计算机科学与技术学院始建于1999年&#xff0c;拥有计算机科学与技术一级学科硕士点,在2022软科中国最好学科排名中&#xff0c;计算机科学与技术学科位列全国第104位。在2022年“软科”中国大学专…

ShardingSphere水平分表——开发经验(2)

1. 什么场景下分表&#xff1f; 数据量过大或者数据库表对应的磁盘文件过大。 Q&#xff1a;多少数据分表&#xff1f; A&#xff1a;网上有人说1kw&#xff0c;2kw&#xff1f;不准确。 1、一般看字段的数量&#xff0c;有没有包含text类型的字段。我们的主表里面是不允许有t…

【索引失效】MySQL索引失效场景

1、对索引使用左或者左右模糊匹配 当我们使用左或者左右模糊匹配的时候&#xff0c;也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。 比如下面的 like 语句&#xff0c;查询 name 后缀为「林」的用户&#xff0c;执行计划中的 typeALL 就代表了全表扫描&#xff…

(一)基于IDEA的JAVA基础7

关系运算符 运算符 含义 范例 结果 等于 12 false &#xff01; 不等于 1&#xff01;2 true > 大于 1>2 false < 小于 …

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…