dyweb / papers-notebook

:page_facing_up: :cn: :page_with_curl: 论文阅读笔记(分布式系统、虚拟化、机器学习)Papers Notebook (Distributed System, Virtualization, Machine Learning)
https://github.com/dyweb/papers-notebook/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3ATODO-%E6%9C%AA%E8%AF%BB
Apache License 2.0
2.14k stars 250 forks source link

Auto-Keras: An Efficient Neural Architecture Search System #184

Open gaocegege opened 4 years ago

gaocegege commented 4 years ago

https://arxiv.org/pdf/1806.10282.pdf

https://github.com/keras-team/autokeras

最近 autokeras 的代码有了很大的改动,因为 Keras 自己推出了自己的 keras-tuner。趁这个机会读一下这篇论文。

PS,autokeras 现在还不支持分布式训练,也不支持并行的 Trial

KDD'20 Applied Data Science Track Paper

Haifeng Jin, Qingquan Song, and Xia Hu. "Auto-keras: An efficient neural architecture search system." Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2019. https://www.kdd.org/kdd2019/accepted-papers/view/auto-keras-an-efficient-neural-architecture-search-system

gaocegege commented 4 years ago

因为 Keras 自己推出了自己的 keras-tuner,autokeras 的代码有了很大的改动。

因为 keras-tuner 现在支持的 tuner 数量有限,现在好像只支持 Random Search 了。。。代码和论文非常不同步,最好还是看论文吧

gaocegege commented 4 years ago

这篇文章的核心思想是把贝叶斯优化用到 Network Morphism 中。Network Morphism 是说在保持一个模型的功能不变的情况下,改变它的结构。在 NAS 中,也就是在搜索到一个模型后,下一次搜索可以基于这个模型做一些简单的修改,比如增加一层,增加一个 skip-connection 之类的。它可以复用之前模型的权重,使得训练需要的 epoch 少很多。

而贝叶斯优化就是一个非常经典的黑盒优化的算法。不过传统的贝叶斯优化用到的高斯过程,只能作用在欧氏空间(Euclidean Space)上。因此这篇文章主要围绕的问题就是怎么让贝叶斯优化配合 Network Morphism 使用。

因为定长向量化 NAS 的搜索空间是非常不现实的,因为随着新的层的增加,维度会变化。高斯过程中最重要的一个东西就是核函数(也就是协方差函数),核函数在高斯过程中起生成一个协方差矩阵(相关系数矩阵)来衡量任意两个点之间的“距离”。最常用的一个核函数为高斯核函数,就是径向基函数 RBF。

但,作者为神经网络设计一个编辑距离的核函数:

Screenshot from 2019-11-04 11-47-34

直觉来说,从 a 编辑到 b 需要的编辑次数越多,那他们就越远。这个具体证明有一页满满的公式,就不深入了(我也看不懂 :-)

而计算神经网络的编辑距离这个问题,可以类比到计算两个图的编辑距离问题,而这是一个 NP Hard 问题。文章中用了一种近似算法来计算。

Ref https://zhuanlan.zhihu.com/p/75589452

gaocegege commented 4 years ago

这一个问题就解决了,新的问题,是如何利用贝叶斯优化得到的结果去改变模型结构。贝叶斯优化中,是利用提取函数(acquisition function)来指导新的采样的。这里作者用了 Upper-confidence bound。然后又基于 A* 搜索提出了一种提取函数

Screenshot from 2019-11-04 12-03-20

gaocegege commented 4 years ago

还有最后一个挑战,就是如何维持中间输出的 tensor 的形状。这一章可能跟 Network Morphism 有很大关系,没大看懂

gaocegege commented 4 years ago

最后文章介绍了 Auto Keras 这样一个实现。这一章节也是对于 System Track 的同学来说最有价值的。首先作者批判了一番公有云上的 AutoML service。首先他们不是免费使用的,其次他们需要复杂的配置,尤其是关于 Docker 和 Kubernetes 的。这对于算法工程师来说,没那么简单。最后就是数据安全问题。所以作者提出 Auto Keras 对易用性的要求会很高。

这里一点个人的看法,在有限的开发时间内,User friendly 和 Production readiness 是有一点点矛盾的。如果太过注重 API 设计上的简洁,很多功能没法考虑。作者只看到了 Docker 和 K8s 带来的配置上的复杂度,但没有考虑他们带来的好处,他们使得分布式的训练变得可能,也使得分布式的调参更加简单。更多算是一个 Tradeoff 吧。

作者提到 Auto Keras 的 CPU 和 GPU 可以并行,这个其实所有的 AutoML system 都可以做到,可能 Auto Keras 唯一多的设计是 Queue,但看代码现在也找不到了,以及它是不是真的有存在的必要,值得考虑:

Screenshot from 2019-11-04 12-12-50

以及作者在文章中说,会把所有模型存在 disk 上。我不太确定是保存 morph 的历史,还是一次搜索保存一次。后者会造成 disk 的很大浪费。

总体来说,是一个非常结实的研究,点个赞。