宽泛策略 

       在使用神经网络来解决新的问题时,一个挑战就是获得任何一种非寻常的学习,也就是说,达到比随机的情况更好的结果。这个实际上会很困难,尤其是遇到一种新类型的问题时。让我们看看有哪些策略可以在面临这类困难时候尝试。
       假设,我们第一次遇到 MNIST 分类问题。刚开始,你很有激情,但是当第一个神经网络完全失效时,你会就得有些沮丧。此时就可以将问题简化。丢开训练和验证集合中的那些除了 0 和 1的那些图像。然后试着训练一个网络来区分 0 和 1。不仅仅问题比10 个分类的情况简化了,同样也会减少 80% 的训练数据,这样就给出了 5 倍的加速。这样可以保证更快的实验,也能给予你关于如何构建好的网络更快的洞察。
       你通过简化网络来加速实验进行更有意义的学习。如果你相信 [784, 10] 的网络更可能更随机更加好的分类效果,那么就从这个网络开始实验。这会比训练一个 [784, 30, 10] 的网络更快,你可以进一步尝试后一个。

      好了,上面就是宽泛的策略。现在我们看看一些具体的设置超参数的推荐。我会聚焦在学习率 η,L2 规范化参数 λ,和小批量数据大小。然后,很多的观点同样可以应用在其他的超参数的选择上,包括一些关于网络架构的、其他类型的规范化和一些本书后面遇到的如 momentumco-efficient 这样的超参数

一、学习速率

        首先,我们选择在训练数据上的代价立即开始下降而非震荡或者增加时作为 η 的阈值的估计。这个估计并不需要太过精确。你可以估计这个值的量级,比如说从 η = 0.01 开始。如果代价在训练的前面若干回合开始下降,你就可以逐步地尝试 η = 0.1, 1.0, ...,直到你找到一个 η 的值使得在开始若干回合代价就开始震荡或者增加。相反,如果代价在 η = 0.01 时就开始震荡或者增加那就尝试 η = 0.001, 0.0001, ... 直到你找到代价在开始回合就下降的设。按照这样的方法,我们可以掌握学习速率的阈值的量级的估计。你可以选择性地优化估计,选择那些最大的 η,比方说 η = 0.5 或者 η = 0.2(这里也不需要过于精确)。

选取方法:

      使用提前停止来确定训练的迭代期数量:提前停止表示在每个回合的最后,我们都要计算验证集上的分类准确率当准确率不再提升,就终止它。这让选择回合数变得很简单。特别地,也意味着我们不再需要担心显式地掌握回合数和其他超参数的关联。而且,这个过程还是自动的。另外,提前停止也能够帮助我们避免过度拟合。尽管在实验前期不采用提前停止,这样可以看到任何过匹配的信号,使用这些来选择规范化方法,但提前停止仍然是一件很棒的事。
      我们需要再明确一下什么叫做分类准确率不再提升,这样才可实现提前停止。正如我们已经看到的,分类准确率在整体趋势下降的时候仍旧会抖动或者震荡。如果我们在准确度刚开始下降的时候就停止,那么肯定会错过更好的选择。一种不错的解决方案是如果分类准确率在一段时间内不再提升的时候终止。例如,我们要解决 MNIST 问题。如果分类准确度在近 10 个回合都没有提升的时候,我们将其终止。这样不仅可以确保我们不会终止得过快,也能够使我们不要一直干等直到出现提升。

      在你更加深入地理解网络训练的方式时,仅仅在初始阶段使用10 回合不提升规则,然后逐步地选择更久的回合,比如说:20 回合不提升就终止,20 回合不提升就终止,以此类推。当然,这就引入了一种新的需要优化的超参数!实践中,其实比较容易设置这个超参数来获得相当好的结果。

      学习速率调整: 我们一直都将学习速率设置为常量。但是,通常采用可变的学习速率更加有效。在学习的前期,权重可能非常糟糕。所以最好是使用一个较大的学习速率让权重变化得更快。越往后,我们可以降低学习速率,这样可以作出更加精良的调整。
      我们要如何设置学习速率呢?其实有很多方法。一种自然的观点是使用提前终止的想法。就是保持学习速率为一个常量知道验证准确率开始变差。然后按照某个量下降学习速率,比如说按照 10 或者 2。我们重复此过程若干次,直到学习速率是初始值的 1/1024(或者 1/1000)。那时就终止

二、规范化参数

      开始时不包含规范化(λ = 0.0),确定 η 的值。使用确定出来的 η,我们可以使用验证数据来选择好的 λ。从尝试 λ = 1.0 开始,然后根据验证集上的性能按照因子 10增加或减少其值。一旦我已经找到一个好的量级,你可以改进 λ 的值。这里搞定后,你就可以返回再重新优化 η。

三、小批量数据大小

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐