歡迎大家前往騰訊雲技術社區,獲取更多騰訊海量技術實踐干貨哦~
作者:蘇博覽
深度學習應該這一兩年計算機圈子里最熱的一個詞了。基於深度學習,工程師們在圖像,語音,NLP等領域都取得了令人振奮的進展。而深度學習本身也在不斷的探索和發展中,其潛力的極限目前還沒有被看到。
當然,深度學習也不是萬能的,比如有很多問題的特征是易於提取的,我們可以直接使用SVM, 決策樹的算法來取得很好的結果。而深度學習並不能提供太多的幫助。還有一些問題,我們並沒有足夠數量的數據,我們也很難通過深度學習算法來得到可用的模型。此外,有些問題對計算資源和時間的要求比較嚴苛,在深度學習小型化沒有取得突破性進展的時候,它們也不是首選方法。
判斷一個項目適不適合上深度學習的正確姿勢
( 圖片來源 : 深度學習防騙指南 )
反過來說,雖然目前深度學習在個性化推薦,計算廣告領域上還沒有很大的突破,但是我認為推薦系統有很大概率會是深度學習的最重要的應用場景之一。理由有以下幾個方面:
- 現在的推薦系統都要面對海量的數據,要提取上萬乃至上億維的特征。而深度學習本身就是一個很好的表示學習的框架,從海量的數據中學習到人類無法提取的特征組合,是其擅長的事情。
( 圖片來源 : 深度學習防騙指南 )
- 數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。現有的推薦系統依賴於特征工程的效果。而特征工程建立在不斷的深入理解問題和獲取額外的數據源上。然而根據數據人能抽象出來的特征總類很有限,新數據源和新特征的獲得會越來越難。隨着人工特征工程的深入,投入的人力和時間越來越長,得到的新特征對系統的提升卻越來越少。這個時候,使用深度學習來做特征表達,在成本上也許是一個更好的選擇。
圖:IBM Watson系統的精度提升曲線。可以看到一開始的時候結果提升的特別快,后面一點點的提升都要付出很大的努力,
因此我們基於Tensorflow在某個業務上做了DNN的嘗試,跑通了整個流程,積累了一些經驗。也比原有LR的模型在線上有了20%多的提升。希望這些代碼也可以幫助各位同學快速的在自己的業務上實現一套深度模型的框架。
圖: DNN在CTR預估的一般框架
一般來說,我們可以先選擇一個比較簡單的框架來跑通整個流程,然后再慢慢增加模型的復雜度。通常我們可以選用下圖的框架,把我們用到的數據分為兩類:連續的,和離散的特征。
對於連續的特征,需要做一些歸一化;對於離散的特征,則一般要做一個Embedding,把一個離散的特征轉成一個N維的向量。這個向量的長度一般來說是和該向量的取值空間成正比的。這個embedding的過程可以用FM來實現。 在我們的代碼里,是通過Tensorflow自動embedding_column實現的。
所以把用戶數據和推薦的物品數據放一起分成兩類,然后把embedded之后的離散特征 和 連續特征組合在一起,作為神經網絡的輸入,輸出就是[0,1] 是否點擊。這里面我們就直接調用tensorflow的DNNClassifier。這個網絡可以設計層數,每層的大小,dropout, 激活函數,學習率等等。
opt = tf.train.AdamOptimizer(learning_rate=0.01, beta1=0.9, beta2=0.999) # default 0.001 0.9 0.999 m = tf.contrib.learn.DNNClassifier(model_dir=model_dir, feature_columns=deep_columns, hidden_units=[1024, 512, 256], optimizer = opt, activation_fn=tf.nn.relu, # default dropout=0.05 )
所以后面就是一個不斷調參的過程,當然這個調參也是有一些技巧。網上有很多,在這里就不一一來說了。
深度學習調參師
( 圖片來源 : 深度學習防騙指南 )
總的來說,深度學習沒有那么神秘,它是一個很有效的工具。在個性化推薦上應該已經有很多團隊進行了很多嘗試。在這里,我們給出了一個簡單和有效的基於Tensorflow的實現方式,也希望可以幫助一些想要嘗試深度學習的一些團隊。
( 圖片來源 : 李沐 來一起動手學深度學習吧 )
相關閱讀
[ I am Jarvis ] :聊聊 FaceID 背后的深度學習視覺算法
深度學習的異構加速技術(一)效率因通用而怠,構架為 AI 而生
此文已由作者授權騰訊雲技術社區發布,轉載請注明文章出處
原文鏈接:https://cloud.tencent.com/community/article/603674