李钊:如何入门深度学习个性化推荐

举报
SUNSKY 发表于 2020/02/10 14:15:43 2020/02/10
【摘要】 2017年3月9日,周四晚上8点30分,PaddlePaddle 官方开源社区成员李钊带来了主题为“深度学习第二课:个性化推荐”的交流。以下是主持人小冰整理的问答实录,记录了老师和读者问答的精彩时刻。问:看到你在生物信息学上使用深度学习技术,能分享一下深度学习在生物信息学、疾病预测等方面的应用吗?或者你们探索的经历?答:我们当初研究的是一种非编码 RNA,叫 microRNA,它对调控基因表...

2017年3月9日,周四晚上8点30分,PaddlePaddle 官方开源社区成员李钊带来了主题为“深度学习第二课:个性化推荐”的交流。以下是主持人小冰整理的问答实录,记录了老师和读者问答的精彩时刻。


问:看到你在生物信息学上使用深度学习技术,能分享一下深度学习在生物信息学、疾病预测等方面的应用吗?或者你们探索的经历?

:我们当初研究的是一种非编码 RNA,叫 microRNA,它对调控基因表达等方面有重要作用,一个 miRNA 可以调控几十个基因的表达,生物体内有 98% 的转录产物都是非编码 RNA。我们当初探索的经历还是蛮辛苦的,因为我们学校没有专门研究交叉学科的实验室,只是两个学院老师的合作。所以当时我从高中生物开始恶补了很多,和我合作的神经科学生物所的博士学长从最基础的 Linux命令开始学习,这个过程需要我们两个人不断互相沟通和互相学习的。我们最开始是使用一些软件来预测,渐渐发现这些软件时间太久了,没人维护,虽然论文引用数很高,但用不起来,而且我们对miRNA的整个预测过程并没有一个非常清晰的认识,调研了好久才发现在预测miRNA序列之前要先预测出它的基因转录产物剪切后的前体(pre-miRNA)序列,所以这也算是一个不断探索的过程吧。最后才尝试自己构建模型,根据论文的思路,但那时其实相关的实现并不丰富,只能算是一个启发式的探索吧,但起码有了结果。预测出的结果需要做实验验证或者拿到外边去做基因测序,花钱又会花时间……后来随着我来到百度,这个项目就交给其他人跟进了。


问:想问下本科生怎么入门呀,如果入门之后,在哪能找到提高自己的方法,比如阅读一些实例代码,项目什么的还是其他更好的方法?还有,如果想在这方面找到实习的机会,需要做哪些准备呢?

:我先把这个问题拆分成三个问题:

a. 如何入门。

感觉这已经是日经话题了,之前在一些论坛和社区也回答过类似的问题,现在尝试详细地梳理一下,我推荐的学习路线是:

Python 的基本编程能力。Python 可是说是目前数据科学最流行的语言了,因此如果不会 Python的话一定要先学习一下。学习一门新语言,可以推荐两个比较高效的方式。第一个是 Learn X in Y minutes(https://learnxinyminutes.com/),它给出了一些语言特性和基本用法,因为编程语言之间本身就有一些想通或相似的地方。比如 C和Go。第二个方法叫『koans』,它将知识点编写成测试代码,要用户类似于闯关一样地通过测试,也很有意思。

学习机器学习知识。现在网络资源这么丰富,足不出户就可以学习到名校课程,因此『学习能力』真的非常重要。技能可能会过时,但学习能力不会。周志华教授的西瓜书《机器学习》和 Andrew Ng 在 Coursera 上的 Machine Learning 课程,都非常适合新手。这两个可以同时进行学习。之后应该会对线性模型、LR、SVM、RF 等算法,过拟合、正则化等概念有所了解。同时可以接触一些 Python 科学计算的包,比如 Numpy、Pandas、sklearn,包括 Ipython、Jupyter Notebook 等工具。俗说话,『工欲善其事,必先利其器』哈。

深度学习知识。Udacity 上有一门 Google 工程师主讲的 Deep Learning 课程,非常简短和形象。这时能接触到 CNN、RNN、Word2Vec 等。此外斯坦福 CS231n(深度学习与计算机视觉) 可以做进一步的补充。这时,你应该有比较足够的知识储备了,如果愿意可以继续学习公开课,也可以去跑跑 Paddle 的教程。

b. 入门之后的提高方法。

很多人可能看了很多课程,也读了不少书,之后却不知道要做什么。我认为进入或接触一个新领域需要两个方面的支持:兴趣和需求。前者可能是推动你去入门学习的动力,就像刚才说的那些学习路线。而后者就可能是进一步提高自己的动力了,不知道如何解决问题,因为根本没有遇到问题。最重要的是一定要知道自己想做什么。如果仅仅是作为兴趣爱好,完全可以『花 20% 的时间了解一个新领域 80% 的知识』,去学习一下开源的 interesting demo。比如别人写了个汪峰歌词生成器,你能不能用另一种方式实现一个赵雷歌词生成器。如果是学生,可以参与一下实验室的项目,读一些论文,因为那里有真正的应用场景,有数据,还有学长能够指点你。此外还可以参加 Kaggle 的比赛,因为同样作为数据挖掘类的比赛社区,Kaggle 比国内的一些类似比赛社区的氛围要更好一些,因为很多人会把他们的实现开源出来,利于新手的学习。

c. 实习的准备。

简单来说,作为学生来讲,计算机的基础知识是非常重要的,有些公司会要求写代码,因此熟悉常用数据结构算法也非常有必要。然后就是竞赛获奖、实习经历、实验室项目、开源贡献、个人技术博客都可以留下好印象。除此之外,公司很多工作需要联合其他团队的人共同沟通完成,所以有时也会考察你的沟通能力、领导能力、团队合作能力等等『软技能』。总之,如果能证明读书时没有浪费时间,最好有产出证明的话,拿到offer应该不困难。


问:具体应该怎么将特征向量化呢?

:简单来说就是将特征映射到维度更低的实数空间上,这样可以表达更多的内容,比如可以用来计算距离以代表二者的相似度。在我们教程中有一章非常细致地介绍了词向量(http://book.paddlepaddle.org/word2vec/),之后应该也会有作者来进行Chat。


问:深度学习将在生命科学领域发挥重要作用。如何利用深度学习提高基因功能预测的精准度?尤其是对于数量庞大功能模糊的非编码RNA的预测亟待解决,希望能有机会共同探讨这些问题。

:非编码 RNA 的预测确实有很大的发展空间,尤其是在 Deep Learning 的环境下。Paddle 是计算平台,原则上,如果能把基因预测过程抽象成为一个可以用神经网络表达的数学模型,那么就可以完成这样的训练。我参加过一些社区的活动,其中有一些创业公司就是做类似这种基因 AI 或医疗 AI 的人,所以这也是一个很值得期待的领域,如果有机会真的可以互相学习一下。


问:这个机器人我以为是从语义理解的角度来说的机器人呢,没想到只是一个接口。更希望看到知识图谱、query分析的角度的机器人的内容。

:这篇文章中的机器人只是作为个性化推荐模型的应用场景,因为很多人训练好模型后不知道在哪能应用,你可以在此基础上继续开发,因为现在的功能都很简单。我自己开发的 Bot (和深度学习无关)现在有 1000 多个用户,就是一个很简单的收录群组的机器人,因为确实存在着这个需求。我本身也是一个 Hackathon 爱好者,渐渐总结出来的经验就是产品的应用场景比技术能力更加重要,比如说如果有一项特别牛的技术,但是没有好的落地点,没法进入人们生活,那就很尴尬了,重要的是能用这项技术改变人们的生活。对于和语义分析有关的 ChatBot 模型,请继续关注这个系列,会有更专业的人来分享!


问:文章中说深度学习崛起是在2012年,但是很多媒体说2016年才是深度学习元年,那么到底是哪一年呢?

:这是一个很有趣的问题。2012 年 Hinton 教授的团队在 ImageNet 上使用深度学习拿下了图像分类比赛的冠军,准确率高出第二名 10% 以上,让学术界和工业界都为之震动。而有的媒体认为 2016 年是元年,应该是从应用的角度出发,因为这一年发生了很多大事,使深度学习或者说是人工智能走出学术圈子进入大众视野。最受公众瞩目也是影响力最大的事件就是 AlphaGo 与世界冠军李世石的人机大战,包括能将照片转化成艺术家作品风格的App Prisma、Google 的神经网络翻译系统等等一系列事件,真正让大众接触到了人工智能和深度学习,尽管可能只有个模糊的概念。


问:使用深度学习要使用大量训练数据吧?如何解决数据稀疏问题? 个性化推荐中冷启动问题一般怎么解决?

:embedding可以将高维稀疏的向量映射为低维稠密的向量,这个在词向量一节中有具体的介绍,刚才也提到过了。冷启动有很多可以缓解的方法。比如,新下载了一个 APP,可能要求你输入个人信息,和喜欢的话题。完善的资料越多,系统能获取的信息越多。另外这个也可以应用在反作弊中,如果用户对一个社区产生了归属感,那么他就会去装扮和丰富自己的社区属性。比如小时候玩 QQ 空间,搞的花里胡哨的。。这可能会让他被识别为垃圾用户的几率降低。在 book 中也提到了 Deep Learning 在某些情况下可以缓解特定的冷启动问题的论文,可以去了解一下。


问:输入降维size\Batch size\learn rate,隐层神经元个数和层数设置怎么选择和调节,有没有好的方法和工具,一般使用多服务器还是以服务器多显卡的,500层以上网络几个显卡比较够用。

:网络的配置情况还是具体问题具体分析吧,这个貌似没有一个通用或者公认的效果好的方法。你多了一层效果好,我少了一层效果好,这应该是比较常见的事情。但是可以参考论文的实现。比如 YouTube 那个论文里,就有对模型深度的探索,它分析了网络层数和 embedding size 对模型的影响。就我个人浅显的经验而言,我更喜欢在特征工程上下功夫。调整网络的话,还是需要先分析,比如是过拟合还是欠拟合了,可以通过观察学习曲线做出针对性的调整。最后可以考虑一些 trick 什么的。。前几天有一个文章讲了 18 个trick,这些都可以参考一下。工具倒是可以推荐一下,因为我在做 Kaggle 的时候接触过一点。TPOT(https://github.com/rhiever/tpot) 是一个基于基因编程(genetic programming)的项目,能够自动完成特征选取、预处理、模型选择和参数优化,最终输出效果最好的 pipeline。当然,计算量也是很大的。。适用于一些机器学习算法,貌似不支持神经网络。因为这样的话计算量更大了。此外可以使用一些训练好的模型。比如Caffe Model Zoo。论文《Large-Scale Evolution of Image Classifiers》提出了自动选择神经网络的进化算法,我简单看了一下有点像遗传算法,都是从生物进化论获得的启发,这也是一个非常有意思和启发的探索。500 层网络的情况,建议去社区求助一下,可能会有类似情况的用户。


问:1)用户id,电影id也可以作为特征吗?特征不必须是随机变量吗?2)如果可以作为特征.又比如用户id有几百万或是更多,又该怎么编码?

:融合推荐模型中的ID是用户和电影的唯一标识,比如一个人对多部电影做出了评价,如果不使用的话怎么表达出对这些电影评价的用户是同一个人呢。ID 可以通过 embedding 映射,这个在 book 中就有介绍。


问:1)智能推荐需要依赖多大量级的数据才能做到很好的效果呢?2)学习该智能推荐和机器学习对硬件有什么特别的要求吗?比如,运算要求比较高,还是存储方面高? 3)有java版本的api可以使用吗?4)目前业界也有好多智能推荐的东西,比如电商,京东,淘宝,网易云音乐,推荐的东西质量也很一般,这个和大数据量级有关还是 和算法有关呢?

:1)『智能』和『很好』,都是比较模糊的概念吧。能依赖多少取决于有多少数据,现在有很多开源框架,但开源的数据很少,这些其实都是财富。

2)如果单纯学习的话,并不一定需要很强大的配置,如果需要,GPU应该就可以了,有需求上云平台也可以。对于新手而言,与其琢磨一个工作站,倒不如关注一下模型论文和理论基础。否则有点本末倒置了。这有点像很多同学搭建个人博客,买了域名、VPS,搭建了Nginx,CDN、CMS、主题、评论系统、反垃圾统统折腾了一通。最后一篇博客也没写。

3)目前Paddle没有Java的API,以后可能会有。如果非要使用Java开发的话,可以尝试一下deeplearning4j(https://deeplearning4j.org/)。

4 )个性化可以达到『千人千面』的目的,但毕竟众口难调。这些平台的数据应该都很丰富,谁让中国这么多人呢。。算法是重要的一点,但肯定不是全部,算法要和具体的业务结合,不同场景的推荐策略也不太相同。此外,对业务和商业的理解也非常重要,能不能形成一个良好的平台生态,也会在一定程度上影响推荐的效果。


问:有没step by step入门级进阶案例演示?怎样制定机器学习路线?怎么去攻克高门槛的算法?

:刚才上面回答的入门路线够 step by step 了吧,重要的还是自己能不能坚持下来。『高门槛』是怎样定义的呢,学习路线没走完的话,把基础知识理解了,就能收获很多。就像大数据的驱动下,并不是多么高深的算法才能取得好的效果了,有时一个lr就能满足业务需求。


问:我想问的是,一个管理软件产品,在记录了一些用户行为数据之后,怎么实现机器学习,实现对系统用户的提示、预警、及推荐等等,甚至给用户提供一些决策建议?

:这里听起来貌似有几个问题。

首先对自己产品的定义是怎样呢,如果只是一个普通的管理产品,那么就没有必要走AI路线。如果定义为一个人工智能类产品,能否进行一下市场调研呢,看看市场上这类产品的哪些地方,还可以做的更好。

记录的用户行为,是否足够用来机器学习分析呢。我在学校接触过一个小项目,是对一个公司的员工的忠诚度进行预估,但是数据就一个Excel表,所以这种分析好像也没啥意义。我觉得采用合适的数据科学的分析方法是可行的,具体还是要和产品的应用场景结合,来抽象或提取出一个数学模型。


问:现在实时推荐的解决方案是什么有来源出来吗,方案有在线上应用实施吗,有没有实战的case分享呢?

:这个我并不是很有经验,因为严格意义上讲,我之前参与的算是『个性化推荐』,还不能称之为是一个『推荐系统』。但是据我了解,业内很多的推荐都是在学习那个Wide&Deep模型,比如小米和美团。因为参加过一些Meetup,也会去请教一些,尤其是做这次Chat。工业界的线上应用,感觉还是应该多多交交朋友,参加社区分享,去具体了解一下。


问:1)deep and wide有点像highway network。wide那一部分被直接连到最后,deep那一部分做残差。目前来说哪部分特征用于wide哪部分特征用于deep是有一个什么标准来决定的呢?有没有可能加个gate来自动决定特征怎么分?2)wide用于“记忆”,deep用于“归纳”。这该怎么理解?wide是原始特征直接用于输出,deep可以提取抽象化的特征,关键是‘记忆’不太好理解。

:这个论文的特征选择我在文章简单提到了,具体可以看下论文。如果Wide部分不好理解,Google特意写了一个博客介绍,我觉得那个讲的应该比我讲的更透彻,地址是 https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html 。


问:候选生成网络结构能详解一下吗?

是指网络的结构吗?这个我们的文章中有一个模型的结构图。(是的。)我们对图进行了重构,也可以阅读论文的原图看看。很多内容还是推荐去读读论文原文,每次读都有不一样的收获。


(以上内容转自GitChat,版权归GitChat所有,转载请联系GitChat,微信号:GitChat,原文:《李钊:如何入门深度学习个性化推荐》

本文转载自异步社区。

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF9331300001E9201070156065E0


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。