打开优化算法的黑箱(一)
最近这半年,我投入了很多精力在一度AI的线下活动上,自己很少在公众号上写文章了。最近,越来越多的朋友在和我聊天的时候,都和我聊到一年前的时光,那时候,我还喜欢在公众号上“胡扯”,以自以为很诙谐的语言聊一些机器学习的理论和一点统计学习的东西,但是后来我和我的好兄弟佐珠一起决定在公众号上认真写点东西的时候,我们第一件事就是把我之前那些排版地“不堪入目”的“胡言乱语”删的一干二净。
没想到,我竟然在此之后渐渐就淡出了“胡扯圈”,基本没写过什么东西了。最近,我们的线下活动基本上了正轨,也答应了一些小伙伴们要重新杀回“胡扯圈”,所以,又决定开始“键盘侠”的日子。
那,这次回归,我写些什么呢?要怪只能怪我“嘴贱”(没错,我现在正在心里骂自己),我答应了几个小伙伴写点优化算法相关的东西。
这是一个艰难的决定,原因很简单,我之前“胡扯”的都不是我的本行,虽然经常混迹在机器学习这个圈里,是好像懂那么一点点,但毕竟我只是个做优化的,机器学习的东西,我可以随着我的性子说,毕竟不是“专业的”嘛,嘿嘿。决定写点优化的东西就不同了,那是一句也不敢胡扯,毕竟,那么多眼睛盯着呢。
在犹豫不决的这几天,我在想,我这个系列的定位和意义是什么?思前想后,我武断地做了个决定。
1、这个系列不做“数学贵族”系列,更多地,希望能基于我的理解,把想法和直觉上的东西讲清楚,而不是一味地追求数学上的“炫技”,事实上,我觉得自己也没有那个水平去卖弄数学。希望自己能写下一点东西,帮助一些小伙伴们了解一点“优化算法黑箱”背后的东西。
2、平心而论,我觉得我自己的优化算法水平有限,但是,幸运的是,我见过真正厉害的人是怎么个厉害法。所以,我想通过这个系列告诉大家,做优化到底是在做些什么,当然,优化这个学科本身是很大的,很多东西我自己也不懂,我只能聊一聊优化算法中,自己有些了解的内容。我希望自己能用一些大家都能懂的语言,让大家知道,你可能以为不过是“调一行代码”,“试几个参数”的优化学科背后,凝结了多少人的努力。在这个机器学习,特别是深度学习大行其道的时代,不懂点优化,真的是很难理解深度学习这个更大的“黑盒子”了。
3、我尽全力做到不脱离应用空谈,毕竟,空谈……,算了,太敏感了。
当然,大家不要有你们这个公众号不写 AI 了?这种担心,我们之后会有更多和 AI 的内容陆续推出。空谈了这么多,开始说点实在的了。这个系列我会一直坚持写下去,内容会比较多,因为既然决定开始,那就做好。不过,频率可能是个随机变量,但我保证一周至少更新一篇。
另外,开始之前播个号外,这周末,一度AI联手Go-Jek的 Data Scientist 给大家带来了One-Day-Workshop In Data Science,感兴趣的小伙伴可以在文末了解详情!
优化(Optimization)是干什么?
这个定义我是不敢下的,所以,我 Google 了一把,下面是维基百科的定义:
mathematical optimization or mathematical programming, alternatively spelled optimisation, is the selection of a best element (with regard to some criterion) from some set of available alternatives.
Wikipedia
简单来说,优化这个学科,是在给定的约束下,找出满足约束并让给定目标函数达到最优值(最大值或者最小值)的元素。用一个数学公式来翻译一下这句话,其实就是
或者
f(x)
是目标函数(Objective function),
C
是约束集(contraint set)。
看到现在,虽然我们还没说任何具体的内容,我们仍然可以推测,优化这个领域的两个最基本的问题是:
1、最优解
x
∗
是否存在?
2、如果最优解存在,我们怎样才能找到这个最优解?
大家可以想一想 1 和 2 这两个问题到底哪一个更难?(这个问题的答案我也不知道)
我开始的这个系列,更多的会讲第二个问题,第一个问题有十分重要的理论价值,但是,对于大多数关注应用的小伙伴来说,第二个问题直接决定了你的饭碗。
举个小“栗子”
“卖弄”了这么多数学,我们来看个一点都不数学的小故事吧(故事纯属虚构)。
假如现在问一个问题:谁是最漂亮(帅)的人?
这就可以认为是一个无约束的优化问题,因为啊,虽说人的总数有限,但是,毕竟太多了啊!这个问题有最优解吗?我认为是可能是没有的,因为每个人的审美标准都不一样,对吧?
但是,现在问你另一个问题:谁是你觉得最漂亮(帅)的人?
这个就是一个有约束的优化问题了,因为问的是你,你的审美标准还是确定的(我们“严谨地”排除什么“审美可能不固定”这种杠精问题),其次,你多半是会从你知道的人里面挑,这个最优解,从这个意义上说,应该是存在的。
你可以近似地认为这就是理论优化数学家们做的事情之一,每天都在证明存在性(每天都在“审美”)。
好的,现在,假如你知道这个最优解存在了,你怎么“追到“这个”最优解“呢?
这个就是优化算法要解决的问题,你知道她(他)是最漂亮(帅)的,追不追得到看起来好像才是那个更重要的,急需解决的问题,对吧?所以啊,优化算法是核心啊!!!
当然了,此刻读这篇推送的你,如果你转头发现你的最优解就在那,那恭喜你,你已经是优化专家了!如果…… 那就赶紧开始学优化吧!!!哈哈哈!
凸函数
好了,不要沉浸在上面那个故事里了!我们在结束今天的文章前还是讲一个小小的概念吧。这个重要的概念就是凸函数。讲数学前,先看张图吧。
凸函数的几何解释很简单,你把函数图像上面的任意两点连起来(上图中的 PQ),这条连段一定在函数图像的上方。下面,我们用数学公式翻译一下这句话。首先,我们看一下怎么用数学公式来表达线段 PQ:
如果
f(x)
是凸函数,那么,对于任何定义域内的 x1, x2
和
λ∈[,1]
. 下面的条件都一定成立:
那么,我们为什么要考虑凸函数呢?这其实是有很多原因的。我稍微说两个原因。
(1)在深度学习大火之前,大多数我们在现实生活中使用的函数都是凸的。
(2)在考虑最小化优化问题的时候,我们有一个重要的结论:
如果
f(x)
是凸函数,那么任何
f(x)
的局部最小值 (local minimum) 一定是全局最小值 (global minimum).
这在算法上非常重要,之后的文章中,我们会看到,对于优化算法,找到局部最优解几乎是我们能期待的最好结果。凸函数的这个重要的性质保证了我们找到的局部最优解一定是全局最优的。
对应到上面那个栗子,这个意义嘛,你们自己揣摩去吧。
通常来说,无论是教科书还是别的文章,凸函数的优势介绍到这就戛然而止了,然后你就接受了一个根深蒂固的想法——我的眼里只有凸函数!这是危险的,因为,脱离目标函数谈性质基本毫无意义,假设你的目标函数是要求最大值,那么,凸函数对你来说是个灾难!!!这个时候,你需要的是一个凹函数!!!它长这样
三句话总结
(1)我又”杀回来了“!
(2)优化到底是研究啥?你这个系列想说个啥?
(3)凸函数是啥?有啥好处?
下期写什么?
下期写什么,你下期看了就知道了!
THE
END
聚焦人工智能、数据科学前沿知识
专注报道业界个人职业故事
定期在新加坡组织线下交流
领取专属 10元无门槛券
私享最新 技术干货