TowardsDataScience 博客中文翻译 2016~2018(二百零五)
音乐定位:品牌的新 Eldorado?
虽然关于如何收集和使用私人数据的争议正在激烈进行,虽然《GDPR》的应用正在临近,但替代的数据管理方法非常受欢迎。充分理解这些问题的新演员正在广告业涌现,并带来创新的解决方案来满足广告商的需求。他们的方法与通常使用的方法截然不同,本质上是基于数据科学,分析从未被利用过的数据。
“原始数据”,有史以来最大的黑金矿床,却几乎无人问津。
今天,广告市场是围绕用户的个人数据组织的。大多数情况下,这些数据是通过数据交换平台收集和出售的,在这些平台上,人们可以找到关于特定用户的几乎任何类型的信息,或者更具体地说,关于广告 ID 的信息(IDFA、AAID、cookies 等等)。人们可以访问用户的所有个人数据,如年龄、性别、婚姻状况、购买力等。鉴于数据量巨大,获取这些信息的成本已经低得离谱:每 1000 条信息的购买价格从 0.10 美元到 5 美元不等,换句话说,每条信息从 0.0001 美元到 0.05 美元不等。此外,这些平台中的绝大多数明显缺乏透明度,这使得追踪这些数据的来源成为不可能,并引发了隐私和用户同意的担忧:这些数据是如何收集的?用户同意了吗?
一方面,2018 年 5 月 GDPR 的引入应有助于清理这些不可接受的做法,并规范数据的收集、处理和交易。另一方面,苹果应用商店已经在优步的最新滥用或者 Teemo 丑闻之后做出了回应。例如,考虑到即将发布的 iOS 11,苹果更新了指导方针。根据第5 . 1 . 1 和 5.1.2 条,公司将不再被授权收集数据,除非该应用的主要功能之一的性能需要。此外,禁止将这些数据传输给第三方或广告公司。甚至关于网络上的广告定位,苹果已经更新了 Safari,使得未经用户同意几乎不可能通过 cookies 进行跟踪。
“一流数据”的终结?
有了这些限制,品牌如何成功地锁定他们的受众?我们需要立即为这一重大变化做好准备,并开始寻找符合法规的新解决方案。
还有另一种不太为人所知的数据:我喜欢称之为“原始数据”。这类数据就像石油一样:如果不首先处理和提炼,就完全无法使用。我在这里指的是关于一个人日常应用使用的数据,一旦经过分析,就可以非常准确地描述用户的行为和偏好:例如,每天走的步数,安装的应用数量,甚至每天听的音乐类型。
这些数据是由用户生成的,数量巨大,但实际上毫无用处。数据科学提供了新的视角,使得提取用户的行为和习惯成为可能,以便实际绘制他们的品味、偏好和消费模式。
让我们以 SportHeroes 为例,这是一家欧洲初创公司,开发促进和鼓励体育活动的应用程序。这家公司围绕用户的体育活动数据开发了一项业务:他们每天走多少步?他们步行或跑步的距离是多少?他们一周跑几次?多久了?这些信息一旦经过处理,SportHeroes 就能极其精确地理解用户的运动行为。这实际上是耐克(Nike)或阿迪达斯(Adidas)等运动品牌的一个千载难逢的机会,它们可以通过在 SportHeroes network 上开展广告活动,接触到这些充满潜在买家的受众。这种定位不是基于人们是否宣称喜欢体育运动(社交网络上的声明性数据),而是基于人们实际从事体育运动的方式(SportHeroes 跟踪的行为数据),这显然是一个对体育品牌更强大、更相关的信号。
另一个例子——也许是最引人注目的——是音乐。你不认为你喜欢的音乐反映了你是谁吗?你不是倾向于根据一个人听的音乐风格马上对他/她形成看法吗?
音乐定位:一场革命。
几十年来,来自世界各地的研究人员一直试图了解音乐对人类的影响。新发现不断涌现:每个人都知道音乐的治疗作用。事实上,俄勒冈大学最近展示了其在阿尔茨海默病治疗中的有效性。来自宾夕法尼亚州乌尔西努斯学院的南希·贝克尔和她的同事强调了音乐在体力活动中的掺杂剂效应,表现惊人地提高了 30%。最后但并非最不重要的一点是,事实证明,音乐在我们的购买行为中扮演着重要角色,甚至可以显著增加商店销售额。美国 Hollister 公司充分理解音乐的这一作用:该服装品牌在其所有商店中将其作为一种强有力的营销工具,以优化顾客流量和促进销售。
但该领域的最新进展之一来自大数据。从今以后,大数据使得通过音乐解读用户的行为和习惯成为可能。
如果没有音乐产业的数字化和音乐流媒体的民主化,这一突破是不可能实现的。由于后者,现在有可能收集数量惊人的收听数据,使品牌能够分析数百万人每天是如何与音乐互动的。
某些流媒体巨头已经开始注意到,他们用户的音乐行为可能是一个额外的、甚至是重要的收入来源。如今,Spotify 销售基于播放列表的定向活动,该公司在短短 3 年内成功创造了近 3 亿美元的广告收入(来源:全球音乐商业)。这完美地说明了这些基于“原始数据”的新目标工具的效率及其几乎未开发的潜力。
不仅流媒体服务对音乐数据感兴趣,广告公司也是如此。哈瓦斯公关北美公司首席执行官 Maria Salzman 甚至向《卫报》 : “在未来十年内,播放列表将成为有史以来最强大的消费者行为预测工具”。然而,我们才刚刚开始探索原始数据的潜力,今天,Spotify 提供了一个简单的目标,仅限于其 7000 万免费客户的受众。
这场代表着通过音乐进行行为定位的革命,远远超出了俘虏听众的货币化,而是在音乐流媒体和许可活动之外建立了一个额外的收入流。它代表了一种全新的数字营销方式,更加感性和不断变化,让品牌真正了解自己与社区的亲和力。这种方法利用了与最普遍的行为之一——听音乐——相关的不断更新的大量数据。
部署这种革命性的方法是 MWM 的雄心和专业知识的核心。短短几年间,全球八大移动音乐应用发行商之一、下载量超过 1 亿次的 MWM 已经成为“音乐数据科学”的先驱。我们积累的数十亿数据使我们能够通过音乐对任何类型的行为进行深入分析。
例如,我们最近的研究表明,一个人对电子游戏的兴趣与你正在听的音乐风格密切相关。通过对 15 万用户进行抽样调查,并通过算法分析他们的行为,我们可以断言,听摇滚和另类摇滚(声音花园乐队、杀手、法兰兹·费迪南、帕帕·罗奇和黑键等乐队)的人对电子游戏感兴趣的可能性是听流行音乐的人(Lady Gaga、玛丽亚·凯莉、卢安、席琳·狄翁、鲍勃·辛克莱等艺术家)的三倍。更一般地说,只要知道他们的音乐习惯,我们就能够明确地识别出一群有超过 95%的机会成为视频游戏爱好者的用户。
这只是一个例子。我们的数据科学家每天都在构建新的模型,使我们能够探索音乐数据分析的非凡可能性。在我们的“MWM 网络”平台内,品牌现在可以从这些发展中受益,以便以一种新的和创新的方式改变他们的混合媒体。
结论
由于智能手机的开发和“原始数据”的出现,广告定位领域正在发生一场革命。它为品牌提供了一个全新的平台,同时加入了以人为本的营销运动,并尊重即将到来的新法规…
音乐到我的耳朵:一种无监督的用户特定歌曲推荐方法
作者:Sameer Bibikar,Aimun Khan,Nimay Kumar,Jason Nguyen,Shrey Sachdeva
Photo by Jefferson Santos on Unsplash
摘要
各种音乐流服务所采用的当前音乐推荐算法是完全相关的,并且在向用户推荐新歌时不考虑歌曲本身的音乐特征。我们的团队希望开发一种算法,在推荐新歌时,它会强调用户喜欢听的音乐质量,而不是演唱这首歌的艺术家。这篇博文讨论了我们使用百万首歌曲数据集来构建一个更强大的音乐推荐系统的努力。许多数据收集得很差,无法使用,需要大量的数据预处理和特征工程。一些特征工程方法包括将百万首歌曲数据集与另外两个数据集相结合,以包括用户的收听历史和歌曲流派,并使用结合置信度的一键编码来转换分类变量。
流派似乎是确定用户喜欢的歌曲种类的一个很好的指标。为了评估给定流派标签与特征的关联程度,我们使用流派特征作为因变量来训练各种监督模型。不幸的是,即使是我们表现最好的模型也没有表现得足够好,让我们接受给定的流派标签为真正的标签。我们将我们的方法转变为使用无监督学习方法,使用均值漂移聚类将相似的歌曲分组在一起,以模拟流派类别。对于我们的推荐,我们使用最近邻方法来开发一种算法,该算法使用我们新创建的流派聚类来建议与给定用户的收听历史中的歌曲最接近的新音乐。通过使用来自用户收听历史的维持集,我们能够得出结论,我们的模型表现良好,因为它始终推荐来自维持集的歌曲。
导言和背景
通常,音乐流媒体服务上的音乐推荐并不表示用户实际喜欢的音乐种类。相反,许多音乐流媒体服务主要使用关系算法,它只是从相似用户的播放列表中推荐歌曲。这种方法不能为用户提供个性化的建议,因此我们决定探索一种分析音乐特征的替代方法。我们的目标是设计我们自己的歌曲推荐算法,根据用户喜欢的音乐特征来推荐歌曲。
有许多音乐流媒体服务,如 Spotify 和 Apple Music,也在努力优化他们的音乐推荐算法。此外,还有各种要求参赛者解决类似问题的 Kaggle 比赛,包括百万歌曲数据集(MSD)挑战赛和 KKBox 音乐推荐挑战赛。我们的问题是推荐用户可能欣赏的新歌,提供他们的收听历史,这类似于正在进行的其他挑战。我们从数据探索开始理解数据,然后是特性选择和工程。一旦我们的数据是有意义的,我们使用一种监督的方法来预测流派,以便我们可以替换数据集中收集得不好的流派标签。最后,我们总结了一个无监督的聚类方法,利用我们新创建的流派。我们的项目包括几个新颖的特征,例如创建一次性编码特征,将特征的置信度融入编码中,并对数据集中的歌曲进行聚类,以分析用户收听历史中的可能趋势。
数据收集
在浏览相关 Kaggle 比赛时,我们偶然发现了一个使用了百万歌曲数据集(MSD) 的比赛。280 GB 的数据集对我们的项目来说似乎很有希望,因为它包括 53 个特征,正如其名称所暗示的,一百万首样本歌曲。这些功能提供了大量关于歌曲的信息,包括我们认为与理解用户为什么喜欢某首特定歌曲相关的特征。这些特征包括调、速度和模式,并为每种特征提供了置信度。此外,我们可以访问相关的数据集,这些数据集提供了用户的收听历史和流派/风格标签。有了这些数据集,一旦我们充分探索、理解和修改了我们所掌握的数据,我们就觉得已经为解决我们的问题做好了充分的准备。
数据采集
首先,我们试图从 OSDC 下载 MSD 的子集和整个数据集,但是,在撰写本文时,OSDC 的网站只将我们重定向到其主页。因为这两种方法都不起作用,所以我们采用了最后一种方法来获得 MSD: Amazon 弹性块存储。我们按照 MSD 页面上的说明启动了一个 Amazon EC2 实例。在这个实例中,我们安装了 Python 3、scikit-learn、pandas、numpy、scipy 和 Jupyter Notebook,使我们能够远程工作。然后,我们挂载数据集 EBS 实例,发现每首歌曲都存储在一个单独的 HDF5 文件中,从而产生了一个数百 GB 大小的数据集。
数据预处理和探索
起初,由于其巨大的规模和过多的特征,该数据集似乎非常有前途。例如,我们认为可跳舞性、艺术家熟悉度和歌曲热度对于理解用户喜欢的音乐类型至关重要。不幸的是,当我们更深入地研究这些特性时,我们发现许多数据没有信息,而且收集得很差;许多有前景的功能包含主要为 0 或 NaNs 的条目,差异很小。为了克服这个障碍,我们使用领域知识来执行特征选择和提取以清理数据。我们排除了绝大多数样本都忽略了值的特征,并将分类值转换为连续的数值。
我们的第二个数据集与用户历史信息相关,由三元组(user_id、song_id、count)组成。然而,我们的 MSD 样本只有 track_id 可用,这使得我们无法将 MSD 中的歌曲直接映射到每个(user_id,song_id,count)三元组。因此,我们必须利用将 song_id 映射到 track_id 的第三个数据集。在此操作之后,我们发现一些歌曲在 MSD 中没有 track_id,所以我们丢弃了这些值。然后,我们通过 track_id 合并数据集,并开始项目的建模阶段。
Box Plots of all features in our data
特征工程和选择
由于 MSD 的大小,我们必须要么对数据集的子集进行操作,要么对数据集的要素缩减版本进行操作。我们决定查看 MSD 数据的样本,看看是否所有要素都有有用的价值。如上所述,许多看似有用的特性没有被填充。利用音乐领域的知识,我们将数据缩小到 21 个有用的特征。我们移除了具有低方差、许多缺失值和字符串的要素,以减小数据集的大小,同时保留大部分有用信息。这个特性选择将我们的工作数据集的大小减少到了 2 GB。此外,我们通过写入单个 HDF5 文件节省了空间,成功地将文件大小从 2 GB 降至 117 MB。
基于置信区间一键编码的特征提取
Echo Nest API 提供了一个置信度值特性,它描述了一些分类特性。例如,每个数据条目包括歌曲的预测模式,以及模式预测正确的[0,1]的置信水平。这些特征高度相关,但不应该是独立的。为了将这些特征合成为一个有用的特征,我们对类别“模式”特征进行了一次性编码,并将每个特征乘以置信度。我们对其他几对高度相关的特征进行了同样的处理。
On left: Dataframe before one-hot encoding. On right: Dataframe after one-hot onecoding
学习和建模
因为流派是对相似歌曲进行分组的有效工具,我们决定预测歌曲的给定流派标签,以评估其准确性。我们使用了一些简单的模型,包括 SVM、XGBoost 和随机森林,因为它们在处理高维监督问题时具有鲁棒性。尽管对这些方法进行了调整,我们仍然得到了很差的准确性分数。这意味着数据集中给定的流派标签与歌曲的实际特征相关性很差,可能是因为艺术家自我识别他们音乐的流派。我们对这个问题的解决方案是使用聚类方法,纯粹基于歌曲的音乐元素来创建我们自己的流派标签。我们开始使用 K 均值聚类,后来选择使用均值漂移聚类。最后,为了向用户推荐歌曲,我们在生成的聚类上实现了多输入最近邻算法,以基于用户输入推荐歌曲。
初始监督方法
我们最初试图预测一首歌曲的给定流派标签,结果得分低于 0.01。这个分数很低,很大程度上是因为当类的基数很高时,很难达到高精度。虽然有 21 个不同的流派标签给了我们详细的类别,但类别之间没有距离:预测一个相似但不同的流派会像预测一个非常不同的流派一样严重地影响准确性。为了解决这个问题,我们将类型标签归纳为 8 个标签。
On left: original genre labels. On right: Generalized genre labels.
我们随后试图预测一首歌曲的广义流派标签,随机森林的得分为 0.33。我们在训练模型时通过交叉验证并使用网格搜索来调整随机森林的参数,从而获得了这个分数。这让我们轻松进入了 MSD 类型游戏 Kaggle 竞赛的前十名排行榜。不幸的是,这个分数不足以达到我们推荐歌曲的目的。我们决定利用歌曲的特点从头开始创建自己的流派标签,引导我们探索无人监管的方法。
使聚集
接下来,我们决定通过对数据集中的歌曲进行聚类来创建我们自己的风格,从而推荐与用户的收听历史“相似”的歌曲。我们尝试的第一种方法是 K-Means 聚类,因为它简单且训练时间短。然而,我们最终使用均值漂移聚类来解决这个问题,因为它不需要预先定义聚类的数量,因此非常灵活。改变流派的数量可以极大地改变推荐,Mean-Shift 根据密度自动确定最佳的流派数量。尽管 Mean-Shift 比 K-means 在计算上更昂贵,但我们仍然选择使用 Mean-Shift 聚类,因为它具有灵活性,并且只需运行一次算法就能提供非常宝贵的信息。
用户的最近邻居
为了将用户历史记录整合到我们的模型中,我们决定基于与一组输入歌曲的接近度来推荐歌曲。对于每个用户,我们使用基于球树的算法从均值漂移聚类中有效地创建最近邻,推荐与输入集具有最低 MSE 距离的歌曲。这种方法还优雅地定义了一个评估我们的无监督模型的指标:如果模型返回的歌曲已经在用户的收听历史中,我们就可以自信地说,这种方法成功地概括了用户的口味。
Scatterplot of User Recommendations
定义指标和结果评估
为了评估我们最初的监督方法,我们衡量成功的标准只是检查模型预测的准确性。按照这个标准,我们的随机森林模型做得最好。相比之下,当我们开始我们的聚类方法时,我们不得不修改我们衡量成功的标准,因为这些方法本质上是无监督的。为了评估我们的最近邻模型,我们为每个用户保留了一首测试歌曲,并将它在最近邻模型中的最小距离与 MSD 中所有点的平均最小距离进行了比较。如果测试歌曲的最小距离小于 MSD 最小距离的平均值,我们比随机模型做得更好。因此,我们定义了一个类似于 sigmoid 函数的评分函数:
调整后的聚类得分= 0.5+NP . tanh((dist[' average ']—dist[' test '])/10)/2
这使得分数在范围[0,1]内。关于这个指标需要注意的一点是,孤立的低精度并不意味着模型的性能不好。例如,如果两首歌曲在聚类内具有大的均方距离(也许用户喜欢两种风格),即使用户喜欢这两首非常不同的歌曲,一首歌曲也不太可能返回另一首。通过最近邻球树模型和我们的度量,我们发现大多数用户模型表现良好,尤其是与随机模型相比。下面是得分和歌曲间平均距离的方框图。
On left: Box plot of dist[‘average’] — dist[‘test’]. On right: Box plot of adjusted cluster score.
On left: Average Distance (MSE) between songs in MSD. On right: Average Distance (MSE) between songs in test set (user history).
结论
许多人抱怨说,他们不喜欢音乐流媒体服务推荐的歌曲。我们小组决定通过设计和实现一种基于歌曲特征向用户推荐音乐的算法来探索这个问题。我们从百万首歌曲数据集中提取数据,从其他数据集中添加新特征,删除收集不良的特征,并从相关特征中合成新特征。因为艺术家给定的流派标签与音乐的特点不太一致,所以我们根据歌曲的特点创造了自己的流派。我们的最终推荐采用了用户的收听历史,并从最接近这些历史中歌曲最集中区域的聚类中返回歌曲。我们通过从输入到模型的用户收听历史中排除一些歌曲,并确定模型是否推荐了来自维持集的歌曲,来评估我们的推荐的准确性。最终,根据我们定义的衡量成功的标准,我们的最终模型相当准确。
你可以在这里找到我们 Github 知识库的链接。
经验教训
我们团队学到的一个主要经验就是在使用数据集之前要充分探索它。最初看起来信息量巨大的数据集最终包含了大量方差较低的垃圾要素。数据集需要大量的预处理和特征工程,然后才能达到 1%的精度。数据集的庞大并不能转化为高质量的特征。我们学到的另一个教训是不要忽视更简单的模型,尤其是在组合时。对于这个项目,最近邻在开发我们的最终模型中至关重要,并且只需要很少的计算能力。每种模式都有优点和缺点。关键是使用正确的模型,其优势与问题和可用数据相一致。
未来的工作
为了继续和改进这个项目,我们可以收集更多关于歌曲的信息数据,如乐器,形式和傅立叶变换频谱。此外,使用 Echo Nest API 向 MSD 添加更多的“当前”歌曲将有助于使项目的最终模型与当今的趋势和流行歌曲更加相关。知道用户听了一首歌多长时间或者他们是否重播了这首歌将提供关于加权输入歌曲的非常有用的信息。例如,如果用户在决定他们不喜欢某首歌曲之前只听了 30 秒,该歌曲仍然以与他们喜爱的歌曲相同的容量出现在他们的收听历史中。最后,添加一个前端接口或 API 来发出推荐请求,将使我们的项目可供用户和开发人员使用。
参考
https://qz . com/571007/the-magic-that-makes-spotifys-discover-weekly-playlists-so-damn-good/
【labrosa.ee.columbia.edu/millionsong…
https://www . opensciencedatacloud . org/public data/million-song-dataset/
https://www . ka ggle . com/c/kkbox-music-recommendation-challenge
数据科学和公共政策交汇处的思考
“有意思……数据科学与公共政策有什么关系?”
当我告诉别人我是计算分析和公共政策的硕士生时,这是一个普遍的反应。我仍在努力为这个问题寻找完美、简洁的答案。与此同时,这里有一些关于这个主题的想法和观察,是我在迄今为止的冒险中收集到的。
注意:我将从最广泛的意义上提及“数据科学”,涵盖从大量数据中提取有意义的见解的实践的所有方面。
数据在政策领域发挥了巨大作用
看看数据科学造福社会 (DSSG),这是由芝加哥大学数据科学和公共政策中心的杰出人士举办的暑期奖学金。DSSG 项目团队与政府和非营利组织合作,将数据科学方法应用于教育、公共卫生和社会服务等政策领域。
尽管存在重大挑战,如数据质量问题和孤立部门的存在,但实践者已经找到了将数据科学融入政策领域的方法。市政府扩大了其分析团队的范围,纳入了更多数据科学功能。纽约、芝加哥和波士顿处于领先地位,其他城市紧随其后,这些数据团队正在帮助城市机构集中精力更有效地为选民服务。年轻的公司,如 Civis Analytics 和 BlueLabs ,为政府、宣传和政治领域的客户提供数据科学咨询服务。公民技术社区的成员(例如 Chi Hack Night )正在利用越来越容易获得的开放政府数据,在他们的空闲时间为项目做出贡献。公民数据使用案例的清单非常广泛,但简而言之,数据正在帮助我们以一种前所未有的方式解决紧迫的政策问题。
但是数据科学并不是解决所有问题的方法
在最近的一次数据科学会议上,主题演讲似乎决定了房间的气氛——数据科学是一个组织有史以来最好的事情,其他“过时”的分析方法只是碍手碍脚。尽管我相信大数据和机器学习的优点,但我拒绝相信数据科学是解决世界所有问题的灵丹妙药,尤其是在政策领域。
数据科学试图解决的政策问题是跨学科和复杂的。几代人以来,人们一直在研究这些问题,在提出数据科学解决方案之前,我们应该致力于了解相关政策领域的历史、法律和社会经济基础。现实中的细微差别很难用语言来捕捉,更不用说模型了,所以我们所能做的就是尝试从定性和定量的角度来理解这个主题。
让我们记住,在解决代码中的细节之前,要考虑全局。“那又怎样”的问题通常是最难回答的:在这种情况下,数据科学有什么帮助?什么样的内在假设和偏见将被纳入模型?谁会使用它,他们会用它做什么?谁的生活会受到结果的影响?只有到那时,我们才能决定数据科学是否是正确的工具,以及如何最好地利用它。
模型只是第一步
尽管这很诱人,但我们不能把自己埋在数字中,然后把产出交给组织的决策者。准确有效地交流模型与构建强大的分析产品同样重要。模型可解释性是一个棘手的话题,随着数据科学能力变得越来越先进,这个话题会变得更加棘手。然而,如果我们要对公共政策产生任何有意义的影响,非技术合作者需要对我们的模型的方法和结论有一个基本的理解。我们不能指望人们盲目购买他们不信任或不理解的东西。
我们还必须能够与统计学家、经济学家和其他社会科学家说同样的语言,他们现在是并将继续是政策组织的重要组成部分。我们应该探索数据科学如何与因果推理、项目评估和更传统的政策分析方法相结合。这样做将有助于数据科学在公共政策领域获得更大的可信度。
数据科学是一种特权
先说数据科学领域的代表性。数据科学帮助我们以一种前所未有的方式来衡量人类的心理模型和决策。这些算法模型在公共政策中实施时,可能会影响数百万选民的生计。因此,至关重要的是,设计它们的个人能够代表并同情受影响的人。
女性和少数民族在数据科学领域的更多代表将有助于识别和克服算法中的无意偏差。随着我们进入一个技术占主导地位、创新蓬勃发展的世界,我们需要更多的代表性,以确保数字时代不会将整个群体抛在后面。
我听说数据科学是一个不断发展的领域,我很荣幸能够研究它,作为我影响公共政策和社会变革的追求的一部分。正如他们所说,伴随着巨大的特权而来的是巨大的责任。因此,让我们继续学习、分享、提问和编码,不要忘记屏幕上数字背后的人类。
必须了解深度学习(AI)中的信息论概念
信息论是一个重要的领域,对深度学习和人工智能做出了重大贡献,但对许多人来说却是未知的。信息论可以被视为深度学习的基本构建模块的复杂融合:微积分、概率和统计。人工智能中来自信息论或相关领域的一些概念的例子:
- 流行的交叉熵损失函数
- 基于最大信息增益构建决策树
- 维特比算法广泛应用于自然语言处理和语音中
- 在机器翻译 rnn 和各种其他类型的模型中普遍使用的编码器-解码器的概念
信息论历史简介
Claude Shannon, the Father of Information Age.
在 20 世纪早期,科学家和工程师一直在为这个问题而努力:“如何量化信息?有没有一种分析的方式或者一种数学的衡量方法可以告诉我们信息的内容?”。例如,考虑下面两句话:
- 布鲁诺是一只狗。
- 布鲁诺是一只棕色的大狗。
不难看出,第二句话给了我们更多的信息,因为它还告诉我们,布鲁诺除了是一只“狗”之外,还是一只“大”和“棕色”的狗。如何量化两句话的区别?我们能有一个数学方法来告诉我们第二句话比第一句话有多少信息吗?
科学家们正在努力解决这些问题。数据的语义、领域和形式只是增加了问题的复杂性。然后,数学家兼工程师克劳德·香农提出了“熵”的概念,这一概念永远改变了我们的世界,标志着“数字信息时代”的开始。
Shannon introduced the term “bit” in 1948, that he humbly credited to his colleague John Tukey.
Shannon 提出“数据的语义方面是不相关的”,当涉及到信息内容时,数据的性质和意义并不重要。相反,他用概率分布和“不确定性”来量化信息。香农还引入了“比特”这个术语,他谦逊地称之为他的同事约翰·图基。这一革命性的想法不仅奠定了信息论的基础,也为人工智能等领域的进步开辟了新的途径。
下面我们讨论深度学习和数据科学中四个流行、广泛使用且必须知道的信息理论概念:
熵
也称为信息熵或香农熵。
Entropy is a measure of randomness or uncertainty in an experiment.
直觉
熵给出了实验中不确定性的度量。让我们考虑两个实验:
- 扔一枚硬币(P(H)=0.5),观察其输出,比如 H
- 扔一枚有偏向的硬币(P(H)=0.99),观察它的输出,比如说 H
如果我们比较这两个实验,实验 2 比实验 1 更容易预测结果。因此,我们可以说实验 1 比实验 2 更不确定/不可预测。实验中的不确定性是用熵来衡量的。
因此,如果实验中有更多的内在不确定性,那么它就有更高的熵。或者实验越不可预测,熵就越大。实验的概率分布用于计算熵。
一个确定性的实验,是完全可预测的,比如扔一个 P(H)=1 的硬币,熵为零。一个完全随机的实验,比如说掷骰子,是最不可预测的,具有最大的不确定性,并且在这样的实验中具有最高的熵。
Experiment of tossing a fair coin has more entropy than tossing a biased coin.
看待熵的另一种方式是我们观察随机实验结果时获得的平均信息。从实验结果中获得的信息被定义为该结果发生概率的函数。结果越罕见,从观察中获得的信息就越多。
例如,在一个确定性实验中,我们总是知道结果,所以没有从观察结果中获得新的信息,因此熵为零。
数学
对于离散随机变量 X ,可能的结果(状态)为 x_1,…,x_n,以比特为单位的熵定义为:
其中 p(x_i)是 X 的 i^th 结果的概率。
应用
- 熵用于自动决策树构造。在树构建的每一步,使用熵标准进行特征选择。
- 模型选择基于最大熵原则,即从竞争模型中选择熵最高的模型为最佳模型。
交叉熵
直觉
交叉熵用于比较两种概率分布。它告诉我们两个分布是多么相似。
数学
在同一组结果上定义的两个概率分布 p 和 q 之间的交叉熵由下式给出:
应用
Convolutional Neural Network based classifiers often uses softmax layer as final layer that is trained using a cross-entropy loss function.
- 交叉熵损失函数广泛用于分类模型,如逻辑回归。交叉熵损失函数随着预测偏离真实输出而增加。
- 在像卷积神经网络这样的深度学习架构中,最终输出“softmax”层经常使用交叉熵损失函数。
交互信息
直觉
互信息是两个概率分布或随机变量之间相互依赖性的度量。它告诉我们一个变量携带了多少关于另一个变量的信息。
互信息捕捉随机变量之间的依赖性,并且比仅捕捉线性关系的普通相关系数更一般化。
数学
两个离散随机变量 X 和 Y 的互信息定义为:
其中 p(x,y) 为 X 和 Y 的联合概率分布, p(x) 和 p(y) 分别为 X 和 Y 的边际概率分布。
应用
In a Bayesian Network, the relationship structure between variables can be determined using mutual information.
- 特征选择:不使用相关性,可以使用互信息。相关性只捕获线性相关性,而遗漏了非线性相关性,但是互信息没有。零的相互独立性保证了随机变量是独立的,而零相关性则不然。
- 在贝叶斯网络中,互信息用于学习随机变量之间的关系结构,并定义这些关系的强度。
Kullback Leibler 散度
也称为相对熵。
KL divergence is used to compare two probability distributions
直觉
KL 散度是发现两个概率分布之间相似性的另一个度量。它衡量一个分布与另一个分布的偏离程度。
假设,我们有一些数据,它的真实分布是“P”。但是我们不知道这个‘P’,所以我们选择一个新的分布‘Q’来近似这个数据。因为“Q”只是一个近似值,所以它不能像“P”那样很好地逼近数据,并且会发生一些信息丢失。这种信息损失是由 KL 散度给出的。
“P”和“Q”之间的 KL 散度告诉我们,当我们试图用“Q”近似“P”给出的数据时,我们丢失了多少信息。
数学
一个概率分布 Q 与另一个概率分布 P 的 KL 散度定义为:
应用
KL 散度通常用于无监督机器学习技术变分自动编码器。
信息论最初是由数学家和电气工程师克劳德·香农在 1948 年发表的开创性论文《通信的数学理论》中提出的。
注意:实验、随机变量和人工智能、机器学习、深度学习、数据科学等术语在上面已经被松散地使用,但在技术上有不同的含义。
如果你喜欢这篇文章,请关注我 Abhishek Parbhakar 获取更多关于人工智能、哲学和经济学的文章。
我的第一个机器学习项目 PT1
这一刻终于到来了
大家好!希望你们都过得好。我正在兑现我在上一篇文章中的承诺。今天我们将关注线性回归。数据集是关于国王郡地区 2014 年 5 月至 2015 年 5 月间出售的房屋。你可以在 Kaggle 上自己下载。这是一个寻找数据集和练习机器学习的好地方。如果你和我一样兴奋,让我们开始吧。
线性回归
线性回归是一种使用变量(或机器学习的特征)来预测定量变量(目标变量)的算法。更具体地说,它试图拟合一条穿过数据的直线,该直线最好地表示预测变量和目标变量之间的关系。
想起我在上一篇帖子里举的工资例子。你试图根据某人多年的工作经验来预测你的薪水。工资是目标变量,工作年限是预测变量。这个数据集的目标变量是房屋的价格。我们的预测者呢?我们把这个装进去,看看有什么发现。他们所代表的东西可以在这里找到。
Housing_df <- read.csv("kc_house_data.csv")
str(Housing_df)
'data.frame': 21613 obs. of 21 variables:
$ id : num 7.13e+09 6.41e+09 5.63e+09 2.49e+09 1.95e+09 ...
$ date : Factor w/ 372 levels "20140502T000000",..: 165 221 291 221 284 11 57 252 340 306 ...
$ price : num 221900 538000 180000 604000 510000 ...
$ bedrooms : int 3 3 2 4 3 4 3 3 3 3 ...
$ bathrooms : num 1 2.25 1 3 2 4.5 2.25 1.5 1 2.5 ...
$ sqft_living : int 1180 2570 770 1960 1680 5420 1715 1060 1780 1890 ...
$ sqft_lot : int 5650 7242 10000 5000 8080 101930 6819 9711 7470 6560 ...
$ floors : num 1 2 1 1 1 1 2 1 1 2 ...
$ waterfront : int 0 0 0 0 0 0 0 0 0 0 ...
$ view : int 0 0 0 0 0 0 0 0 0 0 ...
$ condition : int 3 3 3 5 3 3 3 3 3 3 ...
$ grade : int 7 7 6 7 8 11 7 7 7 7 ...
$ sqft_above : int 1180 2170 770 1050 1680 3890 1715 1060 1050 1890 ...
$ sqft_basement: int 0 400 0 910 0 1530 0 0 730 0 ...
$ yr_built : int 1955 1951 1933 1965 1987 2001 1995 1963 1960 2003 ...
$ yr_renovated : int 0 1991 0 0 0 0 0 0 0 0 ...
$ zipcode : int 98178 98125 98028 98136 98074 98053 98003 98198 98146 98038 ...
$ lat : num 47.5 47.7 47.7 47.5 47.6 ...
$ long : num -122 -122 -122 -122 -122 ...
$ sqft_living15: int 1340 1690 2720 1360 1800 4760 2238 1650 1780 2390 ...
$ sqft_lot15 : int 5650 7639 8062 5000 7503 101930 6819 9711 8113 7570 ...
不算价格,我们总共有 20 个可能的预测变量。如果只选一个,那就叫简单线性回归。如果我们选择 1 以上,多元线性回归。很简单,不是吗?现在我们如何选择我们应该使用的变量呢?一种方法是使用所有的东西来建立一个模型,根据一个特定的标准来评估这个模型,然后一个接一个地移除每个预测因子。我们将执行的另一个方法是对每个预测值进行逻辑思考,看看创建模型和做出好的预测是否有统计学意义。更具体地说,我们将保留本质上是有序的变量。
所以现在让我们开始移除一些。ID & zipcode 可以走了。它们都是标签,不会从数字上告诉你一个数字是否比另一个好。id 2346 并不比 2342 好。所以现在我们只剩 18 个了。接下来,我们将删除纬度和经度。这些只是地图上房子的坐标。对于线性回归模型,它们是不需要的。
其他 16 个暂时可以接受。尽管我们需要做些调整。如果您查看日期变量,您会注意到它不是最易读的。最重要的是,它也不是定量的。所以我们将它转换成数字:
#Converting to regular text first
Housing_df$date<- as.Date(as.Date(as.character(Housing_df$date),"%Y%m%d"))#Now converting to number
Housing_df$date <- as.numeric(Housing_df$date)
太棒了。我们现在准备进入机器学习的下一步。
训练和测试集
在机器学习中,你将数据分成两组:训练集和测试集。定型集是您的模型从中学习的数据部分。测试集用于查看您的模型对以前没有见过的数据的预测效果。为什么不用整个数据集来代替呢?如果你这样做了,你的模型在预测新值方面就不会做得很好,因为它捕捉了特定数据集的模式。这么看吧。你通过模拟考试来准备考试。你只研究你在课堂上得到的答案和问题出现的顺序,而不理解概念。当真正的考试以随机顺序出现问题时,你不会做得很好。
我们要做的第一件事是考虑有多少数据将进入训练集,哪些数据将留给测试集。通常越多越好,所以我会把数据分成 80-20 份训练测试。
#Split data into training and test setslibrary(caTools)set.seed(1234)
split <- sample.split(Housing_df$price, SplitRatio = 0.8)
training_set <- subset(Housing_df, split == T)
test_set <- subset(Housing_df, split == F)
已经完成了。训练集包含 17,839 个观察值,测试集将包含 3,774 个观察值。如果你对布景有疑问,seed 是为团队工作准备的。当一个数据集被分割时,最终出现在一个数据集和另一个数据集之间的观察值是随机的。由于一个随机数发生器。当你设置了一个种子,你就说明了 rng 从哪里开始。这使得您的工作具有可重复性,这在数据科学中非常重要。所以如果你的同事想评价你的工作,或者想看看你哪里出了问题,只要输入相同的种子,他们就可以下载相同的数据集,得到和你一样的观察结果。
现在我们开始做好事了。我们要建立一个线性回归模型!终于!
模型结构
线性回归模型基本上是一个数学公式的表示。不要担心,我们不会在第 1 部分得到超级数学;只是想给你提个醒。这就是我们将如何建立这个模型。
model1 <- lm(formula = price ~ date + bedrooms + bathrooms + sqft_living + sqft_lot + floors + waterfront + view + condition + grade + sqft_above + sqft_basement + yr_built + yr_renovated + sqft_living15 + sqft_lot15, data = training_set )
首先,我们使用 lm 函数让我们知道我们在构建什么样的算法。价格是我们的目标变量,所以我们首先列出它。在~之后,我们列出所有我们想用来预测的变量。最后,让我们陈述我们用来构建模型的数据集。如果我们想看看它是什么样子:
Call:
lm(formula = price ~ date + bedrooms + bathrooms + sqft_living +
sqft_lot + floors + waterfront + view + condition + grade +
sqft_above + sqft_basement + yr_built + yr_renovated + sqft_living15 +
sqft_lot15, data = trainig_set)Residuals:
Min 1Q Median 3Q Max
-1415203 -110571 -10066 92170 4203618Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.687e+06 2.860e+05 16.384 < 2e-16 ***
date 1.027e+02 1.463e+01 7.017 2.34e-12 ***
bedrooms -4.568e+04 2.354e+03 -19.406 < 2e-16 ***
bathrooms 4.805e+04 3.893e+03 12.342 < 2e-16 ***
sqft_living 1.707e+02 5.195e+00 32.859 < 2e-16 ***
sqft_lot -6.375e-03 5.472e-02 -0.117 0.90725
floors 2.323e+04 4.246e+03 5.470 4.56e-08 ***
waterfront 6.149e+05 2.042e+04 30.116 < 2e-16 ***
view 4.267e+04 2.534e+03 16.840 < 2e-16 ***
condition 1.979e+04 2.824e+03 7.009 2.49e-12 ***
grade 1.226e+05 2.515e+03 48.748 < 2e-16 ***
sqft_above -1.207e+00 5.074e+00 -0.238 0.81199
sqft_basement NA NA NA NA
yr_built -3.663e+03 7.966e+01 -45.989 < 2e-16 ***
yr_renovated 1.346e+01 4.408e+00 3.053 0.00227 **
sqft_living15 2.293e+01 4.045e+00 5.669 1.46e-08 ***
sqft_lot15 -6.312e-01 8.790e-02 -7.181 7.22e-13 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 220400 on 17823 degrees of freedom
Multiple R-squared: 0.6607, Adjusted R-squared: 0.6604
F-statistic: 2314 on 15 and 17823 DF, p-value: < 2.2e-16
呜!我们的模型建成了!但是这些数字是怎么回事?星星呢?模型有多好?这些是我们将在第 2 部分中回答的问题。我现在不想打击你们。
如果你学到了新的东西,并准备好第 2 部分,点击推荐按钮!
给有抱负的数据科学家的建议。
简介
在本文中,我将谈论我进入数据科学领域几个月来所信奉的价值观,任何有抱负的数据科学家都可以从中获得宝贵的见解。成功是一个旅程,而不是目的地,从成为伟大的人的过程中学到的价值观、经验和挑战才是这个过程值得的。
许多人专注于成为一名成功的数据科学家的技术层面,抛弃了非技术价值,这些价值不仅为成为一名伟大的数据科学家奠定了坚实的基础,也为成为一名全面的数据科学家奠定了坚实的基础。
那么,谁是数据科学家呢?数据科学家是使用统计、数学和数据技术解决业务问题的人。他必须通过提出正确的问题来了解业务领域,具备统计和数学技术的基本知识,如线性代数、微积分、优化和算法、概率等。对 OSEMN(获取、清理/清理、探索/可视化、建模、解释)等数据技术的扎实理解非常重要。
为了理解简单线性模型的工作原理,你需要耐心、学习新事物的欲望、好奇心(即使它杀死了猫)、结构性思维等,这些是你需要学会接受的价值观,也是我们将要关注的。
心态决定一切。
成为一名数据科学家既有趣又令人兴奋,也可能困难又无聊,这取决于你的心态。这一切都始于头脑!你如何让成为一名数据科学家变得有趣和令人兴奋?
你是你周围人的总和。如果你周围都是鼓励和积极的人,你很可能也会一样。LinkedIn 是社交工具之一,在数据科学的指导和激励方面拥有非常强大的社区支持。有伟大的数据专家,如凯尔·麦基乌、兰迪·劳,他们有网站、课程和网络研讨会,致力于帮助有抱负的数据科学家。我从这些伟大的人身上获得了灵感和指导。没有人一开始就是专家,如果他们已经在他们所做的事情上取得了成功,你也可以取得成功,只是要有正确的心态。
一致性是关键,即使进展缓慢也要坚持下去,突破界限,被拒绝,这是你知道你真的在做一些伟大的事情的时候。参加漫长而无聊的 MOOCs 课程,最终你会学到新的东西。
结构化思维。
真正让数据科学家脱颖而出的是解决问题和结构化思维技能,工具只是实现这一点的一种方式。客户和利益相关者会告诉你一个业务问题,你需要制定策略并使用数据科学来解决。
你如何用结构化思维技巧解决问题?
- 理解问题。大多数难题之所以难,是因为我们没有花时间去理解它们。这包括问正确的问题。不要急于解决问题,要对问题有一个清晰的定义,不管是业务上的还是技术上的。“如果你不能用简单的术语解释它,那么你就没有理解它。”
- **计划。**这包括规划您的解决方案。从基本问题开始,到问题的复杂部分。
- 分。大事是小事的总和。把你的问题分解成子问题,它会变得更容易解决。一旦你想通了每一个子问题,就把这些点连接起来,因为这将给你原问题的解决方案。
- 卡住了??当你陷入解决问题的困境时,学会休息而不是放弃。你找到解决办法只是时间问题。现在用不同的方法回到问题上,重复上面的步骤。
- 练习!!我们通过做来学习。练习,练习,练习。
提高技能的资源:
学习基础知识。
当谈到理解数据科学的基础知识时,你必须咬紧牙关。获取统计和数学概念,因为它们有助于为您正在构建的模型打下坚实的基础。
重要性的突破:
资源:
论编程语言,从 PYTHON 开始,擅长就行了。把它作为一个整体来学习,因为它能让你更好地理解每一个概念。由于模型易于部署并能快速投入生产,大多数公司现在都在转向 python。
资源:
数据存在于数据库中,知道如何检索它很重要。首先学习 SQL,许多有抱负的数据科学家忘记掌握这一基本技能。一点 SQL 就能走很长的路。学习内连接和左连接分组,理解空、更新、插入、删除等。
资源:
边做边学。
成为数据科学家的最佳方式是从事数据科学。你必须把手弄脏。没有目标的学习是遗忘的秘诀。找到你感兴趣的任何项目或领域,获取数据集并开始工作。如果你陷入了一个给定的概念,学习和探索它,然后回去用获得的知识完成任务。
拥有一份优秀的作品集对于招聘者轻松雇佣你来说是非常重要的。
伟大的投资组合需要什么?
- 拥有至少两个解决现有业务问题的项目。这证明你了解公司面临的问题和挑战,因此可以用你的数据技能影响一个组织。
- 投资组合中的项目应该专注于提升你的个人技能,如探索性分析、特征工程等。
- 专注于在给定的技能组合中变得有能力,足够胜任一份工作。
- 概述项目中的挑战、失败和成功,最好是如何改进以有效解决手头的问题。
就实际工作经验而言,你可以在一个 NGO 或任何组织中做志愿者,提出数据驱动的解决方案,或者参加 Kaggle 竞赛,仅仅是为了让自己的手和脚沾湿。
分组学习。三个臭皮匠顶个诸葛亮。小组学习使你能够互相学习,分享不同的观点,共同成长。Linkedln 提供了这样一个伟大的社区,有杰出的个人,如兰迪·劳、 凯尔·麦基乌、凯特·斯特拉赫妮。
教导和帮助他人。
“如果你不能向一个六岁的孩子解释清楚,那你自己也不明白。”—阿尔伯特·爱因斯坦
学习新东西的最好方法是教别人,因为这能激励你通过积极的研究更好地理解你所学的东西。努力分享你的知识、经验和所有失败中的精华,这样别人就能从你的错误中吸取教训,完善自己。你能提供的最好的服务是给别人。
我进入数据科学领域的核心动机之一是通过数据驱动的明智决策来改善人们的生活,我努力在日常生活中实现这一目标。
不要把你的技能局限于你使用的工具,包括有效沟通、与他人合作和共同创新的能力。
教育他人需要通过创建自己的博客、在 LinkedIn、Medium、Reddit、Github 等网站上分享想法和文章来保持强大的在线影响力。
找个导师。
导师通过建议、网络和支持强调长期发展。您可以从导师的错误和失败中学习,这是攀登数据科学成功阶梯的一种更简单、更快速的方式。从他们那里获得关于你的进展和项目的持续的、诚实的反馈,对于评估你的表现和知道你做的事情是否正确是非常重要的。
一个导师不一定是一个人,但是你可以从书籍、LinkedIn 帖子、文章、Github、Kaggle 内核等中学到很多东西。只要挑一个适合你的就行了。
通过建立关系建立人脉。
与公司中有影响力的潜在招聘人员建立个人关系是每个有抱负的数据科学家都应该长期掌握的一门艺术。你会面临很多拒绝,但坚持不懈地提高这项技能,你最终会得到你梦想的工作。
努力与招聘人员建立私人关系,而不是职业关系。这包括了解他们的爱好是什么,是什么激发了他们的工作,计划一次喝酒聚会或虚拟聚会,你能做些什么来帮助他们实现目标等等。
与一家有着远大目标、你渴望成为其中一员的合适公司合作是非常重要的。对公司、他们的技术、他们使用的工具、他们正在做的项目做一些研究,向他们展示你对他们的价值。
你不一定要做到最好,只要想好如何低效地展现你所擅长的领域就行了。你越早意识到你不可能成为所有事情的大师,你就会成为越好的数据科学家。记住你的经验在你的技能、心态和态度中。
结论。
我最大的满足是和一个在数据科学方面有相似兴趣的人一起学习、支持和成长。我总是渴望向我遇到的任何其他数据专家学习,因为我相信我们总是可以从彼此身上学到一些东西。我希望您能从这篇关于成为更好的数据科学家的文章中获得有价值的见解。
如果你想给这篇文章添加任何提示,请随时留言。感谢任何形式的反馈!不要忘记分享和帮助某人成为更好的数据科学家!!我们可以通过我的 LinkedIn 继续讨论,或者你可以发电子邮件给我你的意见brynmwangy@gmail.com。干杯!!
我的网络克隆:数字化自我
#TBT 我的网络克隆#试用版 1。正在预加载…
#TBT to cyberlone MK1. A lot of mock data is used.
我是在一年前作为个人夜间爱好开始钻研这个项目的(https://TechCrunch . com/2016/01/09/virtual-reality-and-a-parallel-universe-of-cyber clones/罗斯·芬曼 本杰明·莱因哈特)。并不是说我在攻读博士学位、创业、指导学生和抱怨生活之间没有任何事情可做。但是,不像你们大多数人,我不擅长采取积极的措施来保持健康。去年一整年,健康对我来说都很糟糕,所以我只是想预测任何即将袭击我的健康灾难——让我远离编码、机器人和其他美好的生活。换句话说,我开始建立我自己的网络克隆——我的身体、情绪和行为的预测模型——我自己的数字印记。最终有一天,使用可植入的可穿戴设备/放电单元,自动调节(闭环系统)重要变量到一个名义参考值。这些可能是很多东西——一些例子可能是——葡萄糖、维生素甚至多巴胺——它当然会让你了解牙齿蛀牙的传播(是的,也有数学模型!)这样你就不会因为牙痛进两次急诊室(在美国,更换一颗牙齿要花掉我 4 个月的研究生津贴!!!这是一个巨大的动力。)
似乎体育界已经尝试了所有优化性能的方法——最终我们都将拥有自己的参数模型,使用可植入的可穿戴和放电单元进行优化。也许在遥远的未来,我们还会用实验室定制的神经元来取代我们的神经元,以增强我们的聪明度。
虽然我在先进的神经网络方面越来越好,但首先,我发现大量的人类行为是相当确定的,可以基于具有某些不确定性界限(也可以有条件地变化)的数据驱动的统计模型。我应用的大部分数学是从我博士学位的一部分借来的,在那里我编写了一个软件来处理多达 400 万个模糊的数据点,以估计未知的非线性(对于我简化的博士问题来说,这是不错的数据量,但在许多情况下,你可以处理 1000 倍以上的数据;你要学会什么是适量的样本)。我学到了很多关于数据采样,偏见,为什么太多的数据并不总是好的-然后归结为你在用它做什么。很多都是基于大型数据集的降维,建立变量之间的相关性(对于无法实时测量的事物和找出正确的生物标志函数尤为重要),并确定足以描述问题模型的关键组件。最近,我开始编写非常简单的算法(通常是在我弄坏了无人机,需要分散注意力,或者只是生生活的气的时候)——来代表一个代理人应该如何应对与最初的预测模型相矛盾的失败、拒绝和心碎。在这个过程中,我对人类的身体和大脑有了相当多的了解——我对此知之甚少!
与生物人类的传统建模不同,我的工作可能有些简化——基于这样的假设,即我不需要按照科学在任何粒度级别匹配生物/化学过程。我最关心的是,主模块的输出是否与你在普通生物过程中看到的相匹配。原因是,无论如何,这个世界真的看不到你内心发生了什么。所以在多智能体交互问题中,我所关心的是仿真智能体在任何情况下的输出。我是按照生物学来模拟心脏还是大脑与我的问题无关,只要——比方说——让“真实的我”哭泣的外部刺激也让我的数字自我或“网络克隆”哭泣。新型号比我开始时的要好得多。不过进展很慢——没有足够的时间做副业。但是,我认为一旦我自动化持续的数据上传和模型更新,它会好得多。
仍然非常初步,但几天前就想把它加载到 Github 上。作为一名机器人专家,我必须更加负责任:)所以这将是一个个人的激情项目——尽管我总是很高兴在休息的时候和任何从事这方面工作的人交谈:)
一个困扰着我的人有时会感觉很糟糕——因为我认为我只是把我的生活经历、情绪甚至牙痛归结为数据和样本观察。
我的数据和设计道德宣言
作为一名设计研究负责人,我参与了许多数据驱动的项目,我一直在思考很多关于“大数据”的伦理问题。
尽管基于数学和统计学,但数据驱动的模型丝毫不受偏见、成见和人类彻头彻尾的恶意本性的影响。无论这些不道德的价值观是由它们的创造者传递给数学模型的,还是它们使用(或滥用)的函数,没有观点的数学在大数据世界中是不存在的。因为每一个数据点、每一个二元表达式、每一个公式、函数、统计模型的背后,都是实际的人。有时我们会忘记这一点。
要想找到证据证明事情可能会变得非常糟糕,你可以从这种反乌托邦式的科学出错小说中得到启示,比如赫胥黎的《美丽新世界》,或者阿西莫夫的《我是机器人》系列,或者你也可以看看我们最近的数学被用作武器的历史,在凯茜·奥尼尔的书《数学毁灭的武器》中有如此直白的描述。
奥尼尔写得像一个痛苦的离婚女人,发现她曾经深爱的伴侣欺骗她,描绘了一幅道德和大数据的惨淡画面。她抨击算法的仲裁者,这些算法用扭曲的半生不熟的代理预测模型将美丽优雅的数学变成“数学毁灭武器”,用真实数据代替观点和半真半假的事实。
奥尼尔编造了大量的故事,讲述了推动算法引发的纸牌屋住房危机的邪恶,以及坏演员致富所使用的糟糕数学,让我们其余的人感到震惊。她揭穿了标准化测试(它既不是标准的,也不符合公平测试)作为评估教师工具的隐含公平性。她指出,在刑事司法系统中,预测性量刑模型中使用的算法工具存在固有的偏见。她的清单还在继续。
对于我们这些深知人类有能力将最温和的工具变成邪恶的仲裁者的人来说,奥尼尔的案例研究并不令人惊讶。
十多年来,大数据占据了中心舞台,人工智能、有知觉的生物和机器人等领域被推入主流,我们越来越善于识别利用数据力量的坏人。然而,下一个挑战从危险信号转移到了一个明显灰色的领域。
对全世界的脸书人、亚马逊人和谷歌人来说,当然,对我们来说,当我们设计以数据为燃料的系统时,这就是我们真正开始看到棘手的伦理问题甚至不需要尝试就迅速变成膝盖深的危机的地方。
数据驱动的问题从看似无害到完全令人不快——事实上,谷歌的一个搜索算法向男性而不是女性显示了更高报酬的招聘广告,或者声称亚马逊的搜索算法似乎倾向于自己的产品,拒绝给客户最好的东西,或者脸书玩弄你的新闻提要,从只向你显示悲伤的消息以衡量你的反应(令人讨厌)到压制保守或其他意识形态的消息(不确定)。给你看所有的假新闻(悲伤)。更不用说我称之为机器学习的“一上效应”了。虽然上面提到的怪癖经常发生在有偏见的数据驱动模型中,但是完全缺乏对人性的理解,再加上对编程代码优点的盲目相信,这可能是一种危险的民主崩溃的组合。
算法的扩展
脸书俄罗斯选举丑闻将很快成为《法律与秩序》的一集,但让我们重温一下十年来科技领域最大的故事之一。如果你已经看到了大量的数据和道德博客帖子,煤矿中的许多金丝雀哭诉科技缺乏同理心及其危险,这可能是因为世界上最大的科技公司之一被少数购买广告的俄罗斯人操纵,他们利用该公司的产品影响国家总统选举。我们现在知道这是真的,而不仅仅是猜测。
当你这样写的时候,听起来很奇怪。世界上最大的平台之一,拥有这个星球上最聪明的工程师,怎么会被如此愚弄?却不知道吗?却不去阻止?
从某种意义上说,脸书在不知不觉中成为了一个经典案例,说明为什么你需要的不仅仅是工程师,而是创造一个几乎无害的数据驱动产品。
为了理解为什么,让我们看看智能系统是如何构建的。
关于算法的简短入门(如果你以前听过,跳过)
首先,事情第一——像脸书创建的帮助用户创建和定位信息的智能系统中有什么?主要成分是算法。
算法是智能系统模型的组成部分。简单来说,算法就是一个解决问题的过程。构成智能编程或人工智能主干的大多数算法都是学习返回结果的决策模型。
它们被编程为筛选信息并返回结果,就像谷歌的搜索引擎一样。这些结果有标准,允许他们选择超过其他信息。这是由人,通常是计算机工程师或数据科学家编写的。
如果它们是有机物,我会给算法贴上病毒的标签。算法一旦被编程,在完成任务时会非常高效,尤其是一旦它们学会了基本的任务。让我们看一个例子。
假设你想在你遇到的每一篇文学作品中找到“种子”这个词。你可以做 CTRL+F 一百万次,但更有效的方法是让计算机解决这个问题。因此,您可以创建一个算法来梳理信息,找到单词“seed”
但是一个算法怎么知道什么是种子呢?比如 seed 和 meed 有什么不同?他们都很亲近。好吧,你可以训练它,所以机器,你的电脑,学会识别“种子”,但避免像“杂草”、“需要”和“meed”这样的词
你训练它,给它一堆信息,包括很多单词,包括“种子”,你训练它识别单词“种子”是什么。然后你告诉它不断重复,直到它停留在单词“seed”上,足够多次而不会把它误认为另一个单词。这就是图像处理、自然语言处理和其他基于算法的机器学习模型所发生的事情。
但是,一旦算法学习了一项任务,一旦学习曲线跳跃,程序就可以更快地识别,并猛烈攻击这些新发现的知识。
算法可以增长知识,你可以教它的知识,或者它可以自己学习的知识。现在,它可以将图像与单词“seed”进行匹配接下来,它可以匹配几乎没有提到“seed”但与该单词相关的整个段落。它可以快速且全面准确地做到这一点。然后,在“深度学习”中,它可以开始自己决定与“种子”这个词的相关性它已经超越了你的训练和解释,给你和其他人的不是他们要求的,而是它认为你想要的。
好了,回到我们定期安排的媒体文章
但是一个失控和被操纵的算法是脸书首席执行官马克·扎克伯格在国会作证的原因。再加上几个糟糕的演员——呆在家里的俄罗斯黑客——你就有了滥用和灾难的配方。仅仅通过几个“训练”广告,俄罗斯黑客就利用脸书的算法,用虚假的、未经证实的、耸人听闻的、但受欢迎的内容来攻击共和党人和右倾观众。其他坏人利用脸书的 PageRank 算法对喜欢、分享和评论的偏好,在社交媒体上像野火一样传播虚假、阴谋的内容。
但是脸书不是唯一的一个。通过向消费其内容的眼球销售来赚钱的社交媒体平台使用基于量化的指标来增加收入。算法的量化追求焦点导致这些平台分发嵌入了种族主义、性别歧视和几乎所有人类已知的其他主义偏见的内容。
脸书的 PageRank 系统追逐喜欢、评论和分享,创造了一个字面上和比喻上的“过滤泡沫”,提供主流新闻无法渗透的单音符精彩内容。
将人工智能模型武器化以创造新的现实
前奥巴马特工伊莱·帕里泽在 2011 年警告说,在线平台正在为个人生活在另一个现实中创造条件,在这个现实中,只有他们的观点和信仰得到加强。2016 年的选举不仅仅是帕里泽的威胁成真。事实上,情况要糟糕得多。
威斯康辛大学新闻学教授杨·米金(Young Mie Kim)在 2016 年选举期间,对脸书平台上制作和分发的有针对性的俄罗斯广告做了广泛的研究。她的研究既有启发性又令人沮丧,用赤裸裸的黑暗结果展示了算法模型的放大。
她发现俄罗斯支持的互联网研究机构在脸书大量购买和分发包含极端、煽动性和未经证实的右倾指控的广告。据《连线》杂志报道,这里有一个例子:
多个可疑团体共享的一则广告写道:“老兵优先于非法移民。300,000 退伍军人死于等待退伍军人管理局的检查。非法移民每年的医疗费用为 11 亿美元。
俄罗斯的广告购买额约为 10 万美元,结果只有 3000 个广告。但同样,我们在谈论数据驱动工具的放大。由于脸书算法,这些广告得到了喜欢和分享,因此比实际的新闻内容更受欢迎。
事实上,哥伦比亚大学 Tow 数字新闻中心的研究主任 Jonathan Albright 发表了一份令人惊讶的研究报告,研究了脸书平台上有多少俄罗斯广告被分享。
使用脸书自己的分析工具和俄罗斯广告购买账户的名称,奥尔布赖特估计他们的内容在平台上被分享了 3.4 亿次。这超出了过滤气泡的范围,是尼亚加拉大瀑布大小的洪水。
下个月,我将写一篇文章,分析由于数据驱动平台,仅仅 3000 个广告如何影响数百万人及其选举决定。我将在今年年底结束我的关于对抗和击败 AI 武器化的方法的系列文章。
但除了俄罗斯的坏演员之外,如果该平台的数据模型没有被设计成篡夺人类行为,那么在我们上次选举中主导社交媒体平台的俄罗斯广告、虚假和阴谋内容的野火蔓延就永远不会发生。这不是偶然。*这些模型的设计是基于一些最普遍的、激励人类行为的偏见。*他们被设计成利用我们的偏见来对付我们。
如果没有一个名为可用性级联的非常真实的认知偏差,俄罗斯的广告可能会失败。简而言之,可用性级联是人们仅仅因为看到重复而相信某件事的倾向。谚语“重复某事足够长的时间,它就会成真,”描述了人们仅仅因为听到很多就不得不相信他们所听到的倾向。
前脸书工程师 Antonio Garcia Martinez 对 Buzzfeed 谈到脸书在 2016 年选举中的共谋时,放大了 Pariser 的金丝雀叫声,w :
“我认为,民主是否能在脸书和所有其他类似脸书的平台上生存下来,这是一个真正的问题,”他说。“在脸书这样的平台出现之前,人们通常认为你有权保留自己的观点。现在,它更像是对自己现实的权利。”Buzzfeed 前脸书工程师。
你可以说这些都是利用工具做坏事的坏演员。事实上,这是脸书一开始反复说的。
雪莉·桑德伯格,首席运营官脸书公司说,直到 2017 年 10 月,“在我们的内心,我们是一家科技公司,我们雇佣工程师。我们不雇佣记者,没有人是记者,我们不报道新闻。”
但是越来越清楚的是,不仅仅是坏演员搞乱了脸书的模式。它远不止如此。
脸书坚称自己是一个平台,而不是内容出版商,这显然是错误的。一旦平台决定选择人们消费的内容,它就成了出版商。内容是否由平台创建并不重要。脸书创造了它的消费渠道。该公司使用数据驱动模型来决定哪些内容更好地提供给用户。
正是人们消费内容的欲望,大概是为了让他们留在平台上,并帮助他们赚取广告费,让该公司陷入了未知的道德困境,纠结于如何在保持平台纯净但受欢迎的同时,停止向他人传播仇恨言论、种族主义内容甚至辱骂性语言。
脸书现在正在创建程序来防止滥用其平台,但要解决这个问题,还需要发展一些基本信念。
一个信念的改变是根本性的:使用这些数据驱动工具的公司必须将自己视为世界和现实的设计师、创造者。
作为设计师,我们必须看到我们在这一切中的积极作用,不要再认为自己是一个被动的平台。
另一个需要发生的范式转变是更深入地理解人性,以及人类如何互动、使用数据驱动的工具以及受其影响。
当然,这也是需要道德准则的地方。
专家表示,科技公司及其“以量化为中心”的文化让社交媒体巨头对其数据驱动模式的后果视而不见。但是也有一种危险的想法,认为数据驱动的工具本身是无害的。坦率地说,这不是真的。这个工具并不比创造它的人更无害。正如我所展示的,这些模型是由人类创造、设计、训练和测试的。这意味着所有制造它们的东西都带有人类的特征。以不同的方式断言,就是无视事实。
但是,除了过滤泡沫和被操纵的产品,数据驱动的模型本身也可能造成大破坏。他们对效率的关注导致一些决策数据驱动模型将极端主义直接注入未知的地方。这里的关键是它是工具本身的一个公开动作。不是什么意外的后果。当然,这是真正的危险。
人工思维创造真正的行动
以谷歌的 YouTube 算法为例。嗯,它是专有的,所以你必须根据专家认为它是如何工作的来使用它。数据驱动模型不仅仅是根据用户的请求向他们分发内容。而是一旦算法学会了。它决定胜过用户。YouTube 的算法开始推荐与搜索请求相关的视频,但让直到几年前还被留在上午电台黑暗角落的内容浮出水面。
正如《纽约时报》、《T2》、《财富》杂志和《华尔街日报》、所详述的,谷歌的 YouTube 算法产生的内容结果远远超出了用户的要求。由于无法辨别推荐内容的类型,这种数据驱动的模式提供了用户原始搜索请求的极端版本。
它不再只是返回你所要求的,而是开始“推荐”它认为是内容的东西。《华尔街日报》的一项调查发现,这些内容比用户要求的要极端得多。
因此,像亚历克斯·琼斯、迈克尔·萨维奇、迈克·德拉吉这样的人,这些只被小部分听众所知的人,通过早上的广播和电视购物节目,突然开始在 YouTube 上显示足球妈妈的推荐列表,寻找当天的新闻信息。
例如,《华尔街日报》的工作人员进行了一项搜索“联邦调查局备忘录”的实验,当天的新闻都是关于共和党发布一份关于特朗普竞选期间情报官员行为的备忘录。结果是:
在 YouTube 上,在主流新闻来源的小缩略图之后,最热门的结果来自 BPEarthWatch,它自称“致力于观看导致我们的主耶稣基督回归的末日事件。彗星、小行星、地震、太阳耀斑和末日力量。”
他们还指出:
还有来自 Styxhexenhammer666 的视频,其信息页面上简单地写着,“我是上帝”,还有来自经常宣传阴谋论的网站 Infowars 的创始人亚历克斯·琼斯的视频。
如果我错了,请纠正我,但我从未听说过 BPEarthWatch,它们听起来肯定不像有人在键入“FBI 备忘录”时要找的东西。
脸书、推特和谷歌并没有恶意构建这些算法。但是他们忽视潜在危害的能力是一个重大错误。那么,我们究竟如何防止这种情况发生呢?
防止 AI“不可知无害”
除非你坚定地在军事、炮兵、轰炸或其他以死亡为中心的行业工作,否则你设计一个故意伤害人类、以数据为燃料的工具的可能性很小,但并非完全不可能。
这是无意的,无意的后果,对我们这些没有生活在边缘的人来说是危险的。这就是一套共享的道德准则最有用的地方。
如果没有一个有意的伦理讨论,无论是项目还是设计,技术人员、工程师和设计师都有落入狂妄自大的人性陷阱的风险,我把艾称为“不可知论无害”
不可知论无害是这种信念,因为模型使用数据,它免除了人类的弱点。在这篇我写的关于人类理想为中心的设计的中间文章中,阅读更多关于不可知论无害以及如何设计我们摆脱这种哲学的方法。
在这个领域工作多年后,首先作为一名记者做数据驱动的报道,现在作为一名设计研究员研究数据驱动的系统,我发现要想设计对人类的伤害最小,必须将道德准则融入创造过程。
伦理,即控制创造的是非观念,必须尽快解决。整个创作过程,然后把我的作品展示给一个伦理小组是不好的。一旦项目、想法、平台或产品实现,需要一个对人类行为有深刻理解的人在房间里,卷起袖子,准备与工程师、技术专家和数据科学家一起创造。
对一些人来说,答案是教会算法如何应对伦理困境。对我来说,这没有抓住重点。设计这些数据驱动模型的人必须首先进行伦理讨论。机器向我们学习。(至少目前如此……)
我研究这些模型已经四年多了,我发现有一些实用的、具体的道德准则,我试图遵循这些准则来确保无意的行为不会从无害变成有害。
从完全自愿但绝对有效的《新闻道德颂》(感谢职业记者协会)中得到启示,我精心制作了一个类似的道德框架,帮助我穿越大数据和设计的雷区。
这些道德准则并不意味着涵盖所有可能的情况。事实上,它们根本不是严格的指导方针。它们更像是谈话的引子和开始探索的话题,让你和你的设计团队走上无害的道路。
这些指导原则旨在当你抓住一个数据驱动的设计项目时充当煤矿中的金丝雀。
它们源于一个基础的地方,在那里善意是假定的,而故意消除有目的的坏行为者的愿望是你的核心。换句话说,我假设你从一个善良的地方开始。
如果数据挖掘收入数据的想法试图将穷人从获得房屋贷款中划出来,这让你想“嗨”,那么你就是我们这种数据设计师。其他人都寻求心理咨询。
让我们开始吧。
什么是伦理,什么不是伦理
要发展伦理原则,最好对什么是伦理原则有一个很好的理解。简单来说,伦理原则就是一个群体、文化、组织、行业或职业普遍认同的行为规则。它们是有共同点的人同意遵守的规则。(关于“伦理简介”,请查阅西蒙·布莱克本的《做好人》。"
谈到道德,人们喜欢用的最著名的例子之一是希波克拉底誓言。但那甚至是有问题的。因为它犯了一个常见的错误:混淆伦理和道德。(旁注:你读过经典的希波克拉底誓言?这是一个相当有趣的使命宣言。)
Wikipedia.com
该誓言以希波克拉底命名,希波克拉底是一位生活在公元前 460-370 年的希腊医生,其中蕴含了一些有趣的原则。当想到誓言时,大多数人会想起“首先,不要伤害”这句话,但当然它并没有确切地说“不要伤害”更像是,“让[病人]远离伤害和不公。”听起来不错。继续读。
如果你想了解伦理和道德原则之间的区别,那么看看医学誓言的经典版本和 1964 年由塔夫茨大学医学院院长路易斯·拉萨纳写的新的现代版本。(美国医学协会已经提出了一个更长的道德准则,在道德上不那么说教。)
经典的誓言将道德融入到既定的行为准则中。它说,宣誓者“既不会给任何索要致命药物的人,也不会提出这方面的建议。”
等等什么?禁止医生协助的自杀被写进了誓言。这是一种道德立场。一种偏见认为,即使人们要求结束生命,医生也不应该结束生命,尽管他们可以这样做。请继续阅读。
下一句经典的誓言说,“同样,我不会给一个女人流产的补救措施。我将保持我的生命和艺术的纯洁和神圣。”
说什么?是的,最初的希波克拉底誓言禁止医生辅助堕胎。甚至更偏向。
多年来,人们对誓言中的这两句话争议颇多。学者们说,大多数医学院和医生甚至没有意识到誓言中蕴含了多少道德;包括反复提到上帝、神和女神。20 世纪 60 年代,一个更加现代的誓言版本诞生了,它淡化了宗教含义,转而使用了更具思想性的语言。它包含了像“在生死问题上我必须小心行事”这样的短语。
正如你所看到的,创建伦理原则是一门艺术,既要提倡不伤害他人的最佳实践,又要忽略特定的道德标准和依赖于不具普遍性的尖锐观点的行为。你必须清楚,但不要太具体。你必须包容一切;但仍然具有普遍性。
从设计伦理到数据设计伦理
考虑到这一点,我们如何才能设计出对社会利大于弊的道德数据驱动产品呢?
好吧,让我们从作为以人为中心的设计师的原则开始。我们作为以人为中心的设计师最看重的是什么?
在 IDEO,我们说我们希望通过设计创造积极的影响。我们通过以人为中心的设计方法做到这一点,我们的首席执行官蒂姆·布朗称之为“设计思维”这种方法产生了一些设计的原则,包括:
- 透明度
- 参与性
- 上下文的
- 可持续的
- 改变的
- 鼓舞人心的
我认为,当处理由智能数据系统的创建或使用支持的设计项目时,这些设计原则不会改变。
有了这些作为指引,我就有了我所谓的“数据设计原则”这些是开始广泛探索主题的特定桶,将帮助您得出关于是设计数据引擎还是放弃的结论。
如果这些类别提出的问题的答案不是你想要的,让你觉得恶心,或者违背了你作为设计师的职业道德,那么你可能不应该设计这个数据引擎。
如果你这样做了,你需要制定协议,故障保险和调整,以确保你创造的东西,当规模扩大时,不会回来困扰你或其他任何人。在这些必须探索的类别中,有一些是我在涉及智能系统及其与人类的交集的项目中必须问的问题。这些类别和问题是:
以人为本
我创造的东西是以人类需求为中心的吗?它会为人类服务吗?它会让人类做得更好,成为更好,变得更好吗?简而言之,是以人为中心吗?如果不是,重新思考解决方案,使之成为现实。
保护隐私
我创造的东西会侵犯他人的隐私权吗?如果会,他们是如何被通知的,会受到什么影响?他们可以使用该产品并维护其个人隐私权吗?如果没有,他们知道他们牺牲了什么吗?获得的东西真的和基本的隐私权一样有价值吗?或者是给予和获得的交换是不平衡的。
保留身份选择
我创造的东西会剥夺一个人的匿名性吗,如果会,为什么,如何,会有什么后果,这是可以接受的吗,如果不可以,有什么方法可以防止吗?
创造安全
我创造的东西会伤害别人吗?如果是,如何以什么方式,为什么?有人能轻易地利用我创造的东西去伤害别人吗?有办法防止这种情况吗?我如何建立制衡机制来防止滥用和误用?
交付股权
我构建的东西可以用来伤害一个受保护的类吗?以什么方式?我建造的东西不包括人吗?为什么?我的设计公平吗?它是否以特权为出发点,永不偏离?我的模型能同样适用于不同种族、民族、背景和收入的人吗?
从良好的预期用途开始
该工具是否有预期的无害用途?即便如此,它最终会造成伤害吗?对谁,以什么方式?你如何防范虐待?我是否有检查点和里程碑来迭代和检查嵌入在设计中的模型?五年后我的模型会被如何使用?10?我怎么知道?
强调透明度
别人能追踪到我是如何创造这个数据驱动的产品的吗?我的过程听得见吗?有没有人可以追溯一下,了解一下我的模型是怎么创建的?如果不是为什么?所有相关人员都知道我创造了什么吗?如果是为什么不呢?
坚持法律的精神
我的工具合法吗?它是否违反了法律的条文甚至精神?除隐私之外,它是否遵守其他国家、州、联邦和国际法律?
将伦理融入人工智能和智能系统设计还有很多工作要做。这是一个复杂的问题。但是我们不能再假装数据是无偏见的。是人创造的。它有它的问题。任何根据数据创建的模型都可能存在这些问题。
我的深度学习求职面试经验分享
最近,我正在寻找一份关于机器学习或深度学习的工作,直到今天,我已经面试了 6 家公司,也许还有更多(希望不需要更多)。也许我的经历可以帮助到像我这样的人,所以我决定写下来和大家分享。
让我简单介绍一下自己,我叫 Justin,来自中国广州,正在面试一些中国公司。我不是 CS 的学生,2015 年毕业,但是我自己直到今天才开始学习机器学习和深度学习。我认为我已经准备好进入人工智能行业,所以我在 2017 年 2 月辞去了之前的工作。好了,来看看我的经历吧。
第一家公司:以市场调研和信息处理为目标
这家公司还没有深度学习团队,他们想建立一个团队来做一些信息处理,但他们不拥有这些数据,他们只是购买数据或从互联网上下载。在访问这些数据后,使用机器学习对其进行处理,并将结果出售给其他公司。
我不认为他们会做得很好,因为 MLaaS 没有未来,更糟糕的是他们不创造自己的数据,所以我对这家公司不感兴趣。
面试官是 CTO,他一开始问了我之前工作的一些情况,然后问我会不会用 tensorflow。他没有测试我在机器学习或深度学习方面的能力,只是给出了一张关于他们要用深度学习做什么的图片。我觉得 CTO 不是很懂 ML 或者 DL,只是想建立一个团队。但是通过交谈,他给了我一个信号,公司不能支付太多的工资来雇用我,而且,两天后,他打电话给我说:哦,你的能力和我们的工作不太匹配,只是匹配一部分,让我们面对面地讨论你的工作和工资,如果你这几天很忙,慢慢来,我们不急着雇用你!
说实话,听到这个消息后我并不怎么舒服。
第二家公司:利用计算机视觉瞄准农作物病害检测
这家公司有一大片稻田,他们的员工每天都检查庄稼,看看庄稼是否有病虫害。我对他们将要做的很感兴趣,因为人工智能在农业上的应用很少。而且,他们有自己的数据(paddy)。他们想做的是用相机给庄稼拍照,用 CV 检测庄稼上是否有害虫,或者庄稼是否变黄。
但最大的问题是,他们没有任何技术团队!甚至他们都没有网站工程师!因此,面试官不能问我任何技术问题,她只是征求我对如何实现他们的目标的意见,并真正欣赏我能做什么。
但是她没有再打回来。
第三家公司:自动化创意
该公司是一家 SaaS 公司,他们的服务之一是为用户提供大量的图片元素,以创建自己的新海报或网站横幅。最棒的功能是,系统可以根据用户提供的一条描述语句生成一张新的图片!这是图像字幕的另一面,采访者说他们已经创建了一个演示版本,但不知何故,根据我们的整个对话,我不这样认为。
面试官是一个女孩,她的年龄和我差不多,我能看出她是 CS 专业的,那是因为她总是测试我关于数据结构和算法的知识!也没有问任何关于 CNN 或者计算机视觉的问题!关于机器学习的唯一一个问题是关于 k-means 的算法原理(感谢上帝她终于测试了我的 ML 知识),我不能很好地回答她的数据结构和算法问题,因为我不是 CS 学生,但也许我以后会学习那个。
最后,她说他们想要一个简历深度学习方面的专家,最好有 5 年工作经验和博士学位。也许他们正在寻找谷歌,脸书工程师?
第四家公司:瞄准互联网和大数据安全
这家公司我不太了解,但我想他们为政府或其他公司提供网络安全服务。经理说每秒大约有 6T 数据通过他们的设备!有了这么大的数据量,他们想从中挖掘有用的东西,所以他们需要机器学习团队来做这件事。
有三个面试官,一个是经理,他只是坐在那里听我们的谈话。另外两个面试官是 ML 团队成员,基本上我和他们交谈。跟我聊的最多的女生是 CS 方面的高手,她问我一些机器学习的算法,比如 k-means,random-forest,决策树,但是很少问我深度学习。她说,该团队目前不使用深度学习,但他们以后会考虑应用深度学习。
实际上我们当时谈得很好,我展示了我在深度学习方面的知识,我们就他们所做的事情交换了一些看法。遗憾的是,后来我没有接到他们的电话,也许他们需要传统的 ML 工程师,或者也许我没有记住一些 ML 算法的细节,让他们认为我不擅长这个。但是它提醒我复习那些 ML 算法。
第五公司:融资公司
这家金融公司想招聘 NLP 工程师,尽管我是 CV 专业的,他们还是邀请我去做了一次演讲。面试官是专业的,大概是 CS 高手,他在数学上考我很多,让我做一些公式推导,比如给我一个简单的线性模型,让我写下 W 和 b 的显式解,原谅我我暂时不知道怎么做,但是我还在学习公式推导。
然后,他问了一些问题,有些很有趣:
- 我们都知道不应该把初始权重设置为零,但是在什么情况下,可以把它们设置为零呢?
- 动量、RMSprop 和 Adam 的数学原理是什么?
- 那些 imagenet 赢家机型有什么区别?
- 你渴望实现论文中的技术吗?如果你做了,你认为你的数学水平能应付吗?
- 嵌入层有什么用?为什么我们需要这一层?
总之,面试官想测试我的数学知识,我承认我现在做得不太好,但我会继续学习。
第六家公司:像亚马逊这样的电子商务公司
这家公司有大量的数据,如电子邮件,图片,卖家每天上传到他们的服务器。他们的人工智能部门希望自动检测图片并进行一些图片处理,以便公司可以节省大量的人力成本来进行图片处理。
面试官是实用主义者,他让我介绍一些我最熟悉的算法细节,没问题。然后,他问我对 CNN,backprop,SGD 的直觉,以及 keras 和 theano 之间的区别,我可以处理这些。
他让我印象深刻的一点是,他不会要求我只用一两个工具来建立模型,只要我能解决问题,不管你用哪个框架,不管你用什么编码语言,那都 ok!
总之,我认为这是我经历过的最好的一次面试,看来面试官对我的表现很满意,也许那天我会有好运。
以上是我所有的采访经验,如果我有后续的采访,我会和大家分享,如果你有什么想谈谈你的经验,我们很乐意听,希望我们的经验可以互相帮助!这是我在 medium 的第一篇博客,我会在接下来的日子里写更多,请给我一个赞或关注!
我的深度学习求职面试经验分享(二)
面试了 6 家公司之后,我拿到了第 6 家公司的 offer(你可以在这里回顾我的面试经历),之后就再也没有其他面试了。实际上我应该在 2 周前发表这篇文章,但是我想在正式接受邀请之前分享更多的细节。
这次我不打算谈论我的面试经历,因为我没有更多的面试机会。但是我要分享一些其他人的经验,因为上一篇文章引起了一些讨论,有人在 fast.ai 论坛上分享了他们的经验(可以查看原帖),我觉得真的很有帮助,我们来看看吧。
Benedikt S:
- 我觉得工作要求比他们找的要高。有 5 年工作经验的博士生没那么多。他们可能会查看脸书、亚马逊、谷歌等公司的职位描述。并且抄袭了要求。
- 在我的面试中,有人问我不知道的机器学习算法。我的回答是“我不知道——有这么多算法,如果你给我定义,我可以向你解释它是如何工作的”。和/或提出了另一种算法,它解决了同样的问题(有许多分类算法)。当然你应该知道像 k-means 这样的基本方法,但是我相信诚实比猜测要好。就我而言,我得到了这次面试的工作
- 如果他们没有深度学习团队/没有这方面的知识——我向他们解释了巨大的优势。谷歌在两年内从大约 10 个项目发展到超过 2000 个深度学习项目。优势在于,全世界都在谈论深度学习。我向他们展示了我的兴趣+关于社区的额外知识。我向他们解释了如何使用深度学习来解决他们的问题,例如基于隐藏层的图像相似性。
- 我知道,我的简历只包括项目/主题。我尽量把对话保持在我擅长的这些领域,而不是让他们问任何关于机器学习/计算机科学的问题。我试图向他们解释,这项工作是将理论应用于现实世界的问题,而不是重新发明轮子……许多问题可以用当前的框架解决,而不必从头开始实现一切。
我的回答是:
“我特别同意你的最后一点,我们应该把话题控制在我们擅长或熟悉的领域,你知道吗,我只是回答他们问的问题,所以他们总是找到更多不同的话题,因此我被困在我不太熟悉的领域。”
刘志军:
谢谢大家分享经验。我看了你的博客文章,想分享一些见解。我经营一家小型数据智能公司,最近我在中国上海为一家物联网公司部署了一个深度学习原型。
看了你的博文,我觉得这不是一个“框架”与“无框架”的问题。中国的招聘人员自然对千篇一律的投资组合项目持怀疑和警惕态度。尤其是因为深度学习仍然非常新,没有多少公司拥有成熟的基础设施和流程。
如果有的话,你的招聘人员可能会惊讶于你能从 fast.ai 中学到多少东西!
我的回答是:
“的确,fast.ai 拥有我们在深度学习中需要知道的一切!”
其实我从 fast.ai 学到的知识,对我现在的工作真的很有帮助。例如,我的一个新项目是检测照片中是否有人,这是一个经典的图像检测问题(或分类问题,1 代表是,0 代表否),我可以使用 keras 进行快速建模来测试这个想法,你可以简单地微调 VGG\ inceptionV3\resnet 模型来获得一个不错的结果,然后你可以尝试不同的方法来获得更好的结果。
fast.ai 课程还教会了我们在文本分类问题中使用 CNN,这样我就可以用 CNN 来解决我的第二个任务——邮件分类。我不得不说 fast.ai 在我的新工作中帮了我很多,这是一个很好的“深度学习在行动”课程,如果你感兴趣,你可以查看 fast.ai 网站。
我作为数据科学妈妈的经历——数据让我感动
我最近在霍特国际商学院(Hult International Business School)的首届科技大会(Boston)的一个小组中发言,有人问我作为一名女性在数据科学领域的经历。的确,如果每次有人说:
你获得了数学和统计学的学位?奇怪,女人通常不擅长数学。”
我有足够的钱去买至少几杯咖啡,但是我跑题了。关于我作为一名女性的个人经历,我有很多话要说,但我想把这篇文章的重点放在作为数据科学领域的家长的积极方面。
总的来说,我认为我很幸运处于我的位置,我们正朝着正确的方向前进,让父母更容易平衡工作与生活,尽管速度很慢。
有时候,我确实觉得自己已经“拥有了一切”,而另一些时候,我很确定自己只是勉强支撑着。当然,这是我的经验,对每个人来说都不一样。但这里有一些作为父母在数据科学方面积极体验的亮点。
工作弹性:
我有一定的灵活性,可以提前离开去参加(比如)我女儿的舞蹈表演彩排,或者如果我需要换油或跑腿,可以延长午餐时间。如果需要的话,我可以在家工作(因为我的儿子已经感染了这个季节的第一百万次耳部感染),这不会给我带来压力。我并不担心人们对我的看法会因为我在某一天在家工作而减少。
在我职业生涯的这一点上,我对一个项目需要多长时间有一个相当好的想法,并且我可以清楚地设定期望。我知道我需要多少时间来自信地满足最后期限,或者我可能需要多少时间来研究方法,我对此很坦率。还有,我不是医生,所以没有人的生命危在旦夕。我不在一个像财务部一样在月末或某个季节忙得不可开交的部门。这一切都保持压力相对较低。
带薪产假:
当我怀上我的第一个孩子时,我加入了一群 facebook 群,这些群中的女性也在同一时间怀孕,所以我们可以谈论怀孕的一切。当我意识到有多少妇女没有带薪产假时,我震惊了。大多数休产假的女性都不在美国,在这些群体中,只有少数来自美国的女性休产假时有工资。
如果出现一些并发症,导致女性提前失业,她们会担心自己的工作,因为 FMLA 只为你提供 12 周的服务(无薪)。我知道,根据公司的政策,我将获得 10 周假期,如果我想在假期结束时增加休假时间,我的老板绝对不会质疑。
我也不担心因为怀孕/分娩相关的原因丢掉工作。部分原因也是因为目前对分析和数据科学的需求如此之高。如果我丢了工作,我可以再找一份工作。
吸引顶尖人才的大型科技公司正在提供产假(这是今年早些时候写的一篇文章的链接: link ),这鼓励了其他想要争夺人才的公司也提供某种形式的产假。很明显,小公司不太可能(也不太有能力)提供假期,这取决于公司/行业的具体情况。我很幸运,有两次带薪产假(我只有两个孩子),我在这个领域的工作部分归功于这个*。*
兼职:
有了第一个孩子后,有一段时间我选择把作息时间减少到每周 4 天,老板(和公司)都很支持。当我一周工作 4 天的时候,我甚至得到了提升。当然,我争取了晋升,但我没有被忽视,因为我是一个兼职工作的新妈妈。我再次将部分归因于为一家非常进步的公司工作,该公司正试图与一些顶级科技公司争夺人才,而市场对具有这种技能的人的总体需求正是如此。我也完全理解其他工作/领域可能会提供同样的经历。
总结:
我一直在学习,并被鼓励继续学习。这对我的灵魂有好处。让这一切成为可能的一个重要因素是,我在面试中提出的问题会让我深入了解公司文化,我真的在寻找适合我的父母。我希望你和我一样热爱你的工作。做父母和全职工作对任何职业来说都是挑战,但我发现这种灵活性为我自己和我的家庭带来了巨大的平衡。如果你是一个女人,而且你数学很棒,不要让任何人告诉你不是这样。
如果你想订阅我未来的文章,你可以在这里订阅。
原载于 2018 年 7 月 3 日 datamovesme.com。
我参加 Kaggle 数据科学碗 2017(肺癌检测)的经历
3D reconstruction in all three axes
简介
我参加了 Kaggle 一年一度的数据科学碗(DSB) 2017 ,很想和大家分享我激动人心的经历。首先,我想强调一下我对这场比赛的技术方法。这是我们面临的问题:我们必须从高风险患者的低剂量 ct 扫描中检测肺癌。本质上,我们需要预测患者在接受扫描后的一年内是否会被诊断为肺癌。
我认为竞争尤其具有挑战性,因为与一个患者(单个训练样本)相关的数据量非常大。因此,这使得很难将 3D CT 扫描数据输入到任何深度学习算法中。由于最近的流行,我真的想应用最新的深度学习技术。然而,我很快意识到,我们只是没有足够的数据来从头训练大型深度学习模型。所以,唯一能让我训练深度学习模型的方法就是把这个问题进一步分解成更小的子问题。
肺分割
所以首先要做的是。我想用传统的图像处理算法从 CT 扫描中剔除肺部。使用阈值和聚类,我想检测肺部的 3D 结节。发现肺部的恶性结节是至关重要的,因为这是放射科医生为患者检测肺癌的主要指标。按照这些 Kaggle 内核中的代码(圭多·祖德霍夫和阿纳夫·贾恩),我很快就能够预处理并从 CT 扫描中分割出肺部。看看下面的图片。
Segmented lung and its internal structure
在进一步分析数据后,我意识到使用简单的阈值来检测结节并将其用于特征提取是不够的。在我们从这些候选结节中提取特征之前,我需要一种方法来减少假阳性。
使用 LUNA 数据的结节检测
这个竞赛允许我们使用外部数据,只要这些数据是免费提供给公众的。因此,我决定探索在 Kaggle 论坛上提到的LUngNodeAanalysis(LUNA)Grand Challenge数据集。该数据集提供了由多名放射科医师注释的 CT 扫描中的结节位置。了解结节的位置使我能够建立一个可以检测图像中结节的模型。为了简单起见,我决定建立一个 2D 卷积神经网络(CNN)来预测图像是否包含结节。我遵循了与这里的Sweta subra manian记录的完全相同的方法。
CNN architecture of the nodule detector
该 CNN 模型的输入是 64×64 灰度图像,它生成包含结节的图像的概率。使用这个 CNN 模型,我能够在 LUNA 验证数据集上实现 85.38%的精确度和 78.72%的召回率。以下是一些从 LUNA CT 扫描数据中截取的样本图像。
True Positive (Top) and False Positive (Bottom) sample images of the LUNA validation set
最终 XGBoost 模型
我从初始分割方法中生成的每个候选结节,我能够从其中心裁剪出一个 2D 补丁。
通过将训练好的 CNN 模型应用于这个 2D 斑块,我能够排除没有产生高概率的候选结节。所有剩余的结节用于生成特征。最终的功能集包括:
- 结节面积、直径、像素密度和结节数量
- 来自已训练 CNN 模型的最后全连接层的聚集特征
- 预训练 ResNet 模型的最后一个全连接层的聚合特征(此处描述的迁移学习方法)
- 与 CT 扫描相关的简单特征(即分辨率、切片数量、切片厚度)
利用这些特性,我能够建立一个 XGBoost 模型,预测患者被诊断为肺癌的概率。使用我的最佳模型,我在 stage2 私人排行榜上获得了 0.59715 的对数亏损分数。作为参考,我想强调的是,获胜团队的对数损失分数为 0.39975(分数越低越好)。
结束语
有几个方法我真的很想尝试,但是由于时间限制,没有时间去实现。具体来说,在使用 2D CNN 看到有希望的结果后,训练 3D CNN 来检测结节将是我的下一个方法。看起来许多获奖的解决方案成功地利用 3D CNN 利用 LUNA 数据检测结节。我对结果很满意,因为我能投入比赛的时间有限。总的来说,我试图尽可能地利用现有的工作,以便我可以专注于挖掘更高层次的功能。这是一种在短时间内学习最新机器学习技术和工具的极好方式。源代码和 python 笔记请参考获取我的 GitHub 页面。
Udacity 人工智能工程师纳米学位概述,术语 1
完完 Udacity 深度学习基础我感觉深度学习入门很好,但是要理解事物,必须深入挖掘。除此之外,我还获得了自动驾驶汽车工程师、人工智能或机器人纳米学位项目的保送。
退后…
在我转到 Udacity 高级课程之前,我想在开头提到一件事。如果可以给自己提建议,我会选择另一门关于深度学习的入门课程——吴恩达的深度学习专业化。首先,他的指导方式是独特的,他能以最清晰易懂的方式解释复杂的事情。第二——它比 Udactiy 便宜,而且我有一个印象,你花同样的钱可以得到更多。
另一个非常好的选择是杰瑞米·霍华德的《程序员实用深度学习》。这是免费的,它涵盖了与 Udacity 深度学习基金会相同的方面。
…让我们继续
我决定留在 Udacity 学习平台,学习它的一门高级课程。对我来说,最有趣的课程是人工智能和自动驾驶汽车工程师。
自动驾驶汽车工程师
我发现了很多关于这个项目的好博客和帖子。我最喜欢的是来自 Mithi 的——查看这个帖子,它真的很棒。
我的印象是这门课程非常有趣,要求也很高,但在完成这门课程后,我在德国找不到一份“自动驾驶汽车工程师”的工作。是的,有宝马、戴姆勒、大众和奥迪,但是,据我所知,它们要么需要强大的工作经验,要么更喜欢“真正”大学的应届毕业生。他们不承认在线课程——它们(还)没有建立。
其他想法——从我的工作经验来看,我知道一个软件在模拟器和真实的硬件上可以有不同的表现。对我来说,开发一个汽车软件而不进行广泛的测试是有问题的。
人工智能
令人惊讶的是,我发现关于人工智能程序的评论很少,这让我有点害怕。从另一方面来说,内容对我来说非常有前途——我不仅想学习现代神经网络和深度学习技术以及它们的工具,还想学习基础知识。最终,人工智能不仅仅是一种深度学习,它更古老,并能提供真正好的结果,而不像神经网络那样需要那么多数据。所以我决定报名参加这个课程。
人工智能工程程序、结构
Udacity 人工智能工程师 Nanodegree 由 2 个学期组成,每个学期需要 3 个月才能完成。它不是自定进度的,你有完成项目的最后期限。这并不适合每个人,但对我来说,这是一个学习和保持动力的完美方式。
你可以只选第一项,跳过第二项,但不能反过来。只有在成功完成第一学期后,您才能注册第二学期。只有学完两个学期,你才能拿到证书。每个学期 800 美金,绝对不便宜。
你有一个专门的导师,在你遇到困难时为你提供支持,或者在你迷路时给你指明方向。社区真的很棒!无论是在 Slack 还是论坛上,你澄清任何你需要的东西,你永远不会卡住:-)
作为一名纳米学位学生,你还可以访问 Udactiy 职业门户网站,在那里你可以获得有价值的信息、资源链接、建议以及检查你的在线简介和简历。
术语 1,人工智能的基础
第一学期称为“人工智能的基础”,教你在深度学习和神经网络普及之前就已经知道的基础知识和技术。不包括常用材料(设置、介绍等。),它由 3 个部分组成,每个部分的结尾都有一个期末专题。每个部分依次由 4 到 5 个主题组成。
视频讲座结构和导师
视频讲座的结构与 Udacity 一样,每个主题都有许多简短的视频,其中有解释,中间有小测验,最后有支持资源的链接。有些主题在结尾也有可选的迷你项目。我强烈建议完成它们,尽管这需要时间。
大多数课程都是由佐治亚理工学院的萨德·斯塔纳和谷歌的彼得·诺维格教授的。他们很擅长解释,但不如吴恩达——这是我的个人观点。
第一节。游戏代理
在第一部分中,您将学习到一些算法和技术,如 Minimax 、迭代深化、 Alpha-Beta 剪枝来玩游戏,以及构建 2 个 AI 智能体来解决数独和玩隔离棋盘游戏。
我发现这些材料解释得不好,而且没有支持资源,很难理解。
第二节。搜索和规划
在第二节,首先,你学习不同的搜索算法,如深度优先搜索,广度优先搜索,A 星搜索。接下来的主题是空间探索和避免局部最优,接着是约束传播和逻辑推理。最后一个主题是用以前学过的材料解决一个规划问题。在最后一个项目中,您将创建一个计划员,将货物从始发地机场运送到目的地机场。
在这一部分,解释得相当好,我主要使用了辅助材料来根据需要进行更深入的挖掘。
第三节。概率逻辑
最后一部分是关于概率,贝叶斯网络和隐马尔可夫模型。在我看来,这是三个部分中最有趣的部分。隐马尔可夫模型是萨德·斯塔纳的专长,这反映在解释质量上——它是完美的。我非常喜欢做最后一个项目,手势识别。这一部分对我来说,是作为一个弱势游戏玩家的补偿。
辅助材料
视频讲座基于“人工智能:现代方法”一书,但你不会看到这么多公式,而是导师给你一个直觉,事情是如何工作的。无论如何,我强烈推荐购买或下载它——它很有帮助。
时间消耗
我每周花 10 到 15 个小时浏览视频资料、阅读辅助材料、解决问题和做项目。在我开始第一学期之前,我害怕每周花 20 个小时在材料上,幸运的是时间消耗是可以接受的。
印象
通过讲座,我有一种良好的感觉,我真的在研究人工智能的基础。材料结构良好,总体质量良好。我确实了解了我最初想要的。
第一学期是学习神经网络的良好准备,神经网络是第二学期的主题,我对下一学期相当乐观。
这些知识会有助于在机器学习领域开始职业生涯吗——我不确定。项目很有趣,要求也很高,但这还不够。你需要用学到的技术和算法来解决现实世界的问题,或者你可以开始在你目前的工作中应用它们:-)
第一学期要花 800 美元,这可不便宜。我仍然不确定,这是否值得。这是真的,你获得了实践经验和良好的感觉,基本算法和技术是如何工作的。但是如果你不把这些知识应用到工作中,那就是浪费金钱。
在我故事的结尾——你可以在我的 GitHub 找到所有完成的项目(从 aind- 开始)。在这里你可以找到更多关于人工智能的资源。
更新 16。2018 年 2 月
我已经完成了人工智能纳米学位的第二学期,并在这里总结了我的经验。如果你感兴趣,请看看。
我在 Udacity 深度学习基金会的经历
我最近从 Udacity 深度学习基金会纳米学位毕业,想分享一下我在这个项目中的经历。
动机
经过 20 年在不同领域的纯软件开发,从图像处理到网络应用,在不同规模的公司,从初创企业(其中一家是我共同创立的)到传统的德国企业,我寻找一些新的东西。近年来,我们看到机器学习,特别是人工智能及其实际应用取得了巨大进展。有许多迷人的产品和研究应用了这些技术。因为我不知道它是如何工作的,但我想知道,我决定开始一次进入这个仙境的旅程。
通往 Udacity 的路
我是一个务实的人,对我来说,学习一些东西而不把它应用到实际问题中是很困难的。我在 Coursera 上了数据科学课程,但是对我来说太学术性了。
接下来我参加了著名的机器学习课程,由吴恩达教授。这是进入机器学习世界的一个极好的切入点,我强烈推荐给每个想研究这个领域的人。吴恩达给了我另一个重要的想法——我开始认为机器学习不仅是一个研究领域,也是解决现实世界问题的工具包。
我听说 Udacity 开设了以实践为导向的课程,决定试一试。基本上我想报读 Udacity 人工智能课程,但我觉得自己没有做好充分的准备。幸运的是 Udacity 开设了深度学习基金会,并宣传它是人工智能课程的准备步骤,所以我在 2017 年 1 月申请了(第一批)。
工具作业
作为一名学生,你主要使用 Python 、 NumPy 和 TensorFlow 。我强烈推荐安装Anaconda——它让生活变得容易多了。不要担心——uda city 向您很好地介绍了工具和开发环境。
对我来说,作为一名专业开发人员,很容易就能掌握这些库,我以前没有工作过。
五金器具
我主要在我用了 6 年的笔记本电脑上工作,联想 Thinkpad T510 安装了 Ubuntu。它有英特尔 i5 处理器,8 GB 内存,没有可训练的 GPU。开发模型和修复 bug 已经足够了,但是对于培训来说,它真的很慢。Udacity 为 AWS 提供 100 美元信用,并指导如何设置。我使用 GPU 驱动的 EC2 实例,并在那里训练我的模型。最近,Udacity 正在与 FloydHub 紧密合作,你可以选择使用它来代替 AWS。
课程内容
深度学习基础是关于神经网络,它们的背景和概念。作为一名学生,你只使用 NumPy 从头开始实现简单的神经网络,然后前进到(更)复杂的架构,并使用更智能的库,如 TensorFlow。本课程基本上由 4 个主要部分组成:
- 神经网络介绍,在那里你被教导,什么是神经网络(输入,输出,隐藏层,权重等。),前向和反向传播等基本概念,以及如何构建神经网络。
- 卷积神经网络(CNN)。在这里你会有一个想法,是什么让 CNN 如此特别,他们能够解决什么样的问题(图像分类,图像识别)。
- 递归神经网络(RNNs)和长短期记忆(LSTM)。在这里,您会对 rnn 和 LSTMs 的不同架构有一个印象,并知道可以用它们解决哪些问题(文本生成、语言翻译、自动编码器)。
- 生成对抗网络。甘是相当新的,但他们产生非常令人印象深刻的结果,从字面上看,噪音产生合理的东西。
每个部分都有自己的程序,所以不要期望很深,而是一个广泛的能力概述。然后确定一个最感兴趣的话题(对我来说是 CNN ),并开始研究关于它的更多细节。
学生是如何被教育的
与大多数 Udacity 课程不同,深度学习基础不是自定进度的。你有完成工作的最后期限。课程材料每周分份发布——每周 1 到 2 节课,外加来自 Siraj Raval 的视频短片,此外,你还可以参加他每周的直播课程。Siraj 的内容是免费的,你可以在 YouTube 上查看。
这种教学方式正适合我——我有点懒,需要一些鞭策;-)来自 Siraj 的内容我一点也不喜欢,最后,我放弃了观看他的视频。我知道,有很多人喜欢他的课,但就我个人而言,我做不到。
结构化课程是一种方法,你可以得到某个主题的解释,然后自己解决问题。如果你被卡住了,讲师会提供他自己的解决方案,并解释它是如何工作的。在 GitHub 有练习和解答的源码。
这些课的质量不同。Andrew Trask、Vincent Vanhoucke 和 Ian Goodfellow 提供了最好的课程。主要教练马特·伦纳德已经尽力了,我真的很感激。
作为第一批学生,我运气不好,因为课程材料不成熟,而 Udacity 自那以后取得了很大的进步。我想作为后一批学生,你会享受到更好的质量:-)
附加材料
在每一课中,Udacity 都提供了大量的链接,如果你想深入了解,可以阅读和观看更多的材料。我发现这些链接很有帮助,我读了很多,看了很多,因为我想知道这些东西在引擎盖下是如何工作的。
坦白地说,我期望得到更详细的解释。但是仔细想想——比如说,一个讲师不可能比安德烈·卡帕西更好地解释 CNN。因此,为什么不给出一个粗略的想法,让人们阅读和观看专家提供的额外材料呢?
项目
我总共实施了 5 个项目:
- 预测每日自行车租赁客流量的简单神经网络
- 使用 CNN 在 CIFAR-10 数据集上进行图像分类
- 使用 LSTM 的语言翻译
- 使用 LSTM 生成电视脚本
- 使用 GAN 的人脸生成
这些项目要求很高。作为一名学生,你得到一个准备好的 Python 笔记本和必要的助手函数,并且应该实现神经网络的核心部分。所以你不需要从头开始实现所有的东西,你可以从课程中的练习中吸取很多东西。项目一经提交就得到审查。通常在 1-2 小时后,我会从一个评论者那里得到非常有价值的个人反馈。
唯一令人失望的是第二个项目——在教学大纲中,Udacity 宣传“图像识别”,但随后将其改为更简单的“图像分类”:-(
你可以在 GitHub 查看我的解决方案。
社区
除了论坛,Udacity 还设立了一个 slack 频道,在这里你可以寻求帮助,分享你的成功,给出反馈,报告问题等等。我真的很欣赏和重视这种做法。这个社区真的很棒,你永远不会被问题困住。
Udacity 员工积极参与,他们非常重视您的反馈。这就是材料质量显著提高的原因之一。
需求时间
我花了 4 个月的时间,每周 8-12 个小时完成并毕业。我可以跳过额外的材料,每周花 5-6 个小时。我强烈建议投入时间,多读书,深入研究,并尝试自己创建模型——看到自己的工作如何产生合理的结果,感觉真好!
费用
这门课要 400 美元,这可不便宜。它是否物有所值?对我来说,答案肯定是“是”。我喜欢这门课程,在过去的 4 个月里,我学到了很多东西。此外,如果我为 AWS 计算 100 美元信用,为提交人工智能、自动驾驶汽车或机器人纳米学位项目计算 100 美元信用,那么它的成本不到 400 美元:-),所以这笔钱是很好的投资。
后续步骤
我认为深度学习基础是更高要求的人工智能工程师纳米学位课程的准备步骤。我实现了我的目标。现在我休息一下,很有可能,会申请那门课。最后,我想从纯软件开发转向成为一名机器学习/人工智能工程师,并希望 Udacity Nanodegree 项目能帮助我。
结论
过去的 4 个月非常有趣也很有压力(我有一份全职工作和一个家庭),我享受了很多学习材料、练习、项目和社区,并且肯定会再做一次。
我热情地向初学者和经验不多的人推荐这个基础课程,他们想了解你可以用神经网络解决什么问题,以及如何实际创建解决方案。另一方面,有经验的人可能会觉得这个项目无聊或者要求不够高。
在申请之前,你不仅要准备好阅读/观看课程材料和做练习。相反,如果你想从学习中获得最大的收获,你应该计划时间进行额外的阅读并亲自尝试。
我要感谢 Udacity 团队,让我在深度学习基础项目上有了一次美好的经历。
我在意大利罗马 Pi 学校做人工智能学者的经历
Altare della Patria (Image courtesy: Pixabay.com)
我将从这篇文章的概述开始。在这篇文章中,我将回顾我在意大利罗马 Pi 学校参加为期 8 周的人工智能学习项目时的学习经历和愉快时刻。
这是一个关于激情和努力的故事:)
在 2018 年的黎明,我对自己说,我将超级认真地对待全栈软件工程和数据科学。在数据科学中,我特别选择机器学习和深度学习,因为我已经在这些领域研究了一段时间。你可能会疑惑是什么让我选择了两条路。一个主要原因是,到目前为止,我作为全栈软件工程师和研究工程师在这个行业只有两年多的时间,这意味着我的职业生涯还有很长的路要走。所以在研究和产业之间取得平衡是好的。是啊,这是一个个人偏见的意见,我似乎同意:)
现在我的日常编程语言是 Node.js 和 Python(感谢我毕业后马上工作的公司)。我伸出手指,开始用 Node.js 和 Python 做宠物项目,我在 Coursera 上完成了吴恩达的机器学习课程,我开始学习杰瑞米·霍华德和瑞秋·托马斯的 fast.ai,我开始向卡格勒学习(我复制了相同的代码,并向同行学习:)。有几天,我早上 4 点就去睡觉,第二天早上 8:30 醒来,然后去上班。我不觉得累,因为我对我正在做的事情充满热情(我现在仍然在做,以一种优化的方式;) ).
一个晴朗的夜晚,在工作的时候,我看到了一封来自 Kaggle 的电子邮件,是关于这个迷人的奖学金项目的。这是一个关于在强大的罗马进行的为期 8 周的人工智能研究项目。我的第一反应是,“哇,这太酷了!!!"。首先,这是一个奖学金,你可以免费学习人工智能。第二,它发生在罗马古城:D。我马上查看了链接,并开始阅读网页"皮学校人工智能计划"[1]。
仔细阅读本页后,我对这个项目有一个正面的印象。在我在这一页发现的几个事实中,很少有东西真正引起我的兴趣。
- 这是一个全额资助的项目,包括你的全部课程费用
- 涵盖 8 周期间的生活费用(包括旅行、住宿、食物和基本需求)
- 项目负责人简介Sebastian bratièRES【2】 ——我注意到这个项目的负责人拥有著名的剑桥大学的博士学位,他在人工智能方面有 15 年以上的经验。
- 与行业和大学的合作 —思科、亚马逊、谷歌、卡内基梅隆大学、苏塞克斯大学++
- 我满足:D 的所有最低要求(以及一些优先要求)
我总是寻找新的机会。我总是想扩大我的关系网,我想边做边学。我向同龄人学习,这是一个绝佳的机会。
申请奖学金
在这一点上,我很确定我会申请这个项目。我在网页上填了申请奖学金的表格。然后,项目经理联系了我,向我询问了我的简历和求职信,以推进选拔过程。
我在同一天收到了确认我的申请的回复。我必须回答的一个特别的问题是,“我是否能在这 8 周内都有空”。作为一名全职员工,这是具有挑战性的。然而,我说服自己,如果我有这个机会,我会参加。
面试准备
下一步是准备。申请并不意味着被选中参加最初的面试,但我满怀希望:)坦率地说,尽管我对这个项目有着积极的印象,但我还想了解更多。我看过很多关于新兵训练营的文章/广告,参与者必须付费的研讨会。但这完全不同。这引起了我的好奇心,想多了解一下 Pi 派。
在搜索的时候,我在 Pi School 脸书页面【3】上发现了一个相当有趣的视频。从这个视频中,我了解了很多关于 Pi 学校的愿景和创始人(如果你打算申请这个项目,这是一个明确的观看;)).
在圆周率派的创始人之一马可·特龙贝蒂的几个有趣的陈述中,有一个陈述真正引起了我的注意。这是我爱上的说法之一。*** 重要 ***
“你一生中最重要的会议、你的结婚对象、你的商业伙伴通常都发生在学校里。如果我们需要一所学校来创建世界上最大的有创造力的优秀公司,我们就要建一所”
这就是为什么我们仍然想回到我们的学生时代和大学生活的记忆里的确切原因。我们在学校和大学都有很好的人际网络。我们在学校/大学期间遇到的人在我们的生活中发挥了重要作用。他们以积极的方式塑造了我们。
我继续看完整的视频(花了大约 100 分钟,完全值得)。看完这个视频,我已经成为了 Pi 派的一员。我非常想被选中参加这个项目,我知道现在是我复习线性代数、统计和概率知识的时候了(这些领域在最低要求中有提及)。
几天后,我收到了项目经理的邮件,说我已经进入了第一轮面试的候选名单。我感到很高兴,我想确保我有充分的准备来面对这次面试。项目经理特别要求找到一个合适的地方进行有效的对话(即一个有合适的亮度、稳定的互联网连接且没有噪音的地方)
在面试那天,我确保在面试时间前 10 分钟让自己有时间。我设法为我的采访找到了一个合适的环境。我发邮件给我的面试官说我已经准备好了,在 3-5 分钟内我收到了继续面试的确认。
面试期间
我的第一次采访是与 Pi School 的人工智能和机器人顾问(他参加了 Pi School AI 2017 计划),他目前正在机器人领域攻读硕士学位。问我的第一个问题是,我是否能让自己整整 8 周都有空,我将如何做到这一点。我已经下定决心参加整个 8 周,所以我说服了我的面试官,从我的角度来说,这在技术上是可能的。这次面试检查了我对线性代数、概率和统计以及机器学习概念的整体理解。我被要求解释我的背景,我做过的项目等。我特别强调了我一直在做的 ML 项目。有人问我,我是如何保持自己与 ML 同步的。我大致解释了自 2018 年黎明以来我一直在做的事情。在面试过程中,你可能会面临的一个非常重要的问题是,“为什么你想成为其中的一员?”。我已经为这个问题做好了准备;).我说我渴望成为数据科学专业的人才(我想这在这类面试中很常见:P)。然后我说,我看了脸书大学开学典礼的视频,也看了上一期人工智能项目的视频。我特别强调了 Marco 的这句话,这显然是我成为这个项目一部分的原因。“我一直在寻找机会,而 Pi 学校似乎是一项有利可图的投资”。我向我的面试官传达了这个信息。我可以说这次面试有 80%-85%是成功的。有些问题我本可以回答得更好。反正我是满怀希望的:)
大约 5-7 天之后(如果我没记错的话),我收到了项目经理的另一封电子邮件,称我已被列入 Pi School 人工智能项目的项目总监 Sebastian Bratières 的第二轮面试候选名单。第二天我参加了面试。在准备第二轮的时候,我解决了第一轮面试时卡住的问题。我坚信这是任何面试准备中非常重要的一步。我觉得面试会像第一次面试一样,我们可能会深入线性代数,概率和统计以及机器学习的概念。
我设法找到了一个类似的会议环境,做了和会议前第一次面试差不多的事情。我让自己准时出现。正如我所想的那样,我提出的问题基于线性代数、统计/概率和机器学习概念。在面试中,我被要求写一些公式,还有一点编码。有一个问题会导致偏差/方差以及过拟合和欠拟合,这个问题基于一个真实的 ML 项目。在第一次面试时,我被问了一些贝叶斯定理和贝叶斯网络的问题,我觉得我在第一次面试中会回答得更好。这些是我在准备复试时特别关注的问题。你猜怎么着,它成功了!:D。这就是为什么在最初的面试步骤中练习那些你不能回答的问题是非常重要的。这次采访也很顺利。我再次充满希望:)
大约 3-5 天后,我收到了那封我从一开始就一直在等待的邮件。这是一封来自项目经理的电子邮件,确认我被 Pi 学校人工智能项目选中。我非常兴奋和高兴,因为到目前为止,这是我在 2018 年赚到的最大一笔钱。我签署了最初的合同,并确认我参加这个可怕的计划:D
申请签证
一旦你被选中,下一步就是准备搬迁到罗马 8 周。这个过程取决于你的国籍。也许你不想签证进入意大利。就我而言,我需要签证。大多数时候,这是基于你的国籍。
我想对我的签证过程中给予我巨大支持的项目经理表示诚挚的感谢。我知道这个过程背后有很多 Pi 学校的人。我直接与项目经理联系,他给了我尽可能好的支持来帮助我办理签证(特别是给大使馆的官员写信和在早上 5 点接听电话)。如果你被选中并需要去罗马的签证,请随时写信给 Pi 学校的项目经理,他/她会全程陪伴你。
Pi 学校 8 周
Group picture of the School of AI 18 (courtesy: Pi School media)
我可以在 8 周内写很多东西。我精心挑选了几个,这样你就能知道 Pi 学校在这 8 周里做了什么,参与者做了什么。
Pi School 从一开始就确保向所有参与者提供所有必要的材料。在正式毕业典礼之前(即。6 月 11 日),组织者共享了一个包含学习材料、管理材料和其他相关文档的 Google Drive 文件夹,授予了对 GitHub 存储库的访问权限,为所有参与者创建了 AWS 实例,创建了一个专用的 Slack 实例来促进交流和开放交流,并在“Basecamp”上创建了一个项目管理实例。
在正式开学的前一天,举行了一个隆重的欢迎会,那是一个平静的星期天。来自世界各地的 26 名与会者,即斯里兰卡、意大利、巴西、法国、德国、伊朗、哥伦比亚、希腊、冰岛和哈萨克斯坦。我总是很好奇,想了解更多不同的文化,这种氛围让我很兴奋。
该计划于 2018 年 6 月 11 日正式开始。所有参与者都有所需的基础设施、桌子、椅子、大屏幕、AWS 实例和 GitHub 访问。Pi School 创建了 13 个组,每组有 2 名参与者。每个小组都被分配到一个项目中,这个项目得到了工业界优雅的赞助者的资助。有几个行业合作伙伴。我想强调几个,这样你就可以对 Pi 校园与技术行业的合作有一个总体的了解。几个合伙人分别是思科、亚马逊、索尔多、意大利邮政、 Xriba 和翻译。
我非常荣幸有核心深度学习实践者作为我的工作伙伴。他来自巴西,在巴西一家顶级石油公司工作。他知道深度学习概念的来龙去脉。作为一名人工智能新手,我的工作伙伴是金矿:D。所有参与者都有一项独特的技能,使他们与众不同。这种独特性给了每个团队一个很好的平衡。惊喜不止于此。后来我和我的合伙人知道我们被分配到思科系统公司赞助的项目。我付出了全部的灵魂和努力来获得这笔奖学金,每天我都得到巨大的惊喜:D。这就是为什么我总是相信努力和态度:D :P。态度和努力战胜一切。相信我,:D
从第一天开始,参与者就知道他/她的同伴、项目和预期的交付成果,团队配备了基础设施和讲座指导。
我玩 AI,ML 已经有一段时间了。Pi 学校给我布置的项目和我一直在做的宠物项目完全不一样。大多数时候,我们从 MOOCs、书籍和论文中学习的项目,我们可以找到一个标记良好的数据集(可能是 CSV 或任何其他非常方便的格式)。与这些类型的项目相反,我们都参与的项目有一个显著的独特性。参与者有责任确定/生成他们需要的数据集。所以对于大多数项目(可能是所有项目),没有 CSV 或类似的东西。
我喜欢列出几个项目。
- 设计和开发深度学习工作流来分析加密网络流量(Cisco)——这是我和我的合作伙伴做的项目。帖子的更多信息:)
- ICD 分类(Noovle) —协助卫生当局按代码付费(医疗编码行业)
- 根据用户数据打开电子邮件(回报)—根据用户配置文件预测电子邮件收件人是否可能会打开电子邮件
- 呼叫中心活动 KPI 的异常检测(Covisian)
- 关注无预约顾客(意大利邮报)——预测无预约顾客的年龄和性别
为了保证每个项目的顺利进行,每个人都必须完成一些管理任务。
- 维护项目日志——这是一个谷歌文档,团队维护它来报告他们的日常活动,特别是他们做了什么,结果,挑战和克服挑战的步骤。当准备与项目发起人和导师的周会时,这些日志文件变得非常方便。
- 与利益相关者/导师的周会——根据可用性,安排与利益相关者和导师的会议。在我们的项目中,我们每周与项目发起人 Cisco:)举行会议。在这些会议期间,团队提供了关于他们的项目、他们所面临的挑战以及他们为克服挑战所采取的措施的最新情况。利益相关者和导师通常会提供积极的反馈,并在必要时提出建设性的改变。这些会议非常有助于发展每个公司在人工智能领域的技术目标的亲和力。此外,这是一个亲自了解利益相关者和导师的好机会,因为他们将在参与者生活中的某个时刻发挥巨大作用,可能是作为推荐人、导师或未来的潜在雇主。这些会议持续约 1 小时左右,取决于导师/利益相关者的可用性。Pi School 与每位与会者分享了一份指南清单,其中包含准备这些会议时要遵循的步骤/流程。例如,当展示每周的进展时,分享代码(伪代码)、绘图、图表、公式、模型图、学习曲线、特性使用、模型/任务的基线、模型配置等等。作为一名数据科学从业者,我在准备会议时仍然遵循这些指导方针:)此外,为了避免会议期间出现任何技术问题,Pi School 分享了一份清单,这样就不会有任何延迟,也不会比预定时间要求更多的时间。会议结束后,团队在所有利益相关者之间共享会议记录,以便每个人都知道已经做了什么和将要做什么。
- “全体会议”——这是每周一次的会议。每周四上午 10 点整,Sébastien Bratières 邀请所有参与者分享他们的每周更新。每个团队有大约 5-7 分钟的时间来分享他们的进展、挑战以及他们采取的缓解挑战的措施。由于这是一次公开会议,每个人都有机会了解其同事的状况。
Pi School AI 学者的一天通常从上午 9 点开始。我们享用了免费早餐,然后马上开始项目,在下午 5:30 或 6 点左右结束一天的工作。
白天,我们将 80%以上的时间投入到项目中。在剩下的时间里,我们与其他队友讨论了项目事宜,讨论了人工智能、人工智能初创公司等方面的最新研究工作/论文。几天来,我们有关于人工智能主题的辅导课,强调了最先进的技术和实践方面。Pi 学校的组织者非常鼓励参与者展示他们感兴趣的领域。我的同事们也参加了与 GPU 计算、使用 Python 的最佳机制、GitHub 实践、AWS 和安全漏洞相关的会议。这些会议非常有助于我们学习新的东西,加深我们对已知事物的理解。
我注意到的关于 Pi 学校工作人员的一个特别的事实是,他们是罗马(也许也是意大利)的 AI/ML 积极分子。在罗马,有两个团体(据我所知)在学生、行业合作伙伴和其他爱好者中创造 AI/ML 的意识。这些小组是“TensorFlow X Rome”和“机器学习/数据科学会议”小组。在项目期间,我们有幸参加了由这两个团体组织的活动。此次活动的特邀演讲者来自 Twitter(加州办公室)和 H2O。这次活动给我的收获是免费啤酒和披萨:P .哈哈哈,我只是开玩笑。来自 Twitter 的演讲者做了一个关于情绪分析的会议,并强调了在某些情况下 AI 可能会表现出种族主义,研究人员热衷于纠正这个问题。来自 H2O 的演讲者介绍了 H2O 平台提供的 ML 生态系统,以及他们未来扩展到 GPU 支持平台的计划。
(Image courtesy: Pixabay.com)
“成为一名企业家”,“用人工智能制造产品”肯定是我们大多数人心中的想法。因此,了解它的最佳方式是直接与他们互动(或听成功的故事)。通常这类成功案例的样本量非常小。只有极少数人有故事可以分享,让你从中学习。在 Pi School,我能够与其他参与者交流,他们目前是自由 AI 开发人员,但对建立自己的初创企业有着巨大的热情。我从他们那里学到了很多。Pi 学校时期帮助大多数参与者向他们的同龄人学习。而且不仅仅是来自同行,有时候也来自受邀的演讲者。在我们逗留期间,我们与 Illia Polosukhin 进行了一次会谈,她是 near.ai 的联合创始人(也是 TensorFlow 的主要贡献者)。Polosukhin 分享了他对成为一名连续创业者的个人看法。是的,他确实谈到了 near.ai,但我发现他让自己的产品变得伟大的热情相当有趣。他分享了他个人对不读博士的偏见,这是我至今仍在思考的问题。还有一场会议(这一次是虚拟会议),由一位来自奥地利的企业家主持(遗憾的是我不记得他的名字了)。他强调了为什么他在攻读博士学位后从学术职业转向工业。他非常坦率地分享了他在创业初期必须面对的所有障碍。他明确表示,尽管他在技术上多才多艺,但他仍在不断提高自己的人员管理技能,这是任何初创公司的关键因素。这对于任何希望创办自己公司的人来说都非常重要,因为最终我们将与人类和他们的个人价值观打交道。
我相信我们每个人在生活中都会经历一次“做决定”的情绪起伏。我们不知道该走哪条路,不知道如何从多个选项中做出选择。大多数时候,我们的直觉帮助我们做出决定。一天晚上,在我们享用了免费午餐后,Pi School 的首席执行官 Jamshid Alamuti(我们称他为 Jam)进行了一次会议,以提高我们的软技能,特别是在决策领域。尽管如此,我还是会凭直觉行事,因为我知道,通过利用“六顶思考帽”,给这个过程一个更符合逻辑的方法。当然,当我需要衡量自己行为的利弊时,这在我的职业生涯中至关重要,尤其是在“攻读博士学位”的时候。
AI 学校是 Pi 学校开展的众多项目之一。如果你仔细观察他们的项目,你会发现有关于领导力、创意孵化、设计、展示等更多方面的项目。除了 AI 学校项目,在我们逗留期间,Pi 学校也发生了一些事情。在其中一次活动中,有来自以色列的非常成功的投资者。这显然暗示了关于圆周率派领导层的远见卓识。对于这个事件,参与者是在最后一刻被邀请的。但是我们大多数人都高度专注于我们的项目工作。去过那里的几个人说,这是一个很棒的演讲,投资者谈论了他们打算通过人工智能的方式前进的方向。此外,在我们项目的中期,项目的利益相关者来到 Pi 学校,学者们有机会更多地讨论项目,并更好地了解导师和利益相关者。这是一个非常美好的夜晚,有啤酒和食物。(我和那位来自 Noovle 的先生交谈过)。
Networks (Image courtesy: Pixabay.com)
我应该说一点我和我的同伴做的项目(简单地说:)。如你所知,我们都被分配到思科赞助的项目。我们的任务是开发一个“分析加密网络流量的深度学习工作流”,从数据获取的角度,通过可视化来推断深度学习的结果。该项目由思科系统公司的“领导,公司战略人工智能项目”直接监督和指导。该问题被定义为分类问题(分析恶意软件和良性流量)。在搜索公开可用的恶意软件库时,我的同伴提出了一个想法,因为这是一个分类问题,我们可以根据网站的类型进行自己的实验来对网络流量进行分类。我们选择的网站类型有新闻网站(如华尔街日报)、流媒体网站(YouTube)和社交媒体(脸书)。我们使用 Cisco Joy 工具捕获数据(网络流量),该工具可以捕获和分析网络流量。捕获的数据作为 JSON 对象存储在. gz 文件中。每个 JSON 对象都有许多与网络相关的属性。有些是包输出、字节输出、包输入、字节输入、网络头特定数据(TLS、DNS、HTTP)等等。在我们的工作中,我们利用了网络属性中的手工设计功能,因为以前的工作也严重依赖于特定任务的手工设计功能。网络数据结构是一个复杂的分层嵌套字典列表,编写一个统一的函数来从网络属性中提取特征并不是一种通用的方法。我的朋友想出了一个独特的主意,写一个自定义的递归函数来分析输入数据的结构。在我们的工作中,我们提出了一种使用数据结构来识别和提取有意义特征的自动化方法。网络数据是嵌套字典的复杂层次结构。我们介绍了能够处理这种特定类型数据的神经网络架构(FF、RNN 和 Conv1D ),并提出了能够适应数据结构的模型。另一个非常重要的任务是,模型调整和选择。我们开发的功能允许测试多个模型和调整超参数,只需改变一个 YAML 配置文件。简而言之,这是我们所做工作的概述。(如果时间允许的话,我会在以后就这个项目写一篇单独的文章)
在项目的最后两周,所有的团队都忙于项目工作。我们必须在 Pi 学校作为 AI 学者的最后一天前 4 天左右提交最终报告。也要在期末日期前 2 天提交期末报告。尽管这种安排起初看起来很艰难,但每个团队都相信这是一个好策略,就好像我们都坚持到最后一天提交所有东西,这将是一个巨大的痛苦。每个人都设法按时交付所有项目可交付成果。
最后一周的一个晚上,Sébastien Bratières 邀请我们所有人参加他的最后一次会议。他准备了几个话题与我们讨论,一些话题是关于高等教育、企业家精神、剑桥、准备从事数据科学等。
如果我没记错的话,在期末考试的前一天晚上,我们决定去附近的一家餐馆享用一顿丰盛的晚餐。我的一个朋友深深地陷入了沉思。我问他为什么。他说,他找到了一种方法来优化他的结果,甚至比以前的结果更好,这是在完成最终报告后,他下定决心要做最后一搏。第二天我和他谈话时,他已经完成了:D,不仅是最终模型,而且他用最新的结果修改了最终报告和最终演示文稿。你会在:D Pi 学校遇到这样的人,他们追求卓越。
Pitching session with Marco Trombetti (courtesy: Pi School media)
所有 Pi 学校学者的最后工作是在最后一天向所有将出席最后活动的杰出赞助商展示他们的作品。Marco Trombetti、Jamshid Alamuti 和 Sébastien Bratières 对这项活动非常认真。因此,Marco 为我们所有人安排了一次会议,分享他对“投球艺术”的看法。Marco 分享了他如何向投资者进行令人信服的推介的经验。我们的赞助商是我们的投资者,因为他们投资了我们的项目。Marco 陈述了成功推销时需要遵循的 5 个步骤。
- 理解问题——你的创业想法应该解决一个普遍的痛点
- 定义解决方案——清楚地展示您如何解决棘手问题
- 了解市场 — 总目标市场
- 表明你的用户群随着时间的推移而增长(牵引力)
- 团队- 为什么你们是最棒的
团队被给予充分的自由来利用这些要点,提出一个持续约 5 分钟的可靠演示。在最后一天的前一天,所有团队都向 Marco、Jamshid 和 Sebastian 提交了他们准备好的演示文稿。每个人都收到了反馈,每个人都准备好迎接最后的重要时刻:D
最后一天的安排非常平和,有专业的活动氛围。每个人都热切地期待着展示他们的作品。在晚上最后一场活动正式开始之前,我和我的同伴有幸与我们来自思科的赞助商/导师进行了交谈。在正式活动之前,我们已经安排了一个舒适的转换。我们讨论了我们做的项目和总体项目。我们更加了解自己,这是一个很好的机会。想象一下,几周前你还在做普通的编码工作,而现在你正在和思科的高层领导谈话。我和我的同伴为我们的最后陈述排练。在完全陌生的观众面前,我往往会有点紧张,直到我在演讲中获得动力。因此,在最后的推介/演示中,准备工作非常方便。
最后的活动以 Marco、Sebastian 和 Jamshid 的发言开始。然后是我们展示的时候了。13 个团队展示了他们的作品,每个杰出的参与者似乎都被他们的展示深深吸引。一旦每个人都做了,塞巴斯蒂安交给我们的证书。我们享用了食物和饮料,度过了作为人工智能学者的最后一夜。(第二天凌晨 1 点左右,我和我的朋友们决定打破这个夜晚,所以我们去了:D 罗马的一个聚会区)。
我们在 Pi 学校的最后一天,我的朋友告诉“这不是结束,这是我们所有人新的开始… ”。那是完全正确的。在我看来,我建立了一个真正的高质量的网络,见证了古罗马的辉煌,对不同的文化和人民变得更加开放。有很多。我们大多数人仍然拥有从圆周率学校获得的动力。我知道很少有人一起参加高尔夫比赛。我和我的朋友们参与了几个项目。希望我们将来能一起做伟大的事情。
我想以此结束这篇文章。你会觉得我很欣赏,偏向 Pi 派。那是因为我真的是。我在各方面获得的东西是无法用言语表达的。这就是为什么我想表达我衷心的感谢。这是一张免费票。我们生命中最美好的东西永远都是免费的:)。我在罗马过得很愉快。
尽你最大的努力去参加这个项目,我们中的很多人都会成为:D
Closing Event of the 2nd Edition of the School of Artificial Intelligence. (courtesy : Pi School media)
参考资料: 【1】picampus-school.com/programme/s… 【2】mlg.eng.cam.ac.uk/sebastien/ 【3】https://www . Facebook . com/picampusrome/videos/1721109364597481/?HC _ ref = arrzucafb 4 w 4 njksowsl 89 fjdvrhgb 9 wdun 8 wulnlkrcxzykit 9 exlggw 7g _ Ckn-Z9A 【4】www.crunchbase.com/person/marc… 【5】picampus-school.com/programmes/
我的第一次数据科学面试[更新]
今天,我将分享我第一次参加数据科学面试的经历,这次面试发生在印度最重要的学院之一,IIT 学院(印度理工学院)。这次面试是为“数据科学硕士”学位和数据科学的先决知识是强制性的。有两个回合,一个是 MCQ 回合,接着是 3 个问题陈述。
第一轮:MCQ
MCQ 是基于一般编程和 DS 技能。这次测试的水平一般,但它是棘手的,因为它有负面的标记。也许这是出于筛选的目的。主题如下:
- 概率与统计
- 结石
- 数据结构和算法
- 回归和类型
- 决策树
- C/Java 编程
由于这是一轮筛选,我回答了大部分问题,并把注意力集中在下一轮,也就是主轮。
第 2 轮:问题陈述(主观轮)
这是主要的一轮,这一轮被赋予了更多的权重。这一轮的形式是,他们将提供一份问题陈述,我们将针对该问题用不少于 300 字的篇幅写出我们的解决方案。因此,为了不浪费更多的时间,我将快速跳转到问题陈述。注:请完整阅读文章:)
问题陈述 1
你有一个像 StackOverflow 这样的网站,你有超过 50k 个标签。给定一个问题,你将如何找到这个问题的前 5 个相关标签?
利用这些信息,你如何根据问题标签的重要性、意义和详细陈述对问题进行排序?给你一个包含 1000 万个带标签的问题的数据集。
还有你会用哪种机器学习方法,为什么,如果有重复的问题,你必须放弃这个问题。
问题陈述 2
给你一个特定用户的手机日志,其中包含崩溃报告、应用使用时间、应用何时被发送到后台、用户在应用中点击了多少广告等数据。
根据这些信息,定义你能想到的两个产品特性和两个安全特性。
你将如何向消费者和应用公司推销你发现的产品特性?
问题陈述 3(最难)
给你病人的病史。您拥有包含数字数据(血压、血糖、心率、血脂等)的所有测试报告,包含图像+文本报告(医生根据图像得出的结果)的放射报告,以及包含有关患者健康的主观和客观信息的护理报告。患者数据以报告的形式出现,即时间序列数据。根据这些报告,你必须计算 3 样东西:
病人存活的几率有多大,他要在医院呆多少天。你将使用哪种算法,为什么?
b)死亡率是多少,即一个人在接下来的一周内是否会死在重症监护室。你会选择哪种算法,为什么?
c)定义一些问题中遗漏的对你的问题有用的额外特征。如果这是一个人工智能驱动的医生,它将如何向病人的家人传达当前的状况?
加分题
我很喜欢 MCQ 的一个问题是:
给你一个问题,你必须决定偏差和方差的权衡。您使用 决策树 来解决一个特定的问题,但是数据集非常大(以 TB 为单位)。因此,您决定分割数据集,并对每个片段分别应用决策树。当你平均偏差和方差时,与单一决策树的结果相比,肯定会发生什么?
i)增加偏差 ii)减少偏差 iii)增加方差 iv)减少方差
我的背景
我已经在 2014 年完成了计算机科学的学士学位。我在 4 个月内完成了 Udacity 的自动驾驶汽车纳米学位(当时这个学位原本是 9 个月)后,决定申请这个课程。在我申请的时候,我只知道深度学习,并且正在从吴恩达的课程中学习机器学习。我在一家跨国公司全职工作,参与他们最新的自动驾驶汽车项目。
更新 1:答案是这里。
答案和结果
结果:我被选中是因为即使在客观上粗心的时候,我的主观得分也很高。但是当我发现 IIT 的课程时,我决定不加入 IIT,继续我目前正在做的关于自动驾驶汽车的工作。35 人被选中,34 人参加了这个课程,因为很难得到一个有你名字的 IIT 标签,我只是想要知识,所以我跳过了。
答案:我想促进你的思维,即使你不知道答案也不要难过。试着找出答案。我决定下周在另一篇文章中提供答案。在那之前,试着找出答案,尤其是第三个问题。
请在 LinkedIn 上联系我,或者在评论区留下你的电子邮箱。一旦我写了包含答案的帖子,我会给你发一封邮件。
阅读我在 Medium 上的其他文章:
关于我:我是一名机器学习工程师,专注于使用深度学习为车辆提供智能。
我的第一份数据科学家实习
在写作的时候,是我在量子发明的数据科学家实习的最后一天的前一天。现在,坐在笔记本电脑屏幕前,回想过去几个月的学习历程,真的很难,但也很充实。
在一天结束的时候,问题在旅程结束后仍然存在——你学到了什么?这是你想要的吗?
原谅我,作为一个物理学家,我相信总是要问正确的问题,通过合理的推理来寻求真理。事实上,作为一名数据科学家,提出正确的问题无疑是重要的(后面会解释……)。
为了给你一个概述,这篇文章主要致力于三个部分——实习前,实习中,实习后给你一个我骑行旅程的概述。根据您目前的学习阶段,可以随意跳到这一部分。让旅程开始吧!
谢谢大家!当我的第一篇文章在 Medium 上收到了来自不同人的巨大支持,甚至被向数据科学推荐和发表时,我的情绪非常激动。
这真的成了我继续与更多人分享我的学习经验的动力,因为,学习如果有趣,帮助别人更好!
实习开始前
我还清楚地记得,我在 2017 年 11 月期末考试卷子的第二天,就开始阅读 R 中的应用的教材——《统计学习导论》。这是我第一次在非常基础和统计的层面上接触机器学习。
一旦我掌握了这些概念,我就开始转向 Coursera 上的一门热门课程——吴恩达教授的 机器学习 。事情并不像一开始看起来那么简单,但吴恩达总是有一种自然的能力来吸引人们的注意力,尽管任何概念都很复杂,但他能像其他人一样简化概念以便消化。我想这就是我真正迷上机器学习的原因。只要试一试,你就会发现这个 流行语 真的没有听起来那么复杂。我敢打赌。
同时,我也在学习人工智能的另一个重点领域——深度学习。为了后知后觉地了解这个看似外来的术语是什么,请看看对神经网络的解释,以及神经网络是如何用于计算 any 函数的。好的,如果在阅读了推荐的文章后,你像我一样总是需要某种可视化来理解事情是如何工作的,那么点击这里。按下“播放”按钮,坐下来,放松,观察神经网络如何用于分类和回归。很酷不是吗?请在下面的评论中告诉我,以便讨论和澄清。
所有的读、做、学,在我 2017 年 12 月开始实习之前,已经让我自己(希望)做好了准备。
实习期间
量子发明通过利用其集成的移动应用套件,专门为消费者、企业和政府提供移动智能。企业物流和分析平台。我是第一个加入研发和分析团队的数据科学家实习生。
在最初的几天内,我被介绍给了令人惊叹的同事,行业内的各种交通术语,以及正在进行的令人兴奋的项目。我实习期间最喜欢的一件事是给予我的信任和自由,让我可以选择自己感兴趣的项目并全力以赴!
令我惊讶的是,我意识到我是这个项目的先驱,因为以前没有人做过。当以前没有人做过一些事情时,研究就出现了,这是我感激的地方,尽管有不确定性和困难。为什么?很简单,因为我有机会从头开始体验真正的数据科学工作流程(如果不是全部的话)。
请允许我简单地列出我所经历的工作流程,因为这些工作流程奠定了我在数据科学领域的基础。我希望你会发现它在某些方面是有用的。😊
1.理解业务问题
选择的项目是关于短期高速公路行程时间预测。然而,就像我说的,问正确的问题对于数据科学家来说非常重要。A 在项目最终确定之前,为了真正了解真正的业务问题,提出了很多问题,比如可用的数据源、项目的最终目标(甚至在我离开之后)等等。本质上,我们的目标是预测新加坡高速公路提前 N 分钟的行驶时间,比当前的基线估计更加准确。
2.收集数据源
对新项目感到兴奋,我开始从数据库和同事那里收集数据源(基本上是在办公室里走来走去,询问关于数据源的问题)。收集正确的数据源类似于您从不同的网站收集数据以便稍后进行数据预处理。这一点非常重要,它可能会影响到您在后期构建的模型的准确性。
3.数据预处理
真实世界的数据是肮脏的。我们不能期待一个像 Kaggle 提供的格式良好且干净的数据。因此,数据预处理(其他人可能称之为数据管理或数据清理)是如此重要,我怎么强调它的重要性都不为过。这是最重要的阶段,因为它可能占据整个工作流程的 40%-70%,仅仅是清理要提供给模型的数据。
垃圾进,垃圾出
我喜欢数据科学的一点是,你必须对自己诚实。当你不知道什么是你不知道的,并且你认为预处理的数据已经足够干净,可以输入到你的模型中时,这就存在着用错误的数据建立正确的模型的风险。换句话说,总是试着用你所拥有的领域知识来质疑数据在技术上是否正确,用严格的阈值来仔细检查数据,以检查整个数据集中的任何其他异常值、缺失或不一致的数据。
在我犯了向模型提供错误数据的错误之后,我对此特别小心,仅仅是因为预处理步骤中的一个简单缺陷。
4.建筑模型
经过一些研究,我提出了四个模型用于我们的项目,它们是支持向量回归(SVR) 、多层感知器(MLP) 、长短期记忆(LSTM) 和状态空间神经网络(SSNN) 。为了简洁起见,你可以在各种网站上找到每个模型的详细解释。
作为一个仍在从 MOOCs 和教科书中学习的人,从零开始构建不同的模型对我来说是一个陡峭的学习曲线。幸运的是, Scikit-learn 和 Keras (带有 Tensorflow 后端)帮助了我,因为它们很容易学习,可以在 Python 中进行快速模型原型化和实现。此外,我还学习了如何使用多种技术优化模型和微调每个模型的超参数。
5.模型评估
为了评估每个模型的性能,我主要使用了一些指标:
在此阶段,重复步骤 3-5(可互换),直到确定了优于基线估计的最佳模型。
实习结束后
嗯,实习肯定重申了我对数据科学的热情,我很感激我的工作确实为未来的工作留下了一些动力。研发阶段,与不同利益相关者交谈所需的沟通技巧,使用数据解决业务问题的好奇心和热情(仅举几例)都促成了我对这一领域的兴趣。
数据科学行业仍然非常年轻,对于像我们这样的求职者来说,它的工作描述可能看起来模糊不清。不具备所需的所有技能是完全正常的,因为大多数职位描述都是理想化的,以符合他们的最佳期望。
当有疑问时,只需从 MOOCs、书籍和文章(我仍在做)中学习基本面,并通过自己的个人项目或实习应用所学。耐心点。学习之旅确实需要时间。津津有味地从你的旅程中学习。因为…
在一天结束的时候,这些问题在旅程结束后依然存在——你学到了什么?这是你想要的吗?
感谢您的阅读。我希望这篇文章能给你一些简要的(不是详尽的)数据科学工作流程和我的旅程的文档。
如果您有任何问题,请添加我,我们在 LinkedIn 上聊天,或者访问我的个人网站了解更多信息:
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq**—**的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](www.admondlee.com/)
我的第一次卡格尔比赛
因此,我参加了我的第一个 Kaggle 比赛— 星球:从太空了解亚马逊。我的目标是: ——找出我作为深度学习实践者所缺少的东西。 -从技术和战略上吸取经验教训。 ——给我的简历/作品集加点东西。
实际上,在比赛截止日期前的一个月,我是一名全职 Kaggler。第一周是学习 PyTorch,让自己熟悉 Python。第一周结束时,我提交了第一份材料。
Learning curves for first submission.
我用非常标准的多标签交叉熵损失从零开始训练 ResNet18。从上图中可以看出,在 30 个时期后出现了经典的过度拟合。从学习曲线来看,我的训练似乎是正确的。在损失值为 0.35 时似乎也有一条渐近线,这大致相当于正面例子的概率解释为 0.75(基本事实是 1)。粗略地说,这给出了训练和交叉验证分布之间的差异的估计,即训练和交叉验证集之间由我们的神经网络感知的最大差异是这样的,即训练阳性将被赋予 1 的高概率,而交叉验证阳性被赋予平均 0.75 的概率。我认为这种解释提供了独特的视角,即神经网络可以用来测量两种不同分布中数据的内在差异。
在第一周,我只用 Python 解释器和 Ubuntu 中默认的 Gedit 编辑器编写了我的 PyTorch 程序/脚本。整个想法是利用这些初级工具的低效率,在 Python 中建立一个强大的工作流/透视图。没有调试器迫使我频繁地测试我的代码(尽管有单元测试会更好)。多频繁?就像你不想调试一样频繁,也就是说,从表面上看,如果你认为你不能快速调试超过 10 行代码,那么你应该每 10 行代码测试一次。我还遵循了“如果不理解就不要输入命令”的原则,并结合了最少的工作示例。使用这个解释器,我会花几个小时玩某些库函数,理解各种数据结构。这一切都很怀旧,因为我在大学里学到的软件工程的一切都回来了。最终,这种低效率会影响到我未来更大的项目,在这个阶段之后,我最好使用高效的 IDE。
第二周,我做了增强的实验。这种增强会对训练产生巨大的影响。
左边的图是基本增强,这意味着标准的 8 倍增强(水平和垂直翻转,旋转 90,180 和 270 度,以及关于图像的主对角线和次对角线的反射)。右图包括基本增强之上的高级增强,如任意旋转、缩放、平移。旋转后的正方形图像的空白区域被原始图像的倒影填充,如下所示:
Note reflected cap and hair at top left and bottom of the image.
这两个图之间的主要区别是:
- 交叉验证损失不会随着增强而快速增加。
- 交叉验证损失更稳定(波动更小)。
- 列车之间的间隔更小,交叉验证损失更少。
这意味着更强的增强会减少过度拟合。虽然交叉验证损失的最低点对于两个图表来说是相同的,但是我仍然继续对我的模型的其余部分使用更强的增强。随着网络越来越深,过度拟合将变得越来越严重,保持对过度拟合的控制应该是更明智的。
一个两难的问题是,是用 OpenCV 还是用 PIL 来编写增强代码。似乎每个人都在使用 OpenCV,如果我遇到问题,寻求帮助更容易。然而,我决定使用 PIL,因为 PyTorch 明确支持它而不是 OpenCV,而且 PIL 更 Pythonic 化。我认为我也有更好的机会向 PyTorch 的当前不足的(我认为是)vision 库(也称为 TorchVision)提交一个 pull 请求。为开源项目做贡献也是我提升简历的策略之一;如果别人接受了你的拉请求,这表明你的代码有一定的水准,你能够写出有用的东西。
我还尝试对学习率进行退火,每当我的交叉验证损失达到稳定水平时,就把它降低 10 倍。在此之前,我想使用更强大的自动优化算法,如共轭梯度下降。有人建议我不要这样做,显然是因为损失曲面是非凸的;手动改变学习率以找到足够好的局部最小值就足够了,并且稍微简单一些。我接受了他的建议,我想通过手动操作来感受一下损失面。下图显示了当 ResNet34 的学习率降低时,交叉验证损失突然降低的程度(直到第三周左右,我才编写程序来继续绘制来自早期快照的学习曲线)。
Learning rate reduced by 10 times at epochs 25 and 29. Graph shown is for ResNet34.
诚然,下降似乎微不足道,但在这样的比赛中,每一个微小的进步都很重要。
此外,我试验了不同的阈值,用于将我的神经网络的概率输出转换为二元预测(无论它是否属于这一类)。这场比赛的衡量标准是所有样本的平均 F2 分数,这有利于回忆。当然,找到每个类别的阈值优于固定阈值,但是为了直观起见,这里是所有类别的 F2 分数相对于固定阈值的图表:
F2 score vs fixed threshold for ResNet18.
正如预期的那样,最佳阈值预测图像是正面的(对于一个类别),即使它不是非常有把握。虽然这以牺牲精度为代价增加了误报的数量,但会捕捉到更多的真阳性,降低误报的比例,从而提高召回率。
在确定每个类的阈值时,我面临两个问题。首先,我的交叉验证集(8K 交叉验证图像、32K 训练图像、60K 测试图像)可能太小,无法确定阈值。使用训练集将导致过度拟合,因为训练集的概率输出与交叉验证或测试集明显不同(当然更好分离)。在使用训练集时,应对这种过度拟合的一些策略是使用具有稍高训练损失的模型的较早快照(以模仿交叉验证和测试集中正负样本的不完全分离),或者不同于训练时间地增加训练样本。我决定使用的策略是 5 重交叉验证,这意味着基于非重叠交叉验证集训练 5 个不同的模型。每个模型将在其自己的交叉验证集上进行预测,并且 5 个不重叠的交叉验证集被连接以重建所有 40K 标记的示例,这些示例又被用于找到每类阈值。这个标准相当标准和保守,因为它应该防止过度拟合。然而,我只是在后来才实现了这种 5 重交叉验证。第二个问题是,我必须假设测试集,尤其是私有排行榜,具有与训练集和交叉验证集相似的分布。我不认为仅仅使用 0.5 的简单阈值对于 F2 度量来说是最佳的,我也没有忘记我通过直接在标记的例子上优化阈值而进行的赌博。然而,我决定这是一个我必须做出的假设,我将通过其他方法减少过度拟合。
在第三周,我尝试了测试时间增加(TTA)。TTA 对我来说很有趣也很新鲜,因为我一直认为增强只适用于训练图像。人类做 TTA 的直观等价物是我们拍摄图像,旋转它,从我们眼睛的不同距离检查,等等。对于那些怀疑 TTA 对人类有多大影响的人来说,看看这个视错觉吧。(这个男孩实际上是皱着眉头,但我们不知何故倾向于觉得他在微笑。)
类似的事情正在我们的神经网络中发生。简而言之,我们的神经网络不是旋转和镜像不变的。如果是的话,高级增强在训练中不会有任何效果。我对 TTA 使用了基本的 8 倍扩增,从我的神经网络中获得了 8 个不同的概率输出,然后在 8 个不同的扩增中平均这些概率。然后,平均概率将通过一组预先确定的阈值,以形成提交的最终预测。我不知道这是如何工作的,但我的直觉是,TTA 通过与其他观点进行平均来降低异常预测,从而减少了方差。不太反常的预测意味着更好的准确性。
此外,我开始使用预先训练好的模型。预训练模型的交叉验证损失曲线更平滑。
Left graph is trained from scratch; right graph is fine-tune from pre-trained model. Both graphs are for ResNet18.
从上面两个图中可以看出,左图(从头开始训练)的交叉验证损失波动较小,而右图(预训练)的训练损失波动较大,更接近交叉验证损失。后一种观察结果可能归因于微调所涉及的较低的学习率(小 10 倍,从零开始训练为 0.01,微调为 0.001)。正如预期的那样,交叉验证损失下降得更快,并稳定在预训练模型的较低值。
我还转移到 ResNet34 架构,并着手实现前面提到的 5 重交叉验证。下面是详细流程:
- 选择前 8K 个图像用于交叉验证,其余 32K 个图像用于训练。
- 通过首先选择 8 倍基本增强中的一个来增强训练图像,然后应用高级增强(随机旋转、缩放、平移)。将增强扩展到各个时期,即,在下一个时期中增强它们之前,遍历所有 32K 训练图像。
- 基于交叉验证损失最低的快照选择模型。
- 使用所选模型对 8 折 TTA 的交叉验证集进行预测。通过在增强中求平均来组合 TTA。保存交叉验证预测。
- 选择接下来的 8K 图像用于交叉验证,并选择其他图像用于训练,并重复步骤 2 至 4,直到获得对应于 5 个非重叠交叉验证集的所有 5 个模型。
- 堆叠来自步骤 4 的 5 个不同的交叉验证预测,以重建所有 40K 图像的交叉验证,然后优化阈值(17 个类别的 17 个阈值)以获得最大 F2 分数。
- 对于从步骤 3 中选择的 5 个模型中的每一个,使用 TTA 在测试集上进行预测,这意味着 5 个模型乘以 8 倍 TTA。如前所述,通过平均来组合每个模型的 TTA,并且 5 个模型的预测最终被平均以形成 60K 测试图像的概率输出。
- 使用步骤 6 中找到的阈值,将概率输出转换为二元预测,并生成提交文件。
所有这些实现起来都很乏味,我不得不不断地测试和检查错误。我认识一些人,他们为一个提交模型投入了所有的 40K 图像,并根据他们的 32K-8K 训练验证分割来决定在哪里停止。与这样的策略相比,5 重交叉验证方法更难实现,并且需要长得多的时间来训练(对于 5 个模型,时间长 5 倍)。然而,五重交叉验证方法在防止过度拟合方面更安全,因为我们总是有交叉验证曲线来指导我们。此外,打包 5 个模型几乎总是比单个模型更准确。
上周,我面临着另一个困境。与竞争论坛上分享的一些结果相比,我在 ResNet34 上的 5 个型号的包在公共排行榜(LB)上没有返回足够高的 F2。别人好像得了 0.930,而我只能得 0.927。我可以用最后一周的时间来尝试找出哪里出了问题,或者继续训练不同的模型,通过组装来提高 F2。如果我选择前者,我可以学习如何更有效地训练单个神经网络。发现哪里出了问题,并因此学习交易的技巧,将对无法负担集成的实时应用程序(在我未来的工作中)更有益。然而,细节决定成败,发现这些技巧需要时间。重新训练模型需要更多的时间。阅读其他人在论坛上做的事情,在最后一周全职合奏会给我一个更高的分数。此外,许多人会在比赛后公开他们的代码,我可以花所有时间逐行比较我们的代码,并找到魔术。
我决定妥协。我从这个讨论帖快速看了一下恒的代码,他的代码和我的代码最明显的区别就是他的增强方法。这个变化对我的代码来说很简单,真正的瓶颈是训练时间。由于我可以使用 4 个 GPU,重新训练的成本不会太低,我决定继续探索训练增强的细微差别。然后,我将在一个简单的投票集合中回收我从这次探索中生成的任何模型。
恒的和我的增强术的主要区别是我一直在使用高级增强术。在选择(随机且一致地)应用 8 倍增强中的哪一个后,我将一直应用第二个,高级增强*。恒有这些特殊的概率值来决定是否增加,我的直觉是这些值是故意选择的。所以我改变了我的第二次增强,只应用了一半的时间:*
Left graph applies 0.5 probability advanced augmentation, right graph applies advanced augmentation all the time.
正如你从上面的图表中所看到的,一旦我减少了增强,或者更确切地说,应用了一半的高级增强,就有了巨大的改进。下面增加太少,
Left graph has 0.5 chance of advanced augmentation, right graph has 0.25 chance.
或者这里放大太多,
Left graph has 0.5 chance of advanced augmentation, right graph has 0.75 chance.
导致次优损失。增加太少会导致过度拟合,而增加太多会导致拟合不足,所以我选择了 0.5 的高级增加几率。我仍然保留了基本的、潜在的 8 倍增强,因为我相信与高级增强相比,8 倍增强是非破坏性的。通过镜像来填充空白空间会给增强图像带来一种虚假感,更糟糕的是,缩放可能会排除图像边界处的地标/特征,例如,如果我们放大太多,图像边缘可能会被移除一条河流。我相信高级增强的破坏性引入了太多的噪音,使我的神经网络无法有效学习。因此,在破坏性与非破坏性增强的框架中,我只关注降低应用高级但破坏性增强的可能性。经过进一步考虑,这可能是一个更简单的问题,即过度拟合或欠拟合正则化增强带来的数量。我也应该试着改变基本的 8 倍增加量。
最后,我通过投票将几个 ResNet34 和 ResNet50 模型随机组合在一起,结果很差。
总之,下面是我尝试过的方法以及它们对公众 LB 的 F2 分数的影响:
- 8K-32K 列车-验证分离,单 ResNet18 模型从零开始:0.90018
- 添加基本的 8 倍扩增:0.90530
- 将 0.5 固定阈值更改为多个阈值:0.91587
- 添加高级增强(对 ResNet18 的损失没有太大影响)和退火学习率:0.91879
- 微调预训练 ResNet18: 0.92443
- TTA 地址:0.92619
- 切换到预先训练的 ResNet34: 0.927646
- 将高级增强减少到只有一半时间发生:0.92801
- 5 折交叉验证的 5 款包:0.92942
- 来自 6 个提交的集合:0.92983
然而,F2 从公共 LB 到私有 LB 有一个巨大的下降,我的最终提交从 0.92983 下降到 0.92685。其他人也有相当大的变动。我不知道为什么,因为我一直相当保守;连我 5 款的包包也从 0.92942 降到了 0.92676。我只能推测:
- 我对私有 LB、公共 LB 和训练验证分布相似的假设是无效的,这使得我的每类阈值搜索是致命的。
- 我的套装不够大,不能防止过度合身。我必须更彻底地调查是什么导致了公共 LB 的过度适应。
这个比赛最令人满意的部分是我可以做我喜欢做的事情(深度学习废话),以及我的公共 LB 分数的稳步增长。当然,一路上也有失败的实验,但我认为我的旅程相比其他人是顺利的。感谢那些在论坛上分享他们的方法和源代码的人的慷慨,我决定尝试的方法在很大程度上经过了测试并被证明是可行的,它们确实可行。
我会做些不同的事情吗?大概不会。我不断地制定策略,优先考虑下一步要做的事情,并最大限度地利用我的时间。然而,如果我有更多的时间,还有许多事情要做,在这次比赛之后,我将继续做这些事情:
- 我的单一模型仍然是次优的,其他人可以在公共 LB 上使用单一模型而不装袋达到 0.93。我将不得不一行一行地把我的代码和其他代码进行比较,以找出我的训练出了什么问题。
- 训练不同的更深层次的架构。我还必须在不同层之间采用不同的学习速率。我没有冻结更接近输入的层,也没有减慢它们的学习速度,因为我觉得 ResNet34 是一个相当浅的网络。不必过分依赖保留初始权重来达到良好的局部最优。深层网络更难训练,因为损失面是非凸的,更难找到一个好的最优值。
- 尝试不同的输入图像大小。从论坛来看,似乎很多人都使用了这样的策略,而且对他们有效,特别是减少了他们的私有和公有 LBs 之间的差异..这相当于人类为了更好地检查而将某物拉近或远离眼睛。
- 使用从第 2 点和第 3 点生成的模型以获得更好的整体效果。此外,尝试除了投票以外的其他集合方法。也许看一下 StackNet 会给我一些线索,加速我的学习。
- 更加熟悉 PyTorch。我觉得掌握一个流行的深度学习框架很重要。这样,任何新想法的实施都可以很快完成。效率是关键;你越快验证你的想法,你学得越快,你的进步就越快。顺便对 D 开头的粉丝说一句,这就是藤原拓海所说的拥有一个家庭课程的重要性,以及为什么他仍然坚持在阿基纳山上送豆腐。
- 少写代码,充分利用库,同样是为了效率。对于我要写的代码,看看对别人有没有用,对深度学习框架有没有贡献。修改 Git 以提交 pull 请求。此外,手动改变学习速度是一件痛苦的事情。我会尝试使用更先进的自动优化器。
- 训练效率更高。我在这次比赛中错过的一件事是通过观察前几个时期的学习曲线来学习如何拒绝失败的实验。这部分是因为我滥用了对多个 GPU 的访问,也部分是因为我在编写其他代码时让我的模型去训练。我相信这是区分熟练教练和初级教练的重要技能。我想我还可以进一步优化我的工作流程,例如,让打印输出不那么冗长,只留下相关信息,等等。
我观察和学到的主要经验是:
- 知道的足够多和知道的太多之间的平衡。了解足够多,以便能够按照自己的方式修改他人的代码,但不要太多,以免完全陷入其中。对我来说,了解足够多很大程度上意味着从概念上知道一个函数做什么,以及输入和输出数据结构是什么。这也意味着知道在哪里可以找到更多关于如何操作所述数据结构的信息。有时候,理解一个概念需要时间,甚至可能需要一些先决知识。不要通过随意和过快地阅读这些知识来欺骗自己。花时间去阅读它们。通常情况下,15 分钟的阅读可以防止你犯一些奇怪的错误,从而挽救你的生命(除了重读你试图节省的 15 分钟之外,这可能还要花费几个小时)。
- 保持代码整洁和过度重构之间的平衡。对我来说,保持代码重构让一切都更容易管理。干净的代码更容易操作,从而防止引入一些错误。更重要的是,干净的代码激励着我。我变得更愿意审视我的代码,做出激烈但必要的改变,例如,编写自动化我的工作流的代码。然而,过多的重构可能会浪费太多的时间,尤其是当你想尝试一种新的训练方法,花时间组织你的代码,却发现方法本身根本不起作用的时候。我遵循的经验法则是,编写新的实验代码要稍微混乱一些,一旦你发现它可以工作,就重构它。
- 深度和广度的平衡。作为初学者,广度更重要。对我来说,更重要的是了解不同的技术在不同的场景下是如何工作的。这样我就能知道将来如何应用它们。例如,我了解到,如果你的神经网络不够深或不够复杂,高级增强就没有必要;高级增强只在训练 ResNet34 时生效,而不是 ResNet18。如果我没有离开 ResNet18,并坚持尝试获得最好的单一 ResNet18 型号,我可能会错过这样有价值的见解。继续调查情况,找到你的最佳策略。一旦你对如何做事情和你应该采取的总体方向有了感觉,专注于深度和执行好你的策略。
- 过度拟合和欠拟合之间的平衡。这是我参加这个比赛时的感受;训练一个模特总是一场永无休止的斗争,不要过度训练或训练不足。是的,说起来容易做起来难,我相信许多深度学习从业者都知道,当你的数据有限时,这就是游戏。
特别感谢那些在论坛上慷慨分享他们的代码和方法的人。我站在巨人的肩膀上。
我的第一次卡格尔比赛
使用随机森林预测房价
介绍
我最近偶然发现了由雷切尔·托马斯写的这篇文章,描述了博客的各种优势,瞧,我的第一篇文章就在这里。
在这篇文章中,我将分享我第一次参加 kaggle 比赛的经历。我完成了 fast.ai 的面向程序员的机器学习 MOOC ,我希望在这次 kaggle 比赛中应用从这门课程中学到的知识。
概观
我们将参加房价预测比赛。 描述说:
对于已经完成机器学习在线课程并希望在尝试特色比赛之前扩展技能集的数据科学学生来说,这是一场完美的比赛。
问题很简单,我们必须预测爱荷华州埃姆斯的住宅价格(因变量)。我们被提供了 79 个解释特征(独立变量)来描述(几乎)房子的每一个方面。
对于这个问题,我们将使用随机森林,它是决策树的集合。随机森林建立多个决策树,并将它们合并在一起,以获得更准确和稳定的预测。
看着这些数据
for full image visit i.imgur.com/BEtQD00.png
这些列和它们的字段大部分对我们来说没有太大意义,但是 kaggle 已经在竞赛的数据部分为我们提供了一些简要的描述。您可以进一步查找 data_description.txt 资源,以获得每一列及其数据字段的详细描述。
评估指标
评估指标是 RMSLE (均方根对数误差),因此在这种情况下,取因变量(即销售价格)的对数是有意义的。
df_raw.SalePrice = np.log(df_raw.SalePrice)
数据解释
您可能已经注意到,“Alley”列的前六行都是 NaN 值(描述了各行的缺失数据)。因此,让我们找出所有要素在整个数据集中缺失值的百分比。
Columns with missing data
我们有 5 个 Nan%大于 50 的特征。这些特征很可能不会为我们提供任何关于数据集的有用信息,因此我们可以考虑现在删除它们,但我们很快就会看到特征的重要性,所以我们现在保留它们,让随机森林为我们做出这个决策。
数据清理
为了将这个数据集提供给随机森林,我们必须将所有非数字数据转换成数字数据。所有非数字数据列代表两种类型的分类数据:
序数:类别的顺序很重要。 名义上的:顺序不重要的地方。
有两种方法将这些转换成数值:
标签编码: -用整数标签替换类别,范围从 0 到(类别数-1)。它使得分类数据在本质上是有序的。
One-Hot encoding: -将包含分类数据的一列拆分为多列(等于类别数)。数字由 1 和 0 代替,这取决于哪一列有什么值。
有关标签 vs 一键编码的更多信息,您可以访问这篇 文章 。
无论如何,大多数列都是有序的,所以我们将对这个数据集使用标签编码(我后来也尝试了一次热编码,它使我的 RMSLE 增加了 0.01)。“*train _ cats”*和“*proc _ df”*取自 Github 上的 fastai repo 。如果你愿意,你可以查看源代码和文档。
我们还用相应列的中值替换了数字数据列的缺失值,并添加了一个{name}_na 列 ,用于指定数据是否缺失。
查看数据时,我发现没有为我们提供房屋的年龄的特征,所以我添加了这个特征以及另一个给出总居住面积的特征。
分成训练集和验证集
在构建我们的随机森林之前,最后一件事是将我们的数据集分成两部分:训练集和验证集。机器学习中最重要的想法可能是拥有独立的训练和验证数据集。作为动机,假设你没有分割你的数据,而是全部使用。假设你有很多参数:
最右边的模型(蓝色曲线几乎完美地穿过红色点)的图片数据点的误差最低,但这不是最佳选择。这是为什么呢?如果您要收集一些新的数据点,它们很可能更接近中间图表中的曲线。
splitting our raw data set to a training and a validation set
这说明了使用我们所有的数据会导致过度拟合。验证集有助于诊断这个问题。你的模型在验证集上的分数将代表你的模型在真实世界中,在它从未见过的数据上的表现。所以,验证集只是你的数据集的子集,它告诉你你的模型有多一般化。
训练模型
我们终于准备好建立随机森林了。我们将使用 Parfit 来优化我们的超参数。
最佳超参数为: min_samples_leaf : 1,
max_features : 0.4,
使用随机森林的优化参数,我们在验证集上得到的 RMSLE 为 0.1258 。
可视化随机森林
让我们来看看随机森林中的一棵树(估计值)。
One tree from our forest
这棵树已经被可视化到深度= 2。树的每个节点将我们的数据分成两半,这样 MSE 的加权平均值是最好的。随着我们继续向下,MSE 在减小,因为树基本上在为每个节点寻找最佳可能分裂点。 该树首先根据 TotalLivingSf 划分数据,然后分别根据 AgeSold 和 TotalLivingSf 划分其子代,以此类推。 我们的森林中有 300 个估算者,我们取所有这些估算者的平均值来进行预测。
特征选择
接下来,我们将深入研究要素的重要性,以移除冗余要素,并找出哪些要素负责为我们的数据提供最深入的见解。
函数' rf_feat_importance' 将返回一个熊猫数据帧,其中包含列名及其各自的特征重要性。我们使用*‘plot _ fi’*函数绘制一个水平条形图,描述所有列的特性重要性。
def rf_feat_importance(m**,** df)**:** return pd.DataFrame({'cols': df.columns,'imp' :
m.feature_importances_}).sort_values('imp',ascending = False)fi = rf_feat_importance(m,df)def plot_fi(fi):
return fi.plot('cols', 'imp',
'barh' figsize(20,12), legend=False)plot_fi(fi[:50])
Feature Importance Bar graph.
该图显示,重要性以指数方式下降,因此没有必要考虑那些几乎无法洞察我们数据集的特性。我们将删除 imp < 0.005 的所有功能,然后根据新数据重新训练我们的模型,并检查 RMSLE。
tokeep = fi[fi.imp >= 0.005].cols
dfToKeep = df[tokeep]X_train,X_val,y_train,y_val = train_test_split(dfToKeep,y,
test_size = 0.25,random_state = 11)
m.fit(X_train,y_train)
此后的 RMSLE 为 0.12506 ,比之前的 0.1258 略有提高。特征的数量已经从的 79 个减少到 25 个。一般来说,删除冗余列应该不会使情况变得更糟。如果这让 RMSLE 变得更糟,那么它们终究不是多余的。
删除多余的列可能会使我们的模型更好一点。如果你想想这些树是如何建立的,当算法决定在什么上分裂时,它会有更少的事情需要担心。
很有可能用更少的数据创建一个更好的树,但是它不会改变结果太多。这将让我们专注于最重要的功能。
基于相关性的特征选择
现在我们将使用 S pearman 的等级相关系数 来找出特征之间的相关性。如果两个特征为我们提供了相同的洞察力,去掉其中一个是明智的,因为它基本上是多余的。这项技术有助于找到多个特征之间的联系。
我们将绘制的东西称为 树状图 ,这是一种层次聚类。
from scipy.cluster import hierarchy as hc
corr = np.round(scipy.stats.spearmanr(dfToKeep).correlation, 4)
corr_condensed = hc.distance.squareform(1-corr)
z = hc.linkage(corr_condensed, method='average')
fig = plt.figure(figsize=(16,15))
dendrogram = hc.dendrogram(z, labels=dfToKeep.columns, orientation='left', leaf_font_size=16)
plt.show()
dendrogram showing the correlation between all the features.
两个特征碰撞得越早,它们的相关性就越强。基于此,我们可以看到五对彼此高度相关的特征。
这些是: 1。)GrLivArea 和 TotalLivingSF。 2。)GarageArea 和 GarageCars。 3。)1stFlrSF 和 TotalBsmtSF。 4。)GarageYrBlt 和 YearBuilt。 5。)壁炉 Qu 和壁炉。
每对中的两个特征都为我们提供了相似的洞察力,所以从每对中去掉一个特征是明智的。但是这两者中的哪一个将被删除?让我们找出答案。
现在为了找出(每对中的)两个特征中的哪一个要被移除,首先,我计算了一个基线分数(包括所有的 25 个特征),然后开始逐一移除这十个特征。在移除每个特征之后,我们将再次计算分数(在重新训练模型之后),并将其与基线进行比较,以查看特定特征的移除如何影响我们的分数。
def get_oob(df,y):
m = RandomForestRegressor(bootstrap=True,
criterion='mse',max_depth=None,
max_features=0.4,max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0,
n_estimators=300,n_jobs=-1,
oob_score=False,random_state=11,
verbose=0,warm_start=False)X_train,X_val,y_train,y_val = train_test_split(df,y,
test_size = 0.25,random_state = 11)
m.fit(X_train, y_train)
return [rmse(m.predict(X_val),y_val)]get_oob(dfToKeep,y)
我们得到的基线分数是 0.12506 。
现在,我们将开始删除这 10 个特征,并重新计算分数。 下面代码的每个输出告诉我们在新数据上重新训练模型后的 RMSLE。第一个标记告诉我们被删除的特征(或列),第二个标记告诉我们从数据中删除特定特征后的 RMSLE。
for c in ['GrLivArea','TotalLivingSF','1stFlrSF','TotalBsmtSF','GarageYrBlt','YearBuilt','GarageArea','GarageCars','Fireplaces','FireplaceQu']:
print(c, get_oob(dfToKeep.drop(c, axis=1), y))GrLivArea [0.12407075391075345]
TotalLivingSF [0.12487110485019964]
1stFlrSF [0.12658563342527962]
TotalBsmtSF [0.12518884830074287]
GarageYrBlt [0.12475983278616651]
YearBuilt [0.12672934344370876]
GarageArea [0.12412925519107317]
GarageCars [0.12538764179293327]
Fireplaces [0.1258181905119676]
FireplaceQu [0.12630040930065195]
我们可以看到,去掉 GrLivArea、TotalBsmtSF、GarageYrBlt 和 GarageArea 减少了我们的错误。所以,我们可以去掉所有这些多余的特征。
to_drop = ['GrLivArea','GarageYrBlt','TotalBsmtSF','GarageArea']
get_oob(dfToKeep.drop(to_drop,axis=1),y)[0.12341214604541835]
我们的 RMSLE 在去掉所有冗余特征后,将从 0.1258 减少到 0.12341 。
dfToKeep.drop(to_drop,inplace=True,axis=1)
len(dfToKeep.columns)21
从 79 个特性开始,我们现在只剩下 21 个特性。这是我们的最终模型。 我们现在应该合并我们的训练和验证集,并在这个合并的数据集上重新训练我们的模型。
dfTrainAndVal = df[columns]
print(len(dfTrainAndVal.columns))
m.fit(dfTrainAndVal,y)
提交预测
现在,我们将为测试集生成预测,但在此之前,我们需要对测试集进行类似的转换。
df_test = pd.read_csv('data/test.csv')
transform(df_test) # add "ageSold" and "TotalLivingSF" to the set.
train_cats(df_test)
df_test,_,_ = proc_df(df_test,na_dict = nas)
Id = df_test.Id
df_test = df_test[columns]
ans = np.stack((Id,np.exp(m.predict(df_test))),axis= 1)
该模型在 Kaggle 测试集上给我们的分数是 0.12480 ,这对应于排行榜上 4052 中的排名 1338,这使我们进入了前 34 %** 。**
结束语
我目前正在学习第二种类型的决策树集成,即 boosting。在这篇文章之后,我将围绕梯度推进回归器而不是随机森林进行实现,看看这如何影响我们的特征重要性和最终得分。
任何意见和建议将不胜感激。
我要感谢和 雷切尔·托马斯;制作这些非凡的网络公开课。我会推荐大家去看看 fast.ai ,他们也有深度学习和计算线性代数以及机器学习的课程。****
我与 Udacity 和 Coursera 进行深度学习冒险的第一步
为什么是深度学习——吴恩达,他对为什么深度学习正在兴起的解释可以用下图来总结。
在报名参加来自 Udacity 和 Coursera 的在线深度学习课程之前,我决定在家里构建自己的 GPU 实例。Udacity 向亚马逊 AWS 提供 100 美元信用来剥离 GPU 实例,而 Coursera 没有。在花费之前拥有用于训练模型的内部 GPU 实例总是好的💰在云上。我用的 GPU 是英伟达 GTX 1070
我把这些部件用于我自己的 CPU 实例,下面是结果。
花费大部分时间💸在 GPU 上而不是 CPU 上。
我正在使用 Xbuntu 17.04 但它可能太前沿了,但我猜尝试更多最新的内核没有坏处。
在设置以下内容之前,我做了标准的路由器设置来启用我的 gpu 实例的 SSH 和 https,并使用 letsencrypt 通过 SSL 证书保护它。除此之外,我使用 NGINX 作为网络服务器。
日常活动的 SSH 设置
- 安装 ssh 服务器
sudo apt-get install openssh-server
2.配置无密码登录
在本地 PC 上生成一个 SSH 密钥,在这个上有一个来自数字海洋的优秀的教程
完成后,我们需要通过以下方式将我们的公钥添加到我们的登录名中
cat ~/.ssh/id_rsa.pub | ssh [login]@[your.ip.address.here] "cat >> ~/.ssh/authorized_keys"
然后编辑/etc/ssh/sshd_config,这将强制只使用密钥登录,从而更加安全
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no
除此之外,我们还需要在/etc/ssh/sshd_config 中添加 X11Forwarding,如果我们希望在本地显示 X11,稍后会用到它
Match User [login]
X11Forwarding yes
AllowTcpForwarding yes
X11DisplayOffset 10
重启 SSH 服务器
sudo systemctl restart sshd
最后,我们可以不用输入密码就可以登录,这对于稍后为 VNC 创建 SSH 隧道的下一个设置非常重要
运行长期运行流程的 VNC 设置
Digital Ocean 有一个关于使用 xfce4 设置 VNC 的极好的教程,这就是为什么我选择使用 Xbuntu 发行版,它没有额外的软件包。这就是我们可以进行长期训练的环境
Anaconda 设置准备编码环境
在我们安装 anaconda 之前,我们需要在我们的服务器上安装 nvidia 驱动程序、CUDA 和 cuDNN。这个来自 floydhub 的指南非常有用,但仍然适用于 Xbuntu 17.04 版本。一旦一切就绪,我们就可以使用命令进行验证
nvidia-smi
它应该看起来像这样
Udacity 对建立蟒蛇环境有很好的介绍。我发现在培训/开发期间维护 tensorflow gpu 和 tensorflow cpu 环境进行比较非常有用
用于监控 GPU 的 Zabbix 设置
我正在使用 zabbix 来监控 GPU,并为此使用了优秀的数字海洋教程。
一旦 zabbix 被相应地安装和配置,我们就可以为 zabbix 获得 Nvidia 模板。有了它,我们可以在利用率方面(温度、风扇和处理)密切关注我们 GPU
最后,使用来自 Udacity 简介的 style-transfer 和以下命令比较了 GPU 和 CPU 的一些统计数据:-
time python evaluate.py — checkpoint ./rain-princess.ckpt — in-path lesu-0596.jpg — out-path lesu-0596-style.jpg
GPU vs CPU
我的图像分辨率是 4242 × 2828,大约是 7.9MB 的文件大小,有趣的是看到 tensorflow CPU 与 GPU 相比有一个核心转储。我还注意到有一个巨大的速度提升,我猜这就是深度学习所依赖的,用 GPU 进行实验和获得反馈的速度!关于内部部署与云比较的更多详细信息请点击此处
我对艾的解读
人工智能是现在的热门词汇,作为一个对数据科学感兴趣的人,我已经做了很多实验。这些天来,这个词在许多上下文中被频繁使用,鉴于它在许多领域的应用潜力,我想后退一步,真正理解这个术语“人工智能”在直觉层面上的含义。这是我目前收集到的信息。
人工智能(AI)的普遍定义是计算机系统表现出来的类似于智能人类的智能。那么,什么是人类智能?以下是一些有助于定义智能的特征:
- 推理和解决问题
- 学习、改进和概括的能力
- 语言
- 视觉识别
- 感知、随机性和创造性
- 常识
现在,让我们在计算机可以被编程执行的几个任务的上下文中理解上述内容(当然,具有不同程度的成功):
1.**一盘棋:**计算机在国际象棋上取得了非常高的成功。众所周知,1997 年,IBM 的国际象棋计算机“深蓝”击败了世界冠军加里·卡斯帕罗夫。国际象棋是一种具有挑战性的游戏,但它可以用一组走法来描述,并且可以通过搜索所有可能的走法来玩。移动的次数可能真的很多,但它们仍然可以被定义,这就是具有强大处理能力的计算机如何战胜人类对手的原因。那么,下棋的电脑能叫 AI 吗?是的,在推理、解决问题和学习能力等非常有限的方面。
2.**预测贷款申请人是否有信用:**在这种情况下,计算机取得了很大的成功。使用机器学习算法,并通过提供许多特征(信息),例如在这种情况下,申请人的收入、债务水平、过去的信贷行为,计算机可以被编程来预测贷款申请人拖欠贷款的可能性。在这个过程中,计算机程序显示出智能的迹象,如推理、寻找模式和解决问题。随着我们根据更多的数据和证据训练计算机,它将从错误中学习,并进一步提高其预测的准确性。此外,它还通过为新的贷款申请人生成高精度预测来学习归纳。所以,如你所见,这个人工智能比下棋的人工智能更进化。与正式的、规则定义的任务(如国际象棋)相比,这个人工智能正在完成一项有点不正式和不确定的任务。
3.视觉上区分猫和狗:识别狗和猫的图像对我们来说太容易了,我们甚至不需要花时间去思考。对于计算机来说,这就不那么简单了。人类从小就能看到狗和猫。在我们的大脑中,我们创造了一种机制,在这种机制中,我们定义了一套与狗和猫相关的特征。这些特征在我们的潜意识中根深蒂固,如果有人问这些特征是什么,我们可能无法拼写出来。换句话说,由于我们从小就在看很多猫狗,所以我们的大脑现在有了区分猫狗的“经验”。当我们想让计算机具有视觉智能时,我们必须为它提供这种体验,即在大量猫和狗的图像上训练它,并提供有助于它区分的功能。然而,我们自己无法在我们的脑海中拼写出区分猫和狗的特征,因此,我们很难创建并向计算机提供这些特征。深度学习算法是机器学习的一个特殊分支,它通过查看数百万张猫和狗的图像,帮助计算机程序自行创建那些抽象特征。因此,深度学习算法正在使计算机获得更像人类的智能,包括视觉、随机性和归纳性。
深度学习算法通过对大量数据进行训练,自行得出特征,这就是它们与传统机器学习算法不同的地方,传统机器学习算法必须预先定义特征。
4.自动驾驶汽车:这是人工智能的最新领域,人们对此有很多兴趣和研究。这些人工智能系统与上述系统的真正区别在于,它们需要更加**进化,具有应对不可预见的随机情况的能力。一个自动驾驶的人工智能必须理解前面汽车明显的左右信号,还必须解释其他司机不那么明显的意图。例如,如果前面的车正在减速,前面可能会有一些不可预见的障碍(事故,交通堵塞等。)而 AI 系统需要自己做好准备。**这要求机器拥有常识,就像人类利用常识与世界互动一样。当然,人类从经验中获得这一点,但要设计具有这种常识性经验的算法,需要在所有可能的驾驶场景中训练这些算法,这是不可能的。这些是一些需要解决的严重问题,从一些自动驾驶汽车的致命事故中可以看出这一点。2016 年 5 月,特斯拉 Model S 撞上了一辆拖拉机拖车,因为它没有注意到拖车的白色一侧映衬着明亮的天空。深度学习模型(经过大量场景的训练)有助于自动驾驶人工智能理解物理世界,但它们需要与其他方法结合起来,通过注入人类水平的常识来处理现实世界中驾驶的不确定性和随机性。
5.写一首诗:一个有能力写一首诗或一首歌的人工智能肯定拥有更进化的类似人类的智能,包括语言技能和创造力。当然,创造力的程度是有争议的,但是在这个领域取得的进步至少指出了这种创造性人工智能的开始。
下图总结了上述观点:
强 AI 和弱 AI
上述所有例子都是弱人工智能的例子,其中人工智能在任务的背景下进化。这些人工智能系统在完成特定任务方面已经进化到接近人类水平的智能。然而,我们在开发强大的人工智能方面仍有很长的路要走——这些系统可以在各种背景下学习和应用,例如,在美国的城市道路上学习驾驶汽车,并应用这些学习在中国的高速公路上驾驶卡车。强人工智能就像一个人类孩子,从不同的背景和经历中学习,进化成一个类似于完全形成的人类思维的系统,然后可以在没有人类干预的情况下执行任务。一旦发生这种情况,科幻电影的世界就有很大的可能性成为现实。嗯!这一天可能不远了。
即将上线!!一门关于深度学习的课程,将深入讨论上述内容以及算法和应用。
我从物理学到数据科学的旅程
随着我对数据科学领域的热情不断增长,我每天都在学习新知识。作为一名即将毕业的物理系学生,要追求不同的职业轨迹,必须要回答**‘为什么’和‘如何’个问题。被许多人问到我从学术界——物理学到数据科学的转变,我希望我的故事可以回答关于为什么我决定成为一名数据科学家和我如何追求目标的问题,并最终鼓励和激励更多的人追求他们的激情**。我们开始吧!
这一切都始于在欧洲核子研究中心的暑期学生生活
CERN Summer Student Programme 2017
欧洲粒子物理研究所暑期学生项目为物理、计算和工程专业的本科生提供了千载难逢的机会,让他们在瑞士日内瓦的欧洲粒子物理研究所与多文化团队中的顶尖科学家一起参与他们的研究项目。
2017 年 6 月,我非常幸运地被接受加入该计划。我简直欣喜若狂,因为粒子物理一直是我的研究兴趣,能够在欧洲粒子物理研究所进行研究对我来说简直是梦想成真的经历!在 2 个月的实习期间,我通过全球 LHC 计算网格&云计算为小型μ介子螺线管(CMS) 实验做了一些万亿字节数据的事件重构的分析和模拟。
Compact Muon Solenoid (CMS) in the cavern
此外,暑期学生还参加了一系列讲座、研讨会,并参观了欧洲粒子物理研究所的设施,涵盖了理论和实验粒子物理以及 计算领域的广泛主题。
在此期间,我通过讲座、研讨会甚至我的项目本身接触到了机器学习和大数据分析。这些机器学习技术如何在如此庞大的数据量下以非凡的精度分类和检测各种微观粒子,这让我特别震惊。百思不得其解,我毫不犹豫地深入研究了机器学习和云计算主题,仅仅是因为我热爱它!
谁会想到这次曝光会成为我人生的转折点。是的,我用数据找到了我的婚姻。
然而,尽管我渴望学习这些主题,我仍然对数据科学有模糊的概念。虽然听起来很模糊,但我知道在发现我的 真正的激情 后,我必须发现更多。
深入研究数据科学领域
当我结束实习回到新加坡后,我做了一些研究来了解更多关于数据科学的知识,令我惊讶的是,这个领域并没有一个明确的定义。但总的来说, 数据科学 可以概括为编程技能、数学统计知识、领域知识的结合。这里的解释绝不是详尽的,而是为了从总体上阐明这个定义(欢迎任何评论!😄).
尽管如此,我对数据如何被用来产生洞察力和推动公司的商业价值感到惊讶。从了解业务问题,到收集和可视化数据,直到原型制作、微调和将模型部署到现实世界应用程序的阶段,我发现了利用数据解决复杂问题的挑战的成就感。渐渐地,我的激情开始形成…
“没有数据,你只是另一个有观点的人”
爱德华·戴明
我的起点—数据可视化
2017 年 8 月,作为迈向数据科学的第一步,我参加了由 Tableau 和 Infocomm Media Development Authority(IMDA)共同举办的 NIC Face-Off 数据竞赛 ,这是我第一次接触数据可视化。
这次经历让我有机会使用 Tableau Public 可视化各种调查东南亚雾霾起源的公开数据源,以提供可操作的见解。我很高兴能与您分享简单的 [Tableau 仪表盘](public.tableau.com/views/Haze/…).
我在 SMRT 的第一份兼职数据分析实习
同月,我偶然发现了一个机会,在 SMRT 种子基金资助的初创公司 mobilityX 做兼职数据分析实习生。我使用 Python 进行编码主要是因为它的高级编程语言、可读性和广泛的社区支持。
老实说,当我在大学第一年开始学习编程时,我真的想过放弃编码。运行一个简单的 for 循环可能会让我挂几天(甚至几周!).更糟糕的是,“我就是没有天赋”的消极想法给了我沉重的打击…
我对编程的兴趣始于我在第三年学习期间与我系里的一位教授一起着手一个研究项目,该项目要求开发数据分析工具。正如你可能已经预料到的,我开始拿起 Python 来构建工具,并且我爱上了它!
我告诉自己——“我就是没有天赋 ”的日子一去不复返了,取而代之的是以下学习编程的步骤(至少对我来说):
- 理解编程的基本逻辑
- 选择一种编程语言,并学习如何使用它(语法等。)
- 练习,练习,练习
- 重复步骤 1–3
抱歉,在写作的时候,我太激动了,无法与你分享我的学习之路…
兼职实习持续到 2018 年 3 月,学习之旅卓有成效。我使用 PostgreSQL 和 Python 学习并执行了数据清理和操作、web 抓取和数据提取。
我提前一个学期毕业去做数据科学实习
所有之前的经历进一步增强了我的热情,并为数据科学奠定了基础。下定决心,我计划了我的学习时间表,并设法提前毕业,于 2017 年 12 月在量子发明从事我目前的全职数据科学实习。
在这个阶段,你可能会问——为什么我去实习而不是全职的数据科学职位?简而言之是——在申请全职工作之前,通过处理真实世界的数据,获得更多的技术接触,并从零开始体验数据科学流的完整周期。
这是我真正的数据科学之旅开始的整个故事的核心部分。下面的列表简要总结了我在许多伟人和不同在线资源的帮助下的学习之路。
1.教科书
我读的第一本教科书是统计学习导论——R中的应用。我向初学者强烈推荐这本教科书,因为这本书侧重于统计建模和机器学习的基本概念,并附有详细而直观的解释。如果你是一个数学铁杆,你会喜欢这本书:统计学习的要素。
其他值得一提的教材有绝对初学者的机器学习、Sebastian Raschka 的 Python 机器学习和 Jake VanderPlas 的 Python 数据科学手册。
2.在线课程
Coursera。Coursera 联合创始人吴恩达教授的机器学习 。我一直着迷于他将复杂的概念分解成简单的学习信息的能力。为期 11 周的课程重点关注监督学习、非监督学习和机器学习的最佳实践,以及在现实世界中的实际应用。我有时仍然会参考课堂笔记,以解决建立机器学习模型时的欠拟合或过拟合问题。
Udemy。 何塞·波尔蒂利亚教授的数据科学与机器学习训练营Python。本课程从讲授 Python 的基础知识开始,逐步指导您如何使用 scikit-learn 和 tensorflow 实现各种机器学习和深度学习代码。这个课程让我对 Python 中实现机器学习模型的各种可用库有了一个很好的概述。另外,我强烈推荐我个人最喜欢的课程: 深度学习 A-Z:基里尔·叶列缅科和哈德林·德·庞特维斯教授的动手操作人工神经网络 。这是我第一次接触深度学习,相信我,他们的课程真的是独一无二的,非常强调本能的理解水平,有监督和无监督深度学习的动手编码教程。
琳达。 Python 对于数据科学的基本训练 由 Lillian Pierson 教授。本课程讲授数据管理和数据可视化以及其他统计分析的基础知识。
3.商务化人际关系网
好吧。你对数据科学/分析领域感兴趣?如果你没有 LinkedIn 账户,那就创建一个。
LinkedIn 是一个强大的平台,拥有紧密联系的数据科学社区。分享学习的环境简直令人惊奇,人们愿意分享他们的经验、思想和知识来帮助他人。事实上,LinkedIn 是我学习最多的地方,无论是技术知识、职业建议等等。受到启发,我现在开始通过在我的 LinkedIn 上分享我的想法和经历来回馈社区。😃
一些数据科学家甚至聚在一起开展每周一次的网络研讨会— 数据科学办公时间 ,讨论数据科学的基础知识并发表见解(数据准备、特征提取、数据可视化等)。).一定要去看看!
4.其他资源
大多数数据科学领域的初学者经常被浩瀚的资源淹没(像我一样),人们可能会对选择哪一个感到困惑。我在 LinkedIn 上的一个朋友 Randy Lao 分享了一个非常全面的数据科学资源列表,这些资源会定期更新。
我认为有用的其他学习平台或资源包括:面向数据科学的QuoraDZoneKD nuggetsAnalytics vid hyaDataTau
建立投资组合
有一个文件夹来展示你的经验和能力,特别是当你没有成为数据科学家的博士学位的时候。
由于我拥有物理学学士学位,没有任何计算机科学学位,我在大学的前三年也没有任何相关的接触,所以除了从 MOOCs 学习广度主题之外,建立我的投资组合是必要的。这很重要,因为归根结底,公司想知道你学到了什么,以及你如何为他们的业务做出贡献和增加价值。
这也是我一边杂耍兼职实习,一边向 MOOCs 学习的原因之一。此外,我也是数据组织的志愿者,通过帮助其他非政府组织解决他们的问题来最大化社会影响。
我一直想参加 Kaggle 比赛,不久前,我有机会和我的朋友在 Kaggle 上参加了由 Shopee 和工程技术学院(IET)组织的机器学习挑战赛。我真的很感激成为这个团队的一员,我确实从他们身上学到了很多。一定要查看一下他们的简介——【低伟鸿】钟可欣凌薇 !
这是我第一次参加 Kaggle 比赛,学习如何使用卷积神经网络(CNN)和转移学习进行图像识别。学习曲线很陡,但这个过程绝对是值得的!期待在下一篇文章中与你分享更多关于我们比赛的项目!
如果时间允许,我也希望在我未来的帖子中与大家分享我的一些实习项目,代码将上传到 GitHub 上。
最后的想法…
选择一份你热爱的工作,你这辈子一天都不用工作
目前就这些。我希望我确实给数据科学行业带来了一些启示,并使对数据科学的学习不那么可怕,而是更有趣、更平易近人!我从来没有发现“ 我学得越多,我就越需要学习 ”的感觉,直到我遇到了给我挑战和成就感的数据科学。
我希望通过记录我的学习旅程,这篇文章可以在某种程度上激励你去追求你的激情,尽管有挑战和困难的环境。
感谢你阅读这篇文章。这是我的第一篇文章,如果您能留下您的反馈和意见,告诉我如何进一步改进内容,我将不胜感激。我将在未来创造更多关于我的经历和项目的帖子。
如果您有任何问题,请添加我,我们在 LinkedIn 上聊天,或者访问我的个人网站了解更多信息:
关于作者
****Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](www.admondlee.com/)****
我的数据科学之旅
很多人问我关于我从化学工程转到数据科学的问题。我是怎么做到的?我什么时候做的?我为什么要这么做?我觉得今天(2018 年 1 月 6 日)是回答这些问题的合适日子,因为这是我报名参加第一门编程课程以来的第三个年头。我希望分享我的故事会让我对成为一名数据科学家有所了解,并鼓励各地崭露头角的“任何事情”去强烈追求他们的激情。
我第一次接触数据科学是从一本与数据科学毫无关系的书中
2014 年 3 月,我偶然发现了一本名为《习惯的力量:为什么我们在生活和商业中做我们所做的事情》 的书,作者是 Charles Duhigg。在名为组织的习惯的书中,Charles 写道,一家大型零售连锁店利用女性顾客购买的数据来预测她怀孕的可能性。说得轻一点,我很震惊,我必须了解更多。
我到处寻找这个魔法的名字。几个月后,在朋友的帮助下,我偶然发现了一些与我在*习惯的力量中读到的非常相似的东西。*它被称为商业分析。
这个发现对我来说是一个转折点,因为那时,我正处于大学的最后一年,刚刚结束在一家石油和天然气公司的实习。我在那里的经历让我厌倦了把化学工程作为职业,因为我觉得它不适合我。这种认识也让我对新的挑战和职业方向持开放态度。商业分析似乎正好符合这一点。
我从 Quora 上的一个回答中创建了我的第一个数据科学学习路径
到了 2014 年,我已经毕业,开始了我的国家青年服务团。在我的 NYSC 期间,我在 Twitter 的推荐下偶然发现了 Quora,我很喜欢它。
如果你想知道,理想情况下,NYSC 是尼日利亚为期一年的强制性项目,你被部署到一个你不隶属的州,以政府工作人员、教师或其他任何身份服务。
在 Quora 上,我发现商业分析有很多名字,其中一个是数据科学。我还找到了一个非常有帮助的答案,我今天推荐给任何希望成为数据科学家的人: 我如何才能成为一名数据科学家 ?
这个答案帮助我在 2015 年 1 月走上了第一条数据科学的学习之路(请原谅我糟糕的书写)。
Written January 2015. Other courses on the left side of the page are The Analytics Edge and Google Analytics
我在一年内完成了 15 门数据科学的 MOOCs 课程
我主要通过在线课程学习数据科学。我从来没用过书(我试过)。所有的课程都是免费的(因为我不在乎证书),在不像 Coursera 那样免费的地方,我得到了 100%的经济资助。
当谈到在线课程时,我吻了很多青蛙,所以如果你正在寻找一个关于如何开始数据科学的松散指南,我会帮你减轻压力,只关注有价值的课程。
1。学习编程
这是我学习道路上的第一件事,也是最可怕的一件事。这很可怕,因为我没有计算机科学背景,我在大学唯一一次接触编程,我绝对讨厌它。然而,这一次我觉得我拥有世界上所有的时间,没有什么可失去的,所以我报名参加了 Codecademy 的 学习 Python 课程。
这门课太难了,很多内容对我来说没有意义。我可能花了两周的时间试图让 while 循环工作,我不知道文件 I/O 是什么意思,但完全靠蛮力,我完成了课程。
这是我第一次完成一门在线课程,之前我已经尝试过无数次了。这给了我继续学习的信心。
2.学习核心数据科学
很多人问我为什么选择使用 R 而不是 Python。纯属巧合的是,我第一次接触数据科学是在 R 上 edX 上麻省理工学院的一门名为The Analytics Edge的课程。
为期 10 周的课程采用案例研究的方法来教授数据科学的不同部分,从机器学习到可视化,再到使用 r 进行优化。这非常费事,也非常值得。我在这门课程上的奇妙经历让我比 Python 更倾向于 R。这门课程给了我很好的基础,我有时仍会参考 2015 年的笔记。
3.其他有用的课程
我喜欢的另一门课是 2015 年底上的,是 Coursera 上杜克大学的 数据可视化与 Tableau 沟通。这是一门为期五周的课程,为使用 Tableau 打下了良好的基础。导师很厉害,也是我目前接触过的最好的。
我名单上的下一个是杜克大学 Coursera 上的 用 MySQL 管理大数据。这是一个为期四周的课程,与 Tableau 课程有着相同的令人惊叹的导师,教授 MySQL 和 Teradata。
其他值得一提的还有:UCBerkeley on edX 上的用 Apache SparkT5【四门课程系列】介绍 BigData 以及微软 on edX 上的 Excel 进行数据分析和可视化 。
我如何开始我的博客——真正的学习从哪里开始
如果你读了很多 Quora 上关于如何成为更好的软件工程师/数据科学家/设计师之类的回答或文章,你会看到一个反复出现的建议:做个人项目来深化你的技能。2015 年,我曾几次试图这样做,但我没能做任何合理的事情,因为坦率地说,我还没有准备好。
到 2016 年,我已经放慢了在线课程的速度,因为 90%的课程都有相同的内容,并且假设你是初学者,所以它变得有点重复。这时,我觉得我已经准备好开始用博客做个人项目了。写作部分不是问题,因为我以前在高中时写作。然而,我的问题是关于一致性和创造性。我有足够的创造力来组织有趣的项目吗?我能坚持不懈地做下去吗?你不试就永远不知道,对吗?这就是我如何在 2016 年 6 月开始我的博客数据的艺术和科学。在为我的博客撰写内容的过程中,我的知识成倍增长。
我在一个月内写完了前两篇文章,然后中断了一年
我的第一篇帖子是 2016 年 9 月发布的 预测英超积分榜 以及 2016 年 10 月发布的Twitter 对尼日利亚网络提供商的看法。积极回应的数量绝对令我震惊。我在这两个帖子上得到了大约 1500 次浏览和无数回复,这是我第一次对自己的技能感到自信。
这段经历让我明白,创造力不是你要么有要么没有的天赋。创造力来源于经验和对技能的信心,因为你知道的越多,能做的事情的可能性就越大。
然后我在博客上停了一年。发生这种情况有很多原因。
- 我曾试图在 2016 年 12 月写一篇博文,那是一片混乱。我后来清理了它,并在名为 数据科学的 ABC-XYZ的机器学习和数据科学研讨会上为我的女性使用。
- 在那之后,我遇到了我称之为“数据科学家的障碍”。我真的没有想法,想不出任何有用或有趣的东西。
- 我的博客与大多数数据科学博客有所不同,因为我的博客包含了大量的研究和迭代。也让我的出版周期比别人长很多。
- 工作很累人,成年也在折磨着我,所以我成了一个电视迷。
2017 年 6 月,我终于有了一个关于亿万富翁的想法,在我朋友的帮助下,我于 2017 年 10 月出版了 ,这是一个数据驱动的指南,旨在成为一个持续的亿万富翁 (是的,我花了四个月才完成)。
发布三天之内,它就有了 3 万的浏览量。到处都是。相当多的网站抄袭了这篇文章,但我不在乎。我的作品好到可以被抄袭!
目前为止我的小胜利
**除了我的帖子 (一个关于成为持续亿万富翁的数据驱动指南 ,到目前为止已经获得了 4 万次浏览,2017 年对我来说是有趣的一年。第一次,我过去三年的工作得到了认可。
- 我赢得了一个联合国数据可视化竞赛,我的可视化表格是“可视化疟疾:黑仔病杀死非洲”,看起来像这样。
One of the dashboards from the visualization story
2.我受邀在 T21 举行的斯坦福大学数据科学女性大会上发言,主题与本文完全相同。
3.我在伦敦找到了一份工作,在安永(Ernst & Young)担任数据科学家,最近搬到了世界各地。
4.2017 年 11 月,我在机器学习和数据科学领域的女性组织了一场研讨会。
老实说,我有点惊讶我能走到这一步。我记得在我的记事本上写道“玫瑰花蕾,你永远都配不上这个”,但我现在在这里。我还有很多东西要学,但我也很感激我今天所处的位置。
我给你的建议
我不是专家,我也不是约翰·麦克斯韦尔,他给了我一些自助建议,但这里有几件事真的帮了我。
- 不要害怕放弃那些没有成功的事情。直到 2016 年,我才完全放弃了石油和天然气的梦想,尽管我知道自己并不热衷于此。
- 不要害怕被称为疯子。我数不清有多少次人们微妙地或不那么微妙地告诉我,我离开化学工程是疯狂的,尤其是当数据科学在尼日利亚相对较新的时候。它曾经打动过我,但现在我微笑着对自己说“当我吹的时候,你会明白的”。
- ****阅读。阅读。阅读。给我打开这个领域的书,和数据科学一点关系都没有。阅读拓展了你的可能性领域。
- ****爱学习。每年都有学习目标,坚持一种最适合自己的媒介(书籍/音频/视频/教室)。
- 永远,永远把你最好的一面展现出来。让你的工作成为最好的工作。它会替你说话。我今天得到的 99%的机会,部分是因为我的博客。
- 最重要的是,你不是一个孤岛。拥有一个紧密团结的支持系统,即使受伤也会告诉你真相。你会更好的。
祝你好运:)
我要特别感谢我出色的支持系统和所有让我来到这里的人。不胜枚举,但我非常爱你们。我要特别感谢鸢、迪顿和奇迹,感谢他们的支持、严厉的爱、残酷的反馈,并告诉我应该在哪里加撇号。你从第一天起就在那里。你知道我所有的挣扎。你从一开始就看到了我,并且仍然相信我能做到。感谢你让我成为了一个更好的数据科学家,一个更好的人。我不会拿你来交换这个世界。
我的数据科学之旅
欢迎来到我的博客!
在这里,我将发布一些我一直在从事的数据科学和机器学习项目。写这个博客的主要动机是,我很快就要开始快速人工智能深度学习课程了。在讲课的同时写博客对我来说似乎是一个很好的机会,让我可以真正接触到材料,并结识其他学生。首先,让我简单介绍一下我进入数据科学之旅的背景。
大约一年前,我开始写我的工商管理硕士论文。除了这个硕士学位,我还开设了第二个营销传播硕士学位。此时,我已经完成了所有的课程,最后不得不开始写这两篇我一直拖延的硕士论文。我的学士学位论文的出发点是音乐行业的社交媒体策略。我在界定研究范围方面遇到了一些问题,也不太确定我到底想研究什么,直到我看到一篇改变了我论文方向的论文。
那篇论文是 Asur 和胡伯尔曼(2010)的《用社交媒体预测未来》。作者使用了一个简单的线性回归模型,其中包含推文数量和情绪的时间序列(以及电影播放的影院数量)。有了这个简单的模型,他们能够比好莱坞证券交易所更准确地预测电影在第一个周末的票房收入。我发现对 Twitter 数据的简单分析具有如此强大的预测能力,这非常令人着迷。读完这篇论文后,我终于有了研究的方向:社交媒体的预测能力。
Entering the Data Science journey
我很快意识到我需要更复杂的工具来执行分析,尤其是我想要做的情感分析。我的导师建议我去见一位计算机科学老师,所以我去了。然后这位老师问我最喜欢的语言是什么…我回答是英语。是的……这可能是你能给这个问题的最痛苦的答案了。虽然回过头来看我可以嘲笑它。这个例子显示了我是多么的无知。我不知道我要面对的是什么。
在接下来的对话中,这位老师给了我一种非常消极和批判的感觉。他显然认为我永远不会编程,更不用说做我的 Twitter 分析了。我总是被那些认为我做不到的人激励着,这次也不例外。我在 R 里面找到了一个做情感分析的包,于是,我做了我该做的事情:我开始学习 R,让我惊讶的是(当时)我认识的计算机专业的学生都没有和 R 一起工作过,我找到了一个有 R 课程的网站,开始尝试。这个网站是 DataCamp,如果你想学习数据科学的 R 或 Python,这是一个非常棒的平台。令我自己惊讶的是,我对编程的喜爱远远超过了我的预期。更令人惊讶的是,我有这方面的天赋!
接下来的几周,我花了很多业余时间参加 DataCamp 的课程,为论文的数据分析部分做准备。在编程、导入、清理、可视化和统计课程之后,我觉得自己已经准备好了。在我哥哥的帮助下,我们建立了 Twitter 流媒体 API,并开始在 MySQL 数据库中收集推文。当然,与课程中呈现给你的数据集相比,在使用“真实”数据集时,你会遇到许多问题。因此,这篇论文成为我的第一个数据科学项目,也是一次非常宝贵的学习经历。去年 12 月,我完成了这项研究。这是最后一篇硕士论文的链接(我可能也会写一篇关于这项研究的博客):essay.utwente.nl/71482/
这项研究的重点是使用 Twitter 来预测 Spotify 新发布专辑的流量。我的一位老师在一次会议上认识了 Spotify 的一位大数据工程师(目前是 Spotify 的数据工程总监)。他非常友好地询问了多名 Spotify 员工的反馈,我收到了来自 Spotify 的巨大回应!这些机会是你除了万分感激之外什么都不能争取的。这只发生在我的第一个数据科学项目之后!不幸的是,我还不能在 Spotify 开始工作,因为我还必须为我的另一项研究写第二篇硕士论文。我决定将这篇硕士论文与我目前正在做的毕业实习结合起来。
在写第一篇硕士论文期间和之后,我参加了更多的在线课程,我想提供一些概述。也许他们可以给其他一些有抱负的数据科学家一些启发。我在第一篇论文中遇到的主要问题之一是无法使用机器学习算法。我一直在阅读他们如何在情感分析上比“词典”方法表现得更好,但我还没准备好使用它们。这为我的数据科学之旅提供了下一步:机器学习!以下是我参加过的数据科学/机器学习课程的概述:
机器学习 (Coursera —斯坦福大学)【www.coursera.org/learn/machi…
每个人都会向你推荐的机器学习入门课程。这门课的确很棒,它对主要的最大似然算法及其背后的数学原理提供了很好的概述。对我来说,唯一的缺点是在练习中使用了 Octave/MATLAB。
用于数据科学和机器学习的 Python(Udemy)https://www . Udemy . com/Python-for-Data-Science-and-Machine-Learning-boot camp/learn/v4/overview
真正让我开始接触 Python 的课程。非常清晰地解释了数据科学和机器学习的不同概念。本课程将使您掌握流行的用于机器学习的 scikit-learn 库。还包括对 Spark 和 TensorFlow 的介绍。
完成 SQL boot camp(Udemy)https://www . Udemy . com/the-Complete-SQL-boot camp/learn/v4/overview
一个数据科学家需要有更多的工具,而不仅仅是 R 和 Python 编程。SQL 是另一种重要的语言,您将经常使用它与数据库进行交互。这门课程帮助我获得了目前的实习机会,并在两天内教会了我所有需要了解的 SQL 知识。
Tableau(Udemy)www.udemy.com/mastertable…
Tableau 是另一个你会经常在数据科学相关的职位空缺中看到的工具。它与我习惯的编程语言非常不同,而是使用拖放界面。Tableau 非常适合可视化您的数据和构建交互式仪表板。
数据营(www.datacamp.com)
DataCamp 提供 4-6 小时的短期课程。这些课程以简短的解释视频为特色,之后你将通过练习应用视频中的原则。DataCamp 的伟大之处在于一切都发生在你的浏览器中,所以你不需要安装任何东西。这使得 DataCamp 成为 R 和 Python 编程的完美入门。当我开始使用 DataCamp 时,他们几乎只提供 R 课程,但他们一直在以非常高的速度增加 Python 课程。以下是我在 DataCamp 上完成的所有课程的概述。
R 课程(共 15 门):
- R 简介
- 中级 R +中级 R 实践
- 用 R 编写函数
- 将数据导入 R
- 正在清除 R 中的数据
- 用 dplyr 实现 R 中的数据操作
- 使用 ggplot2 实现数据可视化
- 统计学导论:导论,学生的 T 检验和方差分析
- 用 R Markdown 报告
- 机器学习导论
- 文本挖掘:词汇袋
- 使用 RStudio IDE
Python 课程:
- 面向数据科学的 Python 简介
- 面向数据科学的中级 Python
- Python 数据科学工具箱
- Python 中的深度学习
最后,我非常兴奋即将开始深度学习的快速人工智能课程(course.fast.ai/index.html)。本课程最初是在旧金山大学数据研究所开设的。令人欣慰的是,作者们也非常好心地创建了该课程的 MOOC 版本。深度学习一直在现有数据集上不断突破其他 ML 算法的性能天花板。对于像图像识别、语音识别、自然语言处理和时间序列预测这样的任务,我已经迫不及待地开始深度学习了!
希望我的故事也能给其他人最后一次推动,让他们去研究数据科学。你目前所学的或者你是否有“阿尔法”背景并不能决定你能走多远。我花了四年多的时间在我的大学里学习,最终找到了我真正受到启发的东西。MOOCs 和不同的在线资源提供了学习和使用它们的绝佳机会!如果你努力工作,并愿意为此付出时间,你就能取得伟大的成就。数据科学需要大量的实践和拥有许多不同技能的大型工具集。你什么都不做是不会掌握这些的。然而,如果你想得到它,你应该全力以赴,永远不要因为你“需要一个计算机科学学位”而让自己止步不前!
好了,今天对我来说这是足够的鼓舞人心的谈话。不要害怕关注我或给我发消息。回头见:)
你也可以在这里找到我:
领英:【www.linkedin.com/in/rutger-r…
【2017 年 9 月更新
这里有一个快速更新:我现在已经结束了我的实习,我的第二个硕士毕业了!10 月份,我将开始成为一名数据科学家。终于有了正式的‘头衔’感觉太棒了。有趣的是,作为一名数据科学家,我现在已经获得了工商管理和通信研究两个硕士学位。你真的永远不知道生活会带你去哪里。我也完成了 fast.ai 深度学习课程的第 1 部分。第 2 部分最近已经上传,我迫不及待地想开始了:)
参考文献
阿苏尔和胡伯尔曼,文学学士(2010 年 8 月)。用社交媒体预测未来。在Web Intelligence and Intelligent Agent Technology(WI-IAT),2010 IEEE/WIC/ACM 国际会议上 (Vol. 1,PP . 492–499)。IEEE。