parameter是什么意思(功放parameter是什么意思)( 三 )


下面有一个更直观的示意图来解释为什么贝叶斯优化在数学上优于随机搜索算法 。首先,红点表示已经探索出超参数 。这里只需要调整一个超参数X,Y轴表示选择这个超参数X后模型的效果,可以认为Y是模型的正确率,即越大越好,以及蓝线的真超参数X和正确率Y的对应关系,因为我们不能遍历所有的X,所以我们对蓝线是未知的,我们的目标是通过知道几个红点找到蓝线的最高点 。上图中有虚线和浅蓝色区域,是贝叶斯优化中高斯过程返回的均值和方差 。均值和方差在X值范围内,分别代表这个X点的期望正确率和这个X点可能浮动的空 。
仔细看可以发现红点必然在虚线上,因为这个点已经被探索过了,也就是用这个X训练模型得到了正确率,所以这个点必然在蓝线上 。浅蓝色区域代表这一块可能的浮动空空间,所以浅蓝色区域虚线越大说明这一块值得去挖掘,可能会发现新的高点不一定,而虚线越高说明这一块的预期Y值也越大,同样值得去挖掘 。为了平衡探索和探索,我们有下面这个效用函数,也是算法 。我们可以简单的认为它是一条均值加时间的方差得到的曲线,然后取最高值作为下一个探索点,因为这个探索点代表了这个X位置的预期Y值,还有更多未知的可能性需要探索 。如果你觉得难以理解,建议先参考贝叶斯优化:更好的超参数优化方法(https://zhuanlan.zhihu.com/p/29779000) 。
ENAS的实施
NAS一直在推出 。为了让大家知道NAS只是一个搜索算法 。NAS在不学习建模或者不更换算法科学家的情况下,无法设计出像Incident这样复杂的神经网络结构,但是可以用启发式算法进行大量的计算 。只要人类给出网络结构的搜索范围空,它就能比人类更快更准确地找到效果好的模型结构 。
ENAS也是NAS实现的一种,所以也需要人类先给基本网络结构search 空 room,这也是目前ENAS的一个局限(文中没有提到) 。ENAS要求人类给出生成的网络模型的节点数,也可以理解为层数,也就是说,人类要求ENAS设计一个复杂的神经网络结构,但如果人类说只有10层,ENAS不可能产生一个10层以上的网络结构,更不用说一个带有空的ResNet或incident了 。当然,我们可以把节点的数量设计成10000个或者1000000个,这样生成的网络结构会复杂很多 。那为什么会有这样的限制?原因在于ENAS的E(高效) 。
您可能知道为什么ENAS比其他NAS更高效,因为参数共享 。这里的参数共享是什么意思?你知道模型重量是共享的吗?然而,ENAS将生产和尝试各种模型结构 。不同型号的权重可以共享吗?其实这里我把参数共享翻译成了权重共享,也就是说这个参数就是模型权重的意义,如何在不同的模型结构之间共享参数是ENAS的关键 。ENAS定义了节点的概念,它类似于神经网络中的一层,但由于该层必须附着在前一层的后面,因此节点可以任意替换预先输入 。
下面有一个更直观的示意图 。对于普通的神经网络,我们通常取上一层的输入作为每一层的输出 。当然,我们也可以定义一些不一定是一条线的分支的组合关系,ENAS的每个节点都会有一个节点前索引属性 。在此图中,节点1指向节点0,节点2也指向节点0,节点3指向节点1 。
事实上,ENAS想要学习和选择的是节点之间的连接关系 。通过不同的连接会产生大量的神经网络模型结构,从中选择最佳连接相当于“设计”了一个新的神经网络模型 。如果你理解了,你可能会觉得这个生成的神经网络的结构有点低,因为生成的网络结构风格都差不多,节点数必须固定,甚至很难在里面创建一个像1x1轮询这样的新结构 。是的,所有这些论点都是对的 。目前ENAS能做的就是帮你改变连接,然后生成新的模型,但这是分担ENAS权重的基础,它能帮你调整模型结构,以极低的代码量生成更好的模型 。接下来,介绍了ENAS E(Efficient)的实现原理,这是本文的核心部分 。
我们知道,TensorFlow表示张量数据的流向,流向的蓝图是用户用Python代码定义的图形 。如果要实现上图中所有层连成一条直线的模型,需要在代码中指定多个层,然后用这个连接输入输出,这样就可以训练出一个模型的权重 。当我们把上图中所有层连成一条直线的模型换成右交叉连接的模型时,很明显两个模型是不同的图,前一个模型的权值从中导出的检查点不能导入到后一个模型中 。然而直观上,这些节点的位置并没有改变 。如果输入和输出张量的形状不变,那么这些节点的权重是相同的,也就是说,左边Node0、Node1、Node2和Node3的权重可以完全复制到右边对应的节点上 。


推荐阅读