深度学习应该是近两年计算机圈最火的词了。基于深度学习,工程师们在图像、语音、NLP等领域取得了令人振奋的进展。深度学习本身在不断探索和发展的同时,其潜能的极限尚未显现。当然,深度学习并不完美。例如,很多问题的特征很容易提取。我们可以直接使用SVM和决策树算法来达到很好的效果。深度学习帮不上什么忙。还有一些问题,我们没有足够的数据,我们很难通过深度学习算法得到可用的模型。另外,有些问题对计算资源和时间要求比较严格,在深度学习小型化没有突破的情况下也不是最好的方法。判断一个项目是否适合做深度学习的正确姿势(图片来源:深度学习反欺诈指南)。该系统大概率会成为深度学习最重要的应用场景之一。原因如下:目前的推荐系统必须面对海量数据,必须提取数万甚至数亿维度的特征。而深度学习本身就是一个非常好的表征学习框架。它擅长学习人类无法从海量数据中提取的特征组合。(图片来源:深度学习反作弊指南)数据和特征决定了机器学习的上限,而模型和算法只是接近这个上限。现有的推荐系统依赖于特征工程的效果。特征工程是基于对问题的不断深入理解和额外数据源的获取。然而,数据人能够抽象出的一般类别的特征是非常有限的,获取新的数据源和新的特征会变得越来越困难。随着人工特征工程的深入,投入的人力和时间越来越长,但得到的新特征对系统的提升却越来越少。这时候,使用深度学习进行特征表达,从成本上来说可能是更好的选择。图:IBMWatson系统的准确率提升曲线。可以看出,刚开始的时候成绩提升非常快,后面一点点的提升都需要付出很大的努力。因此,我们基于Tensorflow在某项业务上试用了DNN,跑通了整个流程,积累了一些经验。与原来的LR模型相比,在线提升了20%以上。希望这些代码也能帮助同学们在自己的业务中快速实现一套深度模型框架。图:DNN在CTR预估中的总体框架一般来说,我们可以先选择一个比较简单的框架来贯穿整个过程,然后再慢慢增加模型的复杂度。通常我们可以通过下图的框架,将我们使用的数据分为两类:连续特征和离散特征。对于连续特征,需要进行一些归一化;对于离散特征,一般需要一个Embedding,将离散特征转化为N维向量。该向量的长度通常与向量的值空间成正比。这个嵌入过程可以用FM来实现。在我们的代码中,是通过Tensorflow的自动embedding_column来实现的。因此,将用户数据和推荐物品数据放在一起分为两类,然后将嵌入的离散特征和连续特征组合起来作为神经网络的输入,输出为[0,1]是否被点击。这里我们直接调用tensorflow的DNNClassifier。这个网络可以设计层数,每层的大小,dropout,激活函数,学习率等等。opt=tf.train.AdamOptimizer(learning_rate=0.01,beta1=0.9,beta2=0.999)#default0.0010.90.999m=tf.contrib.learn.DNNClassifier(model_dir=model_dir,feature_columns=deep_columns,hidden_??units6=[1024,512,2,optimizer=opt,activation_fn=tf.nn.relu,#defaultdropout=0.05)所以下面就是一个不断调整参数的过程。当然,这个参数的调整也是有一些技巧的。网上有很多,这里就不一一说了。深度学习导师(来源:深度学习反作弊指南)总的来说,深度学习并没有那么神秘,是一个非常有效的工具。应该有很多团队在个性化推荐上做了很多尝试。在此,我们给出一个简单有效的基于Tensorflow的实现,希望对一些想尝试深度学习的团队有所帮助。原文链接:https://cloud.tencent.com/community/article/603674作者:苏伯兰【本文为专栏作者《腾讯云技术社区》原创稿件,转载请联系原作者获得授权】点此查看该作者更多好文
