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

深度学习中的结构化概率模型 - 非结构化建模的挑战篇

序言

在深度学习的广阔领域中,结构化概率模型作为一种强有力的工具,其重要性不言而喻。这种模型通过图论的概念,即利用图来描述随机变量之间的相互作用,来构建复杂的概率分布。然而,在探索这一领域之前,我们不得不正视非结构化建模所面临的诸多挑战。非结构化建模在处理高维数据时,特别是在需要精确估计密度函数、去噪或进行复杂推理等任务时,显得力不从心。其内存需求巨大、统计效率低下且运行时间长,这些问题严重制约了其在实际应用中的表现。

非结构化建模的挑战

  • 深度学习的目标是使得机器学习能够解决许多人工智能中需要解决的挑战。

  • 分类问题可以把这样一个来自高维分布的数据作为输入,然后用一个类别的标签来概括它——这个标签可以是照片中是什么物品,一段语音中说的是哪个单词,也可以是一段文档描述的是哪个话题。

    • 分类的这个过程丢弃了输入数据中的大部分信息,然后给出了一个单个值的输出(或者是一个输出值的概率分布)。
    • 这个分类器通常可以忽略输入数据的很多部分。
    • 举个例子,当我们识别一个照片中是哪一个物品的时候,我们通常可以忽略图片的背景。
  • 我们也可以使用概率模型来完成许多其他的任务。

    • 这些任务通常比分类更加昂贵。
    • 其中的一些任务需要产生多个输出。
    • 大部分任务需要对输入数据整个结构的完整理解,所以并不能舍弃数据的一部分。
    • 这些任务包括了以下几个:
      • 估计密度函数:
        • 给定一个输入 x \boldsymbol{x} x, 机器学习系统返回了一个对数据生成分布的真实密度函数 p ( x ) p(\boldsymbol{x}) p(x) 的估计。
        • 这只需要一个输出,但它需要完全理解整个输入。
        • 即使向量中只有一个元素不太正常,系统也会给它赋予很低的概率。
      • 去噪:
        • 给定一个受损的或者观察有误的输入数据 x ~ \tilde{\boldsymbol{x}} x~, 机器学习系统返回了一个对原始的真实 x \boldsymbol{x} x 的估计。
        • 举个例子,有时候机器学习系统需要从一张老相片中去除污渍或者抓痕。
        • 这个系统会产生多个输出(对应着估计的干净样本 x \boldsymbol{x} x 的每一个元素),并且需要我们有一个对输入的整体理解(因为即使一个严重损害的区域也需要在最后的输出中恢复)。
      • 缺失值的填补:
        • 给定 x \boldsymbol{x} x 的某些元素作为观察值,模型被要求返回一个 x \boldsymbol{x} x 一些或者全部未观察值的估计或者概率分布。
        • 这个模型返回的也是多个输出。
        • 由于这个模型需要恢复 x \boldsymbol{x} x 的每一个元素,所以它必须理解整个输入。
      • 采样:
        • 模型从分布 p ( x ) p(\boldsymbol{x}) p(x) 中抽取新的样本。
        • 应用包含了语音合成,即产生一个听起来很像人说话的声音。
        • 这个模型也需要多个输出以及对输入整体的良好建模。
        • 即使样本只有一个从错误分布中产生的元素,那么采样的过程也是错误的。
  • 图例1中描述了一个使用较小的自然图片的采样任务。

  • 对上千甚至是上百万随机变量的分布建模,无论从计算上还是从统计意义上说,都是一个具有挑战性的任务。

    • 假设我们只想对二值的随机变量建模。
    • 这是一个最简单的例子,但是仍然无能为力。
    • 对一个小的 32 × 32 32 × 32 32×32 像素的彩色( RGB \text{RGB} RGB)图片来说,存在 2 3072 2^{3072} 23072 种可能的二值图片。
    • 这个数量已经超过了 1 0 800 10^{800} 10800,比宇宙中的原子总数还要多。
  • 通常意义上讲,如果我们希望对一个包含 n n n 个离散变量并且每个变量都能取 k k k个值的 x \boldsymbol{x} x 的分布建模,那么最简单的表示 P ( x ) P (\boldsymbol{x}) P(x) 的方法需要存储一个可以查询的表格。这个表格记录了每一种可能的值的概率,需要记录 k n k^n kn 个参数。基于下述几个原因,这种方式是不可行的:

    • 内存:
      • 存储参数的开销。
      • 除了极小的 n n n k k k 的值,用表格的形式来表示这样一个分布需要太多的存储空间。
    • 统计的高效性:
      • 当模型中的参数个数增加时,使用统计估计器估计这些参数所需要的训练数据数量也需要相应地增加。
      • 因为基于查表的模型拥有天文数字级别的参数,为了准确地拟合,相应的训练集的大小也是相同级别的。
      • 任何这样的模型都会导致严重的过拟合,除非我们添加一些额外的假设来联系表格中的不同元素(正如深度学习应用 - 自然语言处理(NLP)篇 - n-gram中所举的回退或者平滑过的 n − gram n-\text{gram} ngram模型)。
    • 运行时间:
      • 推断的开销。
      • 假设我们需要完成一个推断的任务,其中我们需要使用联合分布 P ( x ) P (\text{x}) P(x) 来计算某些其他的分布,比如说边缘分布 P ( x 1 ) P (\text{x}_1) P(x1) 或者是条件分布 P ( x 2 ∣ x 1 ) P (\text{x}_2\mid\text{x}_1) P(x2x1)
      • 计算这样的分布需要对整个表格的某些项进行求和操作,因此这样的操作的运行时间和上述高昂的内存开销是一个级别的。
    • 运行时间:
      • 采样的开销。
      • 类似的,假设我们想要从这样的模型中采样。
      • 最简单的方法就是从均匀分布中采样, u ∼ U ( 0 , 1 ) u ∼ \text{U}(0, 1) uU(0,1),然后把表格中的元素累加起来,直到和大于 u u u,然后返回最后一个加上的元素。
      • 最差情况下,这个操作需要读取整个表格,所以和其他操作一样,它需要指数级别的时间。
  • 基于表格操作的方法的主要问题是我们显式地对每一种可能的变量子集所产生的每一种可能类型的相互作用建模。

    • 在实际问题中我们遇到的概率分布远比这个简单。
    • 通常,许多变量只是间接的相互作用。
  • 结构化概率模型为随机变量之间的直接作用提供了一个正式的建模框架。

    • 这种方式大大减少了模型的参数个数以致于模型只需要更少的数据来进行有效的估计。
    • 这些更轻便的模型在模型存储,模型推断以及从模型中采样的时候有着更小的计算开销。

注1:自然图片指的是能够在正常的环境下被照相机拍摄的图片,以区别于合成的图片,或者一个网页的截图。


  • 图例1:自然图片的概率建模。
    • 自然图片的概率建模
      在这里插入图片描述

    • 说明:

      • 上图:
        • CIFAR-10 \text{CIFAR-10} CIFAR-10 数据集 ( Krizhevsky and Hinton, 2009 \text{Krizhevsky and Hinton, 2009} Krizhevsky and Hinton, 2009) 中的 32 × 32 32 × 32 32×32 像素的样例图片。
      • 下图:
        • 这个数据集上训练的结构化概率模型中抽出的样本。
        • 每一个样本都出现在与其欧式距离最近的训练样本的格点中。
        • 这种比较使得我们发现这个模型确实能够生成新的图片,而不是记住训练样本。
        • 为了方便展示,两个集合的图片都经过了微调。
        • 图片经 Courville et al. (2011a) \text{Courville et al. (2011a)} Courville et al. (2011a) 许可转载。

总结

面对非结构化建模的这些挑战,深度学习中的结构化概率模型应运而生。通过引入图模型的概念,结构化概率模型能够更加高效地表示随机变量之间的直接相互作用,从而显著降低模型的复杂度和计算开销。这种模型不仅优化了内存使用,提高了统计效率,还显著缩短了运行时间。因此,结构化概率模型在解决深度学习中的许多复杂任务时,展现出了巨大的潜力和优势。它为我们提供了一种新的视角和方法,使得我们能够更深入地理解和处理具有丰富结构的高维数据。

本篇相关往期内容回顾

深度学习应用 - 自然语言处理(NLP)篇
应用数学与机器学习基础 - 概率与信息论篇


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

相关文章:

  • 【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】
  • golang开源框架:go开源验证框架validator
  • 【分布式技术】ES扩展知识-Elasticsearch分词器的知识与选择
  • A037-基于Spring Boot的二手物品交易的设计与实现
  • DHTMLX-gantt组件显示不同的颜色
  • C++线程基础使用方法
  • QT 开发日志:QT 布局管理 —— 如何使用布局器组织 UI 元素
  • bash 脚本获取当前 git 所有本地分支
  • (undone) MIT6.824 Lab1
  • Python库matplotlib之三
  • 论Web性能的重要性
  • 代理的网速与服务器进出口有关吗
  • CentOS7.9 snmp更改161端口
  • 追梦无Bug的软件世界
  • 毕业设计选题:基于springboot+vue+uniapp的在线办公小程序
  • redis 的发布订阅解决分布式下的websocket session 共享问题
  • 代码随想录算法训练营Day15
  • 【面试题】软件测试实习(含答案)
  • 828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评
  • Quill Editor 富文本编辑器的高度问题
  • SWAP、AquaCrop、FVCOM、Delft3D、SWAT、R+VIC、HSPF、HEC-HMS......
  • 云计算中过等保三级需要的网络安全设备及详细讲解
  • 可视化大屏
  • CTFshow-SSRF
  • JSP(Java Server Pages)基础使用二
  • 自制CANTool_DBC_Layout仿制_布局读取Signal(三)