NFM

NFM(Neural Factorization Machines)是2017年由新加坡国立大学的何向南教授等人在SIGIR会议上提出的一个模型,论文《Neural Factorization Machines for Sparse Predictive Analytics》。
NFM主要是面向稀疏特征的交叉问题, 将FM对二阶特征的线性交叉,与神经网络对高阶特征非线性交叉无缝的结合在了一起。

  • 提出了Bilinear Interaction(Bi-Interaction) pooling操作 (有别于传统的concatenate 或 avg pooling操作)
  • 将FM看作是神经网络的一部分

模型

公式

传统的FM模型仅局限于线性表达和二阶交互, 无法胜任生活中各种具有复杂结构和规律性的真实数据, 针对FM的这点不足, 作者提出了一种将FM融合进DNN的策略,通过引进了一个特征交叉池化层的结构,使得FM与DNN进行了完美衔接,这样就组合了FM的建模低阶特征交互能力和DNN学习高阶特征交互和非线性的能力,形成了深度学习时代的神经FM模型(NFM)。

跟fm的公式很相似, 对比FM, 就会发现变化的是第三项,将fm的二阶部分换成了更为复杂的形式。
在这里插入图片描述

网络结构

NFM模型的深度网络部分结构图如图所示
在这里插入图片描述

embedding层

就是一个全连接层,将输入转换到低维度的稠密的嵌入空间中进行处理。

Bi-Interaction层

Bi是Bi-linear的缩写,这一层其实是一个pooling层操作,它把很多个向量转换成一个向量,形式化如下:
在这里插入图片描述
⊙ \odot 代表两个向量的元素积操作,即两个长度相同的向量对应维相乘得到元素积向量,示例如下: [ 1 , 2 , 3 ] ⊙ [ 2 , 3 , 4 ] = [ 1 ∗ 2 , 2 ∗ 3 , 3 ∗ 4 ] = [ 2 , 6 , 12 ] [1,2,3]\odot[2,3,4]=[1*2,2*3,3*4]=[2,6,12] [1,2,3][2,3,4]=[12,23,3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第1页。浪潮服务器NFM安装windowsServer 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第1页。 浪潮服务器安装 windows server 2008r2 服务器装箱清单清单配置列表 服务器主机一台 NF8460M3 导轨 电源线3根 英信服务器用户手册 系统驱动程序光盘 Raid卡驱动程序光盘 浪潮驱动U盘使用说明 浪潮驱动U盘 服务手册 安全手册 快速使用指南 二.配置 RAID Raid配置与管理 服务器开机自检到浪潮logo画面后,下一步就会进入Raid卡自检过程,此时显示器上会出现Ctrl -H提示,如下图: 按下Ctrl -H组合键后,自检完成就会进入Raid卡配置界面,如下图。在这里可以看到Raid卡的型号和Firmware固件版本,点击【Start】按钮进入Raid卡主页。 Raid卡首页叫作WebBIOS,如下图。左侧是功能菜单,右侧可以看到所有物理磁盘,本例安装了4块500G硬盘,后面所有的配置都可以在这里完成! 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第2页。Raid0配置方法 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第2页。 Raid0的配置过程与Raid1大致相同,唯一不同是在选择Raid级别这一步选择Raid0即可。 具体步骤请参考下一节 友情提示:Raid0虽然可以大幅提高读写性能,但是有数据丢失风险,请您慎重考虑! Raid1配置方法 在WebBIOS主页点击【Configuration Wizard】,打开配置向导 选择【Add Configuration】,点击【Next】下一步 选择【Manual Configuration】,点击【Next】下一步 左侧方框内可以看到所有未使用的硬盘。因为要做Raid1,我们选择前两块,然后点击下方的【Add to Array】将其加入到右侧方框内。 点击【Accept DG】,创建磁盘组 点击【Next】下一步 点击【Add to SPAN】,将刚才创建好的磁盘组加入到右侧方框内 点击【Next】下一步 阵列参数配置:第一个参数"Raid Level"选择Raid1,其余保持默认 最后一个参数"Select Size"输入阵列容量大小,最大值可参考右侧绿字提示(其中R0代表做Raid0最大容量,R1代表做Raid1最大容量),完成后点击【Accept】 弹出的任何提示均选择【yes】 回到配置页面,点击【Next】下一步 点击【Accept】配置完成! 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第3页。提示保存,选择【yes】 浪潮服务器NFM安装windowsServer完整版全文共4页,当前为第3页。 (依Raid卡型号不同,有些可能没有此功能,如没有请跳过此步)提示SSD缓存,选择【Cancel】 提示初始化,选择【yes】 正在初始化,能看到百分比进度条(速度较快,可能一闪而过) 初始化完成!点击【Home】返回首页 阵列配置完成! Raid1状态显示"Optimal"表示正常,Drives显示两块硬盘绿色Online正常,如果还有其它未使用的硬盘,会在unconfigured Drives下面蓝色显示。 未使用的硬盘可以继续创建阵列,也可以配置成热备盘(方法请见章节) 最后点击【Exit】退出,然后【Ctrl-Alt-Delete】组合键重启服务器! 打开光驱插入 windows server 2008 r2 光盘 等待光盘自动启动进入 server008安装程序,进入后选择简体中文或者英文韩文都可以;下一步选择高级设置,下一步选择,从不更新;然后会进入一个安装的目录,这时候会看不到任何硬盘,点击加载驱动,浏览,把安装盘拿出来,放入RAID驱动盘,过一会会显示驱动drive 点击加号 展开,找到你要安装的驱动 一般是 win7win8 x64的样子 因为服务器肯定装64位系统了;点击扫描驱动,会显示一串路径 ,点击下一步 过1分钟左右就会显示出硬盘了,先分好盘,一般是150G左右。 分好盘后悔多出来一个100M左右的系统盘,不要删除,删除后就起不来了。现在不能安装,下方会显示一个黄色感叹号,无法将 windows 安装到磁盘 (0),把Raid盘拿出来,装入windows server2008 r2系统盘,点击刷新,现在就可以安装
以下是基于PyTorch实现的NFM推荐算法代码,供参考: ``` import torch import torch.nn as nn import torch.nn.functional as F class NFM(nn.Module): def __init__(self, feature_dim, embedding_dim, hidden_dim, output_dim, dropout_prob): super().__init__() self.feature_dim = feature_dim self.embedding_dim = embedding_dim self.hidden_dim = hidden_dim self.output_dim = output_dim self.dropout_prob = dropout_prob self.embedding = nn.Embedding(feature_dim, embedding_dim) self.linear1 = nn.Linear(embedding_dim, hidden_dim) self.linear2 = nn.Linear(hidden_dim, output_dim) self.linear3 = nn.Linear(embedding_dim, output_dim) self.dropout = nn.Dropout(dropout_prob) def forward(self, x): # Embedding layer x_emb = self.embedding(x) # Bi-Interaction layer sum_square = torch.sum(x_emb, dim=1) ** 2 square_sum = torch.sum(x_emb ** 2, dim=1) bi_interaction = 0.5 * (sum_square - square_sum) # MLP layer mlp_output = F.relu(self.linear1(self.dropout(bi_interaction))) mlp_output = self.linear2(self.dropout(mlp_output)) # Output layer output = self.linear3(x_emb.mean(dim=1)) + mlp_output return output ``` 其中,`feature_dim`为特征维度,`embedding_dim`为嵌入维度,`hidden_dim`为隐层维度,`output_dim`为输出维度,`dropout_prob`为dropout概率。 在模型的前向传播过程中,首先通过`nn.Embedding`层将输入的离散特征转化为嵌入向量,然后通过Bi-Interaction Layer计算二阶交叉特征,再通过MLP Layer进行非线性变换,最后将MLP输出和原始嵌入向量的平均值相加得到最终输出。 使用时,可以像以下代码一样初始化并训练模型: ``` # 初始化模型 model = NFM(feature_dim, embedding_dim, hidden_dim, output_dim, dropout_prob) # 定义损失函数和优化器 criterion = nn.BCEWithLogitsLoss() optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) # 训练模型 for epoch in range(num_epochs): for inputs, targets in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) loss.backward() optimizer.step() ``` 其中,`feature_dim`、`embedding_dim`、`hidden_dim`、`output_dim`、`dropout_prob`、`learning_rate`、`num_epochs`等参数需要根据具体情况进行设置,`dataloader`是一个PyTorch的`DataLoader`对象,用于加载训练数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值