数据科学家最需要的技术技能
2018 年秋天,我分析了数据科学家最需要的技能和技术。那篇文章引起了人们的共鸣。它在 Medium 上获得了超过 11,000 次掌声,被翻译成多种语言,是 2018 年 11 月 KD Nuggets 上最受欢迎的故事。
一年多一点过去了。让我们看看有什么新的。🎉
到本文结束时,你会知道哪些技术越来越受雇主欢迎,哪些技术越来越不受欢迎。
在我的【2018 年原创文章中,我考察了对统计和沟通等通用技能的需求。我还研究了对 Python 和 r 等技术的需求。软件技术的变化比一般技能的需求快得多,因此我在这次更新的分析中只包括技术。
我搜索了简单雇佣、确实、怪物、 LinkedIn ,看看在美国的职位列表中,哪些关键词出现了“数据科学家”。这一次,我决定编写代码来抓取工作列表,而不是手动搜索。事实证明,这种努力对“简单雇佣”和“怪物”来说是卓有成效的。我能够使用请求和美汤 Python 库。你可以在我的 GitHub repo 看到 Jupyter 笔记本,上面有抓取和分析的代码。
事实证明,清除 LinkedIn 要困难得多。要查看职务列表的准确数量,需要进行身份验证。我决定使用 Selenium 进行无头浏览。2019 年 9 月,美国最高法院的一个案件判决 LinkedIn 败诉,允许 LinkedIn 的数据被抓取。尽管如此,在几次抓取尝试后,我还是无法进入我的账户。这个问题可能源于速率限制。😟更新:我现在回来了,但担心我会被锁在外面,如果我试图再次刮它。
不管怎样,微软拥有 LinkedIn,Randstad Holding 拥有 Monster,Recruit Holdings 拥有 Indeed 和 SimplyHired。
无论如何,LinkedIn 的数据可能没有提供从去年到今年的比较。今年夏天,我注意到 LinkedIn 的一些科技求职术语开始每周都有大幅波动。我假设他们可能已经通过使用自然语言处理来测试意图,试验他们的搜索结果算法。相比之下,其他三个搜索网站在这两年中出现的“数据科学家”职位列表数量相对相似。
由于这些原因,我在本文中对 2019 年和 2018 年的分析中排除了 LinkedIn。
对于每个求职网站,我计算了每个关键词出现在该网站上的数据科学家职位列表的百分比。然后,我计算了三个网站上每个关键词的平均百分比。
我手动调查新的搜索词,剔除那些看起来有希望的。2019 年,没有新词达到平均百分之五的上市率,这是我在下面的结果中使用的截止值。
让我们看看我们发现了什么!🔭
结果
至少有四种方法可以查看每个关键字的结果:
- 对于每一个工作站点,每年,将包含关键字的列表数除以包含 data scientist 的搜索项总数。然后取三个工作地点的平均值。这就是上面描述的过程。
- 做了上面的第 1 条,再来看看 2018 年到 2019 年的平均房源百分比变化。
- 做了上面的 1 号后,取 2018 年到 2019 年的房源平均百分比的百分比变化。
- 完成上面的第一步后,计算出该年每个关键词相对于其他关键词的排名。然后计算排名从一年到下一年的变化。
让我们用条形图来看看前三个选项。然后我会用数据展示一个表格,讨论结果。
这是 2019 年第一张图表,显示 Python 出现在近 75%的列表中。
这是上面第二张图表,显示了 2018 年至 2019 年期间上市平均百分比的得失。AWS 显示增加了 5 个百分点。它出现在 2019 年平均 19.4%的房源中,2018 年平均 14.6%的房源中。
这是上面第三个数字的图表,显示了每年的百分比变化。PyTorch 与 2018 年出现的平均上市百分比相比增长了 108.1%。
这些图表都是用精心制作的。如果你想学习如何使用 Plotly 制作交互式可视化,请查看我的指南。如果你想看交互式图表,可以查看我的 GitHub repo 中的 HTML 文件。用于抓取、分析和可视化的 Juptyer 笔记本也在那里。
以下是以上图表中的信息,仅以表格形式,按 2018 年至 2019 年房源平均百分比的百分比变化排序。
我知道这些不同的衡量标准可能会让人感到困惑,所以这里有一个指导,让你看看上面的图表。
- 2018 Avg 是从 2018 年 10 月 10 日起,SimplyHired,Indeed 和 Monster 的平均房源百分比。
- 2019 年平均与 2018 年平均相同,除了是 2019 年 12 月 4 日。该数据显示在上面三个图表的第一个中。
- 平均值变化为 2019 栏减去 2018 栏。如上面三个图表中的第二个所示。
- %变化是从 2018 到 2019 的百分比变化。它显示在上面三个图表的最后一个中。
- 2018 排名是 2018 年相对于其他关键词的排名。
- 2019 排名是 2019 年相对于其他关键词的排名。
- 排名变化是 2019 年到 2018 年排名的上升或下降。
外卖
在不到 14 个月的时间里,发生了一些相当大的变化!
获胜者
Python 还在上面。这是目前最常用的关键词。将近四分之三的清单上都有。Python 从 2018 年开始有了可观的增长。
SQL 为升序。平均分第二差点超过 R。如果趋势继续下去,它将很快成为第二。
最突出的深度学习框架越来越受欢迎。PyTorch 是所有关键词中增幅最大的。Keras 和 TensorFlow 也大幅上涨。Keras 和 PyTorch 的排名都上升了 4 位,TensorFlow 上升了 3 位。请注意,PyTorch 是从较低的平均值开始的— TensorFlow 的平均值仍然是 PyTorch 的两倍。
数据科学家越来越需要云平台技能。AWS 出现在近 20%的列表中,Azure出现在约 10%的列表中。Azure 在排名中上升了四位。
这些是最活跃的技术!🚀
失败者
R 整体平均降幅最大。鉴于来自其他调查的发现,这一发现并不令人惊讶。Python 显然已经取代 R 成为数据科学的首选语言。尽管如此,R 仍然非常受欢迎,出现在大约 55%的列表中。如果你知道 R,不要绝望,但如果你想要一个更受欢迎的技能,也可以考虑学习 Python。
许多阿帕奇产品人气下滑,包括小猪、蜂巢、 Hadoop 、 Spark 。Pig 在排名中下降了 5 位,比其他任何技术都多。Spark 和 Hadoop 仍然是普遍想要的技能,但我的发现显示出远离它们并转向其他大数据技术的趋势。
专有统计软件包 MATLAB 和 SAS 出现了大幅下滑。MATLAB 在排名中下降了四位,SAS 从最常见的第六位下降到第八位。与 2018 年的平均水平相比,这两种语言都出现了较大比例的下降。
建议
这个列表上有很多技术。😀你当然不需要知道他们所有人。神话中的数据科学家被称为独角兽是有原因的。😉
我建议,如果你刚开始从事数据科学,你应该专注于那些有需求且正在增长的技术。
专注。
开。
学习。
一个。
技术。在。
A.
时间。
(这是非常好的建议,尽管我并不总是遵循它。😁)
以下是我推荐的学习路径,按顺序排列:
- 学习 Python 进行通用编程。如果你是新手,可以看看我的书《难忘的 Python》。
- 学习熊猫进行数据操作。我相信一个招聘 Python 数据科学家的组织会希望应聘者了解 pandas 和 Scikit-learn 库。Scikit-learn 出现在名单上,熊猫刚好错过了截止日期。在学习熊猫的同时,你将学习一些 Matplotlib 和 NumPy 的可视化。我正在完成一本关于熊猫的书。订阅我的邮件列表,确保你不会错过。😀
- 使用 Scikit-learn 库学习机器学习。推荐 Müller & Guido 的《用 Python 学习机器 入门》这本书。
- 学习高效查询关系数据库的 SQL。我那本令人难忘的 SQL 书是为初学者设计的,在预发布版这里有售。
- 了解数据可视化的 Tableau。清单上的技术可能是学习起来最有趣和最快的。👍点击这里,查看我在 Medium 发表的一篇关于基础知识的六分钟介绍文章。
- 适应云平台。由于其市场份额,AWS 是一个很好的选择。微软 Azure 稳坐第二。尽管它不太受欢迎,但我还是偏爱谷歌云,因为我喜欢它的 UX 和机器学习功能。如果你想熟悉谷歌云的数据摄取、转换和存储选项,请参见我的关于成为谷歌云认证专业数据工程师的文章。
- 学习深度学习框架。TensorFlow 最受欢迎。Chollet 的书 用 Python 进行深度学习 是学习 Keras 和深度学习原理的绝佳资源。Keras 现在与 TensorFlow 紧密集成,所以这是一个很好的起点。PyTorch 也在迅速发展。关于不同深度学习框架的流行程度,请查看我的分析这里。
这是我的一般学习路径建议。根据你的需求定制它,或者忽略它,做你想做的事情!😁
包装
我希望这篇数据科学家最需要的技术指南对你有用。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。👍
我写关于 Python 、 SQL 、 Docker 、数据科学和其他技术主题的文章。如果你对此感兴趣,请关注我,在这里阅读更多。
快乐学习!💻😀
IMDB 电影评分的最大影响因素——第一部分:数据抓取
我一直是一个狂热的电影迷,我喜欢通过查看不同的电影评级/评论网站来探索伟大的电影,如 IMDb,烂番茄等。当我看那些顶级电影名单时,我总是想知道,影响电影成功的主要因素是什么,是预算、票房、语言还是电影类型?
一个偶然的机会,我和另外三个电影爱好者(也是数据爱好者)决定进行一项关于电影成功影响因素的统计研究。我们决定看 IMDb 的“有史以来最伟大的 500 部电影”;我们使用 movie 作为实例来收集与每个电影相关的各种数量,并随后对数据集进行统计分析。
我们的目标是:
1.使用数据抓取技术从 IMDb 电影列表中提取数据,并创建数据集。
2.使用描述性统计和多元回归建模来可视化和分析我们收集的数据。
IMDb top 500 movies
本文将关注这个研究项目的第一部分,即通过数据采集和清理创建数据集。
动机
创建这个数据集的目的是分析影响电影成功的主要因素,通过电影评级来衡量。我们的团队创建了这个数据库,并使用美丽的汤从 IMDb 在 2017 年创作的页面中获取了该数据集中的信息——有史以来最伟大的电影。
作文
实例和变量
数据集仅由作为实例类型的电影组成。总共有 500 个实例(电影)。我们的数据集包含网页中所有可能的实例。
对于每个实例,它由证书、持续时间、评级、流派、投票、总收入、国家、语言和预算组成。我们针对每个实例的分类变量由关于证书、流派、国家和语言的信息组成,这些信息是作为直接从网页上抓取的未处理文本收集的。每个实例的数字变量由持续时间、评分、投票、总收入和预算等信息组成,这些信息是作为未处理的文本和数值收集的,也是直接从网页上抓取的。没有标签或目标与每个实例相关联。
在我们所有的 500 个实例中,变量的某些数据点丢失了,比如一些电影的总收入和预算。对于我们可以在其他地方找到信息的实例,我们将信息添加到 csv 文件(我们的数据集)中。然而,对于没有毛额或预算信息的实例,我们删除了这些实例。我们的原始数据集还包括每个实例的 Metascore,但我们最终决定删除它,因为许多电影的 megascore 都丢失了。这些数据点丢失的原因是因为它们在原始的 IMDB 网站上不可用,因为一些电影非常古老,因此很难收集六十年前的数据。我们最初收集的数据在各个实例之间没有明确的联系,因为我们希望客观地分析这个数据集。
噪音
数据集中有一些噪声源。例如,一些外国电影的总收入和预算是以外币计算的,我们用当前的汇率将这些外币手动转换成美元。它可能不准确,因为汇率总是在波动,它可能不会准确地反映外国电影的确切总额和预算。还有一些老电影,很久以前就有票房和预算了。我们没有根据通货膨胀和折旧调整总额和预算。
包含来自 IMDb 的信息/数据
数据集是部分自包含的。对于证书、持续时间、评级、流派、投票和总值等变量,未处理的文本和值直接从网页中抓取,因此是独立的。其他三个变量——国家、语言和预算——不是独立的,是从 IMDb 网站上每个电影实例的网页中搜集来的。例如,为了找到关于第一部电影公民凯恩的国家、语言和预算的信息,我们访问了公民凯恩的网页来抓取未处理的文本和值。数据集不包含机密或攻击性的信息。
由于评级是众包意见,数据与人 T10 部分相关。收视率可以反映公众如何看待电影的质量。然而,有一些特定的人群更有可能评分。例如,真正喜欢或不喜欢这部特定电影或演员的人更有可能通过评级来表达他们的强烈意见。电影爱好者也更有可能评分,但更客观。
收集过程
我们所有的变量都可以作为原始文本和值在 IMDb 的各个页面上直接观察到。
the packages that our team has utilized for data collection
我们利用 Python 库 BeautifulSoup 从 IMDb 网页中抓取数据。如所提供的 Python 文件所示,对于每个变量,我们确定了表示为 html 的文本或值的模式。然后,我们通过识别网站上每个变量的标签和类别来获取每个变量的信息。
对于独立信息:
- 电影名:我们发现电影名在标签“h3”和类“lister-item-header”下。我们简单地使用 getText()获得文本数据,并使用正则表达式去掉多余的空格。
obtain Movie Names
- 证书:我们发现证书上的信息在标签“p”和类别“文本-静音文本-小”下我们发现每个电影实例需要的信息是每三个标签中的一个,所以我们将每三个标签中的 getText()值附加到我们的证书数组中。
Obtain Certificate
- 持续时间:我们发现我们需要的关于持续时间的信息在标签“span”和类“runtime”下。与 certificate 类似,为每个实例返回大量文本信息。我们需要这个数据集的持续时间总是这个标签和类下返回的第一个文本,所以我们只追加了索引 0 的信息。
Obtain Duration
- 评级:我们需要的信息在标签“div”和类“ipl-rating-star small”下的信息部分中在该部分中,等级值位于标签“span”和类别“ipl-rating-star__rating”下我们对循环使用 2 来获得评级值。
Obtain Rating
- 流派:获取关于流派的信息更加简单。所有的流派信息都在标签“跨度”和类别“流派”下我们简单地使用 get_text()来获取我们需要的文本。
Obtain Genre
- 投票:投票遵循与证书相似的模式。我们首先在标签“p”和类“text-muted text-small”下找到包含投票数据的信息部分。这一部分包括三种重复的信息类型,我们收集的信息在每三个组块中。我们循环遍历每三个块,并在标签“span”下寻找信息,这是我们想要的文本信息。
- 总量:总量信息也取自用于提取投票数据的“span”下的相同信息。总数据总是该信息块下的第五个数据值,所以我们简单地在数据块的索引 4 上使用 get("data-value ")提取数据。
Obtain Vote and Gross
外部链接数据:
对于下面的变量,我们必须遍历每个电影实例的网页。我们发现这些网页的模式由标题“https://www . IMDB . com/title/TT”+代表电影 ID 的数字组成。我们首先使用美汤 find_all 函数找到主主页中的所有链接。后来,我们发现了 IMDB 如何用一系列数字来标识每部电影的特定模式。然后我们使用带有正则表达式模式’/title/(tt\d{5,7})/'的 re.compile()函数来查找任何与该模式匹配的链接。然后我们过滤掉那些有用的链接并附加到一个新的列表中。在打印出新的列表后,我们发现每个电影名称实际上重复了两次。然后,我们使用 for 循环函数提取奇数位置的每个链接。
Find Movie IDs
在每个实例中使用 for 循环,我们首先在标签“div”和类“txt-block”下提取一个包含所需信息的文本框。在文本框中,为了防止每个实例的信息不匹配,我们使用 if-elif 结构为没有预算信息的电影附加 0,为没有语言信息的电影附加“No Specific”。我们认识到,每种信息类型都有一个说明该信息类型的标题。例如,标题“预算:”后面的预算数据,所以我们使用这些标题来识别没有这些信息的电影,方法是检查是否可以在每个实例中找到这些标题。
对于大多数具有所有可用信息的实例,我们使用 try-except 和 if 函数来收集以下信息:
- 国家:国家信息在标签“h4”下,所以我们使用 getText()提取标题“国家:”后的文本数据。
- 语言:与国家类似,语言信息也在标签“h4”下,所以我们也使用 getText()提取标题“语言”后的文本数据
- Budget: Budget 是相似的,但是不同的是,Budget 信息也在标签“h4”下,但是我们不能使用 getText(),因为 Budget 信息不是文本形式的。预算信息存储为数据值,所以我们使用了属性”。next_sibling”来提取标题“预算:”后的数据值。
Extract data from all 500 movies
注意:数据集不是来自大型数据集的样本 。我们团队 无偿参与了数据收集。没有进行 的伦理审查流程。当人们向 IMDB 发布他们的评级时,数据集只与人们相关。
预处理/清洁/贴标
为了在 csv 中创建数据集,我们为每个变量创建了空白数组,并将提取的数据附加到这些数组中,以便清理和创建最终的 csv 文件。以下是我们用来清理数据的一些方法:
- 正则表达式:对于电影名,我们使用了“\n.+\n(。+)\n.+\n "去掉字母前后和字母之间的空格。
- Rstrip:我们使用了属性 rstrip 来消除类型和预算字符串末尾的空白。
- 货币换算:在某些情况下,总值是以其他货币计算的。我们手动将这些货币转换成美元。
- 将字符串转换为浮点数或整数:对于持续时间,我们首先使用 get_text()来查找标签后的字符串。然后,我们将 duration 的类型字符串转换为 float。对于 Year,在通过 get_text()函数从网站中提取年之后,我们将年的类型从 string 转换为 int。对于 Vote,在通过 get_text()从网站中提取投票并用空格替换逗号(因为文本处于货币模式,包括美元符号和逗号)之后,我们将投票类型从 string 转换为 int。
- 修改缩放单位:我们将总量数据除以一百万,以更好地缩放评级。
数据集的使用
我们的数据集可以通过这个链接来访问。
该数据集已被用于一些分析电影的类似任务。有许多关于电影的数据分析,但其中一些已经过时,而且不全面。例如,许多数据分析侧重于特定年份的电影,或者专门针对流派和电影类型的分析。我们的数据集还可以用来分析人们对电影的口味在过去几年中如何变化,或者通过插入该电影在未来的其他事实来预测预期的总收入和预算。我们的数据集组成可能不会影响未来的用户,并且没有任何任务需要使用该数据集。
结论
在我们研究的第一部分,我们使用了数据抓取和正则表达式等技术来创建数据库。在第二部中,我们将分析从电影列表中获得的数据集,并进行进一步的统计建模和研究。
_
这是一个由康乃尔大学的四名学生组成的小组项目,他们是:尤里·戴、芹那·李、楼可欣、吴尚珍。
_
该数据集是为研究目的而创建的,没有相关的拨款或资助。
人工神经网络最直观和最简单的指南
揭开神经网络的神秘面纱
神经网络!深度学习!人工智能!
任何生活在 2019 年世界的人,都会不止一次听说过这些词。而且你大概也看过图像分类、计算机视觉、语音识别这些牛逼的作品。
所以你也有兴趣建立那些很酷的人工智能项目,但仍然不知道什么是人工神经网络?已经有数百篇文章以“人工神经网络反向传播初学者指南”或“人工神经网络简介”的名义解释了人工神经网络的概念它们真的已经很棒了,但是我发现对于那些不习惯数学表达的人来说可能还是很难。
这是神经网络的“最直观和最容易的指南”的第一个系列。本帖的全套如下:
- 人工神经网络最简单的指南
- 卷积神经网络最简单指南
- 递归神经网络最简单的指南
今天,我将用最少的数学来解释人工神经网络(ANN)的基础知识。这可能是有史以来最简单和最直观的解释,所以如果你讨厌数学或者对线性代数有困难,来看看吧!今天的关键词是正向传播、激活函数、反向传播、梯度下降和权重更新。我还会留下额外的资源,在你完成这篇文章后,这些资源可以成为你的下一步。听起来不错?让我们完成它!
那么究竟什么是神经网络呢?
你可能已经看过很多文章,从什么是神经元以及它们是如何构成的开始。是的,人工神经网络的‘神经’来源于人脑的神经元。1943 年,沃伦麦卡洛克和沃尔特皮茨首次尝试从人类神经网络中创建一个计算模型。他们想将大脑中的生物过程应用于数学算法,从那一点开始,神经研究领域分成了两个方向。今天人工智能中的神经网络与真正的认知科学领域走的路线有点不同。所以我宁愿把人工神经网络的框架看作某种结构或图表,而不是神经元。因为它和大脑的生物神经元没什么关系。
就从这张图开始吧。有起点(输入层)和终点(输出层)。假设这些是岛,我们从“输入层”岛到“输出层”岛。从开始到结束,我们可以采取不同的方式。每条路线都有不同的点。当我们接近目的地时,我们将汇总所有可能的分数,并确定哪个岛屿是我们要寻找的最佳岛屿。所以这就像是派出我们的探测船队去为我们的下一个假期寻找一个完美的岛屿。
这里一个有趣的部分是,当船队接近输出层时,他们又回到输入层。然后,我们重复这个过程,将它们发送到输出层,并回调到输入层。对于每次试验,每次试验都将有一个结果分数,我们将使用它们来计算预测的准确程度。就像我们在线性回归中对 RMSE 或梅所做的一样。
正向传播和权重
我上面拿的比喻就是神经网络做的事情。这次让我们进行一些真正的计算。这是一个更简化的神经网络图。
假设我们的输入数据是 5 和 2 。因此,我们将把这些值传递给输出层。先从 5 说起吧。正如你所看到的,有两种不同点的可能方式。如果 5 走上路线,则点为 10 。如果 5 走下路线,则为 -10 。那么输入值 2 会是什么样子呢?是的。 6 为上层路线, 2 为下层路线。因此,如果我们总结每种可能的情况,隐藏层的值将如下所示。
我们可以很容易地用同样的方法得到最终值。你大概知道这里发生了什么。这就是所谓的*。它从左向右移动。这里的要点是将左图层的结果作为下一个右图层的输入值。*
图中的圆圈被称为 节点 ,我将其描述为岛屿。我们使用的相乘值称为 权重 。权重是数据科学中非常常用的术语。我们用它来表示某些特征或样本的力量。因此,如果一个特征获得了很高的权重值,那么该特征将对结果产生很大的影响。通过给特征赋予不同的权重,我们可以训练我们的模型以获得更好的预测。这个词对你来说可能听起来很陌生,但我们已经将它们用于其他机器学习算法,如 lasso 回归或 boosting 算法,控制其他回归中的特征系数。
激活功能
还有一个新概念你可能到现在都没听过,就是激活功能。 激活功能 在提交结果值之前对值进行非线性改变。为什么我们需要它?如果我们只是使用线性计算而没有激活函数,就像我们上面所做的那样,我们不能给我们的模型任何’隐藏层效应’。它与其他回归模型没有太大的不同。为了“激活”神经网络的真正力量,我们需要应用一个“激活函数”原因激活函数有助于模型捕捉数据中的非线性。
有几个激活函数,我们需要根据问题选择一个合适的。方程可以在维基百科上找到,但是我想让你在方程前看到每个函数的图形。每个函数有什么样的形状或特征。因为这种了解会给你选择什么的线索。
sigmoid 函数 适用于二值分类的情况。它只转换 0 和 1 之间的值。输入值越高,越接近 1。输入值越小,越接近 0。 双曲正切函数 (正切双曲线)类似于 sigmoid 函数,但它的下限这次去了 -1 。由于 Tanh 将数据中心设置为 0,因此它比 sigmoid 函数更受欢迎。 阈值函数 和 ReLu (整流器)有一个确定的点,值从这个点开始变化。由于斜率的原因,ReLu 在大多数情况下都是有效的。但是为什么是斜坡呢?神经网络和斜率有什么关系?这就是梯度下降发挥作用的地方。
梯度下降
梯度下降就是寻找一个函数的最小值。我们假设成本函数有一个凸形,如下图所示。我们的目标是使价值尽可能小。
如果第一次试验在曲线的某处得到了误差,比如说点 1。我们将进行另一场审判。随着多次尝试和比较结果,该点将像图片一样下山,并最终接近最低点。(但不完全是 0)
我们移动该点的量由损失函数的斜率 dW 决定。并且 α 是我们必须选择的学习速率。所以权重更新的快慢取决于 dW 和 α 的乘积值。如果学习率过大或过小,模型将无法学习正确的权重值。因此,给梯度下降赋予正确的值和正则化是非常重要的。
这里有如此多的故事,但我不认为一次拥有它们是好的。对于愿意更深入研究的人,我将在最后留下其他高级资源。
反向传播和更新
*好了,让我们回到我们的故事,这些概念:激活函数和梯度下降。如果我们对我们的数据应用 reLu 激活函数,输出层将是 16 。如果实际值是 **20,*我们预测的误差将是 8 。
从现在开始,我们将向后移动并更改权重值。这就是所谓的。这一次我们从右到左,从输出层到输入层。倒退的意义是什么?它得到每一步的梯度。根据斜率,我们将更新权重,就像我们上面讨论的那样。**
**我们目前所经历的是从 ① 到 ④ 阶段。我们输入 x 值,通过前向传播得到预测值 ŷ 。有一个 b 术语叫做 **bias,但是我们这里只是把它叫做 0 。从阶段 ⑤ 开始,反向传播开始。如果你熟悉连锁规则,你会很容易理解这个概念。如果没有,也不用担心。就像咬上一个方程的尾巴。我想让你看看 dW₂ 的结局。它采用给定点的激活函数的误差和斜率与输入值的乘积。
就像正向传播通过隐藏层向输出层传递输入数据一样,反向传播从输出层获取错误,并通过隐藏层将其反向传播。并且在每一步中,权重值将被更新。
将整个过程重复几次,该模型找出最佳权重和具有最佳准确度的预测。当指标收敛到一定水平时,我们的模型就可以进行预测了。
摘要
让我们回顾一下到目前为止我们所讨论的内容。我们在 ANN 中讨论了 5 个步骤。
当通过隐藏层并更新每层的权重时,神经网络所做的是在内部表示数据的模式。其他深度学习算法都是从这个基本结构开始的。它们是添加了特殊技术的修改版本。因此,对于初学者来说,对神经网络的基本结构有一个坚实的理解应该是首要的事情。
这篇文章的重点是用最少的数学知识获得神经网络的基本直觉。这可能是一个有点简化的案例,但对初学者来说确实很有效。如果你准备好进入高级阶段,我建议你也阅读许多其他资源。这些是我的选择。
- Shirin Glander 写的这么棒的帖子。这涵盖了如何用正则化和优化的额外概念在 R 中构建一个 ANN:‘神经网络如何学习?’使用 H2O 深度学习算法的逐步解释
- 也许这是由 James Loy 撰写的关于数据科学的最受欢迎的文章。虽然已经有一段时间了,但是从头开始理解深度学习仍然很棒:https://towardsdatascience . com/how-to-build-your-own-neural-network-from-scratch-in-python-68998 a08e 4 F6
- 在 DataCamp 上获得神经网络直觉的优秀课程。甚至对于不懂线性代数和导数的人:https://www.datacamp.com/courses/deep-learning-in-python
感谢您的阅读,希望您对这篇文章感兴趣。我总是乐于交谈,所以请在下面留下评论,分享你的想法。我还每周在 LinkedIn 上发布其他有价值的 DS 资源,所以请关注我,联系我,伸出援手。我会回来讲另一个关于深度学习的激动人心的故事。在那之前,机器学习快乐!
卷积神经网络最直观和最简单的指南
揭开 CNN 的神秘面纱
计算机视觉是人工智能行业最热门的话题之一。它的力量是如此具有革命性,以至于现在我们几乎每天都在见证图像和视频处理服务的技术进步。此外,卷积神经网络不仅在视觉行业,而且在包括语音识别在内的自然语言处理方面也显示出巨大的潜力。
这是神经网络“最直观和最简单的指南”的第二个系列。本帖的全套如下:
- 人工神经网络最简单的指南
- 卷积神经网络最简单的指南(本帖)
- 递归神经网络最简单的指南
这篇文章假设你有神经网络的基础知识。如果你是第一次接触 ANN,看看之前的帖子会很有帮助。今天的关键词是卷积、滤镜、填充、池化和扁平化。CNN 的核心在于理解这些步骤的功能用法,以及数据的维度是如何变化的。你准备好成为图像的一个像素,开始一次神经网络之旅了吗?让我们完成它。
我们如何识别图像?
在进入卷积网络之前,让我们先谈谈我们自己。关于我们如何感知图像。这将有助于更容易理解 CNN。看看这张照片。你能看到什么?
是右脸的男人吗?还是一个正直视你的男人?如果你的注意力在鼻子或右边的轮廓,你可能会说是前者。如果你看到耳朵或左轮廓,你会说后者。你怎么想呢?让我们用另一个再试一次。
你看到了什么?只是一位在树后行走的女士?如果是这样的话,从你的窗户往后靠一点。或者在电脑后面走一步。你能看到吗?你注意到有一个前额发亮的男人了吗?
这两张图片向我们展示了我们是如何识别图像的。图像的轮廓和边缘会影响我们的感知。你可能没有注意到,但是我们的大脑捕捉图形中的模式来对物体进行分类。而 CNN 的看点就在于此。我们的机器将被训练通过像我们一样检测一些模式来对图像进行分类。例如,在“猫和狗”问题的情况下,图案将像耳朵、眼睛、颜色和毛发等的形状。
那么什么是卷积呢?
在卷积神经网络的术语中,我们将这些模式称为’‘、 滤波器 或’ 特征检测器。‘在我看来,最后一条是最直观的。因此,CNN 所做的就是使用相应的过滤器从图像数据中检测出想要的特征,并提取出重要的特征进行预测。
让我们先用一个简单的一维例子来理解卷积的概念。假设我们的火车图像是一个 1D 数组,数字如下。我们想要检测值从 0 变到 1 的点。可能有其他可能的过滤器,但我将使用一个简单的 [-1,1] 。
从左到右通过检测器,我们得到每次的卷积值。如你所见,我们可以用结果来捕捉想要的模式。那我们来试试二维的情况。
我想你现在知道卷积是什么了。根据定义,卷积是对两个对象进行的数学运算,产生的结果表示一个对象的形状如何被另一个对象修改。通过这种计算,我们可以从输入图像中检测出特定的特征,并得到包含该特征信息的结果。这叫做’ 特征图 . '如果我们用真实图像例子来看,结果如下所示。
现在我们可以考虑三维情况下的相同过程。但这很简单,因为你可以把它看成是二维数据的叠加。
你知道我们的图像数据由三种基本颜色组成:红色、绿色和蓝色。假设我们的图像有 7×7 像素的 RGB 数据。这意味着数据有 7x7x3 的容量。如果我们要用 4 个滤波器检测某些特征,则卷积计算针对每个滤波器进行。请注意结果的音量。高度、宽度和深度是如何变化的。如果我们使用更大尺寸的过滤器,高度和宽度会更大。过滤器的数量将决定结果的深度。
带填充和步幅的卷积
我们还可以对卷积应用其他技巧,其中之一就是填充。你可能已经注意到图像的像素不是用相同的数字处理的。角落的像素比中间的像素少。这意味着像素不会获得相同的权重。此外,如果我们只是继续应用卷积,我们可能会很快丢失数据。 填充 是我们可以用来解决这个问题的窍门。顾名思义,填充意味着在数据的边界给出额外的像素。
上图中的第一个例子展示了我们在上一节中所做的事情。输入图像具有 4x4 像素,过滤器具有 3x3 像素。没有填充,称为’ 有效。 '结果变成 2x2 像素数据(4–3+1 = 2)。我们可以看到输出数据缩小了。
这次来看第三个例子。有一层空白像素填充。输入图像有 5x5 像素,滤镜有 3x3 像素。所以结果得到 5x5 像素(5+1 * 2–3+1 = 5),与输入图像大小相同。我们称之为’ 同 . '我们甚至可以使结果大于输入数据,但这两种情况用得最多。
顺便问一下,滤镜是不是每次都要移动一个像素?当然不是。我们还可以让它在水平和垂直方向上一次移动两步或三步。这叫做’ 大步 . ’
那么我们可以在这里问一个问题。假设有一个 N x N 输入图像和 Nc` 数量的 f x f 滤镜。我们将使 p 的填充层数和移动的步幅值 S 的过滤器。请花点时间思考一下,总结一下我们到目前为止讨论的所有内容。结果的大小会是多少?
合并和扁平化
我们一直在走的是卷积层。而且实际上还有不同于卷积层的附加层: 汇集层 和 展平层 。先说第一个。合并就是合并的过程。所以基本上是为了减少数据量。
滑动一个窗口,我们只取左边盒子里的最大值。这是’ 最大汇集 . ‘我们也可以像右图一样取平均值。这是’ 平均池 . '我们还可以像在卷积层那样调整步幅。
但这不是在丢失有价值的数据吗?为什么我们要缩小尺寸?这可能会被视为在第一眼就丢失信息,但这比丢失更“有意义”的数据。通过去除数据中的一些噪声并仅提取重要的噪声,我们可以减少过拟合并加速计算。
扁平化和完全连接的层是我们在 CNN 的最后阶段所拥有的,这意味着你就快到了!太好了。对了,你没忘记我们为什么要做这些吧?我们在做什么?图像处理。为了什么?🙄🙄对“猫和狗”进行分类我们正在制作一个分类模型,这意味着这些经过处理的数据应该是模型的良好输入。它必须是一维线性向量的形式。矩形或立方体形状不能直接输入。这就是为什么我们需要扁平化和全连接层。
展平 是将数据转换成一维数组,输入到下一层。我们展平卷积层的输出,以创建单个长特征向量。并且它连接到最终的分类模型,该分类模型被称为 全连接 层。换句话说,我们将所有像素数据放在一行中,并与最后一层建立连接。再一次。最后一层是做什么用的?《猫和狗》的分类
一次
现在让我们看看我们在一个镜头中走过了什么。
添加多个卷积层和池层,将对图像进行特征提取处理。并且对于 softmax(对于多类情况)或 sigmoid(对于二进制情况)函数,将有完全连接的层指向该层。我没有提到 ReLu 激活步骤,但它与 ANN 中的激活步骤没有区别。
随着层次越来越深,模型处理的功能也变得越来越复杂。例如,在 ConvNet 的早期阶段,它查找定向线条模式,然后找到一些简单的图形。在深层阶段,它可以捕捉对象的特定形式,并最终能够检测输入图像的对象。
理解 CNN 就是理解图像数据是如何处理的。如何将图像转换成数据并提取特征进行预测。从这个基本结构出发,还有很多修改和融合的版本。ResNet、AlexNet、VGG-16 或 Inception Networks 就是其中的一些。想了解这些车型的更多信息?查看下面的附加资源!
- 从零开始学习卷积神经网络的综合教程 作者普尔基特·夏尔马:本帖为 Coursera 上深度学习专业化第 4 期课程的总结版。它不仅包括 CNN 的概念,还包括我提到的其他类型的基本 CNN。
- 图像分类器——猫🐱vs 狗🐶格雷格·苏尔马:关于卷积的精彩解释和使用 Colab 构建第一个 CNN 的温和指南。
- 用于图像处理的卷积神经网络 上 data camp:CNN 的精品课程。本课程涵盖了从卷积的概念到以非常直观的方式在 Keras 中构建模型。
你可能也会觉得这些系列很有趣!😍👍
- OpenCV 图像处理教程
OpenCV 和 Python 中的图像处理简介
towardsdatascience.com](/computer-vision-for-beginners-part-1-7cca775f58ef)
- 卷积神经网络的高级网络
从 VGG 开始,ResNet 和盗梦空间网络
towardsdatascience.com](/deep-dive-into-the-computer-vision-world-f35cd7349e16)
感谢您的阅读,希望您对这篇文章感兴趣。我总是乐于交谈,所以请在下面留下评论,分享你的想法。我还每周在 LinkedIn 上发布其他有价值的 DS 资源,请关注并联系我。我会回来讲另一个激动人心的故事。直到那时,快乐的深度学习!*
递归神经网络最直观和最简单的指南
揭开 RNN 的神秘面纱
一切都有过去。有时候过去定义了我们。我们走过了什么路,一路上做了什么选择。它们像我们的历史一样弯曲,告诉我们过去是什么样的人,我们将走向何方。这也适用于数据。他们可以拥有自己的过去,而那段历史可以用来预测接下来会发生什么,未来。正如我们有一个算命师,同样的数据,这被称为序列模型。
这是神经网络“最直观和最容易的指南”系列的第三部分。本帖全套如下:
- 安最简单的指南
- CNN 最简单的指南
- RNN 最简单的指南(本帖)
这篇文章假设你有神经网络的基础知识。如果你对这个完全陌生,请随意查看第一个系列。今天的关键词是序列,消失梯度,记忆和门。很难理解递归神经网络的结构和数学表达式。所以这篇文章将集中在最少数学量的基本直觉上,就像我们在上一篇文章中对 ANN 所做的那样。
这里有什么新鲜事?
如果你听说过序列模型,那么你可能会看到下面这种图表。这是很自然的,你不会一眼就看到图中描绘的概念。这是因为序列模型与前面讨论的其他神经网络有点不同。
所以在深入这个神经网络之前,我们为什么不谈谈序列模型在现实世界中的应用。这是因为它可以帮助我们通过从这些例子中得到提示来理解这个概念。那么,RNN 在哪里受到数据科学家的关注呢?
语音识别可以是一个典型的例子,我们可以找到最近的距离。Alexa、Siri 和 Google home。这些设备响应我们的呼叫,并可以完成一些简单的任务,如设置闹钟或向其他人发送消息。我们也可以通过谷歌翻译或聊天机器人找到它。
序列模型在遗传学领域也很流行。如果你有一点 DNA 方面的背景知识,理解这里的序列的含义会容易得多。在人类分子中, DNA (脱氧核糖核酸)由 4 种不同类型的核苷酸链组成: A 、 C 、 G 和 T 。遗传信息存在于核苷酸的连续组合中。因此,这些序列对于所有种类的生物都是必需的,并且序列模型在预测基因的未覆盖部分中具有很高的使用价值。
时间序列分析呢?这种神经网络还能够预测股票市场价格或温度数据的下一个值。例如,我们收集 30 天的温度数据,并使用这一系列数据来预测 31 日的温度。
你注意到这些例子的共同特征了吗?言语、DNA 链和时间序列。答案是“循序渐进”数据不是静态的或不连续的,而是前赴后继的。但是当涉及到数据时,我们所说的连续或连续是什么意思呢?
让我们回忆一下我们对像 ANN 这样的其他模型所做的工作。我们有样本数据,并通过从左到右的层传递它们。这意味着我们将一次输入数据,然后它们将向输出层传输。它是前馈传播,只有一个流动方向。
然而,在 RNN 的情况下,数据不是同时输入的。如右图所示,我们先输入 X1 ,然后输入 X2 得到 X1 的计算结果。同理, X3 用 X2 计算阶段的结果计算。
因此当谈到数据时,‘时序’意味着我们在数据之间有一个时间顺序。当它是安的时候,在 X1,X2 和 X3 没有任何秩序的概念。我们只是立刻输入它们。然而,在 RNN 的情况下,它们是在不同的时间输入的。因此,如果我们改变顺序,它会变得明显不同。一句话就会失去意义。当涉及到 DNA 时,这种变化可能会产生…一种突变体。
因此,RNN 的吸引力在于我们可以将数据与之前的数据联系起来。这意味着模型开始关心过去和未来。由于递归单元保存过去的值,我们可以称之为内存。我们现在能够考虑数据中“上下文”的真正含义。
递归神经网络的结构
现在有了这个基本的直觉,让我们更深入地了解 RNN 的结构。这是一个简单的 RNN,只有一个浅层。我们的模型现在将取两个值:在时间 t 的 X 输入值和来自前一个单元的输出值 A (在时间 t-1 )。
请看一下方程式 ① 。和简单人工神经网络一样,存在权重和偏差。只是多加了一个输入值 A0 。细胞有两种不同的输出。下一个单元的 A1 的输出( ② )和单元电池的最终输出Y1(③)。不要因为这些下标而紧张。它们只是表明重量属于什么值。现在我们来看下一个单元。
简单又酷吧?现在我们可以预测未来。如果是关于股市,我们可以预测一家公司的股价。然后我们猜测,如果有一个大的数据集,比如 10 年前的历史数据,我们会得到更好的准确性。所以数据越长,结果越好,对吗?但事实是,这个模型并不像我们预期的那样理想。
真正的事情从这里开始
回忆过去的想法太棒了。但是反向传播有一个关键问题。反向传播是向后更新每一层的权重的步骤。为了更新权重,我们获得成本函数的梯度,并使用链式规则在给定的层上不断乘以梯度。RNN 的实际反向传播比这张图要复杂一些,但为了简单起见,我们跳过它们。(例如,真实的反向传播不仅采用最终输出 Yt 而且采用成本函数使用的所有其他输出 Y 。)
想象一下当梯度大于 1 时。更新后的值变得如此之大,以至于无法用于优化。这叫做 爆炸渐变 。但这并不是一个严重的问题,因为我们可以固定梯度不能超过的范围。真正的问题发生在梯度小于 1 的时候。如果我们一直乘以小于 1 的值,结果会变得越来越小。经过一些步骤后,结果不会有明显的差异,并且它不能在权重上进行任何更新。它叫做 消失渐变。 表示反向传播效应不能达到层的早期。
这就是为什么人们说 RNN 记性不好。如果输入值的长度变得更长,我们就不能期待实际的优化。这是一个非常关键的问题,因为神经网络的能力来自于更新权重。还有其他方法可以解决这个问题吗?
让我们忘掉它吧!
说实话,记性不好的人很难得到好的回忆。我们都知道。太多的东西我们记不住。我们的模型也是如此。与其拖着所有的过去,也许选择性的回忆会更好。这就像只选择了重要的信息,而忘记了其他的。拥有所有这些过去的值会导致渐变消失。因此我们给简单 RNN 增加一个步骤,称为。**
左图显示了 RNN 晶胞内的计算。这里没有什么新东西。它只是显示了它接受两个输入值,并在计算后返回两个输出值。在右边,你可以看到盒子里有一个小小的变化。绿色盒子。这是什么?这是一个 门控制器 。这个盒子决定了我们是否应该记住。
我们将像对 RNN 那样计算 tanh 激活( ① ),但这不会马上用到前面。就像一个候选人。在这里,我们还将获得门的新值( ② )。因为它采用 sigmoid 函数,所以输出值总是在 0 到 1 之间。因此,通过将它乘以 ① 值,我们将决定是否使用它。当 0 的时候, 没有用 或者 没有更新。 (本例使用以前的值)当 1 , 使用 或 更新。“这就像打开和关闭一扇大门。
大门和大门
现在我们终于来到了 LSTM, 长短期记忆网络 。实际上,LSTM 比格鲁什更早被提出。但是我首先带来了 GRUs,因为 LSTM 的结构比 GRUs 的结构更复杂,多了两个门。此外,这里还会有一个新概念,叫做“ 细胞状态 ”但是你已经习惯了这个概念。它将包含内存的值与隐藏状态值 A 放在一起。让我们详细看看 LSTM 有什么。中间的蓝框和绿框( 输入门 )与 GRUs 相同。这里有两个额外的绿色方框: 遗忘门 和 输出门 。
计算也是一样的,所以我们将从双曲正切函数( ① )获得输出,从 sigmoid 函数( ② )获得输入门值。但是这次乘法步骤有点不同。除了只取输入门的结果,我们还考虑来自左边的遗忘门值。
让我们看看右边第三行的等式。我们有一个遗忘门,它将用于更新单元状态值,如第 4 行所示。最后还有一个门,输出门。如第 6 行所示,我们通过将时间 t 处的 C 的输出门值和 tanh 激活值相乘,得到时间 t 处的 A 值。
有了这三个额外的门,LSTM 可以有更强的记忆能力。这些都是关于控制它应该记住的部分或数量。它是如此健壮和有效,以至于在序列模型中非常流行。那么我们能说它在所有情况下都比 GRUs 好吗?正如我们一直说的,没有灵丹妙药,GRUs 也有自己的优势。它的结构比 LSTM 简单,所以有时用 GRUs 做一个大模型是合适的。
结论
到目前为止,我们讨论的是具有一个浅层的序列模型。那么当我们增加更多的层时会是什么样呢?如果我们说在 ANN 或 CNN 中增加更多层是水平的,那么在 RNN 是垂直的。但是序列模型已经是一个有一两层的大模型了,如果我们在其上再增加几层,它可能会过度拟合。因此,需要应用归一化技术,如丢弃或批量归一化。
这篇文章主要是关于理解从简单的 RNN 到 LSTM 的每个模型的结构。我们走过的数学表达式乍一看可能很复杂。然而,在您熟悉了模型的整体结构之后,就很容易理解了。因为数学只是一个数字表达式,以清晰有效的方式表达概念。如果你能看到这些数字背后的含义,那么数学也会变得有趣。
我还一如既往地带来了其他额外的资源。当您准备好进一步使用序列模型时,我强烈建议您也阅读这些文章。
- 了解 LSTM 网络 克里斯托弗·奥拉:这样一篇关于了解 RNN 和 LSTM 结构的伟大文章。Colah 的博客很受欢迎。你可以看到许多其他的资料都有这个博客作为参考。
- 学习序列建模的必读教程bypul kit Sharma:我在之前的博客里已经贴出了他的作品,这是针对序列模型的系列。如果你还没有看过,强烈推荐你去看看其他的系列。
- 递归神经网络示例在 Python 中由 Will Koehrsen 撰写:来自 Medium 顶级作家的温和指导。这将是用 Python 构建第一个 RNN 的良好开端。
感谢您的阅读,希望您对这篇文章感兴趣。如果有什么需要改正的地方,请和我们分享你的见解。我总是乐于交谈,所以请在下面留下评论,分享你的想法。下次我会带着另一个令人兴奋的项目回来。在那之前,机器学习快乐!
2019 年数据科学求职者最容易忽视的技能
过去一年,数据科学职位的空缺增加了 56%。对有才能的劳动力有巨大的需求来填补这些角色。论坛上充斥着关于行业最佳语言或框架的话题。然而,没有一种算法、语言或洞察力能让大多数人被雇佣。
能让你找到工作的是良好的技术背景和专业知识。
photo credit: David Kovalenko
什么是主题领域专业知识?
在我看来,主题领域的专业知识分为两类:行业特定知识和数据科学特定知识。如果你能掌握其中一项或两项,你就有可能在就业市场上获得成功。
行业专长 —对你所应聘职位工作领域的掌握程度。对于我在体育分析方面的工作,我发现这特别有用。如果申请人有丰富的体育专业知识,他们更能集思广益,发现工作中的常识性错误,并能借鉴自己或其他人在该领域已经完成的其他研究。我还发现,这些候选人有独特的个人项目,可以为我的客户提供即时价值。从某种意义上说,雇佣他们也是购买他们现有的作品。显然,按照他们的标准,这也是可以接受的。
数据科学专业知识 —深入了解一种公司希望扩展其能力的分析类型。对许多公司来说,雇佣某个领域的专家比培训某人学习一套技能要容易得多。如果你在 NLP 或计算机视觉项目中投入了大量的工作,这可能会让你在需要这些特定技能的角色中脱颖而出。就我个人而言,我已经发展了更广泛的技能,但我相信如果我真的在一个领域磨练,我肯定会提高我的机会。
为什么选择专业领域?
很多时候,公司都在寻找数据科学家来担任特定的角色或处理特定的任务。对于许多企业来说,线索评分模型或图像分类算法包含了他们所做的大部分数据科学工作。招聘经理将寻找具有特定数据科学技能专业知识的人来填补这一职位。
另一方面,如果你有行业领域的专业知识,你对招聘多面手的公司会更有吸引力。如果您已经熟悉该行业的基础知识,您可以将大部分时间花在各种不同的数据科学项目上。你也可以在项目构思、计划和优先级排序方面提供帮助。
如果你拥有数据科学技能和行业专业化的一些元素,你会给自己带来巨大的灵活性。你可以在一个公司里做一个大项目,也可以通过做很多项目来利用你的知识广度。
如何获得学科专业知识?
像任何技能一样,学科领域的专业知识是可以获得的。我个人认为,你不必从以前的工作中直接获得这些技能。我强烈建议你在自己的空闲时间从事一些项目来发展这两种类型的专业知识。
我总是向 kaggle.com 或 reddit 推荐这些项目的数据和背景。这些地方有很棒的社区,在那里你可以与能帮助你积累知识的人接触。
在这些领域寻找导师也是可行的。您可以轻松地用数据科学技能换取行业专业知识。对于导师,我总是相信要有所贡献。例如,如果我有兴趣学习更多关于医疗保健的知识,我会通过我的关系网找到某个在那个领域很先进的人。我会就技术如何影响他们的工作提出自己的见解,以换取他们的建议和知识。我建议尽量不要把这变成交易,但还是要明确你能为他们提供一些价值。
就专业技术而言,我相信有大量高质量的教育材料。
但是如果我被鸽子洞了怎么办?
专业化的现实是,你可能会在一个特定的领域或单一的行业工作。有些人可能认为这是一件坏事。我认为,学习如何专业化可以让你更容易专注于未来的其他事情。你会发现每个领域都有一定程度的复杂性。
如果你想转换到一个新的职位,你可以重新开始同样的过程。有许多人专门从事多种不同的事情。比如我的背景就是从高尔夫行业开始的。我也能够对预测模型和蒙特卡洛模拟有一个坚实的理解。有了这种理解,我最终能够学习如何将我的工作应用到其他运动中。
当你专业化时,你就资本化了。
数据科学中最强大的想法
从有用的模式中分离出不必要信息的快速解决方案
如果你上一门统计学入门课程,你会学到一个 T2 数据点 T3 可以用来 T4 激发灵感或者测试一个理论 T5,但不能两者兼而有之。为什么不呢?
人类有点太擅长在一切事物中寻找模式了。真图案,假图案,应有尽有。我们是那种在薯片中找到猫王脸的生物。如果你想将模式等同于洞察力,请记住有三种数据模式:
- 存在于您的数据集中 及其以外的模式/事实。
- 仅存在于数据集中的模式/事实。
- 只存在于你想象中的模式/事实()。
A data pattern can exist (1) in the entire population of interest, (2) only in the sample, or (3) only in your head. Image: source.
哪些对你有用?这取决于你的目标。
灵感
如果你追求纯粹的灵感,它们都很棒。即使是古怪的阿波菲斯——来自术语 阿波菲斯尼亚 (人类倾向于错误地感知不相关事物之间的联系和意义)——也能让你的创造力源源不断。创造力没有正确的答案,所以你需要做的就是看看你的数据,并从中获得乐趣。作为一个额外的奖励,试着不要在这个过程中浪费太多的时间(你的或者你的利益相关者的)。
事实
当你的政府想向你征税时,它根本不在乎你这一年的财务数据之外的模式。有一个基于事实的决定要做,关于你欠了多少,做决定的方法是分析去年的数据。换句话说,看看数据,应用一个公式。我们需要的是纯粹的描述性分析,这种分析只局限于手头的数据。前两种模式都有利于这一点。
坚持手头数据的描述性分析。
(我从未放错过我的财务记录,但我想,如果我丢失这些记录后的反应是用我在研究生院学到的数据估算技术来统计纳税,美国政府会不高兴的。)
不确定情况下的决策
有时候,你所拥有的事实与你 希望 你拥有的事实并不相同。当你没有你想要做的决定所需要的所有信息时,你需要在不确定性中导航,努力选择一个合理的行动方案。
这就是统计学——在不确定的情况下改变想法的科学——的全部意义。这个游戏是要像伊卡洛斯一样超越你所知道的…而不是以啪啪声结束。
这是数据科学核心的巨大挑战:如何不因为查看数据而变得“信息不足”。
在你离开那个悬崖之前,你最好希望你在对现实的局部一瞥中发现的模式确实能超越它。换句话说,模式必须概括对你有用。
Source: xkcd
在这三种模式中,如果你在不确定的情况下做决定,那么只有第一种模式是安全的。不幸的是,你还会在你的数据中发现其他类型的模式——这是数据科学核心的巨大挑战:如何不因为查看数据而导致信息不足。
一般化
如果你认为从数据中提取无用的模式纯粹是人类的特权,那你就大错特错了!如果你不小心的话,机器会自动为你做同样的蠢事。
人工智能的全部意义在于正确地概括新的情况。
机器学习是一种做出许多类似决策的方法,包括从算法上发现数据中的模式,并使用这些模式对全新的数据做出正确的反应。在 ML/AI 行话中, 泛化 指的是你的模型的能力,能够很好地处理它之前没有见过的数据。基于模式的食谱只在旧的东西上成功有什么好处?你可以使用一个查找表来实现。ML/AI 的整个要点是正确地概括出新的情况。
这就是为什么我们列表中的第一种模式是唯一一种对机器学习有益的模式。那是 信号 的部分,其余的只是 噪音 (只存在于你的旧数据中的转移注意力的东西,让你无法得出一个可概括的模型)。
信号:存在于你的数据集中的模式和超出它的*。*
噪声:只存在于数据集中的模式。
事实上,获得一个处理旧噪声而不是新数据的解决方案就是机器学习中术语 过拟合 的意思。(我们用你最喜欢咒骂的语气说出这个词。)几乎我们在机器学习中所做的一切都是为了避免过度拟合。
那么,这是哪种模式呢?
假设你(或者你的机器)从你的数据中抽取出来的模式存在于你的想象之外,是哪一种?是存在于你的兴趣人群 ( “信号”)中的真实现象,还是你当前数据集的一种特质(“噪音”)。如何判断在研究数据集的过程中发现了哪种模式?
如果你已经查看了你所有的可用数据,你不能。你被困住了,没有办法知道你的模式是否存在于其他地方。统计假设检验的全部修辞在于惊喜,假装对你已经知道的数据中的模式感到惊讶是没有品位的。(本质上就是 p 黑。)
这有点像在云中看到一个兔子形状,然后测试是否所有的云看起来都像兔子…使用同一个云。我希望你意识到你需要一些新的云来测试你的理论。
你用来启发一个理论或问题的任何数据点都不能用来测试同样的理论。
如果你知道你只能访问一张云的图片,你会怎么做?在扫帚间沉思,就是这样。在你查看数据之前 提出你的问题。
数学从来不是基本常识的对立面。
我们正被引向一个最不愉快的结论。如果你在寻求灵感的过程中用完了数据集,你就不能再用它来严格测试它所启发的理论(不管你拿出多少数学魔术柔术,因为数学从来都不是基本常识的对立面)。
艰难的选择
这意味着你必须做出选择!如果你只有一个数据集,你会被迫问自己:“我是不是在壁橱里沉思,建立我所有的统计测试假设,然后小心翼翼地采取严格的方法,这样我就可以认真对待自己了?或者我只是从数据中挖掘灵感,但同意我可能在骗自己,并记得使用“我觉得”或“这激发了”或“我不确定”这样的短语?艰难的选择!**
或者有没有一种鱼和熊掌兼得的方法?这里的问题是,你只有一个数据集,而你需要不止一个数据集。如果你有很多数据,我有一个方法可以帮你。吹。你的。介意。
一个奇怪的把戏
要赢得数据科学,只需通过拆分数据将一个数据集(至少)变成两个。然后用一个做启发,一个做严格测试。如果最初启发你的模式也存在于没有机会影响你的观点的数据中,那么这是一个更有希望的投票,支持模式是你从猫砂盒中挖出数据的一般东西。
如果两个数据集中存在相同的现象,也许这是一个普遍现象,无论这些数据集来自哪里,它都存在。
西德妮。
如果一个未经审视的人生不值得活下去,那么这里有四个词值得你去活下去:拆分你该死的数据。
如果每个人都把自己的数据分开,世界会变得更好。对于更好的问题(来自分析),我们会有更好的答案(来自统计)。人们不把数据分割视为强制性习惯的唯一原因是在上个世纪这是很少有人能负担得起的奢侈品;数据集如此之小,以至于如果你试图分割它们,那么可能什么都没有了。(点击了解更多关于数据科学的历史。)
Split your data into an exploratory dataset that everyone can dredge for inspiration and a test dataset that will later be used by experts for rigorous confirmation of any “insights” found during the exploratory phase.
今天,一些项目仍然存在这个问题,特别是在医学研究领域(我曾经从事神经科学,所以我非常尊重处理小数据集的困难),但是你们中的许多人拥有如此多的数据,以至于你需要雇用工程师来移动它们……你的借口是什么?!不要吝啬,拆分你的数据。**
如果你没有拆分数据的习惯,你可能会停留在 20 世纪。
如果你有大量的数据,但你看到的是未分割的数据集,那么你所在的地方就受到了老式观点的困扰。每个人都习惯于陈旧的思想,忘记了与时俱进。
机器学习是数据分裂的产物
归根结底,这里的想法很简单。使用一个数据集来形成一个理论,发号施令,然后表演魔术,证明你知道你在一个全新的数据集中谈论什么。
数据分割是建立更健康的数据文化的最简单快捷的方法。
这就是你如何在统计中保持安全,也是你如何避免在 ML/AI 中因过度适应而被生吞活剥。其实机器学习的历史就是一部数据拆分的历史。(我在 中解释为什么机器学习是自动化灵感 )。)
如何在数据科学中使用最佳理念
为了利用数据科学中最好的想法,你所要做的就是确保你把一些测试数据放在别人窥探不到的地方,然后让你的分析师去研究剩下的数据。
要赢得数据科学,只需通过拆分数据将一个数据集(至少)变成两个。
当你认为他们给你带来了可操作的“洞察力”,超越了他们探索的信息,使用你的秘密测试数据来检查他们的结论。就这么简单!
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格联系。
最被低估的 Python 包
令人敬畏的图书馆的精选列表
source: delphinmedia, via pixabay (CC0)
在我作为 Python 用户的经历中,我遇到过许多不同的包和精选列表。有些在我的书签里,比如伟大的awesome-python-data-science精选列表,或者 awesome-python 精选列表。如果你不认识他们,尽快去看看。
在这篇文章中,我想向你展示一些别的东西。这些是深夜浏览 GitHub/Reddit 的结果,以及同事们分享的很酷的东西。
其中一些包非常独特,另一些只是用起来很有趣,在我共事过的数据科学家/统计学家中,它们是真正的失败者。
开始吧!
杂项(奇怪的)
- 叩叩 : 从 Python 向移动设备或桌面或电子邮件发送通知。
- tqdm:Python 和 CLI 的可扩展进度条,内置熊猫支持。
- Colorama:简单的跨平台彩色终端文本。
- 熊猫日志: 提供关于熊猫基本操作的反馈。非常适合调试长管道链。
- 熊猫-风味: 扩展熊猫 DataFrame/Series 的简单方法。
- More-Itertools:顾名思义,它增加了类似 ITER tools 的附加功能。
- streamlit:为你的机器学习项目创建应用的简单方法。
- SQL model:SQL model,Python 中的 SQL 数据库,为简单性、兼容性、健壮性而设计。
数据清理和操作
- ftfy: 事后修复了 Unicode 文本中的 mojibake 等小故障。
- 看门人: 很多很酷的清理数据的功能。
- Optimus:另一个用于数据清理的包。
- 远大前程: 一个伟大的软件包,用来检查你的数据是否符合你的期望。
数据探索和建模
- P 和 as-profile : 创建一个 HTML 报告,其中包含熊猫数据帧的所有统计数据。
- **dabl**:允许使用可视化和预处理进行数据探索。
- pydqc: 允许比较两个数据集之间的统计数据。
- 熊猫-摘要: 对熊猫数据帧描述功能的扩展。
- **pivot table-js**:jupyter 笔记本内熊猫的拖放功能。
数据结构
- 边界 : 不管数据大小如何,都使用有限(有界)内存量的高效计数器。
- **python-bloomfilter**:用 Python 实现的可扩展 Bloom Filter。
- datasketch:给你像 LSH、加权 MinHash、HyperLogLog 等概率数据结构。
- 范围:Python 的连续范围、范围集和范围字典数据结构
性能检查和优化
- Py-spy:Python 程序的采样分析器。
- py perf:运行 Python 基准的工具包。
- snakeviz:一个浏览器内 Python 概要文件查看器,对木星笔记本有很大的支持。
- **Cachier**:Python 函数的持久、无陈旧、本地、跨机缓存。
- **Faiss**:一个高效的相似性搜索和密集向量聚类的库。
- **mypyc**:一个使用类型提示将 Python 代码编译成 C 扩展的库。
- 不规则三角形 : 一款面向 Python 的高性能 CPU、GPU 和内存分析器。
我希望你找到了对你的工作有用或有趣的东西。我以后会扩充帖子,敬请关注新的更新!
最被低估的 R 包:2020 版
令人敬畏的和不太为人所知的 R 库的精选列表
Photo by Safar Safarov on Unsplash
在我作为 R 用户的经历中,我遇到过很多不同的包和管理列表。有些在我的书签里,比如伟大的 awesome-R 榜单,或者由 R 工作室策划的月度“最佳”榜单。如果你不认识他们,尽快去看看。
在这篇文章中,我想向你展示一些别的东西。这些是深夜浏览 GitHub/Reddit 的结果,以及同事们分享的很酷的东西。
其中一些包非常独特,另一些只是用起来很有趣,在我共事过的数据科学家/统计学家中,它们是真正的失败者。
开始吧!
💥杂项(奇怪的)💥
- BRRR 和 beepr**😗*你有没有想过知道——并庆祝——你的模拟最终在 R?你有没有因为完成了一点棘手的代码而感到骄傲,以至于你希望 Flavor Flav 大喊“耶啊啊啊,boi!!"一旦成功完成?
- calendR:准备打印用 ggplot2 制作的月历和年历。
- 检查点: 可以安装过去某个特定日期的包版本,就好像你有一台 CRAN time machine 一样。
- DataEditR:DataEditR 是一个轻量级的包,用于交互式地查看、输入或编辑 r 中的数据。
- 德雷克: It 分析你的工作流,用最新的结果跳过步骤,用可选的分布式计算协调其余的步骤。最后,
drake
提供了你的结果与底层代码和数据相匹配的证据,这增加了你信任你的研究的能力 - 流程: 将函数、表达式或脚本的逻辑可视化为流程图,方便调试。
From “flow” Github. Look at this beauty.
- generative art:美丽的数学启发的抽象艺术
- here:here 包的目的是实现简单的文件引用。与使用
setwd()
不同,它很脆弱并且依赖于你组织文件的方式,这里使用一个项目的顶层目录来容易地构建文件的路径。 - installer:它允许用户只需一个命令就可以更新 R 和所有已安装的软件包。
- mailR: 从 r 内部发送邮件。
- plumber: 一个 R 包,把你现有的 R 代码转换成 web API。
- pushoverr: 从 R 向移动设备或桌面发送推送通知。
- statcheck:
statcheck
是一个免费的开源 R 包,可以用来从文章中自动提取统计零假设显著性测试(NHST)结果,并根据报告的测试统计和自由度重新计算 p 值,以检测可能的不一致。 - 用途这: 用途这是一个工作流包:它自动化了项目设置和开发过程中出现的重复性任务,包括 R 包和非包项目。
✨Data 可视化✨
- bayesplot: 一个 R 包,提供了一个扩展的绘图函数库,供拟合贝叶斯模型(通常用 MCMC)后使用。bayesplot 创建的地块是 ggplot 对象,这意味着在创建地块后,可以使用 ggplot2 包中的各种函数对其进行进一步自定义。
- cowplot: 对齐图形到网格的牛逼。
- Esquisse: 基本上是为 ggplot 创建一个 drag & drop GUI,所以你不用编写大部分的剧情。
- hrbr Themes:’ gg plot 2 '的附加主题和主题组件。
- gganatogram: 使用 ggplot2 创建 anatogram。是啊,真的。
- gg annotate:gg annotate 是一个点击式工具,可以帮助您将注释准确地放置在您想要的位置。
- golem:这个包使得创建现成的闪亮应用程序变得轻而易举。
- 拼拼凑凑: 拼拼凑凑的目的是让把独立的 ggplots 组合成同一个图形变得简单得可笑。
- ray shader:不烂的 3D 剧情。
From “Rayshader” Github.
- 见: 简易黑板背景为 ggplots。
- sjplots: 用于数据可视化的绘图和表格输出函数的集合。
- tmap:r 中惊人的专题地图
- vapor wave:A E S T H E T I C S ’ time。美化你的情节,就像它仍然是 80 年代。
- visreg: 根据预测变量 x 如何影响结果 y 来显示拟合模型的结果
- wesanderson: 用于 R 的韦斯·安德森调色板
🛁数据清理和操作🛁
- 看门人: 很多很酷的清理数据的功能,去 github 链接上查查他们的例子吧。
- sqldf: 使用 SQL 语法进行数据管理。如果您需要加载超过您的机器所能处理的数据,那么就应该这样做。您可以对其进行过滤,并只加载选定内容。
- **naniar**:所有你需要的缺失数据。
- Tidylog: 提供关于基本 dplyr 操作的反馈。非常适合长管道链。
- validate: 一个伟大的软件包,检查您的数据是否符合预定义的规则(由同一作者与 errorlocate 一起使用)。同样是同一作者,去查一下演绎和 dcmodify 。
💻数据探索和建模💻
- data explorer:用于探索性分析的强大功能。
- dlookr: 几个数据质量诊断和 EDA 的定制函数,形式简洁。
- 达摩:GLMMs 残差诊断的一个有趣的 R 包。
- final fit:
finalfit
包提供了在 r 中建模时帮助您快速创建优雅的最终结果表格和绘图的功能。这些可以很容易地导出为 Word 文档、pdf 或 html 文件。下面的例子。
**explanatory = c("age.factor", "sex.factor",
"obstruct.factor", "perfor.factor")
dependent = 'mort_5yr'
colon_s %>%
finalfit(dependent, explanatory, metrics=TRUE) -> t2
knitr::kable(t2[[1]], row.names=FALSE, align=c("l", "l", "r", "r", "r", "r"))
knitr::kable(t2[[2]], row.names=FALSE, col.names="")**
Super clean, publication ready table. From “finalfit” Github.
- LongCatEDA: 用于可视化分类变量的纵向变化。
- 【jtools:这个包由作者(Jacob)创建的一系列函数组成,用来自动化原本繁琐的研究任务。此时,统一的主题是回归分析的更有效的表示。
- modelbased: 这是一个轻量级的软件包,有助于基于模型的估计,用于边际平均值的计算、对比分析和预测。
- 性能: 性能包的主要目标是提供计算模型质量和拟合优度指数的工具。这包括像 r 平方(R2)、均方根误差(RMSE)或组内相关系数(ICC)这样的度量,还包括检查(混合)模型的过度分散、零膨胀、收敛或奇异性的功能。
- skimr: 一种无摩擦、可管道化的处理汇总统计的方法。
- speed glm:Fast针对大数据的 glm。****
- syuzhet:易观情感分析在 r
我希望你找到了对你的工作有用或有趣的东西。如果你有什么酷的东西要添加到列表中,请在评论区告诉我!
编辑 2022:查看本文的第 2 部分!
令人敬畏的和不太为人所知的 R 库的精选列表
towardsdatascience.com](/the-most-underrated-r-packages-part-2-decdc753205c)******
最被低估的数据科学课程
快速提高你的技能
Photo by Charlotte Coneybeer on Unsplash
你们都知道 Coursera 的机器学习课程和吴恩达的深度学习专业化。你连 fast.ai,Udemy,EdX 都讲。这些都是学习数据科学的优秀资源,但我想让你知道一套鲜为人知但非常棒的课程,你可以通过这些课程在几个小时内增加你的知识。
Kaggle Learn
你可能听说过 Kaggle。你很可能已经参加了一次挑战,也许上传了一些内核,但是你知道 Kaggle 还提供数据科学教育吗?
我一直很惊讶有多少人不知道 Kaggle 的优秀(而且免费!)微课。
Kaggle 的教学方法与其他一些平台略有不同。而不是更长的课程,有多个主题的微课。大多数主题由 5-7 节课组成,每节课需要 30-60 分钟。这些课程最好的部分之一是,所有的练习都让你进入 Kaggle 内核,因此你可以立即开始用你的新知识进行编码和实验。
这些课程由各种各样的教师讲授,他们通常都有很强的学术和行业背景。目前,有 12 个主题可供选择:
- 计算机编程语言
- 机器学习简介
- 中级机器学习
- 数据可视化
- 熊猫
- 特征工程
- 深度学习
- SQL 简介
- 高级 SQL
- 地理空间分析
- 微挑战
- 机器学习可解释性
每个主题都让你知道是否有你应该首先考虑的先决主题,这样你就不会一开始就陷得太深。
为什么我是你的粉丝
在与数据科学家交谈时,我发现几乎每个人都想了解更多。然而,通常情况下,学习的最大障碍是时间。你很想参加吴恩达的深度学习课程,但你现在似乎在职业生涯中找不到时间。
我相信 Kaggle 已经在他们的 Kaggle 学习中走了很长的路,以最小化你学习一个新话题所需的时间。为了做到这一点,主题被分解到它们的核心组件,简单地解释,并附有代码。每天只需 30 分钟,你就可以在一周内完成大部分题目。你会成为这些领域的顶尖专家吗?没有。但是我发现他们确实在短时间内提供了一个坚实的基础。
此外,我认为 Kaggle 在选择高度实用的主题方面做得很好,这些主题真正补充了你从学校或更正式的在线课程中获得的技能。例如,我不知道任何其他平台提供关于机器学习可解释性的课程,或者让你在几个小时内查询 SQL 数据库。
你可以在 Kaggle 网站上找到这些课程。我真的希望你能花一分钟去看看它们。这些微型课程是继续培养您的数据科学能力的绝佳方式快速。
这篇文章也可以在这里找到。
加入我的 邮箱列表 保持联系。
最被低估的标准 Python 库
视频教程
面向数据科学家的集合
Python 有许多现成的优秀库。其中之一就是 收藏 。集合模块提供了“高性能容器数据类型”,它提供了通用容器 dict、list、set 和 tuple 的替代方案。我很乐意向你介绍其中的三种数据类型,最后,你会想知道没有它们你是如何生活的。
命名元组
我不能夸大命名的组合对数据科学家的用处。让我知道这种情况听起来是否熟悉:你正在做特征工程,因为你喜欢列表,你只是不断地将特征添加到列表中,然后将列表输入到你的机器学习模型中。很快,您可能会有数百个功能,这时候事情就变得混乱了。您不再记得哪个特性引用了列表中的哪个索引。更糟糕的是,当别人看你的代码时,他们根本不知道这个庞大的特性列表是怎么回事。
输入 NamedTuples 以保存该天。
只需几行额外的代码,你那疯狂杂乱的列表就会恢复到有序。让我们来看看
如果您运行这个代码,它将打印出“22”,即您存储在您的行中的年龄。这太神奇了!现在,您不必使用索引来访问您的要素,而是可以使用人类可以理解的名称。这使得你的代码更容易维护,更简洁。
计数器
计数器名副其实——它的主要功能是计数。这听起来很简单,但事实证明数据科学家经常要计算事情,所以它可以非常方便。
有几种方法可以初始化它,但我通常有一个值列表,并按如下方式输入该列表
如果您要运行上面的代码(您可以使用这个棒极了的工具),您将得到下面的输出:
[(22, 5), (25, 3), (24, 2), (30, 2), (35, 1), (40, 1), (11, 1), (45, 1), (15, 1), (16, 1), (52, 1), (26, 1)]
按最常见的排序的元组列表,其中元组首先包含值,然后包含计数。因此,我们现在可以很快看到,22 岁是最常见的年龄,出现 5 次,还有一个长尾年龄,只有 1 次计数。不错!
默认字典
这是我的最爱之一。 DefaultDict 是一个字典,当第一次遇到每个键时,用默认值初始化。这里有一个例子
这返回
defaultdict(<type 'int'>, {'a': 4, ' ': 8, 'c': 1, 'e': 2, 'd': 2, 'f': 2, 'i': 1, 'h': 1, 'l': 1, 'o': 2, 'n': 1, 's': 3, 'r': 2, 'u': 1, 't': 3, 'x': 1})
通常,当你试图访问一个不在字典中的值时,它会抛出一个错误。还有其他方法来处理这个问题,但是当您有一个想要采用的默认值时,它们会增加不必要的代码。在上面的例子中,我们用 int 初始化 defauldict。这意味着在第一次访问时,它将假设一个零,所以我们可以很容易地继续增加所有字符的计数。简单干净。另一个常见的初始化是 list,它允许您在第一次访问时立即开始追加值。
Photo by Hitesh Choudhary on Unsplash
去写更干净的代码
既然您已经了解了 collections library 和它的一些令人敬畏的特性,那就去使用它们吧!你会惊讶地发现它们是如此的有用,你的代码会变得更好。尽情享受吧!
这篇文章也可以在这里找到。
穆勒报告:在美国的调查
Photo by David Everett Strickler on Unsplash
随着最近穆勒报告的发布,我认为对 r .的调查进行研究是一个有趣的想法,即对穆勒报告进行探索性分析。所以现在开始。
环境设置
让我们首先加载本次探索所需的所有库。
rm(list = ls())
library(tidyverse)
library(pdftools)
library(tidylog)
library(hunspell)
library(tidytext)
library(ggplot2)
library(gridExtra)
library(scales)
获取数据即米勒报告
这份报告可以在司法部的网站这里免费获得,我们可以作为 R 对象访问它,就像这样-
download.file("[https://www.justice.gov/storage/report.pdf](https://www.justice.gov/storage/report.pdf)", "~/Downloads/mueller-report.pdf")report <- pdf_text("~/Downloads/mueller-report.pdf")
我将在这里使用报告呈现的预转换 CSV 格式。
report <- read_csv("[https://raw.githubusercontent.com/gadenbuie/mueller-report/master/mueller_report.csv](https://raw.githubusercontent.com/gadenbuie/mueller-report/master/mueller_report.csv)")
清理数据
由于实际的报告从几页开始,pdf 到文本的解析返回一些失败(也是报告的修订部分),所以数据中有一些空行。让我们把这些过滤掉。
report %>%
filter(page >= 9) -> content
content %>%
filter(!is.na(text)) -> content
此外,由于解析错误,我们在数据中看到许多拼写错误的单词。让我们用 hunspell 找到并删除大部分单词拼写错误的行。
content %>%
rowwise() %>%
mutate(num_misspelled_words = length(hunspell(text)[[1]]),
num_words = length(str_split(text, " ")[[1]]),
perc_misspelled = num_misspelled_words/num_words) %>%
select(-num_misspelled_words, -num_words) -> contentcontent %>%
filter(perc_misspelled <= 0.5) -> content
使用 tidytext 规格化线条
content %>%
unnest_tokens(text, text, token = "lines") -> content
最流行词汇
让我们看看穆勒报告中最受欢迎的词是什么
tidy_content <- content %>%
unnest_tokens(word, text) %>%
anti_join(stop_words)tidy_content %>%
mutate(word = str_extract(word, "[a-z']+")) %>%
filter(!is.na(word)) %>%
count(word, sort = TRUE) %>%
filter(str_length(word) > 1,
n > 400) %>%
mutate(word = reorder(word, n)) %>%
ggplot( aes(x=word, y=n)) +
geom_segment( aes(x=word, xend=word, y=0, yend=n), color="skyblue", size=1) +
geom_point( color="blue", size=4, alpha=0.6) +
coord_flip() +
theme(panel.grid.minor.y = element_blank(),
panel.grid.major.y = element_blank(),
legend.position="none") +
labs(x = "",
y = "Number of Occurences",
title = "Most popular words from the Mueller Report",
subtitle = "Words occurring more than 400 times",
caption = "Based on data from the Mueller Report")
从上面的图中我们可以看出,报告中最受欢迎的词是“总统”和“特朗普”。另一个值得注意的词,“科恩”、“弗林”、“科米”和“麦克加恩”。
最常见的相关词
让我们建立一个在报告中高度相关的词的网络
word_cors <- tidy_content %>%
add_count(word) %>%
filter(n > stats::quantile(n, 0.7)) %>%
pairwise_cor(word, page, sort = TRUE)set.seed(123)word_cors %>%
filter(correlation > 0.25,
!str_detect(item1, "\\d"),
!str_detect(item2, "\\d")) %>%
graph_from_data_frame() %>%
ggraph(layout = "fr") +
geom_edge_link(aes(edge_alpha = correlation), show.legend = FALSE) +
geom_node_point(color = "lightblue", size = 5) +
geom_node_text(aes(label = name), repel = TRUE) +
theme_void() +
labs(x = "",
y = "",
title = "Commonly Occuring Correlated Words",
subtitle = "Per page correlation higher than 0.25",
caption = "Based on data from the Mueller Report")
正如我们所料,最常见的相关单词是“meeting”和“kushner”&“comey”和“investigation”等等。
总结
正如我们所看到的,我们可以使用 r 快速对 Mueller 报告进行探索性分析。点击这里查看我关于穆勒报告的详细博文
介绍分析加载库下载报告清理页面范围文本 NA 拼写错误的单词正常化大多数…
www.adityamangal.com](https://www.adityamangal.com/2019/04/the-mueller-report/)
我将讨论如何使用 python 的 NLTK 库和 R 来分析报告中的情感,并使用我们自己定制的搜索引擎对报告进行事实核查。
让我在这里或者在博客上知道你的想法。
干杯!
循环虚时间和温度之间的神秘联系
Image by prettysleepy1 from Pixabay
一个显而易见的事故可能蕴含着物理学上的一个巨大谜团
当人类知识分支中完全不同的概念、理论显示出它们实际上是紧密相连的时候,就会产生一种特殊的美。阿尔伯特·爱因斯坦在给他的朋友、数学家马塞尔·格罗斯曼的信中写道:
“发现一系列起初似乎完全分离的现象的统一是一种光荣的感觉。”
—阿尔伯特·爱因斯坦
在这篇文章中,我将描述理论物理的两个基本分支之间一些令人难以置信的优雅联系,即量子力学 (QM),它在原子和亚原子粒子的水平上代表宇宙,以及统计力学 (SM),它应用统计方法来描述粒子集合的行为。
从数学上讲,这些联系是一个简单的算术替换的结果,它使循环虚时间等同于温度。换句话说,虚时间中的周期性等同于温度(的倒数)。
“隐藏的联系比明显的联系更强.”
—以弗所的赫拉克利特
同样值得注意的是,如果我们简单地把我们的理论扩展到包括虚数时间,许多惊人的结果会很直接地得到。不仅如此,一些数学对象的表现也变得更好了(这导致了一些关于“时间的真实性”的问题,我将在本文的结尾提到)。
一个著名的例子(稍后将更详细地描述)是计算黑洞辐射(所谓的霍金辐射)的温度,这是通过简单的算术运算轻松获得的!
Figure 2: An illustration of the Hawking radiation from a black hole, to be discussed later on (source).
“偶然”的通信
我们可以通过将支配量子系统如何随时间演化的算符、时间演化算符和密度算符联系起来,后者是一个与时间无关的对象,它描述了处于平衡状态(温度为 T )的多粒子系统的统计状态。
Figure 3: The correspondence between QM and SM. The leftmost object is the time evolution operator from QM and the rightmost object is the density operator from SM. The Euclidean time τ is cyclic with period β.
其中 τ ,称为欧几里得时间(原因很快就会搞清楚)*,*是循环的(或周期性的),周期为 *β,*其中
Equation 1: Definition of inverse temperature β, the imaginary unit i, and the Planck constant.
表达式中的因子 h 就是量子力学中的基本参数普朗克常数。下图是复平面,实数位于横轴,虚数位于纵轴。
Figure 1: The complex plane showing the imaginary units i and -i (source).
用更专业的术语来说,我们说在量子力学(或量子场论)中,哈密顿量充当时间平移的李群的生成器,而在统计力学中,同一个哈密顿量的角色是系综中的玻尔兹曼权重。
Figure 4: The Petrie projection of the exceptional Lie group of type E8 (source).
灯芯旋转
转变
Equation 2: The replacement of the time variable t by -iτ is called a Wick rotation.
被称为的灯芯旋转。新变量 τ 被称为虚数或欧几里得时间,子索引+表示 τ 为正。使用术语“欧几里得时间”的原因将在下面解释。
Figure 5: The imaginary/Euclidean time axis and a Wick rotation (source).
当把论点 t 推广到复数值时,对于 U ( t )保持解析或全纯函数(一个函数在复平面的某个区域 R 上是解析的,如果它在 R 内的每一点上是复可微的)。
为了更详细地了解这一点,让我们首先根据哈密顿量的本征态写出时间演化算符:
Equation 3: Time evolution operator written in the energy eigenbasis.
旋转复平面中的时间 t 并将其写成实部和虚部,和内的指数变为:
只有当虚部 Im( t )满足以下条件时,该表达式才不发散:
Equation 4: The imaginary part of the complexified time must be negative or zero for the evolution operator to be bounded over the Hilbert space of the system (see figure below).
等式右边的符号“||”是算符的范数(这里的定义见)。
Figure 6: Time complex space. The evolution operator is well-defined only if the imaginary part of t is positive.
密度算符,一个静态对象,可以作为一个演化算符在虚数时间内给出一个“伪动态”解释,只要进行如下替换
Equation 5: The Wick rotation that “takes” quantum mechanics into statistical mechanics.
虚数循环时间和逆温之间显然有简单的对应关系。
换句话说,在循环时间和温度倒数之间有一个明显的简单对应关系。
Figure 7: The link between quantum mechanics and statistical mechanics.
假想时间
在爱因斯坦的狭义相对论中,事件的概念至关重要。它可以被定义为“与时空中的一点相关的瞬时物理情况或事件”。两个事件之间的不变间隔由下式给出:
Equation 6: The expression for the invariant interval in Minkowski spacetime.
另一种写区间的方法是使用球坐标,如下图所示。将我们自己限制在 x - y 平面,空间元素变成:
Equation 7: The metric in 2D space expressed both in Cartesian and spherical coordinates.
当我们讨论黑洞和宇宙学时,坐标的这种替代用法将会很重要。
Figure 8: Spherical coordinates (r, θ, ϕ) (source).
使灯芯旋转 t → - iτ 这个间隔变成
Equation 8: This spacetime metric is called Euclidean since it has the same form as the usual metric in Euclidean 3D space.
它具有欧几里得几何中常见的毕达哥拉斯距离的形式。这就是我们把虚数时间称为“欧几里得时间”的原因。
Figure 6: Points in 3D space and determined by three numbers, or coordinates (source).
区间的“欧几里德化”起源于德国数学家赫尔曼·闵可夫斯基于 1908 年发表的一篇开创性论文。在那里,他著名地宣称
“从今以后,空间本身和时间本身注定要消失在阴影中,只有两者的某种结合才能保持独立的现实。”
— 赫尔曼闵可夫斯基(1908)
正是在这篇文章中,他实际上把时间和空间“焊接”成了我们称之为时空的四维结构。
Figure 7: Transparency from Minkowski’s famous talk, “Space and Time” given in September of 1908.
一些重要概念的鸟瞰图
为了使这篇文章尽可能地自成一体,我将首先解释一些重要的物理概念,然后更深入地探究这个神秘的“巧合”背后的本质。
玻尔兹曼分布和最大熵原理
让我们考虑一个系统 A ,其能级由下式给出
其中 T 和 V 为其温度和体积。该系统通过与一个大容器A’(与它进行热交换)接触而保持恒温 T 。系统处于某种状态 i 的概率为:
Equation 9: The probability that a system is in a state with energy E(i).
Figure 8: System A is kept at fixed temperature T by exchanging heat with the reservoir A’.
玻尔兹曼分布可以用不同的方法导出。一个特别有趣并且与信息论中的概念相关的推导使用了所谓的最大熵原理。这个原理是由美国物理学家 T21 提出的,它指出最能代表系统知识的概率分布是具有最大熵的概率分布。应用于统计力学,它给出了玻尔兹曼分布。
时间演化算子
量子系统的时间演化由时间演化算符 U ( t )生成:
Equation 10: The time evolution of a quantum state, generated by the time evolution operator.
如果 U ( t )遵守一些基本性质(更多细节见本参考文献)它可以写成,对于一个无穷小的区间 dt ,如下:
Equation 11: The quantum time evolution operator for small time intervals.
其中ω原则上是一个未知的厄米算符。在牛顿力学中,产生时间演化的算符 u ( t )可以写成如下泰勒展开
Equation 12: The operator that generates time evolution in classical dynamics.
事实上,这个表达式是象征性的,因为在这个上下文中 H 是由泊松括号给出的运算符
比较两种表达式并引入因子
源自经典力学和量子力学之间的标准对应,我们获得了我们正在寻找的表达式,即:
Equation 13: The operator that generates time evolution in quantum dynamics.
拉格朗日函数
拉格朗日方法最初被认为是牛顿力学的重新表述。尽管它产生了与牛顿方法相同的结果,但它强调了一套完全不同的观点。此外,它有两个显著的优点:它在数学上更优雅,同时在处理更复杂的系统时更强大。
Figure 9: Joseph-Louis Lagrange was responsible for several seminal contributions to both pure mathematics and mathematical physics (source).
尽管这种方法是在考虑经典(非量子)物理学的情况下引入的,但直到很久以后,在 20 世纪量子场论的背景下,它才显示出它的全部威力。事实证明,人们可以使用“最小作用原理”推导出目前已知的所有基本物理定律,正如我们将在下面看到的,这取决于拉格朗日量。
拉格朗日函数 L 定义在所谓的位形空间 C 上(技术上讲, L 定义在数学家所谓的 *C、*的切丛上,但我们暂且忽略它)。
Figure 8: Illustration of the concept of configuration space for a system with N particles. Each point Q represents a configuration of the system.
让我们考虑一个由 N 个粒子组成的系统。每个点 Q ∈ C 对应 N 粒子的某种构型(见上图)。注意 Q 的运动包含了全 N 粒子系统的动态。具体来说,你可以想到太阳-地球-月亮系统,在这种情况下 N 是 3。每个Q∑C代表三个物体的位置和速度。
Figure 10: Illustration showing the view of the moon from space during sunrise. The coordinates of the Sun, Earth, and Moon are represented by a single point Q in the configuration space of the system. As the three bodies move in space, Q moves in the configuration space. Figure by sdecoret/shutterstock.com.
点 Q 围绕 C 运动遵循一定的规律,这个规律可以从拉格朗日函数l中得到,拉格朗日函数一般是一个多元函数,可以写成:
Equation 14: The Langrangian function which depends on positions and velocities. From this function the equations of motion of physical systems are obtained.
函数参数的第一个子集
是 N 个粒子的位置。第二子集
是它们的速度。注意,这些变量不一定是普通的笛卡尔坐标。因此,它们被称为广义坐标,可以是沿着粒子轨迹的任何角度到弧长(见下图)。
Figure 11: The arc length s along the curve on the left figure is an example of a generalized coordinate. The angle θ on the second figure is also an example of a generalized coordinate (source).
系统的拉格朗日量等于其动能 K (由于其运动)和其势能 V (由于其相对于其他系统的位置)之差:
Equation 15: The Langrangian function expressed as the difference between the kinetic and potential energies
一个简单的例子是一个在势能 V ( q )中坐标为 q ( t )的粒子:
Equation 16: One of the simplest possible Lagrangians, of a 1D particle moving in a potential V.
Figure 12: Animation showing the orbital motion of a satellite around the Earth (source).
哈密尔顿函数
还有第二种方法,它也精致而有力地重新表述了经典力学。正如在拉格朗日图中一样,这种方法基于一个单一的函数,称为哈密顿量 H ,从中可以推导出物理系统的动力学(描述其运动的方程)。哈密顿量在相空间中定义。类似于配置空间,人们可以将相空间定义为“一个空间,在该空间中,系统的所有可能状态被表示,每个可能状态对应于相空间中的一个唯一点。”
Figure 13: The Irish mathematician Sir William Rowan Hamilton made fundamental contributions to several fields including algebra, optics and classical mechanics (source).
在相空间中,点由粒子的位置和(广义)动量(而不是位置的时间导数)来描述:
在这里,动量是从拉格朗日中获得的(你可以在这里阅读更多关于它的内容:
Equation 17: The momentum is obtained by differentiating the Lagrangian function with respect to the velocity.
Figure 14: The motion of a mass-spring system shown in real space and phase space (source).
量子态
在量子力学中,描述经典相空间中运动的坐标 q 和动量 p (见上项),变成了算符。例如,动量变成以下微分算子:
Equation 18: Momentum becomes a differential operator in quantum mechanics.
物理系统用量子态来表示。使用由保罗·狄拉克引入的符号,我们可以通过以下对象来表示系统的状态:
Equation 19: Initial state of a quantum system.
如果系统的哈密顿量是某个(为简单起见与时间无关)算符 H ,经过一段时间 t 后系统的最终状态是:
Equation 20: Final state of a quantum system after evolving for some time t. The evolution is generated by the Hamiltonian H.
记住我们已经在介绍中遇到了时间演化算符。
众所周知,量子力学是以概率为基础的。爱因斯坦有句名言:
这个理论说了很多,但并没有真正让我们更接近“旧理论”的秘密。“无论如何,我相信他不会掷骰子.”
阿尔伯特·爱因斯坦
在量子力学中,概率是被称为量子概率振幅的某些量的模平方。下面的动画显示了一种非常特殊的量子态(或波函数)的时间演化,这种量子态被称为相干态(非常类似于经典物体):
Figure 14: Illustration of the time evolution of a quantum probability distribution associated with a coherent state (source).
传播者
一个粒子(比如说一个电子)从初始时刻 I 的初始状态传播到时刻 F 的最终状态的概率幅度称为传播子,读作:
Equation 23: Quantum probability amplitude or propagator for a system to evolve from the state at time I into that at time F.
相应的转移概率就是:
Equation 24: Quantum transition probability.
配分函数
在统计力学中,该理论的基本对象被称为配分函数。它的重要性源于这样一个事实,即描述一个系统的几乎所有相关变量都可以从Z .**Z对于a 经典具有离散谱的正则系综的数学表达式为:
总和是系统的状态,而 T 是温度。更多详情见此链接。热平衡系统在温度为 T 时处于能量为 E 的状态的概率与玻尔兹曼因子成正比:
作用和最小作用原理
在物理学中,作用 S 是一个与系统动力学相关的量。从 S 中,可以推导出系统的运动方程。从数学上讲,它是一个函数,以系统的历史(或路径)为自变量,并输出一个实数。更具体地说,该动作由拉格朗日函数对时间的积分来表示
Equation 25: The definition of the action.
物理学中最强有力的观点之一被称为最小作用量的原理,根据该原理,系统采取的实际路径是作用量 S: 的极值或驻点
Equation 26: The action is stationary when the path is the classical trajectory.
量子力学中的路径积分
作为由薛定谔和海森堡开发的量子力学形式主义的替代方案,美国物理学家理查德·费曼创造了所谓的路径积分公式。在这样的公式中,用于计算粒子从点 I 到点 F 的概率幅度的路径积分必须考虑字面上所有可能路径*。例如,这些路径包括在时间上向前和向后的轨迹!为了获得总的概率幅度,人们给每个可能的路径分配一个幅度 q ( t*
Equation 26: Exponential weight assigned to a path q(t).
总结一下:
Equation 27: The path integral representation of the propagator.
更准确地说,总振幅是无限数量的轨迹或路径上的函数积分。当振荡的贡献在路径积分中求和时,我们预期会发生抵消。更准确地说,当我们取极限时,得到的路径接近经典路径
具有很强的同相贡献,这意味着稳定路径占主导地位,量子波动(或校正)主要与接近经典路径的路径相关(更多细节见参考文献)。
Figure 15: Richard Feynman and an illustration showing different ways that a particle can go from I to F (source).
我们应该指出,当我们将建立替代路径和导出路径积分所需的增量时间步长增加到∞时,由曲线 D 给出的路径积分积分度量具有严重的收敛问题。我们将回头讨论这个问题。
欧几里德路径积分
*执行灯芯旋转 t =- *iτ,以上路径积分变为:
Equation 28: The transition probability amplitude written in Euclidean or imaginary time.
其中积分内的指数是欧几里德作用:
Equation 29: Euclidean action.
具体来说,让我们考虑后者的一个简单例子。自由粒子的拉格朗日(左边)给出了下面的欧几里德作用(右边):
Equation 30: A simple example of Euclidean action, for a free particle.
这可以概括为包括一个势能项:
Equation 31: Example of Euclidean action.
正如费曼和希布斯在经典著作中指出的那样,
“这是一个非常有趣的结果,因为它给出了一个量子力学系统的完整统计行为,而没有出现量子力学无处不在的 i so 特性……”
—费曼和希布斯
量子场
宇宙中的所有粒子都是量子场的激发,任何解释基本粒子行为的基本定律的努力都必须考虑量子场论或 QFT 的基本原则,这是基本粒子(如夸克和电子)物理学所基于的概念框架。此外,许多科学家认为万物理论(TOE)将是某种量子场论(类固醇)。
宇宙中所有的粒子都是量子场的激发。
QFT 的基本数学对象是所谓的生成泛函 Z 。也许最简单的生成泛函是描述自旋为 0 的粒子,这对应于标量场(希格斯玻色子就是这样一种粒子)。
Figure 16: The Higgs field is an example of a scalar field. Particles that interact with the Higgs field “acquire” mass. This figure shows a computer image of one such interaction (source).
它由下式给出:
Equation 32: Minkowski generating function in QFT.
如果我们旋转灯芯,功能 Z 变为:
Equation 33: Euclidean generating function.
被称为欧几里得泛函积分 (EFT)。定义能量泛函
Equation 34: Energy functional of the ϕ field.
路径积分变成:
Equation 35: Euclidean generating function expressed in terms of the energy functional E[ϕ].
上面的表达式非常类似于统计力学的配分函数。量子场论和统计力学之间的联系以不同的方式发生,这取决于人们是在考虑经典系统(遵守牛顿定律及其扩展的系统)还是量子力学系统。
也可以写出对应于场而不是位置 q ( t )的状态的传播子(见上面的解释):
Equation 37: The transition probability amplitude or propagator for field-states, expressed as a path-integral.
跃迁振幅连接两个量子场状态。我们可以将这个欧几里德传播子示意性地表示为:
Figure 17: Transition amplitude between two fields during a time interval β. The space here (represented by the dashed lines) is a plane with dimension d-1.
这种表示可以适用于不同的时空拓扑。上图中描绘的振幅对应于时空区域上的路径积分
Equation 38: The spacetime over which the path integral of Figure 14 occurs.
空间不一定需要是平面。如果它是一个球体,我们会画:
Figure 18: Transition amplitude between two field-states during a time interval β which differs from Figure 14 by the fact that space here (represented by the dashed lines) is a sphere with dimension d-1.
灯芯旋转的有用性
在灯芯旋转之后,路径积分中的配置 q ( τ )的权重变为
Equation 39: The Euclidean weight of the configuration q(τ).
其中指数包含欧几里德作用。后者通常是非负的,暗示着如果某个配置对应的动作 q ( τ )很大,其贡献很小。这极大地改善了路径积分的收敛性。
使用灯芯旋转的另一个优点是,在通常的量子场论中发散的环路费曼图计算变成了良好的动量积分。
在非微扰物理学中,欧几里德化带来了许多有趣的应用(它们将在下面详细描述)。
连接
在下文中,我将讨论应用灯芯旋转后获得的几个重要联系,即:
- 量子力学/量子场论与经典统计力学的联系
- 量子力学/量子场论与量子统计力学的联系
- 经典系统中从静力学到动力学的转化
量子力学和量子统计力学
经典统计力学在非常低的温度下不适用。在这个极限下,量子效应变得很重要。这种系统的例子包括低温稀释原子或多原子气体。
Figure 19: These are three views of the velocity distribution for a gas of rubidium atoms. The distribution in the middle shows the appearance of a Bose-Einstein condensate, a new phase of matter (source).
让我们考虑一个非常简单的量子力学系统:零温度下的一维简谐振子(SHO)T= 0。下图显示了谐振子的一个例子。
Figure 21: An example of a quantum oscillator is the diatomic molecule dinitrogen. The vibrational motion of the two atoms can be described using only one degree of freedom, namely, the distance its two nuclei (source).
在我以前的一篇文章中可以找到关于 quantum 版本的更详细的讨论(见下面的链接)。本节大量基于这个在线课,我强烈推荐。
神经网络如何解决量子力学中高度复杂的问题
towardsdatascience.com](/neural-quantum-states-4793fdf67b13)
该系统完全由单个坐标(或自由度)来表征,我将用 q 来表示。现在考虑同一个系统,SHO,但是现在假设粒子交换能量,并且与一个大的热源(或恒温器)处于热平衡,如下图所示,在某个有限的温度下 T > 0。我们说粒子与储层纠缠在一起。
Figure 22: Quantum simple harmonic oscillator in contact with a large heat reservoir.
在这种情况下,粒子处于混合热态(而不是纯态),由密度矩阵或密度算子 ρ 描述,在温度 T =1/ β 下表示:
Equation 40: The mixed thermal state of the particle in contact with the heat reservoir
其中量子力学配分函数为:
Equation 41: The partition function.
如前所述, ρ 内的指数与虚数时间内的演化算符成比例,前提是我们用欧几里得时间或虚数时间替换时间,并且我们确定:
换句话说:
Equation 21: Boltzmann factor correspondence with the evolution operator at imaginary time.
我们使用了下面的定义:
Equation 22: Euclidean evolution operator.
密度算符可以写成:
Equation 23: The density operator in terms of the Euclidean evolution operator.
其中配分函数为:
我们还可以定义欧几里得传播子:
Equation 24: The Euclidean propagator.
我们可以构造欧几里得传播子的路径积分表示。我们在上面看到了传播子和路径积分之间的对应关系。为了方便起见,我将在这里重写:
Equation 25: The transition amplitude expressed as a path integral.
例如,在配分函数中,可以根据位置追踪:
Equation 26: The partition function using the position basis for the tracing.
我们可以表示一个类似于被积函数的物体
选择初始时间为零。配分函数可以从等式的左手边快速得到。26 遵循三个步骤。首先,我们替换
然后我们用一个通用的位置状态来标识初始和最终状态
最后,我们对 q. 进行积分,对等式左侧的路径积分执行相同的变换。25,对变量进行方便的改变,从时间到虚数时间 t → - iτ 和 i 对哑元积分,变量 q 我们得到:
Equation 27: Partition function expressed as a path integral where paths obey periodic boundary conditions.
对 q 的积分意味着,对于 τ ∈ (-∞,∞),我们必须只对路径积分中服从周期性边界条件的轨迹(或配置)求和。
等效地,传播器读取:
Equation 28: Euclidean propagator expressed as a path integral with paths obeying periodic boundary conditions.
泛函积分中的指数是欧几里得作用:
Equation 29: This is the Euclidean action associated with a single path in imaginary time.
如果我们认为玻尔兹曼因子是虚时间中的演化算子,在这种情况下,它将状态 q 带回到自身,那么这个 q 积分可以在物理上变得直观:
我们的结论是,与我们一般的*基本原理一致,*统计力学发生在循环虚时间中。
Figure 20: Periodic imaginary time.
量子力学和经典统计力学
量子力学和经典统计力学之间的第二种对应关系,仅仅是对上一节所得结果的另一种解释。我们可以把欧几里得作用解释为一维封闭弦的微观状态的能量:
Equation 30: The Euclidean action as the energy of a microstate of a one-dimensional string.
注意,该字符串是一个扩展经典对象。其他的对应关系可以从方程中得到。27,29 和 Eq。30:
- 欧几里德动作中的积分参数 σ 对应于沿着字符串的位置
- 经典系统(弦)的温度是
- 量子系统的温度 1/ β 对应于弦的长度
Figure 21: A closed string in a potential V(q).
经典场论和经典统计力学
人们可以用这个表达式来描述磁场。为简单起见,我们只考虑标量场。程序简单明了,并且解释得很清楚在这里。结果是:
Equation 31: Generating function for a classical field theory
其中指数中的能量是
Equation 32: Energy functional E[ϕ] for a classical scalar field.
这与上面给出的欧几里得生成泛函具有相同的形式,只要我们确定:
因此,在一个 d 维时空里的欧几里得经典场论在形式上等价于一个 d 维空间(不是时空)里的经典统计力学。
量子场论和量子统计力学
让我们考虑一个绝对温度为 T 的量子场。为了简单起见,我们可以选择一个标量场ϕ(x, t )。热 QFT 适用的两个相关背景是宇宙学和涉及重离子碰撞的实验。
Figure 23: Ions colliding in the CMS detector at the Large Hadron Collider (LHC).
然后我们解析地将时间变量延续到纯虚数时间,并将该场写成ϕ(x, τ )。
现在,由于这是一个具有正温度 T 的量子系统,或者等价地,具有逆温度 β ,我们将它的配分函数 Z 写成量子态的总和,这相当于对玻尔兹曼因子进行追踪。选择场本征态的基,配分函数读作:
Equation 33: Partition function of a thermal QFT using a basis of field eigenstates.
按照与前面相同的步骤,被积函数可以明确地写成:
Equation 34: Integrand of Eq. 22.
选择初始和最终状态为相同的场本征态
Equation 35: Identification of initial and final states of a quantum system.
读者可能会注意到在 x 积分中引入了空间体积 V (通常省略并假设为无穷大)。配分函数是通过对 ψ 态积分得到的:
Equation 36: Partition function for Euclidean quantum field theory.
注意,尽管ψ-场基从方程中消失了,但场在初始和最终时间仍然是相同的,并且积分在所有具有周期性边界条件的“路径”上进行计算。
注意,这个物体不过是一个(欧几里德)量子标量场理论在零温度下的生成泛函生活在( d - 1 )空间维度(体积 V ) ,其中 τ 被限制在区间【0,1/ T )。标量场系统遵循沿 τ 维度*的周期性边界条件。*因此,我们断定这个配分函数可以描述两个系统:
- 在尺寸为( d -1)的空间中的温度 T =1/ β 的热系统
- 零温度下的标量场系统在时空*内,维度为( d -1)× β*
我们的结论是,在一个空间维度为 d 空间维度为并且“时间” τ 维度限制在区间[0, β 的时空中,温度为 T = 0 的欧几里德场论在形式上等价于温度为 T =1/ β 的量子统计力学
从拉格朗日动力学到静力学
我们看到的所有对应都包含了量子力学或者量子场论。事实证明,仅仅局限于经典力学,灯芯旋转之后已经发生了更奇怪的事情。正如我们在下面展示的(在这个分析之后)拉格朗日动力学变成了静力学!
考虑这个例子这里。与固定端点保持平衡的 n 维弦的能量受某些外场的影响为:
第一项是弹性势能(由于弹簧被拉伸) k 是胡克常数。变量 s 只是对字符串进行参数化。如果弦处于平衡状态,它的总能量会最小,这意味着
注意,该微分方程仅描述了串的静态配置,不涉及时间。如果我们执行一个灯芯旋转,用代替 s ,则能量变成(正比于)质量 k 的移动粒子的动作:
因此,通过能量最小化寻找平衡弦构型的问题,这是一个静态问题,变成了通过最小作用量原理寻找质量运动方程的问题,这是一个动态问题。综上所述,我们看到:
- 最小能量原理变成最小作用原理
- 所描述的系统从一根固定的弦变成了一个运动的质点
- 弹性能变成动能
- 外部势能变成了影响质点运动的势能
- 胡克弹簧常数变成了粒子质量
路径积分和量子引力
我现在将描述在广义相对论(GR)的背景下使用 Wick 旋转获得的一些惊人的结果,广义相对论是爱因斯坦的引力理论。欧几里得时间中热状态和周期性之间的对应在 GR 中特别值得注意,在 GR 中,周期性被几何地解释,正如我们将看到的。
欧几里得量子引力(EQG)是一种利用灯芯旋转的量子引力方法。正如在欧几里得量子场论中,人们基于引力场的拓扑是必需的这一信念,在正定度量上定义虚时间中的路径积分。
EQG 是将物理简化为几何的一个例子,它提供了一种有效且非常优雅的方式来获得量子引力的非微扰信息。它取得了一些成功,包括:
黑洞、量子效应和霍金辐射
在黑洞的物理学中,这种对应有着清晰的几何解释。我现在将简要说明如何使用欧几里得时间计算黑洞发出的辐射温度。
Figure 24: This is the first picture ever taken of a black hole (source).
1974 年,斯蒂芬·霍金发表了一篇开创性论文(见下图),他在论文中表明,当在事件视界附近考虑量子力学效应时,黑洞会发出辐射(所谓的霍金辐射)。
Figure 25: Stephen Hawking’s paper where he showed the existence of what eventually became called Hawking radiation.
Equation 37: The Schwarzschild metric describing a static black hole.
其中,dω表示小立体角(见下图)。
Figure 26: Illustration of a solid angle Ω (source).
远离黑洞,度量变成
这是球坐标中的闵可夫斯基度规。
Figure 27: An artistic depiction of a black hole. Picture by vchal/Shutterstock.com.
黑洞的视界位于由下式给出的史瓦西半径
Equation 38: The Schwarzschild radius.
在事件视界,意想不到的事情发生了:第一和第二个系数的符号改变了。这意味着空间和时间被有效地互换了。
在黑洞的视界,空间和时间被有效地互换了。
现在,由于黑洞附近的真空中存在量子波动,这是虚拟粒子-反粒子对的产物,经常发生的是这对粒子中的一个粒子落入黑洞,而另一个粒子没有。
Figure 28: An artistic depiction of quantum fluctuations (source).
这里有一个明显的警告。量子力学的主要原则之一,测不准原理,限制了虚拟对可以存在的时间。粒子-反粒子对的这种行为似乎与之相矛盾。空间和时间的交换伴随着相应的能量和动量的交换,这一事实解决了这个明显的矛盾。因此,能量的意义改变了,不违反测不准原理。
找到辐射的温度
我们首先在上面几行给出的史瓦西度规中代入 t → - iτ 。然后我们定义一个新的变量 x:
在史瓦西度规中代入 x ,它变成:
将我们自己限制在 x - τ 平面,这与上面显示的二维元素具有相同的形式。换句话说,上面的度量定义的空间是平面欧氏空间,用极坐标表示。
Figure 29: Polar coordinates (source).
由于在 r → 0 处,该度量通常具有圆锥奇点,为了保持度量规则,必须使 τ /(4 GM )的周期等于 2π:
由于 τ 具有周期性 β = 1/ T 我们在事件视界得到如下结果:
Equation 39: The temperature of the Hawking radiation.
其中 T ( H )是霍金辐射的温度。
量子宇宙学和宇宙的诞生
在把宇宙解释为一个量子力学系统时,它必须有一个波函数ψ。类似于普通量子力学中的薛定谔方程,ψ服从所谓的惠勒-德威特方程,由下式给出:
Equation 40: The Wheeler–DeWitt equation. The operator H is the Hamiltonian constraint and Ψ is the wave function of the universe.
在这个看似简单的方程中,算符 H 在广义相对论的量子化版本中被称为哈密顿约束。算符 H 不支配时间演化,因此薛定谔方程无效。此外,波函数不是来自普通量子力学的传统波函数,而是整个时空场组态的函数(更多细节见参考文献)。
尽管惠勒-德威特方程在总体上是病态的,但在一些重要的案例中它被很好地定义。
路径积分解
尽管一个成熟的量子引力理论还不完全为人所知,物理学家们相信它将包含费曼路径积分公式作为其组成部分之一。洛伦兹路径积分(在虹吸芯旋转之前)具有以下形式:
Equation 27: The amplitude to go from an initial three-dimensional metric to a final three-dimensional.
该积分是从在 t =0 处具有三度规 h ( I )的某个初始三几何图形到在 t = T 处具有三度规 h ( F )的最终几何图形的概率幅度,并且该积分在连接这些边界几何图形的洛伦兹四度规上。我们可以证明,通常人们能够从这个路径积分中恢复惠勒-德威特方程。
如果被积分的几何图形由度量张量 g 识别,则上面的振幅将被写成:
Equation 28: The amplitude to go from an initial three-geometry to a final three-geometry, written as a functional integration over the spacetime metric tensor.
Figure 30: The quantum transition amplitude between two three-dimensional geometries is obtained by summing over the four-dimensional metrics that connect both geometries.
然而,这种计算遇到了严重的技术问题。正如在非引力的情况下,时间坐标到虚时间的 Wick 旋转可能是有帮助的。复化之后,所涉及的几何变成欧几里得的(或者更精确地说是黎曼的)。事实上,为了获得广义相对论真空方程的一个明确定义的经典边值问题(一个微分方程和一组边界条件),人们可以证明欧几里得四个几何是需要的,而不是洛伦兹几何。
在欧几里得情况下,跃迁振幅变为:
Equation 29: The Euclidean amplitude from Equation 28 using Riemannian four-geometries.
欧几里得动作 I 将具有以下形式:
Equation 30: Euclidean action for gravity.
在动作 I 的表达式中,有一些极其重要的对象需要定义:
- 在第一个积分中, R 是曲率标量或 Ricci 标量,它测量黎曼空间中的小(测地线)球的体积偏离标准小球的程度。
- 在第二积分中 K 是边界面的第二基本形式。
原则上,人们可以通过将虚时间旋转回实时坐标来恢复洛伦兹几何。
这种欧几里德传播子的选择有几个原因,其中有:
- 路径积分的收敛性提高了,因为它变成了实数(正如我们已经看到的)
- 它适用于杨-米尔斯理论,这些理论是我们目前理解粒子物理的标准模型的基础。
- 人们可以通过以下结果来近似总振幅,欧几里得作用对应于经典情况:
这些结果是“将热力学简化为几何学”的例子。
从无到有创造宇宙
那么,惠勒-德威特方程的边界条件是什么?它们是量子条件,比较流行的两个是“无边界提议”和“隧道提议”。让我们把讨论限制在斯蒂芬·霍金和美国物理学家詹姆斯·哈特尔的“无边界提议”上。
斯蒂芬·霍金和罗杰·彭罗斯证明的奇点定理预言,在一定条件下,经典时空在时间原点是奇异的。这意味着广义相对论不是一个完整的理论,当奇点被击中时会发生什么必须提供一些规范。
在一篇著名的论文中,霍金和哈特尔提出了一种处理这个问题的方法。他们所谓的哈特尔-霍金态,由,
是宇宙的波函数,它是通过欧几里德路径积分获得的。他们提出了宇宙初始状态的边界条件,被称为无边界提议。
Figure 31: The Hartle -Hawking instanton. This is a singularity-free four-geometry. This HH instanton demonstrates the no-boundary proposal at imaginary time τ=0 (source).
这个路径积分的解释是,它给出了一个具有特定特征的宇宙从无到有被创造出来的概率。
哈特尔-霍金波函数给出了从无到有创造出具有特定特征的宇宙的概率。"
“物理学的一大谜团?”
许多 物理学家强烈怀疑这种对应关系背后隐藏着某种我们还无法完全理解的东西。例如,美籍华人物理学家黄国光认为这是“物理学的一大奥秘”。根据另一位著名的安东尼·齐(Anthony Zee)的说法,另一位美籍华裔物理学家在他的量子场论书(T8)中说:“这里可能有一些我们还没有完全理解的深刻的东西。”根据英美学者史蒂夫·沃尔夫勒姆的说法,他和伟大的美国物理学家理查德·费曼经常讨论“这种对应是否是一种巧合”
Figure 32: The young Stephen Wolfram and Richard Feynman circa 1982 (source).
“现实世界”?
如果时空距离具有这种形式,我们称之为欧几里得时空。对于扁平时空,亚瑟·s·威格特曼给出了一个严格的框架。然而,在弯曲时空中(例如,在大质量物体附近),相关的对称群会出现问题。
尽管如此,一些物理学家认为,在某种意义上,“真实世界”是由欧几里得时空所代表的。
一些物理学家认为,在某种意义上,“现实世界”是由欧几里得时空来表示的。
正如文章中所讨论的,有许多理由可以证明这一观点。斯蒂芬·霍金在他的《时间简史》一书中做了如下陈述:
“有人可能会认为这意味着虚数只是一个与现实世界无关的数学游戏。然而,从实证主义哲学的观点来看,人们无法确定什么是真实的。我们所能做的就是找到描述我们生活的宇宙的数学模型。事实证明,一个包含虚时间的数学模型不仅预测了我们已经观察到的效应,还预测了我们还无法测量却因为其他原因而相信的效应。那么什么是真实的,什么是想象的呢?区别只是在我们的头脑中吗?”
——斯蒂芬·霍金
然而,这种观点对于时间属性的基本概念和因果关系的概念有一些麻烦的暗示。此外,将时间视为空间维度与广为接受的量子力学定理相冲突。
也许有一天我们会知道这个问题的答案。也可能不是!*
感谢您的阅读,再见!一如既往,我们随时欢迎建设性的批评和反馈!
我的 Github 和个人网站 www.marcotavora.me 有(希望)一些其他有趣的东西。看看吧!
反向传播背后的“奥秘”
外行对神经网络最基本方面之一的理解
警告:如果你已经理解了反向传播背后的数学原理,就不要浪费时间读这篇文章了。
问题陈述—神经网络的训练
这个帖子是由 fastai 深度学习课程的第八课激发的。正如我在药物激酶相互作用的帖子中提到的,fastai 是一个非常有用的深度学习库,只需几行代码就能让你入门。然而,为了最大限度地利用其灵活性,有必要更深入地理解背后的数学原理。fastai 的深度学习课程在解开神经网络黑盒方面做得非常好。它演示了如何从头开始构建深度学习库。另外,它也是科学计算环境中优秀软件工程实践的极好展示。作为一名理科出身的人,我有时会因缺乏软件工程方面的适当培训和适用于理科应用的有用资源的稀缺而感到沮丧。
回到我在这里试图讨论的问题。神经网络只不过是一个可以优化以进行预测的模型。优化或学习的过程是调整模型参数,以使预测误差最小化。优化过程基于梯度下降。简单地说,如果模型参数增加,误差增加,我们应该在一定程度上减少模型参数,反之亦然。因此,问题的核心是计算误差如何随着模型参数的变化而变化。
这是神经网络的典型描述。它接受一个输入(在本例中是一个三元素向量),通过首先计算隐藏层(一个四元素向量)来计算输出(一个两元素向量)。每个隐藏元素的值取决于每个输入元素,每个输出元素的值取决于每个隐藏元素。
Reference: https://en.wikipedia.org/wiki/Artificial_neural_network
现代神经网络一般涉及两种关系——线性和非线性。以一个隐藏元素的值为例。首先,计算来自前一层的所有元素的**值的“加权”和加上常数“偏差”。然后,总和经过非线性转换,以提供隐藏元素的值。我们需要一种方法来计算输出值如何根据所有层中调用的线性变换中的“权重”和“偏差”的变化而变化。这就是问题所在。
这篇文章的目的——试图重建导致反向传播的思维过程
鉴于“神经元”之间复杂的连接性,对导数进行强力评估似乎非常困难。人们总是声称这个解决方案只基于微积分中众所周知的链式法则。事实上,不到一页就可以得到它,如维基百科中所示。它的关键实现也出奇的简单如下图(抄袭深度学习类)。请注意,没有调用外部例程,所以这就是全部内容。
**def** bwd(self, out, inp):
inp.g = out.g @ self.w.t()
self.w.g = inp.t() @ out.g
self.b.g = out.g.sum(0)
但是,至少对我来说,从数学推导到实际代码是非常困难的。有可能理解最终结果,但不清楚人们最初是如何到达那里的。在试图重建我能接触到的思维过程中,我希望对反向传播有更深入的了解。当然,这不太可能是先驱们为发现反向传播而进行的实际脑力锻炼,但他们的经历可能不为我这样背景的人所理解。
我将在下面描述的思考过程包括三个步骤。这个想法是分解问题,这样每一步都是可管理的,也是重要的。这样,每一步的障碍都降低了,而不影响总的成就。
步骤 1 —单个样本、单个神经元
让我们考虑一个三层神经网络,每层有一个神经元。取一个输入,第一层执行简单的线性变换,第二层是常用的非线性变换,对于任何负值输出零,否则不做任何事情,第二层线性变换提供输出。模型的成本就是输出和目标值之间的平方误差。这个过程,即从输入值计算输出值,称为正向传递。
我们希望计算与模型参数(即 w 和 b)相关的成本变化。链式法则来了。模型参数通过 y 影响成本。举个例子,
第二步的简化是由于线性模型的使用。这种关系表明,我们需要计算并跟踪成本相对于所有 y 的导数。幸运的是,y 对成本的影响也以线性方式从输入传递到输出,允许连续使用链式法则。对于我们的简单模型,导数总结如下。
假设我们想计算对 w1 的导数,那么我们需要知道对 y1 的导数,这取决于对 y2 的导数,这取决于对 y3 的导数,这是已知的。为了计算关于 w 和 b 的所有导数,保存关于 y 的所有导数是有意义的,因为它们可能被多次使用。在我们的简单模型中,相对于 y3 的导数使用了四次,实际上只需要一次计算。在实践中,对于模型的每一层,我们计算关于其输入变量的导数,并且结果被用于前一层中导数的计算。首先,为了开始这个递归,我们从关于输出的导数开始。因为我们从输出开始,然后返回到输入,这个过程被称为反向传播或反向传递。
当计算导数时,我们还需要知道在正向传递中得到的 y。
现在,我们可以总结出使反向传播可行的实现的重要技巧。
- *保存 y 的导数以备后用。*对于熟悉软件工程的人来说,这是动态编程的一个典型应用。
- 向前传递提供 y 的值。由于采用了线性模型,我们不需要更复杂的衍生产品。
- *非线性层模型的选择也使得计算导数变得容易。*除了 ReLu,人们习惯用 sigmoid 函数,它的导数也很容易得到。
应该注意的是,ReLu 被认为是一个单独的层,以使事情更加清楚。虽然它是非线性的,但在概念上比线性层简单。通常,线性层在不同层的神经元之间引入了复杂的互连,但 ReLu 只将单个神经元的值作为输入。
现在直接提出一种模式,说明如何计算线性层的各种导数。下一步是将它扩展到多个神经元,然后是多个样本。
步骤 2 —单个样本,多个神经元
上面已经确定导数可以以逐层的方式计算。同样显而易见的是,只要选择诸如 ReLu 或 sigmoid 之类的性能良好的函数,非线性层就很容易处理。我们只需要考虑单个线性层,并计算出 w 和 b 相对于输入的导数,因为输出的导数已经存在。
特别地,我们考虑具有不同数量神经元的输入层和输出层。输出层中每个神经元的值由输入层中所有神经元的加权和加上一个偏差决定。如下图所示,这种关系在形式上类似于单个神经元的情况,但是 y 变成了向量,w 变成了矩阵,b 变成了向量。因此,我们需要一个工具将链式法则从单变量扩展到多变量。有多种方法可以做到这一点,在这篇文章中我将使用爱因斯坦符号。在流体力学和广义相对论等张量起重要作用的物理学中,爱因斯坦符号被广泛使用。看到它在机器学习中的运用,我觉得很神奇。
使用爱因斯坦符号以分量格式编写的线性模型如下
导数可以用链式法则直接得到。记住,我们想要利用输出层的导数是已知的这一事实。这个等式可能看起来很可怕,但它遵循了既定的惯例。我们的目的是用一种可以转换成向量或矩阵的格式,写出关于分量的导数。
回到向量格式,其中关于分量的导数被统称为梯度向量或张量,
就输入、输出和模型参数而言,结果是
除了较高的维度,它遵循步骤 1 中观察到的相同模式。
步骤 3 —多个样本、多个神经元
最后一步是考虑多个样本的情况。对于每一层,输入和输出是来自每个样本的向量的集合。成本函数就是每个样本的误差平方和。这种扩展可以通过将输入/输出向量扩展为矩阵来实现。由于多个样本,梯度在维度增长后几乎保持相同的形式。梯度公式复制如下,其尺寸用下标表示。这里,样本大小表示为 S.
这些表达式可以很容易地转换成实际代码。
**def** bwd(self, out, inp):
inp.g = out.g @ self.w.t()
self.w.g = inp.t() @ out.g
self.b.g = out.g.sum(0)
摘要
此时,我们已经完成了任务—计算成本函数如何随模型参数而变化。通过采取三个步骤,现在更容易理解看似简单的代码实现是如何从数学中得出的。
应该强调的是,步骤 1 包含了反向传播中最关键的见解。步骤 2 和 3 是维度常规扩展。当反向传播首次被引入时,其性能随着网络深度(层数)的增加而迅速恶化。原因之一是消失或爆炸梯度问题。通过检查步骤 1 中的图表,可以直观地解释这个问题。事实上,随着深度的增加,相对于早期模型参数的导数是许多导数的乘积。不足为奇的是,梯度可能非常小或非常大,从而妨碍模型参数的适当训练。
一开始,我把目标定为重建反向传播发明者的思维过程。他们可能通过跳过前两步解决了这个问题,因为他们对数学工具很熟悉。但对我来说,我发现这三步走的方法非常有价值。对于更复杂的网络体系结构,在尝试全面解决问题之前,先解决一个简单的问题(如步骤 1 中的问题)可能更有指导意义。这种三步法也类似于代码重构过程。它可以作为反向传播算法进化史的一个版本。就像一段聪明的代码可能经历了非常戏剧性的重构步骤一样,一个漂亮的等式也必须经历多个细化步骤。跟随这一切是如何从一个卑微的起点开始的,不是更鼓舞人心吗?
步骤 2 和 3 是向量微积分中众所周知的技术。事实上,步骤 2 中的爱因斯坦符号练习基本上证明了向量微积分中一些有用的公式。就我个人而言,我在不同的场合至少学过两次,但是重温它仍然给了我一些以前没有意识到的有用的见解。例如,如何在多个维度上理解链式法则?每次都要经过第二步的推导,无疑会分散我们对更重要问题的思考。在写帖子的同时,我意识到维度的成长来得非常自然。以一个特定的层为例,下面显示了如何将维度从标量增长到矩阵。
为了使等式两边的维数匹配,需要应用转置操作,并且可能需要调整乘法的顺序。当然,这不是一个“证明”,但它肯定能加快我们的思维。输入/输出变量被假定为行向量。如果它们是列向量,类似的推理也适用。
看着这些步骤,人们可以看到许多来自其他领域的类似操作。例如,输出层的元素对输入层的每个元素的线性依赖本质上是坐标系的变换。通常,一个输入层被转换成一个更大尺寸的隐藏层,可能还有几个更大尺寸的隐藏层。这表明我们试图将输入(问题的有形部分)分解到更高维度的空间。因此,隐藏层类似于量子力学中的隐藏变量理论。在一段成功的训练期之后,高维空间并不是一个黑箱;相反,它有望揭示输入层没有捕捉到但已经隐藏在训练样本中的微妙关系(参见我以前关于药物-蛋白质相互作用预测的帖子)。
最后,我希望这个练习可以帮助那些试图了解反向传播的人。
企业中敏捷人工智能/机器学习的神话
企业中的敏捷 AI/机器学习是一个神话。它受到官僚主义以及复杂的安全和云约束的制约。以下是将神话变为现实的几个实用步骤。
Created by rawpixel.com / FreePix
企业中 AI/ML 敏捷性的缺乏导致了项目的失败和机会的错失
今天,企业中的“敏捷”人工智能/机器学习(AI/ML)在很大程度上是一个神话——它与建立模型没有多大关系。相反,企业 AI/ML 敏捷性受到官僚主义的数据获取流程、复杂的安全需求、不成熟的云安全实践和繁琐的 AI/ML 治理流程的制约。
不幸的是,在许多企业中,这些问题导致了项目失败,降低了期望,也许最重要的是,错过了交付真正价值的机会。
我花了几年时间帮助大型银行加速采用人工智能/机器学习和相关技术。在这篇文章中,我将讨论我所经历的企业中敏捷 AI/ML 的核心问题和障碍,然后提供一些经验教训和一些实际步骤,为将敏捷 AI/ML 神话变为现实提供一个起点。
企业中的敏捷已经很有挑战性了
敏捷可能是交付 IT 项目最常见的方法,但是尽管取得了成功,敏捷的跟踪记录却很不稳定。一项研究表明,在过去的 12 个月中,英国企业在失败的敏捷 IT 项目上浪费了大约 370 亿英镑。根据咨询公司 6Point6 最近的调查,敏捷“正面临一个隐藏的危机,八分之一(12%)的敏捷项目完全失败。”
“美国的情况更糟,那里的失败率更高,敏捷 IT 项目持续时间更长,成本也更高……英国和美国的首席信息官现在估计,近三分之一(32%)的敏捷项目在某种程度上失败了。”
尽管被广泛采用,常规项目的敏捷实践仍然有改进的空间。但是 AI/ML 项目遇到了一系列新的限制和问题,每一个都对企业中 AI/ML 的敏捷性产生负面影响。
AI/ML 增加了阻碍敏捷性的新的复杂性
与常规(即非 AI/ML)项目相比,企业中的 AI/ML 项目面临几个额外的约束和挑战,每个都阻碍了敏捷性。在大多数情况下,这会减慢敏捷项目的速度,但在最坏的情况下,它们会迫使敏捷项目回复到瀑布方法:
- 官僚主义的数据获取流程:数据是 AI/ML 的命脉,但大多数企业在获取必要的数据时都会遇到严重的延迟,这主要是因为从遗留系统中提取数据时需要官僚主义的流程,而绝大多数企业数据都是在遗留系统中管理的。
- 数据科学家需要“无阻碍”的数据:无论数据被视为私有(客户数据)还是机密(财务数据),或者介于两者之间,数据科学家需要的大部分数据都被视为敏感数据,需要“无阻碍”的数据,这推动了对额外安全措施的需求,以维护企业的安全态势。
- 不成熟的云安全实践 : AI/ML 需要高性能硬件(GPU 等)。)在企业中不容易获得,迫使许多企业考虑将云用于他们的 AI/ML 项目;虽然云安全实践现在在许多企业中日趋成熟,但不幸的是,云数据安全实践在几乎所有企业中都相当不成熟。
- 繁琐的 AI/ML 治理过程:对模型可再现性、可追溯性和可验证性的需求迫使企业采用更加严格和有纪律的 AI/ML 模型生命周期。不幸的是,许多企业背负着企业治理实践的负担,这些实践没有发展到解决 AI/ML 的需求;这在高度监管的行业(金融服务、医疗保健、政府等)中更为严重。)法律法规强加了额外的数据隐私约束并要求保留人工制品。
人工智能/人工智能项目面临的独特限制和挑战会导致材料延迟和瓶颈。鉴于这些问题,即使是最好的 AI/ML 项目也可能从敏捷退化回瀑布方法。
接下来的段落将更详细地讨论每一个问题,找出潜在的根本原因,并提供我使用过或见过的解决和克服这些问题的实用步骤。
Photo by Alex Kotliarskyi on Unsplash
问题#1:官僚的数据获取过程
大多数企业都有旧的遗留系统,这些系统保留并管理着绝大多数企业数据。我们经常发现有用的数据分布在众多的系统和数据存储中,很难找到、理解和获取。
事实上,在最近的一篇文章中,埃森哲发现超过三分之一的公司的数据存在于孤岛中,这是一件大事,认识到大多数有用的模型需要跨多个领域/孤岛的数据,并且每个“孤岛”都有自己的所有者/决策者,可能还有自己独特的数据获取和治理流程。简而言之,从多个“筒仓”中获取数据需要花费大量时间,并且会降低项目速度。
更糟糕的是,埃森哲发现,几乎一半公司的项目也存在数据质量问题,超过三分之一的公司没有足够的可用培训数据。数据质量问题有很多种,从丢失或不正确的值到引用完整性问题。事实上,研究和个人经验表明,通常 50–80%的 AI/ML 项目工作都花在工程数据上,以支持数据科学家的工作。
AI/ML 的格言是,更多的数据驱动更好的模型。但是,当数据很难获得时,企业数据科学家必须用他们能找到的东西来凑合,这些东西往往远远少于他们所需要的。因此,数据采集占用大量时间不足为奇。
**解决方案:只确定和优化改善数据采集的几个关键步骤:**正如人们所说,老虎不能改变它的条纹,但我认为它行为的小元素是可以训练的。稍微扩展一下类比,我的经验是,并不是所有的企业过程都能够或者需要被简化以加速数据获取。
相反,捕获两个关键属性(数据所有者和数据结构)的简单活动对推动数据获取过程大有帮助。
首先,数据所有者被定义为被授权允许访问数据的人/角色。有了这个,我们就可以确定谁,也许是如何,对我们需要获取的数据作出访问和授权决定。
其次,找到解释我们希望获取的数据的结构(存在哪些列,它们的分布)的文档将极大地简化安全性考虑,同时也有助于未来的数据工程活动。
**解决方案:建立一个基本的数据目录:**前面提到的数据所有者和数据结构属性对其他项目都很有用,并且被认为具有持久的价值。在我的客户那里,我们将这些信息保存在一个“数据目录”中。
我们从一个内部应用程序开始,这个应用程序只是一个带有浏览器用户界面的数据库,提供基本的搜索/查找/编辑功能,并用前面提到的关键域(例如,客户、帐户、产品)的数据属性填充它。
有趣的是,我们发现随着数据的不断增加,数据目录(以及它的底层架构)发展到支持许多领域,并扩展了许多其他属性(数据、表和文件结构、样本数据、安全性考虑等)。)并很快成为整个企业中数据资产的基础记录。它成为优化企业官僚数据获取流程的关键因素。
Photo by Tobias Fischer on Unsplash
问题 2:数据科学家需要“清晰”的数据
企业数据安全和隐私政策不仅提供保护,还提供约束。然而,AI/ML 还有另外一个独特的安全和隐私挑战,这使得事情变得相当棘手。过去,数据存储在被锁定的生产系统中,只有在受控和特定的情况下应用程序才能访问,即使可以访问,生产数据也被严重屏蔽。
但是,今天的数据科学家有一个基本需求,即以无屏蔽的形式访问生产数据。简而言之,如果数据科学家在模型开发中需要某个数据属性或特征,那么它必须是“透明的”(无屏蔽的)。
不幸的是,大多数企业以前都没有处理过“明文数据”的安全问题,通常也没有为设计和实施安全策略来处理这类请求做好充分准备。在许多情况下,理解特定数据请求的安全含义所需的信息(“元数据”)是不可用的,使得团队争先恐后地找出各种表、文件和字段中哪些是实际有用的,然后就数据安全分类进行辩论。不用说,这需要很多时间。
解决方案:提供明确标识数据安全需求的元数据:我们通过在数据目录中捕获安全策略来解决这个问题。特别是,数据的敏感性(例如,“公共”、“机密”、“个人身份信息”)被分配给每个表或文件,并保存在数据目录中。
最终,我们将能够向数据目录添加更详细的安全策略(按列/字段甚至行列组合的安全策略)以及访问数据所需的角色信息,从而简化数据访问和授权请求。
Photo by Samuel Zeller on Unsplash
问题 3:不成熟的云安全实践
如今,许多企业利用云能力进行通用计算,但很少企业利用云能力进行人工智能/人工智能。不幸的是,在许多情况下,我看到企业 AI/ML 向云的迁移受到不成熟的云安全实践的阻碍。
更具体地说,根本问题与以下事实有关:大多数有用的 AI/ML 建模活动都需要访问敏感数据,但不幸的是,默认情况下,驻留在云上的数据是公开可用的,这引起了企业安全团队的极大关注。经验表明,按照大多数企业可接受的标准保护云资源是一项重大的工程工作。
不幸的是,只有最先进的企业能够提供在云上支持 AI/ML 所需的安全能力。下面是解决这个问题的一些建议。
**解决方案:建立基础数据存储策略:**有许多关于此主题的书籍,但我发现几个基本策略是不可更改的,包括:(a)建立定义明确的安全边界,(b)安全边界内外的数据泄漏为零,©所有数据存储和通信都经过加密,密钥以及密钥轮换流程归企业所有,(d)对存储区域的访问由基于角色的访问控制(RBAC)机制管理,该机制与企业用户组角色定义(例如:企业 AD 或 LDAP)相集成
解决方案:为数据存储和处理创建安全的云“围墙花园”:我对“围墙花园”的定义很简单:它是企业云租赁中的一个区域(多个虚拟机、多个运行的产品,不要与 Docker 容器混淆),具有明确且不可渗透的安全边界。
为企业数据存储建立了一个主要的围墙花园,它允许为敏感的企业数据建立一个安全的存储库,这些敏感的企业数据被有目的地分开管理,以加强角色和责任的分离,并提供一定程度的管理隔离。
独立的数据处理“围墙花园”是动态建立的——一个数据科学家、一个项目或一个小组应该能够建立一个“围墙花园”——以允许数据处理,并通过基于角色的访问控制(RBAC)机制连接,控制谁可以查看哪些数据。
然而,请注意,必须监控关键云安全组件的配置漂移是至关重要的,这有两个原因:第一,确保捕获企业做出的意外错误的云配置更改;第二,在任何数据泄漏发生之前,识别并修复云供应商对底层低层基础架构做出的暴露数据的任何更改(这种情况很少见,但确实会发生)。显然,上述任何项目的异常警报都集成到了企业的安全操作控制中心。
解决方案:提供演示如何实现数据安全策略的“模式”:根据我的经验,提供明确描述架构、设计和实现技术以及特定使用模式的“模式”有助于确保整个企业的一致性。
当它涉及 AI/ML 时,关于数据提取、浓缩和聚集的模式特别有用。当采用“平台”方法时,效率会更高,开发人员和工程师可以使用实现这些模式的通用组件和横切关注点。
在许多情况下,这些模式被保存在文档齐全的企业 GitHub 存储库中,并与数据目录中的相关数据元素进行交叉引用,这样就可以很容易地找到和使用它们。
Photo by Pop & Zebra on Unsplash
问题#4:繁琐的 AI/ML 治理过程
不幸的是,如今常见的是,公司 it 以治理传统应用交付的方式治理 AI/ML 交付过程。这导致 AI/ML 生命周期被相同的官僚流程、手动活动和移交所阻碍,加重了常规应用交付生命周期的负担。
虽然这对于延迟和更长的交付周期可能产生微小影响的公司应用程序来说是可以容忍的,但对于要求速度、敏捷性和响应性的下一代 AI/ML 应用程序来说,这在很大程度上是不可接受的。很明显,公司 IT 治理需要一点再工程来适应 AI/ML 的需求。但是从哪里开始呢?
AI/ML 治理的目标是确保提供证据,证明模型及其交付过程可以生成可重复、可追踪和可验证的结果。显然,这在许多方面是有益的:首先,在一些行业,如银行或医疗保健,可追溯性是强制性的,其中监管监督对 AI/ML 交付过程施加了重大约束。
例如,模型风险管理对分析过程提出了严格的要求,以便 AI/ML 模型按预期工作。在美国,这是通过SR 11–7等法规来解决的,而在加拿大,这是通过企业范围风险管理指南(E-23) 来解决的。然而,从医疗保健和生物技术到政府安全的许多其他行业都有类似的监管需求。AI/ML 治理推动了解决模型可追溯性需求所需的能力。
第二,客户和公司现在要求模型提供符合道德和不带偏见的可验证的结果。不幸的是,人工智能/人工智能模型的结果是由输入其中的数据和创建它们的人的未知偏见所驱动的,这可能导致基于种族、民族、性别或政治偏见的隐含决策。
越来越清楚的是,识别、理解、验证和提供结果的证据是 AI/ML 治理的核心原则,并且必须成为 AI/ML 模型有效性的核心决定因素。
AI/ML 治理提供了创建可复制和可重复的模型结果的动力和机制。需要新的技术和工具来解决这些独特的 AI/ML 治理需求。
解决方案:实施模型管理工具来简化和自动化关键 AI/ML 治理流程:现代 AI/ML 治理的基础是在整个模型生命周期中捕获 AI/ML 模型指标和元数据的能力。我的客户通常从基础开始—使用源代码控制工具(例如 GitHub 或 GitLab)维护的所有模型源代码和版本,允许数据科学家合作快速开发模型,同时确保模型的“记录簿”总是建立良好。
为了解决可重复性问题,我们要求将训练数据迁移到只读档案中,并且必须捕获模型源代码和用于训练它的数据之间的关联。
为了解决可追溯性问题,我们希望原始的源系统数据和用于转换和丰富数据的数据工程脚本能够被归档,从而提供对交付生命周期中所有数据变更的可见性。
为了解决可验证性问题,我们的目标是将所有的训练输出、日志和相关的工件归档,从而提供模型被证明按照规范工作的证据。
为了提供对所有模型工件的无缝访问,我们提倡创建一个提供两种能力的 AI/ML 市场。首先,它作为模型的目录,允许数据科学家轻松找到现有模型,并为创建新模型提供了一个简单的起点。其次,它还是一个控制面板,允许数据科学家和运营人员查看这些指标的状态,并做出模型提升和治理决策,还提供了一种实施“自助式”治理的方法,即在捕获指标和支持证据后,允许对模型进行单击式认证。
解决方案:提升当前企业 DEVOPS 能力以适应 AI/ML: 模型不同于传统应用,这对企业提出了新的挑战 AI/ML DEVOPS 能力。显然,数据管理、工程和迁移的重要性是至关重要的,对于那些只消耗通用计算资源的大多数企业来说,这是次要的考虑因素。
为了确保模型提供可重复、可追踪和可验证的结果,必须集成许多新的工具和框架(其中许多是开源的),并适应数据安全和隐私要求带来的额外安全约束。
Photo by Inês Pimentel on Unsplash
企业 AI/ML 敏捷性可以从神话变成现实
我一开始提出,企业中的“敏捷”人工智能/机器学习(AI/ML)在很大程度上是一个神话。我确信,随着企业开始他们的 AI/ML 之旅,他们将面临我在本文中确定的相同障碍:企业 AI/ML 敏捷性受到官僚主义的数据获取流程、复杂的安全需求、不成熟的云安全实践的制约。
挑战看似巨大,但我的经验表明,只要有一些新技术、工具和适度的重新设计,许多障碍都是可以克服的。希望我已经给出了一些解决方案的起点,这些解决方案将把您企业中的 AI/ML 敏捷性从神话变成现实。
我们对他们的神话
(Source)
为什么“发达国家和发展中国家”的区别不再有效:现实项目第 4 集
在媒体传播的所有神话中,也许没有比我们对他们更有害的了:这种观点认为世界分为两个群体——一个是善,一个是恶——所有事件都可以被视为两者之间的斗争。这种对世界的两面性观点利用了我们形成部落的自然趋势,并在许多情况下得到应用,从政党到经济体系,以及“发达国家与发展中国家”的形式在最后一种情况下,这表现为:发达国家=低出生率的富裕国家(假设是美国)对发展中国家=高出生率的贫穷国家(他们)。
二元观点可能会成为引人注目的新闻(冲突和部落主义肯定会引起我们的注意),但这是错误的。所有的人类生活,从个人的收入、身高、性别,到国际的政府体系、经济体系、国家财富,都不存在于两种状态中,而是沿着一个连续体存在。此外,我们通过将人们分成两组来使他们失去人性让我们的本能和认知偏见替我们思考,而不是使用我们的理性。在这篇文章中,第四集的现实项目致力于用数据减少对世界的误解——我们将看到为什么发展中国家和发达国家之间的区分不再适用,而是看看看待国家的真实方式。
现实项目的前一集,关于全球核武器的在这里。你可以通过在媒体上搜索标签找到所有的现实项目。
数据
对于这篇文章,我们将主要依靠汉斯·罗斯林的书:*事实:我们对世界误解的十个原因。*其他来源包括世界银行贫困页面,YouTube 视频“用你从未见过的最佳数据揭穿第三世界的神话”,以及文章“我们应该继续使用‘发展中世界’这个词吗?”。我用 Gapminder 数据探索工具制作了这些图表,你可以免费下载(它包括数据)。
首先,我们有必要看看这种适用于国家的二元观念起源于何处。“发展中国家”一词可能是从“第三世界”演变而来,后者最初指的是在 20 世纪 50 年代既不与共产主义的苏联集团结盟也不与资本主义的北约结盟的国家。这些国家往往是前殖民地,努力为公民提供体面的生活水平,而“第三世界”很快就意味着高出生率的贫穷国家,现在被称为发展中国家。
诚然,在 20 世纪 60 年代的某个时候,这种区分确实有意义——或者至少符合现有的数据。在下面的图表中,我们可以看到 y 轴上的生育率(每个妇女的生育数)和 x 轴上的收入(人均 GDP ),这是所有有数据的国家 1960 年的数据。
Fertility Rate vs Income in 1960 (created with Gapminder Data Exploration tool).
(颜色代表世界地区:黄色=欧洲,蓝色=非洲,绿色=美洲,红色=亚洲+澳大利亚)。有一个相对明确的分组,因为欧洲国家加上一些美洲和亚洲国家往往更富裕,每个妇女生育的孩子更少(右下)。另一方面,非洲国家几乎全都有高出生率和低收入。发展援助在二战后开始兴起,因此,在当时,这种分类允许非政府组织和政府集中精力。
然而,自 1960 年以来,世界形势发生了巨大变化。让我们看看 1990 年的同一张图表,当时苏联刚刚解体。
Fertility Rate vs Income in 1990
现在我们看到的不是分组,而是线性过渡。国与国之间仍然存在差异,但存在的明显差距已经让位于一条平滑的线。1960 年,全球生育率极高,每名妇女生育 5 个婴儿,但 1990 年已降至 3 个。极端贫困率——每天不到 2 美元——也同样下降了,从 1960 年的 60%下降到 1990 年的不到 40%。
这些趋势——生育率下降和贫困减少——自 1990 年以来有增无减。下面是最新的世界图片:
Fertility Rate vs Income in 2018
我们在这里看到的被命名为“大融合”虽然仍有分歧,但没有一条鸿沟将国家分开;相反,他们沿着一条连续的收入线排列。在这个图中画一条单独的分隔线是不可能的,因为只有一个平滑的过渡。世界各地的国家都变得更加富裕,因此寿命更长,儿童死亡率降低,每个妇女生育的孩子更少。
值得注意的是,中国和印度(可见的大红色气泡)经历了极端贫困的减少,导致 2018 年极端贫困率低于 9%的世界新低。新的全球出生率为每名妇女生育 2.5 个婴儿,接近 2.1 的替代率。
当我们看一个类似的儿童存活率与生育率的图表时,我们可以看到同样的趋势。在 1960 年,发展中国家和发达国家之间的差距更加明显(左图),但自那以后,世界再次趋同(右图)。
Children surviving to age 5 vs fertility rate in 1960 (left) and 2017 (right)
旧盒子显然不再合适了。我们将在下一节讨论更精确的特性。
我们将以最后一个画面来结束这一部分:自 1800 年以来全球收入分配的变化。从新闻中获得你对世界的看法是一回事,但用真实的数据观察发生在你眼前的变化是完全不同的。随着世界各地收入的增加,全球极端贫困率(垂直线)从 86%下降到 15%以下(2018 年,世界银行报告该比率低于 10%)。
如果你仔细观察,你会发现在 1960 年左右出现了一个缺口——这正是“发展中”和“发达”这两个词首次出现的时间。然而,随着动画的继续,差距慢慢消失,直到收入沿着一个连续的分布存在。收入的分离——被称为“大分化”——是一个真实的现象,但新的情况是一个大趋同,因为几乎所有地方的收入都在增加。
两组不同国家之间“差距”的消失意味着“发展中国家”和“发达国家”不再准确地代表国家。如果我们使用这种区分,这意味着将人均国内生产总值为 17,000 美元的墨西哥和人均国内生产总值为 1,200 美元的莫桑比克归入同一类别。换句话说,二元区分太宽泛了。尽管如此,正如在 20 世纪 60 年代,某种形式的国家分裂是有用的,因为它让我们找到有类似需求的国家。如果两部分模型坏了,用什么来修复它?
更好的系统
在《事实真相》一书中,汉斯·罗斯林提出了一个四层的方法,根据相似的收入需求对国家进行分组。这些概述如下(摘自比尔盖茨关于这个话题的精彩文章)。
- 第一级:每天少于 2 美元。大约有 10 亿人处于这一水平,每天获得食物可能是一场斗争。
- 第二级:每天 2 到 8 美元。大约有 30 亿人处于这个水平,孩子们可以去上学,而不是去工作。
- 第三级:每天 8 美元到 32 美元。大约有 20 亿人在这一层,包括机动交通和高中。
- 四级:每天 32 美元以上。大约有 10 亿人处于这一水平,拥有省力的设备和可靠的医疗保健。
如果一定要这么想的话,一级是“下层”,二级、三级是全球“中层”,四级是“上层”。在这个体系中,世界上绝大多数人口被正确地归类为中产阶级或以上,反映了最近收入的大幅增长。
下面是随着时间的推移,世界人口在各个层次上的分布情况:
Raw number of people on each level over time (Source)
在 1800 年,几乎全世界的人口(85%)都生活在第一层。2018 年,只有 15%的世界人口仍在那里,中产阶级的增长速度远远超过极端人群。
每个人代表大约 10 亿人,实际水平和美元数额如下:
Four Income Levels Proposed by Hans Rosling at Gapminder
四层体系是对二分制的改进。罗斯林的方法是有用的,因为它比二元分类更准确地抓住了不同国家的需求,它使我们能够清楚地看到随着时间的推移取得的进展,并防止我们陷入美国与他们的思维类型。(更不用说这些数字计算得非常好)。虽然这个论点看起来像是语义学,但它实际上很重要,因为我们如何衡量决定了我们如何行动。
(还有其他系统可以解决同样的问题。国际货币基金组织仍然使用先进与新兴经济体的二元对比(T1),联合国开发计划署(T2)使用连续人类发展指数(T3),世界银行(T4)最近已经停止使用“发展中国家”和“发达国家”的术语(T5)。还有一个令人信服的理由是将四个类别扩展到五个类别,第五个代表富足。)
为什么这很重要
为什么任何测量都很重要?答案是:通过观察原因和结果,它帮助我们找出解决问题的方法。考虑一个典型的连续人体测量,体重。如果你正在努力减肥,最好的开始之一是简单地每天称体重,这样你就可以知道你是否走在正确的方向上。否则你怎么知道你的(非)干预是否有任何影响?行动——衡量结果——调整行动的过程是我们个人在任何追求中提高的方式。全球发展也是如此:按照连续或四级尺度进行衡量,可以让我们清楚地看到一段时间内的进展,并将具体的改进与原因联系起来。
当我们开始考虑使用二进制还是多类别时,权重的比喻也成立。如果只有两种状态——胖和瘦——我们对很多人的分类是不准确的,如果你的状态年年都没有变化,就很难保持动力。我们最好按照类别来思考——肥胖、超重、健康、体重不足——这样我们就可以向个人(或我们自己)提出重要的建议,来指导他们的减肥行动。
谈到全球贫困,似乎有理由感到绝望。目前有 7 . 5 亿人——大部分在撒哈拉以南非洲——处于极端贫困之中。然而,我们不应该就此止步,一旦我们开始挖掘数据,情况会变得好得多:在过去 30 年里,超过 12 亿人摆脱了极端贫困以及在未来几十年内消除极端贫困的真正可能性。在二元世界观下,我们冒着失去所有这一切的风险,因为我们把与我们收入水平不同的人都归为发展中国家。在四层框架中,我们可以看到,实际上约 85% (6/7 亿)的人生活在第二层或更高层,最大一部分人口生活在全球中产阶级(第二层和第三层)。如果我们再看一下一段时间内的水平分布图,我们会看到很多充满希望的理由:
Number of people on each income level over time. (Source)
中产阶级正在壮大,而第一层(“下层”)正在迅速萎缩。这不仅对那些国家的人民有好处,而且对全世界的每个人都有好处。随着国家变得越来越富裕,公民对生活的满意度也越来越高(这是一个比日常幸福更好的衡量标准):
Dissatisfaction with life versus GDP per capita (Source).
此外,随着收入的增加,生育率下降,因为更好的保健导致更少的儿童死亡,因此,妇女生育更少的婴儿:
Fertility rate versus average income (source)
(生育率下降还有许多其他原因,你可以在我们的世界数据生育率页面上读到。)有些人担心人口过剩(根据数据和最佳估计,我不是其中之一)如果你是其中之一,限制人口增长的最佳方式就是让所有国家的人民摆脱贫困。随着家庭的孩子越来越少,他们可以在每个孩子身上花费更多的资源,让他们有更好的机会取得成功,然后他们可以将这种成功传给他们的孩子,减少贫困和降低生育率的良性循环将继续下去。
结论
你可能会说,归根结底,这只是语义上的。然而,“发达国家与发展中国家”的二分法不仅仅是一个词语的选择,它是一种思维模式。从本质上来说,二元世界观在智力上是懒惰的,因为它意味着不看数据;它是不人道的,因为它让我们把个人视为可怕的他者,而不是和我们一样为健康、繁荣和下一代更好的生活而奋斗的人。
“现实项目”不是为了了解事实让你觉得高人一等,而是用事实鼓励人们为人类的长期发展做出贡献。“发达国家对发展中国家”的神话是一个很好的起点,因为它提供了一个展示乐观数据的机会,谈论我们对世界的看法是如何错误的,并做出温和的纠正。一旦我们理解了世界变得更好的原因和方式,我们就可以确保它继续这样下去。作为第一步,从看待事情开始——在你的个人生活中和在国际层面上——不要非黑即白,而是要有一个尺度,即使存在分歧,也要显示出进步及其原因。
一如既往,我欢迎反馈和建设性的批评。可以通过推特 @koehrsen_will 联系到我。