深度神经网络——什么是自动编码器?
自动编码器
自动编码器(Autoencoders)是无监督学习领域中一种重要的神经网络架构,它们主要用于数据压缩和特征学习。
-
自动编码器的定义:
自动编码器是一种无监督机器学习算法,它通过反向传播进行训练,目标值被设置为与输入值相等。其核心目标是对输入数据进行压缩,转换成一个更小的表示形式,如果需要原始数据,可以从压缩后的数据中重建。 -
自动编码器的组成:
自动编码器由三个主要部分组成:- 编码器(Encoder):负责将输入数据压缩成低维表示形式,即潜在空间(latent space)表示。
- 潜在空间(Code或Bottleneck):表示压缩后的数据,该数据随后被送入解码器。
- 解码器(Decoder):负责将编码后的表示重建成原始数据维度,重建的数据是对原始输入的一个有损近似。
-
自动编码器的工作流程:
- 数据首先被输入到自动编码器中。
- 编码器将数据编码并压缩成较小的潜在表示。
- 然后,解码器学习如何从这个压缩的表示中重建原始数据。
-
训练目的:
训练自动编码器的目的不单是复制输入数据,而是让网络学习输入数据的本质特征。通过最小化损失函数,网络学习到如何从压缩表示中有效地重建数据。 -
应用场景:
- 图像去噪:自动编码器可以被训练来识别并去除图像中的噪声。
- 数据降维:自动编码器用于降低数据的维度,同时尽可能保留重要信息。
- 特征提取:自动编码器可以提取数据中的关键特征,这些特征可以用于其他机器学习任务。
- 图像上色:将黑白图像转换为彩色图像。
- 水印去除:从图像或视频中去除不需要的对象或水印。
-
为何使用自动编码器:
与主成分分析(PCA)等传统技术相比,自动编码器能够学习非线性转换,可以利用非线性激活函数和多层结构。此外,自动编码器可以使用卷积层来学习图像、视频和序列数据,这比PCA更有效。 -
自动编码器的类型:
- 卷积自动编码器(Convolutional Autoencoders):适用于图像数据,可以用于图像重建、上色等。
- 稀疏自动编码器(Sparse Autoencoders):通过惩罚隐藏层的激活来引入信息瓶颈。
- 深度自动编码器(Deep Autoencoders):由多层编码和解码网络组成,可以学习更复杂的数据表示。
- 合同自动编码器(Contractive Autoencoders):通过惩罚隐藏层激活相对于输入的大幅度变化来帮助网络编码未标记的训练数据。
自动编码器架构
先来看看 自动编码器的架构。 :

自动编码器的架构可以概括为三个核心组件:编码器、瓶颈(或潜在空间),以及解码器:
-
编码器(Encoder):
编码器是自动编码器的输入部分,通常由前馈、密集连接的网络层组成。它的任务是接收原始输入数据,并通过一系列的变换,将其转换成一个低维的内部表示。这个过程涉及到数据压缩,目的是提取输入数据中的关键特征,并将其编码到一个较小的潜在空间中。 -
瓶颈(Bottleneck):
瓶颈层,也称为潜在表示或潜在变量,是自动编码器中编码过程的结果。这一层捕捉了输入数据的压缩表示,它包含了重建原始数据所必需的最重要信息。瓶颈层的设计至关重要,因为它需要决定哪些数据特征是信息丰富且需要保留的,哪些是可以丢弃的。瓶颈层通过逐元素的激活函数处理网络的权重和偏差,以实现这种压缩和特征选择。 -
解码器(Decoder):
解码器是自动编码器的输出部分,它的任务是将瓶颈层的压缩表示重新转换成原始数据的高维表示。解码器通常由一系列解压缩的层组成,这些层逐步增加数据的维度,直到达到与原始输入数据相同的维度。解码器的目标是从潜在空间表示中重建数据,尽可能地恢复输入数据的原始特征和结构。
自动编码器的训练通常采用反向传播算法,这是一种监督学习技术,用于最小化输入数据和重建数据之间的差异,通常通过损失函数来衡量。损失函数的常见选择包括均方误差(MSE)或二元交叉熵(Binary Cross-Entropy, BCE),具体取决于数据的性质和范围。
自动编码器的属性
自动编码器有多种类型,但它们都具有将它们结合在一起的某些属性。自动编码器自动学习。 它们不需要标签,如果给定足够的数据,很容易让自动编码器在特定类型的输入数据上达到高性能。自动编码器是特定于数据的。 这意味着它们只能压缩与自动编码器已经训练过的数据高度相似的数据。 自动编码器也是有损的,这意味着模型的输出与输入数据相比将会降低。
在设计自动编码器时,机器学习工程师需要注意四个不同的模型超参数:代码大小、层数、每层节点和损失函数。
代码大小决定了有多少节点开始网络的中间部分,节点越少,数据压缩得越多。 在深度自动编码器中,虽然层数可以是工程师认为合适的任何数量,但层中的节点数应该随着编码器的继续而减少。 同时,解码器中的情况正好相反,这意味着随着解码器层接近最后一层,每层的节点数量应该增加。 最后,自动编码器的损失函数通常是二进制交叉熵或均方误差。 二元交叉熵适用于数据输入值在 0 – 1 范围内的情况。
自动编码器类型
如上所述,经典自动编码器架构存在变体。 让我们研究一下不同的自动编码器架构。

虽然自动编码器通常存在通过减少节点来压缩数据的瓶颈, 稀疏自动编码器s 是典型操作格式的替代方案。 在稀疏网络中,隐藏层保持与编码器和解码器层相同的大小。 相反,给定层内的激活会受到惩罚,对其进行设置,以便损失函数更好地捕获输入数据的统计特征。 换句话说,虽然稀疏自动编码器的隐藏层比传统自动编码器具有更多的单元,但在任何给定时间只有一定比例的隐藏层处于活动状态。 最有影响力的激活函数被保留,其他激活函数被忽略,这种约束有助于网络确定输入数据最显着的特征。
收缩性
收缩自动编码器 旨在对数据中的微小变化具有弹性,从而保持数据的一致表示。 这是通过对损失函数应用惩罚来实现的。 该正则化技术基于输入编码器激活的雅可比矩阵的 Frobenius 范数。 这种正则化技术的效果是,模型被迫构建一种编码,其中相似的输入将具有相似的编码。
卷积
卷积自动编码器 通过将数据分成多个子部分,然后将这些子部分转换为简单信号,将这些信号相加以创建新的数据表示,对输入数据进行编码。 与卷积神经网络类似,卷积自动编码器专门研究图像数据的学习,它使用一个在整个图像上逐节移动的滤波器。 编码层生成的编码可用于重建图像、反映图像或修改图像的几何形状。 一旦网络学习了滤波器,它们就可以用于任何足够相似的输入来提取图像的特征。
去噪

去噪自动编码器 将噪声引入编码中,导致编码成为原始输入数据的损坏版本。 这个损坏的数据版本用于训练模型,但损失函数将输出值与原始输入而不是损坏的输入进行比较。 目标是网络将能够重现图像的原始、未损坏版本。 通过将损坏的数据与原始数据进行比较,网络可以了解数据的哪些特征最重要以及哪些特征不重要/损坏。 换句话说,为了让模型对损坏的图像进行去噪,它必须提取图像数据的重要特征。
变分
变分自动编码器 通过假设数据的潜在变量如何分布来进行操作。 变分自动编码器为训练图像/潜在属性的不同特征生成概率分布。 训练时,编码器为输入图像的不同特征创建潜在分布。
由于该模型将特征或图像学习为高斯分布而不是离散值,因此它能够用于生成新图像。 对高斯分布进行采样以创建一个向量,该向量被馈送到解码网络,解码网络根据该样本向量渲染图像。 本质上,该模型学习训练图像的共同特征,并为其分配一些发生的概率。 然后,概率分布可用于对图像进行逆向工程,生成与原始训练图像相似的新图像。
训练网络时,分析编码数据,识别模型输出两个向量,得出图像的平均值和标准差。 根据这些值创建分布。 这是针对不同的潜在状态完成的。 然后,解码器从相应的分布中获取随机样本,并使用它们来重建网络的初始输入。
自动编码器应用
自动编码器可用于广泛 多种应用,但它们通常用于降维、数据去噪、特征提取、图像生成、序列到序列预测和推荐系统等任务。
数据去噪是使用自动编码器从图像中去除颗粒/噪声。 同样,自动编码器可用于修复其他类型的图像损坏,例如模糊图像或图像缺失部分。 降维可以帮助高容量网络学习图像的有用特征,这意味着自动编码器可用于增强其他类型神经网络的训练。 使用自动编码器进行特征提取也是如此,因为自动编码器可用于识别其他训练数据集的特征来训练其他模型。
在图像生成方面,自动编码器可用于生成假人类图像或动画角色,这可用于设计人脸识别系统或自动化动画的某些方面。
序列到序列预测模型可用于确定数据的时间结构,这意味着自动编码器可用于生成序列中的下一个偶数。 因此,可以使用自动编码器来生成视频。 最后,深度自动编码器可用于通过拾取与用户兴趣相关的模式来创建推荐系统,编码器分析用户参与数据,解码器创建适合已建立模式的推荐。
相关文章:
深度神经网络——什么是自动编码器?
自动编码器 自动编码器(Autoencoders)是无监督学习领域中一种重要的神经网络架构,它们主要用于数据压缩和特征学习。 自动编码器的定义: 自动编码器是一种无监督机器学习算法,它通过反向传播进行训练,目标…...
初见flyway
flyway (一种数据库版本控制工具 document) 两种文件 V 和 R V: V 开头是不可重复执行的文件,每次修改完都该更改名称 R: R 开头是可重复执行的文件,需要保证内部sql都是可以重复执行的 名称格式: V__table_name.sql, R__table_name.sql …...
9.6 Go语言入门(数组、切片和指针)
Go语言入门(数组、切片和指针) 目录五、数组、切片和指针1. 数组1.1 声明和初始化数组1.2 访问和修改数组元素1.3 多维数组 2. 切片2.1 声明和初始化切片2.2 访问和修改切片元素2.3 切片操作2.4 切片的追加和拷贝 3. 指针3.1 声明和初始化指针3.2 指针与…...
Web面试题(一)
一:以前公司的测试流程? (1)问题分析 面试官主要为了考察候选者对软件测试流程的理解和掌握程度。 (2)核心答案讲解 1)需求分析与评审 2ÿ…...
【Crypto】一眼就解密
文章目录 前言一眼就解密解题感悟 前言 Basic写累了,写写别的 一眼就解密 一眼md5试一试 小小flag 拿下! 解题感悟 30秒搞定...
虚拟ECU:彻底改变汽车软件开发与测试
汽车开发领域有着垂直性较强的一系列需求,其中最为瞩目的需求之一就是对安全高效的软件测试方法的需求。传统的汽车开发偏向使用硬件原型与真实ECU进行软件测试,但由于硬件设备往往在开发周期的中后阶段才生产完成,给汽车开发带来了成本与时间…...
【SQL Server001】SQLServer2016常用函数实战总结(已更新)
1.熟悉、梳理、总结下SQL Server相关知识体系。 2.日常研发过程中使用较少,随着时间的推移,很快就忘得一干二净,所以梳理总结下,以备日常使用参考 3.欢迎批评指正,跪谢一键三连! 总结源文件资源下载地址&am…...
51单片机简单控制180度舵机
代码: 链接:https://pan.baidu.com/s/1K9dg2NwRhy49db_O_hqv-g?pwd1234 提取码:1234 一、路线 我在了解这个舵机之前最像想看到的是一个完全的路径。 比如我想学习b站上那个智能门锁,那就得每个模块的基本代码都会才能结合各…...
PCL 常用小知识
文章目录 一、时间计算二、实现类似`pcl::PointCloud::Ptr`和`pcl::PointCloud`的两个类相互转换三、查找点云的x,y,z的极值四、知道需要保存点的索引,从原点云中拷贝点到新点云五、从点云里删除和添加点六、对点云进行全局或局部变换七、链接两个点云字段(两点云大小必须相…...
rbd块设备数据IO流程(client端)
一、rbd内核驱动写入流程 1)初始化 首先是rbd驱动的初始化工作:包括验证libceph的兼容性,分配内存,在sysfs中创建块设备控制文件、创建工作队列rbd_wq并调用INIT_WORK初始化它 module_init(rbd_init); static int __init rbd_i…...
数据仓库、数据中台、大数据平台之间的关系
数据行业经常会出现数据仓库、数据中台、大数据平台等概念,容易产生疑问,它们中间是相等,还是包含的关系? 数据中台和数据仓库概念的关系 数据中台概念是包含数据仓库的,数据仓库是数据中台中的一部分,包含…...
python写页面自动截图
from selenium import webdriver def take_screenshot(url, file_path):driver webdriver.Chrome()driver.get(url)driver.save_screenshot(file_path)driver.quit() if __name__ __main__:take_screenshot(http://baidu.com, D:\桌面\wang.png)要安装selenium还要安装google…...
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 布局管理器 | 添加空白Spacer 文章编号:Qt 学…...
es问题汇总--待完善
1. 查询某个索引库中数据总量 方式一: CountRequest 鄙人喜欢这种方式 public long getTotalNum(String indexName) throws IOException {CountRequest countRequest new CountRequest(indexName);// 如果需要,你可以在这里添加查询条件// countReques…...
python 线性回归模型
教材链接-3.2. 线性回归的从零开始实现 c实现 该博客仅用于记录一下自己的代码,可与c实现作为对照 from d2l import torch as d2l import torch import random # nn是神经网络的缩写 from torch import nn from torch.utils import data# 加载训练数据 # 加载训…...
pcl::transformPointCloud()用法及注意事项
函数用法 #include <pcl/common/transforms.h> pcl::transformPointCloud(const pcl::PointCloud<PointT> &cloud_in, pcl::PointCloud<PointT> &cloud_out, const Eigen::Matrix4f &transform) 其中cloud_in, cloud_out的类型为pcl::PointClo…...
图像超分辨率重建相关概念、评价指标、数据集、模型
1、图像超分辨率概念 1.1 基本定义 超分辨率(Super-Resolution),简称超分(SR)。是指利用光学及其相关光学知识,根据已知图像信息恢复图像细节和其他数据信息的过程,简单来说就是增大图像的分辨…...
中移物联OneMO Cat.1模组推动联网POS规模应用
在第三方支付蓬勃发展和消费模式不断革新的时代背景下,新型联网POS终端以其智能化、便捷化的特点丰富人们生活便利度。在这一变革浪潮中,中移物联OneMO Cat.1模组ML307R凭借其卓越的性能和成本效益,成为推动联网POS规模应用的重要力量。 性能…...
二.常见算法--贪心算法
(1)单源点最短路径问题 问题描述: 给定一个图,任取其中一个节点为固定的起点,求从起点到任意节点的最短路径距离。 例如: 思路与关键点: 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
