TowardsDataScience 博客中文翻译 2016~2018(二十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Jupyter 笔记本上一个非常简单的交互控件演示

原文:https://towardsdatascience.com/a-very-simple-demo-of-interactive-controls-on-jupyter-notebook-4429cf46aabd?source=collection_archive---------1-----------------------

当使用交互式小工具时,笔记本变得活跃起来。用户可以可视化和控制数据的变化。学习变成了一种身临其境的、有趣的体验。研究人员可以很容易地看到改变模型的输入如何影响结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jupyter/IPython 项目对数据科学家如何快速测试和原型化他/她的想法并向同行和开源社区展示工作产生了最大程度的影响。这是一个非营利性的开源项目,诞生于 2014 年的 IPython 项目,该项目迅速发展,支持跨所有主要编程语言的交互式数据科学和科学计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jupyter 允许数据科学家/分析师使用他/她选择的任何领先编程范例(Python、C++、R、Julia、Ruby、Lua、Haskell 等等)来处理复杂的数据集和测试模型。在其明显的简单性背后,Jupyter 提供了强大的渲染能力来生成漂亮的标记文本和清晰的图形,以使数据科学/机器学习项目充满活力。下面是 Jupyter 笔记本上写的整个基础集合代数教程的例子。

然而,当用户可以交互地控制模型的参数并(几乎)实时地看到效果时,学习和实验数据就变得真正身临其境了。Jupyter 中大多数常见的渲染都是静态的。不过有一个大功夫引入了名为ipywidgets的元素,在 Jupyter 笔记本上渲染出了有趣的交互控件。基于这些核心元素,一些 2D 和 3D 动态数据可视化项目(例如 bqplotipyleaflet )的规模和范围也在不断扩大。

在本文中,我将展示一个演示笔记本,其中包含一个最简单的交互式控件元素,以及如何将它集成到数据建模任务中,以动态可视化模型参数调整的影响。

idgets 是多事件的 python 对象,在浏览器中有一个表示,通常是像滑块、文本框等控件。,通过前端(HTML/Javascript)呈现通道。他们使用 Jupyter 的“comms”API,这是一种对称、异步、一次性的消息传递 API,允许程序员在前端和后端之间发送支持 JSON 的 blobs,并隐藏 web 服务器、ZMQ 和 web 套接字的复杂性。下面详细讨论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安装小组件

安装 ipywidgets 有两种选择。它们略有不同,所以请注意区别。基本上,如果您使用 pip,您还必须在笔记本中启用 ipywidget 扩展,以便在下次启动笔记本时呈现它。您可以在您使用的任何虚拟环境中启用它,以便该扩展不会影响任何其他环境。

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

或者,您可以进行 Conda 安装(如果您使用 Anaconda),它会自动启用。

conda install -c conda-forge ipywidgets

使用交互对象/控件

interact函数(ipywidgets.interact)自动创建用户界面(UI)控件,用于交互式地浏览代码和数据。这是开始使用 IPython 小部件的最简单的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除了interact,IPython 还提供了另一个函数interactive,当您想要重用生成的小部件或者访问绑定到 UI 控件的数据时,这个函数非常有用。注意,与interact不同,函数的返回值不会自动显示,但是你可以用IPython.display.display在函数内部显示一个值。

一个简单曲线拟合练习的演示代码

锅炉板代码可从我的 GitHub 库获得。请随意叉/下载并使用它。我们实际上是生成一个带有噪声的高斯数据,并借助交互式滑动条或下拉菜单控件来处理各种模型参数。在传递函数并使用 ipywidget.interactive()返回的对象呈现显示后,它看起来是这样的…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们调用 Scipy 包中的曲线拟合优化函数,并将理想的高斯分布函数拟合到数据中。该代码准确地描述了如何从 ipywidget 对象中提取数据并将其传递给优化器。您可以使用各种模型参数,并查看优化器拟合/估计的参数如何随着噪声参数的改变而与理想值有所不同,只需向左或向右滑动控件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

摘要

我们讨论了关于 IPython 小部件或交互式控件的一些基础知识,以及为什么它们可以将枯燥的数据科学代码笔记本变成有趣的、生动的文档。我们还展示了一个简单的演示代码来说明统计模型拟合练习中的想法。在未来,我们希望展示一些更酷的小部件在机器学习模型调整或深度学习超参数优化中的应用。

喜欢这篇文章吗?成为 中等会员 继续 无限制学习 。如果你使用下面的链接, ,我会收到你的一部分会员费,而不会对你产生额外的费用

[## 通过我的推荐链接加入 Medium—Tirthajyoti Sarkar

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@tirthajyoti/membership)

深度认知的视频漫游

原文:https://towardsdatascience.com/a-video-walkthrough-of-deep-cognition-fd0ca59d2f76?source=collection_archive---------9-----------------------

大家好!在本文中,我将与您分享几个视频,带您了解 Deep Cognition 的平台和深度学习工作室。我们将运行简单的模型作为例子,最后会有一个最终的惊喜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习是一个令人惊叹的领域,它帮助我们创建伟大的解决方案,解决数据科学世界中的难题。我在过去谈论过深度学习,以及它如何在你的工作流程中帮助你,特别是在计算机视觉和 NLP 问题上。

你可以在这里查看其中的一些:

[## 我的深度学习之旅

在这篇文章中,我将分享我如何研究深度学习并使用它来解决数据科学问题。这是一个…

towardsdatascience.com](/my-journey-into-deep-learning-c66e6ef2a317) [## 深度学习的 Skejul 会议

厌倦了试图与某人见面,却找不到日期或时间?我也是。

towardsdatascience.com](/skejul-meetings-with-deep-learning-5efab285b111) [## 深度学习的“怪异”介绍

有关于深度学习的惊人介绍、课程和博文。但这是一种不同的介绍。

towardsdatascience.com](/a-weird-introduction-to-deep-learning-7828803693b0)

当你进入一个新的计算领域时,你应该学习的一件事是好的工具。工具让我们能够解决我们的问题,而不需要从一开始就花费数小时编写简单或复杂的代码。现在有几个深度学习的工具,在编码领域和视觉领域。

在过去,我曾谈论过 Deep Cognition,一家伟大的公司,和其他人一样,正在走上民主化人工智能和深度学习的道路。

通常我们做深度学习编程,学习新的 API,有些比其他的更难,有些真的很容易,比如 Keras,但是一个可视化的 API 来创建和部署深度学习解决方案怎么样?这是他们的承诺。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

他们的平台, Deep Learning Studio 可作为云解决方案(【https://deepcognition.ai/cloud/】)桌面解决方案(【http://deepcognition.ai/desktop/】)使用,软件将在您的机器或企业解决方案(私有云或内部解决方案)上运行。桌面版允许你使用自己的计算机与 GPU 和硬件。而且都是免费的!

在接下来的部分中,我将带您了解创建帐户、进入和启动云应用程序、获取数据、创建项目然后创建模型、使用他们的 AutoML 解决方案以及部署模型的过程。

如需书面指南,请访问 Rajat 的博客:

[## 深度学习工作室让深度学习变得简单——完整指南

没有编程的深度学习可能吗?

towardsdatascience.com](/deep-learning-made-easy-with-deep-learning-studio-complete-guide-a5c5ae58a771)

我的是深度学习的简单介绍和一些信息:

[## 深度认知让深度学习变得简单

在过去的一个月里,我有幸见到了 DeepCognition.ai 的创始人

becominghuman.ai](https://becominghuman.ai/deep-learning-made-easy-with-deep-cognition-403fbe445351)

所以让我们开始吧!

创建帐户

在此输入:

[## Register - DeepCognition.ai

Deep Cognition 通过单点登录提供对云和桌面软件的免费访问。创建您的免费帐户…

deepcognition.ai](https://deepcognition.ai/register/)

要关注视频:)。

启动云应用程序

深度学习工作室概述

创建项目

摄取数据

使用预先存在的数据

使用可视化 API 创建模型

使用 AutoML 创建模型

为您的模型获取最佳超参数

训练您的模型

部署您的模型

所以你可以看到,使用 Deep Learning Studio,可以在几分钟内建立深度学习模型,并在几秒钟内部署。这种能力将使许多开发人员能够处理复杂的问题,而不用担心编码、API 等问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在是最后的惊喜!如果你来了,我想你会感兴趣的。如果你想成为一名数据科学家,我的朋友 Matthew Dancho 为你提供了一个非常棒的课程。商业科学大学将带您了解整个商业数据科学流程,利用数据科学解决问题,使用机器学习创建交互式应用,并在组织内分发解决方案。

是的,我有优惠券代码!点击下方使用!

[## 商业数据科学(DS4B 201 / HR 201)

了解如何使用 H2O 自动机器学习和石灰黑盒模型解决现实世界中的员工流动问题…

大学.商业-科学. io](https://university.business-science.io/p/hr201-using-machine-learning-h2o-lime-to-predict-employee-turnover/?coupon_code=SAVE_15)

那里有一个很棒的课程,折扣很大!

如果您有疑问,请随时联系我:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感谢你阅读这篇文章。希望你在这里发现了一些有趣的东西:)

如果您有任何问题,请在 twitter 上添加我:

[## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/FavioVaz)

和 LinkedIn:

[## Favio Vázquez —首席数据科学家— OXXO | LinkedIn

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 15 个工作职位列在…

linkedin.com](http://linkedin.com/in/faviovazquez/)

那里见:)

对英国数字 1 的直观分析:用数据弄脏自己

原文:https://towardsdatascience.com/a-visual-analysis-of-uk-number-1s-getting-down-and-dirty-with-data-a663cee021c4?source=collection_archive---------16-----------------------

本文重点介绍第一个计时器尝试收集和分析数据的过程。这是我最后一年项目概述的第二部分:对英国数字 1s 的视觉分析。

TL;DR:在数据清理上投入比你想象的更多的时间,即使这不一定是有趣的部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据采集

这个项目使用的数据集由每首排名第一的歌曲的列表组成,表示标题、艺术家、首次排名第一的日期、排名第一持续了多少周、这些周是否连续、Spotify 曲目 ID 和 Spotify 音频功能。

为了创建这个数据集,我用一个 Python 脚本列出了每首排名第一的歌曲,这个脚本抓取了官方排行榜的网页。收集的数据(曲目标题、艺术家、日期)然后被输出为一个 JSON 文件。

我选择使用 Python 和 BeautifulSoup,因为我在以前的个人项目中使用过它们,认为它们会很合适。不幸的是,网页上使用的标记不是很好。表格没有类来区分它们和页面上其他类型的表格,表格标题也没有正确标记。这使得它比预期的更复杂,但仍然比手动将数据复制到 JSON 文件中更容易(或者更有趣)。

然后,我需要获取 JSON 文件中每个音轨的 Spotify 属性。鉴于要检索的曲目数量,我知道需要一个自动化的解决方案。

Spotify API 文档提供了一个从终端运行 curl 请求的示例,但是要对每首曲目执行此操作,需要一个脚本来格式化曲目标题和艺术家姓名,然后运行该命令。没有更多使用 curl 的经验,我没有信心这么做,所以我考虑用 Ruby 写。我最初的尝试是使用在线转换器将 curl 命令转换成 Ruby,但这导致了多个问题和无效响应。经过进一步研究,我发现了RSpotify——Spotify API 的 Ruby 包装器。

使用 RSpotify 需要使用客户端和密钥连接到 Spotify API。要创建这些应用程序,需要在 Spotify 开发者门户上注册。然而,如果不危及帐户的安全,就无法将密钥提交给 GitHub。因此,创建了一个单独的文件来存储密钥(被 git 忽略’),并将密钥导入到脚本中:

key = File.read(‘spotify_keys.json’)
data_hash = JSON.parse(file)
key = JSON.parse(key)RSpotify.authenticate(key[‘1’][‘client’], key[‘1’][‘secret’])

这意味着在线代码中没有键值的记录。

RSpotify 的Track.search功能允许搜索曲目标题和艺术家,并从 Spotify 检索歌曲 ID。假设第一个结果是最相关的,查询被限制为一个结果。曲目 ID 从查询结果中检索,并在 RSpotify GET 请求中用于检索歌曲的音频特性。这些随后被写出到一个 JSON 文件中,其中包含了音轨的详细信息。有一些曲目在查询 id 时没有返回结果,但可以使用 Google 找到。我添加了对这些歌曲的检查,以手动提供 id。然后,我随机选择了几首歌曲,以确保检索到了正确的数据。

然后,我开始分析我用 RStudio 收集的数据,找出任何有趣的模式和关系,以便在文章中强调。

创建播放列表

作为网络体验的一部分,用户可以关注与文章相关的 Spotify 播放列表。我通过编写一个节点脚本,利用 Spotify Web Api 节点库(包括一个可以轻松地将曲目添加到播放列表的功能)创建了这个节点。

由于要添加到播放列表中的歌曲数量,当脚本运行时,许多曲目都失败了。我将它调整为每隔几秒钟休眠一次,以免服务器过载,还输出了所有失败曲目的列表。然后脚本使用这个列表,向播放列表中添加更多的歌曲,并重新生成失败曲目的列表。

一旦创建了播放列表,我就可以看到与数据相对应的歌曲。很多歌曲都是不正确的。通过搜索“标题艺术家”,一些结果是以搜索标题命名的专辑中的曲目,而不是想要的曲目。其他的,如艾德·希兰的 Perfect 返回了一个封面,而不是已经到达第一名的版本(由艾德·希兰和碧昂斯而不是艾德·希兰)。此外,有超过 50 个卡拉 ok 版本的实例,而不是原始录音——这意味着他们的乐器评级将与实际曲目大相径庭。数据集需要重新创建。

重新创建数据集

我使用与播放列表生成器相同的 Spotify 库重写了 Node 中的数据收集脚本。当我进一步研究 Spotify API 时,我意识到你可以指定一个包含标题和艺术家的搜索。这给出了更准确的结果,但是大量的查询没有返回任何结果。其中一些是由于从官方图表网站上收集的数据中艺术家名字的拼写错误(例如,“Bobbie Gentry”被拼写成了“Bobby”)。我在发现这些问题时进行了修复,但很快意识到我应该在项目开始时花更多的时间清理数据。

许多丢失的数据是由于无法通过 Spotify API 获得曲目。例如,Slade 在 Spotify(英国)上只有 3 首歌曲,但他们有 6 首英国排名第一的歌曲。然而,当在谷歌上搜索“曲目、艺术家、spotify”(例如*“因为我爱你 Slade Spotify”*)时,会列出一个 Spotify 条目,但无法播放(我假设它在英国不可用)。这些在 URL 中有它们的关联 ID,这足以放入 API 并检索音频特性。结果,很多曲目被硬编码进了剧本。不是最好的解决方案,但它完成了工作。我很想现在就回去,看看是否能找到更好的解决方案。有 5 首歌曲根本不在 Spotify 的库中,这些已经被包括在整体数据中,但必须在网页的音频功能部分注明它们已被编辑。一旦数据集被重新创建,我使用 Excel 来检查重复的 id 或丢失的音频特征。

数据分析

现在我有了所有的数据,分析可以开始了。数据科学行业使用的工具种类繁多,从 ExcelSPSS 。我决定用 RStudio 对数据进行基本分析。

在这个项目之前,我没有在编程环境中做过任何数据分析。当我第一次想到这个项目的想法时,我还在 BBC 新闻部实习,所以我向数据新闻团队寻求帮助,以便对如何进行数据分析有一个基本的了解。午餐时,他们在 R 给我开了一个简短的非正式研讨会,向我展示了如何创建散点图,并寻找变量之间的统计意义,以确定是否有潜在的故事。

在进行数据分析时,应该考虑询问数据或测试假设的问题。我最喜欢的一个问题是“最适合跳舞的十年是什么?”。为了回答这个问题,我使用 ggplot2 创建了一个散点图,显示了十年和可跳舞性之间的关系。如下所示:

#uses ggplot2 to draw scatterplot + regression line
plot <- ggplot(all_tracks, aes(x = decade, y = danceability)) + geom_point(aes(colour = energy)) + geom_smooth(method=’lm’,formula=y~x)
plot

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

散点图显示,最适合跳舞的节点集中在 2010 年代,这意味着这是最适合跳舞的十年。你也可以看到图表显示了可跳舞性和十年之间的正相关关系。然后使用线性模型函数来观察这是否具有统计学意义。

my.model <- lm(decade ~ danceability, data = all_tracks)
summary(my.model)Call:
lm(formula = decade ~ danceability, data = all_tracks)
Residuals:
 Min 1Q Median 3Q Max 
-41.517 -14.480 0.775 15.205 40.518 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 1963.302 1.969 996.96 <2e-16 ***
danceability 34.920 3.191 10.94 <2e-16 ***
 — -
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

Residual standard error: 18.06 on 1317 degrees of freedom
Multiple R-squared: 0.08336, Adjusted R-squared: 0.08266 
F-statistic: 119.8 on 1 and 1317 DF, p-value: < 2.2e-16

可跳舞性和十年之间有很高的统计显著性,由非常接近 0 的 p 值(和旁边的三颗星)表示。这意味着十年对可跳舞性有积极的影响(所以平均来说,数字 1 随着时间的推移变得更适合跳舞)。

最初,我花时间调查关系是否具有统计学意义——这很有趣,但我对它的理解不足以在我的文章中进行讨论。我渴望了解更多关于数据分析的知识,但必须记住这主要是一个 web 开发项目,不要被数据消耗太多,不管我觉得它有多有趣。

随着更多的想法出现,我使用 StackOverflow 来确定如何询问数据。我的问题非常简单,比如如何根据特定变量对行进行分组并找出平均值,或者如何对某一列的结果进行排序。

当我不知道如何向谷歌表达我的问题时,我向 BBC 的一位数据记者朋友寻求帮助。一个例子是当我试图从数据集中识别独特的艺术家时。当艺术家合作时,数据中没有指示——艺术家甚至没有逗号分隔,这使得很难确定单个艺术家贡献了多少首歌曲。最后,我的解决方案是手动创建一个单个艺术家的列表,允许我识别每个艺术家出现的次数,给我他们贡献的曲目总数。最初,我试图用 R 来做这件事,但在多次尝试失败后,我意识到我可以只写一个节点脚本。虽然这要容易得多,但仍然需要几次尝试来完善剧本。最初,“ti”是最常见的 75 位艺术家,因为“TI”会出现在许多不同的词中。因此,我对它进行了改进,只对整个单词使用正则表达式。但是,结果仍然不完全准确,例如:

 ┌─────┬────────────────────┬────────────┬───────┐
         │ id  │ artist             │ weeks_at_1 │ count │
         ├─────┼────────────────────┼────────────┼───────┤
         │ 621 │ NICOLE             │      6     │   3   │
         │ 622 │ NICOLE KIDMAN      │      3     │   1   │
         │ 623 │ NICOLE SCHERZINGER │      1     │   1   │
         └─────┴────────────────────┴────────────┴───────┘

有一个艺人的名字叫妮可(她有一首单曲排名第一),但她的曲目也包括其他两位女性的歌曲。尽管肯定有更好的解决方案,但我最终还是手动修复了这个和其他实例。

随着我继续分析,我发现了更多的数据清理问题——比如贾斯汀比伯的’什么意思?‘拼起来有没有 a’?’。我发现了 OpenRefine,我用它来验证数据,这有助于确定一些类似的问题。
如果我在项目开始时投入足够的时间和精力清理数据,独特艺术家的问题可能会更快得到解决。解决这些问题后,我对自己创建的数据集更有信心了。

总的来说,我真的很喜欢研究这些数据,并且绝对花了比我应该花的更多的时间来玩这些数据。这使得用于设计和测试的时间比我最初计划的要少,这也无助于我的数据在分析阶段结束时需要彻底检查。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

An attempt to visualise some of the data gathered using ggplot in R.

回到第一部分

高斯过程回归核的直观比较

原文:https://towardsdatascience.com/a-visual-comparison-of-gaussian-process-regression-kernels-8d47f2c9f63c?source=collection_archive---------2-----------------------

高斯过程回归是多元高斯分布的一种应用,它是一种强大的预测工具,用于高度非线性或不容易使用线性或多元回归建模的数据。高斯过程可以完全用#1 表示。平均值向量(由输入变量 x1、x2…xn 的数据定义)和#2。跨越(x1,x1),(x1,x2)… (xi,xj)的协方差矩阵。

Sklearn 库的 GPR 工具优化了协方差函数或内核函数,以使数据符合高斯过程。在拟合模型时,可以使用几个不同的核函数,每个核函数都具有独特的属性和特征。可以使用单个核函数,也可以使用核函数的数学和或乘积——可能性几乎是无限的!基于数据属性选择合适的核函数是建模过程中的关键决策。

本文不会深入探讨内核选择的细微差别,甚至不会讨论如何评估 GPR 的适用性。相反,我将提供一个简单的高斯过程回归的直观比较,每个回归都使用 Sklearn“内核”库中的四个流行的内核函数来拟合每月的温度数据。

每月的温度数据,作为 Kaggle 的气候变化:地球表面温度数据图书馆的一部分,是免费提供的,已经被删减,只包括了比利时这个国家从 1960 年到 2013 年以摄氏度为单位的月平均温度。我用四种不同的内核函数来拟合这些数据:

径向基函数

指数正弦平方

有理二次曲线

马特恩

下面提供的代码集首先评估每个内核的 fit+predict 运行时:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是四个内核的预测值,叠加在温度数据上。Exp-Sine-Squared & Matérn 核比 RBF 或有理二次核更容易获得温度数据的周期性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于任何希望修改这些代码并将其用于自己的数据的人来说,请注意 Sklearn 的 GPR 工具集并没有优化这些内核函数中的所有参数,例如 Matérn 内核中的参数 nu。即使对于优化的参数,用户也应该考虑用什么样的起始值来初始化每个内核函数是有意义的,并首先将其反映为该代码中先前内核定义的一部分。

正如我前面提到的,高斯过程回归不必受单个核函数的限制。这段代码可以用来简单地计算不同的内核函数组合,或者求和或者相乘(或者两者兼有!).探索愉快!

[## Python_Projects/GPR_kernels.py

github.com](https://github.com/dasotelo/Python_Projects/blob/master/GPR_kernels.py)

神经网络的可视化介绍

原文:https://towardsdatascience.com/a-visual-introduction-to-neural-networks-68586b0b733b?source=collection_archive---------1-----------------------

更新:我已经添加了一个视频解释来直观地介绍神经网络,这里:https://www.youtube.com/watch?v=wgGezGnLTbY

神经网络有多种风格和类型,是目前分类问题的最新技术。卷积神经网络、递归神经网络和最近的生成对抗神经网络也被证明是非常有用的。像逻辑回归、SVM、决策树等方法也用于分类。然而,从这些过渡到神经网络的世界通常充满了抽象。
写这篇博客的目的是简化这些抽象概念。通过使用实验和图表,神经网络的工作是通过这个职位描述。人们可以期待它回答的一些问题是:

1.logistic 回归能做什么?
2。什么是逻辑回归不能做的?
3。我们如何从逻辑回归过渡到神经网络?
4。用神经网络改变决策界限
5。激活和其他超参数的变化如何影响神经网络的收敛

请务必阅读标题,以便更好地理解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sample classification problem to solve. We need a decision plane to separate red and blue points

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logistic Regression can solve this problem and give the decision plane as shown. The code for the solution is available here. Process of obtaining in the line is explained in the code

从上图中我们看到,逻辑回归可以根据颜色(红色和蓝色)对这些点进行分类。
我们来换个问题。下图中的问题是一个非线性问题,意味着我们不能在这种情况下使用一条线(一般为超平面)来简单地对点进行分类。我们还可以从下图中看到,逻辑回归无法解决这个问题,因为它试图用一条线将这些分开。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A non linear classification problem

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logistic Regression unable to solve the problem

逻辑回归可以被视为单层神经网络(具有 1 个神经元)并且“sigmoid”作为激活函数。让我们看看一个以‘乙状结肠’为激活和一个神经元的神经网络能否解决这个问题。这是使用 Python 的 Scikit-learn 库的 MLPClassifier 完成的,实现可以在这里找到。
下面三幅图描绘了一个基于单个神经元的神经元试图解决的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mlp = MLPClassifier(hidden_layer_sizes=(1),max_iter=500000,activation=’logistic’,learning_rate_init=0.01)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mlp = MLPClassifier(hidden_layer_sizes=(1),max_iter=500000,activation=’identity’,learning_rate_init=0.01)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mlp = MLPClassifier(hidden_layer_sizes=(1),max_iter=500000,activation=’relu’,learning_rate_init=0.01)

我们观察到,基于单个神经元的神经网络如预期的那样给出了线性决策边界,而不管配置(激活函数、学习速率等)如何,该边界都不能解决非线性问题。让我们看看当我们使用两个神经元时会发生什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Non Linear problem with 1 layer and 2 neurons

我们观察到,现在我们得到了两个边界,并且分类的误差减少了(如通过正确类别中的点数来判断的)。可以解释为黄色区域的点为蓝色,其他区域为红色。该解仍然有一些误差,但是该解比单个神经元的情况具有更低的误差。我们还可以看到,每个神经元的两个决策边界在这里结合起来,以做出决策。让我们看看当我们将神经元的数量分别增加到 2、3、4、6、7 和 30 时会发生什么。(绘制决策边界的代码可以在这里找到)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decision plane with 3 neurons : lower error than previous case.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decision plane with 6 neurons. Perfect classification with 100 % accuracy. Model now has learnt to combine 6 decisions to form a final decision. Points in yellow region are classified as blue and rest are classified as red

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decision plane with 8 neurons

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decision plane with 30 neurons

我们观察到,随着神经元数量的增加,模型能够更准确地对这些点进行分类。决策边界是复杂的,因为它是各个决策边界的非线性组合(通过激活函数)。在抽象层次上,它可以被视为多个分类器以非线性方式组合来获取非线性决策平面。可以得出结论,当数据是非线性时,一层具有非线性激活函数的多个神经元可以对其进行分类。这个样本问题相当小。在更高维度和更复杂的问题的情况下,更复杂的架构可以发挥作用。
在上图中,使用了非线性激活函数,如“relu”。这是通过以非线性方式组合各种平面来引入“非线性”。让我们看看当我们使用线性激活函数时会发生什么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

30 neurons with linear activation function

当使用另一个线性函数“Wx+b”组合时,线性激活函数最终再次给出线性决策平面。因此,神经网络必须具有非线性激活,否则增加层和神经元是没有意义的。
让我们看看一个模型如何收敛于一个 3 类分类问题和一层 6 个神经元。这里的 3 个类是深蓝色、浅蓝色和红色,找到的决策空间分别是黄色、蓝色和紫色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decision boundary of a non linear 3-class classification problem

现在让我们通过另一个问题来了解更多关于神经网络的功能。

问题和结果是从 Tensorflow playground 模拟的,tensor flow playground 是一个非常好的可视化神经网络工作方式的工具。

[## 张量流-神经网络游乐场

这是一种构建从数据中学习的计算机程序的技术。它非常松散地基于我们如何思考…

playground.tensorflow.org](http://playground.tensorflow.org) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A more complex non linear problem. We need to classify blue and orange points

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 neuron. As expected, only a linear boundary is available and classification is poor

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Using 3 neurons. Now the boundary is curved. Classification is somewhat better but far from perfect. Average loss of 0.473 noted. Classification is judged by establishing that blue points must have a blue backgroundand orange must have a orange background

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5 neurons used and test and train losses are 0.396 and 0.259. So we get a better classification . Model was allowed to run epochs till 1 minute

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Using 5 neurons, classification improves further

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8 neurons. A better and faster classification. The losses obtained after 1 minute are depicted

现在让我们将上面的情况与我们有多个层的情况进行比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

We observe by using a 3 layer net with 4, 4, 2 neurons in each layer, we get a better and faster classification

上面显示,这个问题可以通过简单地增加一层中的神经元来解决,但是当使用多层时,它解决得更快。多层还使模型能够形成更高级别的特征(输入第一级特征并在其上进行处理)。这种行为的一个很好的例子可以在 CNN 的图像分类中找到,其中起始层找到基本的形状,如直线、曲线等,但后面的层找到这些形状之上的属性,如脸、手等。让我们通过另一个实验了解更多。上图使用“sigmoid”作为激活函数。众所周知,sigmoid 有一个梯度消失的问题。这意味着随着更多的图层出现,计算更新权重所需的梯度逐渐趋于零。“Relu”通常被推荐作为处理这个问题的激活函数。让我们重复上面的数字,但是这次用一个“relu”来验证这个事实

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Non linear problem decision boundary using 3 layers (4,4,2 neurons respectively) and ‘relu’ as activation

很明显,使用 relu 几乎完美地解决了这个问题,并且只需要一半的时间。损失接近于零。此外,使用具有 8 个 relu 的 1 个图层不会获得相同的结果,因为多个图层正在利用它提取的更高级别要素属性。

这种实验的代码可以在这里找到。

添加 gif 动画来展示决策边界如何收敛

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Animation depicting boundary formation with 3 layers and ‘relu’ activation

这个博客涵盖了神经网络的可视化方法。这是我第一次尝试写博客。请继续关注即将发布的与机器学习相关的其他主题和应用的帖子。如有任何问题/反馈,请随时联系我,shikharcic23@gmail.com 或

[## Shikhar Sharma |职业简介| LinkedIn

查看 Shikhar Sharma 在全球最大的职业社区 LinkedIn 上的个人资料。Shikhar 有 9 份工作列在…

www.linkedin.com](https://www.linkedin.com/in/shikhar-sharma-b98078119/?ppe=1)

使用美国各州直观查看欠拟合和过拟合

原文:https://towardsdatascience.com/a-visual-look-at-under-and-overfitting-using-u-s-states-7fd0d8ade053?source=collection_archive---------6-----------------------

下装和过装是什么样子,如何避免。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The decision surface of a Gradient Boosting Classifier predicting U.S. states from state border data in the form of latitude and longitude coordinates. The opacity of the voronoi cell corresponds to the predicted probability of that cell (prediction confidence).

为什么要避免过度拟合

在训练预测模型时,需要牢记许多注意事项-数据如何生成的基本假设、独立变量之间的相关性、用于训练的数据份额等等。要验证的假设和要考虑的点因问题而异,但是从一个建模练习到下一个建模练习,仍然有一些关键的考虑事项。其中一个考虑因素是偏差-方差权衡。本文通过说明与模型欠拟合和过拟合概念相关的权衡来解释偏差-方差,通过在地理坐标平面上绘制模型的决策表面来直观地显示。

当模型不够复杂,无法捕捉训练数据中存在的关系时,该模型就是有偏差的。相比之下,当模型捕获了训练数据中存在的太多信息时,它会有很高的方差,从而导致根据测试数据做出的预测之间有很大的差异。与以最小化偏差和方差的方式训练的模型相比,具有过高偏差或方差的模型将表现出增加的预测误差。优化这种权衡的一种方法是通过了解模型是欠拟合还是过拟合——在根据测试或维持数据评估模型后,我们将这些术语与模型的性能联系起来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A visual representation of underfitting, appropriate-fitting, and overfitting. Source: What is underfitting and overfitting in machine learning and how to deal with it.

欠拟合模型表现出很大的偏差。当拟合不足时,模型将无法捕捉训练数据中的重要关系,这些关系本可以用于进行预测。这种在建模过程中未能捕获相关信息的情况会导致较差的预测性能。当过度拟合模型时,模型在根据新的、看不见的数据预测输出时通常表现不佳。通常,由于模型过于复杂,未能验证维持数据的模型性能,或者在定型模型时未使用交叉验证,模型会过度拟合。类似于偏差-方差权衡,在训练预测模型时,最理想的是最小化欠拟合和过拟合,目标是找到两者之间的理想平衡。

本文通过根据美国人口普查局数据训练的模型绘制决策面,直观地说明了欠拟合和过拟合模型的影响,这些数据包含州边界的纬度和经度坐标以及相关的州标签(如加利福尼亚州、伊利诺伊州和田纳西州)。通过绘制适合该数据的模型的决策面,我们可以使用许多人熟悉的映射(48 个相邻的美国)直观地解释模型在欠拟合和过拟合情况下的行为。

数据

数据来自美国人口普查局。在其原始格式中,数据是一个单一的锁眼标记语言(KML)文件,其中包含美国各州边界的经度和纬度坐标。使用简单的 Python 脚本从 KML 文件中解析出必要的纬度、经度和标签(州)数据。

该数据集包含 11,192 个观察值。观察值的数量因州而异——加利福尼亚州有 467 个观察值,而罗德岛州只有 59 个(美国人口普查局不建议将这些数据用于任何严肃的地理空间或建模工作)。然而,数据足够丰富,可以使用探索性工具,并包含足够的信号,可以在给定一对纬度和经度坐标的情况下预测美国的州。然后,通过在地理坐标平面上绘制决策面,我们可以注意到欠拟合和过拟合模型之间的决策面差异。

请注意,我们只有美国每个州的边界坐标,而没有该数据在每个州边界内的坐标。这意味着我们的坐标和州标签在经纬度坐标平面上彼此靠近,因为它们可能共享一条边界(例如田纳西州和乔治亚州或爱达荷州和蒙大拿州)。这是基于树的模型应该能够利用的数据属性(树基于输入数据创建一系列分支)。对于除了边界坐标之外还包含每个州边界内的经纬度坐标的数据集,其他类型的模型会表现得更好。

欠拟合和过拟合以图形方式显示

下面,这里使用了一个随机森林分类器来说明欠拟合、过拟合以及介于两者之间的模型的决策面。在这些图中,构建的 voronoi 单元包括几个经纬度坐标和相关的预测状态,我们只使用最可能的状态进行可视化,或者对该单元进行着色和着色。通过给单元着色和加阴影,我们可以直观地解释模型对单元的预测及其对该预测的信心。

一个随机森林分类器只是一个决策树分类器的集合。基于树的分类器创建一系列作为参数的分支。例如,如果经度大于 36,那么它必须是更北的一个州,或者与阿肯色州在同一经度上。这些分支参数可以一直追踪到它们的终点,从而得到一个预测值。决策树可以学习关于我们坐标平面的规则(例如,田纳西州位于 34 度纬度以上),以用于预测给定坐标集的状态-决策树的架构非常适合于这种数据和问题。假设当提供一对经纬度坐标时,单个基于树的分类器在预测美国州时应该表现得相当好,那么随机森林分类器(决策树分类器的集合)应该提供比单个决策树分类器更好的泛化能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

This graphic shows how the results from two decision trees are combined in a random forest model to produce a single decision surface with improved results over a single decision tree. Source: Towards Digital Staining using Imaging Mass Spectrometry and Random Forests — Technical Report

当拟合不足时,模型无法捕捉训练数据中的许多重要关系,这些关系包含解释或预测能力。在这个 underfit 示例中,数据按照约定分为训练集和测试集,使用训练数据来拟合模型,同时使用测试集来绘制决策面。更具体地说,我们使用坐标数据测试集的外部边界来生成一个预测点网格——这个网格生成我们的决策面。为了对第一个示例中的模型进行欠拟合,可用的信息量受到随机森林分类器中的两个参数的限制,这两个参数是叶节点中的最小样本数和树的最大深度,分别设置为 50 和 3。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The decision surface of a Random Forest Classifier that is underfit. Note the large, broad expansions of certain states and total lack of other states that should be present in the predictions. This model is failing to capture enough information from the training data to make good predictions.

这里的结果远非令人鼓舞。绘制决策表面向我们表明,该模型在预测适当的美国州方面表现不佳——根据该模型,美国有 15 个州,与 48 个相邻州的真实数量相差甚远。一些国家扩张到其边界以外的地区,而另一些国家则远远小于其应有的规模。这个模型偏向于训练数据。

我们来说明相反的情况。假设我们使用 all 数据进行训练和测试,同时还使用 scikit-learn 的随机森林分类器中的默认参数设置进行训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The decision surface of a Random Forest Classifier that is overfit. Note the improved result over underfitting but the presence of rough, jagged borders. This model is failing to generalize to new data and has difficulty minimizing variance in its predictions along borders.

结果是一个决策表面表示过度拟合模型的模型-该模型似乎预测了每个州的大致区域,但未能很好地限制它们并符合它们的实际边界。该模型具有由过度拟合引起的高方差。当模型过度拟合时,它们无法归纳出新的、以前看不到的数据。在这个例子中,通过使用用于训练和测试的所有数据,该模型被故意过度拟合。此外,允许叶节点中的最小样本数小到 1,深度大到 100,会导致模型进一步过度拟合。最终的可视化结果是一个决策表面,它说明了一个过度拟合模型-高方差表现为在更复杂的区域(边界)中的不准确预测,尽管模型已经在训练中看到了数据的每个先前示例。

对于既不欠拟合也不过拟合的随机森林分类器,决策面看起来像什么?使用 scikit-learn 的 GridSearchCV ,可以使用精度、召回率和 F-score 等验证指标,通过交叉验证执行网格搜索来确定要使用的最佳参数。GridSearchCV 可以帮助识别给定模型和规范、数据和度量的理想参数值。使用召回作为验证度量,适合该数据的随机森林分类器的最佳总体值具有分别设置为 30 和 200 的参数 min_samples_leafmax_depth

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The decision surface of a Random Forest Classifier that is neither under nor overfit. This model does a better job at generalizing to new data than the overfit model (evident through improved border predictions), but captures more information than the underfit model.

上面的决策面是一个模型的结果,这个模型既不欠拟合也不过拟合(尽管还有相当大的改进空间)。该模型比欠拟合和过拟合模型更好地推广到新数据和预测状态边界,并在偏差和方差之间进行了理想的权衡。与欠拟合或过拟合模型相比,州边界更能代表其真实边界。

使用相同的参数,另一个基于树的模型的决策表面,一个梯度增强的树分类器,适合该数据,似乎显示出比随机森林分类器进一步的改进。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The decision surface of a Gradient Boosting Classifier using the same parameter values as our “best” Random Forest Classifier. Note on the Gradient Boosting Classifier’s improved ability to predict U.S. states using latitude and longitude coordinates.

梯度增强分类器比随机森林分类器产生更好的结果。通过对梯度增强分类器执行另一个具有交叉验证的网格搜索,或者检查其他方法(如解决类别不平衡或将经纬度坐标之外的其他信息合并到模型中),可以进一步改进此结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

理解偏差-方差权衡及其与欠拟合和过拟合的关系是任何监督建模问题的核心组成部分,这里显示的图只是探索这一概念的一种方式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

This animation shows how you can explore the decision surfaces shown in this article using the interactive visualization (linked below). Hover over voronoi cells to view classifications for U.S. state and the confidence in that classification (prediction).

您可以在这个交互式可视化中进一步探索模型的决策面。与这个项目相关的代码可以在这个 GitHub 库中找到,并且可以毫不费力地翻译成新的建模问题。

感谢阅读!

供稿人: 瓦伦蒂诺康斯坦蒂努 克里斯拉波特

卷积神经网络演练—超参数调整

原文:https://towardsdatascience.com/a-walkthrough-of-convolutional-neural-network-7f474f91d7bd?source=collection_archive---------3-----------------------

在多样的深度学习架构中,卷积神经网络(简称 convnets)以其在计算机视觉上前所未有的性能脱颖而出。这是一种受动物视觉皮层启发的人工神经网络,已成功应用于视觉识别任务。

在本文中,我将提供一个关于 convnet 的演练,如何调优超参数以及如何可视化隐藏的卷积层。

动机

首先,我们希望我们的计算机做什么?当我们看到一只猫在后院奔跑或睡在沙发上时,我们的大脑会下意识地认出它是一只猫。我们希望我们的计算机为我们做类似的事情,即把一幅图像作为输入,找出它的独特特征,并把图像标记为输出。这基本上是 convnet 能为我们做的。

什么是 convnet?

最基本的是,convnet 是一种特殊的神经网络,至少包含一个卷积层。典型的 convnet 结构获取图像,使其通过一系列卷积层、非线性激活层、汇集(下采样)和全连接层,以输出分类标签。

convnet 与常规神经网络的不同之处在于使用了卷积层。在常规的神经网络中,我们使用整个图像来训练网络。它对于简单的居中图像(例如居中的手写数字图像)工作良好,但是不能识别具有更复杂变化的图像(例如后院奔跑的猫)。有更多的隐藏层来学习抽象特征会有所帮助,但这相当不切实际,因为我们需要太多的神经元来训练和存储在内存中。

另一方面,convnet 通过首先寻找边缘、直线和曲线等低级特征来识别对象,然后通过一系列卷积层来建立更抽象的特征(例如什么使猫成为猫)。在卷积层的学习过程中,网络通过共享过滤器(或特征检测器)在图像的小区域上学习对象的各个部分,并将它们相加以构建抽象特征。共享滤波器的使用大大减少了实际的参数学习。convnet 还可以更好地概括复杂的图像识别,因为学习过的滤波器可以通过卷积层重新用于检测抽象特征。

超参数调谐

调整深度神经网络的超参数是困难的,因为训练深度神经网络很慢,并且有许多参数要配置。在这一部分中,我们简要地考察了 convnet 的超参数。

学习率

学习率控制优化算法中权重的更新量。我们可以使用固定学习率、逐渐递减学习率、基于动量的方法或自适应学习率,这取决于我们选择的优化器,如 SGD、Adam、Adagrad、AdaDelta 或 RMSProp。

时代数

时期数是整个训练集通过神经网络的次数。我们应该增加历元的数量,直到我们看到测试误差和训练误差之间的微小差距。

批量

在 convnet 的学习过程中,小批量通常是更可取的。16 到 128 的范围是测试的好选择。我们应该注意到,convnet 对批量大小很敏感。

激活功能

激活函数将非线性引入模型。通常情况下,整流器与 convnet 配合使用效果很好。其他的选择是 sigmoid,tanh 和其他激活函数,取决于任务。

隐藏层和单元的数量

通常最好增加更多的层,直到测试误差不再改善。代价是训练网络的计算代价很高。拥有少量的单元可能会导致拟合不足,而拥有更多的单元通过适当的正则化通常是无害的。

重量初始化

我们应该用小随机数初始化权重,以防止死神经元,但也不能太小,以避免零梯度。均匀分布通常效果很好。

转正辍学

为了避免深度神经网络中的过拟合,丢弃是一种优选的正则化技术。该方法简单地根据期望的概率删除神经网络中的单元。默认值 0.5 是一个很好的测试选择。

网格搜索或随机搜索

手动调整 hyperparameter 既痛苦又不切实际。有两种通用的方法来对搜索候选项进行采样。网格搜索彻底搜索给定值的所有参数组合。随机搜索从具有指定分布的参数空间中抽取给定数量的候选项。

为了更有效地实现网格搜索,最好在初始阶段从超参数值的粗略范围开始。对于较小数量的历元或较小的训练集,执行粗网格搜索也是有帮助的。下一阶段将对更多的时期或整个训练集执行窄搜索。

虽然网格搜索在许多机器学习算法中是有用的,但它在调整深度神经网络的超参数时效率不高。随着参数数量的增加,计算呈指数增长。已经发现,在深度神经网络的超参数调整中,随机搜索比网格搜索更有效(参见关于“超参数优化的随机搜索”的论文)。根据以前的经验,结合一些对超参数的手动调整也是有帮助的。

形象化

如果我们可以可视化卷积层,我们就可以更好地理解 convnet 如何学习功能。两种直接的方法是可视化激活和权重。随着训练的进行,激活通常看起来更加稀疏和局部化。如果对于许多不同的输入,激活具有暗像素,则由于高学习率,它可能指示失效的过滤器(零激活图)。

训练有素的网络通常有漂亮平滑的滤波器,没有任何噪声模式。在权重中观察到的噪声模式可能表明网络训练的时间不够长,或者正则化强度低,这可能导致过度拟合。

参考资料:

兄弟姐妹间的战争……第二部

原文:https://towardsdatascience.com/a-war-amongst-siblings-part-ii-9bf51636ceaf?source=collection_archive---------20-----------------------

卡牌游戏大战有可能无限期进行下去吗?

介绍

几个月前,我发表了一篇关于纸牌游戏战争的报道。如果你还没有读过,或者在这段漫长的插曲后需要复习,在继续之前去看看。这是一个快速阅读。

在不列颠哥伦比亚省度假时,我和姐姐凯莉一起玩了一个 T2 战争游戏。我们在停机时间玩了好几天都没有完成。凯利觉得这个游戏会永远继续下去,但我不相信这是可能的。我用 Python 写了一个模拟器来测试它。第一部分发现这确实是可能的——我模拟的游戏中有 1/3 是永无止境的。凯利获得了(并利用了)吹牛的权利。

这篇文章回顾了第一部分提出的关键问题:是什么让游戏永远继续下去?答案实际上比我预期的更有启发性。吹牛的权利甚至可能仍然是待价而沽。

达到稳定状态

我和妹妹玩的游戏,疯狂的来回摇摆。我们中的一个人会只拿到几张牌,但之后势头会逆转,在我们意识到之前,另一个人会成为筹码短缺的人。我认为永无止境的游戏会永远经历这样的循环。

我错了。如下图所示,永无止境的游戏最终会达到一种“稳定状态”。在稳定状态下,两个玩家轮流赢得一张牌的战斗,他们之间的牌的平衡基本上保持不变。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Game tracks showing the number of cards that Player A has as each game progresses. Each color represents a unique game. There are 10 games in this diagram, however several games settle into equivalent stable states and the tracks therefore obscure each other on the right side of the diagram.

我姐姐和我从来没有达到那种程度。也许我们过早的放弃了?尽管如此,我还是想更深入地探究稳定状态的动力学,以阐明为什么一个游戏会永无止境。

大约 85%的未完成游戏达到了一个稳定的状态,即使每个玩家只有 26 张牌。我选择了其中的一个游戏来感受它是如何运作的。我们感兴趣的游戏在开始时会来回跳动,但到了第 400 局,每个玩家都有 26 张牌,已经稳定下来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当你从 400 号弯道前进时,有趣的事情发生了。事情很快开始感觉…奇怪的熟悉。我们以前来过这里吗?玩家在 400 回合的牌和他们在 452 回合的牌完全一样。我们又到了 504、556 等处。现在我们可以理解一个游戏是如何永无止境的——它只是陷入了一个循环!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A stable state game at turns 400, 426, and 452. Player A’s cards are on the left and Player B’s are on the right; the cards towards the bottom of the image are at the top of the players’ hands. Turn 400 and 452 are exactly the same; turn 426 is essentially symmetrical with the cards on the losing diagonals swapped.

为什么会卡在一个循环里?当我们并排看玩家的手时,我们可以观察到一个明显的模式。首先,请注意,当我们向下移动牌组时,大牌在玩家 A 和玩家 B 之间完美地交替出现。这是有道理的,因为我们知道玩家 A 和玩家 B 会轮流获胜。如果我们将手牌分成 4 张牌的区块(两张来自玩家 A,两张来自玩家 B),我们还可以看到,在每个区块中,输牌(在一条对角线上)比赢牌(在另一条对角线上)都低。

一个简化的 4 张牌游戏说明了这种结构的重要性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Player A’s cards are on top and Player B’s are on bottom; decks are ordered from left (top of deck) to right (bottom of deck).

玩家 A 以一个 10 和一个 2 开始。玩家 B 以 4 和 6 开始。这个例子复制了我们在稳定状态游戏的每个方块中看到的结构,因为获胜的对角线(10 和 6)均匀地大于失败的对角线(4 和 2)。在前两局中,玩家 A 赢了玩家 B 的四张牌,但输了他的两张。又玩了两局后,玩家 A 赢回了他原来的两张牌,但失去了他从玩家 b 那里得到的四张牌。我们在这个四张牌的区块中建立了一个循环,玩家只需来回交换他们较少的牌。

让我们考虑第二个与第一个相同的例子,除了玩家 B 的第一张牌是 7。请注意,这个并不符合我们在稳定状态游戏中观察到的结构。原输对角线中的一张牌比赢对角线中的一张牌大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前两轮,玩家 A 赢了 B 的 7,输了他的 2。然而,游戏现在设置为结束,玩家 A 的 10 和 7 击败玩家 B 的 2 和 6。稳定状态结构的一个明显的小偏差会很快导致非常不同的结果。一个四张牌的方块,其中一条对角线上的两张牌都比另一条对角线上的两张牌大,将无限循环下去;任何其他安排都会导致解决。

这个小例子很容易推广到一个完整的游戏。26–26 稳定状态(85%的永无止境游戏)由 13 个相互堆叠的四张牌组成。每四张牌的方块在游戏每 52 回合循环时保持不变。15%未完成的游戏达到不均衡的稳定状态,一个玩家比另一个玩家有更多的牌。这些游戏的结构有点复杂,因为四张牌的方块不能保持完整,但在整个游戏中保持了一个等效的结构。在这两种情况下,永无止境的游戏会达到一种特定的卡片排列,从而导致动态平衡和循环游戏。

打破稳定状态

尽管有个名字,稳定状态实际上是相当脆弱的。

为了说明原因,我需要指出我的战争模拟器的一个简化假设和上面的小例子。每个游戏的游戏性都是完全确定的。换句话说,每场游戏在发牌后只有一种可能的结果,因为每一步都是 100%程序化的。在每一轮中,玩家 A 和玩家 B 打出他们手中最上面的牌,赢家拿起这些牌(假设没有平局)。玩家 A 的牌总是在玩家 B 的牌前面回到赢家手里。

在每个玩家使用哪张牌(每个玩家牌组中的顶牌)以及如何确定赢家(较高的牌)的规则中没有回旋的余地。这些步骤应该完全程序化。另一方面,规则并没有规定当纸牌回到赢家手中时的“正确”顺序。在我的模拟中,玩家 A 的牌总是放在赢家手中玩家 B 的牌之前。在现实生活中,你会期望变化。在某些回合中,玩家 A 的卡会先被拿走,而在其他回合中,玩家 B 的卡会先被拿走。

随机性被证明是稳定状态的克星。让我们重温一下四张卡的例子,看看为什么。如果我们改变游戏玩法,使得玩家 B 的牌在第一回合回到玩家 A 的面前,稳定状态模式被打破,游戏立即结束。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对完整游戏的影响同样引人注目。随机排列返回牌的顺序,赢家的手牌将未完成游戏的比例从 1/3 减少到 0。游戏也结束得更快。75%的带有随机元素的游戏在 500 回合内结束,而没有随机元素的游戏只有 14%。随机性使得稳定状态难以维持,永无止境的游戏实际上不存在。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这对于我的论点来说是个好消息!我们不再有证据表明战争游戏(如果它被逼真地模拟)可以永远继续下去。

我很乐意收工并宣布胜利。但是,违背我自己的最大利益,我要努力成为一个好科学家(也是一个好哥哥)。就像他们说的,没有证据并不是不存在的证据。如果我们想证明一个游戏不能无限期继续下去,我们需要更进一步。

无限中的一个

让我们戴上科学家的帽子,从一个思维实验开始。

以我们的四张卡为例。第一回合只有一个可能的赢家,玩家 A,因为十比二大。然而,就牌如何回到玩家 A 手中而言,有两种可能的结果。假设有 50%的几率玩家 A 的牌首先回到玩家 A 的手里,有 50%的几率玩家 B 的牌回到玩家 A 的手里。下一轮是同样的故事——只有一个可能的赢家,但有两种可能的结果。这意味着前两轮有 2 x 2 = 4 种可能的结果,这取决于每轮后先拿起哪张牌。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四个场景中的两个,第一个和最后一个,保留了我们熟悉的稳定状态结构,因为每个回合后都先拿起同一个玩家的牌。然而,其他人打破了稳定状态,导致游戏在四个回合结束。换句话说,游戏有 50%的概率在四个回合内结束。

让我们继续前两个阶段保持稳定状态结构的 50%的场景。再玩两局后,有 50%的几率那些场景的场景会打破稳定状态。所以,有 75%的概率(前 50%加上幸存的 50%的 50%)游戏会在六个回合内结束。每增加两轮后,可能性增加剩余概率的 50%,跳至 88.5%、94.25%、97.125%等。完成的可能性很快接近 100%。

为了证明这个游戏不能无限进行下去,我们需要完成的可能性实际上达到 100%。它会到达那里吗?虽然我们很快接近 100%的确定性,但总会有极小的机会,随机抽取的概率会以保持稳定状态结构的方式继续展开。我们不得不得出结论,尽管极不可能,但我们的小例子可能会无限期地继续下去。

这同样适用于完整的游戏。考虑到玩家 A 的牌在每一回合都有可能(尽管极其不太可能)首先“随机”回到赢家手中。这将使随机游戏的行为完全像原来的模拟。我们知道原始博弈可以无限期地进行下去,所以随机博弈也应该如此。可能还有其他方法来实现一个无限的游戏,尽管一个例子就足够了,我们不能说一个永无止境的游戏是不可能的。

我们可以说不太可能。无限中的一个不太可能。谁有吹牛的权利?我让你来判断。

最后的想法

我实际上写下了当我和 Kelly 决定放弃我们的游戏时的牌。根据随机弃牌模拟,我们的游戏在接下来的 300 回合中有 50%的可能性会结束,在接下来的 600 回合中有 75%的可能性会结束,在我们停止后的 900 回合中有 90%的可能性会结束。我们在比赛中还有很多时间。我认为编写一个 Python 模拟器仅仅是快了一点点。

感谢阅读!请在评论区分享你的想法、问题或反馈。

另外,我的战争模拟器代码和我用来分析的 Jupyter 笔记本见 Github 。模拟器是作为一个“战争”类编写的——我希望其他 Python 程序员能找到机会使用它。

创业数据科学家的一周生活

原文:https://towardsdatascience.com/a-week-in-the-life-of-a-startup-data-scientist-90aa00edaa48?source=collection_archive---------12-----------------------

没有细节遗漏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学家是一个性感的,有点模糊的职位名称。

就像软件工程一样,没有一个放之四海而皆准的描述可以概括数据科学家所做的巨大差异。然而,初创公司往往表现出共同的价值观,特别是:

  1. 实验
  2. 学习
  3. 协作

这些共同的价值观体现在我们的工作中,并为我们的日程安排提供了指导节奏。

我目前在 SaaS 一家中型创业公司工作,是一个 3-4 人数据科学团队的一员。总共 200 人,大约 40 人每天写代码。

我将提供我的每日每周每月时间表的描述,以(希望)阐明科学家的生活可能需要哪些数据,以及我们的时间表如何与这些价值相联系。

**这篇文章是为那些正在考虑从事类似工作的人准备的。**我的目标是让你了解作为一名数据科学家,在一家类似规模的公司里应该做些什么,从而更好地判断它是否适合你。

每天地;天天地

以下是我一天中分配给各种活动的时间:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **更新(30 分钟)😗*了解电子邮件、空闲时间等
  • **同步(30 分钟)😗*每日团队会议——当前项目的更新,当天的计划。任何编写代码的人通常都会按照 scrum 方法论开一个每日例会,不管是否启动。
  • **工作(4-5 小时)😗*集中精力,花时间收集数据、实验和/或培训模型。这是所有“数据科学”完成的地方。
  • **学习(1 小时)😗*在线课程,维基百科 binge,youtube。学习是创业文化的一个至关重要的方面——投入时间跟上时代并扩展你的技能组合是很重要的。
  • **记录(15 分钟)😗*找到一个好的停止点并记录进度。准确记录您处理过的数据并不重要,直到它变得重要。

如你所见,我每天至少花一点时间在这三个原则上。学习可以是任何事情——在一个在线课程中前进,一个你很好奇的一次性视频,或者向一个同行询问他们的专业领域。扩展数据科学技能集有很多方向,从掌握深度学习框架到数据工程方面等等。

然而,每周集中时间做一次专注的活动是有好处的。这让我们想到了每周一次的事情:

一周的

每周的活动集中在学习和合作上。

  • 头脑风暴会议(1 小时) —听取其他观点(销售、产品管理、客户成功)并一起头脑风暴解决问题。
  • **课堂(1 小时)——**我们团队每周安排一小时一起学习新东西。比如 tensorflow 上的一门课。
  • **学习时间(3 小时)——**对,专门用来学习和学习的时间。超级有用的取得一致的进步,在网上课堂和探索外国回购。
  • **知识分享(30 分钟)——**专门分享我们正在研究的不同技术的技巧和诀窍的会议。

致力于混合通常不互动的团队的时间有助于我们洞察存在什么样的问题以及我们如何提供帮助——最终作为项目想法的发射台。

然而,有些活动是临时的,引导我们参加每月一次的聚会。

最后但并非最不重要的,偶尔的东西:

每月

以下是一些你至少每一两个月可以期待一次的事情:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • **Moonshots (1 小时)——**你有过哪些疯狂、牛逼或大胆的数据科学项目想法?我们能把它们塑造成有用的东西吗?让我们弄清楚。
  • **项目回顾(1 小时)——**你刚刚完成了一个项目?大家说说吧。哪些进展顺利,哪些可以改进,等等…
  • **团队回顾(30 分钟)——**与项目回顾相同,但适用于我们的团队。
  • **圆桌会议(1 小时)——**大家都在做什么?为什么激动人心?
  • **全员开发(1 小时)——**公司深度更新,经理级项目更新。
  • 午餐和学习(30 分钟)——人们工作很酷。让每个人都了解新项目、系统架构和新技术的内部运作是有趣的(也是有用的),同时还能享受美食。

更罕见但重要的是,这些会议用于同步更大的开发组织,并确保我们一起更有效地前进。

总结了一下

科学家研究的数据因公司而异。然而,实验、跨团队沟通和学习文化的关键原则是任何创业公司不可或缺的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的时间表反映了这些原则。的确,没有两件事是完全相同的——无论是我们正在做的事情、我们正在与谁合作,还是我们将如何实现这一目标。然而,我们相互交流、共同提高技能和尝试新想法的方式不会改变。

我希望这能对我们的工作有所启发,以及你能从类似的角色中得到什么。感谢阅读!

深度学习的“怪异”介绍

原文:https://towardsdatascience.com/a-weird-introduction-to-deep-learning-7828803693b0?source=collection_archive---------3-----------------------

有关于深度学习的惊人介绍、课程和博文。但这是一种不同的介绍。西班牙语版此处

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有关于深度学习的惊人介绍、课程和博文。我将在参考资料部分列出其中一些,但这是一种不同的介绍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是为什么奇怪呢?也许是因为它不会遵循深度学习帖子的“正常”结构,在那里,你从数学开始,然后进入论文,实施,然后到应用程序。

这将更接近我之前关于“我的深度学习之旅”的帖子,我认为讲一个故事比只是到处扔信息和公式更有帮助。让我们开始吧。

注意:这篇文章还有一个配套的网络研讨会。找到这里:

[## 网络研讨会- DeepCognition.ai

关于法维奥:物理学家和计算机工程师。拥有 UNAM 大学的物理学硕士学位。他在大…

deepcognition.ai](http://deepcognition.ai/resources/webinars/#intro-deep-learning)

为什么我要做这个介绍?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有时候,把你的想法写下来是很重要的。我倾向于说很多话,并出席一些演示和会议,这是我用一点点知识为大家做贡献的方式。

深度学习(DL)对于数据科学、人工智能、技术和我们现在的生活来说是一个如此重要的领域,它值得所有人的关注。请不要说深度学习只是在一张神经网上加了一层,仅此而已,神奇!没有。我希望读完这篇文章后,你对 DL 有一个不同的看法。

深度学习时间线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我只是基于几篇论文和其他时间线创建了这个时间线,目的是让每个人都看到深度学习不仅仅是神经网络。理论上确实有了进步,软件和硬件也有了改进,这是我们走到今天所必需的。如果你想要的话,就给我发短信,我会发给你的。(文末找到我的联系人)。

深度学习有什么怪异之处?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习已经存在很长时间了。那么,为什么它在过去的 5-7 年里变得如此重要?

正如我之前所说,直到 2000 年代末,我们仍然缺乏一种可靠的方法来训练非常深度的神经网络。如今,随着几项简单但重要的理论和算法改进的发展,硬件(主要是 GPU,现在是 TPU)的进步,以及数据的指数级生成和积累,DL 自然而然地适应了这一缺失点,以改变我们进行机器学习的方式。

深度学习也是一个活跃的研究领域,没有什么是固定或封闭的,我们仍在寻找最佳模型、网络拓扑、优化其超参数的最佳方法等等。就像其他活跃的科学领域一样,很难跟上研究的步伐,但这并不是不可能的。

关于拓扑和机器学习的补充说明(Hofer 等人的具有拓扑签名的深度学习):

来自代数拓扑的方法最近才出现在机器学习社区中,最突出的是在术语拓扑数据分析(TDA)下。由于 TDA 使我们能够从数据中推断出相关的拓扑和几何信息,因此它可以为各种机器学习问题提供一种新颖且潜在有益的视角。

对我们来说幸运的是,有很多人通过像吴恩达 one 这样的课程、博客帖子等等来帮助理解和消化所有这些信息。

这对我来说很奇怪,或者说不常见,因为通常你必须等待一段时间(有时是几年)才能消化论文或研究期刊中的复杂信息。当然,大多数科学领域现在也很快从一篇论文变成一篇博客文章,告诉你你需要知道什么,但在我看来,DL 有不同的感觉。

深度学习和表征学习的突破

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们正在做一些非常令人兴奋的事情,该领域的大多数人都在说,深度学习论文中的最后一个想法(特别是神经网络或算法的新拓扑和配置,以改善它们的使用)是几十年来机器学习中最好的想法(记住,DL 是 ML 的一部分)。

到目前为止,我已经在这篇文章中多次使用了学习这个词。但是什么是学习呢?

在机器学习的上下文中,“学习”一词描述了一个自动搜索过程,以更好地表示您正在分析和研究的数据(请记住这一点,不是让计算机学习)。

对于这个领域来说,这是一个非常重要的词。别忘了这件事。什么是表示?这是一种看数据的方式

让我给你举个例子,假设我告诉你,我要你画一条线,把这个图的蓝色圆圈和绿色三角形分开:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ian Goodfellow et al. (Deep Learning, 2016)

这个例子来自 Ian Goodfellow 等人(2016)的深度学习的

所以,如果你想用一句台词,作者是这么说的:

“…我们使用笛卡尔坐标表示一些数据,这是不可能的任务。”

如果我们记得线的概念,这是不可能的:

线是一个没有厚度的一维直线,向两个方向无限延伸。来自沃尔夫拉姆数学世界

那么案子输了吗?实际上不是。如果我们找到一种方法,用不同的方式表示这个数据,在某种程度上我们可以画一条直线来区分数据的类型。这是几百年前数学教给我们的东西。在这种情况下,我们需要的是一个坐标转换,所以我们可以用一种我们可以画这条线的方式来绘制或表示这些数据。如果我们看一下极坐标变换,我们有解:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ian Goodfellow et al. (Deep Learning, 2016)

就这样,现在我们可以画一条线:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,在这个简单的例子中,我们找到并选择了转换,以获得更好的手工表示。但是,如果我们创建一个系统,一个可以搜索不同表示(在这种情况下是坐标变化)的程序,然后找到一种方法来计算用这种新方法正确分类的类别的百分比,此时我们正在进行机器学习。

记住这一点非常重要,深度学习是使用不同类型的神经网络进行表示学习,并优化网络的超参数,以获得(学习)我们数据的最佳表示。

如果没有让我们达到深度学习当前状态的惊人突破,这是不可能的。这里我列举其中一些:

  1. 思路:反向传播。

通过反向传播错误学习表征 大卫·e·鲁梅尔哈特,杰弗里·e·辛顿&罗纳德·j·威廉姆斯。

Yann Lecun 的一个关于反向传播的理论框架。

2.**思路:**更好的初始化球网的参数。需要记住的是:初始化策略应该根据使用的激活函数来选择(下一步)。

[## 深度网络的权重初始化-深度学习的实践方面

这个课程会教你让深度学习很好工作的“魔法”。而不是深度学习过程…

www.coursera.org](https://www.coursera.org/learn/deep-neural-network/lecture/RwqYe/weight-initialization-for-deep-networks) [## 如何训练你的深度神经网络

为了有效地训练深度神经系统,深度学习中有一些特定的实践是非常值得推荐的。

rishy.github.io](http://rishy.github.io/ml/2017/01/05/how-to-train-your-dnn/) [## 用于视觉识别的 CS231n 卷积神经网络

斯坦福 CS231n 课程材料和笔记:视觉识别的卷积神经网络。

cs231n.github.io](http://cs231n.github.io/neural-networks-2/#init)

3.**思路:**更好的激活功能。这意味着,更快地逼近函数的更好方法导致更快的训练过程。

[## 理解神经网络中的激活函数

最近,我的一个同事问了我几个类似“为什么我们有这么多激活功能?”,“为什么是…

medium.com](https://medium.com/the-theory-of-everything/understanding-activation-functions-in-neural-networks-9491262884e0) [## 激活函数:神经网络

Sigmoid,tanh,Softmax,ReLU,Leaky ReLU 解释!!!

towardsdatascience.com](/activation-functions-neural-networks-1cbd9f8d91d6)

4.**想法:**退学。防止过度拟合的更好方法等等。

[## 为了学得更好而学得更少——在(深度)机器学习中辍学

在这篇文章中,我将主要讨论神经网络中的辍学概念,特别是深度网络,然后是…

medium.com](https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5)

辍学:防止神经网络过度拟合的简单方法,斯里瓦斯塔瓦、辛顿等人的一篇伟大论文。

5.**思路:**卷积神经网络(CNN)。

le Cun 等人将基于梯度的学习应用于文档识别

用深度卷积神经网络进行 ImageNet 分类Krizhevsky 等人。

6.**思路:**剩余网(ResNets)。

[## [1512.03385v1]图像识别的深度残差学习

摘要:越深的神经网络越难训练。我们提出了一个剩余学习框架,以减轻…

arxiv.org](https://arxiv.org/abs/1512.03385v1) [## [1608.02908]剩余网络的剩余网络:多级剩余网络

摘要:具有数百甚至数千层的残差网络家族支配着主要的图像识别任务…

arxiv.org](https://arxiv.org/abs/1608.02908)

7.**思路:**基于区域的 CNN。用于物体检测等。

[## [1311.2524v5]用于精确对象检测和语义分割的丰富特征层次

摘要:在 PASCAL VOC 数据集上测量的目标检测性能,在过去几年中已经稳定下来…

arxiv.org](https://arxiv.org/abs/1311.2524v5) [## [1703.06870]屏蔽 R-CNN

摘要:我们提出了一个概念上简单、灵活、通用的对象实例分割框架。我们的…

arxiv.org](https://arxiv.org/abs/1703.06870) [## Facebook 研究/检测

Detectron - FAIR 的对象检测研究平台,实现了 Mask R-CNN 和…

github.com](https://github.com/facebookresearch/Detectron)

8.**思路:**递归神经网络(RNNs)和 LSTMs。

[## 循环网络和 LSTMs 初学者指南

这篇文章的目的是给学习神经网络的学生一个关于神经网络功能的直觉

deeplearning4j.org](https://deeplearning4j.org/lstm.html) [## 了解 LSTM 网络——colah 的博客

这些循环使得循环神经网络看起来有点神秘。然而,如果你想得更多一点,事实证明…

colah.github.io](http://colah.github.io/posts/2015-08-Understanding-LSTMs/) [## 重复层- Keras 文档

input_length:输入序列的长度,为常数时指定。如果您是…则此参数是必需的

keras.io](https://keras.io/layers/recurrent/)

BTW:廖和 Poggio (2016)证明了 ResNets == RNNs,arXiv:1604.03640v1。

9.**想法:**生成对抗网络(GANs)。

[## [1406.2661v1]生成性对抗网络

摘要:我们提出了一个新的框架,通过一个对抗的过程来估计生成模型,其中我们…

arxiv.org](https://arxiv.org/abs/1406.2661v1) [## 纳舒里/甘斯-真棒-应用

gans-awesome-applications -令人敬畏的 GAN 应用和演示的精选列表

github.com](https://github.com/nashory/gans-awesome-applications)

**10。想法:**胶囊网络。

[## 什么是 CapsNet 或胶囊网络?

什么是胶囊网?什么是胶囊?CapsNet 比卷积神经网络(CNN)好吗?这篇文章是…

hackernoon.com](https://hackernoon.com/what-is-a-capsnet-or-capsule-network-2bfbe48769cc) [## 理解辛顿的胶囊网络。第一部分:直觉。

理解 Hinton 的胶囊网络系列的一部分:

medium.com](https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b) [## 人工智能/胶囊网络

capsule-networks——NIPS 2017 论文《胶囊间动态路由》的 PyTorch 实现。

github.com](https://github.com/gram-ai/capsule-networks)

还有许多其他的,但我认为这些是真正重要的理论和算法突破,正在改变世界,并为 DL 革命提供了动力。

深度学习如何入门?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开始并不容易,但我会尽力指导你完成这个过程。查看这些资源,但是记住,这不仅仅是看视频和读论文,这是关于理解,编程,编码,失败,然后让它发生。

-1.学习 Python 和 R;)

  1. 吴恩达Coursera (你知道,他不需要介绍):

[## 深度学习| Coursera

来自 deeplearning.ai 的深度学习如果你想打入 ai,这个专精会帮你做到。深…

www.coursera.org](https://www.coursera.org/specializations/deep-learning)

Siraj Raval :他太棒了。他有能力用一种有趣而简单的方式来解释难以理解的概念。在他的 YouTube 频道上关注他。特别是这个播放列表:

—智能的数学:

—深度学习简介:

3.Fran ois Chollet的书:用 Python 进行深度学习(和 R):

[## 使用 Python 进行深度学习

我见过的对深度学习最清晰的解释…阅读是一种乐趣。

www.manning.com](https://www.manning.com/books/deep-learning-with-python) [## 用 R 进行深度学习

我见过的对深度学习最清晰的解释…阅读是一种乐趣。

www.manning.com](https://www.manning.com/books/deep-learning-with-r)

  1. IBM 认知类 :

[## 深度学习基础

关于这门课,上一堂速成课,学习内容是什么,以及如何学习更多。深度学习…

cognitiveclass.ai](https://cognitiveclass.ai/courses/introduction-deep-learning/) [## 使用 TensorFlow 进行深度学习

这个深度学习用 TensorFlow 的课程重点是 TensorFlow。如果你是深度学习的新手…

cognitiveclass.ai](https://cognitiveclass.ai/courses/deep-learning-tensorflow/)

  1. DataCamp :

[## Python 中的深度学习

深度学习是机器人等不同领域中最令人兴奋的能力背后的机器学习技术…

www.datacamp.com](https://www.datacamp.com/courses/deep-learning-in-python) [## keras:R 中的深度学习

正如你现在所知道的,机器学习是计算机科学(CS)中的一个子领域。那么,深度学习是…

www.datacamp.com](https://www.datacamp.com/community/tutorials/keras-r-deep-learning)

分布式深度学习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习是数据科学家应该学习的最重要的工具和理论之一。我们非常幸运地看到了不起的人创造了专门用于 DL 任务的研究、软件、工具和硬件。

DL 的计算成本很高,尽管理论、软件和硬件都有所进步,但我们需要大数据和分布式机器学习的发展来提高性能和效率。伟大的人和公司正在为加入分布式框架(Spark)和 DL 库(TF 和 Keras)做出惊人的努力。

以下是一个概述:

  1. :深度学习管道(即将合并为 Spark)

**[## 概述-深度学习管道 0.2.0 文档

深度学习管道 0.2.0 文档主页

databricks.github.io](https://databricks.github.io/spark-deep-learning/site/index.html)**

2.Elephas:与 Keras & PySpark 合作的分布式 DL:

** [## maxpumperla/elevas

elephas -使用 Keras & Spark 的分布式深度学习

github.com](https://github.com/maxpumperla/elephas)

3。雅虎!Inc .:TensorFlowOnSpark:

[## 雅虎/tensorflownspark

TensorFlowOnSpark 将 TensorFlow 程序引入 Apache Spark 集群

github.com](https://github.com/yahoo/TensorFlowOnSpark)

4。CERN 分布式 Keras (Keras + Spark):

[## cerndb/dist-keras

dist-keras -分布式深度学习,重点是分布式训练,使用 keras 和 Apache Spark。

github.com](https://github.com/cerndb/dist-keras)

5。Qubole (教程 Keras + Spark):

[## 基于 Apache Spark | Qubole 的 Keras 分布式深度学习

深度学习已经被证明可以在不同的领域产生高效的机器学习模型。一些…

www.qubole.com](https://www.qubole.com/blog/distributed-deep-learning-keras-apache-spark/)

6。英特尔公司:BigDL(Apache Spark 分布式深度学习库)

[## 英特尔分析/BigDL

BigDL:Apache Spark 的分布式深度学习库

github.com](https://github.com/intel-analytics/BigDL)

7.张量流和星火上T5【谷歌】T6云:

[## 在 Google 云平台上使用 Apache Spark 和 tensor flow | Google Cloud 大数据和机器…

Apache Spark 和 TensorFlow 都是开源项目,在企业领域产生了重大影响…

cloud.google.com](https://cloud.google.com/blog/big-data/2017/11/using-apache-spark-with-tensorflow-on-google-cloud-platform)

通过深度学习完成任务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我之前说过的,这个领域最重要的时刻之一是 TensorFlow 的创建和开源。

TensorFlow 是一个使用数据流图进行数值计算的开源软件库。图中的节点表示数学运算,而图边表示它们之间通信的多维数据数组(张量)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图中你看到的是广义相对论中黎曼张量的张量操作。

数学上定义的张量,仅仅是在坐标变化下按照一定规则变换的数字或函数的数组。

但在机器学习和深度学习的范围内,张量是向量和矩阵向潜在的更高维度的推广。在内部,TensorFlow 将张量表示为基本数据类型的 n 维数组。

我们在 DL 中一直大量使用张量,但是你不需要成为它们的专家来使用它。你可能需要对它们有所了解,所以我在这里列出了一些好的资源:

[## 深度学习 101:揭开张量之谜

张量和新的机器学习工具,如 TensorFlow,是这些天的热门话题,尤其是在寻找…

www.kdnuggets.com](https://www.kdnuggets.com/2017/06/deep-learning-demystifying-tensors.html) [## 数学不好就学人工智能——P4——天象画报(有猫!)

如果你数学很差,欢迎来到学习人工智能的第四部分。如果您错过了第 1、2、3、5、6 和 7 部分,请务必检查它们…

hackernoon.com](https://hackernoon.com/learning-ai-if-you-suck-at-math-p4-tensors-illustrated-with-cats-27f0002c9b32)

在你检查完这些之后,我之前提到的突破以及像 TensorFlow 或 Keras 这样的编程框架(关于 Keras 的更多信息,请访问这里),现在我想你已经知道你需要理解和使用深度学习了。

但是到目前为止,我们用 DL 取得了什么成就呢?仅举几个例子(摘自 Franç ois Chollet 关于 DL 的书):

  • 接近人类水平的图像分类。
  • 接近人类水平的语音识别。
  • 接近人类水平的手写转录。
  • 改进的机器翻译。
  • 改进的文本到语音转换。
  • Google Now 或亚马逊 Alexa 等数字助手。
  • 接近人类水平的自动驾驶。
  • 谷歌、百度和必应使用的改进的广告定位。
  • 改进的网络搜索结果。
  • 回答自然语言问题。
  • 超人去玩。

还有更多。以下是 DL 的 30 个伟大而有趣的应用:

[## 深度学习的 30 个惊人应用

在过去的几年里,深度学习被应用于数百个问题,从计算机视觉到自然…

www.yaronhadad.com](http://www.yaronhadad.com/deep-learning-most-amazing-applications/)

思考深度学习的未来(用于编程或构建应用程序),我会重复我在其他帖子中说过的话。

我真的认为 GUI 和 AutoML 是用深度学习完成事情的不远的将来。不要误解我,我喜欢编码,但是我认为我们明年要写的代码数量会减少。

我们不能花这么多时间在世界范围内一遍又一遍地编写相同的东西,所以我认为这两个特性(GUI 和 AutoML)将帮助数据科学家提高生产率和解决更多的问题。

在简单的 GUI 中完成这些任务的最好的免费平台之一是 Deep Cognition 。它们简单的拖放界面可以帮助你轻松设计深度学习模型。深度学习工作室可以自动为你的定制数据集设计深度学习模型,这要归功于他们先进的 AutoML 功能,几乎只需一次点击。

在这里,您可以了解更多关于它们的信息:

[## 深度认知——今天就成为一个人工智能驱动的组织

无需编码即可设计、训练和部署深度学习模型。深度学习工作室简化并加速了…

deepcognition.ai](http://deepcognition.ai)

看看价格:哦,这是免费的:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的意思是,现在这个领域的发展速度之快令人惊讶,我们可以用简单的图形用户界面来与我在这篇文章中谈到的所有困难而有趣的概念进行交互。

我喜欢这个平台的一点是,你仍然可以通过命令行或他们的笔记本进行编码,与 TensorFlow,Keras,Caffe,MXNet 等交互,而无需安装任何东西。您同时拥有笔记本和 CLI!

我向他们和他们对社会的贡献脱帽致敬。

你可以免费或花很少的钱尝试深度学习的其他有趣应用有(其中一些在私人测试版上):

[## Skejul -简化未来…

如果是在未来,那就是在斯克尤尔…使用 Skejul 的上下文感知预测计算平台设置您的会议…

skejul.com](http://skejul.com) [## 视觉障碍者的视觉人工智能|会说话的相机应用程序

一个免费的应用程序,讲述你周围的世界。专为低视力群体,这个研究项目利用…

www.microsoft.com](https://www.microsoft.com/en-us/seeing-ai/) [## 对话流

对话式用户体验平台。

dialogflow.com](https://dialogflow.com)

感谢阅读这篇关于深度学习的怪异介绍。我希望它能帮助你在这个神奇的领域开始,或者只是发现一些新的东西。

如果您有任何问题,请在 LinkedIn 上添加我,我们将在那里聊天:

[## Favio Vázquez -数据科学家/工具经理 MX - BBVA 数据&分析| LinkedIn

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 12 个工作列在他们的…

www.linkedin.com](https://www.linkedin.com/in/faviovazquez/)**

对抗性自动编码器的向导指南:第 1 部分,自动编码器?

原文:https://towardsdatascience.com/a-wizards-guide-to-adversarial-autoencoders-part-1-autoencoder-d9a5f8795af4?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“如果你知道如何使用 Tensorflow 编写代码来对 MNIST 数字进行分类,那么你就可以阅读这篇文章的其余部分,否则我强烈建议你浏览 Tensorflow 网站上的这篇文章

“我们现在知道,我们不需要任何新的重大突破来实现真正的人工智能。

这是完全,完全,荒谬的错误。正如我在前面的陈述中所说的:大多数人类和动物的学习是无监督的学习。如果智能是一块蛋糕,无监督学习就是蛋糕,监督学习就是蛋糕上的糖衣,强化学习就是蛋糕上的樱桃。

我们知道如何做糖霜和樱桃,但是我们不知道如何做蛋糕。在我们能够想到真正的人工智能之前,我们需要解决无监督学习的问题。这只是我们知道的一个障碍。那些我们不知道的呢?"

这是在 alpha go获胜后,脸书人工智能研究主任阎乐存(我知道,另一个是阎乐存)的一句话。

我们知道,卷积神经网络(CNN)或在某些情况下密集的全连接层(MLP——一些人喜欢称之为多层感知器)可以用来执行图像识别。但是,CNN(或 MLP)不能单独用于执行任务,如从图像中分离内容和风格,生成真实的图像(生成模型),使用非常小的标签集对图像进行分类或执行数据压缩(如压缩文件)。

这些任务中的每一个都可能需要它自己的架构和训练算法。但是,如果我们能够只使用一个架构来实现上述所有任务,这不是很酷吗?一个对抗性的自动编码器(以半监督方式训练的编码器)可以使用一种架构完成所有这些任务。

我们将构建一个对抗性的自动编码器,它可以压缩数据(以有损的方式压缩 MNIST 数字),分离数字的样式和内容(生成不同样式的数字),使用标记数据的一个小子集对它们进行分类,以获得高分类精度(仅使用 1000 个标记数字,大约 95%!)并且最后还充当生成模型(以生成看起来真实的假数字)。

在我们进入对抗性自动编码器的理论和实现部分之前,让我们后退一步,讨论一下自动编码器,看看一个简单的 tensorflow 实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Autoencoder Architecture

自动编码器是一种神经网络,它被训练以产生与其输入非常相似的输出(因此它基本上试图将其输入复制到其输出),并且由于它不需要任何目标(标签),所以它可以以无人监督的方式进行训练。

它有两个部分:

  1. 编码器: 它接收一个输入 x (这可以是图像、文字嵌入、视频或音频数据)并产生一个输出 h (其中 h 通常具有比 x 更低的维度)。例如,编码器可以接收大小为 100 x 100 的图像 x ,并产生大小为 100 x 1(可以是任何大小)的输出 h ( 也称为潜在代码)。在这种情况下,编码器只是压缩图像,这样它将占用更低的维度空间,这样我们现在可以看到 h (大小为 100 x 1)可以使用比直接存储图像 x 少 100 倍的内存来存储(这将导致一些数据丢失)。

我们来想一个像 WinRAR 这样的压缩软件(还在免费试用?)可用于压缩文件,以获得占用空间较少的 zip(或 rar,…)文件。自动编码器架构中的编码器执行类似的操作。

**如果编码器由函数 **q、表示,则

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder

2. 解码器: 它接收编码器 h 的输出,并试图在其输出端重建输入。继续编码器示例, h 现在的大小为 100 x 1,解码器尝试使用 h 恢复原始的 100 x 100 图像。我们将训练解码器从 h 中获取尽可能多的信息,以重建 x

所以,解码器的操作类似于对 WinRAR 执行解压缩。

如果函数 p 代表我们的解码器,则重建图像 x_ 为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder

只有当输入相关时(如来自同一域的图像),降维才有效。如果我们每次训练自动编码器时都传递完全随机的输入,那么它就会失败。因此,最终,给定一个输入,自动编码器可以产生更低维度的输出(在编码器处),非常类似于主成分分析( PCA )。由于我们在训练过程中不需要使用任何标签,这也是一个无人监管的模型。

但是,除了降维,自动编码器还能用来做什么呢?

  • 图像去噪其中可以使用有噪声的图像生成清晰无噪声的图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Denoising autoencoder example on handwritten digits. Source: https://www.doc.ic.ac.uk/~js4416/163/website/autoencoders/denoising.html

  • 语义哈希降维可以用来加快信息检索(我发现这很有趣!).
  • 最近,以对抗方式训练的自动编码器可以用作生成模型(我们将在后面更深入地讨论)。

我将这篇文章分为四个部分:

  • ****第 1 部分:自动编码器?

我们将从使用 Tensorflow 实现一个简单的自动编码器开始,并减少 MNIST(你肯定知道这个数据集是关于什么的)数据集图像的维数。

  • ****第二部分:用对抗性的自动编码器探索潜在空间。

我们将使用对抗学习对潜在代码(编码器的输出)引入约束。

  • ****第三部分:风格与内容的解开。

在这里,我们将使用相同的书写风格生成不同的图像。

  • ****第四部分:用 1000 个标签给 MNIST 分类。

我们将训练一个 AAE 来对 MNIST 数字进行分类,仅使用 1000 个带标签的输入就能获得大约 95%的准确率(令人印象深刻啊?).

让我们从了解我们需要实现的网络架构开始第一部分。

如前所述,自动编码器(AE)由编码器和解码器两部分组成,让我们从一个简单的密集全连接编码器架构开始:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder Architecture

它包括一个具有 784 个神经元的输入层(因为我们已经将图像展平为一维),两组 1000 个 ReLU 激活的神经元形成隐藏层,一个由 2 个未激活的神经元组成的输出层提供潜在代码。

如果你只是想得到代码,请点击以下链接:

** [## naresh 1318/Adversarial _ 自动编码器

在 GitHub 上创建一个帐户,为 Adversarial_Autoencoder 的开发做出贡献。

github.com](https://github.com/Naresh1318/Adversarial_Autoencoder)

为了在 Tensorflow 中实现上述架构,我们将从一个dense()函数开始,该函数将帮助我们在给定输入x、输入处的神经元数量n1和输出处的神经元数量n2的情况下构建一个密集的全连接层。name参数用于设置variable_scope的名称。更多关于共享变量和使用变量作用域的内容可以在这里找到(我强烈推荐看一看)。

我使用了tf.get_variable()而不是tf.Variable()来创建权重和偏差变量,这样我们就可以在以后重用训练好的模型(单独使用编码器或解码器)来传递任何想要的值,并查看它们的输出。

接下来,我们将使用这个dense()函数来实现编码器架构。代码很简单,但是请注意,我们没有在输出中使用任何激活。

  • reuse 标志用于重用训练过的编码器架构。
  • 这里input_dim = 784, n_l1 = 1000, n_l2 = 1000, z_dim = 2

解码器以类似的方式实现,我们需要的架构是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder Architecture

我们将再次使用dense()函数来构建我们的解码器。然而,我对输出层使用了 sigmoid 激活,以确保输出值的范围在 0 和 1 之间(与我们的输入范围相同)。

  • z_dim = 2, n_l2 = 1000, n_l1 = 1000, input_dim = 784与编码器相同。

编码器输出可以像这样连接到解码器:

这就形成了与架构图所示完全相同的自动编码器架构。我们将通过占位符x_input(大小:batch_size,784)传递输入,将目标设置为与x_input相同,并将decoder_outputx_input进行比较。

使用的损失函数是均方误差(MSE ),其找到输入(x_input)和输出图像(decoder_output)中的像素之间的距离。我们称之为重建损失,因为我们的主要目的是在输出端重建输入。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mean Squared Error

这只不过是输入和输出之间的平方差的平均值。这可以很容易地在 Tensorflow 中实现,如下所示:

我用过的优化器是 AdamOptimizer(随意尝试新的,我还没有在别人身上试验过),学习率为 0.01,beta1 为 0.9。它可在 Tensorflow 上直接获得,使用方法如下:

请注意,我们使用相同的损失函数通过编码器和解码器进行反向传播。(我可以使用minimize()方法下的var_list参数只改变编码器或解码器的权重。由于我没有提到任何,它默认为所有的可训练变量。)

最后,我们通过使用 100 的批量大小传入我们的 MNIST 图像并使用同样的 100 个图像作为目标来训练我们的模型。

github 上有完整的代码:

[## naresh 1318/Adversarial _ 自动编码器

在 GitHub 上创建一个帐户,为 Adversarial_Autoencoder 的开发做出贡献。

github.com](https://github.com/Naresh1318/Adversarial_Autoencoder/blob/master/autoencoder.py)

注意事项:

  • generate_image_grid()函数通过向经过训练的解码器传递一组数字来生成图像网格(这就是get_variable 派上用场的地方)。
  • 每次运行都会在以下位置生成所需的张量板文件:

./Results/<model>/<time_stamp_and_parameters>/Tensorboard

  • 训练日志存储在:

./Results/<model>/<time_stamp_and_parameters>/log/log.txt文件。

  • train标志设置为True以训练模型,或者将其设置为False以显示某些随机输入的解码器输出。

我已经训练了 200 个时期的模型,并显示了损失的变化和下面生成的图像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Variation of reconstruction loss

重建损失正在减少,这正是我们所希望的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generated Images

请注意,解码器是如何通过移除输入 3 顶部的线条等小的不规则性来概括输出 3 的。

现在,如果我们只考虑经过训练的解码器,并传入一些随机数(我已经传入 0,0,因为我们只有一个 2-D 潜在代码)作为输入,我们应该得到一些正确的数字?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder Output at (0, 0)

但这根本不能代表一个明确的数字(好吧,至少对我来说)。

其原因是因为编码器输出没有覆盖整个 2-D 潜在空间(在其输出分布中有很多间隙)。因此,如果我们在训练阶段输入编码器没有输入到解码器的值,我们会得到看起来很奇怪的输出图像。这可以通过在产生潜在代码时将编码器输出限制为具有随机分布(比如平均值为 0.0 且标准偏差为 2.0 的正态分布)来克服。这正是对抗性自动编码器所能做到的,我们将在第二部分中研究它的实现。

再看看封面图片!!

懂了吗?

希望你喜欢这篇关于自动编码器的短文。我会公开鼓励任何批评或建议来改进我的工作。

如果你认为这个内容值得分享点击❤️,我喜欢它发送给我的通知!!

→第 2 部分:用对抗性自动编码器探索潜在空间。**

敌对自动编码器向导指南:第 2 部分,探索敌对自动编码器的潜在空间。

原文:https://towardsdatascience.com/a-wizards-guide-to-adversarial-autoencoders-part-2-exploring-latent-space-with-adversarial-2d53a6f8a4f9?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“这篇文章是 自动编码器向导:第 1 部分 的延续,如果你没有读过它,但熟悉自动编码器的基础知识,那么请继续。你需要了解一点概率论,可以在这里找到。”

第 1 部分:自动编码器?

我们省略了第 1 部分,将一个值(0,0)传递给我们训练过的解码器(在输入端有 2 个神经元),并找到它的输出。它看起来模糊不清,没有代表一个清晰的数字,让我们得出结论,编码器 h (也称为潜在代码)的输出在特定空间中分布不均匀。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们在这一部分的主要目标将是迫使编码器输出与给定的先验分布相匹配,这个要求的分布可以是正态(高斯)分布、均匀分布、伽玛分布…然后,这将导致潜在代码(编码器输出)在给定的先验分布上均匀分布,这将允许我们的解码器学习从先验到数据分布的映射(在我们的情况下是 MNIST 图像的分布)。

如果你完全不理解上面的段落。

假设你在上大学,并且选择了机器学习(我想不出其他课程:p)作为你的课程之一。现在,如果课程老师不提供教学大纲指南或参考书,你将为期末考试学习什么?(假设你的课没有帮助)。

如果你被问及 ML 的任何子领域的问题,你会怎么做?用你知道的东西化妆??

如果我们不将编码器输出限制为遵循某种分布,解码器就无法学习任何数字到图像的映射,就会发生这种情况。

但是,如果你有一份合适的教学大纲指南,你可以在考试前浏览一下材料,这样你就会对考试有所了解。

同样,如果我们迫使编码器输出遵循一个已知的分布,如高斯分布,那么它可以学习扩展潜在代码以覆盖整个分布,并学习无任何间隙的映射。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Good or Bad?

我们现在知道自动编码器有两个部分,每个部分执行完全相反的任务。

两个本性相似的人永远不可能单独相处,只有两个对立面才能和谐。

—拉姆·莫汉

用于从输入获得潜在代码(编码器输出)的编码器,其约束条件是潜在代码的尺寸应小于输入尺寸,其次是接收该潜在代码并尝试重建原始图像的解码器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Autoencoder Block diagram

让我们看看当我们先前实现我们的自动编码器时,编码器输出是如何分布的(checkout part 1 ):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder histogram and distribution

从分布图(向右)我们可以清楚地看到,我们的编码器的输出分布无处不在。最初,似乎分布集中在 0,大多数值为负。在训练的后期阶段,当与正样本相比时,负样本分布在远离 0 的地方(同样,如果我们再次运行实验,我们甚至可能得不到相同的分布)。这导致了编码器分布中的大量间隙,如果我们想将解码器用作生成模型,这不是一件好事。

但是,为什么在我们的编码器分配中,这些差距是一件坏事呢?

如果我们给一个训练有素的解码器一个落在这个间隙中的输入,那么它会给出看起来奇怪的图像,在输出端不代表数字(我知道,第三次)。

另一个重要的观察结果是,训练自动编码器给了我们具有相似图像的潜在代码(例如,全是 2 或 3…)在欧几里得空间中彼此远离。例如,这可能导致我们数据集中的所有 2 被映射到空间中的不同区域。我们希望通过将相似数字的图像保持在一起,使潜在代码具有有意义的表示。有些事情是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A good 2D distribution

不同颜色的区域代表一类图像,请注意相同颜色的区域是如何相互靠近的。

我们现在来看看可以解决上述一些问题的对抗性自动编码器。

对抗自动编码器与自动编码器非常相似,但是编码器以对抗的方式被训练,以迫使它输出所需的分布。

理解对抗性自动编码器(AAEs)需要生成性对抗性网络(GANs)的知识,我写了一篇关于 GANs 的文章,可以在这里找到:

* [## 甘斯·恩罗斯

“本文假设读者熟悉神经网络和张量流的使用。如果没有,我们请求您…

medium.com](https://medium.com/towards-data-science/gans-n-roses-c6652d513260)

如果您已经了解 GANs,这里有一个快速回顾(如果您记得接下来的两点,请随意跳过这一部分):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discriminator

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generator

  • GANs 有两个神经网络,一个生成器和一个鉴别器。
  • 生成器,很好地生成假图像。我们训练鉴别器来区分数据集的真实图像和生成器生成的假图像。
  • 生成器最初会生成一些随机噪声(因为它的权重是随机的)。在训练我们的鉴别器来区分这种随机噪声和真实图像之后,我们将把我们的生成器连接到我们的鉴别器,并且仅通过具有鉴别器输出应该为 1 的约束的生成器进行反向传播(即,鉴别器应该将生成器的输出分类为真实图像)。
  • 我们将再次训练我们的鉴别器来区分来自我们的生成器的新的假图像和来自我们的数据库的真实图像。然后训练生成器生成更好的假图像。
  • 我们将继续这个过程,直到生成器变得非常擅长生成假图像,以至于鉴别器不再能够区分真实图像和假图像。
  • 最后,我们将剩下一个生成器,它可以产生看起来真实的假图像,给定一组随机的数字作为输入。*

这是一个对抗性自动编码器的框图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AAE block diagram

  • x →输入图像
  • q(z/x) →编码器输出给定输入 x
  • z →潜码(假输入),z 由 q(z/x)得出
  • z’ →具有所需分布的实际输入
  • p(x/z)→给定 z 的解码器输出
  • D() →鉴别器
  • x _→重建图像

同样,我们的主要目的是迫使编码器输出具有给定先验分布的值(这可以是正态分布,γ分布…分发)。我们将使用编码器(q(z/x))作为我们的生成器,鉴别器来判断样本是来自先前的分布(p(z))还是来自编码器(z)和解码器(p(x/z))的输出,以恢复原始输入图像。

为了理解这种架构如何用于在编码器输出上强加先验分布,让我们看一下如何训练 AAE。

训练 AAE 有两个阶段:

  • 重建阶段:

我们将训练编码器和解码器,以最小化重建损失(输入和解码器输出图像之间的均方误差,查看第 1 部分了解更多细节)。忘记鉴别器甚至存在于这个阶段(我已经将这个阶段不需要的部分变灰)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Reconstruction Phase

像往常一样,我们将输入传递给编码器,编码器将给出我们的潜在代码,稍后,我们将把这个潜在代码传递给解码器,以取回输入图像。我们将反向传播编码器和解码器的权重,以便减少重建损失。

  • 正规化阶段:

在这一阶段,我们必须训练鉴别器和生成器(它只不过是我们的编码器)。忘了解码器的存在吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Training the discriminator

首先,我们训练鉴别器来分类编码器输出(z)和一些随机输入(z ',这将有我们需要的分布)。例如,随机输入可以正态分布,平均值为 0,标准偏差为 5。

因此,如果我们传入具有期望分布(真实值)的随机输入,鉴别器应该给我们输出 1,当我们传入编码器输出时,应该给我们输出 0(假值)。直观上,编码器输出和鉴别器的随机输入应该具有相同的大小。

下一步将是迫使编码器输出具有期望分布的潜在代码。为此,我们将把编码器输出作为输入连接到鉴频器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将把鉴别器权重固定为它们当前的值(使它们不可跟踪),并在鉴别器输出端把目标值固定为 1。稍后,我们将图像传入编码器,并找到鉴别器输出,然后使用该输出来查找损失(交叉熵成本函数)。我们将仅通过编码器权重进行反向传播,这将导致编码器学习所需的分布,并产生具有该分布的输出(将鉴别器目标固定为 1 将导致编码器通过查看鉴别器权重来学习所需的分布)。

既然理论部分已经完成,让我们看看如何使用 tensorflow 实现它。

下面是第 2 部分的完整代码(它与我们在第 1 部分中讨论的内容非常相似):

* [## naresh 1318/Adversarial _ 自动编码器

对抗性自动编码器向导

github.com](https://github.com/Naresh1318/Adversarial_Autoencoder/blob/master/adversarial_autoencoder.py)

像往常一样,我们有帮手:

我没有改变编码器和解码器的架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder Architecture

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder Architecture

这是鉴别器架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discriminator Architecture

它类似于我们的编码器架构,输入形状是z_dim(实际上是batch_size, z_dim),输出形状是 1 ( batch_size, 1)。

注意,在分别为编码器、解码器和鉴别器定义密集层时,我使用了前缀e_d_dc_。使用这些符号有助于我们轻松收集要训练的重量:

我们现在知道训练 AAE 有两个部分,首先是重建阶段(我们将训练我们的自动编码器来重建输入)和正则化阶段(首先训练鉴别器,然后是编码器)。

我们将编码器输出连接到解码器输入,开始重建阶段:

我每次调用我们定义的架构时都使用tf.variable_scope(tf.get_variable_scope()),因为它允许我们在所有函数调用中共享权重(只有在reuse=True时才会发生)。

损失函数通常是均方误差(MSE),我们在第 1 部分中遇到过。

类似于我们在第 1 部分中所做的,优化器(它将更新权重以减少损失[希望如此])实现如下:

I couldn’t help it 😛

重建阶段到此结束,接下来我们进入正则化阶段:

我们将首先训练鉴别器来区分真实的分布样本和来自生成器(这里是编码器)的假样本。

  • real_distribution是一个占位符,我用它将所需分布的值传递给鉴别器(这将是我们真正的输入)。
  • encoder_output连接到鉴别器,鉴别器将为我们提供伪输入的鉴别器输出d_fake
  • 这里是reuse=True,因为我们希望在第二次调用中使用相同的鉴别器权重(如果没有指定,那么 tensorflow 会创建一组新的随机初始化的权重[但是因为我使用了get_variable()来创建权重,所以会出错])。

我用来训练鉴别器的损失函数是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cross entropy cost

这很容易在 tensorflow 中实现,如下所示:

下一步将是训练发电机(编码器)输出所需的分布。正如我们已经讨论过的,这需要将鉴别器的目标设置为 1,并将d_fake变量(连接到鉴别器的编码器【返回查看】)设置为 1。发电机损耗又是交叉熵代价函数。

为了在训练期间只更新所需的权重,我们需要将所有这些收集的权重传递给minimize()下的var_list参数。因此,我已经在它们的训练阶段传递了鉴别器变量(dc_var)和生成器(编码器)变量(en_var)。

我们差不多完成了,剩下的就是将我们的 MNIST 图像作为输入和目标,以及大小为batch_size, z_dim的随机数作为鉴别器的输入(这将形成所需的分布)。

训练部分可能看起来很吓人,但是盯着它看一会儿,你会发现它非常直观。

我在培训中使用的参数如下:

我用所需的分布训练了 300 个时期的模型,开始一个正态(高斯)分布,平均值为 0 和 5,作为它的标准分布。下面是编码器输出和所需的分布及其直方图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编码器分布几乎与要求的分布相匹配,直方图显示其中心为零。很好,但是鉴别器呢,它的表现如何?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好消息是,鉴频器损耗正在增加(变得更糟),这告诉我们很难区分真假输入。

最后,由于我们有了z_dim=2 (2D 值),我们可以将属于所需分布的随机输入传递给我们训练过的解码器,并将其用作生成器(我知道,我一直将编码器称为生成器,因为它向鉴别器生成假输入,但由于解码器已经学会映射这些假输入以在其输出端获得数字,所以我们可以将我们的解码器称为生成器)。我以固定的间隔将(-10,-10)到(10,10)的值传递给解码器,并存储其输出。下面是数字的分布情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图显示了一个清晰的数字聚类及其在我们探索解码器训练值时的转换。AAE 使编码器输出分布中的间隙变得更近,这允许我们将解码器用作发电机。

就是这样!。在下一部分中,我们将重点讨论如何使用 AAE 将图像风格与其内容分开。这很容易实现,因为我们已经完成了大部分相对困难的部分。*

希望你喜欢 AAEs 上的这篇文章。我会公开鼓励任何批评或建议来改进我的工作。

如果你认为这个内容值得分享点击❤️,我喜欢它发送给我的通知!!

← Part 1: Autoencoder?

→第 3 部分:风格与内容的解开。

对抗性自动编码器的向导指南:第 3 部分,风格和内容的分离。

原文:https://towardsdatascience.com/a-wizards-guide-to-adversarial-autoencoders-part-3-disentanglement-of-style-and-content-89262973a4d7?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“如果你已经阅读了前两部分,你会觉得在实现这一部分时如鱼得水。”

←第二部分:用对抗性的自动编码器探索潜在空间。

第 1 部分和第 2 部分主要关注自动编码器和对抗性自动编码器的入门。我们从一个简单的 AE (vanilla one)开始,对其架构和训练算法进行了一些更改,最终得到了一个 AAE。这一部分延续了这一趋势,改变了 AAE 的建筑风格,同时在训练方式上做了小小的改变。

我已经在我的 repo 中创建了所有的 python 文件,这样一个零件所需的每一个文件都可以通过一些小的修改从先前的文件中获得。我建议您阅读这篇文章的理论部分,并尝试修改第 2 部分的代码来实现第 3 部分。

我们每个人都有自己独特的写作风格,无论是写信还是签名。我们书写某些字符的方式,我们经常用来造句的词语,甚至一个人在纸上施加的压力都是定义独特笔迹的特征。随着所有这些事情的发生,伪造笔迹会变得非常困难和昂贵。让我们尝试从 MNIST 数据集中学习写作风格,并使用它来输出具有相同风格的图像。我们将只关注写作风格,而不是句子的结构或作者的思维过程。

要清楚了解什么是风格和内容,请看下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Style and Content

每个文本都有相同的内容“自动编码器”,但风格不同。我们现在的任务是从图像中分离出风格(Myriad Pro,MV Boil,…)和内容。

理清各种特征在表征学习中非常重要(更多信息请点击这里)。

我们遇到的自动编码器和对抗性自动编码器都是以无监督的方式训练的(在训练期间没有使用任何标签)。使用来自图像的标签信息允许 AAE 专注于学习提取图像中的样式,而不考虑其内容。利用图像标签使它成为一个监督模型。

我们需要完成的架构与我们在第 2 部分中看到的非常相似。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AAE Architecture

这里,代替在解码器处直接使用潜在代码 z (编码器的输出)来恢复输入图像( x ),我们也传入图像标签( y )。现在,解码器的输入有两部分:

  • 来自编码器的潜在代码z
  • 图像标签的一个热表示(姑且称之为 y )。

我们像往常一样训练 AAE,只是对重建阶段做了一点修改:

  • **重建阶段:**我们将输入图像传入编码器以获得潜在代码 z ,稍后,将潜在代码( z ,编码器的输出)和图像标签( y )组合以获得更大的列向量,然后将其馈送给我们的解码器。我们像往常一样训练 AE 以最小化重建损失。因为图像标签被馈送到解码器,所以编码器在训练期间学习图像的风格,并且解码器使用来自标签的内容信息和来自编码器的风格信息来重构输入图像。
  • **正规化阶段:**与我们在第二部中看到的完全相似。

现在,让我们只是添加图像标签到我们的 AAE,并检查结果。

由于我们需要一个热图像标签,解码器架构将具有更大数量的输入神经元[10 + z_dim ] (10 因为我们有十个类,并且 z_dim 是编码器输出的大小,例如, z_dim 可以是 2)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder Architecture

现在是时候停止阅读并修改第 2 部分的代码了。稍后回来看看代码和结果。

改进的解码器架构:

我们还需要在培训期间输入图像标签,这非常简单:

我刚刚在调用mnist_train_next_batch()函数时用batch_y替换了_,并将这些标签用作y_input占位符的输入。

我用以下参数训练了 AE:

注意,我使用了z_dim=15而不是2,不像之前的实现,因为结果在视觉上是令人愉悦的。

与第 2 部分类似,我将先前高斯分布的标准偏差保持为 5.0,平均值为 0。

为了生成具有相同风格但不同字符的图像,我们将传递一个随机输入作为 z ( z_dim 在这种情况下是 15)并将一个热向量 y 更改为所需的值。在这里,我为 z 传入了 10 个随机值,并将 y 改为表示从 0 到 9 的数字:

看看generate_image_grid()的实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Style and content Disentanglement

作为健全性检查,让我们看看编码器输出分布,检查它是否仍然是我们想要的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的,这就完成了第 3 部分!

我们将再次建立在这一部分的基础上,使用有限数量的标签对图像进行分类,同时仍然理清风格和内容。

我已经减少了这篇文章的阅读时间,只是为了检查它是否会影响媒体上的阅读率😜。如果你觉得内容精简的短文更好,或者你有不同的看法,请在下面留下评论。

感谢您的阅读,我一直在寻找改进工作的方法。您的反馈(好的或坏的)将对我有巨大的帮助。祝您愉快!

对抗性自动编码器向导:第 4 部分,使用 1000 个标签对 MNIST 进行分类。

原文:https://towardsdatascience.com/a-wizards-guide-to-adversarial-autoencoders-part-4-classify-mnist-using-1000-labels-2ca08071f95?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“我们将运用我们在前三部分学到的知识对 MNIST 进行分类。

我知道这听起来不怎么酷,难道我们不应该做些更酷的事情吗?”

和往常一样,如果你还没有读完之前的任何部分,或者想再看一遍,我可以帮你节省一些时间:

←第 1 部分: Autoencoder?

← Part 2: 用对抗性的自动编码器探索潜在空间。

← Part 3: 风格与内容的解开。

我们从一个自动编码器开始,将图像从一个较高的维度映射到一个较低的维度,通过以对抗的方式训练它来约束编码器输出所需的分布,最后从图像内容中分离出风格。最后,我们现在看一种使用 1000 个标记图像以半监督方式分类 MNIST 数字的方法。

还记得理解这个系列的前提条件吗?

是的,使用张量流对 MNIST 进行分类。

让我们测试一下,好吗?

但是,在此之前,让我告诉你(** 剧透警告 **)我们将使用编码器对 MNIST 数字进行分类,并作为稍后比较我们结果的参考,我们将构建一个与我们的编码器具有相同架构(不包括输出神经元)的分类器(我称之为基本 NN 分类器),并使用 1000 个标记图像以监督方式对其进行训练,并使用 10k 测试数据测试其准确性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Basic NN Classifier

如果你已经到了这一步,你一定能够实现上述架构的专业人士,所以我将跳过它。但是,如果你被困在某个地方,看看下面的链接:

* [## naresh 1318/Adversarial _ 自动编码器

对抗性自动编码器向导

github.com](https://github.com/Naresh1318/Adversarial_Autoencoder/blob/master/basic_nn_classifier.py)

让我们看看用以下参数训练我们的基本 NN 分类器后的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Accuracy variation

在大约 50 个时期之后,该模型似乎过拟合,因为测试精度已经饱和在 87%。请注意,该模型只显示了 1000 张标记图像,如果我们使用所有 50k 训练图像,我们可以获得更高的准确性。现在,我们的任务是使用同样的 1000 个标记图像来提高这种准确性。*

但是,我们如何使用我们的 AAE 作为分类器呢?

我们将同时提高分类的准确性,减少维度,并且只使用一个单一的模型来理清风格和内容(是的,我又在吹牛了)。这需要对我们以前的架构(第 3 部分中的架构)进行一些修改:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Semi-Supervised AAE Block Diagram

它类似于第 3 部分中的 AAE,但在顶部添加了另一个鉴别器( D_cat )并对编码器架构做了少量修改(它现在输出 yz )。编码器的输出可以分为两部分,分类()y*)和潜码( z )。因为有 10 个标签,所以一个热向量( y )有 10 个值,并且像往常一样,取决于用户期望的潜在代码(z_dim)的大小。*

我们将需要在上强加一个分类分布(cat(10)),因为我们只是想要 10 个可能的输出神经元中的一个为提供给它的每个图像触发。鉴别器 D_cat 就是为了做到这一点,它与我们的生成器(编码器)一起以对抗的方式进行训练,以迫使编码器在 y 处产生一个热向量(我们仍然不能将编码器用作分类器,因为这些热向量都是随机值,因为现在的主要目的是在编码器处强制进行分类分布)。

像往常一样,我们将教会编码器使用上图所示的鉴别器*_ gauss*z 处产生高斯(或任何其他分布)分布。

大部分神奇的事情发生在训练阶段,我们将看看编码器如何被用作分类器。

使用 SGD(随机梯度下降)分三个阶段同时训练两个敌对网络:

  • 重建阶段 :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Reconstruction Phase

正如在第 2 部分和第 3 部分中看到的,我们关心的是减少重建损失,即输入和输出图像之间的均方误差。我们将仅通过编码器和解码器网络进行反向传播,以减少此阶段的重建损失。

  • 正规化阶段 :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Step 1

**在正则化阶段,编码器输出 y 应该被限制为只产生分类分布,这可以用类似于我们在第 2 部分中所做的方式来完成。我们将首先训练鉴别器 D_cat 来区分真实分类样本(y’)和从生成器(编码器) y 获得的样本。我们可以通过将一幅图像传递给编码器来实现这一点,该编码器从编码器中产生 y 和 ***z、*暂且不提 z (我们稍后会用到它),从编码器中产生假的 y ,从分类中产生y’后来,鉴别器的权重是固定的(变得不可训练),目标设置为 1,编码器被训练来欺骗鉴别器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Step 2

类似地,为了在 z 上施加高斯分布,首先训练鉴别器 D_gauss ,然后是编码器,就像在第 2 部分中一样。

  • 半监督分类阶段

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们将训练编码器通过传入一小批图像及其对应的一个热标签来对数字进行分类,以最小化交叉熵成本(同样,我们将忽略在 z 获得的任何内容)。在训练阶段,我们将只使用来自训练集的 1000 个标记图像,并使用所有 10k 测试集来了解我们的模型执行得有多好。

我认为代码比文字更清楚,这也是为什么我总是试图包含代码片段的原因之一。

要使用第 3 部分的代码构建一个半监督的对抗性自动编码器,我们需要做 3 个主要的修改(是的,也有一些微妙的变化,我已经在注释部分解释过了)。首先,作为编码器架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder Architecture

:

  • latent_variable将是我们的z
  • cat_op是分类输出y
  • 我已经使用了一个if语句来测试supervised标志。它所做的只是检查supervised标志是否为False(当我们将编码器输出直接连接为解码器输入时,就会出现这种情况),并通过 softmax 函数传递逻辑值(从架构直接输出,不通过任何激活函数传递),以在输出端获得正确的分类分布。但是,当标志为True时,逻辑将直接用于以受监督的方式训练编码器模型。我这样做是为了在半监督训练阶段使用 tensorflow 上直接提供的softmax_cross_entropy_with_logits()

解码器架构与前一个相同:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Decoder Architecture

两个鉴别器具有相同的架构,只有输入维度发生了变化,这是第二个主要变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

D_gauss and D_cat Architecture

最后,培训机制经历了一些变化,我在下面解释了这些变化:

我们将从构建 AE 的重建阶段开始:

随后是重建损失,因为它的优化器:

为了训练编码器和鉴别器架构,必须像第 2 部分和第 3 部分一样收集它们相应的权重:

首先涉及训练两个鉴别器( D_catD_gauss )的正则化阶段如下进行(我们仍然必须传递输入):

现在,为了训练生成器(编码器)输出在处的分类分布和在 z 、处的高斯分布,我们将运行这些神奇的行:

为了训练编码器进行分类,我已经将输入图像传递给训练过的编码器(reuse=True)还要注意的是supervised=True,它不使用 softmax 函数,而是将密集层输出传递给损失函数:

使用np.eye()生成需要真实分类分布的训练阶段,下面的代码为给定的历元数训练模型,在每个历元保存它,将损失、直方图和输出图像写入 tensorboard,并将结果(损失和分类精度)存储在./Results/Semi_Supervised/<folder_name>/log/log.txt:

使用以下参数训练 1000 个时期后:

精度图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Accuracy Variations

我们甚至没有调优任何超参数就越过了 95%的准确率大关(我有点懒于这样做)。该模型使用在无监督训练阶段学习的特征来实现比其有监督的对应物更高的分类精度。这清楚地显示了无监督学习的应用潜力,我们可以在互联网上收集大量免费的未标记数据,并教会计算机从这些未标记图像中学习特征。

这是一个 AE 可以在无人监督的情况下学习的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Visualizing the features learnt. Source: http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/

如果我们将编码器中每个输出神经元寻找的特征可视化,我们会得到类似于上图所示的可视化效果。一个输出神经元可能只有在输入端发现一个特定的边缘或轮廓时才会触发(关于这一点的更多信息可以在这里找到)。这些以非监督方式学习的特征可以在监督训练任务中使用,这正是我们在这一部分所做的。

作为一个健全的检查,让我们可视化输出分布和图像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Distributions

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Images from the decoder

唷!,实际分布和输出分布相匹配,并且输出图像看起来像是从 MNIST 数据集获得的图像。

所以,是的,我们完成了最后一部分!

感谢您的阅读!

我只是想让人们知道他们如何通过建立他们所知道的东西来实现东西,以及如何从一个简单的 AE 开始,我们可以在每一步做一些小的修改来创造一些有趣的东西。

我在暑假期间写了这个系列,以感受一个作家的经历,并欣赏他们通过什么来表达他们的思想或分享他们的知识,让世界了解。我相信只有当人们自己尝试做类似的事情时,他们才会开始钦佩别人的工作并真正理解它。

也就是说,如果你已经走了这么远,感谢你阅读我以前的帖子,并以一个👏。如果我犯了什么错误或者破坏了互联网,请让我知道。

摘要中使用的单词云

原文:https://towardsdatascience.com/a-word-cloud-of-words-used-in-abstract-1d07613770f?source=collection_archive---------9-----------------------

我真的很喜欢《抽象》——网飞的系列设计纪录片。这是那种让你不想被动消费和创造的内容。

我一直在 R 中玩文本分析,并决定应用我最近接触到的一些技术,创建一个包含节目中使用的所有单词的单词云。像所有数据科学项目一样,这个项目始于数据采集。网飞提供多种语言的字幕。每次你打开字幕或者改变语言,它都会下载。花了几分钟时间在 Chrome 中找到请求:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由于这部电视剧只有 8 集,我没有尝试自动下载每集的英文字幕,而是手动下载。

字幕以 TTML 格式提供。对于创建单词云,我只对文件中的文本内容感兴趣,对时间或字体数据不太感兴趣。因此,我没有尝试寻找一个专门的 TTML 处理库,而是编写了一个快速的 Python 脚本,将每个文件简单地视为另一个 XML 文件,并将每集的文本转储到一个制表符分隔的文件中:

episode script
1 [director] Part of this is I’m trying to figure out some of the...
2 [sea birds calling] [Tinker] I probably think about feet a lot ...
3 [Es] Over the last two decades of working, one of the things I'...
.
.
.

下一步是在 r 中读取这个文件。我使用了通用的read.csv,但它没有像预期的那样工作。

> d <- read.csv('~/proj/abstract.tsv', sep="\t")
> str(d)
'data.frame': 3 obs. of  2 variables:
 $ **episode: int  6 7 8**
 $ script : Factor w/ 3 levels "[Ilse] Some people think interior design is a look. In fact, It must be really fun buying furniture is somethin"| __truncated__,..: 2 3 1

数据框只有 3 行。它清楚地读取了整个文件,因为它从标题(剧集,剧本)中选择了列名,并得到了最后 3 行,但我很困惑为什么read.csv会跳过第 1-5 行。我试图将as.is=T参数传递给read.csv以防止它将字符串解释为因子,但这并不能阻止它跳过第 1–5 行。

'data.frame': 3 obs. of  2 variables:
 $ **episode: int  6 7 8**
 $ script : chr  "[Paula] I walk outside and I see typography everywhere. New York City is a city of signs. Sometimes things writ"| __truncated__ "[Platon] I'm not really a photographer at all. The camera is nothing more than a tool. Communication, simplicit"| __truncated__ "[Ilse] Some people think interior design is a look. In fact, It must be really fun buying furniture is somethin"| __truncated__

最终,我从data.table套餐中选择了fread,它非常管用:

> library(data.table)
> d <- fread('~/proj/abstract.tsv')
> str(d)
Classes ‘data.table’ and 'data.frame': 8 obs. of  2 variables:
 $ **episode: int  1 2 3 4 5 6 7 8**
 $ script : chr  "[director] Part of this is I'm trying to figure out some of the big picture things. How aesthetically to tell y"| __truncated__ "[sea birds calling] [Tinker] I probably think about feet a lot more than the average person. As a shoe designer"| __truncated__ "[Es] Over the last two decades of working, one of the things I've discovered is often things are made to fill v"| __truncated__ "[director] Is this going to be a slapstick comedy? Is it an action film? You know, let's have fun with it. -Yea"| __truncated__ ...
 - attr(*, ".internal.selfref")=<externalptr> 

下一步是将脚本分解成单词。tidytext包帮助我们做到了这一点(甚至更多):

> library(tidytext)
> words <- unnest_tokens(d, word, script)
> head(words)
   episode     word
1:       1 director
2:       1     part
3:       1       of
4:       1     this
5:       1       is
6:       1      i'm

让我们来数一数每个单词:

> library(dplyr)
> words %>% group_by(word) %>% summarise(count=n()) %>% arrange(desc(count))
# A tibble: 5,047 x 2
    word count
   <chr> <int>
 1   the  1863
 2   and  1262
 3     a  1217
 4    to  1170
 5     i  1135
 6    of   985
 7  that   878
 8    it   796
 9    in   681
10   you   681
# ... with 5,037 more rows

因此,正如您所料,我们在脚本中最常用的词大多是停用词。移除它们实际上非常简单:

> words <- words %>% **anti_join(stop_words)**
> words %>% group_by(word) %>% summarise(count=n()) %>% arrange(desc(count))
# A tibble: 4,496 x 2
      word count
     <chr> <int>
 1  people   157
 2  design   123
 3    time   110
 4   music   107
 5 playing    97
 6     car    66
 7    yeah    66
 8    feel    56
 9    idea    50
10   world    50
# ... with 4,486 more rows

现在引起我注意的是“音乐”这个词是第四个最常用的词。据我回忆,除了第三集有 Ev Devlin,这个系列没有太多关于音乐的内容。当我在文本编辑器中打开由 TTML 文件生成的标签限定的文件,并搜索“音乐”时,这个词出现频率如此之高的原因对我来说变得很清楚。字幕中提到了很多背景音乐,例如,我仅在第一集就发现了以下短语:

[电子音乐继续播放],[电子音乐结束],[不祥的音乐播放],[平静的音乐播放],[乐观的钢琴音乐播放],[爵士音乐播放],[电子音乐播放],[电子音乐继续],[编钟音乐播放],[平静的音乐播放],[平静的音乐继续],[编钟音乐播放],[乐观的音乐播放],[器乐播放]

我使用正则表达式从脚本中删除这些短语,并重复上面的步骤来获得单词及其计数:

> d$script <- gsub('\\[(?:\\w+\\s){0,3}music(?:\\s\\w+){0,3}\\]', "", d$script, perl=T)
> words <- unnest_tokens(d, word, script)
> words <- words %>% anti_join(stop_words)
> words %>% group_by(word) %>% summarise(count=n()) %>% arrange(desc(count))
> words
# A tibble: 4,485 x 2
     word count
    <chr> <int>
 1 people   157
 2 design   123
 3   time   110
 4    car    66
 5   yeah    66
 6   feel    56
 7   idea    50
 8  world    50
 9  ralph    49
10   love    48
# ... with 4,475 more rows

好多了。一旦我们有了单词和它们的数量,制作单词云就很容易了:

> library(wordcloud)
> words %>% count(word) %>% with(wordcloud(word, n, max.words=50, min.freq=5, color='purple4', random.order=F))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每集制作一个单词云同样简单:

> par(mfrow=c(2,4))
> colors <- c("blue","green4","green","gold","orange","orange3","red","red3")
> for (i in 1:8) {
    words %>% filter(episode == i) %>% count(word) %>% with(wordcloud(word, n, max.words=50, min.freq=5,color=colors[i],random.order=F))
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里还可以做更多的事情——例如,请注意,在廷克·哈特菲尔德的单词 cloud 中,单词 shoe 和 shoes 重复出现——我们可以在绘制单词 cloud 之前通过单数化这些单词来解决这个问题。

如果你对用 R 分析文本感兴趣,我强烈推荐用 R 进行文本挖掘:一种整洁的方法这本书。

**更新:**我发现了为什么read.csv跳过了前五行——文件中的大量引号与其默认的引用行为产生了不良影响。因此,如果您更愿意使用read.csv而不是fread,请将quote参数设置为空字符串:

d <- read.csv("~/proj/abstract.tsv", sep="\t", **quote=""**, as.is=T)

使用 Docker、Python 和 PostgreSQL 进行地理空间分析的工作环境

原文:https://towardsdatascience.com/a-working-environment-for-geospatial-analysis-with-docker-python-and-postgresql-670c2be58e0a?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我寻找一个存储、处理和可视化地理空间数据的工作环境的简短版本。它涉及到一个在本地运行的 PostgreSQL 服务器,一个带有 GDAL 和带有 Python3 用作解释器的py charm Professional,一个本地安装的QGIS(非必需)。

目标

本文的重点是创建一个 Docker 映像,它可以用作工作环境。它可以被认为是一种扩展的 Python 虚拟环境,我们在其中安装 Python、它的包以及作为操作系统一部分的其他库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

My work environment on a Mac OSX. On the local host, I installed PostgreSQL and QGIS with Homebrew. For GDAL, Python3 and all its packages, I use a Docker container. PyCharm links all these pieces together under one single umbrella.

在这种特殊情况下,我的目标是:

  • 存储 PostgreSQL 数据库中的地理空间数据,并能够使用 Python 和 QGIS 进行查询;
  • 使用 ogr2ogr 和其他 GDAL 功能,能够读取、转换和写入各种地理空间格式;
  • 能够编写 Python 代码,并在 Python shell 中进行现场测试;
  • graph-tool进行图形分析。

参考文献

在下面由 Hamel Husain 撰写的精彩文章中,可以找到关于 Docker 的良好指南,以及为什么在数据科学项目中使用 Docker 是一种良好的做法。

** [## Docker 如何帮助您成为更高效的数据科学家

在过去的 5 年里,我听到了很多关于码头集装箱的传言。似乎我所有的软件工程…

towardsdatascience.com](/how-docker-can-help-you-become-a-more-effective-data-scientist-7fc048ef91d5)

我的部分解决方案基于他的教程,我建议你在继续之前先阅读它,尤其是如果你不熟悉 Docker 的话。

以 Python 包的形式出现,但更像是 C 库的 Python 包装器。在虚拟环境中安装是一件非常令人头疼的事情,而且几乎是不可能的。

编辑:graph-tool现在在homebrew上,这让生活变得更容易。如果想在虚拟环境中使用,一个办法是安装在系统的 Pyhton (2.7 或 3.5+)中,用virtualenv --systam-site-packages复制系统包,创建一个虚拟环境。

GDAL(地理空间数据抽象库)是一个栅格和矢量地理空间数据格式的翻译库。这是精通地理分析的工具箱中必不可少的元素。众所周知,设置起来很痛苦。

homebrew是 MacOS 的软件包管理器

鉴于这些前提,我想我会分享我的经验,把一切放在一起。你可以在我的 Github repo 里找到文件。

要求

我假设你在安装了[homebrew](https://brew.sh/)[docker 17.09](https://docs.docker.com/engine/installation/)的 Mac OSX 上。

你还应该了解 Docker(你可能不会在这里,否则……),能够使用终端,并知道 Ubuntu 外壳和apt-get的螺母和螺栓。

一个不幸的注意:只有专业版的 PyCharm 可以远程虚拟环境,因此 PyCharm 社区版(免费版)将无法与 Docker 一起工作。

我们要做什么

以下是本教程中的步骤:

  • brew安装 PostgreSQL 和 QGIS(实际上,QGIS 并不是严格必要的,它只是一个额外的好处)
  • 创建一个 Ubuntu 17.10 Docker 镜像(我将用斜体书写 Docker 领域特有的术语),用 Python3 安装一些有用的包和 GDAL 库(这一步可以定制为包含任何相关的 Python 包)。
  • 根据上面的图片打开一个交互式 Docker 容器并手动安装graph-tool来更进一步。
  • 将结果提交给 Docker 映像
  • 设置 PyCharm Professional 使用 Docker 映像作为解释器,并创建一个共享文件夹,以便能够从映像来回读取/写入数据。
  • 用 Postgresql 连接 Python。

你可以在这个 Github 仓库中找到本教程需要的一些文件。

有很多东西。让我们开始吧。

PostgreSQL 安装

有了homebrew,PostgreSQL 的安装相当容易。从系统终端:

$ brew install postgresql

安装后,使用以下命令启动服务器:

$ brew services start postgresql

检查状态:

$ brew services list

停止服务器:

$ brew services stop postgresql

在 Docker 中创建一个 Python 环境

第一步是创建一个 Docker 图像。从 Mac OSX 终端创建一个新目录:

$ mkdir MyDockerImages

输入目录:

$ cd myDockerImages

创建一个名为 Dockerfile 的文件:

$ touch Dockerfile

将以下内容复制粘贴到Dockerfile(解释见评论):

请注意目录/ds的创建:稍后将使用它在 Docker 映像主机(您的本地计算机)之间共享数据。

有了这个 Docker 文件,我们现在可以构建一个 Docker 映像:

$ docker build -t my_env -f ./Dockerfile ./

安装

安装graph-tool的详细说明可以在这里找到

要安装的行graph-tool可能已经包含在 Dockerfile 文件中。但是由于在安装过程中可能会要求您从 bash shell 中输入一些信息,所以我没有找到比从通过交互运行 Docker 映像创建的 bash 中手动安装它更好的方法。

关键步骤是:

  • 添加一个. list 文件,链接到托管graph-tool的服务器,这样apt-get就知道在哪里寻找。
  • 根据安装说明中提供的公钥验证软件包。
  • 运行apt-get update并安装软件包。

使用选项-it交互运行容器:

$ docker run -it my_env

从容器内部看,Ubuntu bash 应该类似于:

root@539265d4463b

请注意@后面的数字,因为那是容器的 ID,我们将在几行中将其用作 CONTAINERID。在容器的 bash 中,键入:

Bash script for a Ubuntu Docker container to install graph-tool.

graph-tool现在已经安装好了,我们只需要提交对映像的更改,这样当我们关闭容器时它们就不会丢失:

$ docker commit -m "My note" -a "theAuthor" CONTAINERID my_env

用 PyCharm 连接一切

我的工作流程是大量的试验和错误,我经常测试短代码行,检查数据或一些 Python 元素的类型。为此,我需要一个混合的代码编辑器和交互式外壳。PyCharm 除了提供一种构建项目和文件夹的方法,还提供了一种在两者之间来回跳转的简单方法。

我们将使用我们命名为“my_env”的 Docker 映像作为 PyCharm 2017 Professional 中的一个项目的解释器,以便我们可以使用我们刚刚安装的所有包和功能。在这里你可以找到这个话题的官方文档。

打开 PyCharm 并创建一个新项目。请注意,由于当前 PyCharm 的限制,此时您不能直接添加 Docker 图像作为解释器,如这里的所解释的。我们需要首先使用一个系统解释器,然后改变它。我们先用系统解释器打开项目,然后进入 py charm/Preferences/Project/Project Interpreter,选择“添加远程”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择“Docker ”,并在下图中输入缺少的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后一步是创建一个链接,在主机(您的计算机)和 Docker 映像之间共享数据。这将允许我们读取/保存文件,如 csv、图像、图表等。从菜单“PyCharm/Preferences/Build,Execution,Deployment/”转到 Docker 并添加一个“路径映射”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建“路径映射”时,会要求您给出一个“虚拟机路径”,在我们的例子中是/ds(参见 Docker 文件,当我们创建 Docker 映像时),以及一个本地路径,这是您希望用来存储数据的项目数据文件夹。

将 Python 连接到 PostgreSQL

为了从 Docker 镜像连接到主机上的服务器,我们将使用 Mac 特定的 DNS 名称docker.for.mac.localhost,如这里的所解释的。其实在 Python 中把连接字符串中的’ localhost ‘替换成’ docker.for.mac.localhost '就够了。下面是一个使用psycopg2创建连接、运行简单查询并获取结果的例子:

PostgreSQL connection test in Python3.6.

奖励课程:QGIS 安装

对于 QGIS,我们首先需要将一些必需的包安装到系统 Python 中。从系统终端:

$ pip install psycopg2 requests future jinja2 pygments

如果要安装特定的支持,请检查软件包选项:

$ brew info qgis2

安装 QGIS 2.18(即将推出 3 版):

$ brew install qgis2

创建应用程序的符号链接,以便图标会出现在应用程序文件夹中:

$ ln -s /usr/local/Cellar/qgis2/2.18.14/QGIS.app /Applications

公开

我与 JetBrains 的 PyCharm 团队没有工作或任何联系,我实际上是一个付费用户。

请保持联系!

我很想听到你的评论,请联系: TwitterGithubLinkedin 。**

大学毕业后作为数据科学家的一年:诚实的回顾

原文:https://towardsdatascience.com/a-year-as-a-data-scientist-right-after-college-an-honest-review-40509d07ca04?source=collection_archive---------0-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我大学毕业后开始从事数据科学家的工作已经有一年左右了。我带着很多不同的期望来到这里,以下是我的想法。

数据科学确实是一个回报丰厚的领域,并且有其利弊。鉴于我有限的经验和知识,我建议你对我的观点持保留态度。

简要背景

在进一步帮助你理解我来自哪里之前,我想简单介绍一下我的背景。

从学生时代起,我就喜欢做数学,并学会了基本编程。后来,我在孟买的 IIT 大学学习电子工程。毕业后,我加入了一家专门从事人工智能的咨询公司,在那里我为印度和欧洲的客户从事数据科学项目。

我必须说我仍处于学习的初级阶段。我有时确实会犯错误,我会想:这些年来我学到了什么?

我学得越多,就越发现自己懂得越少。-苏格拉底

观察/评论(未经验证的假设)

作为一名数据科学家,你不控制数据,你给它一个形状,以便它能更好地表达自己。

1.数据科学真的很有趣,如果…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学是一份难得的工作,你可以一起做所有很酷的事情:数学、编码和研究。一份你可以在早上看研究论文,下午写下算法,晚上编码的工作。真的很好玩!几天前我去母校参观时,一个大三学生问我:我该如何描述我的工作经历?,到哪瞬间嘴里就冒出了回答:

这就像做作业获得报酬一样!

但是这里有一个问题:你必须做“一些”数学、编码和研究。你既不能离开它,也不能深入它。在某些情况下,您可能不需要阅读任何研究论文,您可以直接使用代码库并开始实现。考虑到时间限制,你唯一有机会深入了解的部分就是数据准备(以及要做的演示,如果有的话)。

如果你是一个热爱编码的人,并且想尽可能多地去做,那么数学会把你的脑袋咬掉。你将没有机会展示你的忍者编码技能。作为一个热爱代码的数据科学家,你只有两个选择:要么数学征服你,要么你征服它。如果你是一个喜欢解决复杂问题的数学爱好者,那么数据准备和单调的编程会让你厌烦得要死。我喜欢的类比是:

想象一下,如果有人给你一个订书机,并把你送到一个堆满文件的房间去订购和装订,你会有什么感觉?这就是数据清理过程的感觉。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有时您可能会觉得,如果其他人可以做数据准备工作,您就可以围绕它构建模型,但不幸或幸运的是,它并不这样工作。

有人可能会说,你不喜欢的东西只占工作的一小部分,但事实是,它往往会对你的工作产生不成比例的影响(阅读帕累托原则)。

维持数据科学的方法是在编码和数学/研究之间找到正确的平衡。最重要的是,在保持专注于获得结果的同时,欣赏你工作的不同方面。

此外,数据科学是一个不断发展的领域,没有明确的成功指南,需要大量的努力工作,不断学习,最重要的是忘记(你不知道什么时候“最好”会变成“最好”)。

总结一下:

  • 优点:数据科学让你同时处理许多有趣的东西:代码、数学、研究,有时还包括演示
  • 反对:数据科学可能不允许你深入研究它的任何一个方面

2.数据科学更多的是“商业”而不是“科学”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“名字里有什么?”一位智者问道。两个答复呼应:

  • “没什么。”哲学家说
  • “一切。”说,有一手

该行业的数据科学家不同于在欧洲粒子物理研究所或 ISRO 工作的科学家。数据科学家“实际”做的是应用科学技术为企业创造价值。数据科学家的工作不仅仅是找到最佳解决方案,而是找到易于解释和销售的解决方案。

在数据科学中,当遇到相互竞争的假设时,业务逻辑往往胜过科学逻辑。

人工智能的知识,尤其是它的子领域机器学习,足以让你起步,但不足以让你领先。

要在数据科学项目中脱颖而出,“科学”是不够的,您还需要了解经济学和市场营销,以完成您的工作并为企业创造价值。

3.数据科学家的工作很有影响力,但就像任何“其他”工作一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为一名数据科学家,你有“潜力”产生巨大的“影响”,但作为一名教师、软件工程师、记者或销售人员,你也有这样的“潜力”。

毫无疑问,数据科学正在改变我们的世界,但作为一名数据科学家,你可以发挥关键作用和“影响力”的领域很少。

数据科学作为一个谜在互联网上流传,以“改变”世界,但并不总是正确的。

此外,“影响”一词非常主观,有许多重要方面,例如:

  • 它有/创造了多少货币价值
  • 谁会受益最大
  • 你在其中的角色是多么独特和重要
  • 它自我延续到什么程度

你想要的那种“影响”,一个互联网正在谈论的,以及企业能为你提供的机会,可以是非常不同的。

如果你是一个聪明而雄心勃勃的人,进入数据科学领域是为了产生“影响”,请确保你“适合”该领域,并且你对影响的定义与该业务可以为你提供的影响一致。

4.当今的经济支配着数据科学

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时至今日,数据科学家是一个“热门”工作,许多招聘人员定期联系你,看你是否愿意跳槽的情况并不少见。数据科学家在组织内受到很多尊重,薪酬丰厚。

如果金钱是你的主要动机,我不建议你成为一名数据科学家。

如果你只是为了钱而从事数据科学,请注意,同样的经济学迟早会让高薪消失。只有你对这个领域的兴趣才能让你坚持下去。

5.作为垫脚石的数据科学家的经验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为一名数据科学家,可以帮助你为数据驱动的世界奠定坚实的基础,并更现实地评估人工智能相关技术的局限性和力量。

即使你选择远离动手工作,数据科学家的经验对你未来的努力也是有价值的。其中一些是:

  • 学术研究(硕士/博士/博士后/独立):数据科学家的大量时间都花在做实验、阅读科学论文和与同事讨论想法上。所有这些活动都可以证明是做研究的宝贵资产。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 初创公司:当然,你可以在人工智能初创公司从事技术工作,或者在成为数据科学家后创办自己的公司。但是,你也可以在人工智能初创公司中担任非技术角色,如销售、商业规划或金融。您的知识可以帮助您更好地理解并向客户销售产品,估计项目成本和需求,最重要的是不要觉得自己是局外人。在获得数据科学家的经验后,你可能会有各种各样的原因想从事非技术岗位的工作,其中一个原因可能是,你需要查看任何成功的科技公司的高管团队中定期编写代码的人数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 政府和全球组织:政府越来越关注人工智能系统对社会的影响,以及如何最好地利用它们促进可持续发展。你可以利用你的数据科学家的经验来从事与人工智能政策相关的工作,这需要对人工智能有一个复杂的理解,以制定对社会最有利的政策和法规。

注意:这些是我的个人观点,你可能同意也可能不同意。我的意图不是写理想的数据科学家的工作是什么样子,或者“应该”如何进行数据科学,甚至不是描述谁是数据科学家。这些是我想分享的几个重要观点,是我在大学毕业后作为“数据科学家”工作一年时学到的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你的经历可能与我上面描述的非常不同。我鼓励你在下面的评论中分享你的经历,或者单独写下来。对于想要深入挖掘数据科学的人来说,这将是很大的帮助。

如果你喜欢这篇文章,请关注我,获取更多关于人工智能、哲学和经济学的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值