您的位置:首頁>科技>正文

AI,如何助力ETA計算更加智慧化?

雷鋒網新智駕按:“機器學習其實沒有多麼高大上”, 在騰訊位置日前召開的人工智慧(AI)助力LBS應用主題沙龍上, 騰訊地圖導航技術總監江紅英如是說。

就在兩天前, AI還借AlphaGo的圍棋大戰衝擊著人們的眼球, 但事實上, 在更尋常的城市日常運轉中, 人工智慧技術已經為效率的提升做出了相當大的貢獻, 這些應用包括且不限於物流運輸、導航、路況預測等等。

江紅英是騰訊地圖導航技術的研發負責人, 過去幾年裡, 他們的團隊逐漸使用AI進行演算法優化, 並不斷轉變思維, 讓AI技術為日常出行和物流服務。 此次演講中, 江紅英分享了AI如何助力ETA(預計達到時間)計算更加智慧化, 雷鋒網新智駕將內容做了不改變原意的刪減整理, 以饗讀者。

我負責騰訊位置服務的導航研發工作, 自2015年起, 我們的團隊逐漸將AI技術引入到導航服務中解決問題, 例如即時路況預測、道路通行時間計算, 再如從A點到B點, 我們會計算很多條路線, 並進行優先順序排序, 這其實是一個很大的話題。 此次我以ETA計算為例, 分享過去兩年來我們將AI技術引入導航服務中的一些經驗。

什麼是ETA?

ETA指“預計到達時間”。 坐過飛機的人都知道, 機場有很多電子資訊牌,

牌子上會顯示航班的動態資訊, 包括航班出港時間ETD, 以及航班到達時間ETA。 在交通運輸行業, ETA其實是一個很常用的概念。 使用地圖時, 導航規劃線路後會給出一個預計多長時間到達的資料, 這便是ETA。 既然是時間的預估, 就會涉及到預估準確與否的問題, 對於這個準確度, 我們有一個衡量指標, 叫MAPE, 即平均絕對百分誤差, 它表徵的是ETA和用戶實際到達時間之間的偏差。

對於個人用戶而言, ETA可以幫助人們更好地安排出行時間。 對於網約車、物流等涉及車輛、人力調度的問題, ETA都可以幫助進行輔助決策。

態度上:積極擁抱人工智慧

我們目前理解的人工智慧通常是指大資料+機器學習。 在我看來, 這其實是一種水到渠成的狀態,

而不是為了用而用的。

2000年的時候, 我們開始做圖像識別方面的工作, 當時使用的就是機器學習演算法, 當時並沒有覺得有什麼高大上的, 因為那個領域機器學習演算法是非常普通和自然的事情。 如今, 經過多年的發展, 機器學習在圖像、語音和自然語言處理方面都有了更成熟的發展和應用, 但在很多傳統領域還處於比較初步的階段, 交通領域就是其中之一。 個中原因有以下兩點:

一方面, 作為十分傳統的行業, 交通領域擁有傳統的計算模型和幾年甚至十幾年的積累, AI模型對於傳統模型而言是一種顛覆、一種捨棄, 它不是繼承式的發展, 這種改革是需要很大勇氣的。

另一方面, 傳統領域在大資料積累的意識上相對薄弱,

而在資料相對不足的情況下, AI模型初始的效果未必能超過傳統模型。

但是, 即便如此, 我們還是要積極地擁抱AI技術。 以ETA為例, 平均誤差當然是越低越好。 舉個例子, 我們當時使用傳統模型計算ETA, 平均誤差(MAPE)差不多做到19.5%, 並已經到了瓶頸, 很難再突破。 而當我們引入AI模型後, 第一版上線後, 平均誤差就有一個斷崖式的下降, 直接到17%, 到目前, 我們的平均誤差基本可以控制在15.3%以內。

AI模型為什麼能取得更好的效果?

這個問題可以從多個維度解讀, 例如AI有很嚴謹的資料模型, 有大量歷史資料等等。 但作為一個“碼農”, 我覺得我應該從代碼的角度來解讀一下。

如上圖所示,上面的方框中是傳統計算模型中計算“軌跡轉向”的代碼,這部分代碼占整個代碼量的5%;下面的方框中是機器學習模型中訪問一顆決策樹的代碼,這部分代碼占整個代碼量的50%。

同樣是ETA計算,從代碼量上,機器學習模型是傳統模型代碼量的1/10,這個代碼量差距的背後有怎樣的邏輯呢?機器學習會通過大資料的訓練,把一些程式邏輯轉化成配置邏輯。碼農定律之一,就是“配置由於編碼”,如果我能夠通過配置去改變整個程式的邏輯,我就不會用編碼的方式去實現。

第二,機器學習會把線上的一些邏輯轉化成線下的訓練,如果我線上下能夠實現一種邏輯,我就不會線上上去完成,這也是作為碼農良好的操守。AI通過這兩個轉化,遵守了碼農定律,所以得到一個更好的結果。

意識上:要能夠量化一切

剛才說資料和特徵決定了機器學習的上限,所以特徵的提取、特徵的使用,對於機器學習來說是非常重要的。

一般來說,這個過程會分三個步驟來操作:

第一步,對整個業務進行屬性的劃分,可以劃分為物理屬性、即時屬性、挖掘屬性和監控屬性。我們以用戶畫像為例,在用戶畫像裡,諸如用戶的年齡、性別、住址等,都屬於物理屬性,它是簡單的、直接的、穩定的;而諸如一個用戶過去一小時內流覽的網頁內容,就是即時屬性;使用者這些行為的日積月累,會生成歷史資料,對歷史資料的統計結果就是挖掘屬性;而對一個服務進行監控,包括使用者量、訪問量等等,這就屬於監控屬性。

第二步,把所有屬性進行量化。還以用戶畫像為例,假設使用者畫像中有一個屬性叫“使用者的顏值”,我往這裡一站,交給機器,我的顏值屬性設為高,機器會很蒙圈,因為它不知道“顏值高”是什麼意思。但是如果換一個說法,比如我的顏值等於90,機器這時候會一臉鄙視,因為這個顏值的上限可能是500分。但是,不管是90分還是500分,數位化的東西使得機器能夠理解、能夠分析、能夠觀察。所以,這個前提非常重要,我們要把所有的屬性都量化成數位,量化之後的結果稱之為指標。

第三步,要對指標進行分析,分析與業務目標之間的關係。對於這部分操作有專門的一門課程,叫《資料分析》,我們把相關性高的指標轉化成特徵,用在我們的訓練和服務中,對那些相關性比較弱的,會繼續進行觀察。

為什麼一定要去量化?

舉一個ETA將監控指標轉化成特徵的例子。比如,ETA的計算很依賴於即時速度,但是即時速度是從路況中提取出來的,路況計算依賴於即時的資料來源。所以,我們一開始對即時資料源是有一個監控。

最初的監控目標不是為了ETA,是因為我們要監控資料來源,如果它發生了問題,比如資料不穩定,我們會通知資料提供商他這個資料有問題,讓他們趕緊解決,僅此而已。但是有一天,我們突然發現ETA的bad case跟我們的資料來源監控指標有一定的關係,兩者之間的波動情況有點相近,所以,我們就把這個指標拿過來進行相關性分析,加入到我們的特徵裡,上線後發現bad case率果然有所下降。也就是說,所有的屬性都要量化,量化以後不要輕易捨棄,因為我們不知道什麼時候某一個指標就有用了,就會被我們採納。

關於目標的優化

一般情況下,AI的流程是這樣的:它會在一個大資料集上進行訓練,得到學習模型F,將提取的m個特徵施加在F上,得到一個預測的結果y,y就是我們要持續優化的目標。

初始的時候,我們一般會定義一個可觀察、可解釋的簡單目標,隨著模型應用的深入,我們再根據大量的bad case去分析和優化這個目標,最後,要得到一個合適的訓練目標。

這個訓練目標的要求是什麼?

要儘量的簡單,這個比較好理解;還有一個很難做到,就是要兼顧多目標,因為在實踐過程中,我們發現我們對模型的要求並不是單一的,我們經常既要準確率(Precision)高,也要召回率(Recall)高,這就是多個目標。比如在ETA中,我們希望它的平均誤差很小,同時也希望bad case很少,但是這些目標之間有時候會有衝突,但有衝突不代表不可解,還是能夠通過優化目標來找到一些解決的辦法。

看一下ETA在目標優化方面的工作。ETA是預計到達時間,而ATA是用戶實際到達所用的時間。很好理解,我就拿ATA作為我的訓練目標,讓ETA盡可能跟它逼近。這個目標非常簡單、直接。

後來,我們發現了ETA的核心特徵。因為你要算的是時間,跟距離、跟速度必然有關係,而其核心特徵跟它之間是一種乘積的關係。我們的模型是GBDT,它的結果是多棵樹的加和關係,加和還有可能出現一個負數,對ETA來說,你花費的時間為負數肯定是不可接受。所以,我們做了一個對數計算,將乘積關係變成加和關係,同時,因為有指數計算,也保證了不會出現負數。

之後,我們又發現在長距離、長時間這一塊出現bad case的比例相對較高,而長距離和長時間的軌跡在我們的訓練樣本中比較長尾,所以這是長尾引起的bad case。在ETA計算中,長時間和長距離一般是同時出現的,即距離越長,花費的時間越長,反過來說,這就保證了速度是相對穩定的。所以我們改成以速度為訓練目標,長尾現象就會減少很多。

在其他條件不變的情況下,通過對目標的不斷優化,我們既降低了平均誤差,也降低了bad case率,同時兼顧了多個目標。

不要輕易捨棄資料

在我們的訓練資料裡,大量的資料肯定會存在噪音。一般來說,機器學習的第一步會做一個資料的預處理,對資料進行清洗,把噪音資料過濾出來,直接拋棄,這個時候我們會發現訓練資料和我們的測試資料之間的分佈不太一樣,容易產生過擬合的現象。對此,更好的一種辦法,是把這些噪音資料進行修正,變廢為寶,重新利用起來,跟我們的測試資料儘量保持分佈上的一致,也可以得到更好的效果。

舉一個ETA資料改造的例子。一個司機原本按正常軌跡行駛,到了終點位置的時候,他來回繞了很多圈,這其實是因為他在找停車位。像這種case是日常中特別常見的,因為你到了一個目的地附近,就會來回尋找停車位,尤其在北京這種尋找停車位元困難的情況下。

一開始,我們定義了一些噪音資料,遇到類似資料直接扔掉,在後續的訓練過程中,我們發現跟實際的資料之間還是有一些差異。這種情況是比較常見的,這個資料被扔掉後,會導致整個訓練資料的偏差比較大。所以,後來我們把這樣的噪音資料先挑出來,進行一個截斷,繞圈的部分拋棄,剩下部分提取真值,把軌跡加入到訓練樣本中。

多模型

機器學習神奇的地方在於,你將一堆資料給它、一堆特徵給它,它可以炒出一盤好菜。而困難的是,做了一些優化以後,很難證明我在這方面做的事情有效,也很難說清楚到底哪個特徵的優化起到了更好的作用。所以,驗證方面是挺費勁的事情。

很多時候,我們會同時優化多個特徵,如果上線以後效果變得更差了,都不知道是哪個特徵引起的,我們之前被這種情況坑過,因為發現上線以後結果變差了,但是線下每個訓練的結果都很好,上線變差了以後沒有辦法解釋,只能先回滾,這對開發人員來說還是很受打擊的。後來,我們就採用雙模型的方式,我們同時運行著兩個模型——新模型和老模型,兩個模型同時計算,遇到結果和預期不一致的時候,可以做diff(一種比較命令),很快能定位到問題。

當然,並非所有特徵的上線都需要走這樣一個流程,因為開銷比較大,同時要運行兩套數據和兩套模型。目前,我們只是對一些比較重要的特徵,或者是特別難以驗證的特徵進行雙模型操作,如ETA的即時速度,本身它的真值就很難採集到,優化的效果也特別難驗證。對於這樣的一些特徵,我們會採用雙模型的方式,同時兩套跑著,同時比較,有問題就比較好定位。

總結:

第一,我們要在態度上積極擁抱AI技術。AI模型對於傳統模型來說,大部分領域裡都有一種碾壓式的效果,提升特別明顯,需要我們有勇氣去擁抱它。

第二,要有量化一切的意識。所有的資料都要量化,說不定哪一天可能就用上了。

第三,要不斷優化我們的目標。因為你的目標偏了,最後的結果肯定也會有偏,所以需要不斷優化和反覆運算訓練目標。

第四,資料如此重要,我們不能隨意拋棄。有些噪音資料也是有價值的。

第五,對於一些驗證上的問題,即訓練效果的分析,可以採用雙模型的方式來解決。

會後,江紅英告訴雷鋒網新智駕,對於自動駕駛技術的研發,目前騰訊內部有一個專門的“無人駕駛實驗室”在進行,而她帶領的團隊目前所做出的努力,也隨時準備為後續自動駕駛模型的一些技術和應用服務。

如上圖所示,上面的方框中是傳統計算模型中計算“軌跡轉向”的代碼,這部分代碼占整個代碼量的5%;下面的方框中是機器學習模型中訪問一顆決策樹的代碼,這部分代碼占整個代碼量的50%。

同樣是ETA計算,從代碼量上,機器學習模型是傳統模型代碼量的1/10,這個代碼量差距的背後有怎樣的邏輯呢?機器學習會通過大資料的訓練,把一些程式邏輯轉化成配置邏輯。碼農定律之一,就是“配置由於編碼”,如果我能夠通過配置去改變整個程式的邏輯,我就不會用編碼的方式去實現。

第二,機器學習會把線上的一些邏輯轉化成線下的訓練,如果我線上下能夠實現一種邏輯,我就不會線上上去完成,這也是作為碼農良好的操守。AI通過這兩個轉化,遵守了碼農定律,所以得到一個更好的結果。

意識上:要能夠量化一切

剛才說資料和特徵決定了機器學習的上限,所以特徵的提取、特徵的使用,對於機器學習來說是非常重要的。

一般來說,這個過程會分三個步驟來操作:

第一步,對整個業務進行屬性的劃分,可以劃分為物理屬性、即時屬性、挖掘屬性和監控屬性。我們以用戶畫像為例,在用戶畫像裡,諸如用戶的年齡、性別、住址等,都屬於物理屬性,它是簡單的、直接的、穩定的;而諸如一個用戶過去一小時內流覽的網頁內容,就是即時屬性;使用者這些行為的日積月累,會生成歷史資料,對歷史資料的統計結果就是挖掘屬性;而對一個服務進行監控,包括使用者量、訪問量等等,這就屬於監控屬性。

第二步,把所有屬性進行量化。還以用戶畫像為例,假設使用者畫像中有一個屬性叫“使用者的顏值”,我往這裡一站,交給機器,我的顏值屬性設為高,機器會很蒙圈,因為它不知道“顏值高”是什麼意思。但是如果換一個說法,比如我的顏值等於90,機器這時候會一臉鄙視,因為這個顏值的上限可能是500分。但是,不管是90分還是500分,數位化的東西使得機器能夠理解、能夠分析、能夠觀察。所以,這個前提非常重要,我們要把所有的屬性都量化成數位,量化之後的結果稱之為指標。

第三步,要對指標進行分析,分析與業務目標之間的關係。對於這部分操作有專門的一門課程,叫《資料分析》,我們把相關性高的指標轉化成特徵,用在我們的訓練和服務中,對那些相關性比較弱的,會繼續進行觀察。

為什麼一定要去量化?

舉一個ETA將監控指標轉化成特徵的例子。比如,ETA的計算很依賴於即時速度,但是即時速度是從路況中提取出來的,路況計算依賴於即時的資料來源。所以,我們一開始對即時資料源是有一個監控。

最初的監控目標不是為了ETA,是因為我們要監控資料來源,如果它發生了問題,比如資料不穩定,我們會通知資料提供商他這個資料有問題,讓他們趕緊解決,僅此而已。但是有一天,我們突然發現ETA的bad case跟我們的資料來源監控指標有一定的關係,兩者之間的波動情況有點相近,所以,我們就把這個指標拿過來進行相關性分析,加入到我們的特徵裡,上線後發現bad case率果然有所下降。也就是說,所有的屬性都要量化,量化以後不要輕易捨棄,因為我們不知道什麼時候某一個指標就有用了,就會被我們採納。

關於目標的優化

一般情況下,AI的流程是這樣的:它會在一個大資料集上進行訓練,得到學習模型F,將提取的m個特徵施加在F上,得到一個預測的結果y,y就是我們要持續優化的目標。

初始的時候,我們一般會定義一個可觀察、可解釋的簡單目標,隨著模型應用的深入,我們再根據大量的bad case去分析和優化這個目標,最後,要得到一個合適的訓練目標。

這個訓練目標的要求是什麼?

要儘量的簡單,這個比較好理解;還有一個很難做到,就是要兼顧多目標,因為在實踐過程中,我們發現我們對模型的要求並不是單一的,我們經常既要準確率(Precision)高,也要召回率(Recall)高,這就是多個目標。比如在ETA中,我們希望它的平均誤差很小,同時也希望bad case很少,但是這些目標之間有時候會有衝突,但有衝突不代表不可解,還是能夠通過優化目標來找到一些解決的辦法。

看一下ETA在目標優化方面的工作。ETA是預計到達時間,而ATA是用戶實際到達所用的時間。很好理解,我就拿ATA作為我的訓練目標,讓ETA盡可能跟它逼近。這個目標非常簡單、直接。

後來,我們發現了ETA的核心特徵。因為你要算的是時間,跟距離、跟速度必然有關係,而其核心特徵跟它之間是一種乘積的關係。我們的模型是GBDT,它的結果是多棵樹的加和關係,加和還有可能出現一個負數,對ETA來說,你花費的時間為負數肯定是不可接受。所以,我們做了一個對數計算,將乘積關係變成加和關係,同時,因為有指數計算,也保證了不會出現負數。

之後,我們又發現在長距離、長時間這一塊出現bad case的比例相對較高,而長距離和長時間的軌跡在我們的訓練樣本中比較長尾,所以這是長尾引起的bad case。在ETA計算中,長時間和長距離一般是同時出現的,即距離越長,花費的時間越長,反過來說,這就保證了速度是相對穩定的。所以我們改成以速度為訓練目標,長尾現象就會減少很多。

在其他條件不變的情況下,通過對目標的不斷優化,我們既降低了平均誤差,也降低了bad case率,同時兼顧了多個目標。

不要輕易捨棄資料

在我們的訓練資料裡,大量的資料肯定會存在噪音。一般來說,機器學習的第一步會做一個資料的預處理,對資料進行清洗,把噪音資料過濾出來,直接拋棄,這個時候我們會發現訓練資料和我們的測試資料之間的分佈不太一樣,容易產生過擬合的現象。對此,更好的一種辦法,是把這些噪音資料進行修正,變廢為寶,重新利用起來,跟我們的測試資料儘量保持分佈上的一致,也可以得到更好的效果。

舉一個ETA資料改造的例子。一個司機原本按正常軌跡行駛,到了終點位置的時候,他來回繞了很多圈,這其實是因為他在找停車位。像這種case是日常中特別常見的,因為你到了一個目的地附近,就會來回尋找停車位,尤其在北京這種尋找停車位元困難的情況下。

一開始,我們定義了一些噪音資料,遇到類似資料直接扔掉,在後續的訓練過程中,我們發現跟實際的資料之間還是有一些差異。這種情況是比較常見的,這個資料被扔掉後,會導致整個訓練資料的偏差比較大。所以,後來我們把這樣的噪音資料先挑出來,進行一個截斷,繞圈的部分拋棄,剩下部分提取真值,把軌跡加入到訓練樣本中。

多模型

機器學習神奇的地方在於,你將一堆資料給它、一堆特徵給它,它可以炒出一盤好菜。而困難的是,做了一些優化以後,很難證明我在這方面做的事情有效,也很難說清楚到底哪個特徵的優化起到了更好的作用。所以,驗證方面是挺費勁的事情。

很多時候,我們會同時優化多個特徵,如果上線以後效果變得更差了,都不知道是哪個特徵引起的,我們之前被這種情況坑過,因為發現上線以後結果變差了,但是線下每個訓練的結果都很好,上線變差了以後沒有辦法解釋,只能先回滾,這對開發人員來說還是很受打擊的。後來,我們就採用雙模型的方式,我們同時運行著兩個模型——新模型和老模型,兩個模型同時計算,遇到結果和預期不一致的時候,可以做diff(一種比較命令),很快能定位到問題。

當然,並非所有特徵的上線都需要走這樣一個流程,因為開銷比較大,同時要運行兩套數據和兩套模型。目前,我們只是對一些比較重要的特徵,或者是特別難以驗證的特徵進行雙模型操作,如ETA的即時速度,本身它的真值就很難採集到,優化的效果也特別難驗證。對於這樣的一些特徵,我們會採用雙模型的方式,同時兩套跑著,同時比較,有問題就比較好定位。

總結:

第一,我們要在態度上積極擁抱AI技術。AI模型對於傳統模型來說,大部分領域裡都有一種碾壓式的效果,提升特別明顯,需要我們有勇氣去擁抱它。

第二,要有量化一切的意識。所有的資料都要量化,說不定哪一天可能就用上了。

第三,要不斷優化我們的目標。因為你的目標偏了,最後的結果肯定也會有偏,所以需要不斷優化和反覆運算訓練目標。

第四,資料如此重要,我們不能隨意拋棄。有些噪音資料也是有價值的。

第五,對於一些驗證上的問題,即訓練效果的分析,可以採用雙模型的方式來解決。

會後,江紅英告訴雷鋒網新智駕,對於自動駕駛技術的研發,目前騰訊內部有一個專門的“無人駕駛實驗室”在進行,而她帶領的團隊目前所做出的努力,也隨時準備為後續自動駕駛模型的一些技術和應用服務。

Next Article
喜欢就按个赞吧!!!
点击关闭提示