机器学习/深度学习中的自动调参数

作者: Rita_曾小辰 | 来源:发表于2019-03-26 22:16 被阅读3次

    目前的机器学习/深度学习框架日渐成熟,工具的发展为模型的自动调参提供了完善的功能,帮助我们可以快速、有效的达成优化模型,确定最有参数的目的。

    在开始讲述这个调参之前,我们先来回顾一个空间概念。

    我们的模型未知参数可以构成一个平面,如果只有 2 个未知参数,那就是一个 2 维平面,如果是多个未知参数,则构成一个多维平面,但在这里我们依然把他理解成一个高维空间里面的曲面(如下图)。

    图1 空间曲面

    我们所要寻找的最优点,则是这个曲面里的极值,因此自动调参就是自动搜索极值的过程。

    1. 机器学习中的自动调参

    机器学习目前最流行的python库,为Scikit-learning。这个库为我们提供了丰富的机器学习工具,当然也少不了自动调参,那我们就从这个库的功能讲起。

    这个库中间,可以通过 estimator 来调用自动调参的函数:

    estimator.get_params()

    上述函数可以获取需要自动搜索最优参数,比如支持向量机里面的 C,kernel 和 gamma,或者 Lasso 中的 alpha 等模型参数。

    1.1 grid search

    由于我们刚刚提到的,调参的目标是为了找寻曲面中的极点。那么其中最简单的方式,就是网格式搜索,在我们输入给定的范围内,对不同的参数组合进行测试,之后找出最优解。

    图2 Grid Search 的形象展示

    代码实现:

    param_grid=[{'C':[1,10,100,1000],'kernel':['linear']},{'C':[1,10,100,1000],'gamma':[0.001,0.0001],'kernel':['rbf']},]

    上述代码就是 support vector machine 的参数组合,根据 任意的组合,找出所有组合中 cross validation值最优的组合,作为自动寻优最佳组合。

    1.2 randomizedsearch

    除了比较均匀的采样以外,grid search 也可以采用随机采样的方式,来替代上述均匀网格的方式。

    图3 随机采样示意图

    代码实现:

    {'C':scipy.stats.expon(scale=100),'gamma':scipy.stats.expon(scale=.1),'kernel':['rbf'],'class_weight':['balanced',None]}

    在上述代码中,通过scipy的stats库进行exponential分布的采样,此外这个函数还支持gamma,uniform 以及 randint 分布的采样。

    1.3 深度学习中的自动调参

    从上面的描述中,我们可以发现其实这个工具就是提供了一个pipeline,通过循环的方式帮你自主找到合适的参数组合。比起我们自己写这个循环,会稍微方便一点,但是并没有真正做到无限环境。

    那么,在深度学习里面也是有这样可以做到 grid search,以及 random search 的工具。

    那就是 Ray Tune,链接放在这里,http://ray.readthedocs.io/en/latest/tune.html

    代码实现:

    希望对大家有帮助~

    相关文章

      网友评论

        本文标题:机器学习/深度学习中的自动调参数

        本文链接:https://www.haomeiwen.com/subject/jvihvqtx.html