使用TensorFlow實現寬深學習

banq發表於2016-06-30
人類是一個複雜的學習機器,可以透過記憶日常事件歸納形成規則,
比如麻雀會飛和鴿子會飛,歸納這些學習來的資訊就可以應用到我們以前沒有看到的事物,比如帶有翅膀的動物會飛。而且能夠更強大,記憶也允許我們使用意外來提煉通用規則,比如企鵝不會飛。

如今我們正在進入增強的機器智慧時代,我們詢問自己問題:我們能教會計算機像人這樣學習嗎?透過結合記憶和歸納的強大力量?

這不是很容易回答,但是將一個寬泛的線性模型(等同於記憶)
訓練在一個深度神經網路中(等同於歸納),從而結合雙方優勢,正在步步接近我們的目標,在谷歌,我們稱之為寬且深學習(Wide & Deep Learning),這對於通用大規模帶有稀疏輸入(帶有大量可能特徵值的分類特徵)的迴歸和分類問題是有用的。比如推薦系統 搜尋和排名問題。

具體教程見:Wide & Deep Learning

讓我們看看寬深學習是如何工作的?
比方說,有一天你醒來時,有了一個新應用Foodio的主意,這個應用app的使用者需要大聲說出他渴望的是什麼樣的食物(根據食物名稱進行匹配查詢),這個應用app神奇地預測使用者最喜歡的菜,並將菜送到使用者的門口(條目),您的關鍵指標是消費率:如果一個菜被使用者吃了,那麼分數是1,否則是0。(標籤)

開始有一些簡單規則,使用者查詢食物名時,能夠像返回匹配食物名稱中大多數字符的食物。你釋出了FoodIO第一個版本,不幸的是你發現消費率非常低,因為這種匹配方式太粗糙,並沒有什麼用,比如人們喊出“炸雞”,你卻匹配查詢得到“雞炒米飯”,這樣你決定使用機器學習來學習更多資料。

在第二個版本中,你想記住那些每次查詢中最好的食物,這樣你在TensorFlow中訓練一個線性模型,使用的是一個寬泛的跨產品
特徵,根據目標標籤(也就是這個食物是否被真正購買消費了),你試圖截獲和目標標籤相關的共同的各種食物,這個模型會預測消費的可能性,對於每個食物,FoodIO會傳遞預測消費率最高的食物,比如模型學習特徵AND(query="炸雞", item="雞肉和雞蛋餅") 會取勝,而AND(query="炸雞", item="雞炒米飯") 卻實際不會有人要,儘管查詢時從字元匹配上看最吻合(英文fried chicken和chicken fried rice兩個名詞最相似)。

也就是說,你的FoodIO 2.0版本會在記憶使用者喜歡什麼食物上做得很好了。

下面再看看深度模型:
後來你會發現很多使用者反映他們已經厭倦了推薦,他們急於發現相似但不同可以讓人驚喜的菜餚,這時,你又開始刷你的Tensorflow工具包再訓練一個深度feed-forward前饋神經網路,從而開始升級到FoodIO 3.0。使用你的深度模型,你透過對美國次查詢和食物讓其學習低維密集的特徵資料,通常稱為嵌入向量,這樣,FoodIO能夠透過匹配食物給那些彼此接近的查詢,比如你發現人們查詢要求‘炸雞’時經常介意是否有漢堡包。

好了,現在是結合寬泛和深入的模型了。
你發現深度神經網路有時會歸納太多並推薦不相干的菜餚,你翻開歷史流量資料,會發現實際上在查詢條目query-item關係上實際上有清晰的兩個型別。

第一個查詢型別是非常目標化的,人們喊出非常具體的條目如“脫脂牛奶的無咖啡因的拿鐵咖啡加冰”,只是因為在嵌入空間中,它非常接近於“熱拿鐵咖啡全脂牛奶”,但是並不代表後者就是使用者能夠接受的。有數百萬這樣規則弊大於利。

另外,類似“海鮮”或“義大利食品”查詢更具有探索性,也許會開啟更多歸納,發現相關一系列菜餚,有了這些以後,你會頓悟,為什麼我們選擇寬泛或者深度模型,而不是深度且寬泛的模型呢?

最後,你使用寬且深學習模型開發了FoodIO 4.0,稀疏特徵像query="炸雞fried chicken" and item="雞炒米飯chicken fried rice"既可以用在寬度也可以用在深度兩邊模型中,在這樣訓練中,預測錯誤會被反饋到兩邊來訓練兩邊的引數,在寬度模型中跨特徵轉換能夠記憶那些稀疏具體的規則,而深度模型元件能夠透過嵌入embeddings歸納相似的食物條目。

Research Blog: Wide & Deep Learning: Better Togeth

相關文章