为什么我的定义cell数组组越位了

UITableView
UITableView 加载服务器数据时,服务器一共有5个数据,下拉更新,上拉加载更多数据。
问题:当上拉加载所有数据后(tableview已经显示了服务器里的所有数据),在下拉更新数据后,报错 :数组越位。
原因:当调用上拉加载所有数据进行 [self.tableView reloadData],正常的情况是先去判断tableview的组,行个数。而这个是先去加载cell,这个cell的行数是上次的行数所以会报错。
谁能解释一下这事为什么吗?
没有更多推荐了,关于ACM上超级楼梯的问题,为什么老是不能通过oj,大神给个解释_百度知道
关于ACM上超级楼梯的问题,为什么老是不能通过oj,大神给个解释
#include&stdio.h&
int main()
int a[40],b[100],i,n;
for(i=4;i&41;i++)
a[i]=a[i-1]+a[i-2];
while(scanf(&%d&,&n)!=EOF)
for(i=0;i&n;i++)
scanf(&%d&,&b[i]);
for(i=0;i&n;i++)
printf(&%d\n&,a[b[i]]);
我有更好的答案
哪个oj?题号多少?别光说个题目名字啊,要么发链接,要么贴完整题目。说两点代码本身的问题:1、int a[40]数组开到40,循环for(i=4;i&41;i++)中要访问到a[40],这里数组越界了。2、a[0],a[1]没赋值,值是随机的,当然如果你确定不会用到这两个值,那这条当我没说。
采纳率:94%
来自团队:
为您推荐:
其他类似问题
acm的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。 为什么我的cell数组越位了
 0  1  58
源自课程章节:
全部回复 (1)&p&今年的KDD会议在美丽的加拿大港口城市Halifax举行, 根据自身的个人兴趣,笔者选择性听了几个相关的报告, 下面是一些个人的总结与感受:&/p&&p&(1) &b&Deep Learning is eating the world&/b&: 毫无意外, Deep learning异常火爆, 出现在几乎所有的topic里。考虑到和工业界实际的应用结合,我们主要听了Linkedin(链接:&a href=&https://link.zhihu.com/?target=https%3A//www.slideshare.net/BenjaminLe4/deep-learning-for-personalized-search-and-recommender-systems& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&slideshare.net/Benjamin&/span&&span class=&invisible&&Le4/deep-learning-for-personalized-search-and-recommender-systems&/span&&span class=&ellipsis&&&/span&&/a& )在推荐和个性化搜索和Amazon Alex Smol关于Amazon的报告(&a href=&https://link.zhihu.com/?target=https%3A//adkdd17.wixsite.com/adkddtargetad2017/copy-of-alex-smola& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& https://adkdd17.wixsite.com/adkddtargetad2017/copy-of-alex-smola&/a&), 报告大部分内容是关于Deep learning。按个人的理解的,在非图像语音领域选择Deep Learning的原因大致如下:&/p&&p&
(a) GBDT等基于树ensemble的模型依赖强特征, 需要大量的特征工程工作, 相比而言深度学习较少的特征工程就能取得很好的预测效果。&/p&&p&
(b) 通过embedding(word2vec, glove)进行语义理解和高维稀疏数据降维(但不限于语义,可拓展至其他高维稀疏数据, 如滴滴应用embedding的方式进行其时空数据预测)。&/p&&p&
(c) 尝试用RNN进行用户序列行为的预测, 如用户下次购买, 登录的时间等 (Amazon). &/p&&p&
但是, 与国内一拥而上式的深度学习热相比, 这些深度学习的工作是建立在两个基础上的:&/p&&p&
(a) 对业务问题的理解。&/p&&p&
(b) 对深度学习模型与理论的深刻掌握。&/p&&p&
如Linkedin对用深度学习应用于推荐的建模的描述(modeling): Can we cast matching problems into a deep (and possibly) wide net and learn family of functions? Amazon先是用经典的survival analysis作了大量可解释性的用户流失建模工作后才进一步采用deep learning改进与优化。&/p&&p&(2)&b&因果推断(Causal inference)一直很重要&/b&:&br& 因果推断相关的Talk占据了一个tutorial一个workshop, 而且在广告workshop专场中有两个invited talk是关于因果推断的, 可见因果推断的重要性。多数因果推断的应用主要在于回答如下两个问题, 是否存在因果效因(causal effect),量化出因果效因(causal effect)的大小。 按个人的理解,关于因果推断的报告主要集中两个方向:&/p&&p&
(a) 如何客观评估线上产品的效果(A/B test系统的搭建) &a href=&https://link.zhihu.com/?target=http%3A//exp-platform.com/2017abtestingtutorial/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&exp-platform.com/2017ab&/span&&span class=&invisible&&testingtutorial/&/span&&span class=&ellipsis&&&/span&&/a&: 线上A/B test是经典统计里的控制对照实验(controlled experiment)在互联网最成功最广泛的应用之一。 多数互联网公司大规模应用A/B test评估线上产品效果, 决定是否上线某一产品或Feature。 这一微软的专场系统地介绍了A/B test的原理论述, 数据层面和系统层面设计, 和常见case和误区。在A/B test背后相对应假设检验(评估ATE: average &br&treatment effect)中, type1 error和type2 error是两个很重要的指标。一个很有意思的小插曲是,来自&a href=&https://link.zhihu.com/?target=http%3A//booking.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&booking.com&/span&&span class=&invisible&&&/span&&/a&的资深产品专家Lukas用大家熟悉的&狼来了&的故事来描述type1&br& error和type2 error, 故事中的H0假设是&狼没有来&: &/p&&p&
*)在刚开始的时候,放羊娃喊狼来了, 大家都认为狼真的来了,但事实上狼没有来;相对应的是type1 error, 大家错误地reject H0假设 &狼没有来&, 都过来赶狼了. &/p&&p&
*)到后来, 大家不再相信放羊娃, 认为狼没有来,但事实上狼真的来了;相对应的是type2 H0假设&狼没有来”是错误的,但我们没有正确地reject这一假设。&/p&&p& (b)Casual effect的计算: A/B test是准确衡量出casual effect最好的办法之一,但在实际情况中, 我们很难通过大规模A/B test 量化出具体causal effect(成本过高)。 如对于电商的定价而言,我们需量化出每个商品一单位价格变化对商品需求的影响, 在促销中量化出价格和流程的分别的影响。经典的统计方法主要是通过线性模型进行参数估计算显著性检验。 Susan &br&Athey在她的报告里讲述了他们近几年一直在做的工作, 基于机器学习的新的方法&a href=&https://link.zhihu.com/?target=https%3A//drive.google.com/file/d/0BwF-hgLDpCD6TlR0WFg5dG5SLUU/view& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&drive.google.com/file/d&/span&&span class=&invisible&&/0BwF-hgLDpCD6TlR0WFg5dG5SLUU/view&/span&&span class=&ellipsis&&&/span&&/a&,
如基于KNN, GMM, Causal forecast。鉴于笔者过去一多年都是在进行动态定价的建模工作, 很多东西也可以在后续继续深入,尝试做些相关的实验(附图: Susan Athey女神照)。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a9fd3ff62a299a16d7607f70bcb9d425_b.jpg& data-rawwidth=&960& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic3.zhimg.com/v2-a9fd3ff62a299a16d7607f70bcb9d425_r.jpg&&&/figure&&p&&br&&/p&&p&(3) &b&物联网(&/b&&a href=&https://link.zhihu.com/?target=https%3A//sites.google.com/site/kdd2017iot/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&sites.google.com/site/k&/span&&span class=&invisible&&dd2017iot/&/span&&span class=&ellipsis&&&/span&&/a&&b&)和城市计算(&/b&&a href=&https://link.zhihu.com/?target=http%3A//urbcomp.ist.psu.edu/2017/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&urbcomp.ist.psu.edu/201&/span&&span class=&invisible&&7/&/span&&span class=&ellipsis&&&/span&&/a&&b&)相关&/b&:随着移动设备如gps,mobile,摄相头等的普及, 如何更好地利用这些移动设备的历史数据改善生活, 提升效率也越成为越来越热门的话题。 对应于阿里, &br&潜在的场景比如相关城市计算的政府项目和菜鸟网络等等。我们重点关注了滴滴在此次大会上发表的关于订单匹配的工作)&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D83e12e5c1acf6ceb001f769e9d25162c& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&mp.weixin.qq.com/s?&/span&&span class=&invisible&&__biz=MzA3MzI4MjgzMw==&mid=&idx=3&sn=83e12e5c1acf6ceb001f769e9d25162c&/span&&span class=&ellipsis&&&/span&&/a&)。预测一直是个很火个topic, 在供应链或其他很多类似领域, 越来越多的人开始关注预测后的决策问题, 以及两者之间的有机结合, 比如在动态定价中, 在计算出价格对需求量的影响后, 我们需要做最优的价格决策; 在库存优化中, 在给定商品销量的预测结果,我们需要根据商品的优化目标如用户满足率,成本,销量等多种因素,进行最优库存决策。和很多先前我们的工作类似: &br&他们的Solution包含两阶段模型: 预测和决策的结合, 给定一时间所有司机和所有订单的匹配矩阵, (1)预测:通过Logistic regression模型预测一个司机对于给定位置,订单详情的接单概率.(2)优化决策:搭建整体的组合优化模型最大化整体的订单成交率。&/p&&p&(4)&b&我们的工作: &/b&我和郭阳的工作在KDD期间的主要工作是一个关于KDD-Cup解决方案的Talk和Poster讲解工作。分别是16号的下午和晚上,在Poster阶段我们预期不会有太多人的, 很意外的是来了不少人来围观我们的海报,包括KDD-Cup的主席头条实验室的李磊老师和H2o的首席产品官Arno Candal。我们慢悠悠到的时候Arno和他同事已经在边上等了, 我告诉Arno我们比赛用的是h2o里面的deep learning模块,他听了很开心, 开始给我们介绍h2o下一代的产品框架, 包含很多很酷炫的可视化的工具。&/p&&p&(5)&b&关于Halifax&/b&: 在北京的雾霾呆久了,看到蓝天白云格外激动。KDD主办方在码头的一个会场提供了一天的晚宴。音乐很赞, 大提琴和管弦演奏的tango配乐让人沉醉不知归路。在这里再次下感谢帮我review slides的阿里小伙伴。&/p&&p&(首发见天池: &a href=&https://link.zhihu.com/?target=https%3A//tianchi.aliyun.com/competition/new_articleDetail.html%3Fspm%3D.0.0.47c9%26raceId%3DpostsId%3D2498& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章详情&/a&)&/p&&p&&/p&
今年的KDD会议在美丽的加拿大港口城市Halifax举行, 根据自身的个人兴趣,笔者选择性听了几个相关的报告, 下面是一些个人的总结与感受:(1) Deep Learning is eating the world: 毫无意外, Deep learning异常火爆, 出现在几乎所有的topic里。考虑到和工业界实…
&figure&&img src=&https://pic3.zhimg.com/v2-eff733cf28cda39fc72b_b.jpg& data-rawwidth=&430& data-rawheight=&243& class=&origin_image zh-lightbox-thumb& width=&430& data-original=&https://pic3.zhimg.com/v2-eff733cf28cda39fc72b_r.jpg&&&/figure&&p&选自 Medium,作者:Nityesh Agarwal,机器之心编译。&/p&&blockquote&在读完书或者完成深度学习在线课程之后,如何才能继续学习机器学习?如何才能「自给自足」地理解这一领域的最新突破?答案就是读论文,机器学习领域的论文是所有前沿思想与技术的孵化所。大多数深度学习概念与技术都是近几年提出来的,想要深入理解它们就必须要看原论文,而不能仅仅关注在线课程、博客甚至是书籍,只有论文才是根本。&/blockquote&&p&在一个 Quora 问答《I want to pursue machine learning as a career but not sure if I am qualified. How can I test myself?》中,问到如何测试某人是否达到了从事机器学习职业的标准。吴恩达说(只要不断学习)任何人都可胜任机器学习的工作。他说,在完成一些机器学习课程之后,「进一步的学习,阅读研究论文。最好是尝试复现研究论文中的结果。」&/p&&p&OpenAI 的研究员 Dario Amodei 说,「为了测试自己是否适合从事 AI 安全或者机器学习的工作,只要尝试快速实现大量模型。从最近的论文中找到一个机器学习模型,实现它,快速的让它能跑起来。」&/p&&p&这表明,读研究论文,对个人进一步了解这个领域极为重要。&/p&&p&每个月都有大量的论文被发表,任何认真学习 ML 的人,都不能只是依靠别人把最新研究分解过的教程类文章或者课程。新的、独创性的研究都是在读文章的时候做出来的。机器学习领域的研究节奏从未如此快过,你能跟上节奏的唯一方法就是养成阅读论文的习惯。&/p&&p&在此文章中,我会尝试给出阅读论文的可行性建议。最后,我会尝试分解一篇论文,从此开始读论文。&/p&&h2&&b&如何读论文&/b&&/h2&&p&&b&&a href=&https://link.zhihu.com/?target=http%3A//arXiv.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&arXiv.org&/span&&span class=&invisible&&&/span&&/a&&/b&&/p&&p&arXiv 是预印本论文的网上发布平台,研究者一般在著名的学术期刊或会议论文发表之前就先将其发布到该平台。&/p&&p&那么为什么先发到 arXiv 上呢?其实事实证明,研究和实际撰写论文并不是终点,将论文提交给某个学术期刊发表是非常漫长的过程。在一篇论文提交给学术期刊后,同行审议的过程一般需要数月甚至一年多的时间。而现在它对于机器学习领域来说是不可取的,因为这个领域发展从未如此迅速。&/p&&p&所以,研究者在预印本资源库 arXiv 上发表论文以快速传播他们的研究,并获得快速反馈。&/p&&p&&br&&/p&&p&&b&Arxiv Sanity Preserver&/b&&/p&&p&让研究者能轻松的预印论文自然很不错。但对于阅读的人而言,预印论文的数量太多了,对于新手而言肯定不适合(个人观点,想试试也无妨)。&/p&&p&所以,我要向你推荐 Arxiv Sanity Preserver:&a href=&https://link.zhihu.com/?target=http%3A//www.arxiv-sanity.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&arxiv-sanity.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-dd57adf78a44a242aee42_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&515& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-dd57adf78a44a242aee42_r.jpg&&&figcaption&Arxiv Sanity Preserver 由 Andrej Karpathy 建立&/figcaption&&/figure&&p&arXiv Sanity 对于 arXiv 而言,正如 Twitter 的 newsfeed 对于 Twitter 的作用。在 newsfeed 中,你能看到最有趣的符合你个人口味的推文,arXiv Sanity 也一样。它能让你基于研究趋势、你的过去喜好以及你关注的人的喜好来排序论文。&/p&&p&&br&&/p&&p&&b&Machine Learning-Reddit 上的 WAYR thread&/b&&/p&&p&WAYR 是 What Are You Reading 的简写。这是一个 Reddit 的子网站(subreddit)Machine Learning 上的一个 thread,其中人们在上面推送近期阅读的机器学习论文,并讨论他们发现的有趣结果。&/p&&p&如我所说,每周在 arXiv 上发表的机器学习领域的研究论文数量非常多。这意味着几乎不可能让个人每周都把它们全部读完,同时还能兼顾其它事情。同时,也不是所有论文都值得一读的。&/p&&p&因此,你需要把精力集中在最有潜力的论文上,而以上介绍的 thread 就是我推荐的一种方式。&/p&&p&&br&&/p&&p&&b&Newsletter、Newsletter、Newsletter!&/b&&/p&&p&Newsletter 是我个人最喜欢的追踪 AI 最新进展的资源。你只需要订阅它们,就可以定期在电子邮件里收到推送。然后,你就能了解到这周里和 AI 相关的最有趣的新闻、文章和研究论文。&/p&&p&我已经订阅了以下 Newsletter:&/p&&ul&&li&Import AI(Jack Clark):这是我的最爱,因为除了推送以上我介绍的那些信息之外,它还拥有称为「Tech Tales」的特色栏目。这个栏目包含新的 AI 相关的基于上周时间的短篇科幻小说。&/li&&li&地址:&a href=&https://link.zhihu.com/?target=https%3A//jack-clark.net/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&jack-clark.net/&/span&&span class=&invisible&&&/span&&/a&&/li&&/ul&&p&&br&&/p&&ul&&li&Machine Learning(Sam DeBrule):他也以相同的名字在 Medium 上发表文章,其中有一些非常有趣的文章,推荐阅读。&/li&&li&地址:&a href=&https://link.zhihu.com/?target=https%3A//machinelearnings.co/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&machinelearnings.co/&/span&&span class=&invisible&&&/span&&/a&&br&&/li&&li&Nathan.ai(Nathan Benaich):以上两个快讯是周报形式,而这个是季刊形式。因此,你能在每三个月收到一封长邮件,其中总结了过去三个月里最有趣的领域进展。&/li&&li&地址:&a href=&https://link.zhihu.com/?target=https%3A//www.getrevue.co/profile/nathanbenaich& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&getrevue.co/profile/nat&/span&&span class=&invisible&&hanbenaich&/span&&span class=&ellipsis&&&/span&&/a&&br&&/li&&li&The Wild Week(Denny Britz):这个快讯的展示很简洁,但在过去两个月里似乎没那么活跃了。总之我也在这里提一下,万一 Denny 又继续更新了呢。&/li&&li&地址:&a href=&https://link.zhihu.com/?target=https%3A//www.getrevue.co/profile/wildml& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&getrevue.co/profile/wil&/span&&span class=&invisible&&dml&/span&&span class=&ellipsis&&&/span&&/a&&br&&/li&&/ul&&p&&b&在 Twitter 上关注「AI 大牛」&/b&&/p&&p&另一种追踪领域最前沿的方式是在 Twitter 上关注著名的研究者和研究机构的账号。以下是我的关注列表:&/p&&ul&&li&Michael Nielsen&br&&/li&&li&Andrej Karpathy&br&&/li&&li&Francois Chollet&br&&/li&&li&Yann LeCun&br&&/li&&li&Chris Olah&br&&/li&&li&Jack Clark&br&&/li&&li&Ian Goodfellow&br&&/li&&li&Jeff Dean&br&&/li&&li&OpenAI&br&&/li&&/ul&&p&&b&但我要怎么「开始」?&/b&&/p&&p&没错,这才是更加迫切的问题。&/p&&p&首先,确保你理解机器学习的基础,例如回归和其它算法;理解深度学习的基础,一般神经网络、反向传播、正则化,以及一些进阶内容,例如卷积网络(CNN)、循环网络(RNN)和长短期记忆网络(LSTM)的工作方式。我不认为阅读研究论文是理清基础的好办法,有很多其它资源可以用来打好基础。比如吴恩达的《Machine Learning》、《Deep Learning》在线课程,周志华的《机器学习》(西瓜书)、Bengio 等著的《深度学习》教材。&/p&&p&学好基础后,你应该从阅读引入那些基本概念、思想的研究论文开始。从而你可以聚焦于习惯研究论文的形式,不要太担心对第一篇研究论文的真正理解,你已经对那些概念很熟悉了。&/p&&p&我推荐从 AlexNet 这篇论文开始。&/p&&p&论文地址:&a href=&https://link.zhihu.com/?target=https%3A//papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&papers.nips.cc/paper/48&/span&&span class=&invisible&&24-imagenet-classification-with-deep-convolutional-neural-networks&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&为什么推荐这一篇?看看下图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-58d2fb7f9f1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&964& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&https://pic4.zhimg.com/v2-58d2fb7f9f1_r.jpg&&&/figure&&p&我们可以看到,计算机视觉和模式识别(Computer Vision and Patter Recognition)的论文发表数从 2012 年开始暴涨,而这一切都源于 AlexNet 这篇论文。&/p&&p&AlexNet 的作者是 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton,论文标题为《ImageNet Classification with Deep Convolutional Networks》。这篇论文被认为是该领域中影响力最大的论文。它介绍了研究者如何使用称为 AlexNet 的卷积神经网络赢得了 2012 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)的冠军。&/p&&p&让计算机观察和识别目标是计算机科学最早期的研究目标之一。ILSVRC 就像是计算机视觉的奥林匹克,其中参赛者(计算机算法)需要准确识别图像属于 1000 个类别的哪一个。而且,在 2012 年,AlexNet 在这项竞赛中远远超越了竞争对手:&/p&&p&它获得了 15.3% 的 top-5 准确率,第二名仅获得 26.2% 的 top-5 准确率。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c1f56639d55fffab5c8ca_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&647& data-rawheight=&321& class=&origin_image zh-lightbox-thumb& width=&647& data-original=&https://pic2.zhimg.com/v2-c1f56639d55fffab5c8ca_r.jpg&&&/figure&&p&毋庸置疑,整个计算机视觉社区都非常令人兴奋,该领域的研究正前所未有地向前加速。人们开始意识到深度神经网络的强大力量,你也可以在该领域尝试获得更多的成果。只要你们了解一些卷积网络的基础,那么掌握 AlexNet 论文的内容就会很简单,它们将会给你带来更多的知识与力量。&/p&&p&完成这一篇论文后,你可以尝试其它与 CNN 相关的开创性论文,也可以转而了解其它如 RNN、LSTM 和 GAN 等流行的架构。&/p&&p&当然目前还有很多渠道获取重要的研究论文,例如在 GitHub 中就有非常多的论文集合。&/p&&p&论文集合:&a href=&https://link.zhihu.com/?target=https%3A//github.com/floodsung/Deep-Learning-Papers-Reading-Roadmap& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/floodsung/De&/span&&span class=&invisible&&ep-Learning-Papers-Reading-Roadmap&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&此外,最后还有一个非常优秀的平台 Distill,是一个现代的交互、视觉化期刊平台,面向现有以及新的机器学习研究成果。Distill 使用了现代用户界面,注重对研究的理解与诠释。&/p&&p&Distill 地址:&a href=&https://link.zhihu.com/?target=https%3A//distill.pub& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://distill.pub (https://distill.pub/)&/a&&/p&&p&虽然 Distill 更新非常慢,但它的每一篇都非常经典。&/p&&p&&br&&/p&&p&原文链接:&a href=&https://link.zhihu.com/?target=https%3A//towardsdatascience.com/getting-started-with-reading-deep-learning-research-papers-the-why-and-the-how-dfd1ac15dbc0& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&towardsdatascience.com/&/span&&span class=&invisible&&getting-started-with-reading-deep-learning-research-papers-the-why-and-the-how-dfd1ac15dbc0&/span&&span class=&ellipsis&&&/span&&/a&&/p&
选自 Medium,作者:Nityesh Agarwal,机器之心编译。在读完书或者完成深度学习在线课程之后,如何才能继续学习机器学习?如何才能「自给自足」地理解这一领域的最新突破?答案就是读论文,机器学习领域的论文是所有前沿思想与技术的孵化所。大多数深度学习…
&figure&&img src=&https://pic3.zhimg.com/v2-9bc334fcdd7fb_b.jpg& data-rawwidth=&1219& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&1219& data-original=&https://pic3.zhimg.com/v2-9bc334fcdd7fb_r.jpg&&&/figure&&blockquote&DeepMind联合谷歌大脑、MIT等机构27位作者发表重磅论文,提出“图网络”(Graph network),将端到端学习与归纳推理相结合,有望解决深度学习无法进行关系推理的问题。&/blockquote&&figure&&img src=&https://pic4.zhimg.com/v2-d6ea3b14de6acaea659bc1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/v2-d6ea3b14de6acaea659bc1_r.jpg&&&/figure&&p&&br&作为行业的标杆,DeepMind的动向一直是AI业界关注的热点。最近,这家世界最顶级的AI实验室似乎是把他们的重点放在了探索“关系”上面,6月份以来,接连发布了好几篇“带关系”的论文,比如:&/p&&ul&&li&关系归纳偏置(Relational inductive bias for physical construction in humans and machines)&/li&&li&关系深度强化学习(Relational Deep Reinforcement Learning)&/li&&li&关系RNN(Relational Recurrent Neural Networks)&/li&&li&论文比较多,但如果说有哪篇论文最值得看,那么一定选这篇——《关系归纳偏置、深度学习和图网络》。&/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-d14cd9597ac6fab3da7f9e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&551& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-d14cd9597ac6fab3da7f9e_r.jpg&&&/figure&&p&这篇文章联合了DeepMind、谷歌大脑、MIT和爱丁堡大学的27名作者(其中22人来自DeepMind),用37页的篇幅,对关系归纳偏置和图网络(Graph network)进行了全面阐述。&/p&&p&DeepMind的研究科学家、大牛Oriol Vinyals颇为罕见的在Twitter上宣传了这项工作(他自己也是其中一位作者),并表示这份综述“pretty comprehensive”。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f412b8fa3ec95bc833bc8ff6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&650& data-rawheight=&331& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&https://pic3.zhimg.com/v2-f412b8fa3ec95bc833bc8ff6_r.jpg&&&/figure&&p&有很不少知名的AI学者也对这篇文章做了点评。&/p&&p&曾经在谷歌大脑实习,从事深度强化学习研究的Denny Britz说,他很高兴看到有人将图(Graph)的一阶逻辑和概率推理结合到一起,这个领域或许会迎来复兴。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f89c660dba3cce8d6f7965_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&652& data-rawheight=&267& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&https://pic1.zhimg.com/v2-f89c660dba3cce8d6f7965_r.jpg&&&/figure&&p&&br&芯片公司Graphcore的创始人Chris Gray评论说,如果这个方向继续下去并真的取得成果,那么将为AI开创一个比现如今的深度学习更加富有前景的基础。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-740e2b3caa91dd392e6b383_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&651& data-rawheight=&198& class=&origin_image zh-lightbox-thumb& width=&651& data-original=&https://pic1.zhimg.com/v2-740e2b3caa91dd392e6b383_r.jpg&&&/figure&&p&&br&康纳尔大学数学博士/MIT博士后Seth Stafford则认为,图神经网络(Graph NNs)可能解决图灵奖得主Judea Pearl指出的深度学习无法做因果推理的核心问题。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-319e972b72d12a3bc6b3e235fdf71675_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&648& data-rawheight=&399& class=&origin_image zh-lightbox-thumb& width=&648& data-original=&https://pic3.zhimg.com/v2-319e972b72d12a3bc6b3e235fdf71675_r.jpg&&&/figure&&h2&开辟一个比单独的深度学习更富有前景的方向&/h2&&p&那么,这篇论文是关于什么的呢?DeepMind的观点和要点在这一段话里说得非常清楚:&/p&&blockquote&这既是一篇意见书,也是一篇综述,还是一种统一。我们认为,如果AI要实现人类一样的能力,必须将组合泛化(combinatorial generalization)作为重中之重,而结构化的表示和计算是实现这一目标的关键。&br&正如生物学里先天因素和后天因素是共同发挥作用的,我们认为“人工构造”(hand-engineering)和“端到端”学习也不是只能从中选择其一,我们主张结合两者的优点,从它们的互补优势中受益。&/blockquote&&p&在论文里,作者探讨了如何在深度学习结构(比如全连接层、卷积层和递归层)中,使用关系归纳偏置(relational inductive biases),促进对实体、对关系,以及对组成它们的规则进行学习。&/p&&p&他们提出了一个新的AI模块——图网络(graph network),是对以前各种对图进行操作的神经网络方法的推广和扩展。图网络具有强大的关系归纳偏置,为操纵结构化知识和生成结构化行为提供了一个直接的界面。&/p&&p&作者还讨论了图网络如何支持关系推理和组合泛化,为更复杂、可解释和灵活的推理模式打下基础。&/p&&h2&图灵奖得主Judea Pearl:深度学习的因果推理之殇&/h2&&p&2018年初,承接NIPS 2017有关&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3MTA0MTk1MA%3D%3D%26mid%3D%26idx%3D4%26sn%3Dc104a932de79a%26chksm%3Df8917d88eafeef53b829ce298f9b9691ebbec7b5d06dda2b085f300%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&“深度学习炼金术”&/a&的辩论,深度学习又迎来了一位重要的批评者。&/p&&p&图灵奖得主、贝叶斯网络之父Judea Pearl,在ArXiv发布了他的论文&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3MTA0MTk1MA%3D%3D%26mid%3D%26idx%3D1%26sn%3D689d2d8b76ccab18c4e56e4%26chksm%3Df263d1af7d4d11e181b3c395d2ad62ed92f8ebdfc404%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《机器学习理论障碍与因果革命七大火花》&/a&,论述当前机器学习理论局限,并给出来自因果推理的7大启发。Pearl指出,当前的机器学习系统几乎完全以统计学或盲模型的方式运行,不能作为强AI的基础。他认为突破口在于“因果革命”,借鉴结构性的因果推理模型,能对自动化推理做出独特贡献。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ef5c2d3d9c1907025caa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&712& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&712& data-original=&https://pic4.zhimg.com/v2-ef5c2d3d9c1907025caa_r.jpg&&&/figure&&p&在最近的一篇访谈中,Pearl更是直言,当前的深度学习不过只是“曲线拟合”(curve fitting)。“这听起来像是亵渎……但从数学的角度,无论你操纵数据的手段有多高明,从中读出来多少信息,你做的仍旧只是拟合一条曲线罢了。” &/p&&h2&DeepMind的提议:把传统的贝叶斯因果网络和知识图谱,与深度强化学习融合&/h2&&p&如何解决这个问题?DeepMind认为,要从“图网络”入手。&/p&&p&大数医达创始人、CMU博士邓侃为我们解释了DeepMind这篇论文的研究背景。&/p&&p&邓侃博士介绍,机器学习界有三个主要学派,符号主义(Symbolicism)、连接主义(Connectionism)、行为主义(Actionism)。&/p&&p&符号主义的起源,注重研究知识表达和逻辑推理。经过几十年的研究,目前这一学派的主要成果,一个是贝叶斯因果网络,另一个是知识图谱。&/p&&p&贝叶斯因果网络的旗手是 Judea Pearl 教授,2011年的图灵奖获得者。但是据说 2017年 NIPS 学术会议上,老爷子演讲时,听众寥寥。2018年,老爷子出版了一本新书,“The Book of Why”,为因果网络辩护,同时批判深度学习缺乏严谨的逻辑推理过程。而知识图谱主要由搜索引擎公司,包括谷歌、微软、百度推动,目标是把搜索引擎,由关键词匹配,推进到语义匹配。&/p&&p&连接主义的起源是仿生学,用数学模型来模仿神经元。Marvin Minsky 教授因为对神经元研究的推动,获得了1969年图灵奖。把大量神经元拼装在一起,就形成了深度学习模型,深度学习的旗手是 Geoffrey Hinton 教授。深度学习模型最遭人诟病的缺陷,是不可解释。&/p&&p&行为主义把控制论引入机器学习,最著名的成果是强化学习。强化学习的旗手是 Richard Sutton 教授。近年来Google DeepMind 研究员,把传统强化学习,与深度学习融合,实现了 AlphaGo,战胜当今世界所有人类围棋高手。&/p&&p&DeepMind 前天发表的这篇论文,提议把传统的贝叶斯因果网络和知识图谱,与深度强化学习融合,并梳理了与这个主题相关的研究进展。&/p&&h2&DeepMind提出的“图网络”究竟是什么&/h2&&p&在这里,有必要对说了这么多的“图网络”做一个比较详细的介绍。当然,你也可以跳过这一节,直接看后面的解读。&/p&&p&在《关系归纳偏置、深度学习和图网络》这篇论文里,作者详细解释了他们的“图网络”。图网络(GN)的框架定义了一类用于图形结构表示的关系推理的函数。GN 框架概括并扩展了各种的图神经网络、MPNN、以及 NLNN 方法,并支持从简单的构建块(building blocks)来构建复杂的结构。&/p&&p&GN 框架的主要计算单元是 GN block,即 “graph-to-graph” 模块,它将 graph 作为输入,对结构执行计算,并返回 graph 作为输出。如下面的 Box 3 所描述的,entity 由 graph 的节点(nodes),边的关系(relations)以及全局属性(global attributes)表示。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-a1ceda7fdc7a00b7a04e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&628& data-rawheight=&432& class=&origin_image zh-lightbox-thumb& width=&628& data-original=&https://pic2.zhimg.com/v2-a1ceda7fdc7a00b7a04e_r.jpg&&&/figure&&p&&br&&br&论文作者用 “graph” 表示具有全局属性的有向(directed)、有属性(attributed)的 multi-graph。一个节点(node)表示为&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a2ee35cd4f44330baed6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&19& class=&content_image& width=&16&&&/figure&&p&,一条边(edge)表示为&/p&&figure&&img src=&https://pic1.zhimg.com/v2-44ecbd49d9d2842e8adc855aaa9a022f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&15& data-rawheight=&14& class=&content_image& width=&15&&&/figure&&p&,全局属性(global attributes)表示为u。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-43acfd3bf8e64bb6d70f2c8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&17& class=&content_image& width=&16&&&/figure&&p&和&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8bba278aa1e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&14& class=&content_image& width=&16&&&/figure&&p&表示发送方(sender)和接收方(receiver)节点的指标(indices)。具体如下:&/p&&ul&&li&Directed:单向,从 “sender” 节点指向 “receiver” 节点。&/li&&li&Attribute:属性,可以编码为矢量(vector),集合(set),甚至另一个图(graph)&/li&&li&Attributed:边和顶点具有与它们相关的属性&/li&&li&Global attribute:graph-level 的属性&/li&&li&Multi-graph:顶点之间有多个边&/li&&/ul&&p&GN 框架的 block 的组织强调可定制性,并综合表示所需关系归纳偏置(inductive biases)的新架构。&/p&&p&用一个例子来更具体地解释 GN。考虑在任意引力场中预测一组橡胶球的运动,它们不是相互碰撞,而是有一个或多个弹簧将它们与其他球(或全部球)连接起来。我们将在下文的定义中引用这个运行示例,以说明图形表示和对其进行的计算。&/p&&p&“graph” 的定义&br&&br&在我们的 GN 框架中,一个 graph 被定义为一个 3 元组的&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3ebff4c956_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&100& data-rawheight=&23& class=&content_image& width=&100&&&/figure&&p&。&br&&br&u 表示一个全局属性;例如,u 可能代表重力场。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-8d8b914b398d6f9f632dd72f5fb0e75a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&112& data-rawheight=&26& class=&content_image& width=&112&&&/figure&&p&是节点集合(基数是&/p&&figure&&img src=&https://pic3.zhimg.com/v2-9ad9a89cb483_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&22& data-rawheight=&20& class=&content_image& width=&22&&&/figure&&p&),其中每个&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a2ee35cd4f44330baed6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&19& class=&content_image& width=&16&&&/figure&&p&表示节点的属性。例如,V 可能表示每个球,带有位置、速度和质量这些属性。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cd8fbd3c899cddb5494c2db_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&171& data-rawheight=&22& class=&content_image& width=&171&&&/figure&&p&是边(基数是&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e66d5a08a350b38fdbc611a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&22& data-rawheight=&20& class=&content_image& width=&22&&&/figure&&p&)的集合,其中每个&/p&&figure&&img src=&https://pic1.zhimg.com/v2-44ecbd49d9d2842e8adc855aaa9a022f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&15& data-rawheight=&14& class=&content_image& width=&15&&&/figure&&p&表示边的属性,&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8bba278aa1e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&14& class=&content_image& width=&16&&&/figure&&p&是接收节点的 index,&/p&&figure&&img src=&https://pic4.zhimg.com/v2-43acfd3bf8e64bb6d70f2c8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&16& data-rawheight=&17& class=&content_image& width=&16&&&/figure&&p&是发送节点的 index。例如,E 可以表示不同球之间存在的弹簧,以及它们对应的弹簧常数。&/p&&p&算法 1:一个完整的 GN block 的计算步骤&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d9fbe20a62b19eeeddcfa9a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&726& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&726& data-original=&https://pic4.zhimg.com/v2-d9fbe20a62b19eeeddcfa9a_r.jpg&&&/figure&&p&&br&GN block 的内部结构&/p&&p&一个 GN block 包含三个 “update” 函数&/p&&figure&&img src=&https://pic1.zhimg.com/v2-70f9abe24256f1deea5d7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&14& data-rawheight=&23& class=&content_image& width=&14&&&/figure&&p&,以及三个 “aggregation” 函数&/p&&figure&&img src=&https://pic4.zhimg.com/v2-edb532a882a36fde880776_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&14& data-rawheight=&20& class=&content_image& width=&14&&&/figure&&p&:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-0abbe258f0728_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&585& data-rawheight=&98& class=&origin_image zh-lightbox-thumb& width=&585& data-original=&https://pic1.zhimg.com/v2-0abbe258f0728_r.jpg&&&/figure&&p&&br&其中:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f48225f49aeaf54d2d908e48d4fdb31d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&630& data-rawheight=&28& class=&origin_image zh-lightbox-thumb& width=&630& data-original=&https://pic2.zhimg.com/v2-f48225f49aeaf54d2d908e48d4fdb31d_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-0e00b38c5cef53d972bda881c8e757d6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&733& data-rawheight=&240& class=&origin_image zh-lightbox-thumb& width=&733& data-original=&https://pic1.zhimg.com/v2-0e00b38c5cef53d972bda881c8e757d6_r.jpg&&&/figure&&p&&br&图:GN block 中的 Updates。蓝色表示正在 update 的元素,黑色表示 update 中涉及的其他元素&/p&&h2&把知识图谱和深度学习相结合的难点&/h2&&p&要把知识图谱和深度学习相结合,邓侃博士认为有几大难点。&/p&&p&1. 点向量:&/p&&p& 知识图谱由点和边构成,点(node)用来表征实体(entity),实体又包含属性(attribute)和属性的值(value)。传统知识图谱中的实体,通常由概念符号构成,譬如自然语言的词汇。&/p&&p&传统知识图谱中的边,连接两个单点,也就是两个实体,边表达的是关系,关系的强弱,由权重表达,传统知识图谱的边的权重,通常是常数。&/p&&p&如果想把传统知识图谱与深度学习相融合,首先要做的是实现点的可微分化。用数值化的词向量来替代自然语言的词汇,是实现点的可微分化的有效方法,通常的做法是用语言模型来分析大量的文本,给每个词汇找到最贴合上下文语义的词向量。但在图谱中,传统的词向量的生成算法,不十分奏效,需要改造。&/p&&p&2. 超点:&/p&&p&前文说到,传统知识图谱中的边,连接两个单点,表达两个单点之间的关系。这个假定制约了图谱的表达能力,因为在很多场景下,多个单点组合在一起,才与其它单点或者单点组合,存在关系。我们把单点组合,称之为超点(hyper-node)。&/p&&p&问题是哪些单点组合在一起构成超点?人为的先验指定,当然是一个办法。从大量训练数据中,通过 dropout 或者 regulation 算法,自动学习出超点的构成,也是一个思路。&/p&&p&3. 超边:&/p&&p&传统的知识图谱中的边,表达了点与点之间的关系,关系的强弱由权重表达,通常权重是个常数。但在很多场景下,权重并非是常数。随着点的取值不同,边的权重也发生变化,而且很可能是非线性变化。&/p&&p&用非线性函数来表达图谱的边,称为超边(hyper-edge)。&/p&&p&深度学习模型可以用于模拟非线性函数。所以,知识图谱中每条边都是一个深度学习模型。模型的输入是若干个单点组成的超点,模型的输出是另一个超点。如果把每个深度学习模型,视为一棵树,根是输入,叶子是输出。那么鸟瞰整个知识图谱,实际上是深度学习模型的森林。&/p&&p&4. 路径: &/p&&p&训练知识图谱,包括训练点向量,超点、和超边的时候,一条训练数据往往是在图谱中行走的一条路径,通过拟合海量的路径,获得最贴切的点向量、超点和超边。&/p&&p&用拟合路径来训练图谱,存在的一个问题是,训练过程与过程结束后的评价,两者的脱节。打个比方,给你若干篇文章的提纲,以及相应的范文,让你学习如何写作文。拟合的过程,强调逐字逐句的模仿。但是评价文章的好坏,重点并不在于字句的亦步亦趋,而在于通篇文章的顺畅。&/p&&p&如何解决训练过程与最终评价的脱节?很有潜力的办法,是用强化学习。强化学习的精髓,在于把最终的评价,通过回溯和折现的方法,给路径过程中每一个中间状态,评估它的潜力。&/p&&p&但是强化学习面临的困难,在于中间状态的数量不可太多。当状态数量太多时,强化学习的训练过程,无法收敛。解决收敛问题的办法,是用一个深度学习模型,来估算所有状态的潜力值。换句话说,不需要估算所有状态的潜力值,而只需要训练一个模型的有限参数。&/p&&p&DeepMind 前天发表的这篇文章,提议把深度强化学习与知识图谱等相融合,并梳理了大量的相关研究。但是,论文并没有明确说明 DeepMind 偏向于哪一种具体方案。&/p&&p&或许,针对不同应用场景会有不同方案,并没有通用的最佳方案。&/p&&h2&图谱深度学习是下一个AI算法的热点?&/h2&&p&许多重要的现实世界数据集都是以图或网络的形式出现,比如社交网络、知识图谱,万维网等等。 目前,已有越来越多的研究者开始关注神经网络模型对这种结构化数据集的处理。&/p&&p&结合DeepMind、谷歌大脑等发表的一系列的关于图深度学习的论文,是否预示“图深度学习”是下一个AI算法热点?&/p&&p&总之,先从这篇论文看起吧。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-60f6e48f90f0a00db3d7fa1eea8a176b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1013& data-rawheight=&456& class=&origin_image zh-lightbox-thumb& width=&1013& data-original=&https://pic3.zhimg.com/v2-60f6e48f90f0a00db3d7fa1eea8a176b_r.jpg&&&/figure&&p&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&1.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&参考资料&/p&&p&Judea Pearl采访:&a href=&https://link.zhihu.com/?target=https%3A//www.quantamagazine.org/to-build-truly-intelligent-machines-teach-them-cause-and-effect-/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&quantamagazine.org/to-b&/span&&span class=&invisible&&uild-truly-intelligent-machines-teach-them-cause-and-effect-/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&图卷积网络:&a href=&https://link.zhihu.com/?target=http%3A//tkipf.github.io/graph-convolutional-networks/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&tkipf.github.io/graph-c&/span&&span class=&invisible&&onvolutional-networks/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&关系RNN:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/v1.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&2v1.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&关系深度强化学习:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&0&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&关系归纳偏置&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&3.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&(本文首发于新智元微信公众号:AI_era,欢迎关注!)&/p&&p&&/p&
DeepMind联合谷歌大脑、MIT等机构27位作者发表重磅论文,提出“图网络”(Graph network),将端到端学习与归纳推理相结合,有望解决深度学习无法进行关系推理的问题。 作为行业的标杆,DeepMind的动向一直是AI业界关注的热点。最近,这家世界最顶级的AI实…
&figure&&img src=&https://pic2.zhimg.com/v2-34f19d0c74ce00b2ce055b414f80915d_b.jpg& data-rawwidth=&755& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&755& data-original=&https://pic2.zhimg.com/v2-34f19d0c74ce00b2ce055b414f80915d_r.jpg&&&/figure&&blockquote&编者按:本文作者Abhijeet Kumar是一名有着五年机器学习和数据科学工作经验的从业者。从今年年初开始,他开始在印度的数据科学、机器学习或深度学习领域找工作。在为期30—40天的求职过程中,他面试了8—10家公司,其中不仅包括刚成立一年的创业公司,也有亚马逊这种电商巨头。Kumar把每家公司的面试题记录下来,为各位求职者提供经验。以下是论智的编译。&/blockquote&&p&先介绍一下我自己,我有过4年以上机器学习的工作经验,主要工作内容有话语分析、文本分析和图像分析。我认为该领域最稀缺的人才是NLP专业,然后是图像分析(CV),主要进行话语或音频分析的较少。有了五年的工作经验后,我的目标是中高层职位,可以带领一个数据或机器学习团队做一些有趣的研究。以下是我在面试过程中遇到的各种技术性问题,供大家参考。&/p&&hr&&h2&全球服务性公司之一(20—25分钟)&/h2&&ol&&li&请问你在搭建文档挖掘系统的过程中,做了哪些工作?&/li&&li&假设给你数TB的数据文件,其中包含PDF、文本文件、图像、扫描的PDF文件等等。你将如何对其分类?&/li&&li&你如何阅读扫描的PDF或书面文件?&/li&&li&为什么朴素贝叶斯被称为“朴素”?&/li&&li&详细谈谈朴素贝叶斯分类器?&/li&&li&什么是深度学习?机器学习和深度学习的区别在哪里?&/li&&/ol&&p&除此之外还有一些类似的问题,但是我对它们有些一头雾水,完全不知道面试官想听到什么样的答案。我一直想探讨更深层次的技术层面的东西,但是他们一直没有聊到这方面。而且当我扯起模型训练、tesseract或者语言模型时,他们似乎完全不吃这一套。也许他们想听到的是现成的成果,或是很简单的解释。这跟我五年前第一次面试的感觉非常相似。&/p&&hr&&h2&全球服务型公司之二(40—45分钟)&/h2&&ol&&li&你如何能在无监督的方式下收集文件?&/li&&li&你如何找到与某些查询问题相关的文件?&/li&&li&解释一下TF-IDF。&/li&&li&根据我的经验,TF-IDF在文档分类或收集方面失败了,你今后会怎么改善?&/li&&li&什么是LSTM神经网络?解释一下它是如何工作的。&/li&&li&什么是word2vec向量?&/li&&li&Python中可变和不可变对象是什么意思?&/li&&li&你在Python中使用什么数据结构?&/li&&/ol&&p&虽然有几个问题是围绕文本相似度的,但我都顺利回答出来了。不过这次和上次一样,仍然没有深层次技术上的探讨,或许是考虑到公司有几个关于文本分析的小项目,他们最终还是向我发出了offer。&/p&&hr&&h2&全球生产和服务公司(40分钟)&/h2&&ol&&li&在不平衡的数据集中,你如何处理多类别的分类问题?&/li&&li&你是如何从文本句子中进行语言识别的?&/li&&li&你如何表示中文或日文中的象形文字?&/li&&li&该如何设计一个聊天机器人?(在这一点上我没有太多想法)&/li&&li&输入一对问题和回答,我能用RNN设计一个聊天机器人吗?&/li&&li&假设我用Reddit上的数据集和RNN或LSTM创建了一个聊天机器人,它给了我10个备选回复,我如何才能选择最佳的那个?或者说,我如何删除其他的回复?&/li&&li&解释一下SVM是如何学习非线性边界的?&/li&&/ol&&p&除此之外还有几个问题我记不清了,不过这是目前为止第一个问技术性问题的公司,我感到非常欣慰。最后这家公司也向我发了offer。&/p&&hr&&h2&成立一年的医疗健康公司(50分钟)&/h2&&ol&&li&精确率(precision)和召回率(recall)是什么?在医学诊断中,你认为哪个更重要?&/li&&li&对精确率和召回率分别进行定义。&/li&&li&你如何绘制ROC曲线?ROC曲线下面积表示什么?&/li&&li&在多类别分类任务中你如何绘制ROC曲线?&/li&&li&除此之外,还有哪些评估多类别分类任务结果的方法?&/li&&li&灵敏度(sensitivity)和特异度(specificity)是什么?&/li&&li&随机森林中的“随机”指什么?&/li&&li&你如何进行文本分类?&/li&&li&在没有TF-IDF的情况下,你如何确定自己学会了文本?&/li&&li&你还能用机器学习做些什么?&/li&&li&当神经网络由线性节点构成时,它如何学习非线性形状?它如何学会非线性边界?&/li&&/ol&&p&除此之外还有几个不错的问题。尽管面试过程感觉不错,但是在某些问题上我们未能达成一致。而且在面试过程中,我发现公司只有2—3人专注于ML/DL/DS。&/p&&hr&&h2&亚马逊(50—55分钟)&/h2&&ol&&li&训练决策树时的参数是什么?&/li&&li&在决策树的节点处分割的标准是什么?&/li&&li&基尼系数的公式是什么?&/li&&li&熵的公式是什么?&/li&&li&决策树如何决定在哪个特征处分割?&/li&&li&你如何用数学计算收集来的信息?你确定吗?&/li&&li&随机森林的优点有哪些?&/li&&li&介绍一下boosting算法。&/li&&li&gradient boosting如何工作?&/li&&li&关于AdaBoost算法,你了解多少?它如何工作?&/li&&li&SVM中用到了哪些核?SVM中的优化技术有哪些?&/li&&li&SVM如何学习超平面?用数学方法详细解释一下。&/li&&li&介绍一下无监督学习,算法有哪些?&/li&&li&在K-Means聚类算法中,如何定义K?&/li&&li&告诉我至少3中定义K的方法。&/li&&li&除此之外你还知道哪些聚类算法?&/li&&li&谈谈DB-SCAM算法。&/li&&li&阶层聚合式分类法(Hierarchical Agglomerative clustering)是如何工作的?&/li&&li&解释一下PCA,使用PCA时有哪些数学步骤。&/li&&li&使用PCA有哪些缺点?&/li&&li&CNN如何工作?详细说一下使用细节。&/li&&li&解释一下CNN中的反向传播。&/li&&li&你如何部署机器学习模型?&/li&&li&大多时候,我们可能需要用C++从零开始搭建机器学习模型,你能做吗?&/li&&/ol&&p&我面试的是亚马逊level 6的职位。我只能说,他们主要的关注点在算法和背后的数学上。不幸的是,我的面试都是即兴的,并没有准备数学方面的知识,我只说了我所记得的所有东西。不过面试官并不认为我适合level 6的工作。我相信只要你能记住通用的机器学习算法的数学细节,就能轻易地通过亚马逊技术轮面试。&/p&&hr&&h2&全球服务型巨头(50—55分钟)&/h2&&ol&&li&S函数的范围是什么?&/li&&li&scikit-learn的哪个安装包能实现逻辑回归?&/li&&li&标准正态分布的平均数和变量是什么?&/li&&li&你在Python中用什么数据结构?&/li&&li&文本分类的方法有什么,你都怎样做?&/li&&li&解释一下TF-IDF,它的缺点有什么?你怎么克服?&/li&&li&bigrams和trigrams是什么?用带有文本句子的例子解释一下bigram和trigram的TF-IDF。&/li&&li&word2vec有哪些应用,举个例子?&/li&&li&你会怎样设计一个神经网络?怎样把它变深?&/li&&li&LSTM是如何工作的?它是怎么记住文本的?&/li&&li&什么是朴素贝叶斯分类器?&/li&&li&抛10次硬币,4次是正面的概率有多大?&/li&&li&如何获取Python中列表元素的索引?&/li&&li&如果用pandas合并两个数据集?&/li&&li&从用户角度出发,你需要模拟欺诈活动,你会如何解决这个问题?&/li&&li&你更喜欢决策树还是随机森林?&/li&&li&使用逻辑回归和随机森林有什么区别?&/li&&li&在分类问题上,你会用决策树还是随机森林?用随机森林有什么优点?&/li&&/ol&&p&最终这家公司向我发放了数据科学岗位的offer。事实上,我非常享受这次的技术性交流。你可能会觉得这些问题也是最基础的机器学习和数据科学问题。不过在面试过程中我感到面试官可能不是这一领域的,或者对现在的发展了解的不多。&/p&&hr&&h2&全球商业管理公司(25—30分钟)&/h2&&ol&&li&在不平衡的数据集中,你会选择什么模型:随机森林还是boosting?为什么?&/li&&li&你了解的boosting技术有哪些?&/li&&li&用监督学习的方法进行分类问题,你会选择哪个模型?(大约40—50个类别)&/li&&li&你如何使用集成技术?&/li&&li&SVM如何工作的?&/li&&li&什么是Kernel?简单介绍一下。&/li&&li&如何执行非线性回归?&/li&&li&Lasso回归和Ridge回归是什么?&/li&&/ol&&p&说实话,这次面试有点水,以至于我没有认真对待。不过问题还是不错的。我面试的是领导一个15—16人的团队,在这之后是经理面试和HR面试。最终他们给我提供了咨询岗位以及不错的薪水。&/p&&hr&&h2&成立4年的生产和服务型公司(60分钟)&/h2&&ol&&li&简历上说,你曾做过用语音识别演讲者,具体方法是什么?&/li&&li&什么是MFCCs?&/li&&li&高斯混合模型是什么,它是如何完成聚类的?&/li&&li&如何实现期望最大化?其中的步骤是什么?&/li&&li&GMM中的概率如何计算?&/li&&li&在对演讲者进行识别时,你是如何为GMM-UBM技术执行MAP调整的?&/li&&li&谈谈你所用的I-向量技术。&/li&&li&语境中的分析因素是什么?&/li&&li&JFA和I-向量的区别是什么?为什么选择I-向量而不选JFA?&/li&&li&你用过PLDA I-向量技术吗?&/li&&li&你读过百度的有关Deep Speaker的论文吗?&/li&&li&如果有两个模型都可用,你会如何选择?&/li&&li&贝叶斯信息度量(BIC)和赤池信息量(AIC)工作的数学原理是什么?&/li&&li&BIC和AIC背后的原理是什么?&/li&&li&在你的MFCC特征向量矩阵中,如果有数据丢失怎么办?&/li&&li&如何分辨语言?有什么特点?&/li&&li&你的分类器更像是话语和音乐的分类器,还是话语和非话语的分类器?&/li&&li&在语言分析应用中,如何部署深度神经网络?&/li&&/ol&&p&是的,你可能会问这都是什么问题。非常巧的是,我们两个人的研究领域都是语音分析,特别是演讲者识别。所以整个面试过程一直在围绕语音分析。很显然,面试官很专业,并且给了我非常积极的反馈。之后,这家公司给我提供了AI解决方案架构师的工作。&/p&&hr&&h2&建议&/h2&&p&在整个求职过程中,我大概与25—30位专业人士有过交谈,以下是我在这之后能给出的建议:&/p&&ul&&li&简历很重要。要在其中写明参加过的项目、Kaggle竞赛、MOOC证书或者论文。我就是在没有任何推荐人推荐的情况下接到了亚马逊的电话。你的简历是打动HR和面试官的重要武器。&/li&&li&自信心和驱动力是成功的一半。参加面试时一定要自信,并且展示出你的热情(尤其是在创业公司和服务型公司)。&/li&&li&面试时不要急着回答问题。花些时间想想如何组织答案,如果有不明白的地方一定要问。面试时一定要冷静。&/li&&li&在解释概念时别忘了表现自己。你可以提几个做过的案例,并且要熟悉你简历里写的技能和项目。&/li&&li&如果你是这一领域的新人,在创建简历时可以从自己做过的项目开始,或者GitHub账号也是很有说服力的。除此之外,可以多参加Kaggle竞赛和MOOC课程。&/li&&li&学会谦虚,注意倾听面试官的意见。有的时候,R和Python的使用者会互相鄙视,最好不要这样,不然很可能挂掉。&/li&&/ul&&p&&b&最后,祝大家面试成功!&/b&&/p&&p&论智君:答案?拟答案什么的是不可能的,这辈子都不可能的,当然如果你关注了论智公众号jqr_AI……&/p&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D2%26sn%3Dfe8d0fb528c32c11c5c9db%26chksm%3Deb4ee0fedcd1b8edcaf6f7feff943bbeeddc787e683d13%23rd& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&6步骤带你了解朴素贝叶斯分类器(含Python和R语言代码)&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D2%26sn%3D8b88bd6ae6c435eaa84edb%26chksm%3Deb4ee3d0dc396ac6e4ecc41a23d7bd159e81e22d32cdb19b44f9bf%23rd& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据科学、机器学习和人工智能到底有什么区别?&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D2%26sn%3Dbacb7aa8aed53ddda2b2393%26chksm%3Deb4ee3f1dc396ae72ade51f0c69d0d4da233e117aeaec2b6e%23rd& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于TensorFlow的LSTM简介:以股票市场文本情感分析为例&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D1%26sn%3D2f2c83ae61bchksm%3Deb4ee3cbdc396add5c3cb5c9afd3ccc2ae45e7b2ce1d195c1ab2ddc8%23rd& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&判断医学AI论文水不水,从读懂ROC曲线开始&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D1%26sn%3Ddd534d73357%26chksm%3Deb4ee1aadcaf70baed2d311cdcc5ascene%3D21%23wechat_redirect& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零学习:从Python和R理解和编码神经网络(完整版)&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D1%26sn%3De1df989de573ae%26chksm%3Deb4ee22bdc396b3deca7dfef681ab0ca6f973c203c3699%23rd& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零学习:详解基于树形结构的ML建模(R & Python)--随机森林篇&/a&&a href=&https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI3ODkxODU3Mg%3D%3D%26mid%3D%26idx%3D1%26sn%3Dc66e6b339f24a18099daea%26chksm%3Deb4ee242dc396b547ae6b1ed4f39efc06d823fff439%26scene%3D21%23wechat_redirect& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-2d9ceed78978badf52f685b50ced44c6_ipico.jpg& data-image-width=&358& data-image-height=&358& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零学习:详解基于树形结构的ML建模(R & Python)--决策树篇&/a&&p&太多了,记不清了……&/p&
编者按:本文作者Abhijeet Kumar是一名有着五年机器学习和数据科学工作经验的从业者。从今年年初开始,他开始在印度的数据科学、机器学习或深度学习领域找工作。在为期30—40天的求职过程中,他面试了8—10家公司,其中不仅包括刚成立一年的创业公司,也有…
&p&抛砖引玉, 介绍一个Python 工具包 &b&&code&&a href=&//link.zhihu.com/?target=https%3A//github.com/DIYer22/boxx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&boxx&/a&&/code&&/b&&/p&&p&在调试视觉代码时, 基本就是和多维数组打交道, 多维数组有很多的属性,打印起来比较麻烦。 &code&boxx.loga&/code& 可以一次性展现出一个数组的大多数属性.
&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-6a441dfa7d75fc88cc74fa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&645& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic3.zhimg.com/50/v2-6a441dfa7d75fc88cc74fa_r.jpg&&&/figure&&p&&b&Note:&/b& &br& * &code&loga&/code& 是 &log array& 的缩写, 若 &code&array&/code& 里面还含有 &code&nan&/code& 或 &code&inf&/code&, &code&loga&/code& 也会一并提示出来。&br& * &code&loga&/code& 支持许多可以转为 &code&numpy&/code& 的数据类型,包括 &code&torch.tensor&/code&, &code&mxnet.ndarray&/code&, &code&PIL.Image&/code& 等。&/p&&p&&br&&/p&&p&
做计算机视觉,可视化图像和 feature 非常重要。&code&boxx.show&/code& 能方便地做可视化。 &/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-d82b9c5b1c268a279b0f2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&645& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic3.zhimg.com/50/v2-d82b9c5b1c268a279b0f2_r.jpg&&&/figure&&p&&b&Note:&/b& &code&show&/code& 会在复杂的数据结构中 找出所有可能是图像的矩阵,并一一显示(&code&plt.imshow&/code&)出来。 当然,&code&show&/code& 也支持 &code&numpy&/code&,&code&torch&/code&,&code&mxnet&/code&,&code&PIL.Image&/code& .etc&/p&&p&&br&&/p&&p&
在开发 CV 代码时,会遇到一些复杂的 dict,list(比如 batch、模型参数)。&code&boxx.tree&/code& 可以直观地展示复杂结构。 &/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-25bb9c86fd6e496cdefa087_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&645& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic4.zhimg.com/50/v2-25bb9c86fd6e496cdefa087_r.jpg&&&/figure&&p&&b&Note:&/b& 在理解和适配别人的代码时,经常用到 &code&tree&/code&。&code&tree&/code& 还支持自动从 &code&torch.Dataloader/Dataset&/code& 中 sample 一个 batch 来可视化 (P.S. &code&boxx.show&/code& 也支持) &/p&&hr&&p&
以上三个工具是我在视觉领域经常用到的工具, 接下来介绍一些通用的 Python 开发调试工具,只要写 Python 代码,都可以用上。&/p&&p&打印变量是最简单、直接的debug方式, 那能不能更简单? &/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-cbbd64502add9c9cbd064fec2d02e957_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&420& data-rawheight=&486& class=&content_image& width=&420&&&/figure&&p&&b&Note:&/b& &code&boxx.p&/code& 使用了 magic method, &code&p/x&/code& 便会打印 x 并返回 x。这样便可以在任何地方打印,比如 例子中的 &code&p/randint(0, 3)&/code& 就不需要新建变量便可直接打印&/p&&p&&br&&/p&&p&
在函数内运行 &code&p()&/code&,便会将函数或 module 内的所有变量名和值一同打印(相当于快捷打印 &code&locals()&/code&) &/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-3a7e2b4b1aba1b77f6eaa03ff4b49e96_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&477& data-rawheight=&277& class=&origin_image zh-lightbox-thumb& width=&477& data-original=&https://pic3.zhimg.com/50/v2-3a7e2b4b1aba1b77f6eaa03ff4b49e96_r.jpg&&&/figure&&p&&b&Note:&/b& 在函数内 &code&import boxx.p&/code& 和 &code&p()&/code& 有相同的效果&/p&&p&&br&&/p&&p&
许多数情况下, 直接 &code&print&/code& 无法获得调试的关键信息。 比如训练 loss 跑飞了, 导致 Bug 的可能是 &code&tensor&/code& 的尺度/类型不对, 矩阵里有 nan , inf 等情况。我曾遇到过 &a href=&https://www.zhihu.com/question//answer/& class=&internal&&梯度含有nan&/a& 的情况,这时 就必须对矩阵进行分析, 方式有:&br& 1. 在调试处加上 &code&print(x.mean(), np.hasinf(x),.np.hasnan(x))&/code&&br& 2. 设置断点进行分析
&/p&&p&方法1 每改一次调试代码 都要运行整个代码, 不灵活,操作也繁琐。 &br&方法2 中进入和退出 Debug console 比较麻烦,Debug console 本身也不太好用(没有自动补全功能)
&br&&br&&code&boxx.g&/code& 提供了一种新的方式,通过 &code&g.name&/code& 可以将变量传到当前的 Python 交互终端 :&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-b43a1cc5e0e024edb0ad02ec96430d26_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic3.zhimg.com/50/v2-b43a1cc5e0e024edb0ad02ec96430d26_r.jpg&&&/figure&&p&变量传到 Python 终端后,就能对变量进行全面分析了,比如 使用 &code&loga&/code&,&code&tree&/code& 来分析&/p&&p&&b&Note:&/b& &br& * &code&gg&/code& 的意思是 &code&to Global and log&/code&, 和 &code&g&/code& 的用法一样, 但 &code&gg&/code& 会在传输的同时打印变量. &br& * 需要注意, 如果之前在终端中存在一样的变量名称,则变量的值会被新值覆盖.&/p&&p&&br&&/p&&p&
在函数内运行 &code&g()&/code&,便会将函数 (或 module) 内的所有变量一同传到当前的 Python 交互终端 :&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-b7aefe0a969c2ed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic2.zhimg.com/50/v2-b7aefe0a969c2ed_r.jpg&&&/figure&&p& 这样 任何错误都可以在终端中复现和分析了。当然, 注意不要覆盖重要的全局变量。&/p&&p&&b&Note:&/b& 在函数内 &code&import boxx.g&/code& 和 &code&g()&/code& 有相同的效果&/p&&p&&br&&/p&&p&
在实际开发调试中, 函数或 module 内可能含有非常多的变量 但我们只对几个变量感兴趣,
&code&with p&/code&, &code&with g&/code&, &code&with gg&/code& 可以使操作只作用于几个感兴趣的变量,只需把变量放入 &code&with&/code& 结构中即可 :
&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-db58af5b98ca_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic1.zhimg.com/50/v2-db58af5b98ca_r.jpg&&&/figure&&p&&b&Note:&/b&&br&
* &code&with p&/code&, &code&with g&/code&, &code&with gg&/code& 只作用于在 &code&with&/code& 结构中进行赋值操作的变量. &br&
* 如果变量名在 &code&with&/code& 前存在于 &code&locals()&/code& 中, 同时 &code&id(变量)&/code& 没有变化 , &code&with&/code& 结构可能无法检测到该变量.&/p&&p&&br&&/p&&p&总结一下,&code&boxx&/code& 的调试工具可以汇总为一个表&/p&&p&&b&&code&boxx&/code& 调试工具矩阵&/b& &/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-64b0a704e2d14ff0aae7db1f0236aeb4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1168& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&1168& data-original=&https://pic2.zhimg.com/50/v2-64b0a704e2d14ff0aae7db1f0236aeb4_r.jpg&&&/figure&&p&&b&Note:&/b& &br&
* &b&transport&/b& 操作是指 把函数内的变量传送到 Python interactive console 中&br&
* &b&&code&locals()&/code&&/b& 指 作用于函数或 module 内的所有变量&br&
* &b&&code&locals()&/code&_2&/b&: 当 &code&boxx&/code& 未导入时, &code&import boxx.{操作}&/code& 能等价于 &code&from boxx import {操作};{操作}()&/code&&/p&&p&&br&&/p&&p&
在学习新框架或适配大佬代码时,经常会使用 &code&print(x)&/code&, &code&dir(x)&/code&, &code&help(x)&/code&, &code&type(x)&/code& 来了解某个变量的各方面的信息 (变量可能是 值/function/class/module 等),于是我写了一个 &code&boox.what(x)&/code& 来全面了解&what is &code&x&/code&?&: &/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-76af66b95d006bb74d03c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&807& data-rawheight=&926& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&https://pic4.zhimg.com/50/v2-76af66b95d006bb74d03c_r.jpg&&&/figure&&p&&b&Note:&/b& &code&what(x)&/code& 通过打印 &code&x&/code& 自己及&code&x&/code& 的 &b&文档&/b&, &b&父类继承关系&/b&, &b&内部结构&/b& 及 &b&所有属性&/b& 来全面了解 &code&x&/code&. 是 &code&help(x)&/code& 的补充.&/p&&hr&&p&说了这么多调试 再说一下性能调优&/p&&p& 测试代码性能时,计时很常用, 我写了一个方便的计时工具&code&boxx.timeit&/code&
将想要计时的代码块放入 &code&with timeit():&/code& 中就可以计时了: &/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-912bfeffc2363_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&485& data-rawheight=&223& class=&origin_image zh-lightbox-thumb& width=&485& data-original=&https://pic2.zhimg.com/50/v2-912bfeffc2363_r.jpg&&&/figure&&p&
此外 &code&&a href=&//link.zhihu.com/?target=https%3A//jiffyclub.github.io/snakeviz/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SnakeViz&/a&&/code& 是一个很棒的性能分析工具,&code&SnakeViz&/code& 能够通过 &code&cProfile&/code& 文件,来统计代码的函数调用情况,并可视化出代码的 &a href=&//link.zhihu.com/?target=http%3A//www.ruanyifeng.com/blog/2017/09/flame-graph.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&火焰图&/a&。但是, 先生成 &code&cProfile&/code& 文件,再运行 &code&SnakeViz&/code& 的流程非常繁琐,我把这一套操作封装成了 &code&boxx.performance&/code& 来简化流程:
&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-5a414a665c378cdf447131_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&964& data-rawheight=&884& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&https://pic3.zhimg.com/50/v2-5a414a665c378cdf447131_r.jpg&&&/figure&&p&&b&Note:&/b& &code&performance&/code& 也支持字符串形式的 Python 代码.&/p&&p&&br&&/p&&p&
如今的数据集都数百上千 GB,在数据清洗和预处理时 要写多进程的 Python 代码 来榨干 CPU 的每一个线程获得加速。但我觉得 Python 多进程的几个范式都不够方便,我参照 &code&map&/code& 的思想和用法把多进程操作封装成 &code&boxx.mapmp&/code& 函数(意思是&Map for Mulit Processing&). &code&mapmp&/code& 和 &code&map&/code& 有一样的用法, 只需把 &code&map&/code& 替换为 &code&mapmp&/code& 即可获得多进程加速:
&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-a8a16f41d14af04b8aaed7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&470& data-rawheight=&499& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic3.zhimg.com/50/v2-a8a16f41d14af04b8aaed7_r.jpg&&&/figure&&p&&b&Note:&/b& &br&
* &code&mapmp&/code& 的 &b&pool&/b& 参数来控制进程数目,默认为 CPU 线程数目.&br&
* 在多进程程序中, 打印进度往往非常麻烦. &code&mapmp&/code& 的 &b&printfreq&/b& 参数能解决这个问题.&br&
* 如同 &code&map&/code& 一样,&code&mapmp&/code& 支持将多个参数输入函数,如&code&mapmp(add, list_1, list_2)&/code&&br&
* 在 Python 中,多进程代码最好在 &code&__name__ == '__main__&&/code' 环境中运行.&br&
* 如果加速 &code&numpy&/code& 程序,请注意 &a href=&https://www.zhihu.com/question//answer/h%3Ccode%3Ettps:%3C/code%3E//blog.skyaid-service.org//numpy_performance/& class=&internal&&在 MKL 版本的 numpy 中,多进程会更慢&/a&, 可以运行 &code&boxx.testNumpyMultiprocessing()&/code& 来测试当前环境对多进程 &code&numpy&/code& 的友好程度&/p&&p&&br&&/p&&p&
当要下载 url 形式的数据集或网络爬取图片时,多线程编程对这类高IO操作会很有用。&code&boxx&/code& 还有个多线程版本的 &code&map&/code& -- &code&mapmt&/code& (意思是 &Map for Mulit Threading&)。&code&mapmt&/code& 用法和 &code&mapmp&/code& 一样, 但没有多进程的诸多限制。&/p&&hr&&p&再分享一下我自己在写视觉代码的感受吧&/p&&p&由于我自己&br& 1. 写 CV 代码离不开强大的 &a href=&//link.zhihu.com/?target=https%3A//ipython.org/ipython-doc/3/interactive/qtconsole.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Qt console for IPython&/a&&br& 2. 受不了远程编辑对网络的依赖和延迟&/p&&p&
所以 一直用 Anaconda 自带的 Spyder 作为 Python 开发的 IDE. Spyder 虽然不够强大,但自带的 Qt-IPython, 配合自己写的工具,调试起来还是比较方便, 顺手。所以, 我开发的工具都尽可能地直接, 简洁,上面介绍的大部分工具都支持 &code&func-x&/code& 来代替 &code&func(x)&/code& 以方便调试时调用。甚至,我还写了一些字符串处理工具,直接在IPython 内使用, 以弥补 Spyder 作为 IDE 的不足。 &/p&&p&
此外,我的工作流一般是 先在本地开发调试, 用 &code&boxx.sysi&/code& 检测运行环境来自动切换运行参数, 本地开发调试 OK 了, 用 &code&rsync&/code& 命令 只传改过的 .py 文件到服务器 再来 train。虽然这样传代码比较麻烦, 但开发, 调试起来会方便很多。&/p&&p&
之前在实验室一直是本地 GPU 环境调试 比较方便。实习后, 旷厂不提供本地 GPU。我主力是 PyTorch, 为了方便调试 我写了个 &code&boxx.ylth&/code& 包,如果检测到没有 CUDA 环境,&code&boxx.ylth&/code& 会强行使 &code&.cuda()&/code& 和大部分 GPU 操作无效。只要在代码开头 &code&import boxx.ylth&/code& 大多数只基于 GPU 的 torch 代码, 可以不经更改 直接在 CPU 上运行和调试。(这操作太暴力 请慎用)&/p&&hr&&p&GitHub 主页:&a href=&//link.zhihu.com/?target=https%3A//github.com/DIYer22/boxx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/DIYer22/boxx&/span&&span class=&invisible&&&/span&&/a&&/p&&p&安装:&code&pip install git+https://github.com/DIYer22/boxx&/code& (&a href=&//link.zhihu.com/?target=https%3A//github.com/DIYer22/boxx/blob/master/README_zh_cn.md%23%25E4%25BA%258C-%25E5%25AE%%25A3%2585& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&说明&/a&)&/p&&p&教程:&b&&code&boxx&/code&&/b& 的教程是一个可执行的在线 Notebook。 也就是说,无需下载和运行任何代码,只需浏览器点击下面的链接,就可以在线执行 Notebook 教程中的代码块。&br&&b&&a href=&//link.zhihu.com/?target=https%3A//mybinder.org/v2/gh/DIYer22/boxx-ipynb/master%3Ffilepath%3Dtutorial_for_boxx.ipynb& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&=& 可直接执行的在线教程&/a&&/b&&/p&&p&&br&&/p&&p&最后 特别感谢徐晓栋、吴国栋、

我要回帖

更多关于 cell转数组 的文章

 

随机推荐