一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內(nèi)不再提示

FFM理論與FFM實現(xiàn)細節(jié)

lviY_AI_shequ ? 來源:未知 ? 作者:李倩 ? 2018-07-20 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、FFM理論

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

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

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

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

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

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

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

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

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

那么,F(xiàn)FM的組合特征有10項,如下圖所示。

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

2、FFM實現(xiàn)細節(jié)

這里講得只是一種FFM的實現(xiàn)方式,并不是唯一的。

損失函數(shù)

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

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

隨機梯度下降

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

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

3、tensorflow實現(xiàn)代碼

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

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

生成數(shù)據(jù)這里我沒有找到合適的數(shù)據(jù),就自己產(chǎn)生了一點數(shù)據(jù),數(shù)據(jù)涉及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

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

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一樣先將公式化簡再來做,對于交叉特征,只能寫兩重循環(huán),所以對于特別多的特征的情況下,真的計算要爆炸呀!

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)

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

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, # 創(chuàng)建二次項的權(quán)重變量 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)

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

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})

跑的是相當?shù)穆覀儊砜纯葱Ч桑?/p>

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

    關(guān)注

    6

    文章

    967

    瀏覽量

    55624
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4377

    瀏覽量

    64551
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4894

    瀏覽量

    70446

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

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    D類放大器原理及EMI抑制

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

    UCC28600準諧振反激節(jié)制IC 引腳功能

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

    簡單線性回歸代碼實現(xiàn)細節(jié)分析

    機器學習100天-簡單線性回歸 [代碼實現(xiàn)細節(jié)分析]
    發(fā)表于 05-22 10:16

    深度學習入門之基于python的理論實現(xiàn)

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

    分立器件的實現(xiàn)細節(jié)

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

    數(shù)字信號處理-理論算法與實現(xiàn)

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

    遺傳算法理論、應用與軟件實現(xiàn)

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

    FM和FFM原理的探索和應用的經(jīng)驗

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

    現(xiàn)階段對尾氣的處理方法

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

    數(shù)字信號處理——理論、算法與實現(xiàn)

    數(shù)字信號處理——理論、算法與實現(xiàn)說明。
    發(fā)表于 04-26 09:17 ?42次下載

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

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

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

    FFM101 THRUFFM107 SOD-123FL規(guī)格書下載
    發(fā)表于 04-01 16:51 ?0次下載

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

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

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

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

    大模型部署框架FastLLM實現(xiàn)細節(jié)解析

    接著 大模型部署框架 FastLLM 簡要解析 這篇文章首先梳理了一下FastLLM的調(diào)用鏈和關(guān)鍵的數(shù)據(jù)結(jié)構(gòu),然后解析了 FastLLM 的一些實現(xiàn)細節(jié)和CPU/GPU后端實現(xiàn)采用的優(yōu)化技巧。
    的頭像 發(fā)表于 07-27 10:48 ?3250次閱讀
    大模型部署框架FastLLM<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>細節(jié)</b>解析