参数VS超参数

参数和超参数并不是一个东西,现在可以理解为:参数是我们真正要通过深度学习学到的参数。比如神经网络中的W和b;超参数会影响参数的最优取值,比如学习率,神经网络的层数,每层的神经元个数,目前获得超参数的较好取值的方法就是多尝试一些值,看取哪个值更好。

什么是超参数?

神经网络超参数 表格 神经网络中的超参数_Andrew学习笔记

想要让你的深度神经网络运作得更为高效,你不仅要好好设置参数,更需要用心配置超参数,让我们来看一下什么是超参数。
在神经网络模型中我们常见的参数是W和b。而在整个学习算法模型中,还有另一些参数,比如学习率α 和梯度下降算法中的迭代次数决定了你神经网络模型中的参数会如何变化。所以你还需要为学习算法设定其他超参数,比如隐藏层的层数即L ;还有隐藏神经元的个数比如n[1] n[2]等等;还有激活函数的选择 ,在隐藏层中可以使用ReLu或tanh或sigmoid 或其他激活函数,这些参数都是你需要在学习算法中设定的。它们会影响到参数W和b的最终结果,我们称之为超参数。实际上深度学习中有许多不同的超参数 在后面的课程中 我们会学习其他超参数,比如动量、最小批大小以及各种形式的正则化参数等等。

分清参数和超参数

跟之前几代的机器学习算法相比 深度学习算法多了不少超参数 以后我都会把学习率α称为超参数而不是参数。在之前的机器学习时代中 我们没有这么多的超参数 很多人就常常偷懒把α称为参数,其实α的确是个参数 只是它是一个可以决定真正参数的参数 所以为了在学习的过程中将概念梳理得更为清晰 我们会将类似α和迭代次数的这类参数 统称为超参数 。

如何选取超参数的取值

神经网络超参数 表格 神经网络中的超参数_神经网络_02

当你在训练深度神经网络的时候 你会发现在超参数取值的问题上 会有很多不同的选择 而你需要尝试许多可能的值 。所以在深度学习算法中的超参数如何取值 是一个以实验为依据的过程。 你可能经常会有些直觉 比如 当你在设定学习率的时候 你可能会说 我认为α应该设为0.01 然后你实际操作了一下 并且得到了最终结果。 但是基于结果 你可能会说 我觉得把学习率增加到0.05 会比较好 ,所以如果你不确定 学习率的最优值应该是多少 。你可以先随意尝试一个学习率α 如果发现代价函数J像这样下降 你可能会尝试一个更大的值。 在之前的幻灯片中可以看到 有许多不同的超参数 并且当你创建新模型的时候,很难提前知道超参数的最优取值是多少 所以通常我们会这么做 首先尝试许多不同的取值 就像图中的模型这样 尝试不同的参数配置 比如5个隐藏层 数个隐藏单元 构建模型并运行 看看效果如何 然后循环往复直到找到最优值 这个幻灯片的标题是 应用深度学习是一个基于实验的过程 基于实验的过程就是 不断尝试然后找到最优值的高端说法 。另一个我观察到的现象是 如今深度学习被应用于众多领域 如今深度学习被应用于众多领域 从计算机视觉到语音识别 到自然语言处理 到许多结构化数据应用 比如在线广告或者网页搜索 或者产品推荐等等 我观察到的情形有以下几种 第一种 某一个领域的研究者 尝试去拓展另一个领域 有时候可以完美继承对超参数配置的直觉 而有时候却得到大相径庭的结果 所以我建议大家 多尝试几次 取不同的值 看看结果是不是尽如人意 尤其是在开始新项目的时候 下节课 我们会学习一些 系统性方法 来看看怎样才能取到最优值 第二种情形是 就算你已经在某个领域上 已经工作了很久很久 比如 你在研究在线广告 随着你的研究不断深入 很有可能学习率 和隐藏单元的个数等超参数的最优值 会发生改变 尽管已经把模型的参数都 设置成当前的最优值 有可能一年后你会发现 这些竟然不是最优值了 可能是因为计算机基础结构 比如CPU GPU的类型 或者其他一些构架发生了很大改变 所以这里我分享一个经验之谈 如果你研究的问题会持续比较久 例如很多年 你可以不时地 比如每隔几个月 尝试一些不同的超参数取值 来确认这些超参数 是否存在更为合适的取值 相信经过不断尝试并且 累积一些经验之后 你也会慢慢养成关于 最优超参数取值的直觉 说到这里 我也明白 去逐个尝试超参数的取值 听起来可能是深度学习中 不那么令人愉快的部分 但这是因为深度学习的研究 依然处于初级阶段 或许不久后对于 超参数的最优值选取 会出现更好的方法 但也有可能因为CPU GPU 网络和数据库 一直在不断变化 这些方法在一段时间内不会趋于一致 你还是需要不断地尝试 对超参数不同的取值 在预留的交叉验证集 或其他集合上进行评估 然后选取最优解 。