深度学习入门笔记(九)自编码器

自编码器是一个无监督的应用,它使用反向传播来更新参数,它最终的目标是让输出等于输入。数学上的表达为,f(x) = x,f 为自编码器,x 为输入数据。

自编码器会先将输入数据压缩到一个较低维度的特征,然后利用这个较低维度的特征重现输入的数据,重现后的数据就是自编码器的输出。所以,从本质上来说,自编码器就是一个压缩算法。

自编码器由 3 个部分组成:

  • 编码器(Encoder):用于数据压缩。
  • 压缩特征向量(Compressed Feature Vector):被编码器压缩后的特征。压缩特征向量也是人工神经网络中的一层,它的维度就是我们要将数据压缩到的维度,是一个超参,我们要提前设定。
  • 解码器(Decoder):用于数据解码。编码器与解码器就是之前讲的多层感知机,也可以用卷积实现。

如下图
在这里插入图片描述
有三点需要注意

  1. 自编码器只能压缩与训练数据相似的数据。比如我们用 MNIST手写数字训练集来训练自编码器,那它只能压缩手写数字相关的数据,如果用来压缩手写数字以外的数据,表现就会很差;
  2. 自编码器解压缩的结果只能接近输入,并不完全一样。所以它是一个有损的压缩算法;
  3. 自编码器是一个无监督学习的算法。我们不需要对数据做任何标注,只需要把原始数据扔给它就可以了,它会自动挖掘数据中的潜在结构模式。

9.1 自编码器的网络架构

在这里插入图片描述
可以看到,这种自编码器是一层层堆叠起来的,所以又称为堆叠式自编码器。

首先我们会有 3 个维度的输入 x 通过编码器,然后生成 1 个有两个维度的压缩特征向量。解码器会将这两个维度的特征向量恢复到 3 个维度的 x’,然后输出。其中编码器与解码器是对称的。

整个过程的宗旨只有一个:输出的 x’无限接近输入 x。

对于一个自编码器,会有 3 个超参需要设定:

  • 压缩特征向量的神经元的个数:也就是压缩后的维度。神经元的个数越少则代表有更重的压缩。
  • 层的个数:自编码器的结构可以按照我们的想法任意设定。
  • 每一层中神经元的个数。

9.2自编码器的实现

如何训练一个自编码器呢?只需要以下几个步骤:

  • 构造一个编码器和解码器;
  • 设定一个损失函数来衡量输出 x’与输入 x 的差距;
  • 选择一个优化方法,来更新参数,例如随机梯度下降算法(SGD)。

我们把上面 3 步再具体一些。

  • 我们有数据集 D:D={x1,x2,…,xi,…,xm},其中 xi=(xi,1,xi,2,…,xi,n)。
  • 编码器为 y=h(x),y 是上图中的压缩特征向量。
  • 解码器为 x’=f(y)=f(h(x))。

如果输入的数据是数值型,则利用均方误差(MSE)来衡量输出 x’与输入 x 之间的差距;如果输入的数据是离散型,则利用交叉熵损失来衡量输出 x’与输入 x 之间的差距。h(x)与 f(y)的参数会通过我们设定好的优化方法进行更新。

自编码器的网络结构非常容易控制,只要增加网络的层数、每一层的节点数以及压缩向量的长度就让网络变得更加强大。

增加这些超参会让自编码器学习到更加复杂的压缩编码模型,但同时也会带来一定的问题。太复杂的网络有可能让网络变得非常容易过拟合,并且网络也很难学习到输入数据的潜在特征,只会学到将输入数据拷贝到输出这样一种单纯的恒等变换。模型过拟合的时候,在训练集上会有非常优秀的表现,但是遇到训练集以外的数据就不会有很好的效果。

所以大部分自编码器都故意保留了一个比较小的压缩特征向量。那除了保留一个较小的压缩特征向量之外,接下来我们看看还有没有其他方法可以让自编码器更加专注地发现数据中的潜在结构

9.3 降噪自编码器

降噪自编码器是在训练时,在输入的数据中加入随机噪音,在最后输出的时候恢复到没有噪音的状态的一种编码器。
在这里插入图片描述
上图的第一行为原始图片,第二行为对应有噪声的图片。训练时,我们把第二行图片作为输入,第一行的原始图片作为输出。

因为输入的数据中加入了随机噪音,就避免了网络只学习到简单的将输入复制到输出的这种恒等变换,强制让自编码器学习如何剔除数据中的噪音,然后再恢复到没有噪音的状态。这样就能让它更加专注地挖掘数据中的潜在结构模式。

9.4 稀疏自编码器

在损失函数中加一个惩罚项,在训练时就可以让自编码器只有一小部分节点被激活,这样我们就得到一个稀疏自编码器了。

这样通过限制自编码器中神经元的输出,只让很小的一部分神经元有非 0 的输出,也可以说是只激活一小部分的神经元。迫使自编码器将输入与一部分节点联系起来,从而让它发现数据中更有价值的结构。即使压缩特征向量中有很多节点,有这种约束的自动编码器也可以很好地工作,因为它只让一部分节点被激活。

第一章讲的L1 范数即可实现这种稀疏的约束。
在这里插入图片描述
可以发现,我们的 L1 正则约束确实对压缩特征向量起到了效果,大部分时候的输出都是 0。而标准的自编码器的压缩特征向量的输出相对平缓一些。

9.5 使用场景

对于压缩应用来说,因为自编码器对训练数据有非常强的依赖,这也让它能难作为一个通用的压缩算法被使用。
所以自编码器主要有以下两个用途:数据降噪;降维处理。

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

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

相关文章

Vue3.0(五):Vue-Router 4.x详解

Vue-Router详解 vue-router教程 认识前端路由 路由实际上是网络工程中的一个术语 在架构一个网络的时候,常用到两个很重要的设备—路由器和交换机路由器实际上就是分配ip地址,并且维护着ip地址与电脑mac地址的映射关系通过映射关系,路由器…

读懂 FastChat 大模型部署源码所需的异步编程基础

原文:读懂 FastChat 大模型部署源码所需的异步编程基础 - 知乎 目录 0. 前言 1. 同步与异步的区别 2. 协程 3. 事件循环 4. await 5. 组合协程 6. 使用 Semaphore 限制并发数 7. 运行阻塞任务 8. 异步迭代器 async for 9. 异步上下文管理器 async with …

解释Java中的事务管理,以及事务的隔离级别是什么?

解释Java中的事务管理,以及事务的隔离级别是什么? 在Java中,事务管理是一种机制,用于管理对数据库进行的一系列操作,以确保这些操作要么全部成功执行,要么全部失败回滚,保持数据的一致性和完整…

STM32 的优势与不足

STM32 的优势和不足如下: 优势: ① 性能:STM32 采用了 ARM Cortex-M 核,具有高性能、低功耗、低成本等特点,可以满足各种嵌入式系统应用的需求。 ② 生态系统:STM32 具有完善的生态系统,包括各种…

戴上HUAWEI WATCH GT 4,解锁龙年新玩法

春节将至,华为WATCH GT 4作为一款颜值和实力并存的手表,能为节日增添了不少趣味和便利。无论你是钟情于龙年表盘或定制属于自己的表盘,还是过年用来抢红包或远程操控手机拍全家福等等,它都能成为你的“玩伴”。接下来,…

宏观行业心得

OLAP的特点 电商这样的OLTP场景大家更熟悉。相比之下,OLAP的特点: 读相对多,1000row以上大批写入,不改已有数据查询时输出很多行、很少列,结果被过滤或聚合后能够在一台服务器的内存中单台服务器qps数百,…

fastapi mysql 开发restful 3

pip install mysql-connector-python pymysql 数据库链接 创建src目录,里面创建db.py 代码如下: # 导入mysql.connector模块,该模块提供了与MySQL数据库进行连接和交互的功能。 import mysql.connector # 定义一个函数get_db_connectio…

二分算法--模板及原理总结

二分答案 首先我们看这个图: 我们需要二分的答案就是这个临界点x。 什么情况下可以使用二分呢: 具有单调性(单调递增,单调递减),二段性(整个区间一分为二,一段区间满足,一…

为什么许多年轻人不喜欢回农村过年了?

为什么许多年轻人不喜欢回农村过年了? 随着时代的变迁和社会的发展,越来越多的年轻人选择在春节期间留在城市,而不是回到农村老家过年。这一现象引起了人们的关注和思考:为什么许多年轻人不喜欢回农村过年了? 首先&a…

全栈笔记_插件篇(用Volar替换Vuter)

Volar与Vuter的区别 TS支持:Volar和Vuter是2个独立的插件,都是为.vue单文件组件提供代码高亮以及语法支持,但是Vuter对ts的支持并不友好。唯一根标签:Volar 不限制是否唯一根标签,vuter 则会报错 The template root r…

史上最“昂贵”的漏洞

阿丽亚娜 5 号”事故 欧洲航天局“阿丽亚娜 5 号”运载火箭在 1996 年 6 月 4 日首次发射时发生了事故。火箭在飞行的第 40 秒由于软件错误而解体并爆炸,该软件直接沿用了以前“阿丽亚娜 4 号”火箭的软件,且未在新环境中进行测试。 此次事故导致四颗卫…

Qt网络编程-QTcpServer的封装

简单封装Tcp服务器类&#xff0c;将QTcpServer移入线程 头文件&#xff1a; #ifndef TCPSERVER_H #define TCPSERVER_H#include <QObject>class QTcpSocket; class QTcpServer; class QThread; class TcpServer : public QObject {Q_OBJECT public:explicit TcpServer(…

SpringBoot响应式编程教程-WebFlux

SpringBoot响应式编程教程-WebFlux 前言正文一、Reactor1、核心概念2、核心特性 二、Spring Webflux与springmvc的组件对比 三、R2DBC 结语 前言 最近有个项目需要用到响应式编程&#xff0c;一开始还是很懵的&#xff0c;以为是网页的自适应&#xff0c;通过部分文章的学习&a…

【MIMO】

MIMO技术入门 1.简介 MIMO(多入多出):多天线技术。 注意&#xff1a;此处的多天线&#xff0c;并不是有多个天线板&#xff0c;对基站来讲指天线有多套振子&#xff08;每一套振子都可以看成一个独立的天线&#xff09;。 4G 8天线&#xff1b;5G 64T64R&#xff1b;不仅基站…

[NOIP1998 普及组] 幂次方 题解 含源码

[NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 2 2 2 的幂次方表示。例如 $13727232^0 $。 同时约定次方用括号来表示&#xff0c;即 a b a^b ab 可表示为 a ( b ) a(b) a(b)。 由此可知&#xff0c; 137 137 137 可表示为 2 ( 7 ) 2 ( 3 ) 2 ( 0 ) 2(7…

什么是VPS服务器技术

VPS就是虚拟私有服务器&#xff0c;那VPS服务器技术具体是包含哪些&#xff1f;什么是VPS服务器技术&#xff1f; VPS可以通过虚拟化技术将一台物理服务器划分成多个虚拟服务器&#xff0c;并且每个虚拟服务器都有着属于自己的独立配置&#xff0c;是多个用户拥有着属于自己的资…

JavaScript valueOf() 方法详解

valueOf() valueOf() 方法通常由 JavaScript 在后台自动调用&#xff0c;并不显式地出现在代码中。 所有主要浏览器都支持valueOf()。 Number对象 valueOf() 方法可以返回数字的原始值。 语法&#xff1a; number.valueOf() // 返回一个数的原始值返回一个 Number 对象的…

【模板初阶】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义…

FPGA_工程_基于Rom的VGA图像显示

一 工程框图 框图中&#xff0c;CLK_in&#xff0c;Vga_ctrl&#xff0c;Vga_pic模块已有&#xff0c;只需要对顶层模块进行修改&#xff0c;并将rom ip例化添加到Vga_pic模块的.v文件中&#xff0c;对Vga_pic的.v文件进行一定修改。 二 理论补充 显示图像的方法&#xff1a;…

Mac 版 Excel 和 Windows 版 Excel的区别

Excel是一款由微软公司开发的电子表格程序&#xff0c;广泛应用于数据处理、分析和可视化等领域。它提供了丰富的功能和工具&#xff0c;包括公式、函数、图表和数据透视表等&#xff0c;帮助用户高效地处理和管理大量数据。同时&#xff0c;Excel还支持与其他Office应用程序的…