选择困难症反了,这两把镰刀形红细胞贫血症用哪个好

后使用快捷导航没有帐号?
平板/笔记本
终端云服务专区
十二星座中,谁的选择困难症最严重?
&天下无双&
来自:荣耀畅玩4A SCL-AL00
第十二名:天蝎座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_9.jpg (47.91 KB, 下载次数: 0)
10:46 上传
天蝎的独立性在十二星座中可是数一数二的,人生大事都是自己拿的主意;要是有选择困难症那还怎么活呢?所以说,做选择对天蝎来说SO easy,跟着自己的内心走,走哪儿算哪儿,自己做的决定都是对的,简直完美。
第十一名:水瓶座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_3.jpg (94.47 KB, 下载次数: 0)
10:46 上传
水瓶座可是跟天蝎并且独立自强榜前两位的星座了,所以做选择什么的是难不倒水瓶的,因为水瓶非常的清楚自己想要什么,这是个最会规划自己生活的星座了;选择困难症绝对个水瓶搭不上边儿。
第十名:白羊座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_5.jpg (57.95 KB, 下载次数: 0)
10:46 上传
直爽的大白羊怎么能陷在选择困难症上面呢?典型的说走咱就走的性格,对不对先不论,做了再说,白羊的口号就是干干干,冲锋陷阵的主儿,哪还有什么选择困难症啊,选择的不对再改呗,对于白羊来说真不是事儿。
第九名:狮子座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_0.jpg (29 KB, 下载次数: 1)
10:46 上传
狮子这个自大任性的星座怎么会让自己的生活由着别人指手画脚呢?所以选择困难症在狮子身上也是不存在的,众爱卿可以提意见,不过最终的选择权可是稳稳的把握在狮子自己手中,爱咋滴咋滴,你们谁也管不着。
第八名:射手座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_9.jpg (27.09 KB, 下载次数: 0)
10:46 上传
射手是个天才跟神经质混搭的星座,对于他们来说选择就是缘分呐,高兴选什么就是什么,哪儿那么多磨磨唧唧的;射手简直将随性演绎到一种境界,对于他们来说选择真不重要,因为射手都是带着自制反悔药的大神。
第七名:双子座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_9.jpg (22.86 KB, 下载次数: 0)
10:46 上传
双子这个多变的星座疯起来跟射手一模一样的,所以想法很多的双子选择也很多,今天尝试A方案,明天再来B方案,好不好自己门儿清;所以选择困难症对于双子来说也不是什么大事儿,大不了推翻重新来过嘛。
第六名:处女座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_6.jpg (54.26 KB, 下载次数: 0)
10:46 上传
处女这个有点洁癖的较真儿狂星座可是将什么东西都分的清清楚楚,今天要穿什么颜色的衣服,明天要用哪个味道的香水,处女心中早就琢磨着了;不过选择困难症对于处女来说也是陌生的,毕竟,大处女可是个会逃避选择的主儿,选不了还躲不了吗?哼!
第五名:金牛座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_7.jpg (43.15 KB, 下载次数: 0)
10:46 上传
金牛算是选择困难症的轻度患者,因为稳重的金牛在做选择前,一定把事情的前前后后都做了精打细算,思虑可谓相当的周全,他们可能不确定自己要什么,但是他们一定非常清楚自己不想要什么,所以心中大概有个谱,轻微选择困难症。
第四名:摩羯座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_1.jpg (51.59 KB, 下载次数: 0)
10:46 上传
摩羯也是有选择困难症的主儿,不过还不算是病入膏肓无药可医;摩羯其实是那种特精明的星座,对于不愿意做选择的事儿,摩羯就开始装傻充楞,“啊!听不懂唉!!”面对别人的逼问选择时,总是莫名其妙的岔开话题。
第三名:巨蟹座
%2Fstorage%2Fsdcard1%2FUCDownloads%2Fpictures%2Fpic_uc_2.jpg (34.89 KB, 下载次数: 0)
10:46 上传
纠结狂魔巨蟹座选择困难症略微严重,巨蟹其实并不是害怕选择,而是他们看不清选择的结局时,往往会很纠结很害怕,充满了担心和疑虑;尤其在感情的事儿上面,巨蟹简直是选择障碍了,在担心和纠结症一遍遍徘徊。
第二名:双鱼座
为了晚上是去吃火锅还是吃料理能纠结的思考一整个下午的奇葩双鱼简直就是选择中毒症了;双鱼的选择困难症主要就是想得太多,思前想后的墨迹个没完,最后时间花了一大把还是没弄明白自己到底选啥。
第一名:天秤座
早上起床纠结先睁左眼还是先睁右眼,是先洗脸还是先刷牙,上午想着中午吃啥,中午惦记着晚上去哪儿吃;出门选衣服花个三十分钟,挑鞋子再花个三十分钟,简直就是选择作死重症患者;做个决定比特么登天还难,天秤的人生苦难全体现在选择上了。
width:100%">
&新学乍练&
来自:浏览器
width:100%">
&花粉圈主&
来自:荣耀畅玩4C CHM-TL00H
唉!天秤的选择困难症众所周知了。
width:100%">
&略有小成&
来自:华为Mate9 Pro LON-AL00
我就是天平座
width:100%">
&花粉圈主&
来自:荣耀畅玩4C CHM-TL00H
huafans 发表于
我就是天平座
欢迎天秤朋友,欢迎常来星座圈^ω^
width:100%">
&略有小成&
来自:华为Mate9 Pro LON-AL00
落目时分 发表于
欢迎天秤朋友,欢迎常来星座圈^ω^
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
好基友勋章
花粉好机友,注册时间大于99天
大富翁勋章
达到1万花瓣后可申请获得大富翁勋章
驴行观雾凇重游灵山沐浴隆冬的暖阳唯美照系列华为手机强力支持手机镜头里的微观世界清晨的阳光
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利专治选择困难症——bandit算法2 years ago王家卫在《一代宗师》里寄出一句台词: 人生要是无憾,那多无趣本文作者说: 算法要是无憾,那应该是过拟合了。其实我想引出的是:怎么衡量不同bandit算法解决多臂问题的好坏?多臂问题里有一个概念叫做累计遗憾(regret)[2]解释一下这个公式:首先,这里我们讨论的每个臂的收益非0即1,也就是伯努利收益。公式1最直接:每次选择后,上帝都告诉你,和本该最佳的选择差了多少,然后把每次差距累加起来就是总的遗憾。wB(i)是第i次试验时被选中臂的期望收益, w\*是所有臂中的最佳那个,如果上帝提前告诉你,我们当然每次试验都选它,问题是上帝不告诉你,所以我们就有了这篇文章。这个公式可以用来对比不同bandit算法的效果:对同样的多臂问题,用不同的bandit算法试验相同次数,看看谁的regret增长得慢。本着大家可以直接堆代码的原则,所以本文跳过一切数学上的分析,赤裸裸地陈列出最常用的几个bandit算法。几个bandit算法
第一个,Thompson sampling算法。这个算法我喜欢它,因为它只有一行代码就可以实现。简单介绍一下它的原理:假设每个臂是否产生收益,其背后有一个概率分布,产生收益的概率为p我们不断地试验,去估计出一个置信度较高的*概率p的概率分布*就能近似解决这个问题了。 怎么能估计概率p的概率分布呢? 答案是假设概率p的概率分布符合beta(wins, lose)分布,它有两个参数: wins, lose。每个臂都维护一个beta分布的参数。每次试验后,选中一个臂,摇一下,有收益则该臂的wins增加1,否则该臂的lose增加1。每次选择臂的方式是:用每个臂现有的beta分布产生一个随机数b,选择所有臂产生的随机数中最大的那个臂去摇。以上就是Thompson采样,用python实现就一行:choice = numpy.argmax(pymc.rbeta(1 + self.wins, 1 + self.trials - self.wins))
第二个是UCB算法,UCB算法全称是Upper Confidence Bound(置信区间上界),不多说了,它的算法步骤如下[4]:先对每一个臂都试一遍之后,每次选择以下值最大的那个臂其中加号前面是这个臂到目前的收益均值,后面的叫做bonus,本质上是均值的标准差,t是目前的试验次数,Tjt是这个臂被试次数。 这个公式反映:均值越大,标准差越小,被选中的概率会越来越大,起到了exploit的作用;同时哪些被选次数较少的臂也会得到试验机会,起到了explore的作用。第三个是Epsilon-Greedy算法。这是一个朴素的算法,也很简单有效,有点类似模拟退火:选一个(0,1)之间较小的数epsilon 每次以概率epsilon(产生一个[0,1]之间的随机数,比epsilon小)做一件事:所有臂中随机选一个。否则,选择截止当前,平均收益最大的那个臂。是不是简单粗暴?epsilon的值可以控制对Exploit和Explore的偏好程度。越接近0,越保守,只想花钱不想挣钱。最后还有一个完全是朴素的:先试几次,每个臂都有了均值之后,一直选均值最大那个臂。这个算法是我们人类在实际中最常采用的,不可否认,它还是比随机乱猜要好。以上五个算法,我们用10000次模拟试验的方式对比了其效果如图,原始代码来源[5]:算法效果对比一目了然:UCB算法和Thompson采样算法显著优秀一些。至于你实际上要选哪一种bandit算法,你可以选一种bandit算法来选bandit算法。。。用bandit算法解决推荐系统冷启动的简单思路我想,屏幕前的你已经想到了,推荐系统冷启动可以用bandit算法来解决一部分。大致思路如下:用分类或者Topic来表示每个用户兴趣,我们可以通过几次试验,来刻画出新用户心目中对每个topic的感兴趣概率。这里,如果用户对某个topic感兴趣,就表示我们得到了收益,如果推给了它不感兴趣的topic,推荐系统就表示很遗憾(regret)了。当一个用户来了,针对这个用户,我们用Thompson算法为每一个topic采样一个随机数,排序后,输出采样值top N 的推荐item。注意,这里略有改动,原始多臂问题每次只摇一个臂,我们这里一次摇N个臂。获取用户的反馈,比如点击。没有反馈则更新对应topic的lose值,点击了则更新对应topic的wins值。预告:bandit算法与Ridge Regressionbandit算法与协同过滤[1] [2] [3] [4] [5] 本文首发微信公众号【ResysChina】,中国最专业的个性化推荐技术社区。猜你喜欢:赞赏2 人赞赏392收藏分享举报文章被以下专栏收录公众号ResysChina,最专业的个性化推荐技术产品社区。{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&微信公众号 ResysChina,中国最专业的个性化推荐技术与产品社区。更多内容会首发在微信公众号,推荐关注。&,&permission&:&COLUMN_PUBLIC&,&memberId&:1891,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&公众号ResysChina,最专业的个性化推荐技术产品社区。&,&urlToken&:&resyschina&,&id&:14317,&imagePath&:&6efbec2050ccd78a550d71.jpeg&,&slug&:&resyschina&,&applyReason&:&0&,&name&:&ResysChina&,&title&:&ResysChina&,&url&:&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fresyschina&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:7509,&avatar&:{&id&:&6efbec2050ccd78a550d71&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\u002Fpic3.zhimg.com\u002F6efbec2050ccd78a550d71_l.jpg&,&articlesCount&:33},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002F44c18a2eddcfcad6432385c_r.jpg&,&lastUpdated&:,&imagePath&:&44c18a2eddcfcad6432385c.jpg&,&permission&:&ARTICLE_PUBLIC&,&topics&:[096],&summary&:&选择是一个技术活著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要。我们会遇到很多选择的场景。上哪个大学,学什么专业,去哪家公司,中午吃什么,等等。这些事情,都让选择困难症的我们头很大。那么,有办法能够应对这些问题吗?答案是:有!而且是科学的…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T01:09:17+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:739050,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&专治选择困难症——bandit算法&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:14317,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\u002Fpic3.zhimg.com\u002F44c18a2eddcfcad6432385c_r.jpg&,&author&:{&bio&:&动如神经,静如痴呆。&,&isFollowing&:false,&hash&:&27faa688f0ab0&,&uid&:48,&isOrg&:false,&slug&:&xingwudao&,&isFollowed&:false,&description&:&每个人只能陪你走一段路,迟早是要分开的。&,&name&:&刑无刀&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxingwudao&,&avatar&:{&id&:&v2-4a7e06d81&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:130987,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:382044}],&title&:&专治选择困难症——bandit算法&,&author&:&xingwudao&,&content&:&\u003Ch2\u003E选择是一个技术活\u003C\u002Fh2\u003E\u003Cp\u003E著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要。\u003C\u002Fp\u003E\u003Cp\u003E我们会遇到很多选择的场景。上哪个大学,学什么专业,去哪家公司,中午吃什么,等等。这些事情,都让选择困难症的我们头很大。那么,有办法能够应对这些问题吗?\u003C\u002Fp\u003E\u003Cp\u003E答案是:有!而且是科学的办法,而不是“走近科学”的办法。那就是bandit算法!\u003C\u002Fp\u003E\u003Cp\u003Ebandit算法来源于人民群众喜闻乐见的赌博学,它要解决的问题是这样的[1]:\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic1.zhimg.com\u002F7dfcea120e721d8f9a9d6_b.jpg\& data-rawwidth=\&298\& data-rawheight=\&247\& class=\&content_image\& width=\&298\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='298'%20height='247'&&\u002Fsvg&\& data-rawwidth=\&298\& data-rawheight=\&247\& class=\&content_image lazy\& width=\&298\& data-actualsrc=\&https:\u002F\u002Fpic1.zhimg.com\u002F7dfcea120e721d8f9a9d6_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cblockquote\u003E\u003Cp\u003E一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样,他不知道每个老虎机吐钱的概率分布是什么,那么想最大化收益该怎么整?这就是多臂赌博机问题(Multi-armed bandit problem, K-armed bandit problem, MAB)。\u003C\u002Fp\u003E\u003Cp\u003E怎么解决这个问题呢?求菩萨?拜赌神?都不好使,最好的办法是去试一试,而这个试一试也不是盲目地试,而是有策略地试,越快越好,这些策略就是bandit算法。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E这个多臂问题,它是一个可以装下很多问题的万能框:\u003C\u002Fp\u003E\u003Cp\u003E1. 假设一个用户对不同类别的内容感兴趣程度不同,那么我们的推荐系统初次见到这个用户时,怎么快速地知道他对每类内容的感兴趣程度?这就是推荐系统的冷启动。\u003C\u002Fp\u003E\u003Cp\u003E2. 假设我们有若干广告库存,怎么知道该给每个用户展示哪个广告,从而获得最大的点击收益?是每次都挑效果最好那个么?那么新广告如何才有出头之日?\u003C\u002Fp\u003E\u003Cp\u003E3. 我们的算法工程师又想出了新的模型,有没有比A\u002FB test更快的方法知道它和旧模型相比谁更靠谱?\u003C\u002Fp\u003E\u003Cp\u003E4. ...\u003C\u002Fp\u003E\u003Cp\u003E全都是关于选择的问题。只要是关于选择的问题,都可以简化成一个多臂赌博机问题,毕竟小赌怡情嘛,人生何处不赌博。\u003C\u002Fp\u003E\u003Cp\u003E特别提出,在计算广告和推荐系统领域,针对这个问题,还有个说法叫做EE问题:exploit-explore问题。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003Eexploit意思就是:比较确定的兴趣,当然要用啊。好比说我们已经挣到的钱,当然要花啊;\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003Eexplore意思就是:不断探索用户新的兴趣才行,不然很快就会出现一模一样的反复推荐。就好比我们虽然有一点钱可以花了,但是还得继续搬砖挣钱啊,不然花完了喝西北风啊。\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Ch2\u003Ebandit算法哪家强\u003C\u002Fh2\u003E\u003Cp\u003E现在来一本正经地介绍一下bandit算法怎么解决这类问题的。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E我们的选择到底有多遗憾?\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E王家卫在《一代宗师》里寄出一句台词:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cblockquote\u003E 人生要是无憾,那多无趣\u003C\u002Fblockquote\u003E\u003Cp\u003E本文作者说:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cblockquote\u003E 算法要是无憾,那应该是过拟合了。\u003C\u002Fblockquote\u003E\u003Cp\u003E其实我想引出的是:怎么衡量不同bandit算法解决多臂问题的好坏?多臂问题里有一个概念叫做累计遗憾(regret)[2]\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic1.zhimg.com\u002F23b47a465c7e8fbf6a770eb25bdca8cd_b.jpg\& data-rawwidth=\&570\& data-rawheight=\&364\& class=\&origin_image zh-lightbox-thumb\& width=\&570\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002F23b47a465c7e8fbf6a770eb25bdca8cd_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='570'%20height='364'&&\u002Fsvg&\& data-rawwidth=\&570\& data-rawheight=\&364\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&570\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002F23b47a465c7e8fbf6a770eb25bdca8cd_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic1.zhimg.com\u002F23b47a465c7e8fbf6a770eb25bdca8cd_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E解释一下这个公式:\u003C\u002Fp\u003E\u003Cp\u003E首先,这里我们讨论的每个臂的收益非0即1,也就是伯努利收益。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E公式1最直接:每次选择后,上帝都告诉你,和本该最佳的选择差了多少,然后把每次差距累加起来就是总的遗憾。\u003C\u002Fp\u003E\u003Cp\u003EwB(i)是第i次试验时被选中臂的期望收益, w\\*是所有臂中的最佳那个,如果上帝提前告诉你,我们当然每次试验都选它,问题是上帝不告诉你,所以我们就有了这篇文章。\u003C\u002Fp\u003E\u003Cp\u003E这个公式可以用来对比不同bandit算法的效果:对同样的多臂问题,用不同的bandit算法试验相同次数,看看谁的regret增长得慢。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E本着大家可以直接堆代码的原则,所以本文跳过一切数学上的分析,赤裸裸地陈列出最常用的几个bandit算法。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E几个bandit算法\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E第一个,Thompson sampling算法。这个算法我喜欢它,因为它只有一行代码就可以实现。\u003C\u002Fp\u003E\u003Cp\u003E简单介绍一下它的原理:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E假设每个臂是否产生收益,其背后有一个概率分布,产生收益的概率为p\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E我们不断地试验,去估计出一个置信度较高的*概率p的概率分布*就能近似解决这个问题了。 \u003C\u002Fp\u003E\u003Cp\u003E怎么能估计概率p的概率分布呢? 答案是假设概率p的概率分布符合beta(wins, lose)分布,它有两个参数: wins, lose。\u003C\u002Fp\u003E\u003Cp\u003E每个臂都维护一个beta分布的参数。每次试验后,选中一个臂,摇一下,有收益则该臂的wins增加1,否则该臂的lose增加1。\u003C\u002Fp\u003E\u003Cp\u003E每次选择臂的方式是:用每个臂现有的beta分布产生一个随机数b,选择所有臂产生的随机数中最大的那个臂去摇。\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E以上就是Thompson采样,用python实现就一行:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Echoice = numpy.argmax(pymc.rbeta(1 + self.wins, 1 + self.trials - self.wins))\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E第二个是UCB算法,UCB算法全称是Upper Confidence Bound(置信区间上界),不多说了,它的算法步骤如下[4]:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E先对每一个臂都试一遍\u003C\u002Fp\u003E\u003Cp\u003E之后,每次选择以下值最大的那个臂\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic3.zhimg.com\u002Fd24c1ef3ec00c03eb28503b_b.jpg\& data-rawwidth=\&276\& data-rawheight=\&120\& class=\&content_image\& width=\&276\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='276'%20height='120'&&\u002Fsvg&\& data-rawwidth=\&276\& data-rawheight=\&120\& class=\&content_image lazy\& width=\&276\& data-actualsrc=\&https:\u002F\u002Fpic3.zhimg.com\u002Fd24c1ef3ec00c03eb28503b_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E其中加号前面是这个臂到目前的收益均值,后面的叫做bonus,本质上是均值的标准差,t是目前的试验次数,Tjt是这个臂被试次数。 \u003C\u002Fp\u003E\u003Cp\u003E这个公式反映:均值越大,标准差越小,被选中的概率会越来越大,起到了exploit的作用;同时哪些被选次数较少的臂也会得到试验机会,起到了explore的作用。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E第三个是Epsilon-Greedy算法。这是一个朴素的算法,也很简单有效,有点类似模拟退火:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E选一个(0,1)之间较小的数epsilon \u003C\u002Fp\u003E\u003Cp\u003E每次以概率epsilon(产生一个[0,1]之间的随机数,比epsilon小)做一件事:所有臂中随机选一个。否则,选择截止当前,平均收益最大的那个臂。\u003C\u002Fp\u003E\u003Cp\u003E是不是简单粗暴?epsilon的值可以控制对Exploit和Explore的偏好程度。越接近0,越保守,只想花钱不想挣钱。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E最后还有一个完全是朴素的:\u003C\u002Fp\u003E\u003Cblockquote\u003E先试几次,每个臂都有了均值之后,一直选均值最大那个臂。这个算法是我们人类在实际中最常采用的,不可否认,它还是比随机乱猜要好。\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E以上五个算法,我们用10000次模拟试验的方式对比了其效果如图,原始代码来源[5]:\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic2.zhimg.com\u002F2d8c17d65b09fb7ab0d77f31ff89aa37_b.jpg\& data-rawwidth=\&768\& data-rawheight=\&337\& class=\&origin_image zh-lightbox-thumb\& width=\&768\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002F2d8c17d65b09fb7ab0d77f31ff89aa37_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='768'%20height='337'&&\u002Fsvg&\& data-rawwidth=\&768\& data-rawheight=\&337\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&768\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002F2d8c17d65b09fb7ab0d77f31ff89aa37_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic2.zhimg.com\u002F2d8c17d65b09fb7ab0d77f31ff89aa37_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E算法效果对比一目了然:UCB算法和Thompson采样算法显著优秀一些。\u003C\u002Fp\u003E\u003Cp\u003E至于你实际上要选哪一种bandit算法,你可以选一种bandit算法来选bandit算法。。。\u003C\u002Fp\u003E\u003Ch2\u003E用bandit算法解决推荐系统冷启动的简单思路\u003C\u002Fh2\u003E\u003Cp\u003E我想,屏幕前的你已经想到了,推荐系统冷启动可以用bandit算法来解决一部分。\u003C\u002Fp\u003E\u003Cp\u003E大致思路如下:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E用分类或者Topic来表示每个用户兴趣,我们可以通过几次试验,来刻画出新用户心目中对每个topic的感兴趣概率。\u003C\u002Fp\u003E\u003Cp\u003E这里,如果用户对某个topic感兴趣,就表示我们得到了收益,如果推给了它不感兴趣的topic,推荐系统就表示很遗憾(regret)了。\u003C\u002Fp\u003E\u003Cp\u003E当一个用户来了,针对这个用户,我们用Thompson算法为每一个topic采样一个随机数,排序后,输出采样值top N 的推荐item。注意,这里略有改动,原始多臂问题每次只摇一个臂,我们这里一次摇N个臂。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E获取用户的反馈,比如点击。没有反馈则更新对应topic的lose值,点击了则更新对应topic的wins值。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E预告:\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ebandit算法与Ridge Regression\u003C\u002Fp\u003E\u003Cp\u003Ebandit算法与协同过滤\u003C\u002Fp\u003E\u003Cp\u003E[1] \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMulti-armed_bandit\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttps:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Een.wikipedia.org\u002Fwiki\u002FM\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Eulti-armed_bandit\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E[2] \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fnbviewer.jupyter.org\u002Fgithub\u002FCamDavidsonPilon\u002FProbabilistic-Programming-and-Bayesian-Methods-for-Hackers\u002Fblob\u002Fmaster\u002FChapter6_Priorities\u002FChapter6.ipynb%23\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Enbviewer.jupyter.org\u002Fgi\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Ethub\u002FCamDavidsonPilon\u002FProbabilistic-Programming-and-Bayesian-Methods-for-Hackers\u002Fblob\u002Fmaster\u002FChapter6_Priorities\u002FChapter6.ipynb#\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E[3] \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FThompson_sampling\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttps:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Een.wikipedia.org\u002Fwiki\u002FT\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Ehompson_sampling\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E[4] \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fhunch.net\u002F%7Ecoms-Flecture20.pdf\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Ehunch.net\u002F~coms-Fle\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Ecture20.pdf\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E[5] \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fgist.github.com\u002Fanonymous\u002F211b599b7bef958e50af\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttps:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Egist.github.com\u002Fanonymo\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Eus\u002F211b599b7bef958e50af\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E本文首发微信公众号【ResysChina】,中国最专业的个性化推荐技术社区。\u003C\u002Fp\u003E\u003Cp\u003E猜你喜欢:\u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F?refer=resyschina\& class=\&internal\&\u003E「深度学习与推荐系统」\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T17:09:17.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:34,&collapsedCount&:0,&likeCount&:392,&state&:&published&,&isLiked&:false,&slug&:&&,&lastestTipjarors&:[{&isFollowed&:false,&name&:&黄黄&,&headline&:&&,&avatarUrl&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-f713b1fb48839cbc000d937dca53b01a_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&huang-huang-52-87&,&bio&:&算法开发&,&hash&:&911a69d45c6dfb74117f14&,&uid&:64,&isOrg&:false,&description&:&&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fhuang-huang-52-87&,&avatar&:{&id&:&v2-f713b1fb48839cbc000d937dca53b01a&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&isFollowed&:false,&name&:&杨思达zzzz&,&headline&:&&,&avatarUrl&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-5eceeab5e5c812f903cb0_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&albertxin&,&bio&:null,&hash&:&2a316a61e0fda5e58bffc6a227739cfb&,&uid&:92,&isOrg&:false,&description&:&&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Falbertxin&,&avatar&:{&id&:&v2-5eceeab5e5c812f903cb0&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002F44c18a2eddcfcad6432385c_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&个性化推荐&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&推荐系统实现&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&推荐算法&}],&adminClosedComment&:false,&titleImageSize&:{&width&:1100,&height&:768},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&resyschina&,&name&:&ResysChina&},&tipjarState&:&activated&,&tipjarTagLine&:&真诚赞赏,手留余香&,&sourceUrl&:&&,&pageCommentsCount&:34,&tipjarorCount&:2,&annotationAction&:[],&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T01:09:17+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:&已不再是曾经的追风少年&,&isFollowing&:false,&hash&:&4ff7b2e8eca74e5f01af79&,&uid&:76,&isOrg&:false,&slug&:&BonHiver&,&isFollowed&:false,&description&:&&,&name&:&屎一坨&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002FBonHiver&,&avatar&:{&id&:&1ac6a158b6b2ac636f62e62ce4bd7957&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&e55eee3c2d8aff&,&uid&:92,&isOrg&:false,&slug&:&adv-adj&,&isFollowed&:false,&description&:&数学二转的计算机硕士,不会编程的小学生&,&name&:&adv adj&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fadv-adj&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&一句话也不介绍&,&isFollowing&:false,&hash&:&fbf5e78df1f&,&uid&:56,&isOrg&:false,&slug&:&jin-chen-57-86&,&isFollowed&:false,&description&:&&,&name&:&金晨&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fjin-chen-57-86&,&avatar&:{&id&:&baeb60a46c6fd908f9f25a89&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&&,&isFollowing&:false,&hash&:&feaa60d2fea0d58dec750&,&uid&:64,&isOrg&:false,&slug&:&dong-fang-zi-xiang&,&isFollowed&:false,&description&:&&,&name&:&东方子翔&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fdong-fang-zi-xiang&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&504abea02b5efe14760c46b&,&uid&:96,&isOrg&:false,&slug&:&lishixiang&,&isFollowed&:false,&description&:&&,&name&:&猕猴桃kk&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Flishixiang&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cimg src=\&https:\u002F\u002Fpic1.zhimg.com\u002F7dfcea120e721d8f9a9d6_200x112.jpg\& data-rawwidth=\&298\& data-rawheight=\&247\& class=\&origin_image inline-img zh-lightbox-thumb\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002F7dfcea120e721d8f9a9d6_r.jpg\&\u003E选择是一个技术活著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要。我们会遇到很多选择的场景。上哪个大学,学什么专业,去哪家公司,中午吃什么,等等。这些事情,都让选择困难症的我们头很大。那么,有办法能够应对这些问题吗?答案是:有!而且是科学的…&,&reviewingCommentsCount&:0,&meta&:{&previous&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&推荐系统&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&主题模型&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&机器学习&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&&,&isFollowing&:false,&hash&:&47aa9ec5cbef6f2f14c21&,&uid&:72,&isOrg&:false,&slug&:&xlvector&,&isFollowed&:false,&description&:&目前在研究深度学习&,&name&:&项亮&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxlvector&,&avatar&:{&id&:&dafd03fc57a&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&resyschina&,&name&:&ResysChina&},&content&:&\u003Cp\u003E本文纯属搞笑!!\u003C\u002Fp\u003ETopic Model (主题模型)这个东西如果从99年Hofmann的pLSA开始算起,得火了有近20年了。这20年里出现了很多东西,这篇文章不准备对这些东西做细致的介绍,而是谈谈个人对这些模型的一些看法。首先,我先阐明观点,就是这些东西虽然看起来很不一样,但是在某一层面的本质上看差不太多。\u003Cp\u003E因为我是做推荐系统的,我就从推荐系统这个角度去说吧。2009年参加Netflix Prize的时候,当时解决的是一个评分预测的问题。也就是每个用户给电影打了1~5分,然后让你去预测一个用户对一个电影会打多少分。这个时候就遇到一个矩阵,叫做user-item矩阵。这个矩阵中大量的元素都是missing的,而不missing的哪些pair都有一个1~5分的分数。整个比赛的目的就是去预测那些missing的pair如果不missing会是多少分。\u003C\u002Fp\u003E\u003Cp\u003E在Netflix Prize之前,这个问题都是这么解决的,首先把missing的值都填上3分(也有其他策略,但这不是本文的重点),然后把user-item矩阵做SVD分解,选取最大的K个特征值对应的特征向量组成的矩阵,然后再乘起来。这个时候,那些missing的pair都变成了其他的分数,这个分数就是预估值。在Netflix Prize这个方法能work的原因是当时只有一个MovieLens数据集,那个数据集只有几百个用户和物品,这么做还是OK的。但到了Netflix Prize,数据集顿时到了几十万维的矩阵,群众们傻眼了,因为SVD分解是个O(n^3)的复杂度。\u003C\u002Fp\u003E\u003Cp\u003E这个时候有个哥们忽然在Blog上发了一篇文章(他的那篇博客可能是学术论文引用最多的博客文章),说你们不用管那些missing的pair。你们就直接在不missing的pair上用梯度下降法学习user和item的latent factor的表示吧。于是有了那个著名的伪SVD算法:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Er(u, i) = &p(u), q(i)&\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E于是整个Netflix Prize中涌现了一大堆带SVD的算法,比如RSVD,NSVD,SVD++等等。我也发明了几个SVD算法,因为照着这个思路太容易发散了。\u003C\u002Fp\u003E\u003Cp\u003E但是,我一直觉得Netflix Prize其实误导了整个推荐系统的发展。当然应该说是更早的MovieLens就误导了,只是Netflix Prize没有纠正过来。这个误导就是,评分预测其实不是重要的问题,反而是一个很次要的问题。因为,当人民群众拿着Netflix Prize的算法准备用在自己的系统里时,顿时傻眼了,因为没有评分数据。他们有的只是观看数据,点击数据,购买数据等等。这些数据有一个特点,就是user-item矩阵中所有的非missing值,都是1。而不是Netflix Prize里面的评分。而且人们意识到,评分这件事有2个步骤:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E看电影\u003C\u002Fli\u003E\u003Cli\u003E评分\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E也就是说,如果用户连电影都不看,他是不会去评分的。于是,预测用户会看什么电影,并把这些电影推荐给他,显然比知道这个用户会看这个电影后,预测他看完会给多少分更重要。\u003C\u002Fp\u003E\u003Cp\u003E但预测用户会看什么电影时,我们遇到了一个问题,就是如何对一个非missing值都是1的矩阵进行分解。这也是2012年KDD Cup的Track 2提出的问题。\u003C\u002Fp\u003E\u003Cp\u003E这个时候,人们忽然发现,在NLP领域,做Topic Model时,遇到的doc-word矩阵,和我们遇到的这种user-item矩阵一样,都是非missing值都是1的矩阵(有人会说doc-word矩阵的值是tfidf,但本质上其实就是1)。而那个领域已经提出了2个算法来解决这个问题,就是著名的pLSA和LDA。这两个算法的训练复杂读都只取决于非0元素的个数,和0元素的个数都没有关系。于是很多人开始把这两个算法应用于推荐系统领域(其实之前在Netflix Prize就有人用了,但后来因为那个SVD算法太NB,大家都纷纷搞SVD去了)。\u003C\u002Fp\u003E\u003Cp\u003E但是在2012年KDD Cup的时候。我们想,我们为什么不在0,1上训练SVD的模型呢?那是因为0太多了(这里0就是missing value)。既然0太多,我们采样吧。比如我们每遇到一个1,就随机采样出N个0,然后用SVD训练。那么我们怎么采样0呢?当时有两种候选:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E纯随机的选择,也就是说如果一个用户看过K个item,我们就从所有item中随机选择 NK个他没看过的item作为负样本。\u003C\u002Fli\u003E\u003Cli\u003E按照item的热门度去选,也就是说如果一个用户看过K个item,我们就从所有item中按照item的热门度随机选择 NK个他没看过的item作为负样本。\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E第2种更合理。这是因为,对于missing值来说,一个人没有看过一个电影,有两种可能:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E他不知道有这个电影\u003C\u002Fli\u003E\u003Cli\u003E他知道,但不喜欢\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E而对于热门的电影来说,是2个概率更高(当然这里还存在一种可能,就是他在其他平台上看过了,但这个在整体用户的统计意义上不高)。而我们的模型学习的就是兴趣,所以越可能是原因2的item,越应该作为负样本。这个算法就是Negative Sampling。\u003C\u002Fp\u003E\u003Cp\u003E到这个时候为止,对于0-1矩阵的分解,我们有了2个武器,一个是贝叶斯学派的LDA,一个是频率学派的矩阵分解。我们知道,贝叶斯学派和频率学派有着各种各样的区别,如果从优化的角度去看,MCMC是贝叶斯学派的模型常用的优化方法,而梯度下降是频率学派常用的。\u003C\u002Fp\u003E\u003Cp\u003E故事发展到这个阶段时,群众的目光忽然转向了。Topic Model的发展忽然转向了“我们需要更多的Topic”。之前,大家弄个几百个topic就非常高兴了,这个时候忽然有人说,我们要几百万个Topic。据说是因为google有个系统能学50万topic,非常NB。另外大家希望,topic多了就能学习出更多小的topic,表达更小众的语义。于是群众们开始干了。一开始大家是拿LDA开刀的。于是乎,LDA从12年开始,经历了SparseLDA, AliasLDA, LightLDA, WarpLDA的发展道路,到了15年底,已经能非常快的学100万topic了,而且这个快是靠直接降低理论的时间复杂度实现的,代码写的更好只是起了辅助作用。\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003ESparseLDA利用了如果topic很多,那么当模型快收敛时,一个word其实只会属于很少的topic,然后利用稀疏性来加速了算法。但这个算法有个致命的缺陷,就是初始化时,模型并不稀疏,因此迭代的前几轮会非常慢。当然充满智慧的群众发明了一堆奇技淫巧部分解决了这个问题。\u003C\u002Fli\u003E\u003Cli\u003EAliasLDA是优化了Gibbs Sampling采样的时间复杂度,利用Alias Table让对K个topic采样的时间复杂度从O(K)降低到O(1)\u003C\u002Fli\u003E\u003Cli\u003ELightLDA修改了采用的分布,把原来基于一个word doc在topic上联合分布的采样过程,改成了2个交替进行的独立采样过程,一个只依赖word,另一个只依赖doc。\u003C\u002Fli\u003E\u003Cli\u003EWarpLDA做了更多的工程级别的优化,让LightLDA更快。\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E但后来,LDA一直没有大规模的火起来。这是因为不幸的又遇到了深度学习这股风,google在2013年提出了word2vec。word2vec本身不是一个很深的模型,他其实就是一个一层的模型。但这个模型的nb之处在于,他是频率学派的,支持梯度法优化,因此这一层可以插入到DL的网络中作为一层,和其他层一起做end-to-end的优化,LDA就没法这么搞。这样,大量的有监督的问题,用上word2vec后,效果顿时就超过LDA了。\u003C\u002Fp\u003E\u003Cp\u003Eword2vec刚出来时,我发现他在优化时用了霍夫曼编码来实现了层次化的SoftMax(HS)。当时我觉得他这么做有2个目的:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E减少运算复杂度,如果是普通的SoftMax,其实就相当于在0-1矩阵的所有值上做矩阵分解,没有能利用到矩阵的稀疏性。\u003C\u002Fli\u003E\u003Cli\u003E倾向于选择热门的item做负样本,因为霍夫曼编码是按照热门度对item编码的,越热门的item离根节点越近。\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E所以,HS真是太巧妙了。果然不出所料,2014年的时候,有群众提出,那我们直接用Negative Sampling吧。这样程序写起来简单。大家一试,发现效果还不错,并不比HS差,而且代码确实很容易写。\u003C\u002Fp\u003E\u003Cp\u003E故事发展到这个阶段时,我们总觉得少了点啥。这个word2vec忽然跳出来就抢了LDA的饭碗,那么LDA最后搞的那些把topic提升到100万个的工作,貌似word2vec还没搞啊?我去google了一下,发现群众的智慧是无限的,果不其然,有人发现这个遗留问题了。Facebook的研究人员在一个标题为\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fwww.machinelearning.ru\u002Fwiki\u002Fimages\u002Fd\u002Fdb\u002FMikolovWord2vecSlides.pdf\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EWhat's next, word2vec\u003C\u002Fa\u003E的演讲中明确提出,稀疏表达是word2vec下一个要解决的问题。其实稀疏表达的前提就是topic要多。只有多了,才有可能学习出非常小的topic。\u003C\u002Fp\u003E\u003Cp\u003E好吧,后面就让我们拭目以待吧。\u003C\u002Fp\u003E\u003Cp\u003E读后思考:为什么Netflix Prize的评分问题可以只在不missing的value上训练,而不用管missing value?\u003C\u002Fp\u003E\u003Cp\u003E------------------------------\u003C\u002Fp\u003E\u003Cp\u003E欢迎关注 [ ResysChina ] 微信公众号。\u003C\u002Fp\u003E&,&state&:&published&,&sourceUrl&:&&,&pageCommentsCount&:0,&canComment&:false,&snapshotUrl&:&&,&slug&:,&publishedTime&:&T21:36:29+08:00&,&url&:&\u002Fp\u002F&,&title&:&关于LDA, pLSA, SVD, Word2Vec的一些看法&,&summary&:&本文纯属搞笑!!Topic Model (主题模型)这个东西如果从99年Hofmann的pLSA开始算起,得火了有近20年了。这20年里出现了很多东西,这篇文章不准备对这些东西做细致的介绍,而是谈谈个人对这些模型的一些看法。首先,我先阐明观点,就是这些东西虽然看起来很…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&commentPermission&:&anyone&,&commentsCount&:45,&likesCount&:485},&next&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&个性化推荐&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&推荐系统&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&算法&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&动如神经,静如痴呆。&,&isFollowing&:false,&hash&:&27faa688f0ab0&,&uid&:48,&isOrg&:false,&slug&:&xingwudao&,&isFollowed&:false,&description&:&每个人只能陪你走一段路,迟早是要分开的。&,&name&:&刑无刀&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxingwudao&,&avatar&:{&id&:&v2-4a7e06d81&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&resyschina&,&name&:&ResysChina&},&content&:&\u003Ch2\u003EUCB再回顾\u003C\u002Fh2\u003E\u003Cp\u003E上回书说到,UCB这个小伙子在做EE(Exploit-Explore)的时候表现不错,只可惜啊,是一个不关心组织的上下文无关(context free)bandit算法,它只管埋头干活,根本不观察一下面对的都是些什么样的arm。\u003C\u002Fp\u003E\u003Cp\u003E进一步送UCB去深造之前,我们再把UCB算法要解决的问题描述一下:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E面对固定的K个item(广告或推荐物品),我们没有任何先验知识,每一个item的回报情况完全不知道,每一次试验要选择其中一个,如何在这个选择过程中最大化我们的回报?\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003EUCB解决这个Multi-armed bandit问题的思路是:用置信区间。置信区间可以简单地理解为不确定性的程度,区间越宽,越不确定,反之亦反之。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E每个item的回报均值都有个置信区间,随着试验次数增加,置信区间会变窄(逐渐确定了到底回报丰厚还是可怜)。\u003C\u002Fp\u003E\u003Cp\u003E每次选择前,都根据已经试验的结果重新估计每个item的均值及置信区间。\u003C\u002Fp\u003E\u003Cp\u003E选择置信区间上限最大的那个item。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E“选择置信区间上界最大的那个item”这句话反映了几个意思:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003E如果item置信区间很宽(被选次数很少,还不确定),那么它会倾向于被多次选择,这个是算法冒风险的部分;\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E如果item置信区间很窄(备选次数很多,比较确定其好坏了),那么均值大的倾向于被多次选择,这个是算法保守稳妥的部分;\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EUCB是一种乐观的算法,选择置信区间上界排序,如果时悲观保守的做法,是选择置信区间下界排序。\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Ch2\u003E给UCB插上特征的翅膀\u003C\u002Fh2\u003E\u003Cp\u003EUCB还是很有前途的,所以算法大神们还是有心提携它一把。\u003C\u002Fp\u003E\u003Cp\u003E这不,Yahoo!的科学家们在2010年发表了一篇论文[1],给UCB指了一条明路,同时还把改造后的UCB算法用在了Yahoo!的新闻推荐中,深造后的UCB算法现在title叫LinUCB。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic4.zhimg.com\u002Fbb509cf00cfc4c610ad8127cab105f17_b.png\& data-rawwidth=\&1330\& data-rawheight=\&732\& class=\&origin_image zh-lightbox-thumb\& width=\&1330\& data-original=\&http:\u002F\u002Fpic4.zhimg.com\u002Fbb509cf00cfc4c610ad8127cab105f17_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E这篇论文很有名,很多地方都有引用,在刘鹏博士的著作《计算广告》中也专门讲到了[2]。我知道,大家都很忙,尤其是面对英文论文,尤其是论文中有大量的数学公式,所以“没时间”去阅读它,所以这里我就转述一下这个算法的改造过程,以期望大家在百忙之中能够领会其精神。\u003C\u002Fp\u003E\u003Cp\u003E单纯的老虎机,它回报情况就是老虎机自己内部决定的,而在广告推荐领域,一个选择的回报,是由User和Item一起决定的,如果我们能用feature来刻画User和Item这一对CP,在选择之前通过feature预估每一个arm的期望回报及置信区间,那就合理多了。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E为UCB插上特征的翅膀,这就是LinUCB最大的特色。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003ELinUCB算法做了一个假设:一个Item被选择后推送给一个User,其回报和相关Feature成线性关系,这里的“相关feature”就是context,也是实际项目中发挥空间最大的部分。\u003C\u002Fp\u003E\u003Cp\u003E于是试验过程就变成:用User和Item的特征预估回报及其置信区间,选择置信区间上界最大的item推荐,观察回报后更新线性关系的参数,以此达到试验学习的目的。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003ELinUCB基本算法描述如下:\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic1.zhimg.com\u002F2a723bc14fdc75d6ac8a0_b.png\& data-rawwidth=\&690\& data-rawheight=\&546\& class=\&origin_image zh-lightbox-thumb\& width=\&690\& data-original=\&http:\u002F\u002Fpic1.zhimg.com\u002F2a723bc14fdc75d6ac8a0_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E对照每一行解释一下:\u003C\u002Fp\u003E\u003Cp\u003E0. 设定一个参数\\alpha,这个参数决定了我们Explore的程度\u003C\u002Fp\u003E\u003Cp\u003E1. 开始试验迭代\u003C\u002Fp\u003E\u003Cp\u003E2. 获取每一个arm的特征向量xa,t\u003C\u002Fp\u003E\u003Cp\u003E3. 开始计算每一个arm的预估回报及其置信区间\u003C\u002Fp\u003E\u003Cp\u003E4. 如果arm还从没有被试验过,那么:\u003C\u002Fp\u003E\u003Cp\u003E5. 用单位矩阵初始化Aa\u003C\u002Fp\u003E\u003Cp\u003E6. 用0向量初始化ba,\u003C\u002Fp\u003E\u003Cp\u003E7. 处理完没被试验过的arm\u003C\u002Fp\u003E\u003Cp\u003E8. 计算线性参数\\theta\u003C\u002Fp\u003E\u003Cp\u003E9. 用\\theta和特征向量xa,t计算预估回报, 同时加上置信区间宽度\u003C\u002Fp\u003E\u003Cp\u003E10. 处理完每一个arm\u003C\u002Fp\u003E\u003Cp\u003E11. 选择第9步中最大值对应的arm,观察真实的回报rt\u003C\u002Fp\u003E\u003Cp\u003E12. 更新Aat\u003C\u002Fp\u003E\u003Cp\u003E13. 更新bat\u003C\u002Fp\u003E\u003Cp\u003E14. 算法结束\u003C\u002Fp\u003E\u003Cp\u003E本来,按照上面的步骤已经可以写代码完成KPI了,但是我们都是爱学习的小伙伴,其中一些关键的地方还得弄得更明白些。\u003C\u002Fp\u003E\u003Cp\u003E注意到上面的第4步,给特征矩阵加了一个单位矩阵,这就是岭回归(ridge regression),岭回归主要用于当样本数小于特征数时,对回归参数进行修正[3]。\u003C\u002Fp\u003E\u003Cp\u003E对于加了特征的bandit问题,正符合这个特点:试验次数(样本)少于特征数。\u003C\u002Fp\u003E\u003Cp\u003E每一次观察真实回报之后,要更新的不止是岭回归参数,还有每个arm的回报向量ba。\u003C\u002Fp\u003E\u003Ch2\u003E实现LinUCB\u003C\u002Fh2\u003E\u003Cp\u003E根据论文给出的算法描述,其实很好写出LinUCB的代码[5],麻烦的只是构建特征。\u003C\u002Fp\u003E\u003Cp\u003E代码如下,一些必要的注释说明已经写在代码中。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&k\&\u003Eclass\u003C\u002Fspan\u003E \u003Cspan class=\&nc\&\u003ELinUCB\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003E__init__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ealpha\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mf\&\u003E0.25\u003C\u002Fspan\u003E \n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Er1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E \u003Cspan class=\&c1\&\u003E# if worse -& 0.7, 0.8\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Er0\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E \u003Cspan class=\&c1\&\u003E# if worse, -19, -21\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# dimension of user features = d\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E6\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# Aa : collection of matrix to compute disjoint part for each article a, d*d\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAa\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# AaI : store the inverse of all Aa matrix\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAaI\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# ba : collection of vectors to compute disjoin part, d*1\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eba\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etheta\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E{}\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ex\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003ENone\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ExT\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003ENone\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# linUCB\u003C\u002Fspan\u003E\n\n\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eset_articles\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eart\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# init collection of matrix\u002Fvector Aa, Ba, ba\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ekey\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eart\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAa\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentity\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eba\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ezeros\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E((\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAaI\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentity\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etheta\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ezeros\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E((\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&sd\&\u003E\&\&\&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
这里更新参数时没有传入更新哪个arm,因为在上一次recommend的时候缓存了被选的那个arm,所以此处不用传入\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
另外,update操作不用阻塞recommend,可以异步执行\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
\&\&\&\u003C\u002Fspan\u003E
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eupdate\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ereward\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ereward\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Epass\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Eelif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ereward\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Eor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ereward\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ereward\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Er\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Er1\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Eelse\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Er\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Er0\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAa\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edot\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ex\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ExT\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eba\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Er\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E*\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ex\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAaI\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elinalg\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Esolve\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAa\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E],\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eidentity\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ed\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E))\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etheta\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edot\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAaI\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E],\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eba\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ea_max\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E])\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Eelse\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# error\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Epass\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&sd\&\u003E\&\&\&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
预估每个arm的回报期望及置信区间\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E
\&\&\&\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Erecommend\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Etimestamp\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Euser_features\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Earticles\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003ExaT\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Earray\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E([\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Euser_features\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E])\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Exa\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etranspose\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ExaT\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Eart_max\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Eold_pa\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# 获取在update阶段已经更新过的AaI(求逆结果)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003EAaI_tmp\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Earray\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E([\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EAaI\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Earticle\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Earticle\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Earticles\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E])\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Etheta_tmp\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Enp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Earray\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E([\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etheta\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\

我要回帖

更多关于 镰刀龙 的文章

 

随机推荐