之前看过一些关于算法方面的书,提到了一些最优化问题。最优化问题在现实中非常常见,比如工程设计中,怎样选择设计参数,使得设计方案能以尽量低的成本预算满足设计要求。而近来热门的机器学习建模也是一个最优化问题,基于一组已知的数据去构建一个模型,让这个模型适配未来未知的数据达到最优,然后求解关于这个模型的参数。
在求解最优参数的算法中,很多都有一个缺陷,就是容易达到一种局部最优点 —— 即参数的选择尝试收敛到了一小块范围内,无论再怎么尝试变化都没法取得更优的结果。算法此时就进入了一种尝试的徘徊状态,这就是局部最优点,但算法并不知道这到底是不是全局最优的。
而自诩智能的人,在我们成长的路上,其实也经常陷入这样的成长局部最优点。
爬山
关于成长最形象的类比便是爬山,但爬到山顶的路并不总是向上的。
前段时间刚去爬了一回成都附近的青城山,像这种著名景区的山,总有很多路标告诉你,沿着这条路一直走,你就能到达山顶。即使这条路有时会朝下,让你产生下山的感觉,但你也不会动摇,因为你知道山顶就在前方,那里才是你的目的地。
虽然成长这一路就像爬山,成长路上的感觉也和爬山相似。但不同的是,成长的路上并没有清晰的路标告诉你山顶在哪里。有时你很幸运的爬上了一个高点,你并不知道这个高点是否就是山顶了,因为再往前走,无论哪个方向的路都是朝下的,你会心下疑惑:这是要下山了吗?
即便你明确知道了这个高点便是此山的山顶,有时也会遗憾的发现原来这山只有这么高啊。就像青城山名气虽大,但山并不高,海拔只有 1200 多米。你站在山顶,虽然是此山的最高点,但你知道这不过你成长路上的局部最优点,继续前行,则不可避免的先要下山。
爬山的全局最优点,应该是珠峰顶,但不是所有人都能站得上去的。每个人都有自己期望的一个高度,比如我登高爬山是想看看云海,但青城山的高度还不够,也许峨眉山(海拔 3100 米)就够了。
逃离
如何知道你正站在局部最优点上徘徊呢?你知道自己做得很好,但却没有感觉到成长与进步,那么也许你就正在徘徊了。在我的成长路上,也经历过一些徘徊点,分享几个这一路上关于逃离的故事。
工作早期,我做银行业的企业软件开发,被外派到了客户公司的项目组。在那里,不仅仅需要写程序,查 bug,还需要兼顾从售前技术咨询、需求分析谈判到售后技术支持,甚至包括客服咨询解答都要涉及。正常的白天(朝九晚五)是没有一刻安静的时间能写写程序的,都是在客户下班后才能有个安静时段能做开发的事情。
一年后,我有些困惑,我感觉自己做得太杂,没一样东西做精做深的。当时的想法是以技术立身,一年下来却不免惶惑。我感觉自己选错了山,没必要继续爬下去,因为我已经看到了当时大我十岁的项目经理也许就是这座山的一个局部最优点。一年后,我选择了逃离。
之后,该怎么选下一座山?第一考虑自然是想离技术更近,做得更纯粹的一些,另一个无法免俗的考虑自然还是希望收入也能提高一些。如今回想起来,当时为了一千块的差距,纠结了半天也不免哑然失笑。最后的选择,其实也是马马虎虎,运气好的一面是选对了技术,这次不做项目,做产品了,作为程序员在里面做得工作更纯粹了。运气差的一面是,还是没选对行业。
从金融行业软件开发转到了电信行业软件开发,而当时一个新的行业 —— 互联网,正方兴未艾。一转身,便错过了好些年。当时的电信行业应该正在迅速步入成熟期,拥有成熟度最高且用户流量也最大的信息化系统。一入此 “山” 中,便埋头修炼技术,熟悉行业业务,直到数年后,蓦然发现似乎又到了一个局部最优点 —— 技术无法再快速进步了,业务领域也已经熟的不能再熟了。
在原地徘徊了一段时间后,我选择了第二次逃离,但这次困惑更大。我换了一个城市,而这个城市地处平原,在这里找了好几个月工作,见了很多很多的山,却发现居然没有一座山乍一看比之前的更高更大,顶多和之前差不多。
我有些沮丧,我只是不愿又重新立刻爬一次差不多的山。就像那次一早爬青城山,下午回到山脚,有人问谁愿意再爬上去一次?当然没人愿意。如果山顶有一百万呢?再爬上去就能得到。这样也许有人会愿意吧,我想?但现实的生活,有时会让你迫不得已重新爬上刚下来的山,但山顶没有任何额外的奖励。
差不多半年,从年前十一月到次年的四月,我终于选择了一座新的山。这座山那时不算高大,只是它的风景我之前都没见过。如今,还在此山中,而云深不知处。
...
有时,有人会同时面对好几座山都想爬,但因为种种原因(主要还是生活所迫)只能爬其中一座。当你站在你选择的这座山的一个高点,远远看到曾经放弃的山峰,会在徘徊遗憾么?
站在局部的最优点,走出徘徊的第一步,总是从下山开始。
此刻瞬间
人的心理偏误之一,得到敌不过失去,而长远的得到更难敌短暂的失去,也许这就是我们经常徘徊良久的原因。就像股价上涨的时候我们没觉得赚到了,因为还没卖;而股价下跌时,却感觉真得损失了。
写点文字,画点画儿。瞬息之间,一切都变了。
137 · 坚强的不是我们有一些幻想