我們在前一篇提到了在線貝葉斯估計劝贸,在這一章中姨谷,我們講述在線貝葉斯估計體現(xiàn)出來的重要思想:要精益求精,不要步步為營映九。
在線貝葉斯估計與在線算法
我們在前一章中第一次提到了 在線貝葉斯估計 的概念:當(dāng)證據(jù)源源不斷到來時梦湘,貝葉斯估計并不是等著所有的所有的證據(jù)來了以后才開始計算基于所有收集到的觀測的后驗概率。而是開始根據(jù)少量的證據(jù)計算一個概率件甥,然后每次拿到每一個新觀測的時候捌议,都用該觀測來調(diào)整之前的估計。
以開水房打水的例子而言引有,你進(jìn)入開水房準(zhǔn)備打開水瓣颅,你想知道這個水是否開了,在這個過程中譬正,你實際上是一步一步拿到證據(jù)宫补,并且用這些證據(jù)不斷更新你上一步的猜測的:
- 在你還未看到燒開水的機(jī)器之前,根據(jù)你過去的經(jīng)驗曾我,你得到一個水開的先驗概率: P0=P(水開)粉怕。
- 然后,你會先觀察一下開水器的電源燈是否亮起抒巢,根據(jù)這個觀測在 P0 的基礎(chǔ)上提高或者調(diào)低水開的概率贫贝,得到 P1= P(水開|電源燈狀態(tài))。
- 其次蛉谜,你在灌水的初始稚晚,會觀察水是否冒熱氣凤优,并根據(jù)這個觀測在 P1 的基礎(chǔ)上來調(diào)整水開的概率:得到 P2= P(水開}|電源燈狀態(tài),熱氣)。
- 最后灌水之后蜈彼,你會隔著杯子感受這個溫度筑辨,并將這個觀測加入到之前的證據(jù)中對P2 做更新,得到 P3= P(水開|電源燈狀態(tài),熱氣,溫度)幸逆。
這個例子中棍辕,觀測是源源不斷來的。在線貝葉斯估計使得我們不用等拿到所有可能的觀測之后再估計一個最終的后驗概率还绘,而是可以
- 每次來一個觀測楚昭,我們都用該觀測,對前一次計算的后驗概率進(jìn)行更新拍顷,得到一個新的后驗概率抚太。
- 并且,在上一步的基礎(chǔ)上更新的后驗概率昔案,和用所有觀測重新計算得到的后驗概率完全一樣尿贫。
貝葉斯的在線估計算法的核心,和很多在線算法(on-line algorithms) 相同踏揣。在線算法的核心步驟包括以下幾點:
- 在最初時刻庆亡,根據(jù)最初的一個或者幾個數(shù)據(jù)得到一個初步結(jié)果。
- 每次來一個數(shù)據(jù)捞稿,用這個數(shù)據(jù)更新上一次的結(jié)果又谋。
- 這個更新的結(jié)果,和用此時之前的所有數(shù)據(jù)得到的結(jié)果一致娱局。
和在線算法相對的叫做離線算法(off-line algorithm)彰亥。離線算法又被稱為batch algorithm。離線算法對于新來的數(shù)據(jù)衰齐,總是把它加到前面的數(shù)據(jù)重新計算得到結(jié)果任斋。比如說一開始你有100個數(shù)據(jù),你用這一批數(shù)據(jù)得到了一個結(jié)果娇斩,當(dāng)你又有了100個新的數(shù)據(jù)后仁卷,你需要把這100個和原來的100數(shù)據(jù)合并起來穴翩,用200個數(shù)據(jù)重新計算一下結(jié)果犬第。這就是離線算法。
在線算法和離線算法的最大的不同是不需要重新計算芒帕,而是在前一次的計算的結(jié)果上進(jìn)行調(diào)整:拿到新的100個數(shù)據(jù)之前歉嗓,用著100個數(shù)據(jù)來更新之前計算的結(jié)果,更新的結(jié)果和用200個數(shù)據(jù)重新計算的結(jié)果一樣背蟆。因此在線算法和離線算法最大的差別不在于數(shù)據(jù)是否一個一個來鉴分,而在于是需要重新算哮幢,還是在原來的基礎(chǔ)上進(jìn)行更新。
在線算法的例子:求均值
我們用求均值的例子來說明在線算法和離線算法的區(qū)別志珍。假若給你100個數(shù)橙垢,從x1,x2,...,x100,要求它們的均值很容易:
這種方法是拿到所有的100個x后一起計算的伦糯。這就是離線算法柜某。
而在線算法是如何計算的呢?
- 在k=1時刻敛纲,我們拿到 x1喂击,此時我們計算一個均值
這個均值,是基于當(dāng)前的所有數(shù)據(jù)(只有一個x1)計算得到的淤翔。
- 在k=2時刻翰绊,我們拿到 x2,我們需要在上一時刻的均值的基礎(chǔ)之上旁壮,用新的數(shù)據(jù)x2進(jìn)行調(diào)整监嗜,并且使得調(diào)整的結(jié)果和 x_1、x_2這兩個的均值相等抡谐。我們很容易找到如下形式:
- 在k=3時刻秤茅,我們拿到 x3,此時的均值也可寫成用 x3 來更新上一時刻的均值的形式:
- 以此類推童叠,可以看出在任意k時刻框喳,當(dāng)我們拿到 xk 時,此時的均值寫成在用 xk 來更新前一時刻(k-1時刻) 的均值的形式:
也就是說厦坛,從初始估計
出發(fā)五垮,
這個就是求均值的在線算法。
相比離線算法杜秸,在線算法有三個巨大的優(yōu)勢:
- 即時反饋:不需要等到所有數(shù)據(jù)來了之后才能知道結(jié)果放仗,任何時刻都會存在一個結(jié)果。并且這個結(jié)果撬碟,是基于迄今為止拿到的所有數(shù)據(jù)基礎(chǔ)之上的最優(yōu)結(jié)果诞挨。
- 計算量小:來了新的數(shù)據(jù)后呢蛤,不需要重新計算惶傻,而只需要在上一步計算的結(jié)果上進(jìn)行更新即可,大大的節(jié)省了計算量其障。
- 存儲量幸摇:不需要存儲原始數(shù)據(jù),每次只需要存儲上一次的結(jié)果即可,大大節(jié)省了存儲空間蜈敢。
不僅如此辜荠,在線貝葉斯,乃至所有的在線算法體現(xiàn)出來的一種思想抓狭,就是精益求精:在最開始伯病,我們并不求完美,而是先得到一個結(jié)果否过;我們在該結(jié)果的基礎(chǔ)之上狱从,不斷的接收新的信息對原來的結(jié)果進(jìn)行改進(jìn),以達(dá)到我們所追求的最優(yōu)的目標(biāo)叠纹。
精益求精的例子
精益求精的這種思想季研,在很多領(lǐng)域都有非常多的體現(xiàn)。舉幾個例子誉察。
例子1: 函數(shù)極值的數(shù)值解法
在我們高中的時候与涡,我們就學(xué)會求一個函數(shù)的最大值或者最小值。我記得最常用的方法就是求導(dǎo)法持偏。我們將函數(shù)的表達(dá)式求導(dǎo)數(shù)驼卖,令其為0,建立一個方程鸿秆。方程的解就是這個函數(shù)的極值酌畜。
例如對于函數(shù)
而言,該函數(shù)的導(dǎo)數(shù)為
令導(dǎo)數(shù)為0卿叽,即
因此 x=1 就是使得該函數(shù)有極值的自變量的值桥胞。這種方法得到的自變量的值,叫做該問題的解析解(analytical solution)考婴。本質(zhì)就是根據(jù)公式嚴(yán)格進(jìn)行一步一步地推導(dǎo)贩虾,最后得出最優(yōu)解的表達(dá)式。 解析解的一個問題是沥阱,很多函數(shù)的導(dǎo)數(shù)形式十分復(fù)雜缎罢,甚至在很多位置上不存在。因此函數(shù)極值的數(shù)值解法應(yīng)運(yùn)而生考杉。
與解析解相對的策精,就是數(shù)值解(numerical solution)。數(shù)值解的核心思想就是精益求精崇棠。我們用下圖來解釋咽袜。圖中的藍(lán)色曲線,就是這個函數(shù)y的表達(dá)式易茬。我們想找到這個函數(shù)最大值對應(yīng)的x的位置(紅點處)酬蹋。
找到數(shù)值解具體有以下幾步:
- 第一步(k=1):隨便猜一個x值及老。你沒看錯抽莱,就是隨便猜范抓。假設(shè)我猜的位置為 x1,顯示在圖中食铐。顯然這么隨便猜一個值匕垫,幾乎不可能是最優(yōu)解。不是最優(yōu)解沒關(guān)系虐呻,當(dāng)我們猜到
x1 這個位置以后象泵,我們計算一下在 x1 這個位置附近,該函數(shù)是上升的還是下降的斟叼。這個可以用函數(shù)的梯度來得到偶惠。本例子中 x1 的附近該函數(shù)是上升的。這個意味著朗涩,我們?nèi)绻龃?br> x1忽孽,我們就可以得到一個更大的y。 - 第二步(k=2): 于是谢床,我們在 x1 的基礎(chǔ)上增加一點兄一,假設(shè)達(dá)到 x2 的位置。同樣识腿,我們看一下該函數(shù)在 x2 的附近是上升還是下降出革。這個例子中仍然是上升。我們還應(yīng)該繼續(xù)增加 x渡讼。
- 第三步(k=3):骂束,因此我們在 x2 的基礎(chǔ)上,再次增加一點成箫,達(dá)到 x3栖雾。按照上述的方法判斷依然應(yīng)該增加。
- 第四步(k=4):伟众,我們在 x3的基礎(chǔ)上析藕,再次增加一點,達(dá)到 x4凳厢,則這時候账胧,我們發(fā)現(xiàn)函數(shù)在 x4 的周圍是下降的,這意味著我們應(yīng)該往回退一點先紫。
- 不斷重復(fù)上面的步驟治泥,經(jīng)過多次,可能逼近最優(yōu)的紅點位置遮精。
我們可以發(fā)現(xiàn)居夹,找到數(shù)值解的思路是并不試圖一次就找到函數(shù)最優(yōu)值的位置败潦,而是用逐步迭代的方法不斷逼近最優(yōu)值。這就是精益求精的思想准脂。
而我們剛才的解析解的方法劫扒,是根據(jù)公式嚴(yán)格推導(dǎo)。這種方法用成語步步為營來描述最為貼切狸膏。相比較于精益求精沟饥,步步為營有兩個缺點:(1)知道最后一步之前,你永遠(yuǎn)不知道答案湾戳,哪怕是一個粗略的答案(2)一旦任何一步出了錯誤贤旷,最后的結(jié)果都是錯的。
從這一點來說砾脑,我們在初高中的最后幾道大題都是步步為營:在你推出最后結(jié)果之前幼驶,你不知道你證明對了還是錯了,并且一旦中間任何一步錯了韧衣,你都無法得到正確的結(jié)果盅藻。
例子2: 項目管理中的敏捷模型
熟悉項目管理的人,都知道項目管理有兩種不同的模型汹族。第一個模型是瀑布模型(Waterfall model)萧求。瀑布模型將一個系統(tǒng)的開發(fā)分成包括需求分析、設(shè)計顶瞒、實現(xiàn)夸政、發(fā)布等多個階段。每個階段都有相應(yīng)的管理與控制榴徐,因此能夠比較有效的確保系統(tǒng)品質(zhì)守问。瀑布模型顯示在下圖中的上半部分。我們可以看出坑资,瀑布模型中各個階段有相互銜接的固定次序耗帕,如同瀑布流水,逐級下落袱贮。
然而仿便,用瀑布模型來進(jìn)行項目的管理有2個重要的缺點:
- 不適應(yīng)用戶需求的變化。因為用戶需求在最前端攒巍,一旦用戶需求發(fā)生變化嗽仪,則整個開發(fā)過程全部需要從頭再來。
- 只有在項目生命周期的后期才能看到結(jié)果柒莉。
與瀑布模型相對的是敏捷模型(Agile Model)闻坚。敏捷模型顯示在上圖的下半部分。我們可以看出兢孝,在用敏捷模型來開發(fā)項目中窿凤,整個開發(fā)工作被組織為一系列短周期的快速迭代仅偎。每一次迭代都包括了需求分析、設(shè)計雳殊、實現(xiàn)與測試工作橘沥,并通過客戶的反饋來進(jìn)行不斷改進(jìn),直到達(dá)到最后的要求相种。
和瀑布模型相比威恼,用敏捷模型來進(jìn)行開發(fā)的突出優(yōu)勢在于
- 敏捷模型的短周期迭代的思想品姓,可以很好的適應(yīng)用戶需求的變化寝并。
- 能夠最快的得到早期用戶反饋,進(jìn)而可以在沒有考慮到的情況下進(jìn)行快速改進(jìn)
這里說的瀑布模型和敏捷模型腹备,同我們剛才的函數(shù)極值的解析解和數(shù)值解何其相似衬潦!瀑布模型和解析解這兩種方法,都是采用了'步步為營'的思路植酥,而敏捷模型和數(shù)值解镀岛,就對應(yīng)著`精益求精'的思路。
例子3:最簡可行產(chǎn)品
很多年前友驮,我和同事一起去和一家私營公司的CEO談項目合作漂羊。這個公司是做國內(nèi)做高壓電線自動檢測最好的一個公司。簡單的來說卸留,他們做了一個設(shè)備走越,可以用一根長的桿子捅到高壓電線上掛住,然后實時檢測輸電線路是否正常工作耻瑟。一天晚飯的時候旨指,這個CEO在和我談到他們開發(fā)的思路的時候,說了這么一段話:
像我們這樣的小公司開發(fā)產(chǎn)品喳整,尤其是科技含量較高的產(chǎn)品谆构,不能想著一步到位。最開始框都,一定要把一個不完美搬素,但可用的產(chǎn)品搞出來。這樣我們心里就有底了魏保。然后拿到現(xiàn)場去用熬尺,工程師在部署后會告訴我們很多設(shè)計之初沒想到的問題,用戶會給我們提供更多的要求囱淋,我們就在這些基礎(chǔ)上一步一步改進(jìn)猪杭。別看我們現(xiàn)在這個產(chǎn)品功能看著這么漂亮,但是第一代產(chǎn)品剛出來的時候問題非常多妥衣。
這么多年皂吮,我仍然記得清清楚楚他說的這個就是不完美戒傻,但可用的產(chǎn)品的這個概念。后來我才知道蜂筹,這就是大家所說的`最簡可行產(chǎn)品'(minimum viable product需纳,簡稱 MVP)。MVP的嚴(yán)格說法艺挪,是指的有部分機(jī)能恰好可以讓設(shè)計者表達(dá)其核心設(shè)計概念的產(chǎn)品不翩。設(shè)計者可以進(jìn)行驗證式學(xué)習(xí),根據(jù)使用者的回饋麻裳,進(jìn)一步了解使用情形口蝠,并且繼續(xù)開發(fā)此產(chǎn)品。
我在香港的胡子科技學(xué)院(http://mtache.com/mvp/)的網(wǎng)頁上看到下面一個例子津坑。
一個人想去創(chuàng)業(yè)妙蔗,做一個關(guān)于足球的社交平臺,可以讓人在該平臺上組隊 訂場去踢球疆瑰。
他很快找到了另一個IT拍擋眉反, 一起進(jìn)行這個項目。他們非常認(rèn)真穆役,并放棄了一些其他的
工作機(jī)會寸五,全心全意投入這項目。
他們這個團(tuán)隊對該平臺要求非常高耿币。他和開發(fā)團(tuán)隊慢慢地打磨該產(chǎn)品梳杏,開發(fā)一些特別的功
能,例如要在平臺上drag & drop人到球場上組隊掰读。這些功能開發(fā)起來都非常費時秘狞,開
發(fā)進(jìn)度比預(yù)期慢。但他們認(rèn)為這是必須的蹈集,因為要確保能夠推出一個`完美'的產(chǎn)品到市
場烁试。
一年后,這個`完美'的產(chǎn)品終于完成拢肆,準(zhǔn)備要推出市場减响。然而,當(dāng)他們把產(chǎn)品推出到市場
后郭怪,卻發(fā)現(xiàn):沒有人用支示!
沒有人用的原因,可能是推廣不足鄙才,也可能是市場并沒有這個需求颂鸿!最后,整個項目不了
了之攒庵。
市場的反應(yīng)往往是難以預(yù)料的嘴纺。尤其是初創(chuàng)企業(yè)败晴。試想想當(dāng)你投放了大量資源、金錢栽渴、時間尖坤,請了一隊團(tuán)隊去開發(fā)一個 APP/平臺,推出到市場后卻發(fā)現(xiàn)沒啥人用闲擦,感覺是絕對不好受的慢味。
解決這個'推出市場后沒有人用的問題'最好方法,就是MVP墅冷。創(chuàng)業(yè)者與其花大量資源去開發(fā)一個自以為會成功的完美產(chǎn)品纯路,倒不如用最快的方法,建立一個只有最少俺榆、最基本功能的'半成品'感昼。先把這個'半成品'推到市場装哆,看看市場的反應(yīng)罐脊。
有很多非常成功的初創(chuàng)企業(yè),也是遵循MVP的精神蜕琴。Groupon這家市值上億美元的公司萍桌,便是MVP的一個很好例子。
創(chuàng)辦人Andrew Mason 在成立Groupon初期凌简,與其花資源去建立一個`完美的團(tuán)購系統(tǒng)'上炎,他只建立了一個簡單的WordPress博客。這個博客定時會放上一些商店優(yōu)惠的文章雏搂,而其優(yōu)惠也只是透過人手藕施,一封一封的去電郵給參加者!后來凸郑,他發(fā)現(xiàn)這個發(fā)布商店優(yōu)惠文章的博客非常受歡迎裳食,Andrew 因此確定這個主意有市場后,才開始組織團(tuán)隊去開發(fā)這個團(tuán)購系統(tǒng)芙沥。
上一個例子中的敏捷模型诲祸,其實就是先力爭推出一個MVP。推出MVP之后而昨,開發(fā)者可以根據(jù)用戶或者使用者的回饋救氯,進(jìn)一步了解使用情形,并且持續(xù)不斷的在上一個版本的基礎(chǔ)上歌憨,根據(jù)實際情況進(jìn)行改進(jìn)着憨。
MVP和剛才說的敏捷模型,實際上還和最近互聯(lián)網(wǎng)行業(yè)推出產(chǎn)品基本的做法小步快跑务嫡,快速迭代的思路完全一致甲抖。
小步快跑底桂,快速迭代,就是不要想著一次性發(fā)出好的產(chǎn)品惧眠,而要通過快速迭代的方式進(jìn)行更新籽懦,保證每一小步都跑得很快。在快速迭代理念支持下的產(chǎn)品研發(fā)是'上線-反饋-修改-上線' 這樣反復(fù)更新內(nèi)容的過程氛魁。再開始時暮顺,要允許不完美,但要通過快速迭代逐漸向完美逼近秀存。每天都能發(fā)現(xiàn)修正一兩個小問題捶码,不到一年產(chǎn)品就打磨出來了。
與之相對的或链,如果開始總是面面俱到的謀布局惫恼,并且在每一步盡善盡美求完美否則不肯往下走,這樣的問題就在于澳盐,你開始一旦某一個點沒考慮到或者考慮不周全祈纯,那么你只能到最后一步才會發(fā)現(xiàn)問題所在,此時重頭再來的代價和時間成本會過于昂貴叼耙。
凱文?凱利在他的暢銷書《失控》里腕窥,有過這么一段話:
由此說到機(jī)器,有一個違反直覺但卻很明確的規(guī)則:復(fù)雜的機(jī)器必定是逐步地筛婉、而且往往
是間接地完善的簇爆。別指望通過一次華麗的組裝就能完成整個功能系統(tǒng)。你必須首先制作一
個可運(yùn)行的系統(tǒng)爽撒,作為你真正想完成的系統(tǒng)的工作平臺入蛆。...在組裝復(fù)雜機(jī)械過程中,收益
遞增是通過多次不斷的嘗試才獲得的-也即人們常說的'成長'過程硕勿。
例子4: 用精益求精的方法來寫論文
我在香港理工大學(xué)期間哨毁,聽到過一位我非常敬佩的老師來組里給學(xué)生分享過應(yīng)該如何寫學(xué)術(shù)論文。
他告訴我們首尼,寫一篇論文有兩種方案挑庶。第一種方案,是遲遲不下筆软能,要等著把idea想好迎捺,仿真做好,實驗完成之后查排,拿到了所有的素材之后才開始寫凳枝。在寫的過程中,按照自然順序一章一章的打磨,寫完一章岖瑰,再寫下一章叛买。
第二種方案,就是稍微有了一個idea就開始寫蹋订,甚至這個idea都不需要很好率挣。寫的過程中,不打磨語法露戒,用最快的時間寫出一個初稿椒功。初稿寫完以后,給周圍的人看智什,讓他們提意見动漾,這時我們就會知道這個文章的idea有哪些漏洞,如何改進(jìn)等等荠锭。然后不斷的進(jìn)行多次`快速迭代'式的修改文章旱眯。每次修改,都完善idea证九,仿真删豺、實驗,修改語法甫贯,這樣最終把文章打磨完成吼鳞。
這位老師說,我們一定要用第二種方法來寫文章叫搁。
現(xiàn)在看起來,確實應(yīng)該如此供炎。如果按照第一種方案來寫文章渴逻,你可能永遠(yuǎn)都寫不出一篇論文。原因在于音诫,(1) 只有當(dāng)你寫完以后惨奕,別人才可能給你意見,一旦你發(fā)現(xiàn)某一個意見可以采納竭钝,你可能需要重新做實驗梨撞,做仿真,又重頭來過香罐,導(dǎo)致時間耗費的過長卧波。(2) 寫文章的過程中,如果按照一章一章的仔細(xì)打磨庇茫,你可能發(fā)現(xiàn)你寫到后面的時候港粱,因為需要修改idea或者仿真等,前面的部分很多需要重新寫,這些仔細(xì)打磨的部分就全部浪費掉了查坪。
其實寸宏,不僅僅是寫科學(xué)論文,我覺得這種方式可以用到寫任何文章的方法偿曙。Facebook人工智能研究院智能圍棋項目的負(fù)責(zé)人氮凝,也是網(wǎng)上的著名科學(xué)段子手田淵棟,在他的知乎專欄中發(fā)表的一篇文章《碎片化時代如何讀寫》中望忆,寫到下面的一段話:
我的經(jīng)驗是先把自己想說的零碎思路寫下來覆醇,然后反復(fù)看反復(fù)組織,才能寫出長文來炭臭。在
第一階段寫零碎思路時永脓,往往先有個模糊的提綱(這也是寫作的第一推動力),然后無拘
無束地寫鞋仍,這樣九成會離題萬里常摧,說些自己潛意識里想說,但卻和初衷完全違背的話來威创。
但這完全沒有關(guān)系落午,只要咬住一個字“快”,十幾分鐘就有大段稿子肚豺。我有時候程序?qū)懙揭?半溃斋,突然有個想法想寫下來,那就切到另一個窗口開始打字吸申,等榨干了自己的想法梗劫,再回
去寫程序,這樣至少可以保存思考的火種截碴,之后可以繼續(xù)梳侨。
這樣寫出來的文章,大多是不忍卒讀兼無人可懂的日丹。這樣就跳到第二階段走哺。視情況一般有
兩種選擇,可以根據(jù)內(nèi)容修改主題,或者受已經(jīng)寫下的片斷啟發(fā),重新寫些與主題相關(guān)的
句子眉抬。這時候選擇切題的段落竞膳,打通全文脈絡(luò)是最重要的,能否成文取決于此,如果看到
一個有開頭結(jié)尾的完整故事,那就算局部不通順或者詳略失當(dāng),這一篇文章也是板上釘釘
有了敢朱。
這種方式,實際上就是先盡可能寫出一個MVP出來,然后再不斷迭代去改進(jìn)拴签。從這個意義上來講孝常,最初迅速的完成一個MVP,比花很長時間完美的完成一個產(chǎn)品要重要的多蚓哩,這也是印證了這句格言:
完成比完美更重要 (Done is better than perfect)构灸。
用精益求精的方法的好處
我們在前面幾個例子中,說到了用精益求精的思想來開發(fā)產(chǎn)品岸梨、寫文章等的好處喜颁。你應(yīng)該可以理解,用精益求精的思想的好處在于曹阔,可以快速后端的用戶(或者開發(fā)者本身)得到反饋半开,迅速完成迭代升級。
其實赃份,從開發(fā)者是否能完成這個項目而言寂拆,用精益求精的思想來做項目,有兩個好處抓韩。
第一個好處纠永,是安心! 在前面的'例子3:最簡可行產(chǎn)品'中谒拴,那個CEO和我說的一段話中就可以反映這一點:最開始尝江,一定要把一個不完美,但可用的產(chǎn)品搞出來英上。這樣我們心里就有底了炭序。
心里有底,這就是安心善延。起碼從方案上來講少态,這個方案是可行的。開發(fā)者需要做的易遣,就是在這個可行的方案上進(jìn)行改進(jìn)而已。即便哪一點改進(jìn)不成功嫌佑,退回原來的版本即可豆茫,起碼這個版本可以work!相反的屋摇,如果用步步為營的方式來做項目揩魂,直到你到達(dá)最后一步之前,你都不知道這個產(chǎn)品到底能不能工作炮温,壓力山大火脉!一旦不能工作,你可能需要重頭再來。這就是精益求精比步步為營的好處倦挂。
第二個好處畸颅,就是多次的即時反饋。開發(fā)者用精益求精的方式改進(jìn)MVP方援,每次改進(jìn)成功没炒,實際上都可以獲得完成時的成就感。一旦得到這個成就感犯戏,開發(fā)者又可以迫不及待地投入了下一個小目標(biāo)送火,進(jìn)一步改進(jìn)當(dāng)前的版本。
我在上課的時候問過我的學(xué)生一個問題先匪,為什么一個人上自習(xí)學(xué)習(xí)的時候种吸,堅持1個小時不到可能就得休息,而玩游戲的時候呀非,則可以通宵呢坚俗?
原因就在于學(xué)習(xí)的反饋鏈條很長,而玩游戲可以得到即時反饋姜钳。
《游戲改變世界》一書中坦冠,揭示了人類會被游戲吸引的深層機(jī)理就是:即時反饋。游戲開發(fā)人員深諳此道哥桥。你在游戲中的任何操作辙浑,都會立馬視覺化、數(shù)據(jù)化地顯示出來拟糕。
不要小看每次砍怪物頭上飚出的數(shù)字判呕,不要小看出招的音效,不要小看傷血的紅字和加魔的藍(lán)字送滞,它們都給玩家提供了最最直觀的即時反饋侠草。
你清楚的知道,你這次擊殺怪物犁嗅,一定會漲經(jīng)驗值边涕,并且有幾率會得到一些寶物。其實就是說褂微,及時反饋使得你明確知道功蜓,你的每一次操作,都是有回報的宠蚂,并且回報就在操作完成時式撼!這就是使得我們能通宵玩游戲的原因。
對比現(xiàn)實生活中的學(xué)習(xí)卻相反求厕。今天你費勁心力背了50個單詞著隆,幾乎完全不能立刻看出你付出努力的成效:之前看不懂英文書還是看不懂扰楼,之前聽不懂的英文電臺還是聽不明白。你只有持之以恒的堅持很多年美浦,才會突然有一天發(fā)現(xiàn)你的英語水平漲了弦赖。但是這個反饋鏈條未免也太長了吧。
包括英語的很多學(xué)科抵代、乃至很多技能的學(xué)習(xí)的反饋鏈條都很長腾节。例如小提琴和二胡。直到你付出非常長時間的枯燥的練習(xí)之后荤牍,你拉出的聲音才不至于讓人立刻想把你趕走案腺。自己的努力不能得到即時反饋,就是很多人不能靜心下來學(xué)習(xí)的主要原因康吵。
忍不住想起了左小祖咒唱的這個《交作業(yè)》的這首歌
憑什么要我交作業(yè)劈榨?
交了,又不一定是自己寫的晦嵌!
寫了同辣,又定不一定考!
考了惭载,又不一定能畢業(yè)旱函!
畢了業(yè),又不一定找到工作描滔!
找到工作棒妨,又不一定找得到老婆!
娶了老婆含长,又不一定會生孩子券腔!
生了孩子,又不一定會用功讀書拘泞!
會用功讀書纷纫,又不一定考得上!
考得上陪腌,又不一定交作業(yè)!
天哪辱魁,這個反饋鏈條如此之長,并且回報充滿了如此之多的不確定性诗鸭,難怪沒有動力交作業(yè)啊商叹。。只泼。。
怎么破卵洗?其實核心就在于如何縮短這個反饋鏈條请唱。例如背單詞的時候弥咪,你可以引入獎勵機(jī)制或者自我成就機(jī)制,例如每次完成50個單詞的任務(wù)十绑,就給自己一個獎勵聚至,或者在你的完成任務(wù)列表上重重的打一個勾!
從另外一個角度而言本橙,我們需要訓(xùn)練自己的延遲滿足的能力扳躬。延遲滿足,就是一種克服當(dāng)前的困難以獲得長遠(yuǎn)利益的能力甚亭。 通俗地說贷币,就是堅韌(Grit)。堅韌不拔的忍耐能力亏狰,對一個人極其重要役纹。
本章總結(jié)
我們今天的收獲是:
- 在線貝葉斯,乃至所有的在線算法體現(xiàn)出來的一種思想就是精益求精。
- 精益求精的這種思想暇唾,在包括函數(shù)極值的數(shù)值解法促脉、項目管理中的敏捷模型、最簡可行產(chǎn)品策州、以及寫文章中都有體現(xiàn)瘸味。
- 精益求精,和每一步力求完美的步步為營相比够挂,具有適應(yīng)變化能力強(qiáng)旁仿、能及時得到外界反饋、讓開發(fā)者安心下硕、以及給開發(fā)者創(chuàng)造即時反饋的諸多優(yōu)點丁逝。