譯者 | 朱先忠
審校 | 孫淑娟
在本文中,我想和大家分享我優化深度學習模型輸入數據的方法。作為一名數據科學家和數據工程師,我已經成功地將這一技巧應用于自己的工作中。您將通過一些具體的實際開發案例來學習如何使用上下文信息來豐富模型輸入數據。這將有助于您能夠設計出更為穩健和更準確的深度學習模型。
深度學習模型非常強大,因為它們非常善于整合上下文信息。我們可以通過向原始數據的維度添加幾個上下文來提高神經網絡的性能。我們可以通過一些巧妙的數據工程化來實現這種目標。
當你開發一個新的預測性深度學習算法時,你可能會選擇一個完全適合你特定使用場景的模型架構。根據輸入數據和實際的預測任務,你可能已經想到了很多方法:如果是打算對圖像進行分類的話,那么你很可能會選擇卷積神經網絡;如果是預測時間序列或者是分析文本,那么LSTM網絡可能是一個很有前途的選擇方案。通常,關于正確的模型架構的決策主要由流入模型的數據類型決定。
如此一來,找到正確的輸入數據結構(即定義模型的輸入層)就成為模型設計中最關鍵的步驟之一。我通常將更多的開發時間投入到輸入數據的形狀設計上,而不是其他任何事情上。需要明確的是,我們不必處理給定的原始數據結構,只需找到合適的模型即可。神經網絡在其內部處理特征工程化和特征選擇(“端到端建?!保┑哪芰Σ⒉荒苁刮覀兠庥趦灮斎霐祿慕Y構。我們應該以這樣一種方式為數據服務,即模型可以從中獲得最佳意義,并做出最明智的決策(即最準確的預測)。這里的“秘密”因素正是上下文信息。也就是說,我們應該用盡可能多的上下文來豐富原始數據。
什么是上下文?
那么,上面我具體說的“上下文”是什么意思呢?不妨讓我們來舉個例子?,旣愂且幻麛祿茖W家,她正在開展一項新的工作,為一家飲料零售公司開發銷售預測系統。簡而言之,她的任務是:給定一家特定的商店和一種特定的產品(檸檬水、橙汁、啤酒……),她的模型應該能夠預測該產品在特定商店的未來銷量。預測將應用于數百家不同商店提供的數千種不同產品。到目前為止,系統一直都還運行得不錯?,旣惖牡谝惶焓侨チ虽N售部,那里的預測工作已經完成了,盡管是由經驗豐富的銷售會計彼得斯手動完成的。她的目標是了解這位領域專家基于什么樣的基礎決定未來某一特定產品的需求量。作為一名優秀的數據科學家,瑪麗預計彼得斯多年的經驗將非常有助于定義哪些數據可能對模型更有價值。為了找到答案,瑪麗問了彼得斯兩個問題。
第一個問題:“你是通過分析什么數據來計算下個月我們將在柏林的商店里銷售多少瓶特定品牌的檸檬水?你是如何解釋這些數據的?”
彼得斯回答道:“隨著時間的推移,我們在柏林的檸檬水銷售上邁出了第一步”。隨后,他繪制了以下圖表來說明他的策略:
在上圖中,我們看到有一條連續的曲線,在7月/8月(柏林夏季時間)出現高峰。夏季氣溫較高,人們更喜歡吃點心,所以產品的銷量會增加,這一點很直觀。在較小的時間尺度上(大約一個月),我們看到銷售額在大約10件商品的范圍內波動,這可能是由于不可預測的事件(隨機噪聲)導致的。
彼得斯繼續說道:“當我看到夏季銷售額增加而冬季銷售額減少的重復模式時,我認為這也極有可能在未來發生,因此就根據這種可能性來估計銷售額?!边@聽起來很有道理。
彼得斯是在時間上下文中解釋銷售數據的,其中兩個數據點的距離由它們的時間差定義。如果數據不按時間順序排列,那么很難解釋。例如,如果我們只查看直方圖中的銷售分布,則時間上下文將丟失,我們的最佳未來銷售估計值將是一些合計值,例如所有值的中值。
當數據以某種方式排序時,上下文就會出現。
不用說,您應該在正確的時間順序為您的銷售預測模型提供歷史銷售數據,以保存來自數據庫的“免費”上下文。深度學習模型非常強大,因為它們非常善于整合上下文信息,類似于我們的大腦(當然,在本例中是彼得斯的大腦)。
你有沒有想過:為什么深度學習對于圖像分類和圖像對象檢測如此有效?因為普通的圖像中已經存在很多的“自然”上下文:圖像基本上是光強度的數據點,按兩個背景維度排列,即x方向的空間距離和y方向的空間間距。而作為動畫形式的電影(圖像時間序列),它又添加了時間作為第三個上下文維度。
因為上下文對預測非常有利,所以我們可以通過添加更多的上下文維度來提高模型性能——盡管這些維度已經包含在原始數據中。我們通過一些巧妙的數據工程化方法實現了這一點,如接下來所要介紹的那樣。
我們應該以這樣一種方式來服務數據,即模型可以從中獲得最佳意義,并做出最明智的決策。我通常將更多的開發時間投入到輸入數據的形狀設計上,而不是其他任何事情上。
設計上下文豐富的數據
讓我們再回到瑪麗和彼得斯的討論問題上?,旣愔?,在大多數情況下,真實數據看起來并不像上面的圖表那么好,所以她稍微修改了一下圖表,如下所示:
瑪麗問的第二個問題是:“如果最后一個銷售數據點高于通常的噪音水平怎么辦?這可能是一種真實的情形。也許該產品正在進行一場成功的營銷活動。也許配方已經改變,現在味道更好了。在這些情況下,效果是持久的,并且未來的銷售將保持在相同的高水平?;蛘呖赡苤皇怯捎陔S機事件而出現的異常。例如,一個參觀柏林的學校班級學生碰巧走進商店,所有的孩子都買了一瓶這種檸檬水品牌。在這種情況下,銷售增長額并不穩定,只能算是噪音數據。在這種情況下,你如何決定這是否會是真正的銷售效果呢?”
你可以看到彼得斯在回答之前不斷地撓頭:“在這種情況下,我關注的是與柏林類似的商店的銷售情況。例如我們在漢堡和慕尼黑的商店。這些商店具有可比性,因為它們也位于德國主要城市。我不會考慮在農村的商店,因為我期望那里有不同口味和偏好的不同顧客?!?/p>
他將其他商店的銷售曲線與兩種可能的場景相加?!叭绻铱吹桨亓值匿N量增長,我認為這是噪音。但是,如果我看到漢堡和慕尼黑的檸檬水銷量也在增長,我希望這會是一個穩定的效果?!?/p>
因此,在一些頗為困難的情況下,彼得斯會考慮更多的數據,以便做出更明智的決策。他在不同商店的上下文中添加了一個新的數據維度。如上所述,當數據以某種方式排序時,上下文就會出現。要創建一個商店上下文,我們首先必須定義一個距離度量值,以便相應地從不同的商店訂購數據。例如,彼得斯根據商店所在城市的大小來區分商店。
通過運用一些SQL和Numpy編程技巧,我們就可以為我們的模型提供類似的上下文。首先,我們要了解我們公司商店所在城市的人口規模;然后,我們根據人口差異來衡量所有商店之間的距離;最后,我們將所有的銷售數據組合在一個2D矩陣中,其中第一個維度是時間,第二個維度是我們的商店距離指標。
圖中的銷售矩陣提供了最近檸檬水銷售的良好概括,由此產生的模式也可以直觀地得到解釋??纯翠N售矩陣左下角的數據點:這是柏林最近的銷售數據。注意,那個亮點很可能是一個例外,因為類似的商店(例如漢堡)不會重現銷售額的急劇增長。相比之下,7月份的銷售高峰是由類似的商店再現的。
因此,我們總是需要添加一個距離指標來創建上下文。
現在,我們將彼得斯的說法轉化為數學術語,可以根據產品所在城市的人口規模來建模。在添加新的上下文維度時,我們必須非常仔細地考慮正確的距離指標。這取決于我們想要預測的實體受到影響的因素。影響因素完全取決于產品,必須相應地調整距離指標。例如,如果你看看德國的啤酒銷售,你會發現消費者很可能會從當地的啤酒廠購買產品(你可以在全國各地找到大約1300家不同的啤酒廠)。
來自科隆的人通常喝庫爾施啤酒,但當你驅車半小時向北前往杜塞爾多夫地區時,人們會避開庫爾施,轉而喝更黑、麥芽味更濃的阿爾特啤酒。因此,在德國啤酒銷售的情況下,通過地理距離來模擬商店距離可能是一個合理的選擇。然而,其他產品類別(檸檬水、橙汁、運動飲料……)的情況并非如此。
因為我們添加了一個額外的上下文維度,我們創建了一個上下文豐富的數據集,在該數據集中,潛在的預測模型可以獲得不同時間和不同商店的檸檬水銷售概況。這使得模型可以通過查看最近的銷售歷史并左右查看其他地點的類似商店,對柏林商店的未來銷售做出明智的決定。
從這里開始,我們可以進一步添加產品類型作為附加的上下文維度。因此,我們用其他產品的數據來豐富銷售矩陣,這些數據根據它們與檸檬水的相似性進行排序(我們的預測目標)。同樣,我們需要找到一個好的相似性指標??蓸繁瘸戎駲幟仕畣??我們可以根據什么數據定義相似性排名?
在商店的情況下,我們有一個連續的衡量標準,那就是城市的人口?,F在我們正在處理商品類別。我們真正想找到的是與檸檬水具有類似銷售行為的產品。與檸檬水相比,我們可以對所有產品的時間分辨銷售數據進行互相關分析。通過這種方式,我們獲得了每個產品的皮爾遜相關系數,它告訴我們銷售模式有多相似??蓸返溶涳嬃系匿N售模式可能與檸檬水相似,夏季銷量會增加。其他產品的行為將完全不同。例如Gühwein,這是一種在圣誕市場上供應的溫暖甜美的葡萄酒,在12月可能會有強勁的銷售高峰,而在今年余下的時間里幾乎沒有銷售。
【譯者注】時間分辨(time-resolved):物理學或統計學名稱。與之相關的另一些常用詞是時間分辨診斷測量(time-resolved diagnosis)、時間分辨光譜(time-resolvedspectrum)等。
交叉相關分析將顯示Glühwein葡萄酒的皮爾遜系數較低(實際上是負的),而可樂的皮爾森系數較高。
盡管在銷售矩陣中添加了第三個維度,但我們可以通過將第二個維度以相反的方向連接起來來包含產品上下文。這樣就將最重要的銷售數據(柏林檸檬水銷量)放在了中心位置:
添加更多特征
雖然我們現在有一個信息非常豐富的數據結構,但到目前為止,我們只有一個特征:在特定的時間特定的商店中為特定產品銷售的產品數量。這可能已經足以進行穩健和精確的預測,但是我們還可以從其他數據源添加額外的有用信息。
例如,飲料購買行為很可能取決于天氣。例如,在非常炎熱的夏天,對檸檬水的需求可能會增加。我們可以提供天氣數據(如氣溫)作為矩陣的第二層。天氣數據將在與銷售數據相同的上下文(商店位置和產品)中訂購。對于不同的產品,我們將獲得相同的空氣溫度數據。但是,對于不同的時間和商店位置,我們將看到還是存在差異的,這可能會為數據提供有用的信息。
如此一來,我們就擁有了一個進一步包含銷售額和溫度數據的三維矩陣。需要注意的是,我們沒有通過包括溫度數據來添加額外的上下文維度。正如我之前指出的,當數據以某種方式排序時,上下文就會出現。對于我們建立的數據上下文,我們根據時間、產品相似性和商店相似性對數據進行排序。然而,特征的順序(在我們的例子中,是指沿著矩陣的第三維度)是不相關的。其實,我們的數據結構與RGB彩色圖像相當。在RGB圖像中,我們有兩個上下文維度(空間維度x和y)和三個顏色層(紅、綠、藍)。為了正確解釋圖像,顏色通道的順序是任意的。一旦你定義了它,你就必須保持它的順序。但是對于在特定上下文中組織的數據,我們沒有距離指標。
總之,輸入數據的結構不是預先能夠確定的。因此,我們應該充分發揮自己的創造力和直覺來挖掘新的可行性指標了。
總結
通過向時間分辨的銷售數據添加兩個附加上下文和一個附加的特征層,我們獲得了具有兩個“通道”(銷售和溫度)的二維“圖片”。該數據結構提供了特定商店最近檸檬水銷售的綜合視圖,以及來自類似商店和類似產品的銷售和天氣信息。到目前為止,我們創建的數據結構非常適合由深度神經網絡進行解釋——例如,包含多個卷積層和LSTM單元。但是限于篇幅,我不打算討論如何以此為基礎開始設計一個合適的神經網絡。這可能是我的后續文章的主題了。
我希望你能夠擁有自己的想法,雖然你的輸入數據的結構可能不是預先確定的,但你可以(應該)發揮你所有的創造力和直覺來擴展它。
一般來說,上下文豐富的數據結構可不是免費提供的。為了預測公司所有門店的各種產品,我們需要生成數千個上下文豐富的銷售概況信息(每個門店產品組合一個矩陣)。您必須投入大量的額外工作來設計有效的處理和緩沖措施,以使數據成為您需要的形式,并為后續的神經網絡快速訓練和預測周期提供需要的數據。當然,這樣一來,你會得到一個期望的深度學習模型,它可以做出準確的預測,即使在高噪聲數據下也能表現得非常穩健,因為它可以看起來能夠“打破常規”,并做出非常明智的決定。
譯者介紹
朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:??Context-Enriched Data: The Secret Superpower for Your Deep Learning Model??,作者:Christoph M?hl