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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深度因式分解机

發布時間:2023/11/28 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度因式分解机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深度因式分解機

Deep Factorization Machines

學習有效的特征組合對于點擊率預測任務的成功至關重要。因子分解機以線性范式對特征交互進行建模(例如,雙線性交互)。對于實際數據來說,這通常是不夠的,因為在實際數據中,固有特征交叉結構通常非常復雜和非線性。更糟糕的是,二階特征交互在實際的分解機中通常被使用。從理論上講,用因子分解機對高階特征組合進行建模是可行的,但由于數值不穩定和計算復雜度高,通常不采用這種方法。

一個有效的解決方案是使用深度神經網絡。深度神經網絡在特征表示學習方面具有強大的功能,并且有潛力學習復雜的特征交互。因此,將深度神經網絡集成到因子分解機中是很自然的。向因子分解機中添加非線性變換層,使其能夠同時對低階特征組合和高階特征組合進行建模。此外,輸入的非線性固有結構也可以用深度神經網絡捕捉。在這一部分中,將介紹一個典型的模型,將FM和deep神經網絡結合起來,命名為DeepFM(DeepFM)[Guo et al.,2017]。

  1. Model Architectures

DeepFM由一個FM組件和一個deep組件組成,集成在一個并行結構中。FM組件與用于建模低階特征交互作用的雙向因式分解機相同。deep組件是一個多層感知器,用于捕獲高階特征交互和非線性。這兩個組件共享相同的輸入/嵌入,輸出總結為最終預測。值得一提的是,DeepFM與深度廣度Wide&Deep架構的理論相似,既能存儲又能擴展。DeepFM相對于Wide&Deep模型的優勢在于,通過自動識別特征組合來減少手工構建特征工程的工作量。


值得注意的是,深度調頻并不僅僅是將深度調頻與神經網絡相結合。還可以在特征交互上添加非線性層[He&Chua,2017]。

from d2l import mxnet as d2l

from mxnet import init, gluon, np, npx

from mxnet.gluon import nn

import os

import sys

npx.set_np()

  1. Implemenation of DeepFM

DeepFM的實現與FM類似。使用功能塊保持激活功能不變。Dropout也用于正則化模型。MLP的神經元數目可以通過MLP_dims超參數進行調整。

class DeepFM(nn.Block):

def __init__(self, field_dims, num_factors, mlp_dims, drop_rate=0.1):super(DeepFM, self).__init__()num_inputs = int(sum(field_dims))self.embedding = nn.Embedding(num_inputs, num_factors)self.fc = nn.Embedding(num_inputs, 1)self.linear_layer = nn.Dense(1, use_bias=True)input_dim = self.embed_output_dim = len(field_dims) * num_factorsself.mlp = nn.Sequential()for dim in mlp_dims:self.mlp.add(nn.Dense(dim, 'relu', True, in_units=input_dim))self.mlp.add(nn.Dropout(rate=drop_rate))input_dim = dimself.mlp.add(nn.Dense(in_units=input_dim, units=1))def forward(self, x):embed_x = self.embedding(x)square_of_sum = np.sum(embed_x, axis=1) ** 2sum_of_square = np.sum(embed_x ** 2, axis=1)inputs = np.reshape(embed_x, (-1, self.embed_output_dim))x = self.linear_layer(self.fc(x).sum(1)) \+ 0.5 * (square_of_sum - sum_of_square).sum(1, keepdims=True) \+ self.mlp(inputs)x = npx.sigmoid(x)return x
  1. Training and Evaluating the Model

數據加載過程與FM相同。將DeepFM的MLP組件設置為一個具有金字塔結構的三層密集網絡(30-20-10)。所有其超參數與FM相同。

batch_size = 2048

data_dir = d2l.download_extract(‘ctr’)

train_data = d2l.CTRDataset(os.path.join(data_dir, ‘train.csv’))

test_data = d2l.CTRDataset(os.path.join(data_dir, ‘test.csv’),

                       feat_mapper=train_data.feat_mapper,defaults=train_data.defaults)

field_dims = train_data.field_dims

num_workers = 0 if sys.platform.startswith(‘win’) else 4

train_iter = gluon.data.DataLoader(train_data, shuffle=True,

                               last_batch='rollover',batch_size=batch_size,num_workers=num_workers)

test_iter = gluon.data.DataLoader(test_data, shuffle=False,

                              last_batch='rollover',batch_size=batch_size,num_workers=num_workers)

ctx = d2l.try_all_gpus()

net = DeepFM(field_dims, num_factors=10, mlp_dims=[30, 20, 10])

net.initialize(init.Xavier(), ctx=ctx)

lr, num_epochs, optimizer = 0.01, 30, ‘adam’

trainer = gluon.Trainer(net.collect_params(), optimizer,

                    {'learning_rate': lr})

loss = gluon.loss.SigmoidBinaryCrossEntropyLoss()

d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs, ctx)

loss 0.510, train acc 0.845, test acc 0.860

123302.7 examples/sec on [gpu(0), gpu(1)]

與FM相比,DeepFM收斂速度更快,性能更好。

  1. Summary

· Integrating neural networks to FM enables it to model complex and high-order interactions.

· DeepFM outperforms the original FM on the advertising dataset.

總結

以上是生活随笔為你收集整理的深度因式分解机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。