当前位置: 首页 > article >正文

深度学习自编码器 - 去噪自编码器篇

序言

在深度学习的广阔天地中,自编码器作为一种强大的无监督学习工具,通过重构输入数据的方式,不仅实现了数据的有效压缩,还探索了数据的内在表示。而去噪自编码器( Denoising Autoencoder, DAE \text{Denoising Autoencoder, DAE} Denoising Autoencoder, DAE),作为自编码器的一个变种,更是以其独特的去噪能力,在众多应用中脱颖而出。去噪自编码器在训练过程中,会故意向输入数据中添加噪声,然后迫使模型从这种被“污染”的数据中恢复出原始的纯净数据。这一过程不仅锻炼了模型的鲁棒性,还促进了模型学习到更加稳健和本质的数据特征,从而提高了其在噪声环境下的泛化能力。

去噪自编码器(Denoising Autoencoders)

  • 去噪自编码器 ( denoising autoencoder, DAE \text{denoising autoencoder, DAE} denoising autoencoder, DAE) 是一类接受损坏数据作为输入,并训练来预测原始未被损坏数据作为输出的自编码器。
  • DAE \text{DAE} DAE的训练过程如图例1中所示。
    • 我们引入一个损坏过程 C ( x ~ ∣ x ) C(\tilde{\mathbf{x}}\mid\mathbf{x}) C(x~x),这个条件分布代表给定数据样本 x \mathbf{x} x 产生损坏样本 x ~ \tilde{\mathbf{x}} x~ 的概率。
    • 自编码器则根据以下过程,从训练数据对 ( x , x ~ ) (\boldsymbol{x},\tilde{\boldsymbol{x}}) (x,x~) 中学习重构分布 ( reconstruction distribution \text{reconstruction distribution} reconstruction distribution) p reconstruct ( x ∣ x ~ ) p_{\text{reconstruct}}(\mathbf{x}\mid\tilde{\mathbf{x}}) preconstruct(xx~)
      • 从训练数据中采一个训练样本 x \boldsymbol{x} x
      • C ( x ~ ∣ x = x ) C(\tilde{\mathbf{x}}\mid \mathbf{x}=\boldsymbol{x}) C(x~x=x)采一个损坏样本 x ~ \tilde{x} x~
      • ( x , x ~ ) (\boldsymbol{x},\tilde{\boldsymbol{x}}) (x,x~)作为训练样本来估计自编码器的重构分布 p reconstruct ( x ∣ x ~ ) = p decoder ( x ∣ h ) p_{\text{reconstruct}}(\boldsymbol{x}\mid\tilde{\boldsymbol{x}})=p_{\text{decoder}}(\boldsymbol{x}\mid\boldsymbol{h}) preconstruct(xx~)=pdecoder(xh),其中 h \boldsymbol{h} h是编码器 f ( x ~ ) f(\tilde{\boldsymbol{x}}) f(x~)的输出, p decoder p_{\text{decoder}} pdecoder根据解码函数 g ( h ) g(\boldsymbol{h}) g(h)定义。
  • 通常我们可以简单地对负对数似然 − log ⁡ p decoder ( x ∣ h ) -\log p_{\text{decoder}}(\boldsymbol{x}\mid\boldsymbol{h}) logpdecoder(xh)进行基于梯度如minibatch梯度下降)的近似最小化。只要编码器是确定性的,去噪自编码器就是一个前馈网络,并且可以使用与其他前馈网络完全相同的方式进行训练。
  • 因此我们可以认为DAE是在以下期望下进行随机梯度下降:
    − E x ∼ p ~ data ( x ) E x ~ ∼ C ( x ~ ∣   x ) log ⁡ p decoder ( x ∣ h = f ( x ~ ) ) -\mathbb{E}_{\mathbf{x}\sim\tilde{p}_{\text{data}}(\mathbf{x})}\mathbb{E}_{\tilde{x}\sim C(\tilde{\mathbf{x}}\mid\ \boldsymbol{x})} \log p_{\text{decoder}}(\boldsymbol{x}\mid\boldsymbol{h}=f(\tilde{\boldsymbol{x}})) Exp~data(x)Ex~C(x~ x)logpdecoder(xh=f(x~)) — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1

得分估计

  • 得分匹配( Hyv a ¨ rinen, 2005a \text{Hyvärinen, 2005a} Hyva¨rinen, 2005a) 是最大似然的代替。它提供了概率分布的一致估计,鼓励模型在各个数据点 x \boldsymbol{x} x 上获得与数据分布相同的得分 ( score \text{score} score)。在这种情况下,得分是一个特定的梯度场:
    ∇ x log ⁡ p ( x ) \nabla_x \log p(\boldsymbol{x}) xlogp(x) — 公式2 \quad\textbf{---\footnotesize{公式2}} 公式2

  • 我们将在后续篇章:得分匹配和比率匹配中更详细地讨论得分匹配。对于现在讨论的自编码器,理解学习 log ⁡ p data \log p_{\text{data}} logpdata 的梯度场是学习 p data p_{\text{data}} pdata 结构的一种方式就足够了。

  • DAE \text{DAE} DAE的训练准则(条件高斯 p ( x ∣ h ) p(\boldsymbol{x}\mid\boldsymbol{h}) p(xh))能让自编码器学到能估计数据分布得分的向量场 ( g ( f ( x ) ) − x ) (g(f(\boldsymbol{x}))-\boldsymbol{x}) (g(f(x))x) ,这是 DAE \text{DAE} DAE的一个重要特性。具体如图例2所示。

  • 去噪地训练一类采用高斯噪声和均方误差作为重构误差的特定去噪自编码器( sigmoid \text{sigmoid} sigmoid隐藏单元,线性重构单元),与训练一类特定的被称为 RBM \text{RBM} RBM的无向概率模型是等价的 ( Vincent, 2011 \text{Vincent, 2011} Vincent, 2011)。

    • 这类模型将在后续给出更详细的介绍;对于现在的讨论,我们只需知道这个模型能显式的给出 p model ( x ; θ ) p_{\text{model}}(\boldsymbol{x};\boldsymbol{\theta}) pmodel(x;θ)
    • RBM \text{RBM} RBM使用去噪得分匹配 ( denoising score matching \text{denoising score matching} denoising score matching) ( Kingma and LeCun, 2010a \text{Kingma and LeCun, 2010a} Kingma and LeCun, 2010a) 训练时,它的学习算法与训练对应的去噪自编码器是等价的。
    • 在一个确定的噪声水平下, 正则化的得分匹配不是一致估计量;相反它会恢复分布的一个模糊版本。
    • 然而,当噪声水平趋向于 0 0 0且训练样本数趋向与无穷时,一致性就会恢复。我们将会在后续更新篇章:去噪得分匹配更详细地讨论去噪得分匹配。
  • 自编码器和 RBM \text{RBM} RBM还存在其他联系。

    • 得分匹配应用于 RBM \text{RBM} RBM后,其代价函数将等价于重构误差结合类似 CAE \text{CAE} CAE惩罚的正则项 ( Swersky et al., 2011 \text{Swersky et al., 2011} Swersky et al., 2011)。
    • Bengio and Delalleau(2009) \text{Bengio and Delalleau(2009)} Bengio and Delalleau(2009) 指出自编码器的梯度是对 RBM \text{RBM} RBM对比散度训练的近似。
  • 对于连续的 x \boldsymbol{x} x,高斯损坏和重构分布的去噪准则得到的得分估计适用于一般编码器和解码器的参数化 ( Alain and Bengio, 2013 \text{Alain and Bengio, 2013} Alain and Bengio, 2013)。

    • 这意味着一个使用平方误差准则:
      ∥ g ( f ( x ~ ) ) − x ∥ 2 \Vert g(f(\tilde{\boldsymbol{x}}))-\boldsymbol{x}\Vert^2 g(f(x~))x2 — 公式3 \quad\textbf{---\footnotesize{公式3}} 公式3
      和噪声方差 σ 2 \sigma^2 σ2的损坏:
      C ( x ~ = x ~ ∣ x ) = N ( x ~ ; μ = x , ∑ = σ 2 I ) C(\tilde{x}=\tilde{\boldsymbol{x}}\mid\boldsymbol{x})=N(\tilde{\boldsymbol{x}};\mu=\boldsymbol{x},\sum=\sigma^2 I) C(x~=x~x)=N(x~;μ=x,=σ2I) — 公式4 \quad\textbf{---\footnotesize{公式4}} 公式4
      的通用编码器-解码器架构可以用来训练估计得分。
    • 图例3展示其中的工作原理。
  • 一般情况下,不能保证重构函数 g ( f ( x ) ) g(f(\boldsymbol{x})) g(f(x)) 减去输入 x \boldsymbol{x} x 后对应于某个函数的梯度,更不用说得分 。

    • 这是早期工作 ( Vincent, 2011 \text{Vincent, 2011} Vincent, 2011) 专用于特定参数化的原因(其中 g ( f ( x ) ) − x g(f(\boldsymbol{x}))-\boldsymbol{x} g(f(x))x 能通过另一个函数的导数获得)。
    • Kamyshanska and Memisevic (2015) \text{Kamyshanska and Memisevic (2015)} Kamyshanska and Memisevic (2015)通过标识一类特殊的浅层自编码器家族,使 g ( f ( x ) ) − x g(f(\boldsymbol{x}))-\boldsymbol{x} g(f(x))x 对应于这个家族所有成员的一个得分,以此推广 Vincent, 2011 \text{Vincent, 2011} Vincent, 2011的结果。
  • 目前为止我们所讨论的仅限于去噪自编码器如何学习表示一个概率分布。

    • 更一般的,我们可能希望使用自编码器作为生成模型,并从该分布中进行采样。
    • 这将在后续篇章:从AE采样中讨论。

历史观点

  • 采用 MLP \text{MLP} MLP去噪的想法可以追溯到 LeCun (1987) \text{LeCun (1987)} LeCun (1987) Gallinari et al. (1987) \text{Gallinari et al. (1987)} Gallinari et al. (1987) 的工作。
    • Behnke (2001) \text{Behnke (2001)} Behnke (2001) 也曾使用循环网络对图像去噪。
    • 在某种意义上,去噪自编码器仅仅是被训练去噪的 MLP \text{MLP} MLP
    • 然而, “去噪自编码器’’ 的命名指的不仅仅是学习去噪,而且可以学到一个好的内部表示(作为学习去噪的副效用)。
    • 这个想法提出较晚 ( Vincent et al., 2008b, 2010 \text{Vincent et al., 2008b, 2010} Vincent et al., 2008b, 2010)。学习到的表示可以被用来预训练更深的无监督网络或监督网络。
    • 与稀疏自编码器、稀疏编码、收缩自编码器等正则化的自编码器类似, DAE \text{DAE} DAE的动机是允许使用容量非常大的编码器,同时防止在编码器和解码器学习一个毫无用处的恒等函数。
  • 在引入现代 DAE \text{DAE} DAE之前, Inayoshi and Kurita (2005) \text{Inayoshi and Kurita (2005)} Inayoshi and Kurita (2005) 探讨了与一些相同的方法和相同的目标。
    • 他们在监督目标的情况下最小化重构误差,并在监督 MLP \text{MLP} MLP的隐藏层注入噪声,通过引入重构误差和注入噪声提升泛化能力。
    • 然而,他们的方法基于线性编码器,因此无法学习到现代 DAE \text{DAE} DAE能学习的强大函数族。

  • 图例1:去噪自编码器代价函数的计算图。
    • 去噪自编码器代价函数的计算图。
      在这里插入图片描述

    • 说明:

      • 去噪自编码器被训练为从损坏的版本 x ~ \tilde{\boldsymbol{x}} x~ 重构干净数据点 x \boldsymbol{x} x
      • 这可以通过最小化损失 L = − log ⁡ p decoder ( x ∣ h = f ( x ~ ) ) L=-\log p_{\text{decoder}}(\boldsymbol{x}\mid\boldsymbol{h}=f(\tilde{\boldsymbol{x}})) L=logpdecoder(xh=f(x~)) 实现,其中 x ~ \tilde{\boldsymbol{x}} x~ 是样本 x \boldsymbol{x} x 经过损坏过程 C ( x ~ ∣ x ) C(\tilde{\boldsymbol{x}}\mid\boldsymbol{x}) C(x~x) 后得到的损坏版本。
      • 通常,分布 p decoder p_{\text{decoder}} pdecoder 是因子的分布(平均参数由前馈网络 g g g 给出)。

  • 图例2:去噪自编码器被训练为将损坏的数据点 x ~ \tilde{\boldsymbol{x}} x~ 映射回原始数据点 x \boldsymbol{x} x
    • 去噪自编码器被训练为将损坏的数据点 x ~ \tilde{\boldsymbol{x}} x~ 映射回原始数据点 x \boldsymbol{x} x
      在这里插入图片描述

    • 说明:

      • 我们将训练样本 x ~ \tilde{\boldsymbol{x}} x~ 表示为位于低维流形(粗黑线)附近的红叉。
      • 我们用灰色圆圈表示等概率的损坏过程 C ( x ~ ∣ x ) C(\tilde{\boldsymbol{x}}\mid\boldsymbol{x}) C(x~x)
      • 灰色箭头演示了如何将一个训练样本转换为经过此损坏过程的样本。
      • 当训练去噪自编码器最小化平方误差 ∥ g ( f ( x ~ ) ) − x ∥ 2 \Vert g(f(\tilde{\boldsymbol{x}}))-\boldsymbol{x}\Vert^2 g(f(x~))x2 的平均值时,重构 g ( f ( x ~ ) ) g(f(\tilde{\boldsymbol{x}})) g(f(x~)) 估计 E x , x ∼ p data ~ ( x ) C ( x ~ ∣ x ) [ x ∣ x ~ ] \mathbb{E}_{\mathbf{x},\tilde{\mathbf{x}\sim p_{\text{data}}}(\mathbf{x})C(\tilde{\mathbf{x}}\mid\mathbf{x})}[\mathbf{x}\mid\tilde{\boldsymbol{x}}] Ex,xpdata~(x)C(x~x)[xx~]
      • g ( f ( x ~ ) ) g(f(\tilde{\boldsymbol{x}})) g(f(x~)) 对可能产生 x ~ \tilde{\boldsymbol{x}} x~ 的原始点 x \boldsymbol{x} x 的质心进行估计,所以向量 g ( f ( x ~ ) ) − x ~ g(f(\tilde{\boldsymbol{x}}))-\tilde{\boldsymbol{x}} g(f(x~))x~ 近似指向流形上最近的点。
      • 因此自编码器可以学习由绿色箭头表示的向量场 g ( f ( x ) ) − x g(f(\boldsymbol{x}))-\boldsymbol{x} g(f(x))x
      • 该向量场估计得分 ∇ x log ⁡ p data ( x ) \nabla_x \log p_{\text{data}}(\boldsymbol{x}) xlogpdata(x) 为乘法因子,即平均均方根重构误差。

  • 图例3:由去噪自编码器围绕 1 1 1弯曲流形学习的向量场,其中数据集中在 2 2 2 维空间中。
    • 由去噪自编码器围绕 1 1 1弯曲流形学习的向量场,其中数据集中在 2 2 2 维空间中。
      在这里插入图片描述

    • 说明:

      • 每个箭头与重构向量减去自编码器的输入向量后的向量成比例,并且根据隐式估计的概率分布指向较高的概率。
      • 向量场在估计的密度函数的最大值处(在数据流形上)和密度函数的最小值处都为零。
      • 例如,螺旋臂形成局部最大值彼此连接的 1 1 1 维流形。
      • 局部最小值出现在两个臂间隙的中间附近。
      • 当重构误差的范数(由箭头的长度示出)很大时,在箭头的方向上移动可以显著增加概率,并且在低概率的地方大多也是如此。
      • 自编码器将这些低概率点映射到较高的概率重构。
      • 在概率最大的情况下, 重构变得更准确,因此箭头会收缩。
      • Alain and Bengio (2013) \text{Alain and Bengio (2013)} Alain and Bengio (2013) 许可转载此图。

总结

  • 去噪自编码器的出现,为深度学习领域的数据处理和特征学习带来了新的视角和方法。通过引入噪声并尝试去除它,模型不仅学会了如何有效压缩和重构数据,还深刻理解了数据的本质结构和关键特征。这种能力使得去噪自编码器在图像处理、语音识别、自然语言处理等多个领域展现出卓越的性能。
  • 更重要的是,去噪自编码器所体现的学习理念——即通过对抗噪声来强化模型的内在表示能力——为深度学习的发展提供了宝贵的启示,推动了整个领域向更加智能、更加鲁棒的方向迈进。

往期内容回顾

深度学习自编码器 - 引言篇
深度学习自编码器 - 欠完备自编码器篇
深度学习自编码器 - 正则自编码器篇


http://www.kler.cn/a/315120.html

相关文章:

  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • 封装el-menu
  • 算法——移除链表元素(leetcode203)
  • 机器情绪及抑郁症算法
  • SciPy:Python 科学计算工具包的全面教程
  • Vue3.5+ 侦听器的3个更新
  • Java 编码系列:String、StringBuilder 与包装类
  • 前端分段式渲染较长文章
  • SQL_yog安装和使用演示--mysql三层结构
  • Vue.js 组件数据定义:为何使用函数而非对象
  • 微服务注册中⼼2
  • 基于python+django+vue的医院预约挂号系统
  • MySQL系列—11.Redo log
  • el-upload如何自定展示上传的文件
  • [数据集][目标检测]棉花叶子病害检测数据集VOC+YOLO格式977张22类别
  • go项目多环境配置
  • Redis中的数据结构详解与示例
  • Java笔试面试题AI答之单元测试JUnit(7)
  • Winform中使用MySQL数据库
  • Hutool:Java开发者的瑞士军刀
  • 2.使用 VSCode 过程中的英语积累 - Edit 菜单(每一次重点积累 5 个单词)
  • 如何在 Ubuntu 16.04 服务器上安装 Python 3 并设置编程环境
  • JUC并发编程
  • 第二十一节:学习Redis缓存数据库的Hash操作(自学Spring boot 3.x的第五天)
  • 深度学习02-pytorch-08-自动微分模块