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

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

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

3天內不再提示

FFM理論與FFM實現細節

lviY_AI_shequ ? 來源:未知 ? 作者:李倩 ? 2018-07-20 16:10 ? 次閱讀

1、FFM理論

在CTR預估中,經常會遇到one-hot類型的變量,one-hot類型變量會導致嚴重的數據特征稀疏的情況,為了解決這一問題,在上一講中,我們介紹了FM算法。這一講我們介紹一種在FM基礎上發展出來的算法-FFM(Field-aware Factorization Machine)。

FFM模型中引入了類別的概念,即field。還是拿上一講中的數據來講,先看下圖:

在上面的廣告點擊案例中,

“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特征都是代表日期的,可以放到同一個field中。同理,Country也可以放到一個field中。簡單來說,同一個categorical特征經過One-Hot編碼生成的數值特征都可以放到同一個field,包括用戶國籍,廣告類型,日期等等。

在FFM中,每一維特征 xi,針對其它特征的每一種field fj,都會學習一個隱向量 v_i,fj。因此,隱向量不僅與特征相關,也與field相關。也就是說,“Day=26/11/15”這個特征與“Country”特征和“Ad_type"特征進行關聯的時候使用不同的隱向量,這與“Country”和“Ad_type”的內在差異相符,也是FFM中“field-aware”的由來。

假設樣本的 n個特征屬于 f個field,那么FFM的二次項有 nf個隱向量。而在FM模型中,每一維特征的隱向量只有一個。FM可以看作FFM的特例,是把所有特征都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,可以導出其模型方程。

可以看到,如果隱向量的長度為 k,那么FFM的二次參數有 nfk 個,遠多于FM模型的 nk個。此外,由于隱向量與field相關,FFM二次項并不能夠化簡,其預測復雜度是 O(kn^2)。

下面以一個例子簡單說明FFM的特征組合方式。輸入記錄如下:

這條記錄可以編碼成5個特征,其中“Genre=Comedy”和“Genre=Drama”屬于同一個field,“Price”是數值型,不用One-Hot編碼轉換。為了方便說明FFM的樣本格式,我們將所有的特征和對應的field映射成整數編號。

那么,FFM的組合特征有10項,如下圖所示。

其中,紅色是field編號,藍色是特征編號。

2、FFM實現細節

這里講得只是一種FFM的實現方式,并不是唯一的。

損失函數

FFM將問題定義為分類問題,使用的是logistic loss,同時加入了正則項

什么,這是logisitc loss?第一眼看到我是懵逼的,邏輯回歸的損失函數我很熟悉啊,不是長這樣的啊?其實是我目光太短淺了。邏輯回歸其實是有兩種表述方式的損失函數的,取決于你將類別定義為0和1還是1和-1。大家可以參考下下面的文章:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/6340129.html。當我們將類別設定為1和-1的時候,邏輯回歸的損失函數就是上面的樣子。

隨機梯度下降

訓練FFM使用的是隨機梯度下降方法,即每次只選一條數據進行訓練,這里還有必要補一補梯度下降的知識,梯度下降是有三種方式的,截圖取自參考文獻3:

總給人一種怪怪的感覺。batch為什么是全量的數據呢,哈哈。

3、tensorflow實現代碼

本文代碼的github地址:https://github.com/princewen/tensorflow_practice/tree/master/recommendation-FFM-Demo

這里我們只講解一些細節,具體的代碼大家可以去github上看:

生成數據這里我沒有找到合適的數據,就自己產生了一點數據,數據涉及20維特征,前十維特征是一個field,后十維是一個field:

def gen_data(): labels = [-1,1] y = [np.random.choice(labels,1)[0] for _ in range(all_data_size)] x_field = [i // 10 for i in range(input_x_size)] x = np.random.randint(0,2,size=(all_data_size,input_x_size)) return x,y,x_field

定義權重項在ffm中,有三個權重項,首先是bias,然后是一維特征的權重,最后是交叉特征的權重:

def createTwoDimensionWeight(input_x_size,field_size,vector_dimension): weights = tf.truncated_normal([input_x_size,field_size,vector_dimension]) tf_weights = tf.Variable(weights) return tf_weights def createOneDimensionWeight(input_x_size): weights = tf.truncated_normal([input_x_size]) tf_weights = tf.Variable(weights) return tf_weights def createZeroDimensionWeight(): weights = tf.truncated_normal([1]) tf_weights = tf.Variable(weights) return tf_weights

計算估計值估計值的計算這里不能項FM一樣先將公式化簡再來做,對于交叉特征,只能寫兩重循環,所以對于特別多的特征的情況下,真的計算要爆炸呀!

def inference(input_x,input_x_field,zeroWeights,oneDimWeights,thirdWeight): """計算回歸模型輸出的值""" secondValue = tf.reduce_sum(tf.multiply(oneDimWeights,input_x,name='secondValue')) firstTwoValue = tf.add(zeroWeights, secondValue, name="firstTwoValue") thirdValue = tf.Variable(0.0,dtype=tf.float32) input_shape = input_x_size for i in range(input_shape): featureIndex1 = I fieldIndex1 = int(input_x_field[I]) for j in range(i+1,input_shape): featureIndex2 = j fieldIndex2 = int(input_x_field[j]) vectorLeft = tf.convert_to_tensor([[featureIndex1,fieldIndex2,i] for i in range(vector_dimension)]) weightLeft = tf.gather_nd(thirdWeight,vectorLeft) weightLeftAfterCut = tf.squeeze(weightLeft) vectorRight = tf.convert_to_tensor([[featureIndex2,fieldIndex1,i] for i in range(vector_dimension)]) weightRight = tf.gather_nd(thirdWeight,vectorRight) weightRightAfterCut = tf.squeeze(weightRight) tempValue = tf.reduce_sum(tf.multiply(weightLeftAfterCut,weightRightAfterCut)) indices2 = [I] indices3 = [j] xi = tf.squeeze(tf.gather_nd(input_x, indices2)) xj = tf.squeeze(tf.gather_nd(input_x, indices3)) product = tf.reduce_sum(tf.multiply(xi, xj)) secondItemVal = tf.multiply(tempValue, product) tf.assign(thirdValue, tf.add(thirdValue, secondItemVal)) return tf.add(firstTwoValue,thirdValue)

定義損失函數損失函數我們就用邏輯回歸損失函數來算,同時加入正則項:

lambda_w = tf.constant(0.001, name='lambda_w') lambda_v = tf.constant(0.001, name='lambda_v') zeroWeights = createZeroDimensionWeight() oneDimWeights = createOneDimensionWeight(input_x_size) thirdWeight = createTwoDimensionWeight(input_x_size, # 創建二次項的權重變量 field_size, vector_dimension) # n * f * k y_ = inference(input_x, trainx_field,zeroWeights,oneDimWeights,thirdWeight) l2_norm = tf.reduce_sum( tf.add( tf.multiply(lambda_w, tf.pow(oneDimWeights, 2)), tf.reduce_sum(tf.multiply(lambda_v, tf.pow(thirdWeight, 2)),axis=[1,2]) ) ) loss = tf.log(1 + tf.exp(input_y * y_)) + l2_norm train_step = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)

訓練接下來就是訓練了,每次只用喂一個數據就好:

input_x_batch = trainx[t] input_y_batch = trainy[t] predict_loss,_, steps = sess.run([loss,train_step, global_step], feed_dict={input_x: input_x_batch, input_y: input_y_batch})

跑的是相當的慢,我們來看看效果吧:

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

    關注

    6

    文章

    946

    瀏覽量

    54869
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62734
  • 代碼
    +關注

    關注

    30

    文章

    4799

    瀏覽量

    68728

原文標題:推薦系統遇上深度學習(二)--FFM模型理論和實踐

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

收藏 人收藏

    評論

    相關推薦

    D類放大器原理及EMI抑制

    的音頻放大器有AB類和D類兩種。通常,AB類放大器能夠提供好的音質,但效率欠佳,耗電較大;而D類放大器具有高效、低溫升效應和高輸出功率等特點。2. 理論分析:AB類放大器的工作原理類似于線性調節器
    發表于 10-16 15:55

    UCC28600準諧振反激節制IC 引腳功能

    接入。此端電壓節制著IC的三個工作模式:準諧振(QR)模式、頻率折返(FFM)模式及猝發模式(Borst Mode)。  3PIN CS:電流檢測輸入端。調節功率限制,可調制過流珍愛,CS端電壓輸人除夜電流檢測電阻接人,再用兩端之間的電譸arty?剮〉鶻詮β氏拗啤
    發表于 07-08 17:07

    簡單線性回歸代碼實現細節分析

    機器學習100天-簡單線性回歸 [代碼實現細節分析]
    發表于 05-22 10:16

    深度學習入門之基于python的理論實現

    深度學習入門-基于python的理論實現(2)
    發表于 06-19 11:22

    分立器件的實現細節

    ?概述負載開關電路日常應用比較廣泛,主要用來控制后級負載的電源開關。此功能可以直接用IC也可以用分立器件搭建,分立器件主要用PMOS加三極管實現。本文主要討論分立器件的實現細節。電路分析如下圖所示R5模擬后級負載,Q1為開關,
    發表于 10-28 08:28

    數字信號處理-理論算法與實現

    本內容提供了數字信號處理-理論算法與實現 電子書,歡迎大家下載學習
    發表于 07-22 11:34 ?0次下載
    數字信號處理-<b class='flag-5'>理論</b>算法與<b class='flag-5'>實現</b>

    遺傳算法理論、應用與軟件實現

    遺傳算法——理論、應用與軟件實現-2002-1西安交通大學出版社-王小平。
    發表于 04-12 14:33 ?0次下載

    FM和FFM原理的探索和應用的經驗

    FM和FFM模型是最近幾年提出的模型,憑借其在數據量比較大并且特征稀疏的情況下,仍然能夠得到優秀的性能和效果的特性,屢次在各大公司舉辦的CTR預估比賽中獲得不錯的戰績。美團點評技術團隊在搭建DSP
    發表于 10-12 17:25 ?0次下載
    FM和<b class='flag-5'>FFM</b>原理的探索和應用的經驗

    現階段對尾氣的處理方法

    SCR系統的廠家較多,常用的有東風添藍系統、威孚利達系統、格蘭富系統、依米泰克(Emitec)系統、CES的FFM版后處理系統、博世后處理系統、三立后處理系統、天納克后處理系統、派格力后處理系統等等。
    的頭像 發表于 12-08 14:21 ?3626次閱讀

    數字信號處理——理論、算法與實現

    數字信號處理——理論、算法與實現說明。
    發表于 04-26 09:17 ?42次下載

    利用FFM機制進行的極微細機械加工

    隨著超精密加工技術的發展,在機械加工中也需要納米級的加工控制技術,從這個觀點出發,近年來,利用掃描型探針顯微鏡(SPM)的極微細加工技術被廣泛研究1)~5)。為了確立納米級的機械加工技術, 考慮到化學效果,理解加工現象是重要的研究課題。
    發表于 03-30 14:34 ?648次閱讀
    利用<b class='flag-5'>FFM</b>機制進行的極微細機械加工

    表面貼裝快速恢復整流器FFM101 THRUFFM107 SOD-123FL規格書下載

    FFM101 THRUFFM107 SOD-123FL規格書下載
    發表于 04-01 16:51 ?0次下載

    華為EUV光刻解決相干光無法勻光問題

    該照明系統3包括視場復眼鏡31(field flyeye mirror,FFM)、光闌復眼鏡 32(diaphragm flyeye mirror,PFM)、中繼鏡組33;其中,中繼鏡組33通常可以包括兩個或者兩個以上的中繼鏡。
    的頭像 發表于 11-21 11:09 ?940次閱讀

    ATV 320同步與異步電機變頻器編程手冊

    當變頻器熱態達到最大熱態的 70%,并且如果 [ 風扇模式 ] (FFM) 被設置為 [ 標準 ] (Std),則風扇會自動 起動。 對于 ATV320pppppW(S), [ 風扇模式 ](FFM) 被強制設為 [ 強制模式 ] (run), 將始終激活風扇。
    發表于 05-24 15:36 ?2次下載

    大模型部署框架FastLLM實現細節解析

    接著 大模型部署框架 FastLLM 簡要解析 這篇文章首先梳理了一下FastLLM的調用鏈和關鍵的數據結構,然后解析了 FastLLM 的一些實現細節和CPU/GPU后端實現采用的優化技巧。
    的頭像 發表于 07-27 10:48 ?1344次閱讀
    大模型部署框架FastLLM<b class='flag-5'>實現</b><b class='flag-5'>細節</b>解析
    主站蜘蛛池模板: 在线欧美 精品 第1页| 野花日本手机观看大全免费3 | 韩国黄色影院| 国产精品成人影院| 吃胸亲吻吃奶摸下面免费视频| a级老头和老太xxxx| 97在线播放视频| 97在线超碰免费视频| 91羞羞视频| 99RE8国产这里只有精品| 最懂男人心论坛| 久久免费看少妇高潮A片JA | 午夜福利影院私人爽爽| 特黄特色大片免费播放器9| 少妇无码太爽了视频在线播放| 日韩伦理电影秋霞影院| 肉肉的各种姿势高H细文 | 成人a视频片在线观看免费| WWW国产精品人妻一二三区| xxx动漫xxx在线观看| 成年人免费观看视频网站| 大乳牛奶女在线观看| 囯产精品一品二区三区| 国产精品人妻无码久久久蜜桃臀| 国产精品悠悠久久人妻精品| av av在线| 草莓视频免费在线观看| 国产h视频在线观看免费| 99影视久久电影网久久看影院| BL全肉多攻NP高H| 粉嫩无套白浆第一次jk| 国产精品日本不卡一区二区| 国产一区二区精品视频| 久久成人免费观看全部免费| 美国69xxxx59| 久久网站视频| 欧美18videosex初次| 美女被爆插| 日本福利片午夜免费观着| 青柠在线观看视频在线高清完整 | 午夜dj免费中文字幕|