色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個DCN模型從嵌入和堆積層開始

lviY_AI_shequ ? 來源:未知 ? 作者:李倩 ? 2018-08-09 16:06 ? 次閱讀

1、原理

Deep&Cross Network模型我們下面將簡稱DCN模型:

一個DCN模型從嵌入和堆積層開始,接著是一個交叉網絡和一個與之平行的深度網絡,之后是最后的組合層,它結合了兩個網絡的輸出。完整的網絡模型如圖:

嵌入和堆疊層

我們考慮具有離散和連續特征的輸入數據。在網絡規模推薦系統中,如CTR預測,輸入主要是分類特征,如“country=usa”。這些特征通常是編碼為獨熱向量如“[ 0,1,0 ]”;然而,這往往導致過度的高維特征空間大的詞匯。

為了減少維數,我們采用嵌入過程將這些離散特征轉換成實數值的稠密向量(通常稱為嵌入向量):

然后,我們將嵌入向量與連續特征向量疊加起來形成一個向量:

拼接起來的向量X0將作為我們Cross Network和Deep Network的輸入

Cross Network

交叉網絡的核心思想是以有效的方式應用顯式特征交叉。交叉網絡由交叉層組成,每個層具有以下公式:

一個交叉層的可視化如圖所示:

可以看到,交叉網絡的特殊結構使交叉特征的程度隨著層深度的增加而增大。多項式的最高程度(就輸入X0而言)為L層交叉網絡L + 1。如果用Lc表示交叉層數,d表示輸入維度。然后,參數的數量參與跨網絡參數為:d * Lc * 2 (w和b)

交叉網絡的少數參數限制了模型容量。為了捕捉高度非線性的相互作用,模型并行地引入了一個深度網絡。

Deep Network

深度網絡就是一個全連接的前饋神經網絡,每個深度層具有如下公式:

Combination Layer

鏈接層將兩個并行網絡的輸出連接起來,經過一層全鏈接層得到輸出:

如果采用的是對數損失函數,那么損失函數形式如下:

總結

DCN能夠有效地捕獲有限度的有效特征的相互作用,學會高度非線性的相互作用,不需要人工特征工程或遍歷搜索,并具有較低的計算成本。論文的主要貢獻包括:

1)提出了一種新的交叉網絡,在每個層上明確地應用特征交叉,有效地學習有界度的預測交叉特征,并且不需要手工特征工程或窮舉搜索。2)跨網絡簡單而有效。通過設計,各層的多項式級數最高,并由層深度決定。網絡由所有的交叉項組成,它們的系數各不相同。3)跨網絡內存高效,易于實現。4)實驗結果表明,交叉網絡(DCN)在LogLoss上與DNN相比少了近一個量級的參數量。

這個是從論文中翻譯過來的,哈哈。

2、實現解析

本文的代碼根據之前DeepFM的代碼進行改進,我們只介紹模型的實現部分,其他數據處理的細節大家可以參考我的github上的代碼:

https://github.com/princewen/tensorflow_practice/tree/master/Basic-DCN-Demo

數據下載地址:

https://www.kaggle.com/c/porto-seguro-safe-driver-prediction

不去下載也沒關系,我在github上保留了幾千行的數據用作模型測試。

模型輸入

模型的輸入主要有下面幾個部分:

self.feat_index = tf.placeholder(tf.int32, shape=[None,None], name='feat_index') self.feat_value = tf.placeholder(tf.float32, shape=[None,None], name='feat_value') self.numeric_value = tf.placeholder(tf.float32,[None,None],name='num_value') self.label = tf.placeholder(tf.float32,shape=[None,1],name='label') self.dropout_keep_deep = tf.placeholder(tf.float32,shape=[None],name='dropout_deep_deep')

可以看到,這里與DeepFM相比,一個明顯的變化是將離散特征和連續特征分開,連續特征不再轉換成embedding進行輸入,所以我們的輸入共有五部分。

feat_index是離散特征的一個序號,主要用于通過embedding_lookup選擇我們的embedding。feat_value是對應離散特征的特征值。numeric_value是我們的連續特征值。label是實際值。還定義了dropout來防止過擬合。

權重構建

權重主要包含四部分,embedding層的權重,cross network中的權重,deep network中的權重以及最后鏈接層的權重,我們使用一個字典來表示:

def _initialize_weights(self): weights = dict() #embeddings weights['feature_embeddings'] = tf.Variable( tf.random_normal([self.cate_feature_size,self.embedding_size],0.0,0.01), name='feature_embeddings') weights['feature_bias'] = tf.Variable(tf.random_normal([self.cate_feature_size,1],0.0,1.0),name='feature_bias') #deep layers num_layer = len(self.deep_layers) glorot = np.sqrt(2.0/(self.total_size + self.deep_layers[0])) weights['deep_layer_0'] = tf.Variable( np.random.normal(loc=0,scale=glorot,size=(self.total_size,self.deep_layers[0])),dtype=np.float32 ) weights['deep_bias_0'] = tf.Variable( np.random.normal(loc=0,scale=glorot,size=(1,self.deep_layers[0])),dtype=np.float32 ) for i in range(1,num_layer): glorot = np.sqrt(2.0 / (self.deep_layers[i - 1] + self.deep_layers[i])) weights["deep_layer_%d" % i] = tf.Variable( np.random.normal(loc=0, scale=glorot, size=(self.deep_layers[i - 1], self.deep_layers[i])), dtype=np.float32) # layers[i-1] * layers[i] weights["deep_bias_%d" % i] = tf.Variable( np.random.normal(loc=0, scale=glorot, size=(1, self.deep_layers[i])), dtype=np.float32) # 1 * layer[i] for i in range(self.cross_layer_num): weights["cross_layer_%d" % i] = tf.Variable( np.random.normal(loc=0, scale=glorot, size=(self.total_size,1)), dtype=np.float32) weights["cross_bias_%d" % i] = tf.Variable( np.random.normal(loc=0, scale=glorot, size=(self.total_size,1)), dtype=np.float32) # 1 * layer[i] # final concat projection layer input_size = self.total_size + self.deep_layers[-1] glorot = np.sqrt(2.0/(input_size + 1)) weights['concat_projection'] = tf.Variable(np.random.normal(loc=0,scale=glorot,size=(input_size,1)),dtype=np.float32) weights['concat_bias'] = tf.Variable(tf.constant(0.01),dtype=np.float32) return weights

計算網絡輸入

這一塊我們要計算兩個并行網絡的輸入X0,我們需要將離散特征轉換成embedding,同時拼接上連續特征:

# model self.embeddings = tf.nn.embedding_lookup(self.weights['feature_embeddings'],self.feat_index) # N * F * K feat_value = tf.reshape(self.feat_value,shape=[-1,self.field_size,1]) self.embeddings = tf.multiply(self.embeddings,feat_value) self.x0 = tf.concat([self.numeric_value, tf.reshape(self.embeddings,shape=[-1,self.field_size * self.embedding_size])] ,axis=1)

Cross Network

根據論文中的計算公式,一步步計算得到cross network的輸出:

# cross_part self._x0 = tf.reshape(self.x0, (-1, self.total_size, 1)) x_l = self._x0 for l in range(self.cross_layer_num): x_l = tf.tensordot(tf.matmul(self._x0, x_l, transpose_b=True), self.weights["cross_layer_%d" % l],1) + self.weights["cross_bias_%d" % l] + x_l self.cross_network_out = tf.reshape(x_l, (-1, self.total_size))

Deep Network

這一塊就是一個多層全鏈接神經網絡:

self.y_deep = tf.nn.dropout(self.x0,self.dropout_keep_deep[0]) for i in range(0,len(self.deep_layers)): self.y_deep = tf.add(tf.matmul(self.y_deep,self.weights["deep_layer_%d" %i]), self.weights["deep_bias_%d"%i]) self.y_deep = self.deep_layers_activation(self.y_deep) self.y_deep = tf.nn.dropout(self.y_deep,self.dropout_keep_deep[i+1])

Combination Layer

最后將兩個網絡的輸出拼接起來,經過一層全鏈接得到最終的輸出:

# concat_part concat_input = tf.concat([self.cross_network_out, self.y_deep], axis=1) self.out = tf.add(tf.matmul(concat_input,self.weights['concat_projection']),self.weights['concat_bias'])

定義損失

這里我們可以選擇logloss或者mse,并加上L2正則項:

# loss if self.loss_type == "logloss": self.out = tf.nn.sigmoid(self.out) self.loss = tf.losses.log_loss(self.label, self.out) elif self.loss_type == "mse": self.loss = tf.nn.l2_loss(tf.subtract(self.label, self.out)) # l2 regularization on weights if self.l2_reg > 0: self.loss += tf.contrib.layers.l2_regularizer( self.l2_reg)(self.weights["concat_projection"]) for i in range(len(self.deep_layers)): self.loss += tf.contrib.layers.l2_regularizer( self.l2_reg)(self.weights["deep_layer_%d" % i]) for i in range(self.cross_layer_num): self.loss += tf.contrib.layers.l2_regularizer( self.l2_reg)(self.weights["cross_layer_%d" % i])

剩下的代碼就不介紹啦!

好啦,本文只是提供一個引子,有關DCN的知識大家可以更多的進行學習呦。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4771

    瀏覽量

    100715
  • 交叉網絡
    +關注

    關注

    0

    文章

    3

    瀏覽量

    6044
  • 深度學習
    +關注

    關注

    73

    文章

    5500

    瀏覽量

    121113

原文標題:推薦系統遇上深度學習(五)--Deep&Cross Network模型理論和實踐

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DAQ數據采集2小時左右開始隊列堆積如何處理?

    ,記錄數據的隊列到2小時左右就開始隊列數據堆積,這是程序的問題嗎,還是labview版本不兼容,我用的是2013版的?
    發表于 05-05 12:27

    如何建立simulink模型

    模型嵌入式代碼流程,害怕以后忘記了,特記錄下來。Step1:建立simulink模型Step2:設置求解器參數:2.1選擇離散型,固定
    發表于 12-17 07:58

    嵌入式入門學習該哪里開始

      在互聯網行業中,嵌入式技術后來居上,因為物聯網和人工智能的發展,嵌入式技術越來越值錢,學嵌入式的人也越來越多。面對如此朝陽的行業,我
    發表于 12-17 06:16

    部署基于嵌入的機器學習模型

    1、如何在生產中部署基于嵌入的機器學習模型  由于最近大量的研究,機器學習模型的性能在過去幾年里有了顯著的提高。雖然這些改進的模型開辟了新的可能性,但是它們只有在可以部署到生產應用中時
    發表于 11-02 15:09

    BERT中的嵌入組成以及實現方式介紹

    介紹在本文中,我將解釋BERT中嵌入的實現細節,即token嵌入、Segment嵌入和Position嵌入。簡介這是
    發表于 11-02 15:14

    探索種降低ViT模型訓練成本的方法

    (1 GPU)和時間(24小時)資源下從頭開始訓練ViT模型。首先,提出了種向ViT架構添加局部性的有效方法。其次,開發了種新的圖像大小課程學習策略,該策略允許在訓練
    發表于 11-24 14:56

    博世新品安保DCN會議系統性能分析

    博世安保通訊系統使用全高清自動攝像機控制來提升其DCN會議系統(新DCN和無線DCN)。新的高清解決方案包含
    發表于 12-10 09:26 ?1038次閱讀

    3D打印模型出現錯位的原因與解決方法

    眾多周知,3D打印機是采用逐堆積的方式來完成模型打印的,在這個過程中由于各種因素的影響,而出現的模型錯位也屬正常現象。
    發表于 04-21 14:43 ?2.3w次閱讀

    區塊鏈如何協議開始變得更有用

    一種概念模型,它描述和規范電信或計算系統的通信功能,而不考慮其底層的內部結構和技術。它的目標是使用標準協議的不同通信系統的互操作性。該模型將通信系統劃分為抽象、服務于抽象上面的
    發表于 02-26 11:51 ?853次閱讀
    區塊鏈如何<b class='flag-5'>從</b>協議<b class='flag-5'>層</b><b class='flag-5'>開始</b>變得更有用

    如何解決打印模型出現虛的現象?

    如果你會使用3D打印機,那么你的各種奇思妙將想變成現實,嶄新的DIY世界正向你敞開大門。但是對于些新手朋友,在剛開始使用3D打印機時,打印模型
    的頭像 發表于 06-19 11:15 ?3116次閱讀

    神經網絡模型的優缺點

    神經網絡模型種常見的深度學習模型,它由輸入、兩隱藏
    的頭像 發表于 07-11 10:58 ?566次閱讀

    OSI七模型詳解 OSI七模型與TCP/IP模型比較

    OSI(Open System Interconnect)七模型種將計算機網絡通信協議劃分為七不同層次的標準化框架,每一層都負責不同
    的頭像 發表于 11-24 10:44 ?358次閱讀

    OSI七模型的每一層功能

    開放系統互聯(OSI)模型概念性框架,用于標準化網絡通信過程,以便不同的計算機系統和網絡能夠相互通信。OSI模型分為七,每
    的頭像 發表于 11-24 10:46 ?241次閱讀

    如何理解OSI七模型 OSI七模型在網絡中的應用

    OSI七模型(Open Systems Interconnection Reference Model)是概念性模型,用于標準化網絡通
    的頭像 發表于 11-24 10:48 ?331次閱讀

    OSI七模型中各層的協議 OSI七模型的優勢與不足

    OSI七模型中各層的協議 OSI(Open Systems Interconnection)七模型
    的頭像 發表于 11-24 10:54 ?259次閱讀
    主站蜘蛛池模板: 蜜芽国产在线精品欧美| av av在线| 亚洲AV一宅男色影视| 秋霞鲁丝片Av无码| 嫩草影院久久99| 男欢女爱免费视频| 免费看www视频| 蜜柚视频高清在线| 男男被强bl高h文| 女人一级毛片免费视频观看| 美国CERANETWORK超清| 麻豆一区二区三区蜜桃免费| 久久久97人妻无码精品蜜桃| 久艾草在线精品视频在线观看| 国内一级一级毛片a免费| 国产一区在线观看免费| 国产伊人自拍| 久久精品日本免费线| 久久中文字幕综合不卡一二区| 久久精品热只有精品| 免费毛片网站在线观看| 女张腿男人桶羞羞漫画| 啪啪后入内射日韩| 涩涩游戏盒| 亚洲福利精品电影在线观看| 亚洲乱亚洲乱妇在线观看| 伊人最新网址| 99RE6这里只有精品国产AV| 9久久99久久久精品齐齐综合色圆| 99香蕉视频| 高清国产在线观看| 国产性色AV内射白浆肛交后入| 好湿好滑好硬好爽好深视频| 久久九九日本韩国精品| 欧美精品华人在线| 三级黄在线播放| 性啪啪chinese东北女人| 野花日本高清在线观看免费吗| 18岁末年禁止观看免费1000个| caoporn超碰在线| 国产精品18久久久久久白浆.|