谷歌發布TensorFlow 1.4與Lattice:利用先驗知識提升模型準確度
機器之心編譯
選自:Google Research Blog
參與:李澤南、路雪
昨天,谷歌發布了 TensorFlow 1.4.0 先行版,將 tf.data 等功能加入了 API。同時發布的還有 TensorFlow Lattice,這家公司希望通過新的工具讓開發者們的模型更加準確。
TensorFlow 1.4.0 先行版更新說明:https://github.com/tensorflow/tensorflow/releases/tag/v1.4.0-rc0
TensorFlow Lattice 項目鏈接:https://github.com/tensorflow/lattice
機器學習已經在很多領域取得了巨大成功,如自然語言處理、計算機視覺和推薦系統,它們都利用了高度靈活的模型捕捉複雜的輸入/輸出關係。然而,我們還面臨著語義輸入與全局關係之間的問題,像「如果路上堵車,開車通勤的時間就會變長,其他方式也是一樣。」一些靈活的模型如 DNN 和隨機森林無法學習這種關係,可能會無法泛化至不同樣本分布的樣本。
針對這種問題,谷歌提出了 TensorFlow Lattice,它包含一套易於使用的預製 TensorFlow 估算器,以及 TensorFlow 運算符(operator),可用於構建你的點陣模型。Lattice 是多維度內插值查找表-,類似於幾何教科書中近似正弦函數的查找表-。通過查找表結構,我們可以通過鍵入多個輸入來逼近任意靈活的關係,以滿足你指定的單調函數關係來讓泛化更好。這意味著,查找表中的值可以最小化訓練樣本的損失,但是,查找表中的相鄰值被約束以沿著輸入空間的給定方向增加,這讓模型在這些方向上的輸出也有所增加。重要的是,由於它們在查找表值之間插值,所以 Lattice 模型是平滑的,預測也是有界的,這有助於在測試時間內避免失真的過大或過小預測。
假設你正在設計一個向用戶推薦臨近咖啡廳的系統。你肯定需要模型學會「如果兩家咖啡廳是連鎖的,推薦更近的一家。」下圖展示了準確地與部分東京用戶(紫色)訓練數據匹配的靈活模型(粉色)示例,在那個城市有很多咖啡廳。粉色靈活模型對有雜訊的訓練樣本有些過擬合,與「更近的咖啡廳更好」的原則不符。如果你使用這個模型在德州(藍色)找咖啡廳,你會發現它的行為有些奇怪,有些時候甚至會向你推薦更遠的咖啡廳!
模型的特徵空間——所有其他輸入保持一致,只有距離產生變化。一個與東京訓練樣本(紫色)準確擬合的靈活函數(粉色)預測 10 公里外的咖啡廳要比 5 公里外同樣的咖啡廳更好。如果數據分布產生變化,這個問題還會變的更加明顯,正如德州數據(藍色)所展示的那樣。
單調靈活函數(綠色)在訓練樣本上結果準確,也可以泛化到德州樣本,相比非單調靈活函數(粉色)效果更好。
相比之下,同樣使用東京樣本訓練的 lattice 模型可以接受約束,以滿足這樣的單調關係,得出一個單調靈活函數(monotonic flexible function,綠色)。綠線還能夠準確擬合東京的訓練樣本,且很好地泛化到德州數據,不優先選擇較遠的咖啡廳。
通常,對於每個咖啡廳你可能有很多輸入,如咖啡質量、價格等。靈活模型捕捉全局關係較為困難,「如果所有輸入是一樣的,那麼越近越好。」尤其是訓練數據的部分特徵空間稀疏且有雜訊。能夠獲取先驗知識(如輸入對預測的影響)的機器學習模型在實踐中效果較好,且易於調試、具備更強的可解釋性。
預製 TensorFlow 估算器
谷歌提供了多個 lattice 模型架構,如 TensorFlow 估算器。其中最簡單的估算器是校準線性模型(calibrated linear model),它學習每個特徵的最優 1-d 轉換(使用 1-d lattice),然後把所有校準後的特徵進行線性連接。在訓練數據集非常小或沒有複雜的非線性輸入交互的情況下,這種模型表現很好。另一種估算器是校準 Lattice 模型(calibrated lattice model)。該模型使用兩層的單個 Lattice 模型將校準後的特徵進行非線性連接,可以展現數據集中的複雜非線性交互。校準 Lattice 模型通常適合 2-10 個特徵的情況,如果有 10 個或更多特徵,我們認為使用校準 Lattice 的集合可以幫你獲取最佳結果,你可以使用預製 Ensemble 架構進行訓練。單調 Lattice 集合比隨機森林達到 0.3% - 0.5% 的增益精度 [4],與之前使用單調性的頂尖學習模型相比,這些新型 TensorFlow Lattice 估算器達到 0.1 - 0.4% 的增益精度 [5]。
構建你自己的模型
你或許想使用更深層的 Lattice 網路進行實驗,或使用局部單調函數(partial monotonic function)作為深度神經網路或其他 TensorFlow 架構的一部分。我們提供預構建模塊:用於校準器的 TensorFlow 運算符、Lattice 內插和單調投影(monotonicity projection)。例如,下圖展示了一個 9 層的深度 Lattice 網路 [5]。
9 層深度 lattice 網路架構 [5]、線性嵌入的交互層,以及帶有校準器層的 Lattice 集合(類似神經網路中的多個 ReLU)的示例。藍線代表單調性輸入,該輸入逐層保存,進而為整個模型服務。該架構和其他隨機架構都可以使用 TensorFlow Lattice 構建,因為每一層都是可微的。
除了模型靈活性和標準 L1 和 L2 正則化之外,谷歌還提供使用 TensorFlow Lattice 的新型正則器:
基於輸入(如上所述)的單調性約束(Monotonicity constraint)。
Lattice 上的拉普拉斯正則化,使學得的函數更加平坦。
Torsion 正則化,控制不必要的非線性特徵交互。
谷歌希望 TensorFlow Lattic 能夠對處理有意義的語義輸入的大型社區有所幫助。同時,開發團隊還在致力於研究可解釋性、控制機器學習模型以滿足策略目標、使從業者利用他們的先驗知識,這是其中的一部分。我們很高興能夠與大家分享。查看我們的 GitHub repository(https://github.com/tensorflow/lattice)和教程(https://github.com/tensorflow/lattice/blob/master/g3doc/tutorial/index.md),開始使用吧。
※宣布獲數千萬pre-A輪融資前,中科視拓山世光向我們講述了這一年的探索與收穫 訪
※深度好奇提出文檔解析框架:面向對象的神經規劃
※26種神經網路激活函數可視化
※DeepMind提出Rainbow:整合DQN演算法中的六種變體
※Sundar Pichai 和他的谷歌進化論
TAG:機器之心 |