This is the most easy trek, the most touristy one. We didn't have much equipment, and we just dropped our bags and kept going through the storm,"(译注:这条路线向来很简单,很游客化,我们并没有携带太多装备,风暴之下,我们扔了背包挣扎前行)(信息来源: http://theguardian.com)
To walk through life in a comfortable way is still not my goal. This is why I want to try to climb Annapurna a third time. I would like to implement my dreams and visions into reality. Annapurna is one of them.(译注:安稳度过此生并不是我的目标,这也是我为什么第三次尝试安纳普尔纳;我想将我所有的梦想都变成现实,安纳普尔纳攀登正是其中之一。)
Choiniere J N, Xu X, Clark J M et al. 2010. A basal alvarezsauroid theropod from the early Late Jurassic of Xinjiang, China. Science, 327(5965): 571-574
Gauthier J 1986. Saurischian monophyly and the origin of birds. Memoirs of the California Academy of Sciences, 8: 1-55
Heilmann G 1927. The origin of birds. New York: Bover Publications, INC.
Hu D, Hou L, Zhang L et al. 2009. A pre-Archaeopteryx troodontid theropod from China with long feathers on the metatarsus. Nature, 461(7264): 640-643
Huxley T H 1868. On the animals which are most nearly intermediate between birds and reptiles. Annals and Magazine of Natural History. 4th, 2: 66–75
Ji Q, Ji S A 1996. On the discovery of the earliest fossil bird in China (Sinosauropteryx gen. nov.) and the origin of birds. . Chinese Geology, 233: 30-33
Ostrom J H 1973. The ancestry of birds. Nature, 242: 136–136
Xu X, Clark J M, Forster C A et al. 2006. A basal tyrannosauroid dinosaur from the Late Jurassic of China. Nature, 439(7077): 715-718
Xu X, Zhou Z, Dudley R et al. 2014. An integrative approach to understanding bird origins.Science, 346(6215): 1253293
Xu X, Zhou Z, Wang X et al. 2003. Four-winged dinosaurs from China. Nature, 421(6921): 335-340
Zhou Z 2004. The origin and early evolution of birds: discoveries, disputes, and perspectives from fossil evidence. Naturwissenschaften, 91(10): 455-471
References / 参考资料: [1] APA.org. Breakups aren't all bad: Coping strategies to promote positive outcomes. [2] Battaglia, D. M., Richard, F. D., Datteri, D. L., & Lord, C. G. (1998). Breaking up is (relatively) easy to do: A script for the dissolution of close relationships. Journal of Social and Personal Relationships, 15(6), 829-845. [3] Kross, E., Berman, M. G., Mischel, W., Smith, E. E., & Wager, T. D. (2011). Social rejection shares somatosensory representations with physical pain. Proceedings of the National Academy of Sciences, 108(15), 6270-6275. [4] Fisher, H. E., Brown, L. L., Aron, A., Strong, G., & Mashek, D. (2010). Reward, addiction, and emotion regulation systems associated with rejection in love. Journal of neurophysiology, 104(1), 51-60. [5] Wiki How: How to benefit from a breakup? [6] Lauren Howe on TheAtlantic.com. Why Some People Take Breakups Harder Than Others? (2016) [7] Alexandra Nicole Torres on ThoughtCatalog.com. The Psychology Of Letting Go: 11 Tips To Help You Through Your Breakup (2017). [8] Denise Baptiste on BoldSky.com. 12 Awesome Benefits of a Breakup (2014).
记得以前 Google 使用的在线笔试题,大多是偏重算法的题目,可以看做是简化版的 ACM。这的确是一种设计开卷笔试题的思路,因为很多经典算法问题,都可以被包装到一个很具体的场景中。学生考试时,即便用搜索引擎去查找这个具体场景,只要以前没考过类似的题目,就很难搜到正确答案。最起码,学生需要有一定的算法知识,能够将遇到的问题抽象成特定的算法模式,然后再去搜索对应的解决方案。
但是,回到 DeeCamp,如果按照简化版 ACM 的思路,就不能满足要求了。因为 DeeCamp 希望招聘的学生标准与 Google 要招聘的学生标准有很大不同。Google 是一家公司,想招进来的是最聪明的、编程能力和算法能力最强的学生。DeeCamp 是一个训练营,本来就是以培训为目的,当然不能把入门考试的要求设得太高。
也就是说,我们创新工场 AI 工程院这个命题小组,要设计的是一套 AI 入门级的开卷笔试题,无论是数学、编程、算法还是 AI,都只适合考察最基本的知识技能,而不适合强调题目的专深。同时,这套题还需要在题目的趣味性、灵活度等方面下功夫,最好有一些平常很少见到的新场景,以考察同学们在解决新问题时的实战技能。更重要的,这些题目需要在学生开卷答题的情况下,还能有足够的区分度。
其实,TensorFlow 白皮书里,"5.1 Common Subexpression Elimination"就是关于计算图优化的一个举例说明。有关符号执行对于计算图优化的作用,MXnet 文档里有一篇特别浅显的讲解:Programming Models for Deep Learning。其中对流行的框架做了一个归类:"Examples of imperative style deep learning libraries include Torch, Chainer and Minerva. While the examples of symbolic style deep learning libraries include Theano, CGT and Tensorflow."
在正常配置的计算机里,这个题目里的代码是很难跑出结果的。这也是为什么题目描述里会强调"假设可以不考虑计算机运行资源(如内存)的限制"的原因。不相信这一点的同学当然会去尝试运行这段代码,但结果么,多半是内存异常,或者持续运行无响应。最糟糕的,电脑甚至会直接崩溃。实际考试时,同学报告了好几个崩溃案例;我猜,主要是在 Windows 系统中吧(笑脸)。
所以,遇到这种题是不能硬来的。做题的学生还是要回过头来,读代码,理解代码的含义。
这个代码的函数名sieve其实暗示了代码的功用,Sieve of Eratosthenes,这是用筛法计算质数个数的一个经典方法。当然,不知道筛法这个词也不重要,重要的是要从代码逻辑里,读懂最关键的几行其实是在把所有非质数都筛掉。就算读起来费劲,那么,至少能想到,把最后一行改成比较小的输入数字,比如 10,比如 100,比如 1000,运行一下试试吧。