美文网首页
超参数 调优、批量归一化、编程框架

超参数 调优、批量归一化、编程框架

作者: Simple_isBeauty | 来源:发表于2018-10-13 14:54 被阅读0次

    Hyperparameter tuning

    1. Tuning process


      image.png

      对于大多数学习算法应用 学习速率α 是需要调优的超参数中最重要的一个 没有之一 除了α 我接下来会调整的一些超参数 也许是动量项 0.9是一个不错的默认值 还会调整Mini-Batch的大小 来保证最优化算法的运行效率 我还经常调试隐藏单元数量 就是那些用橙色圈起来的参数 这三个是我认为重要性仅次于 学习速率α的超参数 在调整好这些超参数后 接下来是重要性排在第三的超参数 网络层数有时候对结果起到重要作用 学习率衰减有时也一样 当使用Adam优化算法时 几乎不调节β1 β2和epsilon 我几乎都是用0.9 0.999和10^(-8)

    image.png
    1. Using an appropriate scale to pick hyperparameters
      超参数值域的随机抽样 能让你更有效地搜索超参数空间 但实际上,随机抽样并不意味着在有效值范围内的 均匀随机抽样(sampleing uniformly at random) 相反,更重要的是选取适当的尺度(scale) 用以研究这些超参数


      image.png

    那么你要做的就是在a~b的范围内均匀随机取样 这个例子中的范围为-4~0 然后为alpha赋值为 10^r,r为随机取样的基于10的对数 整理一下,要基于对数尺度取样,首先取得下限值 取其对数得到a 再取上限值,取其对数得到b 然后在对数尺度上在10a~10b范围内取样 即在a~b的范围内均匀随机的取r值 最后得到超参数值为10^r 这就是对数尺度上取样方法的实现

    1. Hyperparameters tuning in practice: Pandas vs. Caviar
    image.png

    将它们分别称之为熊猫模式和鱼子酱模式 那么如何挑选适合你的模式呢? 这取决于有足够de计算资源来并行训练很多模型

    Batch Normalization

    在深度学习不断兴起的过程中 最重要的创新之一是一种 叫批量归一化 (Batch Normalization) 的算法 它由Sergey Ioffe 和 Christian Szegedy提出 可以让你的超参搜索变得很简单 让你的神经网络变得更加具有鲁棒性 可以让你的神经网络对于超参数的选择上不再那么敏感 而且可以让你更容易地训练非常深的网络 让我们来看看批量归一化是如何工作的

    1. Normalizing activations in a network


      image.png
    • 在逻辑回归的例子里 我们看到了对x1 x2 x3做归一化可以对对w和b的训练更有效 所以这里的问题就是 对于任何一个隐藏层我们是否也可以对a的值做归一化呢 比如拿a2举例 其实可以是任何一个隐藏层 是否可以让w3 b3的训练更快呢 因为a2是下一层的输入 它影响着你对w[3] b[3]的训练 这就是batch norm 简单的解释 虽然在实际中我们归一化时针对的 并不是a[2]而是z[2] 对于在激活函数之前做归一化,也就是指z[2] 还是在激活函数之后做归一化,也就是指a[2] 这一点上学术界还是有一些争议的 实际中 对z[2]做归一化要普遍的多 也就是这里所呈现的方法 我也推荐你把它作为默认的方法


      image.png

      这里加上ε 这样我们就把z归一化为 一组均值0方差1的值了 每一组z都是均值0方差1 但是我们并不希望所有的隐藏单元都是这样的 也许本身它们的分布就有不同 所以我们可以这么做 z tilde = γ * zi * norm + β 这里的γ和β值可以从你的模型中学习


      image.png
    1. Fitting Batch Norm into a neural network


      image.png

    注意z是由下面的步骤计算得出的 也就是zL=wL * a(L-1)+bL但是BN算法所做的 就是使用mini-batch并且归一化zL 来满足均值为0以及标准方差 然后通过参数Beta和Gamma来重新调整 这意味着 不管bL的值为多少 实际上都要被减去 因为经过BN这一步 我们将计算zL的均值并将其减去 所以在mini-batch中对所有例子加上一个常量 并不会改变什么 因为无论我们加上什么常量 它都会被 减均值 这一步给去除 所以如果你使用BN算法 你可以忽略该参数b 或者可以认为它永远等于0 所以参数就变为了 zL=wL * a(L-1) 然后我们计算归一化zL 并且计算(带波浪号的)z等于Gamma乘以zL加上Beta 我们最终使用该参数Beta L来决定 (带波浪号的)zL的均值 它将在下一层中得到转发

    image.png image.png
    1. Why does Batch Norm work?
    image.png
    1. Batch Norm at test tiem
      如果你只有一个实例 那么计算这一个实例的平均值和标准差显然是不合理的 所以实际上该如何做呢? 以便于我们在测试时使用我们的神经网络 我们需要一种单独的方式来估算mu和sigma平方 在批标准化的通常实现中 我们是通过 指数加权平均数来估算的
    image.png

    但是在测试时 我们可能会需要处理单个测试实例 那么 处理的方式就是通过训练集来估算mu和sigma平方 我们有很多方式来做估算 理论上 我们可以用我们最后的网络运行整个训练集 来得到mu和sigma平方 但是实际上 人们通常会实现某种指数加权平均 来记住在训练时见到的mu和sigma平方的值 然后用这个指数加权平均数 有时也被称作移动均值 来得到mu和sigma平方的粗略的估算 然后我们用这些mu和sigma平方的估算值 在测试时进行比例缩放来获取隐藏神经元的Z值

    Multi-class classification

    1. Softmax Regression


      image.png
    image.png
    1. Training a software classifier
    image.png

    intrduction to programming frameworks

    1. Deep learning frameworks


      image.png
    2. Tensorflow

    • 最小化下面这个表达式


      image.png
    • tensorflow代码


      image.png
    image.png

    相关文章

      网友评论

          本文标题:超参数 调优、批量归一化、编程框架

          本文链接:https://www.haomeiwen.com/subject/cizwaftx.html