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

为什么要用深度学习来做个性化推荐 CTR 预估

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~

作者:苏博览

深度学习应该这一两年计算机圈子里最热的一个词了。基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展。而深度学习本身也在不断的探索和发展中,其潜力的极限目前还没有被看到。


当然,深度学习也不是万能的,比如有很多问题的特征是易于提取的,我们可以直接使用SVM, 决策树的算法来取得很好的结果。而深度学习并不能提供太多的帮助。还有一些问题,我们并没有足够数量的数据,我们也很难通过深度学习算法来得到可用的模型。此外,有些问题对计算资源和时间的要求比较严苛,在深度学习小型化没有取得突破性进展的时候,它们也不是首选方法。


判断一个项目适不适合上深度学习的正确姿势
( 图片来源 : 深度学习防骗指南 )

反过来说,虽然目前深度学习在个性化推荐,计算广告领域上还没有很大的突破,但是我认为推荐系统有很大概率会是深度学习的最重要的应用场景之一。理由有以下几个方面:

1、现在的推荐系统都要面对海量的数据,要提取上万乃至上亿维的特征。而深度学习本身就是一个很好的表示学习的框架,从海量的数据中学习到人类无法提取的特征组合,是其擅长的事情。


( 图片来源 : 深度学习防骗指南 )

2、数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。现有的推荐系统依赖于特征工程的效果。而特征工程建立在不断的深入理解问题和获取额外的数据源上。然而根据数据人能抽象出来的特征总类很有限,新数据源和新特征的获得会越来越难。随着人工特征工程的深入,投入的人力和时间越来越长,得到的新特征对系统的提升却越来越少。这个时候,使用深度学习来做特征表达,在成本上也许是一个更好的选择。


图:IBM Watson系统的精度提升曲线。可以看到一开始的时候结果提升的特别快,后面一点点的提升都要付出很大的努力,

因此我们基于Tensorflow在某个业务上做了DNN的尝试,跑通了整个流程,积累了一些经验。也比原有LR的模型在线上有了20%多的提升。希望这些代码也可以帮助各位同学快速的在自己的业务上实现一套深度模型的框架。


图: DNN在CTR预估的一般框架

一般来说,我们可以先选择一个比较简单的框架来跑通整个流程,然后再慢慢增加模型的复杂度。通常我们可以选用下图的框架,把我们用到的数据分为两类:连续的,和离散的特征。

对于连续的特征,需要做一些归一化;对于离散的特征,则一般要做一个Embedding,把一个离散的特征转成一个N维的向量。这个向量的长度一般来说是和该向量的取值空间成正比的。这个embedding的过程可以用FM来实现。 在我们的代码里,是通过Tensorflow自动embedding_column实现的。

所以把用户数据和推荐的物品数据放一起分成两类,然后把embedded之后的离散特征 和 连续特征组合在一起,作为神经网络的输入,输出就是[0,1] 是否点击。这里面我们就直接调用tensorflow的DNNClassifier。这个网络可以设计层数,每层的大小,dropout, 激活函数,学习率等等。

opt = tf.train.AdamOptimizer(learning_rate=0.01,
                                    beta1=0.9,
                                    beta2=0.999)            # default 0.001 0.9 0.999 


        m = tf.contrib.learn.DNNClassifier(model_dir=model_dir,
                                           feature_columns=deep_columns,
                                           hidden_units=[1024, 512, 256],
                                           optimizer = opt,
                                           activation_fn=tf.nn.relu,        # default
                                           dropout=0.05 )复制代码

所以后面就是一个不断调参的过程,当然这个调参也是有一些技巧。网上有很多,在这里就不一一来说了。


深度学习调参师
( 图片来源 : 深度学习防骗指南 )

总的来说,深度学习没有那么神秘,它是一个很有效的工具。在个性化推荐上应该已经有很多团队进行了很多尝试。在这里,我们给出了一个简单和有效的基于Tensorflow的实现方式,也希望可以帮助一些想要尝试深度学习的一些团队。


( 图片来源 : 李沐 来一起动手学深度学习吧 )


相关阅读

[ I am Jarvis ] :聊聊 FaceID 背后的深度学习视觉算法

王之捷:AI智能云端架构大幅提升智能语音识别能力

深度学习的异构加速技术(一)效率因通用而怠,构架为 AI 而生

此文已由作者授权腾讯云技术社区发布,转载请注明文章出处
原文链接:https://cloud.tencent.com/community/article/603674


相关文章:

  • Win2008R2修改远程桌面端口
  • DateUtils时间的封装
  • 数学口袋精灵bug的发现及单元测试
  • 用fail2ban阻止ssh暴力破解root密码
  • Centos 下面升级系统内核(转)
  • 两个二进制数求和
  • magento 货币换算
  • iOS -- tableView顶部留白
  • C链表的简单案例
  • Java与面向对象设计
  • TCP与UDP的区别
  • Mysql Order By 字符串排序,mysql 字符串order by
  • Java7,AutoClosable
  • Java循环练习:婚礼上的谎言
  • yum命令使用大全   软件安装
  • 5、React组件事件详解
  • Flex布局到底解决了什么问题
  • gcc介绍及安装
  • Java IO学习笔记一
  • Java面向对象及其三大特征
  • JSONP原理
  • Netty 4.1 源代码学习:线程模型
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • springMvc学习笔记(2)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • SQLServer插入数据
  • Vue 动态创建 component
  • vue-loader 源码解析系列之 selector
  • vuex 学习笔记 01
  • Vultr 教程目录
  • Wamp集成环境 添加PHP的新版本
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 将 Measurements 和 Units 应用到物理学
  • 七牛云假注销小指南
  • 如何在GitHub上创建个人博客
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一个完整Java Web项目背后的密码
  • mysql面试题分组并合并列
  • zabbix3.2监控linux磁盘IO
  • ​插件化DPI在商用WIFI中的价值
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (3)nginx 配置(nginx.conf)
  • (function(){})()的分步解析
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (编译到47%失败)to be deleted
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ******之网络***——物理***