選自Sentiance,機器之心編譯。
資料科學公司 Sentiance 近日刊文介紹了新機器學習演算法平臺,該平臺能以自監督的方式學習位置資料並從中提取見解。機器之心對該文章進行了編譯介紹。
引言
我們 Sentiance 開發了一款能接收加速度計、陀螺儀和位置資訊等智慧手機感測器資料並從中提取出行為見解的平臺。我們的人工智慧平臺能學習使用者的模式,並能預測和解釋事情發生的原因和時間,這讓我們的客戶能夠在正確的時間以合適的方式指導他們的使用者。
場地對映演算法(venue mapping algorithm)是我們的平臺的一個重要元件。場地對映演算法的目標是根據來自智慧手機位置子系統的往往不準確的位置測量資料,搞清楚你將要到達的場地。
圖 1:左圖:場地對映的意思是估計使用者實際正在前往的臨近場地;右圖:人類直覺能幫助我們快速排除不太可能的場地,比如一位使用者正去往海灘時不太可能去救生站。
儘管場地對映總體上是一大難題,而且也是我們未來一篇部落格文章的主要內容,但基於該地區周圍地理情況的人類直覺卻能輕鬆簡單地處理。如圖 1 所示,假設一位使用者正前往聖莫尼卡海灘。只需看一眼周圍的地理情況,我們就知道該使用者實際正前往求生站的概率可能相當小。
事實上,只需要看一眼這個區域的地圖,人類往往就能快速排除不太可能的場地並構建一個實際情況的預先信念。這個場地位於工業區、公園、靠近海灘、市中心還是公路旁邊?
為了讓我們的場地對映演算法具備同樣的直覺意識,我們開發了一種基於深度學習的解決方案,其可訓練用於編碼地理空間關係和描述位置周圍情況的語義相似度的模型。圖 2 是這一概念的圖示。
圖 2:給定位置周圍的區域會被柵格化(rasterized),然後被傳遞給一個深度神經網路。這個網路用作編碼器,輸出一個能獲取輸入位置的高層語義的嵌入。
編碼器會將位置轉換成分散式的表徵,這類似於 Word2Vec [1] 對自然語言所做的工作。這些嵌入位於一個度量空間中,因此遵循代數規則。比如,我們可以使用詞嵌入推理詞的相似度和類比關係。我們甚至可以直接在嵌入空間中執行「國王-男人+女人=女王」這樣的算術運算。
在接下來的幾段中,我們將會討論我們如何設計了一種解決方案,可學習將位置座標對映到度量空間中,這讓我們可以執行一些類似於詞嵌入的操作,如圖 3 所示。
圖 3:我們提出的解決方案可直接優化度量空間,這樣就能使用基本的算術運算探索該嵌入空間了。
影象瓦片生成
柵格化 GIS 資料
給定一個位置座標和一個半徑,我們可以查詢我們的 GIS 資料庫以獲取大量地理資訊。我們的 GIS 資料庫是一個儲存在一個 PostGis 資料庫中的 OpenStreetMap 的本地副本。PostGis 是一個很方便的 PostgreSQL 擴充套件,增加了對空間運算子、型別和索引的支援。
比如,我們可以使用一組查詢輕鬆檢查一個定位附近是否有河流、這裡離最近的火車站有多遠,這個位置附近是否存在道路。此外,實際道路本身可以以折線的形式被提取出來,同時火車站建築的外形輪廓可被提取成一個多邊形物件。
但是,我們不清楚如何將這樣大量的非結構化資料有效地提供給神經網路進一步處理。考慮到我們訓練神經網路的目標是理解距離、包含、遮擋和相離等形狀和空間關係,所以我們決定在將位置的周邊情況送入編碼器之前首先將其柵格化處理成固定尺寸的影象。
幸運的是,我們正好有能做到這一點的有效工具。我們將 Mapnik 及其 Python 捆綁包與一個定製版本的 OpenStreetmap-Carto 樣式表組合到了一起,得到了一個快速柵格化器(rasterizer),我們可以將其用於生成影象瓦片(image tile),如圖 4 所示。
- Mapnik:github.com/mapnik/mapn…
- OpenStreetmap-Carto:github.com/gravitystor…
圖 4:Mapnik 被用於將從 PostGis 取出的 GIS 資料柵格化處理成影象
我們將我們的柵格化服務進行了引數化,以便在生成影象瓦片之前輕鬆地通過旋轉和平移地圖來執行資料增強。如圖 5 所示,其中的影象塊展示了同一個位置,只是有不同方向角和水平及垂直偏移值。
圖 5:我們的影象瓦片生成器允許在生成影象瓦片之前通過旋轉和平移地圖來輕鬆執行資料增強
從影象到張量
儘管這些柵格化得到的影象瓦片讓我們的編碼器可以輕鬆學習獲取空間結構和關係,但仍有大量資訊在柵格化過程中丟失。事實上,柵格化會將道路、建築、公園輪廓、河流等所有的多邊形和折線段融合到一起。因為我們的 GIS 資料庫包含每個結構單獨的資訊,所以讓神經網路編碼器來學習分割它們實在就沒有必要了。
因此,我們不是將資料柵格化成三通道的 RGB 影象,而是如上圖所示對該柵格化器進行了修改,讓其生成一個 12 通道的張量,其中每個通道都包含了一種不同型別的柵格化後的資訊。圖 6 展示了這樣一個 12 通道的張量,其座標與圖 5 的一樣。
圖 6:一個 12 通道張量被用於表示該區域。每個通道都包含一種特定資訊,比如道路網路、土地(包含綠地、水域等)、便利設施等
為便於人眼觀察,本文的後續內容基本都展示 RGB 柵格化版本,而非 12 通道的張量。
表徵學習
空間相似度
我們的目標是學習一個度量空間,其中語義相似的影象塊對應於該空間中互相接近的嵌入向量。然後問題就變成了如何定義「語義相似」。
一種簡單直接的獲取相似度空間的方法是使用直方圖表示每個影象塊,使用 k-均值聚類,再使用一個詞袋模型建模該空間。但是,我們仍然不清楚每個通道應該具有怎樣的權重。比如,如果道路相似,但建築不相似,那麼兩個影象塊是否語義相似?
此外,即使兩個影象塊有相似的直方圖,這也不能為我們提供任何有關該位置周邊情況的空間結構資訊。假設一個影象塊中一半都被海洋覆蓋,那麼這個影象塊是否與包含大量小池塘、湖泊或噴泉的影象塊語義相似?圖 7 給出了兩個能得到幾乎完全一樣的直方圖的影象塊:
圖 7:基於直方圖的聚類不足以得到語義相似度和空間關係。這兩張影象有幾乎完全一樣的直方圖,但它們的語義含義差別相當大。
但是,這些影象塊的語義並不一樣。第一個影象塊是一個交叉路口區域,第二個影象塊則是某些可能通向居民房屋的小型道路。實際上在我們的嵌入空間中,我們發現這兩個影象塊的嵌入之間的歐幾里德距離其實相當大,即使它們的直方圖之間的卡方距離(Chi-Square distance)接近於零。
除了使用直方圖,每個通道都可以通過一組特徵來歸納總結以獲取空間關係,比如有向梯度直方圖(HoG)或者更傳統的 SIFT 或 SURF 描述符。但是,我們沒有試圖人工指定哪些特徵定義了語義相似度,我們決定使用深度學習的力量來學習自動檢測有意義的特徵。
為了做到這一點,我們將這種 12 通道張量輸入到了一個用作我們的編碼器的卷積神經網路中。該網路使用一個三重損失函式(triplet loss function)以自監督的形式進行訓練,這意味著在訓練過程中無需人工標註的資料。
自監督學習:三重網路
三重損失概念的靈感源自孿生網路(siamese network)架構,這是 Ailon et al. [2] 為無監督特徵學習執行深度度量學習而提出的一種方法。
三重網路是一種使用三元組 進行訓練的神經網路架構,其中包括:
- 一個錨例項 x
- 一個與 x 語義近似的正例項 x+
- 一個與 x 語義不同的負例項 x-
然後訓練該網路,使其學習一個嵌入函式 f(.),使得,從而直接優化度量空間。如圖 8 所示。
圖 8:三重網路是使用一個三重損失訓練的,這樣在學習到的度量空間中,相似的例項彼此更為接近,不相似的例項則相距更遠。
使用三重網路的度量學習因谷歌的 FaceNet [3] 而變得更為流行,其中使用了三重損失來學習人臉影象的嵌入空間,這樣相似人臉的嵌入就更為接近,不同人臉的嵌入則距離更遠。
對人臉識別而言,正例影象是來自錨影象中同一人的影象,而負例影象則是從 mini-batch 中隨機選擇的人的影象。但是,我們這個案例卻沒有能輕鬆選擇正例項和負例項的分類。
為了定義語義相似度,我們可以使用託伯勒提出的「地理學第一定律」:「在地表空間中,所有事物是相互聯絡的,但是距離近的事物比距離遠的事物間的聯絡更密切。」
下面,設 I(.) 是從位置座標到柵格化影象塊的對映。對於位置 X,給定一個在柵格化影象塊之前執行的旋轉和平移變換 T(.),再給定一個隨機位置 Y,且 X≠Y,那麼我們可以得到我們的三元組:
- x=I(X)
- x^+=I(T(x))
- x^-=I(Y)
因此,我們假設兩個地理上鄰近且存在部分重疊的影象塊在語義上比兩個完全不同的影象塊更相關。圖 9 給出了兩個三元組示例,這兩個三元組的錨影象是一樣的。
圖 9:由一張錨影象、一張正例影象和一張負例影象構成的三元組
為了防止神經網路只學習到簡單的變換,我們還在訓練過程中為每個正例項隨機啟動或禁用了 12 個通道中的某些通道。這會迫使網路認為正例影象塊與錨影象是近似的,即使該資訊的某個隨機子集是不同的(比如沒有建築、沒有道路等)。
SoftPN 三重損失函式
圖 10 展示了我們的三重網路的一般結構。
圖 10:這個三重損失直接優化「錨嵌入和正例嵌入之間的距離」與「錨嵌入和負例嵌入之間的距離」的比
這個損失函式定義為,這樣優化網路就對應於最小化向量 相比於向量 (0,1) 的均方誤差(MSE)。
我們為什麼這樣定義損失函式?考慮到我們希望 Δ(a,p) 儘可能地接近於零,同時我們又希望 Δ(a,n) 儘可能大。為了優化這個比值,我們在這兩個距離上都應用了一個 SoftMax,以得到這個域的有界相似度:
這種三重損失的定義往往被稱為 SoftMax 比,並且最早是由 Ailon et al. [2] 提出的。
這個定義的主要問題是網路很容易快速學習到一個 d_ 接近於 1 的嵌入空間,這是因為大多數隨機負例影象與錨影象有非常大的差異。因此,大多數 (a,n) 對都對優化過程中的梯度作用不大,這會導致網路很快停止學習。
有不同的方法可以解決這個問題,其中之一是高難負例挖掘(hard-negative mining)[3],即仔細選擇 (a,n) 對以確保網路保持學習。但是,在我們的情況中,我們並不清楚如何有效選擇高難負例,同時又不向學習過程引入偏差。使用 Balntas et al [4] 提出的 SoftPN 三重損失函式是一種更簡單的解決方案。
這種 SoftPN 損失會使用 min(Δ(a,n),Δ(p,n)) 替代上述 SoftMax 計算中的 Δ(a,n)。其效果是,在優化過程中,該網路會嘗試學習一個度量空間,其中錨嵌入和正例嵌入都離負例嵌入儘可能地遠。相對而言,原來的 SoftMax 比值損失僅考慮了錨嵌入和負例嵌入之間的距離。圖 11 展示了這兩者的差異。
圖 11:SoftPN 損失優化這個更困難問題的方式是最大化負例嵌入與錨嵌入和正例嵌入兩者之間的最小距離
神經網路架構
我們使用了一個相當傳統的卷積神經網路架構作為編碼器,其中包含 5 個過濾器大小為 3×3 的卷積層,之後是兩層 1D 卷積和一個密集連線層。使用一維卷積的目的是通過跨通道引數池化(cross-channel parametric pooling)[5] 降低通向網路頂部的維度。
而嵌入層本身也是由另一個帶有線性啟用函式的密集層構成的,這樣,經過其前一層的非線性之後,其輸出就不會一直被侷限在正例域內。圖 12 給出了其完整的網路架構。
圖 12:這個編碼器包含一個卷積神經網路,後面跟著一個全連線層。最後的嵌入層是一個帶有線性啟用函式的密集層
我們積極使用了 dropout 和批歸一化,並使用了 Leaky ReLU 啟用函式以避免在初始測試執行中觀察到的 ReLU 死亡問題。
此外,我們還在輸入上直接應用了空間 dropout。這會導致一個隨機選出的輸入通道被完全丟棄,這能迫使網路通過關注不同的通道來學習區分影象。
完整網路是用 Keras 實現的,僅包含 305 040 個引數,並且使用 Adam 優化器在 p3.2xlarge AWS 機器上訓練了兩週時間。
訓練資料
為了生成我們的訓練資料,我們在我們的平臺上取出了使用者去過的 100 萬個位置,並且新增了大約 50 萬個使用者在交通工具中的位置定位。
對於這 150 萬個位置,每一個我們都柵格化得到了一個尺寸為 128x128x12 的影象瓦片,代表該位置周圍半徑 100 米的區域。這些張量用作錨影象。
對於每個位置,我們還柵格化了 20 張隨機平移和旋轉的影象瓦片,這些用作正例影象。偏移量是在 0 到 80 米之間均勻取樣的,而且水平和垂直方向都有。這樣,每個位置會得到 20 對(錨影象,正例影象),總共就是 3000 萬張影象。
三元組在網路訓練過程中生成,同時生成 mini-batch。每個 mini-batch 包含 20 個位置。對於每個位置,我們隨機選出 5 對(錨影象,正例影象)來得到錨-正例距離的有意義表徵。負例影象在每個 mini-batch 內隨機選擇,這樣每個 mini-batch 的大小即為 100。
在訓練過程中同時生成三元組 mini-batch 實際上就能得到近乎無限大的不同三元組資料集,這能讓網路不斷學習很多個 epoch。
視覺化過濾器和啟用
因為這個嵌入空間是以一種自監督的方式學習到的,沒有標註資料,所以難以在訓練過程中監控網路是否真正學到了什麼東西。
視覺化網路學習到的過濾器是一種不充分但仍然有用的方法。實際上,我們希望視覺化最大化網路中不同層的啟用的輸入影象。為了做到這一點,我們可以從一張隨機生成的影象開始,並且將每個畫素都看作是一個有待優化的引數。然後我們使用梯度上升更新影象畫素,這樣它就能最大化所選擇的層的輸出。
根據這個卷積層的平均輸出啟用計算輸入影象的梯度並迭代執行梯度上升幾次,就能得到突出該層中最相關的結構的影象。
因為我們的輸入是一個 12 通道的張量,不是 RGB 影象,所以我們只選擇其中 3 個有最高平均畫素幅度的通道並將它們排列成 RGB 影象。我們對每個通道應用了直方圖均衡化(histogram equalization),以進一步增強視覺細節。
圖 13 展示了網路的一個底層的 32 個過濾器中每一個的結果。很顯然,這一層看起來關注的是道路和小塊結構等低階細節。
圖 13:網路的底層學習的是檢測道路和小塊結構等低階細節
圖 14 視覺化了一個更高層的 64 個過濾器。這些過濾器顯然會被更平滑且更復雜的結構啟用,這說明網路確實可能正在學習其輸入的一種分層的特徵分解。
圖 14:網路的更上層往往能通過組合來自更低層的低階特徵而學習更復雜的結構
儘管這些視覺化的用途不應被高估,但它們看起來很有意思,尤其是在很多研究迭代過程中時。比如,早期的版本很快就為我們指出了正確的方向,讓我們發現了我們網路中的一堆死掉的 ReLU。後面我們通過用 Leaky ReLU 啟用函式來替換而解決了這個問題。
探索度量空間
視覺化嵌入
在除錯網路時,視覺化網路學習到的過濾器確實很有意思,但在評價所學習到的嵌入空間的質量方面用處不大。
為了搞清楚嵌入空間看起來如何,圖 15 展示了使用 PCA 將維度降至三維之後的嵌入空間。為便於理解,每一個位置嵌入都在圖中用其柵格化影象瓦片表示。
圖 15:通過 PCA 得到的嵌入空間的 3D 圖
這清楚地表明,即使只有前三個主成分,也能得到大量相關資訊。公園等綠色區域、公路和主幹道等不同道路型別、以及圖中右下角的城市中心等區域有明顯區別。
為了更清楚地展示這些區域性結構,圖 16 給出了該嵌入空間的三維 t-SNE 動畫。
圖 16:通過 t-SNE 得到的嵌入空間的 3D 圖
儘管場地對映是這些嵌入的一大明顯用例,但它們也可被我們交通方式分類器使用。圖 17 展示了從我們的交通方式分類訓練集(goo.gl/VhwuwS)提取出的定位的嵌入的散點圖。在這個案例中,我們使用了線性判別分析(LDA:Linear Discriminant Analysis)將 16 維的嵌入空間投射成了 2 維。
圖 17:在乘坐交通工具期間收集的航路點的嵌入空間的 2D LDA
這張圖表明不同的交通模式通常出現在不同的地區。比如,我們的嵌入得到了有關火車軌道或電車站的資訊。
為了展示被編碼的地理區域的差異有多大,我們使用 PCA 將這個 16 維嵌入降維到了 3 維,這在比例調整之後被直接用作了 RGB 顏色值,從而可將我們的測試資料集繪製到一張地圖上。圖 18 給出了結果,這是在英國倫敦。可以清楚地看到,市中心、公路、水域、旅遊區和居民區的編碼都不一樣。
圖 18:在英國倫敦隨機取樣的位置的嵌入。這裡的顏色是使用 PCA 將 16D 嵌入向量降維至 3D RGB 三元組而得到的。
我們也對英國伯明翰執行了類似的操作,可以看到伯明翰的郊區比倫敦更大,而倫敦周圍的區域包含多得多的建築。如圖 19 所示。
圖 19:在英國伯明翰隨機取樣的位置的嵌入。這裡的顏色是使用 PCA 將 16D 嵌入向量降維至 3D RGB 三元組而得到的。
在空間中隨機遊走
為了進一步檢查該嵌入空間的平滑性,我們可以從一個隨機種子點(seed point)開始執行隨機遊走。在每次跳躍時,我們都隨機選擇一個當前嵌入的 k-最近鄰並視覺化對應的影象塊。
圖 20 展示了幾個這種隨機遊走的結果。注意,大多數情況下,在該嵌入空間中的最近鄰在地理位置上都遠離彼此數百或數千公里,但它們有很高的語義相似度。
圖 20:在該嵌入空間中的 6 次隨機遊走結果,每一次都從一個不同的種子點開始。
使用位置進行計算
儘管上述視覺化結果表明所學習到的嵌入空間是平滑的且學會了獲取語義相似性,但它不能證明我們實際上學習到了一個歐幾里德度量空間。在一個歐幾里德度量空間中,我們應該可以在嵌入之間進行插值並執行基本的算術運算,同時得到有意義的結果。
圖 21 從左到右展示了在兩個嵌入之間的插值結果。在插值的每一步,所得到的嵌入都被對映到了其在我們的測試資料中的最近鄰嵌入;這裡展示了其對應的影象瓦片。
圖 21:從一個嵌入(左)到另一個嵌入(右)的插值,其中展示了每個中間步驟的來自我們的測試資料的最近鄰影象。
最後,圖 22 展示了我們對嵌入進行加減運算所得到的結果,同樣,這些影象結果是來自測試資料的對應最近鄰影象。
圖 22:使用嵌入進行計算,並將結果對映回我們測試資料中的最近鄰影象
這些結果表明我們的嵌入空間表示的度量空間中的距離實際上具有含義以及基本算術規則
因為這個度量空間是以一種自監督的方式訓練的,所以可以使用大量無標註資料來強制網路學習獲取有意義的關係。因此,使用這些嵌入作為我們後續分類器中的特徵向量,就對應於一種形式的遷移學習,這讓我們可以使用非常有限量的有標註資料訓練強大的分類器。
總結
在這篇文章中,我們展示了可以如何使用三重網路來學習能獲取不同地理位置座標之間的語義相似度的度量空間。
我們訓練了一個卷積神經網路來學習提取定義這個語義相似度的特徵,並使用度量學習的方法得到了一個嵌入空間。
所得到的嵌入空間可被直接用於場地對映或交通方式分類等任務,並能通過遷移學習的方式幫助我們極大提升我們的分類器準確度和泛化能力。
此外,這些嵌入還能為我們的分類器增加一定的直覺,因此不正確的分類結果仍具有直覺意義。比如,場地對映器可以快速學習將白天和夜晚的活動與工業區、市中心、公園、火車站等特定區域聯絡起來。
如果你想了解有關我們平臺的更多資訊並自己動手嘗試,可聯絡我們或下載我們的演示應用 Journeys:www.sentiance.com/demo
參考文獻
- [1] Mikolov, Tomas, et al.「Efficient estimation of word representations in vector space.」arXiv preprint arXiv:1301.3781 (2013).
- [2] Hoffer, Elad, and Nir Ailon.「Deep metric learning using triplet network.」International Workshop on Similarity-Based Pattern Recognition. Springer, Cham, 2015.
- [3] Schroff, Florian, Dmitry Kalenichenko, and James Philbin.「Facenet: A unified embedding for face recognition and clustering.」Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
- [4] Balntas, Vassileios, et al.「PN-Net: Conjoined triple deep network for learning local image descriptors.」arXiv preprint arXiv:1601.05030 (2016).
- [5] Lin, Min, Qiang Chen, and Shuicheng Yan.「Network in network.」arXiv preprint arXiv:1312.4400 (2013).
原文連線:www.sentiance.com/2018/05/03/…