每日最新頭條.有趣資訊

算法工程師如何向女朋友解釋:什麽是預測算法?

本篇文章來源於第一位技術類的騰研識者:嶽亞丁。早在2016年,嶽博士就在騰訊戰略管理大會上,給大家科普過AI與量子計算的奧秘。

如今,為了讓更多人了解算法,尤其是預測算法,他設計了一連串虛擬對話:

算法可以做啥?

憑什麽公司給算法工程師開那麽高的工資?

可以預測股票和房價嗎?

預測有什麽困難?

算命和量子糾纏能用於預測嗎?

如何盡量預測準確?

與綁在豬腿上的棍子有什麽關係?

預測都是刻舟求劍

算法工程師與他的女友在海邊散步,他們開始聊天。

圖注:網傳 2018 屆互聯網校招高薪清單

:我常常感到奇怪的是,你們公司到底是因為什麽給你開高工資。那些軟體工程師好歹還是開發了很多軟體給大家用,他們拿錢還是理所當然的。

:我做算法啊,算法可以讓電腦做更多的事。

:算法到底是什麽?看不見摸不著的。就是用電腦做加減乘除嗎?

:不是。加減乘除是電腦很基礎的運算,早就有人做好了,不需要我們考慮。

還有一些工程師做的事情,比如說,把一車貨物從地點A運送到地點B,要經過一個很複雜的交通網絡,裡面的岔路很多,可選的路線有很多條,如何從中選出一條最短裡程的路線,這些也是算法。

我做的算法又有所不同,比如說,預測……

:預測?你能預測股票嗎?房價呢?(畫外音:也就只有女朋友敢這麽問~)

:可以預測股票和房價,但是普遍還不太準。

我主要是預測公司業務方面的東西,比如說,預測下周的銷售收入,預測哪些用戶比較願意花錢購買我們的產品,甚至預測用戶接下來要到哪裡去,會做什麽,等等。

:這些你能預測準嗎?

:大致是準的,但是也有誤差。

:為什麽會有誤差呢?

:誤差在實際工作中始終存在,數學上可以證明,不可能百分之百的準確,除非是一些極簡單、極確定性的情況。

實際工作中,我們當然會盡量想辦法預測準確的了。但即便有一些誤差,公司拿我目前的預測結果,也已經可以做很多事情了。

可以說,我們做算法的,就是在變相地幫公司多掙錢,所以當然要付給我們高工資。

:公司怎麽樣多掙錢呢?

:比如說,預測到用戶甲有較強的購買我們產品的可能性,用戶乙的意願不那麽強,那麽我們的廣告資訊就應該主要發送給像用戶甲這樣的用戶,使得在同樣的行銷成本下,公司的銷售收入可以更大。

:我有點明白了。但是,要想預測準確,到底難在哪裡?你可以不講數學嗎?我討厭數學。

:好的,不講數學。還是舉例說明吧,比如說,預測下周的銷售收入。這跟預測股票的未來幾天價格是多少,本質上是一樣的。

:嗯。

:預測算法,跟人一樣,就是讓電腦看看已經發生過的情況,從過去的數據裡面找一找有什麽規律,然後利用這些規律來預測未來。

麻煩的是,我們只能根據過去預測未來。

:那當然了,預測不都是根據過去預測未來嗎?

:正是因為這個根本原因,使得幾乎所以的預測算法都帶有“刻舟求劍”的味道了。

:你是說,情況在變化,過去的規律,用到未來,就不那麽靈了?

:是的。

算命和量子糾纏可以用於預測嗎?

:除非你會算命。

:算命也可以看作是一種預測。隻不過比較玄,傳說有人算得很準,但是沒有得到系統的驗證,也沒得到科學的解釋,我也不敢用啊。

:是的,如果你老闆聽說你在用周易八卦,來預測哪個用戶下周會流失,哪個用戶的貸款還款會出現違約,肯定會認為你在忽悠,非開掉你不可。

:對,絕對不敢。不過,我還是很驚訝,算命的過程中,對於想知道的某個事情,隻從一個簡單的卦象,就能從非常多的可能性中推斷出一種結果,看起來很神奇。

但是不幸的是,起卦和解卦有很大的任意性,也就是說,對於同一個事情,不同的卦師可能得到不同的卦象,而對於同一個卦象,不同的卦師也可能得到不同的預測結果。

這樣的不確定性,讓人無法捉摸,也沒法讓電腦來照此預測了。

:哈,你還真的研究過算命?

:不算研究,只是考察過,看起來不樂觀,先擱置吧。對於前面我們說到的根本困難,我還看了量子糾纏,看能否幫助突破呢。

:量子……糾纏?

:嗯。我先解釋一下量子糾纏吧。

:說簡單一點,不要太難懂了。

:好。舉一個不很恰當的例子:你把你的一雙鞋從深圳寄給朋友,其中一隻寄給北京的朋友,另一隻寄給上海的朋友。看起來有點犯傻,但我們暫時就假定這麽著吧。

你事先告訴她們,你給她們每人寄了一隻鞋,而且兩隻鞋是配對的。這樣,北京的朋友收到之後,打開一看,如果是左腳的,那麽她在一瞬間就知道(不需要去問對方),上海朋友收到的一定是右腳的。

:唔。這個倒是好懂,但是,你到底想說啥呢?

:這兩隻鞋子(一左一右),就是處於糾纏狀態,你看到了其中一個的狀態,就立刻知道另一個的狀態,不管它們相距多遠。

類似地,微觀粒子,比如說兩個電子或者光子,如果處於糾纏態,那麽觀察其中一個的狀態,另一個的狀態也就立刻確定了。

:對。但是這個跟你做預測有什麽關係?

:大膽想象一下:如果有一個事情,它的過去和未來處於糾纏狀態,那麽知道了它的過去,豈不是就可以知道它的未來了?這就是預測了。

:啊,是哦。有點像偷看底牌。這真的可能嗎?

:還只是理論上的探索。科學家們總是腦洞大開,設想出各種可能性,然後試圖證實。

不過,前幾年有物理學家做了實驗,發現不同時期的兩個量子系統,的確可以發生糾纏。

這就好像在說,來自遙遠過去(比如90億年前)的星光的某種特徵,竟然能夠影響你在今年冬天用業餘望遠鏡觀測到的星光特徵。

更奇怪的是,甚至還可以說,你在今年冬天觀測到的落入你望遠鏡的星光,不知何故就支配了光子的特徵超過90億年之久。

:你是說,現在的事情還可以影響到過去?

:對,量子世界裡,看起來就是這樣:兩個事件如果在時間上發生量子關聯,我們就沒辦法說,哪個在前,哪個在後,因果也不分了,兩個事件中的每一個事件都是另一個的原因。

這跟我們的直覺完全不同了。

:不可思議。那,現實世界裡,可以把這個用於預測嗎?

:還不知道,好像還沒有人做這個研究。不過,現實世界中,在巨集觀尺度下,很多量子現象消失,所以剛才講到的量子糾纏、量子關聯,對我們的預測多半是沒有幫助。

但我也不能把話說死了,過一段時間,我再看看這方面的研究報導,看能否有啟發吧。

:嗯。偷看底牌不容易,天機不可泄漏啊。

哪些系統相對容易預測?

:所以我們做預測,只好想其它辦法,希望能達到近似的準確。

:怎麽樣近似?

:先還是簡單區分一下,哪些事情是比較容易預測準確,哪些很難,然後我們區別對待。

:這個不太好區分吧。

:一般而言,對於原理比較簡單、容易描述清楚的系統,我們能夠預測得比較準確。

比如說,一輛汽車正在高速路上勻速行駛,整個路網沒有大的外在影響(如車禍、突變氣象),那麽下一個時間段裡,我們可以預測,它的速度不會有大的變化,還是會按某個預定時間到達某個目的地。

又比如,雖然長期氣象預報很難準確,但是短期內的預報,現在還是挺準的。

因為這些大氣、溫度、濕度等因素的變化是滿足一套力學方程的,只要氣象觀察的數據足夠多,電腦的計算能力足夠強,我們就可以通過這套方程,算出未來短期內的氣象變化情況。

:那麽,哪些是比較複雜的系統呢?

:有很多。比如說,凡是涉及到有人在裡面發揮作用的、社會經濟類的系統,都很複雜。

其中的各種因素是如何相互影響的,我們都不太清楚。系統的變化規律很難捉摸,讓人難於下手。股票市場算是其中的一種吧。

:好像是這樣的。

:這樣舉例來區分,不是很嚴謹。事實上,研究人員設計了一些指標,來判斷系統的可預測性。

比如說,有科學家提出一個統計衡量值,用來判斷系統的隨機程度,及系統變化趨勢的持續程度。如果系統不那麽隨機地變化,系統的變化趨勢也比較恆定,那就比較容易預測準確了。

:好抽象,沒聽懂。

:好,先不管是否嚴謹吧。你只要記住,我們大致有一些辦法來區分哪些系統是比較容易預測的。

:好。那,對於複雜的系統,你怎麽預測呢?

:對複雜系統,我們一般只能從現象上,從表層看到的數據上,建立起對系統的認識,也就是所謂的系統模型。

雖然我們看不到系統的內部結構,不知道它的運行機制,但是系統展示出的數據中隱含了系統的重要資訊,數據在很大程度上體現了系統的本質,儘管不是很完全。

:說人話。

:想象一下:我們把一根長木杆綁在豬腿上,豬在豬圈裡面活動,我們的視線被豬圈擋住了,看不見豬,只看到木杆頂端的晃動,現在要根據晃動情況推測豬是在吃飯還是在睡覺,以及下一步又會幹什麽。

:好惡心的比喻。

:就是說,我們看到的只是冰山一角,然後要推測系統下一步如何變化。

:嗯,盲人摸象。

:目前的做法雖然都是刻舟求劍,但是還得做啊。大家盡量想辦法吧,比如說,把能看到的數據分解成若乾個組成部分,對它們分別建模和預測,然後把它們的預測結果合並起來。

這有點“分而治之”、“先分析再綜合”的味道。

又比如說,對看到的數據從不同角度建立幾個不同的模型,進行預測,再把這幾個模型的預測結果合並起來。這有點“三個臭皮匠賽過諸葛亮”、“幾個盲人把情況湊到一起”的意思。

:這樣做,就能預測準了麽?

:有時會更準確,但也不能保證每次都會更準確,還是取決於具體的場景和數據情況。有的時候,幾個臭皮匠都是錯的,他們的意見匯總起來,最終可能還是錯的。

算法和模型是一回事嗎?

:你前面老是在說模型,到底什麽是模型?

:模型就是描述一個系統的數學公式或規則。

:能用我能聽得懂的話,舉個例子嗎?

:還記得中學裡面學過的萬有引力定律嗎?

:不太記得了,好像就是地球、月亮、太陽之間都有引力拉著,人在地面上也有引力拉著,要不人就飄走了,飄到太空中去。

:對。牛頓發現了一個公式,就是兩個物體之間的引力的大小,與物體的品質成正比,與物體之間的距離的平方成反比。這個公式,就是關於物體之間引力作用的模型了。

:明白了。那,有時聽人家說預測算法,又有人說預測模型,這兩個東西,是一回事嗎?

:是挺容易混淆的,包括我們自己也有人在瞎叫混叫。

先明確一下什麽是模型:它是對事物的認識或者描述,表現為一個(或一組)公式,或者一套規則。

公式的情況,就像剛才提到的萬有引力公式;規則的情況,比如你發現了一個規律,如果夏天發生雷陣雨0.5小時,則氣溫會下降0.5-2度,這樣的規則也算是一種模型。

:好的。

:那麽,預測模型,自然就是用作預測的模型了。

預測算法,則是用來發現預測模型的方法,是依據數學原理而設計出的一系列步驟。

比較容易混淆的一點,就是在得到預測模型之後,把它用於預測時,還是必須寫成電腦程式的,有些人把這個程式又叫做預測算法。

:好吧。可否這樣說,模型是世界觀,算法是方法論

:這個類比有點意思。

能否避免刻舟求劍?

:看來,你的工作關鍵是要預測準,是不是搞出一些複雜精巧的模型,就可以了呢?

:也不一定,過於複雜的模型,有時反而不如簡單模型。

理由我先不說了。我現在關注的是,它們都是刻舟求劍,用於預測,準確性總是有限。

即使有人試圖利用過去數據規律與未來的相似性或存續性,也不那麽理想。

:這真有點兩難了。你想偷窺未來,現在還做不到,也不知道將來能不能做到;你想做近似預測,刻舟求劍的問題始終是個攔路虎。

:兩難之間,還有一點點中間地帶,不知道會不會是希望所在。

:哦?啥?

:暫時有兩種思路。

第一種思路:考慮到如果好幾個模型對未來預測都很準,那麽它們的預測結果應該是差不多的,因為如果它們的預測結果相差很大,那麽必定有一個不準,或者幾個都不準。

因此,如果幾個模型預測結果很接近,那它們有可能都準。注意,我說的是“有可能”,也就是說,幾個模型預測結果很接近,是它們都預測準確的必要條件,但不是充分條件。

:……有點繞。你解釋一下。

:雖然幾個臭皮匠的預測結果合並起來不一定很準,但是,如果有幾個預測很準的臭皮匠,那他們各自的預測結果之間必定是很接近的。

因此,我們如果看到幾個皮匠觀點一致,那麽有可能他們的結論是對的。但不能確保一定是對的。

:不能確保是對的,那還是不敢完全相信啊。

:是,但好歹有可能是對的嘛。這給我們進一步構建預測準確的模型,提供了一個線索。

:看來,要預測準確,好難哪。

:是啊。我們可能需要進一步放開眼界,尋找更多啟發。例如,想一想,大象是如何預測海嘯的。

據說2004年印尼地震海嘯中,死亡和失蹤了二十多萬人,但是野象紛紛逃到地勢較高的地點避難,沒有發現它們因此遭殃。它們是依據哪種古老而隱秘的資訊做出判斷,以及到底如何判斷的,值得深究。

對比來看,這個問題上,人類反而弱爆了。

:那現在人工智能吹得這麽火,希望機器像人一樣思考,是不是誤入歧途了?

:還是誰厲害,就向誰學習吧。人在某些方面很厲害,就讓機器模仿人。問題是,現在也只能模仿人的一點點皮毛,很多問題還沒有搞清楚。

:還有一種思路呢?

:第二種思路:對於複雜多變的數據情況,希望能夠直接求得一個模型,使得它對未來的預測誤差盡量小。

因此預測問題轉化為尋找一個最優模型的問題。這是另一個話題了,今天太晚,來不及講了。

:好的。今天散步就到這裡吧。好燒腦。

:我預測你明天早上在7點到7點30之間起床。

:這算什麽預測,我以前都告訴過你的。我一般不隨意改變自己的生活規律。

:那如果我能夠預測出,你明天上午9點43分會接到一個北京同事的郵件,10點05分你老闆會臨時召集一個項目討論會,11點23分你會給上海同事打電話索要新版的方案文檔呢?

:你好可怕……幸好你還不能。

*文中圖片來源於網絡

獲得更多的PTT最新消息
按讚加入粉絲團