Microsoft NNI 入门 —— Tunner算法分析调研

NNI中目前已经实现的Tunner算法分类:
目前Tunner算法:

  1. 基于暴力搜索的方法:
  • GridSearch,定义参数空间,逐个搜索,浪费资源,但是可以搜索到所有的空间
  • Batch tuner,
  1. 基于序列模型优化的方法:
  • TPE
  • SMAC
  1. 基于搜索空间的方法:
  • Random
  • Anneal:搜索空间,采用启发式策略
  • Naive Evolution:朴素进化
  1. 基于贝叶斯优化的方法:
  • Hyperband
  1. 其他的:
  • Network Morphism,可以选择和设计网络结构的,主要用于视觉任务,目前支持keras和pytorch
  • Metis Tuner ,可以根据精度选择下一次配置

参考上一篇博客中统计的部分实验数据:

算法 最高分数 最低分数 >0.80次数 >0.90次数 >0.95次数 总次数
TPE 0.9834 0.0958 7 5 3 10
Random 0.9823 0.0982 3 3 2 10
Anneal 0.9837 0.0892 2 2 2 10
Naive Evolution 0.9692 0.0958 2 1 1 10
Batch Tuner 0.9877 0.1135 3 3 2 6
Grid Search 0.988 0.0892 343 274 162 600
SMAC 0.9733 0.098 5 4 1 10
Hyperband 0.9831 0.0958 5 5 4 10

可以看到在Mnist数据集上做实验的话,几乎所有的Tunner算法都可以达到0.95+的分数。

  • 显然基于暴力搜索的GridSearch和BatchTuner效率更低下,GridSearch会对所有的数据进行排列组合,显然是最低效的,而且也并没有明显的性能指标的提升。BatchTuner只支持combine_params,类似人工调参的升级版,对于有经验的程序员是一个很不错的工具。
  • 从以上的小数据量的实验来看(如果条件允许,进行大数据量实验的话会更可靠),TPE应该是首选,得分高,而且大于0.80的次数多。
  • SMAC使用nnictl package install安装起来着实费劲,github的这个服务器是挂在了美国亚马逊上,所以如果网速不是很理想的服务器基本在装的时候每次都是timeout,如果可以直接用pip install smac安装就好了。

你可能感兴趣的:(Microsoft NNI 入门 —— Tunner算法分析调研)