周一早晨(6:30)打开微信小游戏“跳一跳”,本以为自己已经是闲散勤奋党了,突然发现几个高分玩家已经在榜上了。这个小游戏是周一凌晨更新排名,也就是说这几个玩家在第一时间玩了跳一跳。不难理解,因为分数高所以迫不及待去更新排名榜,作为他们炫耀的资本。
有研究表明:虽然孩子智商差距并不大,但是随着时间推移,有微弱智商优势的孩子会越来越强。因为每次学习东西都比其他人好一点,增加了他的自信和兴趣,让他更愿意花时间去学。而平庸的孩子可能因为受挫,更不愿意花时间了。长期在“放弃治疗”的状态下,和学习好的孩子的差距就越来越大了。
其实玩游戏也是适用于这个理论,没有谁上来就能玩跳一跳分数突破300分的。经过数据显示,跳一跳的分数大致分为如下三个档次。
这张图可以把我的好友分成三类
用代码外挂达成几千分的程序员
天道酬勤持之以恒刷到几百分的闲人
只能打到几十分在朋友面前抬不起头的手残党
事实上:游戏要比学习上瘾多了。其中一个原因是玩家可以在游戏中不断得到回报(升级,经验值,金钱,道具等),更有华丽的画面感。
而学习呢,你要坚持十年无人问津,没有明显的报酬和奖励的寒窗苦读。正所谓“十年寒窗无人问 一举成名天下知”。学习的报酬最后在找工作时从体现出来。放短一点,刻苦学习得到的回报最起码要在学期结束后的考试排名才能体现出来。
其实,要玩好跳一跳还是需要一定的知识储备,例如跳一跳的就是一个很完美的抛物线模型,然后*******
不好意思,跑题了,今天我们主要讲的应该是梯度与优化。上面的例子本质都讲了一件事:报酬/代价(payoff/cost)驱动行为。跳一跳玩得好的更愿意去玩,学习好的更想去努力学,游戏通过不断给玩家奖励来促使其玩下去。
很多问题本质上是一个优化问题,即求最优解。比如对一个机器学习问题进行建模后,需要求一组参数使得代价函数最小。一个模型能有效解决问题,最起码要满足:
1)最优解可达(feasible),即此模型下存在一组参数,代价函数取最小值/极小值;
2)收敛,即有算法能够找到最优解。
通常代价函数比较复杂,很难得到闭式解,只能靠迭代算法来求。由于“维度灾难”,穷举是不能接受的。通常的做法是随机取一个起始点,然后沿着梯度方向更新----直到收敛到某一点,此时沿任何方向移动都不会再减少代价函数。
合理的步长下沿着梯度方向更新,每一次更新后得到的目标函数都比上一次的小。就好像玩游戏越玩你的等级越高,经验值越多一样。在极值点沿任何方向移动(包括梯度方向)都不会再减少目标函数,收敛。这个状态可以用数学表达式写出来:
x*是极小值点。直观的含义是从x*出发到定义域内任意一点z的向量和梯度的内积大于等于0。表明从x*出发到定义域内任意一点z(步长z-x*),沿梯度方向都使得函数值增大或不变。WHY?上面内积可以看作向量z-x*在梯度向量支撑起的超平面的投影。梯度的特性告诉我们,函数f(x)沿着负梯度下降最快,沿着正梯度则是上升的。所以向量z-x*在梯度上的投影会增加函数值,而z是任意取的,就表明x*是一个极小值。如果f(x)是一个凸函数,则x*不但是极小值(局部),还是最小值(全局)。
如上,梯度给了我们方向,一个能够不断降低代价值的方向,我们期望最终能够沿着这个方向找到极值。如果目标函数是凸函数,则一定能找到。如果是非凸函数就难以保证了。
我们希望目标是凸函数。如果是非凸函数,可能收敛到一个局部最优解,离全局最优差很多。就好像你按部就班打怪升级,慢慢积累经验值,结果还不如偶尔捡到了一个牛x武器的隔壁小子。这样谁还老老实实干活?都想着投机取巧了。
一个优化问题,目标函数是客观的,给定的,没法改变它。但有一些场景下,我们可以通过设计一些机制来引导大家找到最优值。正如游戏的设计者,通过层层关卡引导玩家升级战败大boss。老板也不断地给你加工资鼓励你经验积累和技能提高。
博弈论中有个课题叫“mechanism design”,通过对游戏规则,payoff函数的设计来引导大家达到的均衡是一个所有人都获利的情形(better off),而不是囚徒困境。
博弈论中求均衡状态,很多情况下就是对payoff函数求极值,可以归结为优化问题。回顾一下均衡:就是在其他玩家都选择均衡状态的情况下,某个玩家没有动机去选择非均衡状态来获取更多的payoff。再回头看看前面求极值时:在极值点沿任何方向移动(包括梯度方向)都不会再减少目标函数。完全是一码事!
往期回顾: