【问题标题】:understanding "Deep MNIST for Experts"了解“面向专家的深度 MNIST”
【发布时间】:2024-01-24 03:02:01
【问题描述】:

我想了解Deep MNIST for Experts。我对神经网络和深度学习如何在高水平上工作有一个非常清晰的概念,但我很难理解细节。

在教程中首先编写并运行一个简单的单层模型。这包括定义模型 x*W+b、计算熵、通过梯度下降最小化熵和评估结果。

我发现第一部分很容易运行和理解。

在第二部分中,构建一个简单的多级网络,并应用一些卷积和池化。然而,这里的事情开始变得棘手。他们写道:

我们现在可以实现我们的第一层。它将由卷积组成,然后是最大池化。卷积将为每个 5x5 补丁计算 32 个特征。

一个 5x5 的补丁应该等于 25 像素。对?为什么要从 25 个像素中提取 32 个特征?为什么你想要比数据点更多的特性?这有什么意义呢?感觉就像他们正在将问题从 25 维“升级”到 32 维。感觉 32 个维度中的 7 个应该是多余的。

其次。卷积使用函数truncated_normal,它只选择接近均值的随机值。为什么这是一个很好的手写数字建模模型?

第三。网络中的第二层似乎又在做同样的事情。层数越多越好吗?单层可以达到同样的效果吗?

【问题讨论】:

  • 本教程假定您了解卷积网络。我认为首先阅读 CN 模型会简化您的探索。在那里,您会发现特征是图像中的特征。每个特征都适用于完整的图像(特征图),因此它并不是真正的放大。它以不同的方式“看”图像。请注意,我怀疑这是一个 SO 问题,因此我没有发布完整的答案。也许像尼尔森的书这样的论坛或资源可以提供帮助。
  • 这对于 Data Science SE 或 CV 来说也是一个更合适的问题。此外,对于所有相关方,每个问题一个问题比三合一问题更可取。它将帮助未来的读者更轻松地找到他们需要的帖子,它不会让想要帮助您的人不知所措,并且它会为您提供更多答案,因为它可以避免排除对您的 3 个问题中的 1 个或 2 个问题有答案的人。
  • 我投票结束这个问题,因为它属于 Data Science SE

标签: machine-learning neural-network tensorflow deep-learning


【解决方案1】:

我认为视觉模型可以大大降低理解的难度,所以也许这可以帮助你更好地理解:

http://scs.ryerson.ca/~aharley/vis/conv/

这是一个卷积神经网络的 3D 可视化,它有两个卷积层和两个最大池化层,您可以单击每个层中的一个 3D 立方体来检查值。

【讨论】:

    【解决方案2】:

    因此,一般而言,您必须先阅读大量有关 CNN/NN 的内容,然后才能了解实际情况。这些示例并不是真正的 NN 入门课程,而是假设您知道 CNN 是什么。

    一个 5x5 的补丁应该等于 25 像素。对?为什么要从 25 个像素中提取 32 个特征?为什么你想要比数据点更多的特性?这有什么意义呢?感觉就像他们正在将问题从 25 维“升级”到 32 维。感觉 32 个维度中的 7 个应该是多余的。

    这是完全不同的“抽象级别”,您将不相关的对象相互比较,这显然令人困惑。他们正在创建 32 个过滤器,每个过滤器都会线性映射您的整个图像,通过一个 5x5 卷积核在您的图像中移动。例如,一个这样的过滤器可以是边缘检测器:

    0 0 0 0 0
    0 0 0 0 0
    1 1 1 1 1
    1 1 1 1 1
    1 1 1 1 1
    

    另一个可以检测对角线

    1 0 0 0 0
    1 1 0 0 0
    1 1 1 0 0
    1 1 1 1 0
    1 1 1 1 1
    

    等等。为什么是32?只是一个神奇的数字,经过经验测试。就 CNN 而言,这实际上是一个非常小的数字(请注意,仅仅为了检测灰度图像中的基本边缘,您已经需要 8 个不同的过滤器!)。

    其次。卷积使用函数 truncated_normal 只选择接近均值的随机值。为什么这是一个很好的手写数字建模模型?

    这是权重的初始化器。这不是“建模手写数字的模型”,这只是优化这部分参数空间的起点。为什么是正态分布?我们对如何初始化神经网络有一些数学直觉,尤其是假设 ReLU 激活。以随机方式初始化很重要,这可确保您的许多神经元最初都是活跃的,因此您不会得到 0 导数(因此缺乏使用典型优化器进行学习的能力)。

    第三。网络中的第二层似乎又在做同样的事情。层数越多越好吗?单层可以达到同样的效果吗?

    原则上,即使没有卷积,您也可以使用单隐藏层前馈网络对所有内容进行建模。但是,它可能需要指数尽可能多的隐藏单元,以及我们没有的完美优化策略(甚至可能根本不存在!)。网络深度使您能够用更少的参数表达更复杂(并且对于相同情况更有用)的特征,而且我们或多或少地知道如何优化它。但是,您应该避免经常误以为“越深越好”。一般情况下这是不正确的。 如果您的数据的重要特征可以有效地表示为抽象的层次结构,这是正确的。图像(越来越复杂的图案,第一个边缘,然后是一些线条和曲线,然后是补丁,然后是更复杂的概念等)以及文本、声音等都是如此,但在您尝试将 DL 应用于您的新任务之前您应该问自己这是否(或至少可能)适用于您的情况。使用过于复杂的模型通常比过于简单更糟糕。

    【讨论】: