IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【推荐算法 学习与复现】-- 深度学习系列 -- Wide&Deep -> 正文阅读

[人工智能]【推荐算法 学习与复现】-- 深度学习系列 -- Wide&Deep

????????WideDeep 模型是Google在2016年提出的,在业界具有非常大的影响力,模型由单层Wide部分和多层的Deep部分组成的混合模型。Wide 体现 “记忆能力” 主要是模型直接学习并利用历史数据中物品或者特征的“共现频率”能力。而Deep部分体现 “ 泛化能力 ” 主要是根据特征发掘甚至从未出现过的稀有特征与最终标签相关性的能力。? 再简单理解就是Wide部分采用简单的线性回归模型,直接发掘了历史数据的分布规则,例如针对成对出现的特征; 而Deep部分则是通过深层的神经网络发掘数据中潜在的关系。

具体可以参考下原文的摘要部分,虽然有点晦涩,但是仔细品还是能有很好的体会

????????《深度学习推荐系统》作者王喆在多个地方都描述过推荐算法要与实际业务相关联,WideDeep模型就是深刻抓住业务本质特点,在采用深层网络提升泛化能力的同时,使用传统模型,直接获取相关联的特征直接的浅层关系。

? ? ? ? 只考虑模型本身其实不是特别难,但是论文是实际应用的推荐系统,原作中还对推荐系统的一些内容进行阐述,尤其是训练方式采用在线优化算法FTRL,关于这块内容找到一个很好很好的学习帖子:

在线优化算法 FTRL 的原理与实现 - massquantity - 博客园 (cnblogs.com)icon-default.png?t=M3K6https://www.cnblogs.com/massquantity/p/12693314.html????????以及?Cross Product Transformation (这块内容我不是特别理解,因为找到很多复现的版本都没有用这部分内容,大多使用线性回归,不过本身来说这块内容就是和业务直接相关的,设计之初的目的性就是在的嘛,这块先给自己挖个坑吧)

代码复现:

? ? ? ? 写的很直白,完全按照图示来编写的,同样也在circto数据上简单训练了下,但是很快过拟合了,数据量太小了。。。

? ? ? ? 数据和训练部分代码因为和之前都一样,可以参考DeepCrossing:

【推荐算法 学习与复现】-- 深度学习系列 -- DeepCrossing_Big_Huang的博客-CSDN博客icon-default.png?t=M3K6https://blog.csdn.net/Big_Huang/article/details/124282138?spm=1001.2014.3001.5501


class Wide(nn.Module):
    def __init__(self, dense_feas_num):
        super().__init__()
        self.layer = nn.Linear(dense_feas_num, 1)

    def forward(self, x):
        return self.layer(x)

class Deep(nn.Module):
    def __init__(self, feature_info, embeding_dim):
        super().__init__()
        self.dense_features, self.sparse_features, self.sparse_features_nunique = feature_info
        self.__dense_features_nums = len(self.dense_features)
        self.__sparse_features_nums = len(self.sparse_features)

        self.embeding_layers = nn.ModuleDict({
            "embed_" + str(key) : nn.Embedding(embed_num, embeding_dim) 
                for key, embed_num in self.sparse_features_nunique.items()
        })

        self.layer1 = nn.Linear(embeding_dim * self.__sparse_features_nums + self.__dense_features_nums, 1024)
        self.relu1 = nn.ReLU()

        self.layer2 = nn.Linear(1024, 512)
        self.relu2 = nn.ReLU()

        self.layer3 = nn.Linear(512, 256)
        self.relu3 = nn.ReLU()

        self.lastLayer = nn.Linear(256, 1)

    def forward(self, x):
        dense_inputs, sparse_inputs = x[:, :self.__dense_features_nums], x[:, self.__dense_features_nums:]
        sparse_inputs = sparse_inputs.long()

        sparse_embeds = [self.embeding_layers["embed_" + key](sparse_inputs[:, idx]) for idx, key in enumerate(self.sparse_features)]

        sparse_embeds = torch.cat(sparse_embeds, axis=-1)

        deep_input = torch.cat([sparse_embeds, dense_inputs], axis=-1)

        out = self.relu1(self.layer1(deep_input))
        out = self.relu2(self.layer2(out))
        out = self.relu3(self.layer3(out))

        return self.lastLayer(out)

class WideDeep(nn.Module):
    def __init__(self, feature_info, embeding_dim=10):
        super().__init__()
        dense_features, _, _ = feature_info
        self.__dense_features_nums = len(dense_features)

        self.deep = Deep(feature_info, embeding_dim=embeding_dim)
        self.wide = Wide(self.__dense_features_nums)


    def forward(self, x):
        dense_inputs, sparse_inputs = x[:, :self.__dense_features_nums], x[:, self.__dense_features_nums:]
        sparse_inputs = sparse_inputs.long()

        wide_out = self.wide(dense_inputs)
        deep_out = self.deep(x)

        assert (wide_out.shape == deep_out.shape)

        return F.sigmoid(0.5 * (wide_out + deep_out))

?

参考:

1. 《深度学习推荐系统》

2.?https://datawhalechina.github.io/fun-rec/

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:26:47  更:2022-04-24 09:27:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:49:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码