当前位置: 首页 > news >正文

青岛建设大学招聘信息网站济南国画网站济南网站建设公司

青岛建设大学招聘信息网站,济南国画网站济南网站建设公司,国产crm,毕业设计做网站用什么软件widedeep原理知识总结代码实现1. WideDeep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. WideDeep 模型的应用场景3. WideDeep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天#xff0c;总结一个在业界有着巨大影响力的推荐模型#xff0c… widedeep原理知识总结代码实现1. WideDeep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. WideDeep 模型的应用场景3. WideDeep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天总结一个在业界有着巨大影响力的推荐模型Google 的 WideDeep。可以说只要掌握了 WideDeep就抓住了深度推荐模型这几年发展的一个主要方向。 1. WideDeep 模型的结构 上图就是 WideDeep 模型的结构图它是由左侧的 Wide 部分和右侧的 Deep 部分组成的。Wide 部分的结构很简单就是把输入层直接连接到输出层中间没有做任何处理。Deep 层的结构稍复杂就是常见的EmbeddingMLP 的模型结构。 Wide 部分的主要作用是让模型具有较强的“记忆能力”Memorization而 Deep 部分的主要作用是让模型具有“泛化能力”Generalization因为只有这样的结构特点才能让模型兼具逻辑回归和深度神经网络的优点也就是既能快速处理和记忆大量历史行为特征又具有强大的表达能力这就是 Google 提出这个模型的动机。 1.1 模型的记忆能力 所谓的 “记忆能力”可以被宽泛地理解为模型直接学习历史数据中物品或者特征的“共现频率”并且把它们直接作为推荐依据的能力。 就像我们在电影推荐中可以发现一系列的规则比如看了 A 电影的用户经常喜欢看电影 B这种“因为 A 所以 B”式的规则非常直接也非常有价值。 1.2 模型的泛化能力 “泛化能力”指的是模型对于新鲜样本、以及从未出现过的特征组合的预测能力。 看一个例子假设我们知道 25 岁的男性用户喜欢看电影 A35 岁的女性用户也喜欢看电影 A。如果我们想让一个只有记忆能力的模型回答“35 岁的男性喜不喜欢看电影 A”这样的问题这个模型就会“说”我从来没学过这样的知识啊没法回答你。这就体现出泛化能力的重要性了。模型有了很强的泛化能力之后才能够对一些非常稀疏的甚至从未出现过的情况作出尽量“靠谱”的预测。 事实上矩阵分解就是为了解决协同过滤“泛化能力”不强而诞生的。因为协同过滤只会“死板”地使用用户的原始行为特征而矩阵分解因为生成了用户和物品的隐向量所以就可以计算任意两个用户和物品之间的相似度了。这就是泛化能力强的另一个例子。 2. WideDeep 模型的应用场景 WideDeep 模型是由 Google 的应用商店团队 Google Play 提出的在 Google Play 为用户推荐 APP 这样的应用场景下WideDeep 模型的推荐目标就显而易见了就是应该尽量推荐那些用户可能喜欢愿意安装的应用。那具体到 WideDeep 模型中Google Play 团队是如何为 Wide 部分和 Deep 部分挑选特征的呢 先从右边 Wide 部分的特征看起只利用了两个特征的交叉这两个特征是“已安装应用”和“当前曝光应用”。这样一来Wide 部分想学到的知识就非常直观就是希望记忆好“如果 A 所以 B”这样的简单规则。在 Google Play 的场景下就是希望记住“如果用户已经安装了应用 A是否会安装 B”这样的规则。 再来看看左边的 Deep 部分就是一个非常典型的 EmbeddingMLP 结构。其中的输入特征很多有用户年龄、属性特征、设备类型还有已安装应用的 Embedding 等。把这些特征一股脑地放进多层神经网络里面去学习之后它们互相之间会发生多重的交叉组合这最终会让模型具备很强的泛化能力。 总的来说WideDeep 通过组合 Wide 部分的线性模型和 Deep 部分的深度网络取各自所长就能得到一个综合能力更强的组合模型。 3. WideDeep 模型的代码实现 3.1 tensorflow实现 # wide and deep model architecture # deep part for all input features deep tf.keras.layers.DenseFeatures(numerical_columns categorical_columns)(inputs) deep tf.keras.layers.Dense(128, activationrelu)(deep) deep tf.keras.layers.Dense(128, activationrelu)(deep) # wide part for cross feature wide tf.keras.layers.DenseFeatures(crossed_feature)(inputs) both tf.keras.layers.concatenate([deep, wide]) output_layer tf.keras.layers.Dense(1, activationsigmoid)(both) model tf.keras.Model(inputs, output_layer)Deep 部分它是输入层加两层 128 维隐层的结构它的输入是类别型 Embedding 向量和数值型特征。 Wide 部分直接把输入特征连接到了输出层就可以了。但是这里要重点关注一下 Wide 部分所用的特征 crossed_feature。 movie_feature tf.feature_column.categorical_column_with_identity(keymovieId, num_buckets1001) rated_movie_feature tf.feature_column.categorical_column_with_identity(keyuserRatedMovie1, num_buckets1001) crossed_feature tf.feature_column.crossed_column([movie_feature, rated_movie_feature], 10000)在 Deep 部分和 Wide 部分都构建完后要使用 concatenate layer 把两部分连接起来形成一个完整的特征向量输入到最终的 sigmoid 神经元中产生推荐分数。 3.2 pytorch实现 #Wide部分 class LR_Layer(nn.Module):def __init__(self,enc_dict):super(LR_Layer, self).__init__()self.enc_dict enc_dictself.emb_layer EmbeddingLayer(enc_dictself.enc_dict,embedding_dim1)self.dnn_input_dim get_dnn_input_dim(self.enc_dict, 1)self.fc nn.Linear(self.dnn_input_dim,1)def forward(self,data):sparse_emb self.emb_layer(data)sparse_emb torch.stack(sparse_emb,dim1).flatten(1) #[batch,num_sparse*emb]dense_input get_linear_input(self.enc_dict, data) #[batch,num_dense]dnn_input torch.cat((sparse_emb, dense_input), dim1) # [batch,num_sparse*emb num_dense]out self.fc(dnn_input)return out#DNN部分 class MLP_Layer(nn.Module):def __init__(self,input_dim,output_dimNone,hidden_units[],hidden_activationsReLU,final_activationNone,dropout_rates0,batch_normFalse,use_biasTrue):super(MLP_Layer, self).__init__()dense_layers []if not isinstance(dropout_rates, list):dropout_rates [dropout_rates] * len(hidden_units)if not isinstance(hidden_activations, list):hidden_activations [hidden_activations] * len(hidden_units)hidden_activations [set_activation(x) for x in hidden_activations]hidden_units [input_dim] hidden_unitsfor idx in range(len(hidden_units) - 1):dense_layers.append(nn.Linear(hidden_units[idx], hidden_units[idx 1], biasuse_bias))if batch_norm:dense_layers.append(nn.BatchNorm1d(hidden_units[idx 1]))if hidden_activations[idx]:dense_layers.append(hidden_activations[idx])if dropout_rates[idx] 0:dense_layers.append(nn.Dropout(pdropout_rates[idx]))if output_dim is not None:dense_layers.append(nn.Linear(hidden_units[-1], output_dim, biasuse_bias))if final_activation is not None:dense_layers.append(set_activation(final_activation))self.dnn nn.Sequential(*dense_layers) # * used to unpack listdef forward(self, inputs):return self.dnn(inputs)#WideDeep class WDL(nn.Module):def __init__(self,embedding_dim40,hidden_units[64, 64, 64],loss_fun torch.nn.BCELoss(),enc_dictNone):super(WDL, self).__init__()self.embedding_dim embedding_dimself.hidden_units hidden_unitsself.loss_fun eval(loss_fun) # self.loss_fun torch.nn.BCELoss()self.enc_dict enc_dictself.embedding_layer EmbeddingLayer(enc_dictself.enc_dict, embedding_dimself.embedding_dim)#Wide部分self.lr LR_Layer(enc_dictself.enc_dict)# Deep部分self.dnn_input_dim get_dnn_input_dim(self.enc_dict, self.embedding_dim) # num_sprase*emb num_denseself.dnn MLP_Layer(input_dimself.dnn_input_dim, output_dim1, hidden_unitsself.hidden_units,hidden_activationsrelu, dropout_rates0)def forward(self,data):#Widewide_logit self.lr(data) #Batch,1#Deepsparse_emb self.embedding_layer(data)sparse_emb torch.stack(sparse_emb,dim1).flatten(1) #[Batch,num_sparse_fea*embedding_dim]dense_input get_linear_input(self.enc_dict, data)dnn_input torch.cat((sparse_emb, dense_input), dim1)#[Batch,num_sparse_fea*embedding_dimnum_dense]deep_logit self.dnn(dnn_input)#WideDeepy_pred (wide_logitdeep_logit).sigmoid() # return y_pred#输出loss self.loss_fun(y_pred.squeeze(-1),data[label])output_dict {pred:y_pred,loss:loss}return output_dict最后有个问题什么样的特征应该放进wide什么样的特征应该放进deep部分呢
http://www.dnsts.com.cn/news/175581.html

相关文章:

  • 最流行的网站开发框架图标设计网站
  • 网站建设投资预算房地产网站建设方案
  • 杭州上城区网站建设安平做网站的公司
  • 企业网站备案名称要求重庆公路工程建设信息管理系统
  • 网站菜单导航怎么做一个新手如何推销产品
  • 聚震网站开发青岛seo经理
  • 小学学校网站建设计划有高级感的公司名字
  • 长春小学网站建设机械毕业设计代做网站
  • 东莞南城外贸网站建设wordpress dux 5.3
  • 淅川微网站开发模板网站哪个好
  • 如何建立公司网站建议和规则网线制作注意事项
  • 服务器的做网站空间微信小程序注册流程
  • 烟台企业网站北仑网站建设网站
  • 佛山网站建设哪儿有玉树营销网站建设多少钱
  • dedecms网站迁移wordpress 小说
  • 网站推广方法渠道超链接网站图片怎么在记事本上做
  • 产品查询展示型网站如何找到外包推广公司
  • 公司做网站需要注意什么事情网站开发需要客户做什么
  • 地铁公司招聘信息网站电商要多少钱才可以做
  • 网站建设续费是什么费用国外做机器人的网站
  • 福田网站 建设seo信科安卓应用开发环境
  • 长沙网站制作比wordpress好的工具
  • 单页面的网站三亚
  • 网上做流量对网站有什么影响王者荣耀做网站
  • 常州钟楼建设局网站seo外链在线工具
  • 北京网站建设w亿玛酷1订制网站做二级域名干什么用
  • 做网站网页挣钱不注册城乡规划师有什么用
  • 如何把网站提交到百度青岛地产网站建设
  • 佳木斯外贸网站建设wordpress rss 下一页
  • 重庆高铁建设网站上海关键词排名提升