anant agarwal在印度的阶层 为什么mooc仍然重要

我对他的计算机和机器学习水平持怀疑态度,而且...有点怀疑他的人品。&br&&br&成也blog,败也blog,我看答案里很多人只是批评他太理论,写的只是皮毛什么的,难道没有人发现他blog最大的问题是东拼西凑非原创吗???&br&&br&July最得意的blog之一就是那个讲解SVM的,而我怀疑他的机器学习水平和人品也是从这篇blog里发现的,因为&b&这篇blog并!不!是!他!原!创!的!好!么!&/b&&br&&br&最初想了解SVM也是百度到了他的blog,说最通俗易懂,点击量多少多少,硬着头皮看了一部分还是云里雾里,完全没有传说中的那么清晰易懂,就放弃了,后来辗转找到Jerrylead 的SVM系列博文,其实读的也是云里雾里,公式很多,但推倒的还是很清晰的,只是看完还是觉得没有完全理解,有一种知其然还不知其所以然的感觉,然后又找到pluskid的SVM系列 博文,至今还记得当时边看边想拍桌子的兴奋感,pluskid的blog中的插图非常棒,当然推倒也很棒,结合之前看jerrylead博文后的感觉和pluskid的插图,一下子就明白了困惑很久的“所以然”问题,这次感觉是真的看懂了,我还记得那晚我还激动的给我老爸发短信,说今晚彻底搞懂了一个很久都没搞懂的问题,特别高兴!&br&&br&然后我又想到了july那篇盛名在外的SVM,我想看看为什么我一开始就没看懂呢?结果却很气愤的发现,这不就是jerrylead+pluskid两个人blog的拼接和整理吗?!关键是整理的并不好,一个人有一个人的思路,从这个人讲在话题跳到另一个人的内容,很容易破坏思考的连贯性和完整感!而且!他的拼接,是真的拼接啊!&b&完全不加上自己的转折和理解的内容作为过渡段,纯粹是上一部分是jerrylead的博文原文,下段内容就是pluskid的博文原文了,最可恶的是,他四处标榜这是他的原创,既然是原创你就不要直接用别人的图和讲解好么,好歹看完了,自己组织组织语言重新按自己的理解写一份这才叫原创,可你明明是复制粘贴的拼接整理,大段大段文字是别人的,如果查重的话,你这算赤裸裸的抄袭好么,怎么好意思说原创!&/b&人家jerrylead和pluskid才是真正的原创好么,只是把人家的博文拼起来,弄的高大全一点就四处说原创要脸吗,搞懂svm我很感谢pluskid的bolg,看到他的blog被这么直接拿来用,不做修改的直接复制粘贴,非常气愤!我当时发现这一点的时候,跟吃了苍蝇一样恶心,亏我以前还把july当励志偶像,一个二本学校学生能做到很多985学生也做不到的事,本来还计划看懂他的所有blog,但既然他的blog不过是四处拼接搞思考思路不统一的赝品,我为什么不去找原汁原味的原创看呢,从此再不看此人blog。&br&&br&这些事还是发生在几年前,刚才又去搜了下他的这篇blog,发现对于jerrylead和pluskid也只是在开头写个致谢(事实上我印象中我看的那会,至少对pluskid的致谢和引用链接是没有的),微博中依然在说这个是他原创,不知道这个文章他后来是否真正的用自己的语言写一写,懒得对比了......&br&&br&看到上面有人回答说july会利用粉丝骂网友,还是匿了吧
我对他的计算机和机器学习水平持怀疑态度,而且...有点怀疑他的人品。成也blog,败也blog,我看答案里很多人只是批评他太理论,写的只是皮毛什么的,难道没有人发现他blog最大的问题是东拼西凑非原创吗???July最得意的blog之一就是那个讲解SVM的,而我怀…
跪着读&br&&br&我今天跪着看了一天&br&&br&基本感受就是:&br&卧槽,这是什么用法?google一下。&br&卧槽,这又是什么用法?搜都不知道怎么搜啊!&br&&br&相比之下,我写的代码根本就是纯c...
跪着读我今天跪着看了一天基本感受就是:卧槽,这是什么用法?google一下。卧槽,这又是什么用法?搜都不知道怎么搜啊!相比之下,我写的代码根本就是纯c...
利益相关:基本上只用Theano。跟Theano的最早的lead developers之一比较熟。&br&&br&速度上:&br&Theano的compile是慢的。这取决于computation graph的结构。&br&Running速度是可以的(相对而言只能说OK,&a href=&///?target=https%3A///soumith/convnet-benchmarks& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&soumith/convnet-benchmarks · GitHub&i class=&icon-external&&&/i&&/a&)。&br&Parallel以及data loading和是蛋疼的。其中Cpython中的global interpreter lock居功至伟。&br&&br&关于好用不好用:&br&先说缺点,debug是困难的。往往需要推测才知道具体是哪里出了问题。&br&&br&&b&如果说是做标准的结构&/b&,有keras,lasagne,blocks,pylearn2等等库的支持,实现起来非常容易。&br&如果说是方便灌水了。那torch,caffe或者whatever toolbox不都是为大家提供灌水的机会?简直不要太“用我灌水我自豪啊”&br&让试一下convnet的人知道convlayer的backprop的细节&br&简直就是&br&让敲回车的人知道回字的四种写法&br&&br&&b&如果说是做非标准的结构&/b&,需要把forward graph满天飞连来连去。&br&那Theano不要方便太多好不好!&br&那Theano不要方便太多好不好!&br&那Theano不要方便太多好不好!&br&&br&&b&如果需要和别的领域的code结合起来&/b&&br&那Python不要方便太多好不好!&br&那Python不要方便太多好不好!&br&那Python不要方便太多好不好!&br&&br&Theano的替代品&a href=&///?target=http%3A//rll.berkeley.edu/cgt/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computation Graph Toolkit&i class=&icon-external&&&/i&&/a&&br&网站上说是解决了许多theano内在的问题。不过还不是很成熟。个人还没有用过。&br&&br&&br&如何看待之前的答案:&br&关于&a data-hash=&f9cc22f32a7d5ad77236c2& href=&///people/f9cc22f32a7d5ad77236c2& class=&member_mention& data-editable=&true& data-title=&@石佳欣& data-tip=&p$b$f9cc22f32a7d5ad77236c2&&@石佳欣&/a&的答案:deepmind某人的那句话,不condition在当时的context里面解读方式不要太多好不好?&br&We don't like people who use theano. We like those who do things on their own.&br&什么是like,是喜欢hire(这还要分什么职位)?还是欣赏?喜欢读他们的paper?喜欢跟他们合作?这个like不like是不是限定在某个特定领域?&br&什么是use theano,是只要用theano就不喜欢?还是说某人用theano就代表他不懂行的概率比较大?那如果我又用theano,又contribute又这么说?&br&不说montreal有多少人去了deepmind。另外一位靠theano赢了几次kaggle比赛的大牛&a href=&///?target=http%3A//benanne.github.io/about/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&About me – Sander Dieleman&i class=&icon-external&&&/i&&/a&也去了deepmind。&br&他有没有可能是对着一个用theano的同事开玩笑呢?&br&除去context,拿一句话出来过分解读,是没有意义的。explaining away懂得伐。&br&&br&PS: &a data-hash=&c4affebbb376bb637e60& href=&///people/c4affebbb376bb637e60& class=&member_mention& data-editable=&true& data-title=&@邓博元& data-tip=&p$b$c4affebbb376bb637e60&&@邓博元&/a&的答案中对于SymPy和Theano的关系表述有些含混,容易造成误导。&br&SymPy做的事symbolic differentiation,而Theano做的automatic differentiation。是有本质的区别的。详情请见wikipedia &a href=&///?target=https%3A//en.wikipedia.org/wiki/Automatic_differentiation& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Automatic differentiation&i class=&icon-external&&&/i&&/a&,或者自行搜索。 &br&&br&先这么多,想起来再补充。
利益相关:基本上只用Theano。跟Theano的最早的lead developers之一比较熟。速度上:Theano的compile是慢的。这取决于computation graph的结构。Running速度是可以的(相对而言只能说OK,)。Parallel以及data loading…
参考一下,艾漫科技发布的数据&br&&img src=&/c6c503597bcbcf3f728970d_b.jpg& data-rawwidth=&440& data-rawheight=&5918& class=&origin_image zh-lightbox-thumb& width=&440& data-original=&/c6c503597bcbcf3f728970d_r.jpg&&
参考一下,艾漫科技发布的数据
既然题主问的是博弈论解决&b&现实问题&/b&的效果如何,那么显然想要的答案不是囚徒困境、鹰鸽游戏这种理论化的东西,也不是美国大学课堂里两三美元赌注的的博弈实验。&br&&br&所以,答主在这里给大家介绍一个绝对现实的案例——美国联邦通讯委员会(FCC)频谱牌照拍卖。&br&&br&为什么选择这样一个案例来说明博弈论在现实中的应用呢?&br&&br&首先,拍卖中所涉金额巨大。在2008年的一次拍卖中(Auction 73),FCC一共获得了将近190亿美元的收入,101位成功竞价者中的每一位平均要支付1.87亿美元。每一次鼠标的点击都可能意味着上百万美元的代价(还伴随着肾上腺素飙升),其间的心理过程绝不是两三美元的博弈游戏所能模拟的。有人把参加频谱拍卖比喻成“同时在十张桌子上玩上亿美元赌注的德州扑克”。在如此巨大的利益面前,竞价者们自然会挖空心思、想方设法来寻找拍卖规则中一切可以被利用的漏洞。&br&&br&其次,拍卖的出价过程极其漫长。还以2008年的这次拍卖为例,从日开始到日结束,历时54天。这样漫长的一个拍卖过程让每一位竞价者都有充足的时间思考并调整自己的出价策略,尽量避免出价过程中的非理性因素。&br&&br&在拍卖过程中,FCC无疑希望将同样数量的牌照卖出尽可能高的价钱,而竞拍者们希望用尽可能低的价格买到自己想要的牌照。&br&&br&如果你是FCC,现在手里有几百张牌照等着要卖出去,你会选择什么样的拍卖规则呢?&br&&br&很多人会想:这还不简单吗?就像索斯比拍卖行出售名画那样,先把第一张牌照拿出来让竞价者们轮番叫价,出价最高者获得牌照。然后用同样的方法进行下一张牌照的拍卖,直到所有的牌照都卖出去。&br&&br&这种拍卖方式听上去很合理。但是,在通讯行业采取这种方式,却有可能会造成总拍卖收入的降低。&br&&br&假设FCC手里现在有两张牌照要出售,分别是牌照A和牌照B。有两家虚构的通讯公司参与拍卖,分别是美国移动和美国电信。&br&&br&美国移动是通讯业界的大佬,手中已经持有多张牌照。在此次拍卖中他们只需要一张牌照就够了,至于是A还是B都无所谓。美国移动对这两张牌照的估值都是4.5亿美元。也就是说,如果价格超出4.5亿美元,美国移动会放弃继续报价。&br&&br&另一位竞价者美国电信刚刚进入通讯市场,手中的牌照资源极为匮乏。为了能和业界老大美国移动抗衡,他们需要将牌照A和B全部买下,只拿到一张牌照是没有意义的。因此,他们对牌照A+B的组合估值10亿美元,对只拿到一张牌照的情形估值为零。&br&&br&如果把这两家公司对于牌照的估值做成表格的形式,将会是这样的:&br&&br&&img src=&/8bab1aae7e_b.jpg& data-rawwidth=&3168& data-rawheight=&976& class=&origin_image zh-lightbox-thumb& width=&3168& data-original=&/8bab1aae7e_r.jpg&&对于FCC来说,最好的结果当然是把两个牌照打包以后以10亿美元的价格卖给美国电信。但是,实际操作起来是否能达到这样的结果,与拍卖规则的设计有很大关系。&br&&br&如果FCC先单独进行牌照A的拍卖,美国电信极有可能会在价格达到4.5亿之前就放弃竞价。因为对于美国电信来说,稍后才会进行的牌照B拍卖会有多少人参加,价格会被拍到多少完全是未知数。这种不确定性导致了美国电信在对牌照A的出价上相对保守。因为美国电信如果花了4.5亿美元买下了牌照A,而牌照B被某个土豪公司炒到了6亿美元的话,他要么被迫花10.5亿美元买下估值只有10亿美元的牌照组合,要么放弃购买牌照B,白白花4.5亿美元买一张对他来说没什么用的牌照A。&br&&br&美国电信不是白痴,不会傻乎乎地花10.5亿美元购买估值只有10亿美元的两块牌照,也不会白白扔掉真金白银的4.5亿美元。现实中发生的情况将是美国电信为了控制风险,在牌照A的价格达到4亿美元甚至更低时就停止报价。&br&&br&所以,最终的结果可能是美国移动以4亿美元甚至更低的价格买到了牌照A,而牌照B根本无人问津。&br&&br&对于想要榨干竞拍者每一分钱的FCC来说,这样的结果简直就是一场噩梦(当然,他们会辩解说他们这样做是为了更有效的分配频谱资源)。&br&&br&所以,为了鼓励竞价者们更加激进地报价,FCC采取了下面的基本拍卖规则(这里列出的只是最基本的思路,完整的拍卖规则长达上百页):&br&&br&1)所有的牌照同时放出,供所有的竞价者同时进行报价。&br&2)每一轮报价结束后,所有牌照接收到的报价都被公开,供竞价者们决定在下一轮中如何报价。&br&3)如果某一轮报价结束后,任何一块牌照都没有收到新的报价,那么拍卖结束。每一块牌照都由出价最高的竞拍者获得。&br&&br&采取了上面这种规则之后,美国电信可以实时观察每一块牌照的竞价者数量以及最新的价格,从而可以进行更加激进的报价(FCC也会收到更多的钱)。&br&&br&不过,这样又产生了一个新的问题:对于想要获得两块牌照的美国电信来说,应不应该允许他进行组合报价(package bidding)?&br&&br&组合报价的含义就是允许美国电信对A+B这个牌照组合给出一个总价,并不分别给出每一个牌照的单价。请注意这里其他的竞价者还是可以针对每一个牌照给出单独的报价。在拍卖结束时,FCC会把每块牌照的单独最高报价相加,如果得出的总价低于美国电信的组合报价,这些牌照就作为一个整体卖给美国电信。&br&&br&在拍卖过程中,FCC是否允许组合报价,会对拍卖结果造成巨大的差别。&br&&br&&br&&b&情形一:不允许组合报价。&/b&&br&&br&假设美国移动由于业务扩张,把牌照A和牌照B的估值都调整为了6亿美元:&br&&br&&img src=&/adb5c761a4e86daccb2e4c_b.jpg& data-rawwidth=&3120& data-rawheight=&1008& class=&origin_image zh-lightbox-thumb& width=&3120& data-original=&/adb5c761a4e86daccb2e4c_r.jpg&&从表格中的数字来看,美国电信还是可以赢得拍卖的。虽然美国移动调高了自己的估值,但是针对A+B的组合,美国电信的估值10亿美元仍然要高于美国移动的6亿美元。拍卖规则的设计不是应该让估值最高的竞价者获胜吗?&br&&br&在不允许组合报价的情形下,为了赢得这两张牌照,电信只好对牌照A和B进行单独报价。假设在进行了N轮报价后,牌照A和B的最新报价都是4.9亿美元。这时电信注意到其他的报价者都已推出,只剩下移动还在继续报价。电信算了算,还在自己预算范围内,在下一轮对这两个牌照都报出了5亿美元的价格。在这里电信对移动的实力做出了错误的判断,因为移动在下一轮报价中把牌照A的价格又抬高到了5.1亿美元。&br&&br&当牌照A的价格抬高到5.1亿美元时,电信就傻眼了。因为已经开出的牌照B的5亿美元已经无法撤回了,剩余的资金又不够继续竞价牌照A。最终的结果可能是美国电信以5亿美元拍到了牌照B,而移动以5.1亿美元拍到了牌照A。这里最大的赢家是净收10.1亿美元的FCC,而美国电信则损失了5亿美元。&br&&br&美国电信所面临的这种风险,有个专门的名词叫做exposure problem。如果FCC允许组合报价的话,这种风险将不复存在。现在,让我们一起来看一下允许组合报价的情形。&br&&br&&b&情形二:允许组合报价。&/b&&br&&br&在允许组合报价的情况下,美国电信只要对两张牌照给出一个组合价,而不单独指定针对每一张牌照的报价。如果在拍卖中获胜,可以在预算范围内将两张牌照收入囊中。如果在拍卖中被更高的价格击败,也不需要为此付出一分钱。这样,就有效的规避了上面的这个exposure problem。&br&&br&但是,FCC非常不支持这种组合报价的方式。他们搬出了一套又一套理由来反对组合报价,例如这样会增加拍卖的复杂程度、这样对小企业不公平等等。&br&&br&事实上,他们反对组合报价的真正原因可能是下面这种情形:&br&&br&假设现在又有一家企业,暴发户美国联通也参加到了拍卖当中。美国联通在通讯市场也耕耘多年,手中的牌照资源也很丰富,因此他们只需要拍照A和拍照B中的一张就够了。他们对拍照A和牌照B的估值都是7亿美元。&br&&br&这样,我们就有了三家企业,他们对牌照A和B的估值是这样的:&br&&br&&img src=&/bd157bdc05b639bb63ca67_b.jpg& data-rawwidth=&3160& data-rawheight=&1176& class=&origin_image zh-lightbox-thumb& width=&3160& data-original=&/bd157bdc05b639bb63ca67_r.jpg&&假设美国移动对牌照A给出了4亿美元的报价,而美国联通对牌照B给出了5亿美元的报价。&br&&br&针对这种情况,电信针对A+B的组合给出了9.1亿美元的报价。由于这个组合报价略高于移动和联通的对于这两块牌照的报价之和,所以如果他们不继续报价的话电信将赢得拍卖。&br&&br&从数学角度上讲,这两家企业完全有能力报出一个超过美国电信组合报价的数字。根据他们的估值,他们最高可以报出一个13亿美元的总价,远远超过美国电信的估值10亿美元。&br&&br&但这只是数学角度而已。别忘了,每一个博弈者都是自私的。移动可能在等着联通提高报价,而联通又觉得难道我钱多就活该当冤大头吗?最后这两家谁也不肯提高自己的报价,美国电信笑吟吟地以9.1亿美元的价格将两块牌照收入囊中。&br&&br&在这种情形下,FCC又要哭了,因为原本最多可以卖到13亿美元的两块牌照结果只卖了9.1亿美元。(这种情形也有个专门的名字叫做threshold problem)&br&&br&FCC在1994年启用频谱牌照拍卖机制时,不允许投标者进行组合报价。为了减少投标者面临的exposure problem所带来的风险(实质上是为了鼓励他们更激进的报价),FCC允许投标者撤回报价,条件是要支付所撤回的报价与最终中标价之间的差额。例如一家公司对牌照A报出了5亿美元的最高价,比他低的次高价格是4亿美元。如果这家公司又后悔了不想要这张牌照了,那么他可以选择撤回这个报价,如果最终中标价是4亿美元的话,他只需支付1亿美元的差价。这样,这家公司的损失就由5亿美元降低为1亿美元,而FCC照样可以收到5亿美元。&br&&br&在之后的九年里,FCC对于组合报价的态度一直是“这个我们研究一下,再研究一下”&br&&br&过了九年之后,在2003年的一次拍卖中(auction 51),FCC才第一次在实际的拍卖中启用了组合报价制度。这次拍卖的参与者多达……两名,拍得总价款是……17万9千美元。嗯,不提也罢。&br&&br&到了2008年,FCC在auction 73中终于又启用了组合报价。不过,投标者不能随意进行组合,而只能对FCC事先规定好的组合进行报价。在这次拍卖中,FCC将所有的频谱资源分成了五个block,其中的C block一共由12张牌照组成。针对C block中的12张牌照,投标者可以进行单独报价,也可以按照FCC规定好的组合进行组合报价(牌照1至8一个组合,牌照10和12一个组合,牌照9和11一个组合)。最后的结果是Verizon以相对较低的价格47亿美元买走了C block中大部分的牌照。&br&&br&FCC的频谱拍卖从1994年到现在,已经进行了大约100次,一些小的规则也是改来改去的。关于2008年auction 73以后的情况,答主没找到总结性的资料,也不可能到FCC的官网上一个个的去看,所以暂时就先介绍到这里。如果有对这个话题更加了解的人,欢迎补充。&br&&br&不过,上面的内容应该足以回答题主的问题:不,博弈论不仅仅是一门理论上的学科。在现实世界中,一小群人通过博弈论可以决定上百亿美元的归属。&br&&br&以上。
既然题主问的是博弈论解决现实问题的效果如何,那么显然想要的答案不是囚徒困境、鹰鸽游戏这种理论化的东西,也不是美国大学课堂里两三美元赌注的的博弈实验。所以,答主在这里给大家介绍一个绝对现实的案例——美国联邦通讯委员会(FCC)频谱牌照拍卖。为…
有一次我听了Eric Xing的一个报告,讲machine learning综述和展望的,非常引人入胜,事后我邮件他要slides,他说&sure& & 等他回去以后给我,然后...就没有然后了...&br&&br&--------------------- 正经回答分割线 ---------------------------&br&&br&machine learning综述的话,推荐这篇:&a href=&///?target=https%3A//.hk/url%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D1%26cad%3Drja%26ved%3D0CCoQFjAA%26url%3D%74%2f%252f%6d%2e%2e%73%6e%6f%256e%252e%75%252f%257e%64%64%252f%70%73%252f%63%256d%2e%66%26ei%3DFDGLUooW5p-IB8eegdAC%26usg%3DAFQjCNHZBHTinjMewYkQU3TkgCaUxrq7yQ& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Few Useful Things to Know about Machine Learning&i class=&icon-external&&&/i&&/a&&br&中文版在这里:&a href=&///?target=https%3A//.hk/url%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D2%26cad%3Drja%26ved%3D0CDEQFjAB%26url%3D%74%2f%252f%77%252e%6c%256c%74%6b%252e%256f%2f%2d%6e%6e%75%6f%73%252f%31%31%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%2e%66%26ei%3D3DGLUu6yMsGkigfDoYDwAg%26usg%3DAFQjCNGdS80sCamyKTA8KUDEJNMHCLo1PA& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习那些事&i class=&icon-external&&&/i&&/a&&br&还有好心人做了图片版:&br&&img src=&/b7b42f946c501c6b48ad_b.jpg& class=&content_image&&&br&数据挖掘方面,有好心人写了一篇:&a href=&///?target=http%3A///%3Fp%3D418& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&大数据工程人员知识图谱&i class=&icon-external&&&/i&&/a&&br&&br&ps 楼上说到的Andrew Ng在Coursera上的课,我觉得最好的一点是讲了怎么去科学地&debugging a learning algorithm&,以及要设计一个machine learning system的时候,你该怎么判断哪些事情需要花时间哪些事情暂时还不重要(而不是没头苍蝇到处乱来)&br&&blockquote&X. Advice for Applying Machine Learning (Week 6)&br&XI. Machine Learning System Design (Week 6)&/blockquote&这是太多的其他课程/教学资料里没有讲或者一笔带过的东西,但却是最基本需要掌握的地方,I wish I knew ....&br&&br&=========&br&看到评论有求图的,见@祝铭嘉 的回答
有一次我听了Eric Xing的一个报告,讲machine learning综述和展望的,非常引人入胜,事后我邮件他要slides,他说"sure" & 等他回去以后给我,然后...就没有然后了...--------------------- 正经回答分割线 ---------------------------machine learning综述…
算法导论压根就不用看,直接看&br&&a href=&///?target=http%3A//www.stanford.edu/class/cs97si/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS 97SI: Introduction to Competitive Programming Contests&i class=&icon-external&&&/i&&/a&&br&stanford得课程,ppt写得比算法导论好多了&br&算法导论很多不必要得繁琐
算法导论压根就不用看,直接看stanford得课程,ppt写得比算法导论好多了算法导论很多不必要得繁琐
&i&(目前可以公开的情报)&/i&&br&&br&Edgerank 是几年前外界对Facebook Newsfeed上的新鲜事排序算法的称呼。&br&&br&至于是怎么算的,这其实可以出成一道面试题,不妨以知乎为例。题目就是,你觉得应如何对知乎的新鲜事排序?&br&&br&具体问题描述:&br&知乎用户刘看山,他关注了100个人,30个专栏,10个话题。在他打开知乎的一瞬间,将有100个最新动态等着他,你要怎么给这100个新鲜事排序?&br&当然,作为知乎官方,你掌握着几乎所有知乎用户的信息,包括刘看山的。他经常给谁点赞,经常关注哪个话题下面的问题,这些你都知道。&br&哦,对了,你只有50毫秒时间。超过50毫秒刘看山就会不耐烦了。&br&&br&你该怎么办?&br&&br&&b&0. 这些新鲜事对用户而言质量各有高低&/b&&br&如果你让刘看山自己看一遍这100个新鲜事,他大概能说出自己更喜欢哪个,更不喜欢哪个。比如,他更喜欢张佳玮的答案,张公子的回答他基本都会点开看。他不太喜欢抖机灵的回答,即使赞同数很高他也只是扫一眼就过去。&br&我们要做的,就是用模型化的语言描述这件事。&br&&br&&b&1. 确定一个变量作为优化目标&/b&&br&这个变量,要能反映新鲜事的质量。一组常用的变量就是互动数:点开,赞同,感谢。好的新鲜事应该能吸引到更多的互动,这样的新鲜事也更应该排在前面。&br&当然另一方面,用什么变量来定义成功其实不是一个简单的问题。Twitter的创始人之一 Evan Williams 就曾发文警告用单一变量定义成功的危险性。我们在这里也可以考虑其他信号,比如说,被很多用户点选“没有帮助”的新鲜事很可能质量不高,又或者用户花了很长时间在上面的新鲜事很可能质量不错。于是,“没有帮助”数和阅读时长也可以成为我们的优化目标之一。&br&&br&&b&2. 预测用户在哪个新鲜事上更可能触发我们的目标变量&/b&&br&或者说,在哪个新鲜事上刘看山更可能点开/赞同/收藏/分享/长时间阅读,在哪个新鲜事上更可能选不再显示/没有帮助,前者要排高点,后者排低点。&br&这就是机器学习(Machine Learning)派上用场的时候了。具体用什么算法是个开放性问题。可以是Logistic Regression,可以是SVM,还可以是别的,各有各的特点。(真要是做ML的面试题,这里会和选手展开讨论一下)&br&算法不重要,那什么重要?Feature。这就是知乎数据库里的那些数据的作用了。刘看山之前赞过张公子几次,这个回答被总共看了几次并赞了几次,这些都是feature。从历史看未来。Feature是强大的模型的关键。&br&&br&&br&&b&3. 故事还没有结束&/b&&br&学术上,这个模型已经差不多成型了。然而在实际应用中,很多问题还应付不了。比如说:&br&&ul&&li&刘看山看到张公子赞了别人的一个回答,大概读了下,没意思,就过去了。后来刘看山所关注的张小北也赞了这个回答。这时候这个新鲜事要怎么排序?&/li&&li&刘看山出远门一周没上知乎,回来一上知乎1000个新鲜事可以排序。好不容易排完了,刘看山看了10个就关浏览器了。一个小时之后刘看山再上知乎的时候,之前剩下的990个新鲜事你要怎么办?&/li&&/ul&你会发现,这个问题,与其说是算法,不如说是涉及产品本身的决策。所以说,好的ranking engineer都是半个PM &i&(还有半个Data Scientist和半个Growth Hacker)。&/i&
(目前可以公开的情报)Edgerank 是几年前外界对Facebook Newsfeed上的新鲜事排序算法的称呼。至于是怎么算的,这其实可以出成一道面试题,不妨以知乎为例。题目就是,你觉得应如何对知乎的新鲜事排序?具体问题描述:知乎用户刘看山,他关注了100个人,30…
&ul&&li&LevelDb&/li&&/ul& LevelDb是谷歌两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。&br&链接:&a href=&///?target=https%3A///google/leveldb& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google/leveldb · GitHub&i class=&icon-external&&&/i&&/a&&br&&ul&&li&SGI STL&/li&&/ul&SGI STL是STL代码的经典实现版本,虽然很多编译器不直接使用这个版本,但是很多却在此基础之上进行改进的。比如GNU C++的标准库就是在此基础之上改进的。这份代码还有一个好处是有注释,代码书写非常规范,只要花些时间读懂它并非难事。&br&源码:&a href=&///?target=https%3A///tech/stl/download.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Download STL source code&i class=&icon-external&&&/i&&/a&&br&&ul&&li& Boost.Asio &br&&/li&&/ul&它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。该库可以让 C++ 异步地处理数据,且平台独立。异步数据处理就是指,任务触发后不需要等待它们完成。相反,Boost.Asio 会在任务完成时触发一个应用。异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。&br&链接:&a href=&///?target=http%3A//www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Boost.Asio - 1.58.0&i class=&icon-external&&&/i&&/a&&br&&ul&&li& Tinyhttpd&br&&/li&&/ul&&p&tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。&/p&&p&下载链接:&a href=&///?target=https%3A///LippiOuYang/Tinyhttpd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/EZLippi/Tinyhttpd&i class=&icon-external&&&/i&&/a&&/p&&ul&&li& cJSON&br&&/li&&/ul&&p&cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。&/p&&p&cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。&/p&&p&项目主页:&a href=&///?target=http%3A//sourceforge.net/projects/cjson/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cJSON | SourceForge.net&i class=&icon-external&&&/i&&/a&&/p&&br&&ul&&li& Libevent&br&&/li&&/ul&&p&libevent是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。&/p&&p&下载链接:&a href=&///?target=https%3A///libevent/libevent& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - libevent/libevent&i class=&icon-external&&&/i&&/a&&/p&&br&&ul&&li&Webbench&/li&&/ul&&p&Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。&/p&&p&下载链接:&a href=&///?target=https%3A///LippiOuYang/WebBench& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&/EZLippi/WebBench&i class=&icon-external&&&/i&&/a&&/p&&br&&ul&&li&Memcached&br&&/li&&/ul&&p&Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。&/p&&p&下载地址:&a href=&///?target=http%3A//memcached.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&memcached - a distributed memory object caching system&i class=&icon-external&&&/i&&/a&&/p&&br&&ul&&li& SQLite&br&&/li&&/ul&&p&SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。&/p&&p&下载地址:&a href=&///?target=http%3A//www.sqlite.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQLite Home Page&i class=&icon-external&&&/i&&/a& 。&/p&&br&&br&&p&这个网站整理的比较全,可以看看&a href=&///?target=http%3A///blog/2014/12/c-open-project.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&值得推荐的C/C++框架和库&i class=&icon-external&&&/i&&/a&&/p&
LevelDb LevelDb是谷歌两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。链接:SGI STLSGI STL是STL代码的经典实现版本,虽然很多编译器不直接使用这个版本,…
不是自己写的。。。&br&贴个神犇代码。。 &a data-hash=&b37bb83aa96a5bc05205& href=&///people/b37bb83aa96a5bc05205& class=&member_mention& data-editable=&true& data-title=&@Filestorm& data-tip=&p$b$b37bb83aa96a5bc05205&&@Filestorm&/a&&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&%% Spectral Residual
myFFT = fft2(inImg);
myLogAmplitude = log(abs(myFFT));
myPhase = angle(myFFT);
mySpectralResidual = myLogAmplitude - imfilter(myLogAmplitude, fspecial('average', 3), 'replicate');
saliencyMap = abs(ifft2(exp(mySpectralResidual + i*myPhase))).^2;
&/code&&/pre&&/div&&a href=&///?target=http%3A//www.klab.caltech.edu/%7Exhou/projects/spectralResidual/spectralresidual.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&klab.caltech.edu/~xhou/&/span&&span class=&invisible&&projects/spectralResidual/spectralresidual.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&6行代码,1300+文章引用。。&br&&br&----------------update--------------------&br&说6行代码最主要是印象中poster里面,第五行分成了两行写,写答案的时候也没重新数。&br&第五行比较长。超过了80个字符,算两行也不为过。
不是自己写的。。。贴个神犇代码。。 %% Spectral Residual
myFFT = fft2(inImg);
myLogAmplitude = log(abs(myFFT));
myPhase = angle(myFFT);
mySpectralResidual = myLogAmplitude - imfilter(myLogAmplitude, fspecial('average', 3), 'repl…
已有帐号?
无法登录?
社交帐号登录
204 人关注
6844 人关注
198 个回答
232 人关注
1381 人关注
602 个回答
159 人关注
111 个回答

我要回帖

更多关于 anant agarwal 的文章

 

随机推荐