为什么Optuna甚至建议取参数的日志?



在官方Optuna教程中有一个使用trial.suggest_intlog=True参数的例子:

import torch
import torch.nn as nn

def create_model(trial, in_size):
n_layers = trial.suggest_int("n_layers", 1, 3)
layers = []
for i in range(n_layers):
n_units = trial.suggest_int("n_units_l{}".format(i), 4, 128, log=True)
layers.append(nn.Linear(in_size, n_units))
layers.append(nn.ReLU())
in_size = n_units
layers.append(nn.Linear(in_size, 10))
return nn.Sequential(*layers)

为什么有人要取神经元数量的对数?在教程中还有其他(IMO)多余使用log=True的例子。有人能解释一下他们的动机吗?

在您的示例中,对于[4,128]中的值,设置log=True从[log(4), log(128)]=[2,7]中均匀地选择一个实数,然后对结果取幂,最后四舍五入为整数。这样做的效果是更有可能产生较小的值。例如,范围[4,8]与[64,128]的概率相等。

From the docs:

如果log为真,首先将建议值的范围划分为宽度为1的网格点。然后将建议值的范围转换为一个日志域,从中采样一个值。将均匀采样的值重新转换到原始域,并舍入到我们刚刚分割的最近的网格点,并确定建议值。例如,如果low = 2, high = 8,则建议取值范围为[2,3,4,5,6,7,8],较小的值往往比较大的值更容易被采样。

相关内容

  • 没有找到相关文章

最新更新