有时一些粉丝会给我发邮件,想让我在数据科学方面给出针对性的指导,所以我写了这个数据科学建议专栏。若你在数据科学方面存在困惑,请发邮件至 rachel@fast。ai,但请简洁清楚地提出疑问。这个建议专栏的前几部分包括:如何组建数据科学与工程团队(how should you structure your data science and engineering teams),以及给对深度学习感兴趣的学生提出建议(advice to a student interested in deep learning)。
这个问题中,我整合了几个编程水平不高的人发来邮件,他们住在湾区之外,并有意发展成为数据科学家。问题如下:
Q1:我是一家大银行的金融分析师,目前正从软件工程师向技术工程师转型,并且对机器学习感兴趣,我有幸拜读了你的 The Diversity Crisis in AI 这篇文章。请问我是否需要读个人工智能硕士或博士学位?
Q2:这是我攻读理论数学博士学位的第六年,不久将会毕业。我对数据科学真感兴趣,也想知道自己是不是想在这个领域里找份工作,请问我能或者我该如何准备,才能具备公司所需求的技能呢?目前我正在读书,想找一些我能做的小项目。您能告诉我在哪里能找到招聘者感兴趣的小项目吗?
Q3:我拥有 STEM 的研究生学位,曾既是研究员又是教师,目前处于职业过渡期,寻找可能会同时需要分析技术和教学能力的职业。我更加擅长科学方面,而非软件方面。如今的互联网能够颠覆我们的认知能够将孤立的信息进行共享。请问你能推荐一些关于教师用得起的编程课程与 workshops 吗?还有,你认为什么编码语言或技能最有助于重点关注发展呢?
答:我认为自己的背景很「不传统」。乍看之下,我的经历似乎是十分标准的数据科学教育:高中学习了两年 C ++,大学开始学习计算机科学(数学专业)并获得了与概率相关的博士学位,而后成为了一名「宽客」。但我的计算机科学课程大多是理论的,我的数学论文则完全是理论的(一点计算都没有!);这些年来,我使用 C++ 越来越少,而使用 MATLAB 愈加频繁(我这是怎么了?!不知为什么,我甚至发现自己使用 MATLAB 编写 web scrapers……)。我的大学教育教会了我如何证明一个算法是 NP 完成的或是图灵可计算的,但在测试、版本控制、网络应用程序与网络如何运作方面完全空白。我任职的公司主要使用在技术行业不被使用的专有软件/语言。
在能源交易公司做过两年「宽客」后,我意识到我最喜欢的部分是编程和处理数据。我对大公司官僚制度,以及使用过时的专有软件工具这样的现状很不满意;我想有所改变,并决定参加 2012 年 2 月的数据科学会议 Strata,以对湾区的数据科学有更多了解。我深深地陷进去了——对数据的巨大热情、最令我兴奋的工具(以及我以前从未听说过的其他工具)、那些从学术界或成熟的公司中抽身而退,在初创公司为理想而奋斗的人的故事……它是如此独树一帜,与我曾习惯的一切截然不同。Strata 之后,我在旧金山待了几天,到初创公司面试,并与一些搬到 SF 的浅交一同喝咖啡,他们每个人都对我很有帮助,并对四桶咖啡馆非常痴狂(几乎每个人都建议在那里!)。
我曾很有名,但实际上转换到科技领域让我完全迷失了……当第一次和技术人员进行如此多的对话和采访时,我时常觉得他们在讲另一种语言。我在德克萨斯长大,以不知科技领域工作为何物的状态,在宾夕法尼亚和北卡罗来纳度过了我的 20 多岁。我从未修过统计课程,只是觉得概率便是测量空间的真实分析;我也并不了解新创公司和科技公司如何工作。第一次到初创公司面试时,一位面试官夸耀了公司在开始快速扩张/招聘之前如何短暂地实现盈利。我震惊地答道「你的意思是这家公司不盈利!!」(是的,我实际上以震惊的语调大声地喊了出来),记忆中场面一度陷入尴尬。在另一次面试中,我对「印象(impression)」(展示网络广告时)的概念感到困惑,仅仅理解它的逻辑就花了我一段时间。
我在这里已经五年了,有些事是当我开始转变职业时理应知道的:我是白人,是美国公民,在研究生学校获得了大笔奖学金,没有学生债务,并且我是单身,没有后代。而没有这些特权的人在决定转变职业时,道路将更加艰难。尽管我的轶事令人将信将疑,但我还是希望其中一些建议能对你有所帮助。
做好走向数据科学的准备
1.最重要的是:无论你想要在目前的工作中学到什么,都要找到方法。找到一个涉及更多编码/数据分析且对您的雇主有帮助的项目。尝试使任何无聊的任务自动化。即使这个过程需要 5 倍的时间(即使这样的任务你只做一次!),但你正是通过这样来学习。
2.分析您拥有的任何数据:比如消费前的研究数据(即决定要购买哪种微波炉),个人健身追踪器的数据,烹饪食谱的营养数据,为孩子调查的学前教育数据。把它变成一个小型的数据分析项目,并写到博客中。例如如果你是研究生,你可以分析所教学生的年级数据。
3. 学习最重要的数据科学软件工具:Python's data science stack(pandas / numpy / scipy)是最有用的技术(阅读本书!),紧随其后的是 SQL。在学习其他语言之前我会专注于学习 Python 和 SQL。Python 被广泛使用且非常灵活。如果你决定参与到更多的软件开发工作,或者全面进入机器学习,你会有优势。
4. 使用 Kaggle。做教程,参加论坛,参加比赛(不要担心你处于什么水平- 只是专注于每天做得更好一点)。这是学习实用机器技能的最好方法。
5.搜索您所在地区的数据科学和技术会议。随着数据科学在过去几年的激增,如今在全球有各种会议。例如,Google 最近在加利福尼亚州山景城举办了一次 TensorFlow Dev 峰会,但有全世界观众一起观看直播(包括尼日利亚的阿布贾,印度的哥印拜陀和摩洛哥的拉巴特)。
在线课程
在线课程是一个了不起的资源。你可以在家里舒适地跟随世界上最好的数据科学家学习。通常作业是学习最多的地方,所以不要跳过它们!这里有几个我最喜欢的课程:
Andrew Ng 的经典机器学习公开课(虽然没有在 Octave / MATLAB 上花太多时间,但他把算法解释地非常完美),或许用 Python 完成这项工作更好
快速实习深度学习课程。透露:我协助开设了这门课程,我们得到了许多学生的积极反馈。其中唯一的先决条件是一年的编码经验。
Udacity 的数据科学系列。
Udacity 的 Web 开发课程。如果想成为一个数据科学家在技术上不需要了解这些,但成为一个更好的软件开发人员可以使你成为一个更好的数据科学家,了解如何构建自己的网络应用程序非常有用。
上述强调的问题之一是,在线可用的信息、教程和课程的数量或许巨大的,最大的风险之一是不能持之以恒,不能完成或坚持足够长的时间来学习它。重要的是找到一个「足够好」的课程或项目,然后坚持下去。找到或组建一个见面团队来一起学完在线课程或许对解决这个问题有帮助。
在线课程对获取知识非常有用(做完作业非常重要,这是你学习的方式)。不过,我还没发现获得证书有啥好处。(虽然我知道这是一个新增长的领域)。因为之前雇佣数据科学家时,我面试过很多求职者,而且自己也有这方面的求职经验,都是经验之谈。
新闻来源
推特是一个寻找感兴趣文章和机会的有用渠道。例如,我的合作者 Jeremy Howard 提供了超过 1,000 个他最喜欢的机器学习论文和博客帖子的链接(注意:您需要登录推特才能阅读此链接)。虽然一个捷径是在链接中寻找喜欢推文的作者,直接关注他们,但是,你还是需要一些时间来确定去跟随谁(跟进、终止和搜索可能会一直发生)。请在感兴趣的公司中查找数据科学家。查找您使用或感兴趣的库和工具的作者。当您找到喜欢的教程或博客帖子时,查找作者。然后查找这些人转发了谁。如果你还不了解推特,我认为把推特作为一种收藏链接的渠道可能会对你有帮助。我会在推特上转发可能会在几个月内参考用到的文章或教程。
The machine learning subreddit 是近期新闻的一个很大来源。刚开始你可能会发现很多没有看过,但在几个月后,你认出的会越来越多。
注册时事通讯(例如 Import AI 简报和 WildML 新闻)非常有帮助
搬到到 Bay Area
尽所有可能搬到到 Bay Area!我意识到,这对许多人是不可能的(特别是如果你有孩子或者有签证/合法居留的问题)。这里有非常多的数据科学(data science)方面的线下见面会(meet-ups),会议和研讨会。还有一个由其他聪明,有抱负,渴望学习的数据科学家组成的社区。我甚至弄不清在远程学习中哪些东西对我是最有用的。虽然我来这里之前已经开始自学机器学习(machine learning),但是,来到湾区还是快速地提升了我的学习进程。
对我来说,在旧金山的第一年,这段时间学习非常紧张:我参加了非常多的见面会(meetup),完成了几个在线学习课程,参加了许多研讨会和会议,从数据公司的工作中学到了很多,最重要的是我遇到许多可以请教问题的人。我完全低估了与那些正在构建我最感兴趣工具和技术的人进行定期交流是多么令人惊奇的一件事。我周围是那些热爱学习并正在推动那些可能成为现实的尖端技术的人。我前面提到的 TensorFlow Dev Summit?非常幸运,我可以到会议现场,而且最赞的是在那里遇到的人。
搬到湾区的一个好办法是找一份非理想职业(not-your-dream-job); 比如,找一个地方,周围都是你可以从他们那里学到东西的人,即使这份工作你并不感兴趣。2012 年初,我决定转行,当时,Insight 以及其他数据科学训练营还不存在。我申请了几个「理想工作」,然后被拒。事后看来,这是因为我缺乏一些必要的技能,不知道如何正确地推销自己,求职搜索也做得比较简单。2012 年 3 月,一家让我很兴奋的创业公司的分析师岗位录用了我,这个岗位给了我希望,我和公司达成非正式协议:以后能够转到正式的数据科学岗位上。总的来说,这是一个不错的选择。它让我很快地搬到了旧金山,我所在的公司在很多方面做的非常棒(有一个阅读小组,研读 Bishop 的 Pattern Recognition,还参加了一次为与 Trevor Hastie 和 Jerome Friedman 见面的实地考察旅行),我的经理支持我做更多超出我职务范围的工程密集型(engineering-intensive)项目。一年之后,我得到了我的梦想工作:在一家有着吸引人的数据集创业公司担任数据科学家/软件工程师。
该领域还有一些好的训练营,它们通常提供机会让你与有趣的人和数据科学领域的公司联系。
Insight Data Science 是一个 7 周的,免费的,高强度的训练营,专门针对 STEM 领域的博士毕业生。潜在的缺点:因为只有 7 周,其中的一部分人专注人际社交和求职,我认为这主要是为了那些已经掌握了他们需要的技能的人。并且,竞争非常激烈。
数据科学训练营,比如 Galvanize 或者 Metis。优点:这些是 12 周的深入体验,它们提供了系统安排和人际交往的机会。缺点:非常昂贵。一些需要考虑的因素:你的背景距离你所需的有多远?也就是说,如果你只有很少的编程经历,你可能需要做一些这样的事情,但是,如果你正在从一个密切相关的领域过渡,那就没必要。另外,你有独立自主学习的动力吗?如果你很难做到这一点,训练营的负责制和系统的安排可能会帮到你。
在决定是否参加训练营时有许多因素。其中最主要的是你需要多少组织性和外部的动力。在网上有许多很好的可用资源。你有多少的纪律性?请注意,接受你所需要的最好的学习非常重要。我发现在线课程的激励并且布置作业确实对我有用,并且我曾经因为其比完成一个独立的小项目更容易而感到尴尬。现在,我已经完全接受了它并尝试做好。其他要问的问题:你需要学习多少,你自己能够学地多快?如果学得很快,训练营可能会加速你学习的进程。我认为训练营的另一个闪光点在于,教你如何将一些不同的工具和技术结合在一起。
你也可以在这没有工作。这需要一些东西,包括:充裕的储蓄,美国的合法居留身份,没有孩子,所以对很多人来说这不能是一个选择。然而,如果你能够做到这些(即美国永久居民,有足够的资金),这会是一个很好的选择。在技术方面的求职会是全职的工作,因为数学科学和工程采访(engineering interviews)需要大量的学习来准备,并且需要短时的回家完成的挑战(take-home challenges)。事后看来,当我做全职工作和求职时,我经常会做出仓促的求职,并且这导致我做出一些次优的决定。你一定会找到很多方法充实你的时间,学习采访,为小项目码代码,参加研讨会和研究组。另外,当我转行到技术的时候,让我惊讶的两件事情是,人们更换工作的频率,以及在工作期间做学习新事物和旅行花费时间是多么正常(因此,没有理由担心你的简历,只要你在那段时间中对你正在学习的东西交上了一份满意的答卷)。
高能预警:5 年前,当我准备搬到湾区时,我并没意识到这个地方的科技领域有多性别歧视、种族主义、年龄歧视、道德败坏(尽管它宏伟地声称要创造一个更美好的未来)。几年后,我变得非常灰心,以至于开始考虑完全离开了科技行业。背叛,无情和残忍的故事比比皆是:比如,我亲近的人被他的同事利用其家庭紧急医疗事故牟利,我的许多朋友和亲人也有类似可怕经历。然而,这个充满满怀激情、让人着迷的人、能让人接触到前沿技术的社区还是让我留了下来,而且给我选择的机会,我还是会选择再次来这里。我现在感觉非常幸运能和 fast。ai 一起研究那些我认为最有趣也会产生最大影响力的问题。
对其他问题的回答
我需要硕士或者博士的学历才能从事人工智能?
我坚信,答案是否定的,并且我正在努力使它变得更像一个现实,而不是已经是。事实上,在处理实际业务相关难题时,这些博士并不是那么有优势,因为这不是他们训练的目的。学术界专注于推动该领域的理论界限,背后推动力就是哪些研究可以发在顶级期刊上(这与创造一个可行的业务非常不同!)。阅读更多关于 fast。ai 的教育理念点击这里(http://www。fast。ai/2016/10/08/teaching-philosophy/),查看我们的免费在线课程 Practical Deep Learning for Coders。
学习 Python 之后,我应该学习 Ruby 吗?
对一个有抱负的数据科学家来说,没有理由学习 Ruby。它与 Python 类似,并且不会教你新的概念(学习函数式语言或低级语言的方式),也算不上一个好的数据科学生态系统(data science eco-system)。
我在哪里可以找到引起雇主兴趣的小项目?
我认为可以在网上找到随机数据集,但是,我猜雇主一定想看我是如何处理一个真实的情况?不要觉得你的小项目需要是完全独特的,或者需要涉及一个独特或不寻常的数据集。使用你从 Kaggle 获得的数据集就不错。如果你的项目没有取得新成果,不要担心。当创建小项目,博文,或者教程时,将你的受众视为落后于你的人,他们是你有优势可以帮助的人。你可能担心某个领域的资深人员不会对某个项目或者博文感兴趣,或者其他人也许已经做过类似的事情。没关系!这只是为了让你找到工作。