电子说
集成学习是将不同的机器学习模型结合在一起的创新方法,它广泛应用于神经网络中,可以收获很好地表现,例如在Netflix Prize和Kaggle竞赛中都有它的身影。
但是,在实践中,这种方法却很少用到,因为训练时间很长,并且在选择机器学习模型时需要考虑各种类型的专业领域。随着计算力和各种深度学习硬件的出现(例如TPU),机器学习模型会越来越丰富,集成现象也会越来越多。那么是否有一种工具可以自动搜索神经网络框架,然后学习将最佳的几种模型集合,创造出另一个高质量模型。
最近,谷歌推出了AdaNet,这是一个基于TensorFlow的轻量化框架,可以自动学习高质量模型,只需人类少量干预。AdaNet以最近的强化学习和基于演化的AutoML为基础,不仅速度快、灵活度高,而且还能保证成功学习率。重要的是,AdaNet不仅仅为学习神经网络架构提供了通用框架,而且还能学习集成,得到更好的模型。
AdaNet使用起来很方便,并且得到的都是高质量模型,为机器学习从业者节省了大量时间,用一种适应性算法学习将神经架构看作是子网络的集成。AdaNet可以将不同深度和宽度的子网络结合起来,创造出一个多样化的集成模型,减少参数的数量提高性能。
AdaNet逐渐生成神经网络集成的过程,在每一次迭代,它会计算每个候选网络的集成损失,选择最佳的那个加入到下次迭代中
快速易用
AdaNet采用TensorFlow估计器的交互界面,它通过简单训练、评估,大大简化了机器学习的编程过程。它把TensorFlow Hub模块、TensorFlow模型分析和谷歌云的超参数调整期等开源工具结合在了一起。分布式训练可以极大地减少训练时间。
AdaNet在CIFAR-100上每一训练步骤的精确度。蓝线代表在训练集上的精确度,红线代表测试集上的表现。在每百万个步骤上都有一个新的子网络开始训练,最终会提高整个集成模型的性能。灰色和绿色的线表示新的子网络加入之前集成的精确度
TensorBoard是可视化模型尺度在训练时最佳的TensorFlow特征之一,AdaNet与其无缝衔接,从而控制子网络的训练、集成的构成和性能。当AdaNet完成训练后,它会输出一个SavedModel,之后会利用TensorFlow Serving进行部署。
学习保证
创建一个神经网络集成会面临多种问题:哪种是最好的子网络架构?是重复使用同一种架构好,还是让架构多样化好?虽然参数更多的复杂子网络在训练集表现得可能更好,但也正是因为它们的复杂性,可能无法在陌生数据上进行泛化。这些挑战都来自于对模型性能的评估,我们可以从训练集中分出一部分数据对模型性能进行评估,但是这样做可能会减少用于训练的样本数量。
而在这里,AdaNet的方法对目标进行优化,平衡了集成框架在训练时的性能和它对陌生数据泛化之间的差别。核心思想就是,当备选子网络提高了集成的训练损失超过了其对泛化能力的影响时,子网络才能加入到集成中去。这保证了:
集成的泛化错误由它的训练错误和复杂性所限制。
通过对目标进行优化,我们可以直接对这一限制进行最小化。
对这一目标进行优化的实际好处就是,它无需再选择哪个子网络要被添加到集成中去,这也使得更多的训练数据可以用于训练更多子网络,成为了额外的好处。想了解更多,可以阅读我们关于AdaNet的教程。
可扩展
对研究者和从业者来说,让AutoML框架产生作用的关键不仅仅是提供合理的默认值,而且要让用户尝试对他们自己的子网络或模型进行定义。机器学习研究者、从业者和爱好者都可以通过adanet.subnetwork.Builder来定义自己的AdaNet。
已经在自己的系统中集成TensorFlow模型的用户可以轻松将他们的TensorFlow代码转移到AdaNet子网络中,并使用adanet.Estimator提高模型性能,同时保证学习成功率。AdaNet会找到他们所定义的子网络搜索空间,学习如何集成子网络。在谷歌官方博客中,研究人员取了一个开源的NASNet-A CIFAR架构,将它转换成一个子网络,并在CIFAR-10上优化,经过八次AdaNet迭代后得到最佳结果。另外,我们的模型在更少的参数上也达到了相同结果:
用户也可以用自己特殊的损失函数作为AdaNet目标的一部分,从而训练回归、分类和多任务学习等问题。
用户还可以扩展adanet.subnetwork.Generator的类别,完全定义候选子网络的搜索空间。这可以让他们基于自己的硬件设备增加或减少搜索空间。子网络的搜索空间和复制有着相同配置不同随机种子的子网络一样简单,训练多个有着不同超参数组合的子网络,让AdaNet选择一个添加到最终的集成中。
如果你想试试AdaNet,可以查看谷歌的GitHub,其中包含了几个利用密集图层和卷积的例子。
全部0条评论
快来发表一下你的评论吧 !