前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始深度学习(十三):超参数

从零开始深度学习(十三):超参数

作者头像
我是管小亮
发布2020-04-20 16:14:02
9020
发布2020-04-20 16:14:02
举报
文章被收录于专栏:程序员管小亮的成长之路

1、参数VS超参数

想要你的深度神经网络起很好的效果,维度的准确性是最基本的东西,代码不出错也是必须的一步,除了这些以外,还需要规划好参数以及超参数。

  • 什么是超参数?

定义:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

  • 超参数和参数的区别是什么?

参数是从数据中自动估计的,而超参数是手动设置的。

  • 超参数是如何影响神经网络的?

超参数,实际上控制了最后的参数 和 的值,影响了模型。

  • 超参数有哪些呢?

比如算法中的 learning rate(学习率)、iterations(梯度下降法循环的数量)、(隐藏层数目)、(隐藏层单元数目)、choice of activation function(激活函数的选择)等等,这些都需要你来设置。

输了一些比较熟悉的超参数,你可能有点感觉了,但是实际上深度学习有很多不同的超参数,之后也会介绍一些其他的超参数,如 momentum(动量)、mini batch size(批大小)、regularization parameters(正则化参数)等等。

  • 如何寻找超参数的最优值?

其实这个过程和人类的思维过程类似,为什么这么说呢?人类在大脑风暴的过程中,是先有 Idea,然后 Realize,最后 Experiment。不过深度学习中,是 Idea—Code—Experiment—Idea 这个大循环,Realize 是用 Code 替换的,再尝试各种不同的参数,实现模型并观察是否成功,然后再迭代。

深度学习的应用领域,是个很经验性的过程:通常有个想法(Idea),比如你可能大致知道一个别人用的最好的学习率值,可能说 () 效果最好,我在做图像处理实验的时候,真的发现这个学习率很不错,建议你也可以尝试一下。

那么我会想说,先试试看,然后可以实际更改一下,再训练一下,最后看看效果如何。

基于这个尝试的结果,你会发现,学习率设定再提高到 () 可能会比较好。

但是你又不确定什么值是最好的,这个时候大可以先试试你猜想的新学习率 到底怎么样,更改参数重新实验,再看看损失函数 的值有没有下降?

如果没有的话,你可以试一试再大一些的值,如果这个时候,你发现损失函数的值不但没减少,反而增加并且发散了。恭喜你,你失败了2333。

然后可能需要试试其他的一些数,再改再看实验结果,看损失函数是否下降的很快或者收敛到在更高的位置?

你可能尝试不同的 并观察损失函数 这么变了,试试一组值,然后可能损失函数变成这样,这个 值会加快学习过程,并且收敛在更低的损失函数值上,然后敲定,我就用这个 值了。

再或者还可能你发现,固定学习率并不能满足你的要求,这个时候你需要学习率是变化的,比如学习率衰减。

可能有的小伙伴就会说了,这也太麻烦了吧,这不是一直试试试的???这也是工作量的一部分,所以深度学习也被人吐槽说是一个经验主义学科。。。应用深度学习领域,一个很大程度基于经验的过程,凭经验的过程通俗来说,就是试直到你找到合适的数值。

只能说调参是门玄学,好与坏不是你我说了算的。

之前在知乎上看到过一个文章说可以使用算法调参,但是我还没接触过。。。论文:Hyperparameter Optimization: A Spectral Approach,有兴趣的小伙伴可以看一看,这可是顶端科学技术了。

2、调参

一个近来深度学习的影响是,它可以用于解决很多问题,从 计算机视觉语音识别,到 自然语言处理,到很多 结构化的数据应用,比如 网络广告 或是 网页搜索产品推荐 等等。

很多领域的研究人员,对这些领域中的一个问题进行研究,尝试了不同的参数设置,有时候这种设置超参数的直觉是可以推广的,但有时又不会。所以刚开始应用新问题的人们,去试一定范围的值看看结果如何(比如我们实验室的方向,就是近两年才开始结合深度学习作为方法论,进行问题的研究与解决)。

然后是其他情况,比如你已经用了很久的模型进行问题的解决,可能你在做网络广告应用,也可能是其他的,在开发的过程中,很有可能学习率的最优数值或是其他超参数的最优值是会变的!!!所以即使每天都在用当前最优的参数调试系统,你还是会发现,最优值过一年就会变化,这可能是很多原因导致的,其中一种可能就是因为电脑的基础设施,CPU 或是 GPU 可能会变化很大,比如你是一个 GPU,那么 GPU 的型号?(以N卡的天梯为例)

(图源:http://www.mydrivers.com/zhuanti/tianti/gpu/)

所以之前的经验规律可能每几个月就会变,如果你的工作台一直不变,那么数据也可能会有变化,再或者你的网络结构也会有微调,等等。所以要经常试试不同的超参数,勤于检验结果,看看有没有更好的超参数数值,相信慢慢的,你会得到设定超参数的直觉,知道你的问题最好用什么数值。:)

这可能的确是深度学习比较让人不满的一部分,也就是你必须尝试很多次不同可能性。但参数设定这个领域,深度学习研究还在进步中,所以可能过段时间就会有更好的方法决定超参数的值,也很有可能由于 CPUGPU、网络和数据都在变化,这样的指南可能只会在一段时间内起作用,只有不断尝试,并且尝试保留交叉检验或类似的检验方法,然后挑一个对你的问题效果比较好的数值,这种方法才是现在最好的解决办法。

近年来,受深度学习影响或者可以称之为 冲击,很多领域发生了变化,从计算机视觉到语音识别到自然语言处理到很多结构化的数据应用,比如网络广告、网页搜索、产品推荐等等;有些同一领域设置超参数的直觉可以推广,但有时又不可以,特别是那些刚开始研究新问题的人们应该去尝试一定范围内的结果如何,甚至那些用了很久的模型得学习率或是其他超参数的最优值也有可能会改变。我们能做的只有以不变应万变!!!这也是这个领域的项目经验或者经历更为重要的原因之一。

最后,记住一条经验规律:经常试试不同的超参数,勤于检查结果,看看有没有更好的超参数取值,你将会得到设定超参数的直觉。

未完待续。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员管小亮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档