Unverified Commit 41d19a53 authored by Chi Song's avatar Chi Song Committed by GitHub
Browse files

Chinese Translation (#732)

parent 8896afa3
# Makefile 文件和安装配置 # Makefile 文件和安装配置
NNI 使用 GNU 来生成和安装。 NNI 使用 GNU Make 来生成和安装。
`Makefile` 提供标准的目标 `生成``安装``卸载`, 以及不同设置的安装对象: `Makefile` 提供标准的目标 `生成``安装``卸载`, 以及不同设置的安装对象:
* `easy-install`: 针对非专家用户,自动处理所有内容; * `easy-install`: 针对非专家用户,自动安装所有内容;
* `dev-easy-install`: 针对专家用户,自动处理所有内容; * `dev-easy-install`: 针对专家用户,自动安装所有内容;
* `install`: 针对 NNI 普通用户,通过复制文件来安装 NNI; * `install`: 针对 NNI 普通用户,通过复制文件来安装 NNI;
* `dev-install`: 针对 NNI 贡献者,通过创建 symlinks 而不是复制文件来安装 NNI; * `dev-install`: 针对 NNI 开发人员,通过创建符号链接而不是复制文件来安装 NNI;
* `pip-install`: 针对使用 `setup.py` 安装的情况; * `pip-install`: 针对使用 `setup.py` 安装的情况;
下文会有更详细的介绍。 下文会有更详细的介绍。
## 依赖项 ## 依赖项
NNI 依赖于 Node.js, Yarn, 和 pip 来生成,推荐安装 TypeScript。 NNI 依赖于 Node.js, Yarn, 和 PIP 来生成,推荐安装 TypeScript。
NNI 需要 Node.js 以及运行所需要的所有库。 需要的 Node.js 库 (包括 TypeScript) 可以通过 Yarn 来安装, 需要的 Python 库可以通过 setuptools 或者 PIP 来安装。 运行 NNI 需要 Node.js 以及依赖库。 Node.js 依赖库 (包括 TypeScript) 可以通过 Yarn 来安装, Python 依赖库可以通过 setuptools 或者 PIP 来安装。
NNI *用户*可以用 `make install-dependencies` 来安装 Node.js 和 Yarn。 Node.js 会被安装到 NNI 的安装目录,Yarn 会被安装到 `/tmp/nni-yarn`。 安装过程需要 wget。 NNI *普通用户*可以用 `make install-dependencies` 来安装 Node.js 和 Yarn。 Node.js 会被安装到 NNI 的安装目录,Yarn 会被安装到 `/tmp/nni-yarn`。 安装过程需要 wget。
NNI *开发人员*推荐手工安装 Node.js 和 Yarn。 可浏览相应的官方文档了解安装过程。 NNI *开发人员*推荐手工安装 Node.js 和 Yarn。 可浏览相应的官方文档了解安装过程。
...@@ -32,15 +32,15 @@ NNI *开发人员*推荐手工安装 Node.js 和 Yarn。 可浏览相应的官 ...@@ -32,15 +32,15 @@ NNI *开发人员*推荐手工安装 Node.js 和 Yarn。 可浏览相应的官
NNI 项目主要由两个 Node.js 模块 (`nni_manager`, `webui`) 以及两个 Python 包 (`nni`, `nnictl`) 所组成。 NNI 项目主要由两个 Node.js 模块 (`nni_manager`, `webui`) 以及两个 Python 包 (`nni`, `nnictl`) 所组成。
默认情况下,Node.js 模块可以为所有用户安装在 `/usr/share/nni` 目录下,也可为只安装在当前用户 `~/.local/nni` 目录下。 默认情况下,Node.js 模块为所有用户安装在 `/usr/share/nni` 目录下,也可以只为当前用户安装在 `~/.local/nni` 目录下。
Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置。 如果为没有权限的用户安装,并且没有虚拟环境的时候,要加上 `--user` 参数。 Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置。 如果以非管理员身份安装 ,并且没有虚拟环境的时候,要加上 `--user` 参数。
此外,`nnictl` 是一个 bash 脚本,会被安装在 `/usr/share/bash-completion/completions``~/.bash_completion.d` 目录下。 此外,`nnictl` 提供一个自动完成脚本,会被安装在 `/usr/share/bash-completion/completions``~/.bash_completion.d` 目录下。
在某些配置情况下,NNI 也会将 Node.js 安装到 `/usr/share/nni` 目录下。 在某些配置情况下,NNI 也会将 Node.js 安装到 `/usr/share/nni` 目录下。
以上所有目录都可配置。 可参考下一章节。 以上所有目录都可配置。 可参考下一章节。
### 配置 ### 配置
...@@ -59,19 +59,19 @@ Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置 ...@@ -59,19 +59,19 @@ Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置
| `NODE` | Node.js 命令 | 参考源代码 | 参考源代码 | | `NODE` | Node.js 命令 | 参考源代码 | 参考源代码 |
| `YARN` | Yarn 命令 | 参考源代码 | 参考源代码 | | `YARN` | Yarn 命令 | 参考源代码 | 参考源代码 |
注意,这些变量不仅会影响安装路径,也会影响生成的 `nnictl` `nnimanager` 脚本。 如果复制文件的路径和运行时的不一样(例如,创建发行版本包时),需要手工编辑 `nnictl``nnimanager` 注意,这些变量不仅会影响安装路径,也会影响生成的 `nnictl` 脚本。 如果复制文件的路径和运行时的不一样(例如,创建发行版本包时),需要手工编辑 `nnictl``nnimanager`
### 目标 ### 目标
安装目标的流程如下: 安装目标的流程如下:
| 目标 | 流程 | | 目标 | 流程 |
| ------------------ | ------------------------------------------------ | | ------------------ | ------------------------------------------ |
| `easy-install` | 安装依赖项,生成,安装 NNI,并编辑 `~/.bashrc` | | `easy-install` | 安装依赖项,生成,安装 NNI,并编辑 `~/.bashrc` |
| `dev-easy-install` | 安装依赖项,生成,将 NNI 作为 symlinks 来安装,并编辑 `~/.bashrc` | | `dev-easy-install` | 安装依赖项,生成,将 NNI 作为符号链接来安装,并编辑 `~/.bashrc` |
| `install` | 安装 Python 包,Node.js 模块,NNI 脚本和样例 | | `install` | 安装 Python 包,Node.js 模块,NNI 脚本和样例 |
| `dev-install` | 将 Python 和 Node.js 模块作为 symlinks 安装,然后安装 scripts | | `dev-install` | 将 Python 和 Node.js 模块作为符号链接安装,然后安装 scripts |
| `pip-install` | 安装依赖项,生成,安装 NNI,但不安装 Python 包 | | `pip-install` | 安装依赖项,生成,安装 NNI,但不安装 Python 包 |
## TODO ## TODO
...@@ -79,4 +79,4 @@ Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置 ...@@ -79,4 +79,4 @@ Python 包使用 setuptools 安装,所以安装路径依赖于 Python 配置
* `test` 目标 * `test` 目标
* `lint` 目标 * `lint` 目标
* 每个目标的测试用例 * 每个目标的测试用例
* 评审变量 * 评审变量
\ No newline at end of file
<p align="center"> <p align="center">
<img src="https://microsoft.github.io/nni/docs/img/nni_logo.png" width="300"/> <img src="https://github.com/Microsoft/nni/blob/master/docs/img/nni_logo.png" width="300"/>
</p> </p>
* * * * * *
...@@ -13,7 +13,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -13,7 +13,7 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
### **NNI [v0.5.1](https://github.com/Microsoft/nni/releases) 已发布!** ### **NNI [v0.5.1](https://github.com/Microsoft/nni/releases) 已发布!**
<p align="center"> <p align="center">
<a href="#nni-v05-has-been-released"><img src="https://microsoft.github.io/nni/docs/img/overview.svg" /></a> <a href="#nni-v05-has-been-released"><img src="https://github.com/Microsoft/nni/blob/master/docs/img/overview.svg" /></a>
</p> </p>
<table> <table>
...@@ -21,15 +21,15 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包 ...@@ -21,15 +21,15 @@ NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包
<tr align="center" valign="bottom"> <tr align="center" valign="bottom">
<td> <td>
<b>支持的框架</b> <b>支持的框架</b>
<img src="https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png"/> <img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/>
</td> </td>
<td> <td>
<b>调优算法</b> <b>调优算法</b>
<img src="https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png"/> <img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/>
</td> </td>
<td> <td>
<b>训练服务</b> <b>训练服务</b>
<img src="https://user-images.githubusercontent.com/44491713/51381727-e3d0f780-1b4f-11e9-96ab-d26b9198ba65.png"/> <img src="https://github.com/Microsoft/nni/blob/master/docs/img/bar.png"/>
</td> </td>
</tr> </tr>
<tr/> <tr/>
......
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Assessor 的介绍: NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Assessor 的介绍:
| Assessor | 算法简介 | 注意:点击 **Assessor 的名称**可跳转到算法的详细描述,点击**用法**可看到 Assessor 的安装要求、建议场景和使用样例等等。
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Medianstop** [(用法)](#MedianStop) | Medianstop 是一种简单的提前终止策略,可参考[论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf)。 如果 Trial X 的在步骤 S 的最好目标值比所有已完成 Trial 的步骤 S 的中位数值明显要低,就会停止运行 Trial X。 | | Assessor | 算法简介 |
| [Curvefitting](../src/sdk/pynni/nni/curvefitting_assessor/README.md) [(用法)](#Curvefitting) | Curve Fitting Assessor 是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的 Trial X 在 step S 比性能最好的 Trial要差,就会提前终止它。 此算法中采用了 12 种曲线来拟合精度。 | | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Medianstop](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/medianstop_assessor/README.md) [(用法)](#MedianStop) | Medianstop 是一个简单的提前终止算法。 如果 Trial X 的在步骤 S 的最好目标值比所有已完成 Trial 的步骤 S 的中位数值明显要低,就会停止运行 Trial X。 [参考论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf) |
| [Curvefitting](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/curvefitting_assessor/README.md) [(用法)](#Curvefitting) | Curve Fitting Assessor 是一个 LPA (learning, predicting, assessing,即学习、预测、评估) 的算法。 如果预测的 Trial X 在 step S 比性能最好的 Trial要差,就会提前终止它。 此算法中采用了 12 种曲线来拟合精度曲线。 [参考论文](http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf) |
## 用法 ## 用法
...@@ -49,7 +51,7 @@ assessor: ...@@ -49,7 +51,7 @@ assessor:
**建议场景** **建议场景**
适用于各种性能曲线,可用到各种场景中来加速优化过程。 更好的是,它能处理并评估性能类似的曲线。 适用于各种性能曲线,可用到各种场景中来加速优化过程。 更好的地方是,它能处理并评估性能类似的曲线。
**参数** **参数**
......
...@@ -2,18 +2,20 @@ ...@@ -2,18 +2,20 @@
NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tuner 的简单介绍: NNI 提供了先进的调优算法,使用上也很简单。 下面是内置 Tuner 的简单介绍:
| Tuner | 算法简介 | 注意:点击 **Tuner 的名称**可跳转到算法的详细描述,点击**用法**可看到 Tuner 的安装要求、建议场景和使用样例等等。
| ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **TPE** [(用法)](#TPE) | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 | | Tuner | 算法简介 |
| **Random Search** [(用法)](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 | | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Anneal** [(用法)](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 | | [TPE](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#TPE) | Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 [参考论文](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf) |
| **Naive Evolution** [(用法)](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 | | [Random Search](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#Random) | 在超参优化时,随机搜索算法展示了其惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。 [参考论文](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) |
| **SMAC** [(用法)](#SMAC) | SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它会利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 `nnictl package` 命令来安装。 | | [Anneal](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperopt_tuner/README.md) [(用法)](#Anneal) | 这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了反应曲面的平滑性。 退火率不是自适应的。 |
| **Batch tuner** [(用法)](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 | | [Naive Evolution](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/evolution_tuner/README.md) [(Usage)](#Evolution) | 朴素进化算法来自于大规模图像分类进化。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。 [参考论文](https://arxiv.org/pdf/1703.01041.pdf) |
| **Grid Search** [(用法)](#GridSearch) | 网格搜索会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 | | [SMAC](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/smac_tuner/README.md) [(用法)](#SMAC) | SMAC 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型优化方法)。 它会利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 SMAC 算法包装了 Github 的 SMAC3。 注意:SMAC 需要通过 `nnictl package` 命令来安装。 [参考论文,](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) [Github 代码库](https://github.com/automl/SMAC3) |
| [Hyperband](https://github.com/Microsoft/nni/tree/master/src/sdk/pynni/nni/hyperband_advisor) [(用法)](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 | | [Batch tuner](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/batch_tuner/README.md) [(用法)](#Batch) | Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持 choice 类型。 |
| [Network Morphism](../src/sdk/pynni/nni/networkmorphism_tuner/README.md) [(用法)](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 最后会选择最有希望的模型进行训练。 | | [Grid Search](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/gridsearch_tuner/README.md) [(用法)](#GridSearch) | 网格搜索会穷举定义在搜索空间文件中的所有超参组合。 网格搜索可以使用的类型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的数值 q 具有特别的含义(不同于搜索空间文档中的说明)。 它表示了在最高值与最低值之间采样的值的数量。 |
| **Metis Tuner** [(用法)](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 | | [Hyperband](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/hyperband_advisor/README.md) [(用法)](#Hyperband) | Hyperband 试图用有限的资源来探索尽可能多的组合,并发现最好的结果。 它的基本思路是生成大量的配置,并运行少量的步骤来找到有可能好的配置,然后继续训练找到其中更好的配置。 [参考论文](https://arxiv.org/pdf/1603.06560.pdf) |
| [Network Morphism](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/networkmorphism_tuner/README.md) [(用法)](#NetworkMorphism) | Network Morphism 提供了深度学习模型的自动架构搜索功能。 每个子网络都继承于父网络的知识和形态,并变换网络的不同形态,包括深度,宽度,跨层连接(skip-connection)。 然后使用历史的架构和指标,来估计子网络的值。 最后会选择最有希望的模型进行训练。 [参考论文](https://arxiv.org/abs/1806.10282) |
| [Metis Tuner](https://github.com/Microsoft/nni/blob/master/zh_CN/src/sdk/pynni/nni/metis_tuner/README.md) [(用法)](#MetisTuner) | 大多数调参工具仅仅预测最优配置,而 Metis 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 它不进行随机取样。 大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。 [参考论文](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) |
<br /> <br />
...@@ -109,7 +111,7 @@ tuner: ...@@ -109,7 +111,7 @@ tuner:
**建议场景** **建议场景**
此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或者用了 Assessor,就非常适合此算法。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。 此算法对计算资源的需求相对较高。 需要非常大的初始种群,以免落入局部最优中。 如果 Trial 时间很短,或者使用了 Assessor,就非常适合此算法。 如果 Trial 代码支持权重迁移,即每次 Trial 会从上一轮继承已经收敛的权重,建议使用此算法。 这会大大提高训练速度。
**参数** **参数**
...@@ -169,7 +171,7 @@ tuner: ...@@ -169,7 +171,7 @@ tuner:
**建议场景** **建议场景**
如果 Experiment 配置已确定,可通过 Batch Tuner 将它们罗列到搜索空间中运行即可。 如果 Experiment 配置已确定,可通过 `choice` 将它们罗列到搜索空间文件中运行即可。
**使用样例:** **使用样例:**
......
# Batch Tuner
## Batch Tuner(批处理调参器)
Batch Tuner 能让用户简单的提供几组配置(如,超参选项的组合)。 当所有配置都执行完后,Experiment 即结束。 Batch Tuner 仅支持[搜索空间](../../../../../docs/SearchSpaceSpec.md)中的 choice。
建议场景:如果 Experiment 配置已确定,可通过 choice 将它们罗列到搜索空间文件中运行即可。
\ No newline at end of file
# Naive Evolution Tuner
## Naive Evolution(进化算法)
进化算法来自于 [Large-Scale Evolution of Image Classifiers](https://arxiv.org/pdf/1703.01041.pdf)。 它会基于搜索空间随机生成一个种群。 在每一代中,会选择较好的结果,并对其下一代进行一些变异(例如,改动一个超参,增加或减少一层)。 进化算法需要很多次 Trial 才能有效,但它也非常简单,也很容易扩展新功能。
\ No newline at end of file
# Grid Search
## Grid Search(遍历搜索)
Grid Search 会穷举定义在搜索空间文件中的所有超参组合。 注意,搜索空间仅支持 `choice`, `quniform`, `qloguniform``quniform``qloguniform` 中的 **数字 `q` 有不同的含义(与[搜索空间](../../../../../docs/SearchSpaceSpec.md)说明不同)。 这里的意义是在 `low``high` 之间均匀取值的数量。</p>
\ No newline at end of file
# TPE, Random Search, Anneal Tuners
## TPE
Tree-structured Parzen Estimator (TPE) 是一种 sequential model-based optimization(SMBO,即基于序列模型优化)的方法。 SMBO 方法根据历史指标数据来按顺序构造模型,来估算超参的性能,随后基于此模型来选择新的超参。 TPE 方法对 P(x|y) 和 P(y) 建模,其中 x 表示超参,y 表示相关的评估指标。 P(x|y) 通过变换超参的生成过程来建模,用非参数密度(non-parametric densities)代替配置的先验分布。 细节可参考 [Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)。 ​
## Random Search(随机搜索)
[Random Search for Hyper-Parameter Optimization](http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf) 中介绍了随机搜索惊人的简单和效果。 建议当不清楚超参的先验分布时,采用随机搜索作为基准。
## Anneal(退火算法)
这种简单的退火算法从先前的采样开始,会越来越靠近发现的最佳点取样。 此算法是随机搜索的简单变体,利用了响应面的平滑性。 退火率不是自适应的。
\ No newline at end of file
# Medianstop Assessor
## Median Stop
Medianstop 是一种简单的提前终止 Trial 的策略,可参考[论文](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46180.pdf)。 如果 Trial X 的在步骤 S 的最好目标值比所有已完成 Trial 的步骤 S 的中位数值明显要低,这个 Trial 就会被提前停止。
\ No newline at end of file
# Metis Tuner
## Metis Tuner
大多数调参工具仅仅预测最优配置,而 [Metis](https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/) 的优势在于有两个输出:(a) 最优配置的当前预测结果, 以及 (b) 下一次 Trial 的建议。 不再需要随机猜测!
大多数工具假设训练集没有噪声数据,但 Metis 会知道是否需要对某个超参重新采样。
大多数工具都有着重于在已有结果上继续发展的问题,而 Metis 的搜索策略可以在探索,发展和重新采样(可选)中进行平衡。
Metis 属于基于序列的贝叶斯优化 (SMBO) 的类别,它也基于贝叶斯优化框架。 为了对超参-性能空间建模,Metis 同时使用了高斯过程(Gaussian Process)和高斯混合模型(GMM)。 由于每次 Trial 都可能有很高的时间成本,Metis 大量使用了已有模型来进行推理计算。 在每次迭代中,Metis 执行两个任务:
在高斯过程空间中找到全局最优点。 这一点表示了最佳配置。
它会标识出下一个超参的候选项。 这是通过对隐含信息的探索、挖掘和重采样来实现的。
注意,搜索空间仅支持 `choice`, `quniform`, `uniform``randint`
更多详情,参考论文:https://www.microsoft.com/en-us/research/publication/metis-robustly-tuning-tail-latencies-cloud-systems/
\ No newline at end of file
# 集成文档:NNI 上使用 SMAC # SMAC Tuner
\ No newline at end of file
## SMAC
[SMAC](https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf) 基于 Sequential Model-Based Optimization (SMBO). 它会利用使用过的结果好的模型(高斯随机过程模型),并将随机森林引入到 SMBO 中,来处理分类参数。 NNI 的 SMAC 通过包装 [SMAC3](https://github.com/automl/SMAC3) 来支持。
NNI 中的 SMAC 只支持部分类型的[搜索空间](../../../../../docs/SearchSpaceSpec.md),包括`choice`, `randint`, `uniform`, `loguniform`, `quniform(q=1)`
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment