日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

10、DCN 介绍

發(fā)布時(shí)間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10、DCN 介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

傳統(tǒng)的CTR預(yù)估模型需要大量的特征工程,耗時(shí)耗力;引入DNN之后,依靠神經(jīng)網(wǎng)絡(luò)強(qiáng)大的學(xué)習(xí)能力,可以一定程度上實(shí)現(xiàn)自動(dòng)學(xué)習(xí)特征組合。但是DNN的缺點(diǎn)在于隱式的學(xué)習(xí)特征組合帶來的不可解釋性,以及低效率的學(xué)習(xí)(并不是所有的特征組合都是有用的)。
最開始FM使用隱向量的內(nèi)積來建模組合特征;FFM在此基礎(chǔ)上引入field的概念,針對不同的field上使用不同隱向量。但是,這兩者都是針對低階的特征組合進(jìn)行建模的。
而DNN學(xué)習(xí)到的特征都是高度非線性的高階組合特征,含義非常難以解釋。

1、 DCN 介紹

DCN全稱Deep & Cross Network,是谷歌和斯坦福大學(xué)在2017年提出的用于Ad Click Prediction的模型。DCN(Deep Cross Network)在學(xué)習(xí)特定階數(shù)組合特征的時(shí)候效率非常高,而且同樣不需要特征工程,引入的額外的復(fù)雜度也是微乎其微的。

2、DCN模型結(jié)構(gòu)


DCN架構(gòu)圖如上圖所示:最開始是Embedding and stacking layer,然后是并行的Cross Network和Deep Network,最后是Combination Layer把Cross Network和Deep Network的結(jié)果組合得到Output。

2.1 Embedding and Stacking Layer

  • 為什么要Embed?

    • 在web-scale的推薦系統(tǒng)比如CTR預(yù)估中,輸入的大部分特征都是類別型特征,通常的處理辦法就是one-hot,但是one-hot之后輸入特征維度非常高非常稀疏。
    • 所以有了Embedding來大大的降低輸入的維度,就是把這些binary features轉(zhuǎn)換成dense vectors with real values。
    • Embedding操作其實(shí)就是用一個(gè)矩陣和one-hot之后的輸入相乘,也可以看成是一次查詢(lookup)。這個(gè)Embedding矩陣跟網(wǎng)絡(luò)中的其他參數(shù)是一樣的,是需要隨著網(wǎng)絡(luò)一起學(xué)習(xí)的。
  • 為什么要Stack?
    處理完了類別型特征,還有連續(xù)型特征沒有處理那。所以我們把連續(xù)型特征規(guī)范化之后,和嵌入向量stacking到一起,就得到了原始的輸入:

2.2 Cross Network

Cross Network是整篇論文的核心。它被設(shè)計(jì)來高效的學(xué)習(xí)組合特征,關(guān)鍵在于如何高效的進(jìn)行feature crossing。形式化如下:

xl和xl+1 分別是第l層和第l+1層cross layer的輸出,wl和bl是這兩層之間的連接參數(shù)。注意上式中所有的變量均是列向量,W也是列向量,并不是矩陣。

  • 該怎么理解?
    其實(shí)也不難,xl+1 = f(xl, wl, bl) + xl. 每一層的輸出,都是上一層的輸出加上feature crossing f。而f就是在擬合該層輸出和上一層輸出的殘差。 針對one cross layer可視化如下:

  • High-degree Interaction Across Features:

Cross Network特殊的網(wǎng)絡(luò)結(jié)構(gòu)使得cross feature的階數(shù)隨著layer depth的增加而增加。相對于輸入x0來說,一個(gè)l層的cross network的cross feature的階數(shù)為l+1。

  • 復(fù)雜度分析:
    假設(shè)一共有Lc層cross layer,起始輸入x0的維度為d。那么整個(gè)cross network的參數(shù)個(gè)數(shù)為:


因?yàn)槊恳粚拥腤和b都是d維度的。
從上式可以發(fā)現(xiàn),復(fù)雜度是輸入維度d的線性函數(shù)。所以相比于deep network,cross network引入的復(fù)雜度微不足道。這樣就保證了DCN的復(fù)雜度和DNN是一個(gè)級別的。論文中表示,Cross Network之所以能夠高效的學(xué)習(xí)組合特征,就是因?yàn)閤0 * xT的秩為1,使得我們不用計(jì)算并存儲整個(gè)的矩陣就可以得到所有的cross terms。
但是,正是因?yàn)閏ross network的參數(shù)比較少導(dǎo)致它的表達(dá)能力受限,為了能夠?qū)W習(xí)高度非線性的組合特征,DCN并行的引入了Deep Network。

2.3 Deep Network

這一部分沒什么特別的,就是一個(gè)前向傳播的全連接神經(jīng)網(wǎng)絡(luò),我們可以計(jì)算一下參數(shù)的數(shù)量來估計(jì)下復(fù)雜度。假設(shè)輸入x0維度為d,一共有Lc層神經(jīng)網(wǎng)絡(luò),每一層的神經(jīng)元個(gè)數(shù)都是m個(gè)。那么總的參數(shù)或者復(fù)雜度為:

2.4 Combination Layer

Combination Layer把Cross Network和Deep Network的輸出拼接起來,然后經(jīng)過一個(gè)加權(quán)求和后得到logits,然后經(jīng)過sigmoid函數(shù)得到最終的預(yù)測概率。形式化如下:

p是最終的預(yù)測概率;XL1是d維的,表示Cross Network的最終輸出;hL2是m維的,表示Deep Network的最終輸出;Wlogits是Combination Layer的權(quán)重;最后經(jīng)過sigmoid函數(shù),得到最終預(yù)測概率。

損失函數(shù)使用帶正則項(xiàng)的log loss,形式化如下:


另外,針對Cross Network和Deep Network,DCN是一起訓(xùn)練的,這樣網(wǎng)絡(luò)可以知道另外一個(gè)網(wǎng)絡(luò)的存在。

3、實(shí)例

接下來使用的代碼主要采用開源的DeepCTR,相應(yīng)的API文檔可以在這里閱讀
https://deepctr-doc.readthedocs.io/en/latest/Examples.html

import pandas as pd from sklearn.preprocessing import LabelEncoder, MinMaxScaler from sklearn.model_selection import train_test_split from deepctr.models.dcn import DCN from deepctr.feature_column import SparseFeat, DenseFeat, get_feature_namesdata = pd.read_csv('./criteo_sample.txt')sparse_features = ['C' + str(i) for i in range(1, 27)] dense_features = ['I' + str(i) for i in range(1, 14)]data[sparse_features] = data[sparse_features].fillna('-1', ) data[dense_features] = data[dense_features].fillna(0, ) target = ['label']for feat in sparse_features:lbe = LabelEncoder()data[feat] = lbe.fit_transform(data[feat])mms = MinMaxScaler(feature_range=(0, 1)) data[dense_features] = mms.fit_transform(data[dense_features])sparse_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(), embedding_dim=4)for i, feat in enumerate(sparse_features)] # 或者h(yuǎn)ash,vocabulary_size通常要大一些,以避免hash沖突太多 # sparse_feature_columns = [SparseFeat(feat, vocabulary_size=1e6,embedding_dim=4,use_hash=True) # for i,feat in enumerate(sparse_features)]#The dimension can be set according to data dense_feature_columns = [DenseFeat(feat, 1)for feat in dense_features]dnn_feature_columns = sparse_feature_columns + dense_feature_columns linear_feature_columns = sparse_feature_columns + dense_feature_columns feature_names = get_feature_names(linear_feature_columns + dnn_feature_columns)train, test = train_test_split(data, test_size=0.2)train_model_input = {name: train[name].values for name in feature_names} test_model_input = {name: test[name].values for name in feature_names}model = DCN(linear_feature_columns, dnn_feature_columns, task='binary') model.compile("adam", "binary_crossentropy",metrics=['binary_crossentropy'], )history = model.fit(train_model_input, train[target].values,batch_size=256, epochs=10, verbose=2, validation_split=0.2, ) pred_ans = model.predict(test_model_input, batch_size=256)

4、 總結(jié)

DCN特點(diǎn)如下:

  • 使用cross network,在每一層都應(yīng)用feature crossing。高效的學(xué)習(xí)了bounded degree組合特征。不需要人工特征工程。
  • 網(wǎng)絡(luò)結(jié)構(gòu)簡單且高效。多項(xiàng)式復(fù)雜度由layer depth決定。
  • 相比于DNN,DCN的logloss更低,而且參數(shù)的數(shù)量將近少了一個(gè)數(shù)量級。

總結(jié)

以上是生活随笔為你收集整理的10、DCN 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。