返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、基础

发布于 2023-07-17 23:38:25 字数 7056 浏览 0 评论 0 收藏 0

1.1 基本概念

  1. 深度前馈网络的目标是近似某个函数 $ MathJax-Element-85 $ 。

    • 分类器 $ MathJax-Element-32 $ 将输入 $ MathJax-Element-292 $ 映射到它的真实类别 $ MathJax-Element-223 $ ,其中 $ MathJax-Element-35 $ 是真实的映射函数。
    • 深度前馈网络定义另一个映射 $ MathJax-Element-36 $ ,并且学习参数 $ MathJax-Element-123 $ 从而使得 $ MathJax-Element-84 $ 是 $ MathJax-Element-85 $ 的最佳近似。
  2. 深度前馈网络之所以称作前馈的(feedforward),是因为信息从输入 $ MathJax-Element-292 $ 到输出 $ MathJax-Element-223 $ 是单向流动的,并没有从输出到模型本身的反馈连接。

    如果存在反馈连接,则这样的模型称作循环神经网络(recurrent neural networks)。

  3. 深度前馈网络通常使用许多不同的函数复合而成,这些函数如何复合则由一个有向无环图来描述。最简单的情况:有向无环图是链式结构。

    假设有三个函数 $ MathJax-Element-42 $ 组成链式复合结构,则: $ MathJax-Element-313 $ 。其中: $ MathJax-Element-108 $ 被称作网络的第一层, $ MathJax-Element-44 $ 为网络第二层, $ MathJax-Element-45 $ 称为网络第三层。链的全长称作模型的深度。

    • 深度前馈网络的最后一层也称作输出层。输出层的输入为 $ MathJax-Element-46 $ ,输出为 $ MathJax-Element-47 $ 。

    • 给定训练样本 $ MathJax-Element-48 $ ,要求输出层的输出 $ MathJax-Element-49 $ ,但是对于其他层并没有任何要求。

      • 因为无法观测到除了输出层以外的那些层的输出,因此那些层被称作隐层(hidden layer) 。
      • 学习算法必须学习如何利用隐层来配合输出层来产生想要的结果。
      • 通常每个隐层的输出都是一个向量而不是标量,这些隐层的输出向量的维数决定了深度前馈网络的宽度。
  4. 也可以将每一层想象成由许多并行的单元组成,每个单元表示一个向量到标量的函数:每个单元的输入来自于前一层的许多单元,单元根据自己的激活函数来计算单元的输出。

    因此每个单元类似于一个神经元。

1.2 特征学习

  1. 线性模型简单高效,且易于求解。但是它有个明显的缺陷:模型的能力被局限在线性函数中,因此它无法理解任意两个输入变量间的非线性相互作用

    解决线性模型缺陷的方法是:采用核技巧,将线性模型作用在 $ MathJax-Element-72 $ 上,而不是原始输入 $ MathJax-Element-292 $ 上。其中 $ MathJax-Element-64 $ 是一个非线性变换。

    可以认为:通过 $ MathJax-Element-64 $ ,提供了 $ MathJax-Element-292 $ 的一个新的representation

  2. 有三种策略来选择这样的非线性变换 $ MathJax-Element-64 $ 。

    • 使用一个通用的 $ MathJax-Element-64 $ ,如无限维的 $ MathJax-Element-64 $ (采用基于 RBF核的核技巧)。

      当 $ MathJax-Element-64 $ 具有足够高的维数,则总是有足够的能力来适应训练集,但是对于测试集的泛化往往不佳。这是因为:通用的 $ MathJax-Element-64 $ 通常只是基于局部平滑的原则,并没有利用足够多的先验知识来解决高级问题。

    • 手动设计 $ MathJax-Element-64 $ 。

      这种方法对于专门的任务往往需要数十年的努力(如语音识别任务)。

    • 通过模型自动学习 $ MathJax-Element-64 $ 。

      这是深度学习采用的策略。以单层隐层的深度前馈网络为例: $ MathJax-Element-329 $ 。此时有两个参数:

      • 参数 $ MathJax-Element-123 $ :从一族函数中学习 $ MathJax-Element-64 $ ,其中 $ MathJax-Element-64 $ 定义了一个隐层。
      • 参数 $ MathJax-Element-139 $ :将 $ MathJax-Element-72 $ 映射到所需输出。
  3. 深度学习中,将representation参数化为 $ MathJax-Element-71 $ ,并使用优化算法来寻找 $ MathJax-Element-123 $ 从而得到一个很好的 representation

    • 如果使用一个非常宽泛的函数族 $ MathJax-Element-71 $ ,则能获得第一种方案的好处:适应能力强。
    • 如果将先验知识编码到函数族 $ MathJax-Element-71 $ 中,则能获得第二种方案的好处:有人工先验知识。

    因此深度学习的方案中,只需要寻找合适的、宽泛的函数族 $ MathJax-Element-71 $ ,而不是某一个映射函数 $ MathJax-Element-72 $ 。

  4. 通过特征学习来改善模型不仅仅适用于前馈神经网络,也适用于几乎所有的深度学习模型。

1.3 训练

  1. 训练一个深度前馈网络和训练一个线性模型的选项相同:选择优化算法、代价函数、输出单元的形式。

    除此之外还需要给出下列条件:

    • 由于深度前馈网络引入了隐层的概念,因此需要选择适用于隐层的激活函数。激活函数接受隐层的输入值,给出了隐层的输出值。
    • 深度前馈网络的网络结构也需要给出,其中包括:有多少层网络、每层网络有多少个单元、层级网络之间如何连接。
  2. 深度神经网络训练时需要计算复杂函数的梯度,通常这采用反向传播算法(back propagation)和它的现代推广来完成。

1.4 示例

  1. XOR函数是关于两个二进制值 $ MathJax-Element-77 $ 的运算,其中 $ MathJax-Element-74 $ ,要求:

    $ \text{xor}(0,1)= 1\\ \text{xor}(1,0)= 1\\ \text{xor}(0,0)= 0\\ \text{xor}(1,1)= 0 $

    令想要学习的目标函数为: $ MathJax-Element-75 $ ,其中 $ MathJax-Element-96 $ ,即 $ MathJax-Element-77 $ 为输入 $ MathJax-Element-292 $ 的两个分量。

    假设模型给出了一个函数 $ MathJax-Element-79 $ ,希望学习参数 $ MathJax-Element-123 $ ,使得 $ MathJax-Element-84 $ 尽可能接近 $ MathJax-Element-85 $ 。

  2. 考虑一个简单的数据集 $ MathJax-Element-334 $ 。希望 $ MathJax-Element-84 $ 在这四个点上都尽可能接近 $ MathJax-Element-85 $ 。

    采用MSE损失函数: $ MathJax-Element-341 $ 。

  3. 假设选择一个线性模型: $ MathJax-Element-86 $ 。通过最小化 $ MathJax-Element-87 $ ,可以得到它的解为:

    $ \mathbf{\vec w}=\mathbf{\vec 0},\quad b=\frac 12 $

    即: $ MathJax-Element-88 $ 。这意味着:线性模型将在每一点都是输出 0.5 ,因此它并不是xor函数的一个很好的拟合。

    从下图可知:

    • 当 $ MathJax-Element-89 $ 时,函数的输出随着 $ MathJax-Element-92 $ 的增加而增加。
    • 当 $ MathJax-Element-91 $ 时,函数的输出随着 $ MathJax-Element-92 $ 的增加而减少。

    因此导致了 $ MathJax-Element-93 $ ;同理 $ MathJax-Element-94 $ 。

  4. 假设采用一个简单的深度前馈网络。该网络结构如下,它有一层隐层,并且隐层中包含两个单元。

    • 第一层为隐层,对应于函数: $ MathJax-Element-95 $ ,其输入为 $ MathJax-Element-96 $ ,输出为 $ MathJax-Element-97 $ 。
    • 第二层为输出层,对应于函数: $ MathJax-Element-98 $ ,其输入为 $ MathJax-Element-126 $ ,输出为 $ MathJax-Element-132 $ 。

    令输出层仍然是一个线性回归模型,即: $ MathJax-Element-101 $ 。则完整的模型为: $ MathJax-Element-102 $ 。

  5. 大多数神经网络中, $ MathJax-Element-108 $ 的构造过程为:先使用仿射变换,然后通过一个激活函数。其中:激活函数不需要参数控制,仿射变换由参数控制。

    令 $ MathJax-Element-116 $ ,其中 $ MathJax-Element-110 $ 就是仿射变换, $ MathJax-Element-111 $ 为激活函数。

    假设隐层的激活函数是线性的,则 $ MathJax-Element-108 $ 也是线性的,暂时忽略截距项,则 $ MathJax-Element-104 $ 。 即: $ MathJax-Element-360 $ 。

    令: $ MathJax-Element-105 $ ,则有: $ MathJax-Element-106 $ 。即:前馈神经网络整体也是线性的。根据前面讨论,线性模型无法拟合xor 函数。因此 $ MathJax-Element-108 $ 必须是非线性函数。

  6. 现代神经网络中,默认推荐的激活函数为修正线性单元(rectified linear unit:ReLU): $ MathJax-Element-234 $ 。

    整个网络为: $ MathJax-Element-114 $ 。

    其中一个解为:

    $ \mathbf W=\begin{bmatrix} 1&1\\ 1&1\end{bmatrix},\quad \mathbf{\vec c}=\begin{bmatrix}0\\ -1\end{bmatrix},\quad \mathbf{\vec w}=\begin{bmatrix}1\\ -2\end{bmatrix},\quad b=0 $

    令 $ MathJax-Element-115 $ 表示输入矩阵,每个样本占用一行。则对于输入空间中的全部四个点,输入矩阵为:

    $ \mathbf X=\begin{bmatrix} 0&0\\0&1\\1&0\\1&1 \end{bmatrix} $

    根据 $ MathJax-Element-116 $ ,有:

    $ \mathbf H=\begin{bmatrix} 0&0\\1&0\\1&0\\2&1 \end{bmatrix} $

    $ MathJax-Element-117 $ 的每一行表示一个样本 $ MathJax-Element-411 $ 对应的隐单元 $ MathJax-Element-118 $ 。可以看到:隐层改变了样本之间的关系。

    $ MathJax-Element-119 $ ,得到:

    $ \begin{bmatrix}0&0\\0&1\\1&0\\1&1 \end{bmatrix}\xrightarrow{f} \begin{bmatrix}0\\1\\1\\0 \end{bmatrix} $

    .

  7. 在使用深度前馈网络逼近xor函数中,参数的求解可以通过简单的猜测来求解。但是对于复杂的函数逼近问题中,通常使用基于梯度的优化算法。

    • 这里给出的xor问题的解是损失函数的全局最小点,也可以通过梯度下降法找到该点。
    • 在实践中,梯度下降法通常难以找出像这样的容易理解的、整数值的解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文