TowardsDataScience 博客中文翻译 2020(三百五十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

从零到英雄学习 Python 所需的一切

原文:https://towardsdatascience.com/everything-you-need-to-learn-python-from-zero-to-hero-3dc950cb1b4c?source=collection_archive---------5-----------------------

计算机编程语言

分享我用来学习 Python 的资源,从书籍、课程、播客到编码网站和文档

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

维克多·加西亚在 Unsplash 上拍摄的照片

在这个编程技能非常有利可图的时代,每个人都在利用互联网上的大量资源来学习编程。你不仅可以开发供你个人使用的程序,或者仅仅是为了构建一些东西,而且你还可以通过大量的实践和正确的关系不断增强你的技能,从而在知名公司如谷歌、特斯拉、亚马逊等赢得一席之地。

史蒂夫·乔布斯曾说过一句名言:

“我认为每个人都应该学习如何给计算机编程(学习一种计算机语言),因为它教你如何思考。”—史蒂夫·乔布斯

也就是说,我自己正在开发我的编程技能,更具体地说是 Python,这是目前最流行的编程语言之一。这就是为什么我搜遍了互联网,收集了这个动物园或个人收藏的资源,我将用它们来真正全面地掌握 Python。我不建议任何人从这个列表中学习每一个资源,因为一个人的时间是有限的,所以一定要选择几个你想使用的和你认为可以获得最大收益的资源。

有些书和在线课程是免费的,有些不是,所以在决定付费之前,一定要确保它们是你学习和发展的好投资。我希望这篇文章对任何想学习 Python 的人来说都是有用的资源。

目录

  1. 在线课程
  2. 油管(国外视频网站)
  3. 编码挑战
  4. 博客和网站
  5. 播客
  6. 时事通讯
  7. IDEs 与环境

书籍是信息的驱动力,为一个更伟大、更有知识的社会提供动力。从书本中学习技能总是很棒的,因为它们是可靠和紧凑的。我发现编程和编码的书最好是电子书,这样更容易参考和使用。这里有几个我觉得对学习 Python 很有帮助的例子。

初学者

这构成了 python 的基础,从安装和设置 Python 到用类和函数(OOP)编写成熟的程序

  • 用 Python 自动化枯燥的东西(第二版) —这是一本免费的两部分书籍,涵盖了自动化计算机上单调任务的基础知识和项目,帮助初学者直接应用他们的知识。
  • Python 速成教程(第二版) — PCC 对概念有更详细的解释,也是一本分为两部分的书,第一部分是基础知识,从打印 hello world 到 OOP,从头开始编写类和函数,第二部分是 3 个有趣的小项目—创建游戏、可视化数据和 web 应用程序。
  • Think Python 2e——Think Python 是前两本书的后续免费书籍,主要是因为它教你计算机科学的基础知识,并使用 Python 来实现这一目标。
  • 艰难地学习 Python 3——这是编程初学者钻研 Python 的另一个选择。这并不困难,因为你不会理解任何东西,这是一种不同的学习方法,作者将其解释为“指导”,通过重复来培养技能。

中级/高级

这些包括更高级的概念,并教你如何编写 pythonic 代码以及项目和应用程序。

  • 学习 Python(第五版) —这是一本厚重的书(1600 页),比你从头到尾通读一遍的书更适合作为参考。当你想深入某个特定主题并了解它的全部内容时,这是一本很棒的书。
  • 有效的 Python —写更好的 Python 的 90 种方法合集是本书的副标题,不言自明。这些技巧来自 Python 语言的老手,肯定会对您的开发有用。
  • Python 食谱 —这本书包含了无数应用程序的食谱(因此得名食谱)。这种食谱的合并是为那些想要测试最新工具的有经验的程序员准备的,因为每个主题都给你一个现成的代码块,以及解释
  • 流畅的 Python —这本书帮助你对 Python 有一个很深的理解,并教你表现抽象和具体。它告诉你如何和为什么。它更加高级,并且期望您事先能够熟练地在可变项目中使用 Python。

数据科学

  • 从零开始的数据科学 —如果你刚刚接触数据科学,从零开始的 DS 是一个很好的资源。要了解更多,请查看我的文章
  • python like you mean it—PLYMI 是一个免费资源,用于学习 Python 和 NumPy 的基础知识,因此它非常适合那些学习 Python 进行数据分析和机器学习的人。
  • Python 数据科学手册——这是一本免费手册,面向那些希望使用 Python 处理数据操作、转换、清理、可视化和机器学习模型的人,这些都是数据科学家的日常任务。Python 中科学计算的必备。
  • 用于数据分析的 Python—以数据科学的数据分析部分为中心,介绍了解决大量数据分析问题的库。由熊猫图书馆的作者撰写,这本书解决了许多实际研究,是有抱负的分析师的理想选择。

机器学习

算法

  • Grokking Algorithms —这是一本很棒的书,用直观的方式教你关于算法的知识,给出的代码例子都是用 python 写的。对于程序员来说,学习算法是至关重要的,因为它允许你考虑不同类型的算法在不同时间复杂度(大 O 符号)下的权衡。另外,它在 manning.com 是免费的
  • 使用 Python 的算法和数据结构解决问题——这是一本学习算法和数据结构解决问题的免费电子书,是计算机科学的基础。

更简洁详细的列表,请看这篇文章

在线课程

在线课程就像大学教育一样,但是完全免费。MOOCs 的兴起对经济能力较差的社区非常有利,并提供了无数新的机会,这些机会曾经因贫困而不可能实现。网上学习是一种祝福和礼物,我们不应该把它视为理所当然。这里有一些我知道的很棒的 Python 课程。

介绍

  • 面向所有人的 Python——可能是最受欢迎的 Python 入门课程。在 Coursera 和 YouTube 上,由 Charles Severance 教授。查看免费电子书。
  • 计算机科学和 Python 编程简介 —麻省理工学院的《计算机科学导论》是编程初学者学习 Python 计算和问题解决的绝佳课程。
  • 谷歌的 Python —谷歌的 Python 课程是掌握 Python 基础或复习概念的一种快速而有趣的方式,它配有讲座视频、交互式代码和练习。
  • FreeCodeCamp——以免费课程和令人惊叹的 YouTube 教程闻名,FCC 最近发布了 Python 课程,供所有人免费学习。
  • 实用 Python 编程 Github 上的一门免费课程,向您传授 Python 的实用知识,如处理数据、测试和调试,以及高级主题,如函数装饰器、静态和类方法。

数据科学和人工智能

  • Python UMich应用数据系统专业——该专业也非常受所有有抱负的数据科学家的欢迎,以 Python 授课,从基础到顶点项目,确保您做好充分准备并具备应用数据科学方法和技术的技能。
  • 计算思维和数据科学简介——这是用 python 讲授 cs 简介的延续,更侧重于计算思维和数据科学,也用 Python 讲授。
  • CS50 用 Python 介绍 AI—CS50 是最著名的 CS 课程之一,它专注于使用 Python 中的机器学习,向您介绍算法和模型,这些算法和模型揭示了自动驾驶汽车、推荐系统等背后的隐藏机制。
  • 构建人工智能(Building AI)——这门课程面向任何想要提高人工智能相关词汇和技能的人,包括非程序员和可以用 Python 编程的人。

深度学习

  • fast.ai — fast.ai 是一门非常受欢迎的免费学习深度学习的课程,大部分课程都是用 Python 和 PyTorch 教授的。如果你对自己的 python 能力以及对机器学习的良好理解有信心,fast.ai 是你迈向精通的下一步。

其他网站,如 Dataquest.ioCodeacademyEducative.iopluralsightUdemy 都是很好的课程,有简明的路径让初学者轻松完成,但它们相当昂贵,所以这真的取决于偏好。

油管(国外视频网站)

YouTube 是互联网诞生以来最伟大的平台之一,尽管它有大量的错误信息、点击诱饵和成堆的广告。这仍然是学习新技能的最好方法之一,这里有一些 YouTube 频道,里面有令人惊叹的 Python 教程。

  • 科里·斯查费——一个伟大的编程渠道,涵盖不同技能水平的主题,包括 Python、Git、开发环境、终端、SQL、JS、cs 等等。他的 Python 播放列表有超过 140 个视频,并且还在增加,这对初学者来说是惊人的,非常实用。
  • Sentdex——除了 python 教程,sent dex 还有涵盖机器学习、数据分析、web 开发、游戏开发等等的视频。他的 Python 教程范围很广,涵盖了机器学习非常基础的到从头构建神经网络
  • TechWithTim —资源丰富多样的 Tim 拥有大量关于多种语言的教程,他的 python 教程涵盖了许多主题,包括构建机器人机器学习聊天机器人神经网络,以及许多信息视频。
  • FreeCodeCamp——它以许多长且内容丰富的视频而闻名,这些视频帮助初学者从头开始创作。他们在这个播放列表中有很棒的 python 视频。
  • 德里克·巴纳斯——一个伟大的 Youtuber 用户,他涵盖了大量编程主题,有一个关于 ML 和数据科学的惊人系列

编码挑战

编码挑战就像轻推,帮助你巩固你的知识,同时学会新的技巧来提高你的编码能力。虽然它在编码面试中使用并不是一个程序员能力的真实表现(通过足够的练习,一个人最终可以记住挑战的答案),但它对培养编程的习惯很有帮助,并帮助你衡量你当前的能力。

  • 伟大的用户界面和设计,我个人使用它,我认为它有一个伟大的概念,用它学习编程很有趣。
  • 被许多公司用于工作面试的 HackerRank,一天一个问题会增加你到时候解决编码问题的机会。
  • exercisem—一种在命令行界面中应对编码挑战的有趣方式。有一个 python Track,你可以选择实践模式或导师模式(导师对你的解决方案给出评论)
  • Python 挑战赛——初学者学习 Python 的一种有趣方式,当你被讲座视频和书籍搞得精疲力尽时很有用
  • CheckIO —面向初学者和高级程序员的编码游戏,在这里你可以通过使用 PythonTypeScript 解决引人入胜的挑战和有趣的任务来提高你的编码技能

更多的编码挑战网站,请查看我的文章20 大编码挑战网站

博客和网站

博客和网站是互联网上的信息口袋,就像图书馆里的书一样。有大量的程序员和资深人士对编程给出了惊人的解释和启发性的见解,还有教程和文档。在 StackOverflow、Reddit 和 Discord 这样的网站上,你可以与成千上万的其他初学者一起努力解决一个问题,或者完全被一位 10 年经验丰富的程序员的惊人的一行解决方案难倒。这里有一组在线 python 资源

在线指南/教程

备忘单

博客

Python 官方网站

Github repos

Reddit

StackOverflow

不和谐服务器

  • 查看我的文章,为 Python 和其他人加入服务器。

播客

播客是收听专家对话和讨论的免费门票,尽管其间偶尔会有赞助广告。堵车了?散步吗?每天从家坐一小时火车去上班?每天坚持听一些播客,如果你把它变成一种习惯,你会惊讶地发现你会学到多少东西,谢谢你的复利。

时事通讯

除了垃圾邮件和订阅,你已经好几个星期没联系了,高质量的时事通讯,像詹姆斯·克利尔的,可以非常足智多谋,帮助你保持知情。如果你已经每天都在查看你的电子邮件,为什么不在里面放些有用的信息呢?这里有一些建议。

IDEs 与环境

要编程,你需要 ide 和对什么是虚拟环境的理解(基本上是用于不同类型项目的虚拟机,这样兼容性和版本控制就不会全乱了)。

  • SublimeText3 —非常适合学习和编写小程序和代码,因为它快速且易于使用
  • Atom —另一个轻量级且设计精美的 IDE,非常适合小程序和代码。
  • py charm——python 程序员构建东西的伟大工具,它与 anaconda 无缝协作。PyCharm + Anaconda 是数据科学相关项目的实际组合,但是您也可以将它用于 python 项目。如果你想获得 Pycharm Professional,可以通过 GitHub 学生开发者包免费获得。
  • Anaconda——一个令人惊叹的免费应用程序,它可以帮助你在一个地方管理成千上万的库和包,并消除编程和版本控制的大部分痛苦。
  • Visual Studio 代码 —有些更喜欢 PyCharm,有些喜欢 VScode。这取决于你用它做什么。虽然 VScode 更轻量级,耗电更少。
  • repl . it——当你只想在浏览器上快速运行或测试几行代码时,它是完美之选。
  • Kaggle 笔记本——伟大的数据科学相关的 python 代码。

摘要

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

照片由丹妮尔·麦金尼斯Unsplash 上拍摄

如果你一直对脸书、Twitter、Instagram 等价值数十亿美元的应用程序是如何构建的感到好奇,那么开始学习永远不会太晚,学习编程不仅能启发你了解应用程序运行背后的隐藏层,还能赋予你创造自己喜欢的东西的能力。

互联网上有大量的资源可以学习你感兴趣和好奇的东西,尤其是在经济不景气和失业率上升的不确定时期。掌握一项新技能可以为你带来更多的工作机会。

在线学习最重要的是专注和注意力,这两者都被社交媒体、流媒体服务和人们经常跳舞的应用程序高度利用。是时候用提高生产力和时间管理的应用程序来收回你的注意力了, Google Calendar 用于规划你一天的时间块, Todoist 用于创建你的 todolist,concept用于写日志和笔记,以及定时器应用程序 Forest 用于激励你专注并在工作中获得流动。

我希望你觉得我的文章很有资源,并在下面的评论中留下你认为对学习 python 有帮助的任何其他资源。在我的下一篇文章中再见,注意安全!

欲了解更多资源,请访问:

[## Stephen h67/python-resources-2019

9/6/20 更新了 Python 3 资源、书籍、网站、教程、代码挑战的精选列表。如果你有…

github.com](https://github.com/stephenh67/python-resources-2019) [## 常规 Python 资源

Python 速成班的指导原则是,“为了……你至少需要知道什么

ehmatthes.github.io](https://ehmatthes.github.io/pcc_2e/recommended_reading/general_python/)

如果您对学习数据科学感兴趣,就从这两个系列开始吧!

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b) [## 数据科学简介

关于什么是数据科学、大数据、数据和数据科学过程及其应用。

towardsdatascience.com](/the-data-scientists-toolbox-part-1-c214adcc859f)

查看这些关于数据科学资源的文章。

[## 2020 年你应该订阅的 25 大数据科学 YouTube 频道

以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers

towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客

面向数据爱好者的最佳数据科学播客列表。

towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

也关注我的其他社交资料!

请关注我的下一篇文章,记得保持安全

关于梯度下降你应该知道的一切

原文:https://towardsdatascience.com/everything-you-should-know-about-gradient-descent-49ed9f247637?source=collection_archive---------45-----------------------

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

丹尼尔·里昂在 Unsplash 上的照片

这是数据科学中最流行的优化算法之一。你知道它是如何工作的吗?

我为什么要看这个?

大多数机器学习模型使用某种优化算法来寻找产生最小误差的参数,梯度下降可能是这些算法中最受欢迎的一种。

如果你是一名数据科学家或从事机器学习工作,你肯定会使用某种使用梯度下降的算法。即使您可能永远不会自己硬编码它,理解它是如何工作的可以帮助您理解为什么您的模型没有给出好的结果,甚至根本没有收敛。

它是如何工作的?

梯度下降寻找导致函数局部最小值的参数。在最大似然算法中,该函数通常是某种代价函数,与模型输出和实际观测值之间的差异有关。

直觉

梯度下降在函数中选择一个随机点,并开始向周围的最低点“行走”,直到它达到局部最小值。起点是产生一定成本(误差)的参数的随机组合。接下来的步骤就是在附近找一个这个成本更低的点,移动到这个点上。

想象你在黑暗中走在一座山上,试图找到可能的最低点。你慢慢摸索着路,试图一直走下去。斜坡越平缓,你走得越慢,因为你越期待它到达终点。

Gif 来自 Gfycat

使其正式化

但是,在函数中搜索时,如何控制速度呢?利用函数在特定点的导数。

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

然后,您将使用成本函数 j(θ)在您现在所在点上的导数,按顺序更新您的函数参数θ,由⍺.进行调整

⍺是学习率(当算法“行走”时,你调整“步”的大小)。如果⍺太小,算法就会太慢。如果⍺太大,算法可能无法收敛甚至发散。

:=是一个赋值操作符,意味着我们把这样的值赋给变量。

所以,理想情况下,你希望自己的学习率尽可能高(这样你的算法运行得越快越好),而不至于高到发散。下次你的模型不收敛的时候,试着用一个小一点的学习率。

替代版本

对于非常大的数据集,梯度下降在计算上非常昂贵,因为它必须在每次迭代中计算整个数据集的 J。因此,让我们来看看一些更适合大量数据的替代方法。

随机梯度下降

随机梯度下降从随机洗牌开始。这很重要,因为它将一步一步地阅读观察结果,所以它们不应该有任何特定的顺序。然后,它将只为第一次观察计算成本函数,并只基于该观察向最小值迈出第一步。对于第二次迭代,它将做同样的事情,仅仅基于第二次观察。依此类推,直到它到达训练集中的最后一个观察值。如果您有很多数据,这仍然应该在合理的时间内产生令人满意的结果。

小批量梯度下降

小批量版本介于随机版本和经典版本之间。这里,它不是在每次迭代中只使用一个训练示例,而是使用一个用户定义的参数,大小为 b 的小批量。这意味着,例如,如果我们设置 b = 10,我们将在每次迭代中使用 10 个观测值进行梯度下降。这有时实际上比随机版本更快。如果你仔细想想,你会发现随机版本实际上是迷你批量的特例,当 b = 1 时。

结论

现在你知道了梯度下降是如何工作的,你知道了当梯度下降不收敛时,如何通过改变学习速率来修复它,以及如何通过实现它的替代版本来使它更快。

如果你喜欢这篇文章,你可能也会喜欢其中的一篇:

[## 线性回归:基础

回归技术帮助您测量变量的相关程度。他们允许你说,例如…

towardsdatascience.com](/linear-regression-the-basics-4daad1aeb845) [## XGBoost:理论与实践

了解最流行的算法之一是如何工作的,以及如何使用它

towardsdatascience.com](/xgboost-theory-and-practice-fb8912930ad6)

如果你想进一步讨论,请随时在 LinkedIn 上联系我,这将是我的荣幸(老实说)。

邪恶的约翰内斯·古腾堡

原文:https://towardsdatascience.com/evil-johannes-gutenberg-c1bdc97c616c?source=collection_archive---------38-----------------------

技术进步的另一个视角。

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

由 Merzmensch 的art breader制作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 J 奥汉斯·古腾堡是个邪恶的纨绔子弟。他扼杀了书籍的人文因素。在他的时代之前,人们汗流浃背地一个字母接一个字母地写文章,他们把一生都献给了写作和阅读这种独特的人类体验。

古腾堡发明了冷机,印刷了一本又一本的书。废话连篇,一旦写出来。他制造假新闻。在他的时代之前,恶作剧制造者必须手写他们的煽动性文章——这需要时间,并在一段时间内拯救了社会。现在,有了这个邪恶的机器,每个人都可以在最短的时间内印刷和传播假新闻。

毕竟,《我的奋斗》也是一本书,它没有在 20 世纪 30 年代纳粹阴谋者之间的手写手稿中流通,而是自豪地出现在纳粹德国的中央书店里。

邪恶的书…

…邪恶的 AI。

在过去,宣传需要人手来写。[……]只需很少的努力,GPT-3 就可以被引导以一系列风格写作:在最近的一项研究中,米德尔伯里国际研究学院的研究人员克里斯·麦古菲和亚历克斯·纽豪斯发现,它可以被提示生成可信的亲纳粹帖子,再现大规模射击宣言的写作风格,并像卡农信徒一样回答问题。GPT-3 的开发者明白滥用的可能性,并限制了访问的人数,尽管敌对国家可能很快就会开发出模仿版本。(《大西洋月刊》,2020 年 9 月 20 日)

在关于新技术及其对社会的影响的讨论中,人工智能滥用的愿景一直是一个大话题。现在,随着 GPT-3 成为全球作家,世界发现了一个新的妖怪,可以在信息启示录的情况下解决。

这种 topos——一种将人类与受害者并列的敌对技术——可能是现在前所未有的我们媒体中最受欢迎的主题之一(无论这种媒体代表的是什么颜色、政治运动还是国家)。

然而主要的话题仍然没有被提及:人类

我们已经看到错误的标签和不准确的数据集准备可以通过人工智能的完美表现带来可怕的结果。事实上,人工智能开发者对机器学习模型负有责任:数据集应该尽可能基于最高的多样性,人工智能模型必须无故障地运行。

但是他们做到了。即使不是那么明显和容易。

对于图片深度造假:

StyleGAN 实现了潜在空间投影,识别出一张疑似伪造的图像。(这并不总是完美的,但是给出了方法)。

对于视频 deepfakes:

AI 研究人员利用心跳检测在运动画面中寻找 deepfake。

对于自然语言处理生成的文本:

据我所知,OpenAI 正在为 GPT-3 生成的内容开发检测工具。它们还实现了各种语义标记功能,以在文本可能存在特定风险时发出信号。

独立于此,有一个 Chrome 插件 GPTrue of False ,它可以显示文本是 transformer 生成的还是人类编写的概率。

…仅提及人工智能社区为提供人工智能滥用的预防性保护所做的一些多方面的努力。

不幸的是,这些努力并没有真正接触到公众,或者对主流观众来说并没有真正的吸引力(与《黑镜》的恐怖故事相比)。

这不是对我们文明中普通成员数字能力不足的咆哮。我们的任务是提高对它的认识,为教育做贡献,开设人工智能,提供课程,写书和文章,走上数字街道。

即使技术焦虑的趋势现在似乎很流行,即使人们请求技术进步后退一步:

你不能通过破坏技术来修复社会。

EvoFlow:为什么我们更喜欢自己的气流解决方案

原文:https://towardsdatascience.com/evoflow-why-we-preferred-our-own-solution-to-airflow-cdd6d187784a?source=collection_archive---------71-----------------------

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

商业科学

通用的流量检查流程

EvoFlow 简介

EvoFlow 是由 Evo 的数据工程师和 devOps 团队开发的多功能平台,用于创建、调度和监控工作流。

编码工作流允许开发团队创建和共享他们产品的版本。这种协作过程可以在保持产品结构的同时进行,或者更好的是,在改进这些结构的同时进行。

EvoFlow 的创建是为了增强 ETL、Scraper 和其他数据管道检查的流程,但是它的功能远远超出了这些用途。

EVO 之路

那么我们为什么要创建自己的平台呢?毕竟,广泛采用的气流(【https://airflow.apache.org/】)可以做 EvoFlow 做的所有事情;早已成为标配。虽然气流的用处是没有争议的,但这个工具可能有点笨拙。有了这么多的功能,它实际上可以减慢简单的检查。我们需要一个工具来简化 ETL 和 Scraper 流程,而不是使流程进一步复杂化。

EVO 数据工程师和 DevOps 团队决定构建一个简化的平台,以便更快地实现我们的目标。我们将它命名为 EvoFlow,因为它是作为流检查的流而诞生的。

与气流相比,EvoFlow 的创建给了该团队一些显著的优势。使用 EvoFlow,我们可以受益于:

  • 由于平台的功能减少,结构更简单;
  • 由于对整个平台的了解而具有更高的控制能力;
  • 由于在使用的基础设施上构建了 EvoFlow 代码,因此具有更高的适应性;
  • 由于平台需求减少,基础设施成本降低;
  • 由于与广泛采用的警报管理器(https://prometheus.io/docs/alerting/latest/alertmanager/)的结合,警报管理具有更高的灵活性。

结构

EvoFlow 有五个关键组件,所有这些组件都可以在图 1 中看到:

  1. 来源包括 JSON、R、SQL、txt、Python、CSV 文件,加载所需任务中使用的数据;
  2. 规则指定了平台执行任务和进来所需的所有信息。yml 文件;
  3. Python 中定义的函数详细描述了要执行的操作;
  4. 日志在执行时打印出来,并存储在 SQL 数据库中;
  5. 警报由 Alertmanager 管理;
  6. 报告构建为元数据库(https://www.metabase.com/)仪表板。

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

图 EvoFlow 平台的方案(图片由作者提供)。

成分

源文件包括几个扩展名,通常用于将数据加载到 EvoFlow 平台中。对数据源的唯一要求是它们不能在加载过程中改变数据。例如,SQL 查询应该只包含 select 语句:

SELECT'dates/weeks' AS items_type,'sql execute' AS check_message,MIN(date) AS start_date,MAX(date) AS end_date,MIN(CONVERT(int, week)) AS min_week_diffFROMclient_calendar

规则是。定义 EvoFlow 要求(数据)、数据源路径(源)、检查要求(接受)、错误消息(error_message)、描述(check_descriptions)和严重性(severity)的 yml 文件:

# Check etl executionParameters:# Define the parameters required by the projectsql_string: 'TRUE'sql_connection: 'TRUE'sql_logs: 'TRUE'is_check: 'TRUE'email_alert: 'TRUE'Checks:
# Check files importfiles_check:type: sqlpath: '/functions/check_last_import_file_amount.sql'check_description: 'Check amount of files imported'error_message: 'The imported files amount is wrong'severity: Criticalacceptances:- compare_to_acceptance(comparison="(abs(data['last_import'] - data['previous_import']) / data['previous_import']) < 0.1")package_check:
# Check ETL package executiontype: sqlpath: '/functions/check_package_error.sql'check_description: 'Check errors in the ETL package'error_message: 'Errors in the ETL packages execution'severity: Erroracceptances:- compare_to_acceptance(comparison="data['count_value'] == 0")

函数指定规则接受所需的所有动作和检查。它们通常用 Python 编写:

def compare_to_acceptance(comparison):"""Compare a given field to a provided acceptanceParameters:comparison (string): the comparison to executeReturns:0 if the results are within the acceptance, 1 otherwise"""# Initialise the list of resultsresults = list()# Iterate for each element and get the results of the checkfor i in range(0, len(self.data)):result = 0 if eval(comparison) else 1results.append(result)return(results)

日志通常存储在 SQL 数据库中,由 Alertmanager 管理,并报告为元数据库仪表板。

功能

EvoFlow 主要处理 ETL 和 scraper 自动化的检查。也就是说,它的功能还可以执行任何可能的脚本并管理相应的警报。

EvoFlow 目前用于:

  • 检查客户端 ETL 输出的质量;
  • 检查自动刮刀产生的数据质量;
  • 分析工具文件夹并识别自动化的问题;
  • 将每日汇率导入 SQL 数据库。

如果我们将来需要扩展 EvoFlow 的使用,该平台也具有完成这些任务所需的灵活性。

结论

EvoFlow 平台的开发改变了 EVO 组织的游戏规则。有了这个新的基础设施,我们能够:

  1. 识别和纠正自动化中的问题和错误的速度至少快四倍;
  2. 创建对数据和流程的新检查,并使用仪表板对其进行监控;
  3. 提醒所有参与使用工具的人,而不仅仅是开发人员;
  4. 创建独立的流动,可以存在于最常用的管道之外;
  5. 在运行代码流之前,自动评估代码的质量。

为了评估 EvoFlow 的性能,我们希望量化其影响。我们主要测量了在一项任务上花费的时间和警报的数量。根据任务的不同,花在这些任务上的时间减少了 2 到 4 倍。警报数量每周下降约 10%。

主要由于 EvoFlow 与 Alertmanager 的集成,警报数量持续下降。这个联合允许我们根据关联项目的名称和警报的严重级别(错误、警告、严重)来管理警报。此外,该集成还会自动创建与触发的警报相关的 Gitlab 问题,以确保每个警报都有适当的优先级,并确保解决该问题的任务被委派给正确的团队成员。

我们的早期结果显示了年轻的 EvoFlow 平台的前景。它已经带来了显著的投资回报,我们乐观地认为不久会有更好的表现。虽然我们不能建议像 EvoFlow 这样的简化平台是每个团队的正确解决方案,但我们对它迄今为止的成功感到高兴。

将整体架构迁移到微服务架构

原文:https://towardsdatascience.com/evolution-from-monolithic-architecture-to-microservice-architecture-c58246822ea4?source=collection_archive---------20-----------------------

微服务、框架和设计的原则

我们为什么需要微服务?

微服务是这几天的热门话题。但是为什么大家都在说微服务呢?什么是单片架构,什么是微服务架构?我将通过从整体架构到微服务架构的迁移过程来解释这一点。我还将介绍微服务架构的特点、优势,以及它面临的一些挑战。

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

独石。Zoltan·塔斯Unsplash 上的照片

什么是整体架构?

整体架构意味着我们将应用程序的所有功能放在一个归档包中进行部署和运行。例如,如果你使用 Java,你所有的函数都打包到一个 Jar 包或 War 包中。这种风格的架构可以称为单一应用程序风格架构,也称为整体架构。

单片架构的优势

这种架构有什么优势?它有很多优点,包括相对简单,大家都熟悉。此外,它是 IDE 友好的。ide 通常被设计成可以轻松地开发、部署、调试和分析单个应用程序。它非常容易部署,例如,由于只有一个 war 包或 jar 包,或者一个可执行程序,您可以很容易地将其部署在一个目录或多个目录中。

整体架构的缺点

当然,这种整体架构也有其缺点。缺点主要在于系统的复杂性,尤其是网上商城、网上银行等复杂系统。这些单个应用程序的代码库将会庞大而难以维护,这也很难理解。

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

单片软件的代码很难理解。照片由 Tim GouwUnsplash 上拍摄

况且由于代码基数特别大,启动要花很多时间。以前做单申请的时候,要半个小时才能开始,所以我们都有足够的时间去打乒乓球。

它缺乏可扩展性。由于所有的功能都放在同一个应用程序中,而如果我想改变一个微小的功能,比如我稍微修改了一下用户注册功能,但是后勤模块没有改变,甚至连后勤模块都没有改变,我不得不能够再次重新部署它,这是痛苦和低效的。

还有很多其他的缺点因为是单代码库,所以我们只能用一个技术栈,全 Java,全 C++,全 Python 等。,会有很多限制。这些都是单片架构的缺点。

如何解决单片架构的不足?

现在有这些不足,怎么解决呢?软件世界中的解决方案的方法论与通常的世界是一样的。当我们面对生活中复杂的问题时,我们的方法是分而治之,这和这个软件世界是一样的。整体架构简单来说就是 all in one,即将所有东西放在一起。如果我想解决这些问题,我必须通过一些划分。

首先,垂直划分会划分出完全不相关的应用。例如,用户注册模块和图片显示模块完全互不干扰。我们可以把它分成多个独立的模块,使它们耦合性更小。

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

分而治之是微服务之道。照片由 AlexUnsplash 上拍摄

当系统慢慢变得越来越复杂,单个模块可能更复杂的时候,我们可能会考虑再次分而治之,也就是横分。什么是水平分割?例如,物流模块可能需要访问用户信息,信贷模块可能也需要访问用户信息,等等。如果所有模块都访问同一个用户数据库,数据库负载将会非常高。因此,我们将它们横向划分,我们将所有与用户相关的放在一个较低级别的用户管理模块中,将与订单相关的放在一个订单管理模块中。这是解决单一架构缺陷的第二步。如果经过这两步划分,模块仍然非常复杂,我们将在系统中引入微服务模型。

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

整体架构与微服务架构

微服务模型

微服务模式目前没有一个严格的定义,但大致可以分为以下几个特征。整个系统按照业务场景来划分,比如刚才说的用户管理模块可能包括用户注册、用户登录等。我们根据业务场景来划分,这样它的扩展性可以更好。同时,服务通过几种语言无关的机制进行通信,包括 HTTP 的 RESTful 风格,这是常用的一种。

另外,**每个服务都是自主的。**简单来说,我的数据归我。仅作为示例,用户数据由用户管理模块管理。要让其他人访问用户数据,您需要其他人通过您的用户管理模块获取数据,而不是直接访问您的数据库。

还有一个特性,因为在它被分成越来越多的小服务之后,到最后,它的部署可能会比较困难,所以微服务模型需要一个自动化部署的特性

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

划分服务,直到它们变得非常微小。Jo Szczepanska 在 Unsplash 上拍摄的照片

当然,当你开发越来越多的微服务时,你可能需要考虑一种方法来管理它们。比如一个城市以前只有一个企业,你可以很容易的联系上。但是当以后几千家或者几百家企业发展起来了,你不可能一个一个找出来处理。也许会有工商局。当我寻找这项服务时,我首先寻找公共局,寻找提供这项服务的公司,我会找到联系地址。然后我再找一家公司和他沟通。这是集中管理的一个特点。

接下来,微服务在不同机器上的分布当然是自然的,多个服务、多个机器、多个实例被部署形成一个分布式系统。基于这些特点,微服务是有优势的,而这正是单片架构所缺乏的。

另一个优势包括对代码的更好理解。以前所有的代码都放在一起,大家可能看不懂,很复杂。但是一个服务模块可能只有一个简单的功能,如用户注册、用户登录、信用查询等。如此简单的功能模块,**代码简单,易于维护,开发效率高。**还具有良好的扩展能力。例如,我想在注册过程中添加一个电子邮件通知。是的,不需要编辑用户注册码。

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

代码简单且易于维护。由克里斯多佛·高尔Unsplash 拍摄的照片

技术堆栈的选择更加灵活,因为我们通过与语言无关的协议相互通信。比如商城推荐系统可以用流行的 Python 实现,商品管理系统还是用 Java。这没关系,因为通信协议是语言不可知的,这是它的优势之一。

另外,版本更新更加敏捷,因为每个模块都是单独维护的。

最重要的是它更健壮,这意味着如果单个模块挂起,不是所有模块都挂起。比如物流系统暂停了一个小时,但是我还可以进货,注册,登录。这对微服务来说是一个巨大的优势。

微服务的挑战

当然,世界上没有十全十美的事情。这些优势会带来一些其他的困难。微服务带来的困难有哪些?首先,它的复杂度会更高,因为它的服务众多,你管理起来会有困难。

此外,因为服务分布在不同的机器和不同的进程上,它们的事务很难控制。考虑像银行账户之间的现金转移这样的用例,用户从一个微服务中扣除了钱,然后调用另一个服务来转移现金。利用以前的整体架构,它可以确保通过数据库进行事务处理的即时性。那么如果是分布式的,**就需要通过复杂的机制来保证交易的即时性。**我会在后面的文章里继续说。

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

上千个微服务之间的连接会很麻烦。约翰·巴克利在 Unsplash 上拍摄的照片

另一个挑战是服务分工。**现在我们还没有一个如何划分的标准。**不同的公司甚至一个公司内的不同部门都会有各自的分工策略。

最后一个是部署。我刚刚提到,因为有更多的服务,比单一架构更难部署。过去,软件可能只有一个应用程序和一个服务,部署很容易。现在一个应用可能有上百甚至上千个服务,部署会有很大的挑战。

摘要

首先,我们简单介绍一下什么是单片架构,它的优点和缺点,我们必须继续通过分而治之的方法来解决它的缺点,然后逐渐演变为微服务架构,它的特点和优点为软件设计提供了巨大的改进。同时,我们还介绍了微服务架构实现这些优势将面临的一些挑战。

极限学习机的进化

原文:https://towardsdatascience.com/evolution-of-extreme-learning-machines-2c7caf08e76b?source=collection_archive---------46-----------------------

理解 ML

这些年来榆树是如何进化的,现在它们的地位如何?

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

多层结构。来源: 用榆树进行大数据的具象学习

注意!这只是榆树进化的一个主要概述。它并没有包括所有可能的版本和这些年来对 ELMs 所做的调整。

榆树是什么?

ELM(极限学习机)是前馈神经网络。于 2006 年由 G. Huang 发明,它基于逆矩阵近似的思想。

如果你不熟悉 ELMs,请先看看我的文章“极限学习机简介”。

进化是什么时候开始的?

我-ELM (2006 年)

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

工字形榆树结构。来源: 增量式极限学习机的一种改进算法

在 2006 年的原始论文发表后,黄和他的同事们发表了另一篇关于不同类型的 ELM 的论文,称为 I-ELM (增量 ELM)。顾名思义,I-ELM 是标准 ELM 网络的增量版本。I-ELM 的想法很简单:

从 l=0 开始定义最大隐节点数 l 和期望训练精度ϵ(l 为当前隐节点数):

  • 增量 l_t = l_{t-1} + 1
  • 随机初始化新添加的隐藏神经元的权重 w_l 和偏置 b_l(不要重新初始化已经存在的神经元)
  • 计算输出向量 H
  • 计算权重向量 β ^
  • 添加节点后计算错误
  • 检查 E < ϵ
  • 如果没有,则增加隐藏节点的数量,并重复该过程。

有一种可能是,l > L 在过程中的某一点和 E > ϵ 。此时,我们应该重复训练和初始化的整个过程。

增加网络大小的想法并不新鲜,通常比“手动”设置网络大小产生更好的结果。就 ELMs 而言,有一个缺点特别重要,那就是计算时间。如果你的网络碰巧很大(假设有 1000 个隐藏节点),在更糟糕的情况下,我们必须进行 1000 次矩阵求逆。

如果您对 I-ELM 感兴趣,您应该知道它有许多变体:

  • II-ELM(改进的 I-ELM)
  • CI-ELM(凸 I-ELM)
  • EI-ELM(增强型 I-ELM)

我不打算一一解释,因为这篇文章应该只是一个快速总结和一个起点,而不是关于榆树所有变种的整本书。除此之外,可能每个阅读这篇文章的人都在这里,如果他/她知道要找什么,他/她知道如何找到关于一个有趣主题的更多信息:P

P-ELM (2008 年)

在引入 ELM 的增量版本之后,另一个改进是使用修剪来实现网络的最佳结构。P-ELM(修剪榆树)于 2008 年由荣海军引进。该算法从一个非常大的网络开始,并删除与预测无关的节点。“不相关”是指节点不参与预测输出值(即输出值接近 0)。这个想法能够产生更小的分类器,并且最适合模式分类。

埃姆-埃尔姆(2009 年)

这个版本的 ELM 不是一个独立的版本,而是对 I-ELM 的改进。EM 代表误差最小化,允许添加一组节点而不是一个节点。这些节点被随机插入网络,直到误差不低于 ϵ

规则化榆树(2009)

从 2009 年开始,郑研究了 ELM 的稳定性和推广性能。他和他的团队想出了在计算 β ^的原始公式中加入正则化的想法。

现在看起来像是:

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

TS-ELM (2010 年)

两级 ELM (TS-ELM)是一个再次最小化网络结构的建议。顾名思义,它包括两个阶段:

  1. 应用前向递归算法从每一步随机产生的候选节点中选择隐节点。添加隐藏节点,直到满足停止标准。
  2. 对现有结构的审查。即使我们用最少数量的节点创建了一个网络来满足我们的标准,其中一些节点可能不再有用。在这一阶段,我们将删除不重要的节点。

凯尔姆(2010)

引入了基于内核的 ELM (KELM ),它使用内核函数来代替 H^T H 。这个想法是受 SVM 的启发,ELMs 使用的主要核函数是 RBF ( 径向基函数)。凯尔姆被用来设计深榆树。

V-ELM (2012)

基于投票的 ELM (V-ELM)是在 2012 年提出的,旨在提高分类任务的性能。问题是 ELM 的标准训练过程可能无法达到分类的最佳边界,然后随机添加节点。因此,靠近该边界的一些样本可能会被错误分类。在 V-ELM 中,我们不是只训练一个网络,而是训练许多网络,然后基于多数投票法,选择最佳网络。

ELM-AE (2013)

当 2013 年像 RBM自动编码器这样的想法开始流行时,卡斯努发表了一篇关于 ELM-AE (ELM 自动编码器)的论文。主要目标是能够再现输入向量,就像标准的自动编码器一样。ELM-AE 的结构看起来与标准 ELM 相同

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

榆树-AE 结构。来源: 大数据用 ELMs 的具象学习

有三种类型的 ELM-AE:

  • 压缩。高维输入空间到低维隐藏层(比输入少的隐藏节点)。
  • 平等代表权。数据维度保持不变(隐藏和输入中的节点数量相同)
  • 稀疏化。高维隐藏层的低维输入空间(比输入更多的隐藏节点)

标准 ELMs 和 ELM-AE 有两个主要区别。第一个是 ELM-AE 是无人监管的。作为输出,我们使用与输入相同的向量。第二件事是 ELM-AE 中的权重是正交的,隐藏层中的偏差也是如此。这很重要,因为 ELM-AE 用于创建 ELMs 的深度版本。

MLELM (2013)

在同一篇论文(使用 ELMs 进行大数据的表征学习)中,Kasnu 提出了一种称为多层 ELM 的 ELM 版本。这个想法基于堆叠式自动编码器,由多个 ELM-AE 组成。

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

多层结构。来源: 用榆树进行大数据的具象学习

你可能会问“为什么还要用 ELMs 创建类似于堆栈式自动编码器的东西呢?”。如果我们看看 MLELM 是如何工作的,我们会发现它不需要微调。这使得它比标准的自动编码器网络构建起来要快得多。就像我说过的,MLELM 使用 ELM-AE 来训练每个层中的参数,并删除输出层,因此我们只剩下 ELM-AEs 的输入层和隐藏层。

DELM (2015)

Deep ELM 是最新的(也是在撰写本文时 ELM 发展的最后一次主要迭代)之一。delm 基于 MLELMs 的思想,使用 KELM 作为输出层。

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

DELM 结构。来源: 深度极限学习机及其在脑电分类中的应用。

结论

这些年来,ELMs 一直在进化,并且肯定抄袭了机器学习领域的一些主要思想。其中一些想法真的很棒,在设计现实生活中的模型时会很有用。你应该记得那只是对榆树领域所发生的事情的一个简短的总结,而不是一个完整的回顾(甚至不接近)。如果您在 ELM 之前键入某个前缀,很可能已经有一个版本的 ELM 带有该前缀:)

参考资料:

  • 光-黄斌,秦-朱钰,徐志敬。《极限学习机:理论与应用》,2006 年出版
  • 光、雷震、萧启庆。“使用带有随机隐藏节点的增量构造前馈网络的通用逼近”,2006 年出版物
  • 荣,王海俊,姚谭,阿惠,朱,泽轩。(2008).一种用于分类问题的快速剪枝极端学习机。神经计算。出版
  • 冯、、黄、林广斌、庆平、盖伊、罗伯特。(2009).隐节点增长和增量学习的误差最小化极限学习机。出版
  • 、邓、郑、清华、陈、林。(2009).正则化极限学习机。出版
  • 蓝,苏,黄广彬(2010)。用于回归的两阶段极限学习机。出版
  • 萧、和。2016.一种用于回归的极限学习机优化方法。出版
  • 曹,九文,林,志平,黄,刘广斌,南。(2012).基于投票的极限学习机。出版
  • 卡森,李亚娜阿拉奇&周,洪明&黄,光斌&冯,智民。(2013).面向大数据的 ELMs 表示学习。出版
  • 丁、、张、南、徐、新郑、郭、丽丽、张、简。(2015).深度极限学习机及其在脑电分类中的应用。出版

最初发布于https://erdem . pl

语言模型的演变:N-gram、单词嵌入、注意力和变形金刚

原文:https://towardsdatascience.com/evolution-of-language-models-n-grams-word-embeddings-attention-transformers-a688151825d2?source=collection_archive---------9-----------------------

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

约翰尼斯·普莱尼奥在 Unsplash 拍摄的图片

在这篇文章中,我认为整理一些关于自然语言处理(NLP)这些年来的进步的研究是很好的。

你会惊讶于这个领域有多年轻。

我知道我是。

但是首先,让我们为什么是语言模型打下基础。

语言模型只是简单地将概率分配给单词序列的模型。

对于神经语言模型来说,它可能是像 N-Grams 一样简单的东西。

甚至预训练的单词嵌入也是从语言建模中导出的,即 Word2Vec、Glove、SVD、LSA

我倾向于把语言模型看作是一把更大的伞,其中包含了一大堆东西。

说完了,让我们从头开始。😃

注意:请容忍我到 2000 年。从那以后变得更有趣了。

1948-1980 年之前——N-gram 和规则系统的诞生

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

照片由蒂姆·比什Unsplash 上拍摄

总的来说,这一时期的大多数 NLP 系统是基于规则的,最初的一些语言模型是以 N-gram 的形式出现的。

根据我的研究,不清楚是谁创造了这个术语。

然而,N-Grams 的第一次引用来自克劳德·香农在 1948 年发表的论文“通信的数学理论”。

Shannon 在本文中总共引用了 N 元语法 3 次。

这意味着 N-Grams 的概念可能是在 1948 年之前由其他人制定的。

1980-1990 年——计算能力的崛起和 RNN 的诞生

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

一个单位递归神经网络的示意图(RNN),2017 年 6 月 19 日,作者 fdeloche ( 来源)

在这十年中,大多数 NLP 研究集中在能够做出概率决策的统计模型上。

1982 年,John Hopfield 引入了递归神经网络(RNN ),用于对序列数据(即文本或语音)的操作

到 1986 年,第一个将单词表示为向量的想法出现了。这些研究是由现代人工智能研究的教父之一杰弗里·辛顿进行的。(辛顿等人 1986鲁梅尔哈特等人 1986 年

1990-2000—自然语言处理研究的兴起和 LSTM 的诞生

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

一个单位的长短期记忆图(LSTM),2017 年 6 月 20 日由 fdeloche ( 来源)

在 20 世纪 90 年代,NLP 分析开始流行起来。

n 元语法在理解文本数据方面变得非常有用。

到 1997 年,长短期记忆网络 (LSTM)的概念由 Hochreiter 等人(1997)提出。

然而,在这个时期仍然缺乏计算能力来充分利用神经语言模型的最大潜力。

2003 年——第一个神经语言模型

2003 年,Bengio 等人(2003)提出了第一个前馈神经网络语言模型

Bengio 等人(2003)的模型由一个单独的隐藏层前馈网络组成,用于预测序列的下一个单词。

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

本吉奥等人于 2003 年提出的第一个神经语言模型(来源)

虽然特征向量在这个时候已经存在,但是 Bengio 等人(2003)将这个概念带给了大众。

今天,我们称它们为 Worder 嵌入。😃

注意:还有很多其他的研究,比如用神经网络进行多任务学习 (Collobert & Weston,2008)以及在这十年中研究的更多。

2013 年——广泛的预训练单词嵌入的诞生(Google 的 Word2Vec)

2013 年,谷歌推出了 Word2Vec 。(米科洛夫等人,2013 年)

Mikolov 等人(2013)的目标是引入新技术,以便能够从可跨 NLP 应用程序转移的庞大语料库中学习高质量的单词嵌入。

这些技术是:

  • 连续词袋(CBOW)
  • 跳跃图

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

Word2Vec 型号。CBOW 架构基于上下文预测当前单词,而 Skip-gram 在给定当前单词的情况下预测周围的单词。作者 Mikolov 等人,2013 年(来源)

Mikolov 等人(2013)的预训练单词嵌入的结果为未来几年的大量 NLP 应用铺平了道路。

直到今天,人们仍然在各种自然语言处理应用中使用预训练的单词嵌入。

正是在这个时期,LSTMs、RNNs 和门控循环单元(GRU)也开始被广泛用于许多不同的 NLP 应用。

2014 年—斯坦福:全球向量(Glove)

Word2Vec 推出一年后,斯坦福大学的 Pennington 等人(2014)推出了手套

Glove 是一组预训练的单词嵌入,使用不同的技术在不同的语料库上训练。

Pennington 等人(2014)发现,单词嵌入可以通过共现矩阵来学习,并证明他们的方法在单词相似性任务和命名实体识别(NER)方面优于 Word2Vec。

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

Pennington 等人 2014 年对单词类比任务 Glove vs CBOW vs Skip-Gram 的总体准确性(来源)

作为轶事,我相信更多的应用程序使用 Glove 而不是 Word2Vec。

2015 —回归:奇异值分解和 LSA 词嵌入&注意力模型的诞生

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

照片由科学高清Unsplash 上拍摄

神经网络模型的最新趋势是似乎在单词相似性和类比检测任务方面优于传统模型。

正是在这里,研究人员 Levy 等人(2015 年)对这些趋势方法进行了一项研究,以了解它们如何与传统的统计方法相比较。

Levy 等人(2015)发现,通过适当的调整,SVD 和 LSA 等经典矩阵分解方法获得了与 Word2Vec 或 Glove 类似的结果。

他们的结论是,新旧方法之间的性能差异不明显,没有证据表明任何一种方法比其他方法有优势。

我想这里的教训是,新的闪亮的玩具并不总是比旧的(不那么闪亮的)玩具好。

注意力模型的诞生

在以前的研究中,使用 RNNs 的神经机器翻译(NMT)的问题是,如果句子太长,它们往往会“忘记”所学的内容。

这被称为“长期依赖”问题。

因此,Bahdanau 等人(2015)提出了注意机制来解决这个问题。

注意力机制复制了人类如何进行翻译任务,而不是让模型在翻译前记住整个输入序列。

该机制允许模型只关注最有助于模型正确翻译单词的单词。

精神食粮。

在开始翻译整段文字之前,你会完整地阅读整段文字吗?

当然不是。

到那时,你可能已经忘记你读过的东西了。

那么,为什么我们应该期望一个模型在开始翻译任务之前记住所有的事情

这是创造注意力机制背后的直觉。

2016 —从神经机器翻译到注意力集中的图像字幕

在注意力机制被提出后不久,其他研究人员如徐等人(2016)开始研究如何在其他自然语言处理应用中使用注意力,如图像字幕

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

注意正确对象的例子(白色表示注意的区域,下划线表示相应的单词)徐等 2016 ( 来源)

请注意模型是如何“关注”图像的正确区域来为文字添加标题的。

2017 —变形金刚的诞生

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

米切尔·罗Unsplash 上的照片

鉴于注意力机制在 NLP 应用中的成功,谷歌提出了一种新的简单网络架构,称为转换器。(瓦斯瓦尼等人,2017 年)

这是一个范式的转变,与 NLP 应用的标准构建方式不同。即使用用字嵌入初始化的 rnn、LSTMs 或 gru。

Vaswani 等人(2017 年)将变压器完全建立在注意力机制的基础上,完全摒弃了 RNNs。

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

瓦斯瓦尼等人于 2017 年制作的变压器模型架构(来源

Vaswani 等人(2017 年)的工作很快催生了第二年变形金刚的改变游戏规则的双向编码器表示。(德夫林等人,2018 年)

有趣的事实:BERT 目前被 Google 搜索引擎使用。这里有一个到谷歌博客的链接

2018-今天-预训练语言模型的时代

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

《芝麻街》GIF”,2016 年 3 月 23 日(来源)

如前所述,在过去的两年中,NLP 模型的构建方式发生了转变。

预训练的单词嵌入已经进化为预训练的语言模型。

这里的直觉是用预训练的权重来初始化整个模型架构,而不仅仅是用预训练的单词嵌入来初始化模型的输入层。

人们发现,预先训练的语言模型只需要微调就可以在各种 NLP 任务中表现得相对较高。

这些预训练架构的一些例子是,伯特,阿尔伯特,罗伯塔,ELMO,厄尼,XLNET,GTP-2,T5 等。

到今天为止,这些模型中的一些实际上超过了 BERT。

2020 年—期末注释

看起来我们终于到达了时间线的尽头!😃

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

GIPHY Studios Originals 制作的快乐无比激动 GIF,2016 年 11 月 18 日(来源)

我发现这个关于 NLP 研究进展的时间表非常有趣,希望你也一样!

想象一下…

从引入预训练单词嵌入到转向预训练语言模型只用了 5 年时间。

令人惊讶的是,几十年来我们做事的方式在这个时期发生了巨大的转变。

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

《天堂单身汉》第六季 GIF,2019 年 8 月 7 日(来源)

似乎 NLP 上的领域还是一个相当年轻的领域。

我们还远远不能将世界知识编码到机器中,以真正理解人类的语言。

所以这绝对是一个激动人心的时代!

让我们拭目以待,看看未来会怎样!

就这样,我会在下一篇文章中看到你!

阿迪欧。

声明:这绝不是一个详尽的研究。我只是研究了我个人认为 NLP 中的关键进步。😃

LinkedIn 简介:蒂莫西·谭

自然语言处理的发展

原文:https://towardsdatascience.com/evolution-of-natural-language-processing-8e4532211cfe?source=collection_archive---------21-----------------------

入门

对过去十年自然语言处理的直观视觉解释

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

UnsplashThyla Jane 拍摄的照片

你所需要的只是一个关心。这是 2017 年一篇论文的名称,该论文将注意力作为一种独立的学习模型进行了介绍——这是我们现在在自然语言处理(NLP)领域占据主导地位的先驱。

变形金刚是自然语言处理领域的新锐,它们可能看起来有些抽象——但是当我们回顾自然语言处理领域过去十年的发展时,它们开始变得有意义了。

我们将讨论这些发展,看看它们是如何导致今天使用的变压器的。本文并不假设您已经理解了这些概念——我们将建立一个直观的理解,而不会过于专业。

我们将涵盖:

**Natural Language Neural Nets**
  - Recurrence
  - Vanishing Gradients
  - Long-Short Term Memory
  - Attention**Attention is All You Need**
  - Self-Attention
  - Multi-Head Attention
  - Positional Encoding
  - Transformers

自然语言神经网络

随着 Mikolov 等人在 2013 年发表的介绍 word2vec 的论文[2],NLP 真正爆发了。这引入了一种通过使用单词向量来表示单词之间的相似性和关系的方法。

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

这些初始单词向量包含 50-100 个值的维度。这些向量的编码机制意味着相似的单词将被分组在一起(周一、周二等),向量空间上的计算可以产生真正深刻的关系。

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

一个众所周知的例子是,取国王的向量,减去向量男人,加上向量女人,导致最近的数据点是王后

重现

在 NLP 的繁荣时期,递归神经网络(RNN)迅速成为大多数语言应用程序的最爱。rnn 非常适合语言,这要感谢它们的重现

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

递归神经网络单元将消耗第一个时间步*,将其输出状态传递给下一个时间步**【快速】**——该递归过程持续特定长度的时间步(序列长度)。*

这种循环允许神经网络考虑单词的顺序及其对前后单词的影响,从而更好地表达人类语言的细微差别。

虽然我们直到 2013 年才看到它们的普遍使用,但 RNNs 的概念和方法在 20 世纪 80 年代的几篇论文中都有讨论[2],[3]。

消失渐变

rnn 带来了他们的问题,主要是消失梯度问题。这些网络的循环意味着它们本质上是非常深的网络,具有许多包含输入数据和神经元权重之间的运算的点。

当计算网络的误差并使用它来更新网络权重时,我们一个接一个地通过网络更新权重。

如果更新梯度是一个小数字,我们乘以一个越来越小的数字——这意味着整个网络要么需要很长时间来训练,要么根本不起作用。

另一方面,如果我们的权重循环值太高,我们就会遭遇爆炸梯度问题。这里,网络权重将振荡,而不学习任何有意义的表示。

长短期记忆

随着长短期记忆(LSTM)单元的引入,消失梯度问题得到了解决。

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

LSTM 单位引入了一种更稳定的信息通道——细胞状态,如上图黑色所示。

LSTMs 引入了一个额外的信息流,沿着时间状态链,通过“门”控制最少数量的转换。

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

单元状态允许信息以较少的转换从早期状态传递到后期状态。

这允许通过允许来自序列中更早的信息被保留并应用于序列中更晚的状态来学习长期依赖性。

注意力

很快,循环的编码器-解码器模型被附加的隐藏状态和神经网络层所补充——这些产生了注意力机制。

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

注意编解码器 LSTMs。

添加编码器-解码器网络允许模型的输出层不仅接收 RNN 单元的最终状态,而且还接收来自输入层的每个状态的信息,从而创建一种“注意”机制。

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

英法翻译任务中编码和解码神经元间的注意。图像源[3]。

使用这种方法,我们发现编码器和解码器状态之间的相似性将导致更高的权重,产生类似于上面法语翻译图像的结果。

对于这种编码器-解码器实现,在关注操作中使用了三个张量,即查询、关键字和值。在每个时间步长,从解码器的隐藏状态中提取查询,评估该查询和键值张量之间的对齐,以产生上下文向量。

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

然后,上下文向量被传回解码器,用于产生该时间步长的预测。对于解码器空间中的每个时间步长,重复该过程。

你需要的只是关注

正如我们在简介中所说,这一切都始于 2017 年的“你只需要关注”论文[5]。你可能已经猜到了,这篇论文介绍了我们不需要在注意力旁边使用这些复杂的卷积或递归神经网络的想法——事实上,注意力就是你所需要的全部。

自我关注

自我关注是实现这一功能的关键因素。这意味着之前的查询来自输出解码器,而现在是直接从输入值以及 T2 K ey 和 T4 V T5 值产生。

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

用两个略有不同的短语自我关注。通过将(左)改为(右),注意力从动物转移到街道。来源[3]。

因为 Q uery、 K ey 和Vvalue 都是由输入产生的,所以我们能够对同一输入序列的不同部分之间的对齐进行编码。如果我们取上面的图像,我们可以看到,将最后一个词从改为将注意力焦点从动物转移到街道

这允许注意力机制对输入数据中所有单词之间的关系进行编码。

多头注意力

注意力机制的下一个重大变化是增加了多个注意力头*——本质上是并行执行的许多自我注意力操作,并用不同的权重进行初始化。*

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

多头注意是指并行处理多个注意‘头’。这些多个头的输出被连接在一起。

在没有多头关注的情况下,A. Vaswani 等人的 transformer 模型实际上比它的许多前辈表现得更差[5]。

并行机制允许模型表示相同序列的几个子空间*。这些不同程度的注意力然后被一个线性单元连接和处理。*

位置编码

变压器模型的输入不像 RNNs 那样是顺序的。在过去,正是这种顺序操作允许我们考虑单词的位置和顺序。

为了保持单词的位置信息,在进入注意机制之前,向单词嵌入添加位置编码。

《注意力就是你所需要的》一文中采用的方法是为嵌入维中的每一维生成不同的正弦函数。

还记得我们之前说过 word2vec 引入了用 50 到 100 维的向量来表示单词的概念吗?这里,在 Vaswani 等人的论文中,他们使用了相同的概念,但是表示了单词的位置。

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

交替位置编码值。使用字位置 pos ,嵌入尺寸 i ,嵌入尺寸数量 d_model

但是,这次不是使用 ML 模型计算矢量值,而是使用修改后的正弦函数计算矢量值。

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

正弦后接余弦函数。这种正弦-余弦-正弦的交替模式对于嵌入索引中的每个增量持续。

向量的每个索引被分配一个交替的正弦-余弦-正弦函数(索引 0 是正弦,索引 1 是余弦)。接下来,随着索引值从零向 d(嵌入维数)增加,正弦函数的频率降低。

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

使用总嵌入维数为 20 的前五个嵌入指数的正弦函数。嵌入索引位置显示在图例中。

我们可以从上面得到同样难以控制的正弦曲线,加上在 A. Vaswani 等人的研究中使用的 512 嵌入维数。用纸将这些绘制到更容易理解的热图上:

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

我们可以在较低的嵌入维度中看到较高的频率(左图),它随着嵌入维度的增加而降低。在第 24 维附近,频率降低了很多,以至于我们在剩余的(交替的)正弦余弦波中不再看到任何变化。

这些位置编码然后被添加到单词嵌入中。

顺便提一下,这意味着单词嵌入维度和位置编码维度必须匹配。

变形金刚

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

A. Vaswani 等人的变压器架构。改编自同一篇论文。

注意力模型的这些变化产生了世界上第一个变压器。

除了已经讨论过的单词嵌入、位置编码和多头自我关注操作,这个模型相当容易理解。

我们有加法和归一化层,我们简单地将两个矩阵相加,然后归一化它们。还有普通的前馈神经网络。

最后,我们将张量输出到线性层。这是一个完全连接的神经网络,它映射到一个 logits 向量——一个大向量,其中每个索引映射到一个特定的单词,其中包含的值是每个相应单词的概率。

然后,softmax 函数输出最高概率索引,该索引映射到我们的最高概率单词。

这就是全部(我承认,这是很多)。

NLP 中目前最先进的技术仍然使用变压器,尽管有一些奇怪而奇妙的修改和添加。尽管如此,核心概念仍然是相同的,即使像 GPT-3 和伯特模型。

我相信,NLP 的未来将和过去一样多样化,我们将在未来几年看到一些真正迷人的、坦率地说是改变世界的进步——这是一个非常令人兴奋的领域。

我希望这篇文章能够帮助您更好地理解 transformer 模型的基础知识,以及它们为什么如此强大。如果你想了解更多,我在 YouTube 上发布了编程/ML 视频

如果您有任何问题、想法或建议,请通过 Twitter 或在下面的评论中联系我们。

感谢阅读!

参考

[1] T. Mikolov 等人,向量空间中单词表示的有效估计 (2013),ICLR

[2] D. Rumelhart 等人,通过错误传播学习内部表征 (1985),ICS 8504

[3] M. Jordan,串行顺序:并行分布式处理方法 (1986),ICS 8604

[4] D. Bahdanau 等人,通过联合学习对齐和翻译的神经机器翻译 (2015),ICLR

[5] A. Vaswani 等人,注意力是你所需要的全部 (2017),NeurIPS

🤖带变压器的 NLP 课程

*所有图片均由作者提供,除非另有说明

YOLO-YOLO 版本 1 的演变

原文:https://towardsdatascience.com/evolution-of-yolo-yolo-version-1-afb8af302bd2?source=collection_archive---------16-----------------------

YOLO 的起源——“你只看一次”物体探测

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

来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测

YOLO(YouOonlyLookOnce)是最流行的对象检测卷积神经网络(CNN)之一。Joseph Redmon 等人在 2015 年发表了他们的第一篇 YOLO 论文之后,随后的版本分别由他们在 20162017 和 Alexey Bochkovskiy 在 2020 发表。本文是一系列文章中的第一篇,概述了 YOLO CNN 是如何从第一个版本发展到最新版本的。

1.YOLO v1 —动机:

在 YOLO 发明之前,诸如 R-CNN 的对象检测器 CNN 首先使用区域提议网络(RPNs)来在输入图像上生成边界框提议,然后在边界框上运行分类器,最后应用后处理来消除重复检测以及细化边界框。R-CNN 网络的各个阶段必须单独训练。R-CNN 网络很难优化,而且速度很慢。

YOLO 的创造者被激励去设计一个单级 CNN,它可以被端到端地训练,易于优化并且是实时的。

2.YOLO v1 —概念设计:

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

图 1: YOLO 版本 1 概念设计(来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

如图 1 左图所示,YOLO 将输入图像分成 S×S 网格单元。如图 1 中上图所示,每个网格单元预测 B 个边界框和一个“对象性”得分 P(Object ),表示网格单元是否包含对象。如图 1 中下部图像所示,每个网格单元还预测网格单元包含的对象所属类的条件概率 P(Class | Object)。

对于每个边界框,YOLO 预测了五个参数——x,y,w,h 和一个置信度得分。边界框相对于网格单元的中心由坐标 (x,y) 表示。 xy 的值介于 0 和 1 之间。边界框的宽度 w 和高度 h 被预测为整个图像的宽度和高度的一部分。所以它们的值在 0 和 1 之间。置信度得分指示边界框是否具有对象以及边界框有多精确。如果边界框没有对象,则置信度得分为零。如果边界框具有对象,则置信度得分等于预测边界框和基础真值的并集上的交集(IoU)。因此,对于每个网格单元,YOLO 预测了 B×5 个参数。

对于每个网格单元,YOLO 预测 C 类概率。这些类别概率是基于网格单元中存在的对象的条件。即使格网单元具有 B 边界框,YOLO 也只预测每个格网单元的一组 C 类概率。因此,对于每个网格单元,YOLO 预测 C+B×5 个参数。

图像的总预测张量= S x S x (C + B x 5)。对于 PASCAL VOC 数据集,YOLO 使用 S = 7、B = 2 和 C = 20。因此,帕斯卡 VOC 的最终 YOLO 预测是 7×7 ×( 20+5×2)= 7×7×30 张量。

最后,YOLO 版本 1 应用非最大值抑制(NMS)和阈值来报告最终预测,如图 1 右图所示。

3.YOLO v1 — CNN 设计:

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

图 2: YOLO 第一版 CNN ( 来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

YOLO 版本 1 的 CNN 如图 2 所示。它有 24 个卷积层,作为特征提取器。接着是两个完全连接的层,负责对象的分类和边界框的回归。最终输出是一个 7 x 7 x 30 的张量。YOLO CNN 是一个简单的单路 CNN,类似于 VGG19 。YOLO 使用 1x1 卷积,然后是 3x3 卷积,灵感来自谷歌的盗梦空间版本 1 CNN。泄漏 ReLU 激活用于除最后一层之外的所有层。最后一层使用线性激活函数。

4.YOLO v1 —损失设计:

平方和误差是 YOLO 损失设计的基础。因为多个网格单元不包含任何对象,并且它们的置信度得分为零。它们压倒了包含对象的几个单元的梯度。为了避免这种导致训练发散和模型不稳定的过度控制,YOLO 增加了来自包含对象的边界框的预测的权重( λ coord = 5),并减少了权重( λ noobj = 0。 5)用于不包含任何对象的边界框的预测。

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

图 3: YOLO v1 丢失部分 1 —包围盒中心坐标(来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

图 3 示出了 YOLO 损失的第一部分,其计算边界框中心坐标预测中的误差。损失函数仅惩罚边界框中心坐标的误差,如果该预测器负责地面真实框的话。

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

图 4: YOLO v1 丢失部分 2——包围盒宽度和高度(来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

图 4 示出了 YOLO 损失的第二部分,其计算边界框宽度和高度的预测误差。如果小边界框与大边界框的预测误差大小相同,则它们会产生相同的损失。但是相同大小的误差对于小边界框比大边界框更“错误”。因此,这些值的平方根用于计算损失。因为宽度和高度都在 0 和 1 之间,所以它们的平方根对于较小的值比较大的值增加更多的差异。损失函数仅惩罚边界框的宽度和高度误差,如果该预测值负责地面真实框的话。

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

图 5: YOLO v1 损失部分 3-物体置信度得分(来源: 你只看一次:约瑟夫·雷德蒙等人的统一实时物体检测)

图 5 示出了 YOLO 损失的第三部分,其计算具有对象的边界框的对象置信度得分的预测误差。损失函数仅惩罚对象置信度误差,如果该预测器负责基本事实框的话。

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

图 6: YOLO v1 损失第 4 部分——无对象置信度得分。(来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

图 6 示出了 YOLO 损失的第四部分,其计算没有对象的边界框的对象置信度得分的预测误差。损失函数仅惩罚对象置信度误差,如果该预测器负责基本事实框的话。

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

图 7: YOLO v1 丢失部分 5 类概率(来源: 你只看一次:Joseph Redmon 等人的统一实时物体检测)

图 7 示出了 YOLO 损失的第五部分,其计算具有对象的网格单元的类概率预测中的误差。如果网格单元中存在对象,损失函数只惩罚类概率错误。

5.YOLO 第一版—结果:

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

图 8: YOLO v1 —结果(来源: 你只看一次:Joseph Redmon 等人的统一实时对象检测)

YOLO v1 在 PASCAL VOC 2007 数据集上的结果如图 8 所示。YOLO 实现了 45 FPS 和 63.4 %的 mAP,与另一种实时对象检测器 DPM 相比显著提高。尽管速度更快的 R-CNN VGG-16 的 mAP 更高,为 73.2%,但其速度相当慢,为 7 FPS。

6.YOLO 第一版—限制:

  1. YOLO 很难发现成群出现的小物体。
  2. YOLO 在探测具有不寻常长宽比的物体时有困难。
  3. 与快速的 R-CNN 相比,YOLO 犯了更多的定位错误。

7.参考资料:

[1] J. Redmon,S. Divvala,R. Girshick 和 a .法尔哈迪,你只看一次:统一的实时对象检测 (2015),arxiv.org

[2] R. Girshick,J. Donahue,T.Darrell 和 J. Malik,用于精确对象检测和语义分割的丰富特征层次 (2013),arxiv.org

[3] K. Simnoyan 和 A. Zisserman,用于大规模图像识别的甚深卷积网络 (2014),arxiv.org

[4] C .塞格迪,w .刘,y .贾,p .塞尔马内,s .里德,d .安盖洛夫,d .埃汉,v .万霍克和 a .拉宾诺维奇,用卷积深化 (2014)

强化学习的进化策略

原文:https://towardsdatascience.com/evolution-strategies-for-reinforcement-learning-d46a14dfceee?source=collection_archive---------24-----------------------

只用蛮力就解决了著名的倒立摆问题。

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

丹尼尔·佩莱斯·杜克在 Unsplash 上拍摄的照片

在上一篇文章中,我们给自己设定的目标是通过优先化的经验回放来优化深度 Q-Learning,换句话说,为算法提供一点帮助来判断什么是重要的,什么是不应该记住的。在大多数全球范围内,根据当前的技术成就,在人工干预的帮助下,算法往往表现更好。以图像识别为例,假设你要对苹果和香蕉进行分类。有了香蕉是黄色的先验知识,你的算法肯定会比它自己学习更准确。这也可以通过过度设计一组超参数来解释,这些超参数只会优化非常具体的任务。至于强化学习,证明算法可以通用化的一个方法就是用多种环境来测试,来求解。这正是为什么 OpenAI 环境被制造出来,允许研究人员通过提供一个简单的接口来测试他们的算法,使我们能够非常容易地在环境之间转换。

现在,关于优先体验重放,该出版物表明,它可以在大多数环境中很好地推广,但这一点点人工干预帮助在我们的情况下没有好处。毕竟,也许这个环境确实需要更多的随机性才能被解决。在深度 Q 学习的情况下,随机性是通过使用一个ε贪婪策略来创建的,该策略是“我们不不时地采取最优化的行动,看看会发生什么,怎么样”。这也叫探索。但是这实际上是一种非常苍白的随机行为,因为它是基于随机(概率)策略的。呃。在这种情况下,如何使它完全随机?

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

照片由凯蒂·史密斯Unsplash 上拍摄

强化学习随机性烹饪食谱:

  • 第一步:用一个有一组权重的神经网络,我们用它来把一个输入状态转化成一个相应的动作。通过在这个神经网络的指导下采取连续的行动,我们收集并累加每个连续的奖励,直到体验完成。
  • 步骤 2:现在添加随机性:从这组权重中,通过将随机噪声添加到原始权重参数中来生成另一组权重,也就是说,使用采样分布(例如高斯分布)对它们进行一点修改。尝试新的体验并收集总奖励。
  • 第三步:重复随机抽样的权重参数,直到你达到理想的分数。

这是你能做的最随意的事情。拉出一个随机权重的随机神经网络,看看是否可行,如果不行就再试一次。事实是,这不太可能行得通。(或者至少在合理的时间内工作)。然而,最近几年发表的一些非常有前途的论文,在让类人机器人学习如何走路等任务中提供了非常有竞争力的结果,离应用这一非常基本的烹饪食谱不远了。

我们开始吧。现在想象一下,不是围绕相同的初始权重集进行采样,而是在每次采样迭代中,将您的奖励与前一个权重集的奖励进行比较。如果回报更好,这意味着你的神经网络对什么是最优策略有更好的想法。现在,您可以从这里开始,对另一组砝码进行采样。这个过程叫做爬山。

这个类比非常简单,你试图优化你的总回报(位于山顶),你正在采取连续的步骤。如果你的一步让你更接近顶峰,那么你就非常自信地从那里开始下一步。否则,你回到上一步,尝试另一个方向。它实际上看起来非常像梯度上升,通过“攀爬”您试图优化的函数来优化函数。区别在于神经网络更新。在爬山中,不使用反向传播来更新权重,而只使用随机采样。

爬山实际上属于一组叫做黑盒优化算法的算法。

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

我们不知道我们试图优化的函数到底是什么,我们只能给它输入并观察一个结果。基于输出,我们能够修改我们的输入,以尝试达到最佳结果值。实际上,呃,这听起来很熟悉!事实上,强化学习算法也依赖于一个黑盒,因为它们基于一个环境,该环境为代理人采取的每一步(输入)提供奖励(输出)。例如,当你试图教一个人形机器人如何行走时,你对你试图行动的模型的运动学和动力学完全没有先验知识,甚至不知道重力意味着什么!这是一个相当黑的盒子,不是吗?如下图所示,我们试图优化的是我们自己对环境的近似函数。

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

在深度 Q 网络的情况下,当我们执行反向传播时,我们有我们试图优化的函数的概念,所以在某种意义上,只有环境被认为是黑盒。至于爬山,我们盲目地修改一组权重,而不知道如何使用这些权重,这可以被认为是一个黑盒。

现在,让我们爬上一些山,看看这将如何实现。我们从另一个叫做 Cart Pole 的环境开始,它基本上是一个倒立摆。这通常是一个非常好的测试算法和想法的环境,因为它很容易解决,没有特别的局部最小值。Cart pole 也很受欢迎,因为它也用于经典控制理论(提供解析解)。

让我们先看看现实生活中的倒立摆是什么样子,这里由 Naver Labs 的一个令人印象深刻的机器人来平衡:

现在让我们试着从我们的健身房环境中平衡车杆。在这个实现中,我们假设提供了一个代理(github 上的代码),它可以评估完整剧集的报酬。

很简单不是吗?我们实际上做了一个小小的改进,而不是使用所有的奖励来计算新的权重,我们只使用其中的一小部分,称为“精英”权重,即提供最佳奖励的权重。我们也可以更加贪婪,只取回报最高的权重,但这样会不够健壮,也不能很好地处理局部最小值。另一方面,用所有结果计算新的权重更健壮,但是也更慢。使用结果的一部分代表了鲁棒性和快速收敛之间的某种平衡。

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

爬山结果

该算法可以用大约 470 秒的处理时间在 104 次迭代中求解 cart 极点环境。让我们享受观看训练有素的代理人执行他的任务。肯定没有人形机械手臂平衡重量好看,但这已经很了不起了!

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

现在爬山是一种可能的黑盒算法实现。在这篇论文中,open ai 团队(也是 OpenAI gym 的制造商)推出了另一个版本,他们说这个版本可以解决复杂的 RL 问题,例如 Mujoco 运动任务或 Atari 游戏集合。他们还声称,他们可以比最有效的 RL 算法更快地解决这些任务,至少快 10 倍。让我们看看这种成功背后的算法是什么:

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

进化策略

抛开数学符号不谈,这里的内容与爬山算法非常相似。首先通过高斯分布随机抽样生成权重集,评估每组权重的回报,并使用所有结果更新新的权重。主要区别在于更新,而爬山只是平均最好的权重,进化策略将使用一个更新率缓慢地向最佳方向移动。与所有 RL 算法一样,这确实意味着避免直接陷入局部最小值并增加鲁棒性。除此之外,这很像爬山。而认为能够比最复杂的 RL 算法执行得更好?呃。关键词其实就在快照的标题里:并行化

并行化是将处理任务分开,并同时执行它们。比方说,当您想要评估每组权重的奖励时,您可以同时评估所有权重,然后在所有权重完成后收集结果。如果只使用一台计算机,当然这将要求它具有难以置信的强大功能,但这里的技巧是,计算不仅限于一台机器。并行化可以通过与其他计算机共享计算任务来完成。例如,OpenAI 团队表示,为了教会人形机器人行走,他们在 80 台机器上使用了1440 个 CPU。

如果你想获得不错的结果,那么现在让任务并行化来解决 RL 问题是必须的。例如,相对著名的 A3C 算法的目标是利用并行计算,这是作者所谓的深度 RL 异步方法的一部分。进化策略(es)的不同之处在于,ES 完全利用了并行化,尽管它是一段简单得多的代码,但堆叠越来越多的计算机将会产生更好的结果。

即便如此,我(可能还有你)手头没有 80 台计算机,尝试运行这种带有异步计算的算法仍然很有趣,以便更好地了解它实际上是如何工作的,并看看我们是否能超越爬山性能。

为了尝试并行化进化策略算法,我们需要深入研究 Python 中的并行计算以及执行多线程的不同方式。幸运的是,我们可以依靠一些非常好的文章,这些文章详细介绍了我们正在寻找的东西,目前是关于哪个库最适合我们的指南,其中有一些代码片段教我们如何使用它。(实际上这应该是本文的一部分,但是嘘)。

在这里插入 Python 中的多线程分析 < < < < <

使用新获得的知识,我们可以尝试并行化进化策略算法。
我们实现的基础层与前面介绍的相同,它依赖于一个代理,该代理可以评估给定的一组权重的总回报。代理只需对用指定权重构建的神经网络执行正向传递,以找出每一步要采取的行动,并总结健身房环境提供的奖励。

我们现在想通过为我们的案例选择正确的库来利用我们的线程知识。我们希望通过并行化繁重的计算来优化进化策略的收敛时间。最重要的是,我们希望将来能够使用多个独立计算机的内核。选择是显而易见的,我们想用多处理库。

可以看到,使用多处理时,一些数据类型无法成功序列化,代理就是这种情况,可能是由于 pytorch 数据类型的存在。为了解决这个问题,代理被定义为全局变量,以便它们仍然可以从线程访问,这不是一个好的设计,并且不能用于在多台计算机之间共享计算的情况。至于测试,这是目前测量并行计算效率的主要方法。该算法的基础如下:在每次迭代中,为您想要使用的每个并行代理启动一个线程。然后在每个线程中采样一组权重并调用 evaluate 函数。收集每个线程产生的所有奖励,并更新权重。请注意,更新需要奖励和采样权重,但线程只返回奖励。这是使用种子技巧:np.random 实际上并没有那么随机,如果多次调用 np.random.randn,然后重置种子并重复,它将提供完全相同的结果。利用这一点,我们可以只返回种子,然后在需要时重新创建权重,而不是返回权重集(这对复杂的神经网络来说可能是巨大的)。对于一些应用来说,不串行化/解串行化权重的时间增益是必然的。下面是这个实现的样子:

运行这段代码有一个问题。多处理 apply_async 在第二次迭代开始时被阻塞。似乎某些适合多重处理的内部锁正在阻塞计算。由于第一次迭代是成功的,我们可以猜测第一次迭代的一些残余会阻碍下一次迭代的开始。可能是当 mp 的对象超出范围时。无法正确销毁池()句柄。
一种可能的解释是,多重处理在内部使用“fork”方法创建线程,该方法复制线程环境,而不是“繁殖”重新评估“所有变量”。可能不是所有的数据类型(和底层数据类型)都有一个定义良好的复制构造函数,这会导致死锁。那用“产卵”法怎么样?由于多处理重新评估所有变量,健身房环境以及代理本身确实受到相同的处理,这非常耗时(至少比调用 sample_reward 函数本身多得多)。即使这种方法仍然可行,但它肯定不能让我们达到固定的目标,提高进化策略算法的计算效率。

那现在怎么办?多处理似乎不是一个可行的替代方案,唯一的其他解决方案是使用线程池库,它受到全局解释器锁(GIL)的限制。我们仍然可以使用该库来验证性能水平,看看与基本的顺序方法相比是否有所提高。在这两种情况下,我们使用 50 个代理,它们能够为随机抽样的一组重量生成总报酬:

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

该算法一直运行到平均奖励达到 195。在这两种情况下,行为看起来相似,并且环境通过等量的情节得到解决。在此之前,一切看起来都很好。算法是相同的,唯一的区别是计算的并行化。然而,计算时间是不同的,在使用线程池执行器库的情况下,计算时间实际上更长。这与不同线程方法的基准测试结果相呼应。我们只是确认了预期的结果。

我们现在发现自己陷入了一个僵局,我们首选的线程库没有像预期的那样工作,其他方法实际上比顺序方法要慢。我们处理线程的方式需要有所不同。如果我们能在体育馆环境中直接并行化计算,事情会简单得多…

你猜怎么着?这个接口有…算是存在的。有一个名为 VecEnv 的接口,它实际上是 openai 健身房环境的数组。实际上,这听起来与我们之前采用的方法非常相似。除了这个 VecEnv 充当传统 gym 环境的包装器,并允许您执行“step”操作的并行计算。在下面的 evaluate 函数实现示例中,“step”函数现在接受一组动作,并返回一组奖励和新状态:

在我们将一集的奖励累积过程并行化之前,我们在这里称每个“步骤”为多线程。好处是我们在已经执行了神经网络前向传递之后调用了一个线程。这意味着应该避免前一节中遇到的与 pytorch 数据类型和多重处理相关的问题。让我们检查一下性能结果:

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

当我们期待计算时间有巨大的改进时,实际上却发生了相反的情况。尽管与之前的 400 次迭代相比,该算法使用了大约 500 次迭代就收敛了,但它需要多花大约三倍的时间来计算。
现在,让我们试着拆开“步进”函数,从算法的其余部分分别测量性能。

我们创建了两个代理,一个实现通常的“步进”功能,将一个动作作为参数并返回新的状态和获得的奖励,而另一个使用 VecEnv(环境向量)并实现“步进”功能,将一组动作作为参数并输出一组状态和奖励。我们重复调用“步骤”的过程固定次数,并比较结果:

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

我们知道,VecEnv 通过实现多处理来执行线程,这是一种正确的方法,应该可以提供显著的计算改进。然而,我们观察到,即使在线程数量等于 PC 内核数量(本例中为 4 个)的最有利情况下,性能仍然落后于简单的顺序情况。

这种性能缺乏的一个原因可能是环境太简单,无法解决:“step”函数只需要很少的时间就可以返回,而多处理确实需要序列化和反序列化(我们不知道数量,因为它隐藏在 VecEnv 实现中)。很可能在更复杂的环境中,当仿人机器人学习行走时,“步进”功能将需要更多的计算能力,从而充分利用线程实现。

结论:

  • 虽然我们最初计划改进我们的月球着陆器,但我们选择先解决倒立摆问题,作为测试实施效率的简单方法。
  • 我们可以观察到,由于 Pytorch 的原因,将体验奖励的完整评估分离到不同线程中的简单线程实现无法工作。
  • 我们改用线程池执行器,并证明这种方法仍然受到 GIL(全局解释器锁)的限制。
  • 最后,我们尝试了 gym 环境的 VecEnv 包装器,它提供了一个使用多线程执行“步骤”的接口。然而,这种方法似乎并不成功,可能是因为我们的环境过于简单,无法利用多线程方法。

待完成:

  • 在更复杂的环境中尝试该算法(例如 Mujoco 环境)。

Github 回购:https://github.com/Guillaume-Cr/evolution_strategies

进化决策树:当机器学习从生物学中汲取灵感时

原文:https://towardsdatascience.com/evolutionary-decision-trees-when-machine-learning-draws-its-inspiration-from-biology-7d427fa7554b?source=collection_archive---------12-----------------------

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

来源

发现进化决策树

随着时间的推移,我们在生物学或生命科学方面的知识大幅增加,它已经成为许多寻求解决挑战性问题和开发创造性创新的工程师的巨大灵感来源。

以日本高速列车 新干线 为例,它是世界上最快的列车之一,时速超过 300 公里。在构思过程中,工程师们遇到了严重的困难,因为列车前方空气置换产生的大量噪音,甚至会对几个隧道造成结构性破坏。

为了解决这个问题,他们求助于一个不太可能的来源,翠鸟!这种鸟有一个细长的喙,这使他能够潜入水中以最小的水花猎食。

因此,通过以鸟的形象重新设计火车,工程师们不仅能够解决最初的问题,还能将火车的电力消耗降低 15%,并将速度提高 10%。

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

图 1 —日本高速列车新干线、 来源

利用生物学中的知识作为灵感来源,在机器学习中也是可能的。

内容

在本文中,我将重点介绍一个例子: 进化决策树

这些分类器使用进化算法,该算法依赖于受生物进化启发的机制来构建更健壮、更高效的决策树。

阅读本文后,您将了解到:

  • 什么是决策树
  • 如何使用进化算法构建决策树
  • 与其他分类器相比,进化决策树表现如何?

资料组

为了说明整篇文章中将要讨论的概念,我将依赖一个数据集,该数据集收集了**航空公司乘客满意度调查的结果。**关于数据集的更多信息可在这里找到。

目标是预测客户对航空公司服务满意的可能性。从公司决策的角度来看,这样的研究是至关重要的。它允许任何提供商品或服务的公司不仅定义其产品的哪些方面需要改进,而且定义改进的程度和迫切程度。

事不宜迟,让我们从回顾决策树的基础开始。

1。什么是决策树

决策树 指一种依靠流程图的树状结构的分类器。底层模型通过学习从数据特征中推断出的简单决策规则来对观察结果进行分类。

下图提供了一个决策树的例子。已经使用 Scikit Learn 决策树模块对其进行了航空公司乘客满意度调查培训。

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

图 2—决策树示例

决策树显示,对于商务旅行,客户满意度的主要因素是在线登机:简单高效的在线登机增加了客户满意的可能性。这也凸显了机上服务 wifi 质量的重要性。

它们已经被广泛用于分类任务,因为它们提供了许多优点:

  • 类似人类推理的可理解和可解释的性质
  • 处理数字和分类数据的能力;
  • 分层分解允许更好地使用可用变量。

大多数用于诱导决策树的算法依赖于贪婪的自顶向下递归划分策略来增长树。

代表树的根节点的源集合根据特定的规则被分成子集(子节点)。对每个派生的子集重复该过程,直到节点处的子集具有目标变量的所有相同值,或者分裂不会给预测增加任何值。

用于确定在节点和分割中生成测试的最佳方式的度量因算法而异。最常见的有 信息增益 (或 )和 基尼杂质 。它们是杂质度量,意味着当一个节点的所有样本属于同一类别时,它们等于 0,并且当我们具有均匀的类别分布时(即,当该节点的所有类别具有相等的概率时),它们达到最大值。更多信息,可以阅读这篇文章

然而,这种策略有两个主要缺点:

  1. 它可能导致次优解决方案;
  2. 它会生成过于复杂的树,这些树不能很好地从训练数据中概括出来,从而导致过度拟合的问题。

已经提出了几种技术来克服这些问题:

  • **剪枝技术:**首先,完全构建决策树,即直到一个叶子中的所有实例属于同一类。然后,通过移除“无关紧要的”节点或子树来减小树的大小。
  • **集合树:**不同的树被构建,最终的分类通过特定的规则给出,在大多数情况下是投票方案。请注意,这导致决策树的可理解性方面的损失。

因此,有必要探索生成模型树的其他方法。在这种背景下,进化算法(EAs) 最近获得了强烈的兴趣。

它们在候选解的空间中执行稳健的全局搜索,而不是局部搜索。因此,与贪婪方法相比,进化算法能够更好地处理属性交互。

让我们来看看它们是如何工作的。

2.如何用进化算法构建决策树?

进化算法是搜索试探法,使用受自然生物进化过程启发的机制。

在这个范例中,群体中的每个“个体”代表一个给定问题的候选解决方案。每个个体由一个适应值评估,该适应值测量他作为解决方案的质量。因此,第一种群通常被随机初始化,并向搜索空间的更好区域进化。

在每一代,选择过程确保具有低适应值的最佳个体具有更高的繁殖概率。

此外,通过受遗传学启发的操作,群体经历特异性,例如:

  • **交叉和突变,或重组机制:**来自两个个体的信息被混合并传递给它们的后代;
  • 突变:微小的随机变化适用于个体。

该过程反复重复,直到满足停止标准为止。选择最合适的个体代表作为解决方案。

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

基于 EA 的决策树为普通技术带来了一个有趣的替代方案,原因如下:

  • 作为随机搜索技术,它们有助于避免贪婪的、自上而下的递归划分策略可能导致的局部极小值;
  • 决策树的可理解性与集成方法相反。
  • 它不仅可以优化一个指标,还可以将不同的目标整合到适应值中。

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

2.1.原始群体

进化决策树,**中,个体是树。**第一种群由随机生成的树组成。

随机树可以按如下方式生成:

从一个根节点和两个孩子开始,该算法以预定义的概率 p. 决定孩子是分裂还是该节点成为终端节点(叶子)

  • 如果子节点被拆分,算法会随机选择属性并拆分值。
  • 如果该节点成为终端节点(叶),则分配一个随机的类标签。

2.2.健康

分类器的目标是为新的未标记数据获得最佳预测准确性。决策树分类器还必须控制最终树的大小,因为小树会导致欠拟合问题,而复杂树会导致过拟合问题。

因此,可以定义一个适应度函数来平衡这两个标准:

适应度= α1 f1 + α2 f2

其中:

  • f1 是训练集上的准确度;
  • f2 根据树的深度惩罚个体的大小;
  • α1 和α2 是要选择的参数。

2.3.选择

在选择将被用来创造下一代的双亲时,有几种选择。

最常见的有以下几种:

  • **适应度比例选择,或轮盘赌选择:**每个个体相对于群体的适应度用于分配选择的概率。
  • **锦标赛选择:**通过从群体中随机选择的一组个体中选择具有最高适应性的个体来选择父母。
  • **精英主义:**具有最高适应值的个体被直接带入下一代,这确保了保留最成功的个体。

请注意,一个个体可以被选择多次,这使他能够将其基因传播给更多的孩子。

2.4.交叉

交叉子代是通过组合当前父代的父代对获得的。

首先,选择两个个体成为父母。然后,在两棵树中随机选择一个节点。因此,通过用来自第二个亲本的子树替换来自第一个亲本的子树来形成新的个体(后代)。

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

图 3—交叉

2.5.变化

突变是指在一个群体的个体中做出的小的随机选择。这对于确保遗传多样性和使遗传算法能够搜索更广阔的空间是至关重要的。

决策树的上下文中,可以通过随机改变一个属性,拆分随机选择的一个节点的值来实现。

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

图 4 —突变

2.6.停止标准

如果群体中最佳个体的适应度在固定数量的代期间没有提高,则认为该算法已经收敛。

如果收敛缓慢,为了限制计算时间,预先设置最大代数。

3。与其他分类器相比,进化决策树的表现如何?

进化决策树看起来很吸引人,但是与通常的机器学习算法相比,它的性能如何呢?

3.1.一个简单的实验

为了了解它的效率,我实现了它,并在包含航空公司乘客满意度调查的数据集上进行了训练。

**目标是了解哪些因素会带来高水平的客户满意度。**在这种情况下,有一个简单但可靠的模型来解释客户满意或不满意的途径是至关重要的。

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

Ross ParmlyUnsplash 上拍摄的照片

关于数据集

数据集很大,超过 100k 行。

  • **它包含关于客户及其旅行的事实信息:**客户性别、年龄、客户类型(忠诚或不忠诚的客户)、旅行类型(个人或商务旅行)、航班等级(商务、经济、经济加)和飞行距离。
  • **它还包含以下服务的客户满意度:**机上 wifi 服务、出发/到达时间便利性、在线预订便利性、登机口位置、食品和饮料、在线登机、座位舒适度、机上娱乐、机上服务、腿部空间服务、行李搬运、值机服务、机上服务、清洁度。

因此,目标变量是客户满意度,可以是“满意”或“中性或不满意”。

方法论

下面是我遵循的步骤的快速总结:

  1. **数据预处理:**将分类变量转换为指标变量。将数据集分成随机的训练和测试子集。
  2. **建模和测试:**在训练子集上考虑每个模型的训练,并在验证子集上测量。
  3. 车型性能对比。

我选择将进化决策树(EDT) 方法与仅基于树的模型、决策树 *(DT)、随机森林(RF)、*进行比较,以有限的树深度 3 作为约束。我还将 EDT 的总体规模值和 RF 的估计数设置为 10,以便能够在合理的计算时间内以一致的方式比较它们。

结果

这是结果

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

图 5—满意的客户数量和不满意的客户数量

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

表 1—DT 模型的分类报告

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

表 2 —射频模型的分类报告

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

表 EDT 模型的分类报告

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

图 6-三个模型的 ROC 曲线和 AUC

在这种设置下, EDT 的性能与另外两种机器学习算法非常相似。

然而, EDT 模型因其提供单一决策树的能力而脱颖而出:

  • 这可以可视化,与 RF 模型相反,在该模型中,多个决策树被聚合,
  • 与简单的 DT 模型相反,这是健壮的,因为它是种群中最好的树。

下面是在最大深度设置为 2 的情况下训练算法时,在 EDT 群体中的最佳决策树的表示。

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

图 EDT 最佳决策树的表示

3.2.EDT 方法的更一般的实验验证

与其他机器学习算法相比,上面进行的实验当然不足以评估进化决策树的性能和可靠性。

因为它仅使用一个数据集,所以它没有探索所有的可能性,例如目标的类的数量的影响、特征和观察的数量的影响等。

在[ 2 ]中,作者使用真实的 UCI 数据集,比较了 EDT 方法与其他机器学习方法的性能。

让我们来探究这篇文章的发现。

关于数据集

下表简要描述了所使用的数据集:

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

表 4—数据集的特征

如您所见,数据集在观测值、要素和目标类的数量方面有很大差异。

最困难的数据集当然是第一个数据集,因为它提供了大量的类和有限的观察值。

方法论

以下是作者用来评估 EDT 模型与更“经典”机器学习算法相比的性能的方法的主要信息:

  • EDT 模型已经用以下超参数进行了训练:500 代的数量,400 的种群规模,0.6/0.4 的 ac 交叉/变异概率,具有精英主义的随机均匀选择方法。
  • 使用 5x2 交叉验证测量了模型的性能。

结果

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

表 5-依赖于数据集的模型精度

正如作者所指出的,从上表中可以得出 2 个想法:

  1. **基于树的算法往往在几乎所有情况下都优于其他机器学习算法。**这可以用决策树自然更能选择最重要的特征这一事实来解释。此外,基于规则的模型更适合特定的数据集,尤其是当目标和特征之间的关系难以建模时。
  2. 数据集鲍鱼上的结果特别差:这是因为目标有 28 个类,而观察值非常少(只有 210)。然而, EDT 模型以最高的精度脱颖而出。这显示了它处理困难数据集和有效避免过拟合的能力。

注意美国东部时间的结果是用默认参数获得的。调整参数会带来更好的性能。

参考文献

[1] R. Barros 等, 决策树归纳进化算法综述 2011

[2] D .扬科夫斯基等, 决策树归纳的进化算法 ,2016

[3] S. Cha, 利用遗传算法构造二元决策树 ,2008

[4] D. Carvalho 等, 一种混合决策树/遗传算法的数据挖掘方法 ,2003

[5]维基百科, 旅行推销员问题

[6]维基百科,遗传算法

数据科学的发展:下一步是什么?

原文:https://towardsdatascience.com/evolutions-in-data-science-ee596824d187?source=collection_archive---------51-----------------------

游戏变了吗?

2010 年,希拉里·梅森和克里斯·维金斯发表了一篇关于数据科学进程的文章。那时候,获取、筛选、探索、建模和解释是游戏的名字。然而,这并不是第一次将数据科学视为一个过程。让我们来探索基本面是如何随着时间的推移而变化的。

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

照片由林赛·亨伍德Unsplash 拍摄

我最近读了一本来自迈克尔·苏立文的令人惊叹的教科书讨论统计过程。在书中,他提出了一个六步程序。但是这款和 2010 款有什么不同呢?我用一个新冠肺炎的例子来解释:

  1. **提问:**是什么导致了一个国家的高新冠肺炎传染率?
  2. **数据收集:**收集病例、人口密度、气候、口罩使用等数据。
  3. **汇总数据:**绘制每个指标。检查平均值、分组依据、方差。
  4. **建模:**使用协变量或回归拟合 SIR 模型空间模型。选择你的毒药。
  5. **推论:**定义假设。在人口密度更高的国家,传染速度更快。使用 A/B 测试模拟
  6. **结果交流:**制作几个漂亮的图来展示你的分析结果。

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

乔·布利茨坦的课程经由哈佛

注意,Sullivan 没有提到任何软件或 API 来提供结果。重点是分析的值。

我们可以回到过去。我最近在罗恩·科哈维的精彩演讲中了解到,第一个受控实验可以追溯到《T4》旧约。这意味着我们做数据科学已经有一段时间了!然而,在过去的 2000 年中出现了新的挑战。如今,数据就是产品的价值在于对它的持续推断

我们还需要几个步骤来烤蛋糕。让我们来谈谈这些新的步骤以及团队是如何考虑的。

首先,让我们讨论一下在数据科学社区中越来越流行的两个数据科学过程框架。然后再讲还需要更多发展的步骤。我个人看到两个需要进一步探索的新领域:机器学习工程机器学习项目规划

ML 项目框架的生命周期

我最近看到的关于数据科学作为一个过程的最有用的观点是由全栈深度学习课程提出的。

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

乔希·托宾、谢尔盖·卡拉耶夫和彼得·阿贝耳(2019)通过课程

本课程在我们之前学习的迈克尔·苏立文统计过程的基础上增加了几个步骤。Sullivan 忽略的主要步骤在计划&项目设置部署&测试矩形内部。

计划&项目设置步骤属于项目管理(PM)和数据科学的交集。这些是我找到的关于项目管理和数据科学挑战的最佳资源:如何建立你的项目如何定义成功价值评估然而,我们把部署&测试放在哪个学科?

这就是机器学习工程的用武之地。

机器学习工程这个术语越来越受欢迎。我不确定它的起源,但在 NIPS 2016 Martin Zinkevich 做了一个关于可靠的机器学习的演讲。他为机器学习工程发布了一份规则清单。有趣的是,他们提到“ML 系统的可靠性工程”应该是一个新的学科。我想说 Zinkevich 的演讲是 ML 工程术语的起源,但是如果我错了,请在评论中告诉我。关于该主题的另一篇极具影响力的论文是数据科学的隐藏技术债务

机器学习工程是关于部署监控,以及**基础设施,**全栈框架上的最后一个矩形。如果你想深入了解这个框架的细节,你可以学习全栈深度学习课程。他们也讨论测试和标签。

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

ML 项目的最后一英里:Josh Tobin、Sergey Karayev 和 Pieter Abbeel(2019)通过课程

机器学习框架的持续交付

因此,我们了解到规划部署是任何数据科学项目的关键部分。现在让我们深入第二个数据科学流程框架。由 Danilo Sato 持续交付机器学习框架(CD4ML)。

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

CD4ML 通过 thoughtworks

该行业已经意识到,在生产中使用机器学习模型与使用 if-else 启发式方法非常不同。我们需要具体的类型的测试,具体的类型的监控,甚至部署策略。许多人和行业都在参与讨论。CD4ML 侧重于数据科学项目的数据、模型和代码组件。传统的软件开发项目不像 ML 项目那样依赖数据。模型对象也是进入拼图的新棋子。有关 CD4ML 的更多信息,请查看 Danilo Sato 的帖子

工程推动是用 MlflowMetaflow 和 F lyte 等产品加速。这些平台的目标是简化部署和测试。但是,规划&项目设置方面的资源并不多。我们可以得到正确的工程,但我认为我们需要投入更多的时间来定义项目目标。

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

项目设置:乔希·托宾、谢尔盖·卡拉耶夫和彼得·阿贝耳(2019)通过课程

  • 话虽如此,如何确定数据科学努力的优先级
  • 我们与其他计划相比如何?
  • 我们是否由于不确定性而未能沟通项目的影响
  • 我们如何评估项目的风险?
  • 我们如何在简单启发式ML 之间做出选择?

所有这些都是我们应该开始问自己的问题。金融也有助于对话。毕竟,我们只需要估计未来的回报,并计算它们的净现值。

我见过几个如何做到这一点的例子。评估经济价值很难。这就是为什么我们有专门评估价值的金融市场和学科。这里有一个很好的 ML 例子来解释我所说的:

您需要从您的反欺诈解决方案中每年节省大约 140 万美元才能在市场上生存。假设您每月有 4,000 个采购订单,平均订单价值为 83 美元,那么您的平均收入为 332,000 美元。

在机器学习之前,你必须为 40%的订单支付退款(1600 英镑)。那你每个月要花 132,800 美元。对于准确率为 95%的解决方案,您只需支付 4,000 起欺诈交易的 5%(200),即 16,600 美元。你的收益是退款的费用减少,总计 116,200 美元。这相当于每年节省 1,394,400 美元。

因此,您需要一个解决方案来检测 100 个可疑交易中的 95 个(准确性)。能够达到该阈值的工具将获得绿灯。【来源

欺诈是一个特别容易评估价值的领域。然而,我认为这是一个不完整的分析。我们需要评估项目的风险,并考虑未来的付款。

除此之外,在生产中使用该工具的反馈循环又如何呢?准确性会随着时间降低吗?这对它的价值有什么影响?是否存在任何伦理问题或意想不到的后果?

在分类类型项目(欺诈/无欺诈)中,评估价值可能很简单。但是回归、预测和聚类呢?视觉处理、自然语言和优化怎么样?我们如何评估像苹果 Siri 这样的项目的现值?Veronika Megler 的《管理机器学习项目》是一个很好的资源。

想想谷歌是如何以及为什么决定雇佣这个星球上最好的软件工程师来开发 Tensorflow vs 谷歌广告。两个项目之间的预算是如何决定的?我怀疑他们在 Tensorflow 上投入了更多资金,因为他们期望在人工智能上获得比这个星球上任何其他公司都高的投资回报。我正在探索的关于这个主题的两个资源是:如何测量任何东西和我经济学

结论

总之,数据科学过程每周都在发展和改进。谷歌、微软、亚马逊、百度和 Salesforce 等巨头的投资正在加速这一演变。在机器学习工程方面需要进一步分析,但在机器学习规划方面可能更迫切。毕竟,计划是真正的 AI-complete 😃

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

来源:1 罪恶货币,via Imgbin (个人使用)

现在就进化你的神经网络!具有从零开始的正则化演化的 AutoML

原文:https://towardsdatascience.com/evolve-your-neural-net-now-automl-with-regularized-evolution-from-scratch-444779aeeb4f?source=collection_archive---------58-----------------------

你是否厌倦了手工创建所有的神经网络架构?你是否在平凡而迭代的过程中浪费了宝贵的时间?一个正则化的进化算法等着你来帮助你

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

Johannes Plenio 在 Unsplash 上拍摄的照片

简介

AutoML 是一个概念,其中机器学习算法不是由人开发的,而是由计算机开发的。因此,对于给定的问题,例如预测照片上的猫/狗或预测股票价格,AutoML 算法会创建几个具有不同参数的架构,并评估其验证准确性/验证。一个机器学习研究人员也在做类似的事情,但需要一些先验知识和直觉。通常这样的过程是乏味的,并且需要几次构建和测试的迭代来找出好的架构。因此需要研究者花费大量的时间和雇佣他的公司/机构的资金。此外,仍然存在改进这种架构的空间,如过去几年中关于 CNN(卷积神经网络)架构的几个出版物所示(例如 Resnet50、Imagenet 等。).

现在的大多数算法都非常复杂,通常使用某种强化学习[1],贝叶斯优化过程[2],或者某种树搜索和进化搜索[3]。没有广泛的解释、研究和编码,任何一个都不容易尝试。然而,2019 年 Google Brain 发表了一篇关于“正则化进化”的论文[4],我将在这里解释它,甚至让它在 Jupyter 笔记本上尝试,你可以在 Google Colab 上运行。这是一个非常简单的进化算法,主要需要编写一个循环。

正则化进化,它是如何工作的?

在我们转向正则化进化之前,让我先介绍一下进化算法的概念。

进化算法

一般来说,EAs 是一组优化算法,它们受到生物进化过程的启发。其中或多或少基于突变和繁殖来选择最适合环境的。这些算法能够以一个噪声度量 ,遍历巨大的搜索空间*** (星号表示文章末尾的解释)。与进化过程类似,很难衡量一个比另一个更好,繁殖也有随机因素,但有机体仍然进化,能够适应给定的环境。该算法涉及到一些术语,你应该在继续之前理解,你可以在下面学习。

该算法在一组个体上工作,称为群体(例如机器学习模型),其中群体的大小是固定的(例如 100)。每个个体都是由一组基因定义的,你可以把它想象成一个个体属性的列表或向量(例如层的类型、数学运算、数字),这组基因被称为染色体。这些个体通过交叉和自身突变进行繁殖突变是改变一个基因(例如,改变一种类型的层、参数或其他东西),其中交叉你可以认为是组合两组基因(例如,来自一个个体的层列表的一半与来自另一个模型的层列表的另一半,但它不必是一半,它可以是例如 5/100)。接受繁殖的个体是根据**适合度分数、**选择的,适合度分数告诉你一个个体有多好(例如 ML 模型的验证准确性)。体能分数越高,我们的个体越好。

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

描绘了交换和突变。不同颜色的方块代表不同的基因。

该算法通过在繁殖和适应性分数计算之间迭代来工作,其中最适合的和被选择用于繁殖的以及最不适合的被从种群中移除。这样的一次迭代称为一个循环,在一个循环中产生新的一代——通过突变和繁殖产生新的个体。该算法通过循环迭代,直到我们得到足够好的个体,或者当大多数群体共享相同的基因时(因此群体收敛)。该算法很少收敛到全局最优解,但很容易找到一个好的最优解。

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

进化算法的一个例子。这里没有显示交叉,但是需要使用锦标赛选择来选择两个人。根据托马西尼,马可。一篇评论。(1999).

选择过程可以通过各种算法进行,最流行的是 锦标赛选择 ,它从群体中随机抽取 k 个个体(其中 k 小于群体大小)并输出其中最好的。这确保了不总是选择最适合的,并给较弱的个体一个机会。这是因为最适合的个体并不总是繁殖的最佳候选人,也许其他个体在几代之后会更好。这确保了在搜索空间中遍历时更大的多样性。此外,你可能会认为这是为了防止陷入局部最大值的健康得分,即使一个人有一套非常好的基因,仍然可以有一个更好的组合。

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

描述了锦标赛选择。

另一种是 轮盘 根据适应度选择个体,适应度越高,概率越高。虽然文章中没有用到,这里也没有描述。

有规律的进化——有什么不同?

有规律的进化也被称为老化进化——随着算法的进步,我们的种群会老化。因此,从群体中移除最老的,而不是最不适合的。这确保了种群的多样性,因为最适者不能确保存活,即使表现良好,也会因老化而死亡。它的工作方式与锦标赛选择一节中描述的方式类似——简而言之,就是增加多样性,防止陷入局部最小值。该算法的模式稍后在下面描述。

利用正则化进化实现架构搜索

使用 regularized revolution 的架构搜索是在一个为本文准备的 Jupyter 笔记本中实现的,您可以在 Google Colab 环境(或任何其他地方,但需要一个像样的 GPU!).Jupyter 笔记本您可以在下面的我的资源库中找到:

[## 丹尼尔维奇/AutoMLEvol

进化 AutoML 教程。在 GitHub 上创建一个帐户,为 DanielWicz/AutoMLEvol 的发展做出贡献。

github.com](https://github.com/DanielWicz/AutoMLEvol)

这里有一个到 Google Colab 的直接链接,你可以直接与代码交互:

[## 用 Google Colab 规范进化

colab.research.google.com 的正则化进化教程](https://colab.research.google.com/github/DanielWicz/AutoMLEvol/blob/master/regul_evolution_tut.ipynb)

请记住,计算是为了执行架构搜索,因此参数设置得尽可能低,以加快计算和训练时间。在你发现一些有趣的架构后,你可以扩大它的规模(通过增加过滤器的数量)并充分利用它。然后你可以把它和一个排名(例如https://benchmarks.ai/cifar-10)进行比较,并且很高兴拥有一个表现良好的小模型。此外,如果我们在卷积层中使用不同数量的填充符,例如 16、32、64,那么算法将总是选择具有大量滤波器的卷积层的模型。事实说明,对于少量的时段和参数,这里可以忽略过拟合,并选择较大的参数空间。

必需的软件包:

在继续之前,您必须确保已经安装了以下软件包:

  • Tensorflow 2.0 或以上
  • Numpy 1.18 或以上
  • Matplotlib 3.0.0 或以上版本
  • Seaborn 0.9.0 或以上

在继续之前做一点解释

有几个算法的关键部分,你应该知道。但是如果你先打开它,在你进入文本之前,在代码中浮现你自己,那将是最好的。

算法中的关键是你在算法中使用的一组基因。

基因被定义为五种类型的层,其中第一层是身份函数,因此输出与输入相同。身份函数服务于缺少层的目的,实现一个空层比从基因集中删除一个层更容易。

然后,这些基因为模型产生随机层,正如在random_element()方法中定义的那样。该方法返回元组,将图层类型与其参数相关联。所有层只有一个参数,包括卷积层,其中滤波器的数量固定为一个小值。小尺寸的填充物用于加速计算(见本节开头)。

接下来是使用random_element()函数的random_architecture()函数,创建一个作为元组列表的架构。例如,这可能是一个架构:[(3, (2, 2)), (0, 16.0), (1, None), (1, None), (1, None), (3, (2, 2)), (1, None), (0, 16.0)]。您可以解密从左到右(从第一层到最后一层)读取的架构,并比较定义的基因中第一个元组的元素中的数字,这些基因在available_genes字典中。如果你试着在 Jupyter 笔记本中生成一些架构来了解它将会是什么样子,这是最好的。
事实上,你现在可以得出结论,群体中的一个个体(即一个架构)由一系列元组表示,这些元组表示不同的基因(即我们的架构搜索问题中的层)。您也可以尝试使用init_train_and_eval()方法通过传递一个带有架构的列表来训练一个架构。该函数返回验证精度,如果模型编译失败,则精度为零。

进入进化算法之前的最后一个重要功能是mutate_arch(),它负责你群体中每个个体的基因突变。该函数只是在你的模型列表中选择一个随机索引,并使用random_element()函数用一个随机元素替换它。

算法是如何工作的?

正则化进化算法在regularized_evolution()函数中实现。如何使用该函数以及相应的参数在做什么在它的 docstring 中有解释。
算法一般通过重复三个步骤来工作,其中的步骤称为循环。在每一个循环中,通过锦标赛选择来选择一个个体,然后对其进行变异,并从群体中移除最老的个体。最后一步是通过定义 FIFO 队列数据结构中的填充来执行的,因此那些较早添加的也较早被移除。下图更精确地描述了这一过程:

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

作为图表的正则化进化。相对于之前的 EA 图的差异用半透明的洋红色正方形标记。基于 Real E .等人在《aaai 人工智能会议论文集》(第 33 卷,第 4780–4789 页)。

运行算法

当算法运行时,您应该监控一些事情,这表明它的行为有多好。

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

正则化进化优化过程中的日志

这里的分数表示在给定数据集(这里是 cifar-10 )的给定架构评估期间获得的验证准确性。有几个值,像平均值、标准差和种群中最适合的个体。此外,由于在老化进化中,最适合的个体可能会死亡,因此也存在优化期间遇到的最佳模型的指示符。
随着算法的进展,你应该会看到或多或少,平均值增加,标准差减少。其背后的原因是群体中越来越多的个体共享相似的基因,从而具有相似的适合度(或验证准确性)。通常,该过程不是单调的,均值上升而标准差保持不变,然后保持不变,标准差下降。

算法的结果

经过指定数量的循环后,您将获得优化过程中遇到的最佳模型以及每个循环中的所有模型。您可以使用运行正则化进化的单元格下方的单元格,将其绘制为每个周期的分数分布。你应该得到如下图:

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

你可以发现它收敛于某一点。

您可以看到,验证准确性在开始时迅速提高,然后来回波动。通常,这是一个很好的趋同指标,表明大多数群体共享一组最佳基因。然而,有时这也表明你陷入了局部最小值,因此你可以减少锦标赛选择中的样本数。
我在 600 次循环后获得的最佳模型如下所示:

([(1, None),
  (0, 16),
  (0, 16),
  (-1, <function __main__.random_element.<locals>.<lambda>>),
  (1, None),
  (0, 16),
  (2, ('renorm', True)),
  (0, 16),
  (-1, <function __main__.random_element.<locals>.<lambda>>),
  (1, None)],
 0.6743999719619751)

这转化为具有以下层的架构:

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

事实上,我可以删除身份层,因为他们什么也不做。但是为了清楚起见我把它们留下了。

之后,您可以获得模型,并通过增加每个卷积层(如前一层的 2 倍,如 16、32、64、128)将其放大一点。然后,使用之前使用的数据集(cifar-10)训练模型。例如上面的例子,我在验证集上获得了大约 71%的准确率。如果我在此基础上使用图像增强,那么模型会给我多一点,大约是 77%。

然而,如果你想在真实案例中使用它,应该使用一组单独的图像(一个测试集)。这是因为您正在针对验证集优化您的架构,所以您的架构可能会过度适应验证集。但是那是另一个故事的主题,不是这个,但是要小心

总结

进化算法是搜索复杂搜索空间的有效方法。他们研究群体,群体是一组个体,每个个体都有一组基因。基因是个体的特征,并且可以通过例如用其他值随机替换来突变。然后,进化算法迭代地选择那些在给定问题中表现良好的(那些最适合的),并对它们进行变异。由于群体大小是固定的,所以那些表现不好的群体不会更早或更早地被排除在群体之外。有规律的进化(也称为老化进化)为种群中的个体引入了年龄,因此每个人都随着时间而消亡,只有年轻的个体通过从最适合的个体中选择的基因存活下来。它增加了种群的多样性,因此可以找到更好的解决方案。
进化算法可用于机器学习中的架构搜索,例如卷积神经网络。他们在大量可能的模型(搜索空间)中有效地搜索,并以相对较少的迭代次数找到最优解。

解释:

  • *搜索空间是某个问题中所有可能的结果或结果的集合。试着把它想象成所有的模型,你可以用给定类型的层来创建。
  • **连续训练几个机器学习模型通常会给出不同的结果,每次训练时,即使使用相同的数据和迭代次数。你可以在 Jupyter 的笔记本上找到它,连续几次训练同一个模型,仍然给出不同的结果。
  • ***您可以注意到没有交叉,这是因为没有交叉会使算法更简单,因此可以轻松地针对群集中的几个节点进行并行化。

参考资料:

[1] Kotthoff,l .,Thornton,c .,Hoos,H. H .,Hutter,f .,和 Leyton-Brown,K. (2017 年)。auto-WEKA 2.0:WEKA 中的自动模型选择和超参数优化。机器学习研究杂志18 (1),826–830。

[2]福雷尔,m .,克莱因,a .,艾根伯格,k .,斯普林根伯格,j .,布卢姆,m .,&胡特,F. (2015)。高效和健壮的自动化机器学习。在神经信息处理系统的进展(第 2962-2970 页)。

[3]乐,傅伟文,穆尔,陈建华(2020)。使用特征集选择器将基于树的自动机器学习扩展到生物医学大数据。生物信息学36 (1),250–256。

[4] Real,e .,Aggarwal,a .,Huang,y .,& Le,Q. V. (2019,7 月)。图像分类器结构搜索的正则化进化。aaai 人工智能会议论文集*(第 33 卷,第 4780-4789 页)。*

[5]托马西尼(1999 年)。并行和分布式进化算法:综述。

进入量子计算领域你需要知道什么

原文:https://towardsdatascience.com/exactly-what-you-need-to-know-to-get-into-quantum-computing-5632cc2be9ce?source=collection_archive---------11-----------------------

不要说“我不够聪明,做不了量子”

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

照片由energepic.com派克斯拍摄

尽管量子计算是一项相对古老的技术,但它最近已经获得了业界和媒体的大量关注。量子计算最早出现在 20 世纪 80 年代。然而,目前围绕这项技术的吸引力正在上升,这有多种原因。

近年来,量子计算已经从纯理论走向实用。现在,有真正的量子计算机,你可以在上面运行简单的程序。

此外,不同的公司都在努力增加感兴趣的人的量子知识。

今天,我们生活在一个科技的时代;它就在我们周围。作为数据科学家,我们每天都要面对越来越多的数据。要处理、分析和清理的数据的增加,打开了量子技术如何帮助转变数据科学领域和许多其他领域的大门。

现在的问题是,每当一个从事量子计算的人问另一个人为什么他们不考虑加入这个领域时,答案通常是两种情况之一:

  1. 没有聪明到可以加入量子。
  2. 或者,它太复杂了,需要很多我不知道/不喜欢的数学知识。

在这篇文章中,我想作为一个两年多前才加入这个领域的人和你谈谈。我想告诉你,大多数让你不要涉足量子计算领域的担忧都是不准确的。

我想向你们展示进入量子计算需要什么。我想向你们建议,进入量子计算并不比进入数据科学或任何其他技术领域更难。

那么,从量子计算开始,你真的需要知道什么?

量子计算入门知识

我会尽量布局一下你进入量子计算可能需要/不需要的知识。你愿不愿意将取决于你到底想在这个领域做什么。

例如,如果你已经是一名程序员或数据科学家,你想探索量子技术如何改变你的工作,你可能不需要知道太多的物理或力学知识就可以到达你不会去的地方。

另一方面,如果你想进入量子位的构造和它们如何工作,你将需要比编程和数学知识更多的物理/力学知识。

编程;编排

要开始使用 quantum,您可能需要了解一些编程基础知识。虽然目前有一些编程语言完全是为了给量子计算机编程而设计的,但是当你进入这个领域的时候,你并不需要学习这样的语言。

今天用于编程实际量子机器的最常用的编程语言之一是 Python

所以,如果你想尝试给量子机器编程,我建议你从 IBM 的开源工具包 Qiskit 开始。

使用 Qiskit 不仅可以让你编写一个真正的 IBM 量子机器,还可以帮助你轻松地学习许多量子概念。一旦你熟悉了量子概念,你就可以尝试学习一门量子编程语言。

数学

数学,可能是第一个让人们远离量子计算的东西。好吧,我不骗你;量子计算涉及到一些数学知识。

我还认为数学涉及所有其他技术领域,如机器学习、人工智能和自然语言处理。

事实上,其中一些数据科学领域包含比量子计算更复杂的数学!我知道这听起来不真实,但事实如此。

让量子计算发挥其魔力的基础数学是 线性代数 。量子计算中的一切,从量子位和门的表示到电路的功能,都可以用各种形式的线性代数来描述。

另一个真正涉及到量子计算的数学领域是 概率论 的基础知识。

就是这样。线性代数和概率论。两个领域涉及数据科学的所有子领域和当前大部分技术领域。

这并不是说随着你在这个领域的发展,事情不会变得复杂,但是所有的领域不都是这样吗?

物理/力学

量子计算的内在功能,比如纠缠和量子叠加,都是纯物理现象。它们有一些物理定律来控制和解释它们为什么会发生。

然而,经典计算机的内部功能是一样的。你不需要确切地知道你的电脑硬件是如何工作的,就可以用它来创造伟大的东西。你只需要知道如何使用它。

同样的逻辑也适用于量子计算。要成为一名量子软件开发人员,你只需要知道量子计算机是如何工作的,然后用它来构建你自己的应用程序。

如果你打算从事或参与建造量子计算硬件,你将需要真正了解量子计算机如何工作的物理和力学。

如果你想构建一个经典的处理器或 GPU 也是如此。您需要深入了解允许该硬件在这两种情况下正确运行的物理原理。

好奇心

在我看来,好奇心是进入量子计算领域最重要的心态。我知道好奇心不是一种知识,但是为了这篇文章而提到它是至关重要的。

我进入量子计算是因为我很好奇量子计算如何让我们目前的技术变得更好。它怎么能把非常先进的东西变得更先进呢?

我很想了解更多关于量子计算的知识,因为起初,这听起来像科幻小说,而不是实际可以开发的东西。

我的大多数同事在进入这个领域时都有同样的心态。作为人类,我们总是被吸引到让我们的思想漫游和自由想象的地方。当事情以不同于我们所习惯的方式运作时,这引起了我们的兴趣。

这种好奇心导致了我们今天所有的科学和技术进步,也将导致许多进步的产生。

最后的想法

量子计算机与其他任何技术领域没有什么不同。它只是有一个坏名声,因为在某个时间点,这个词 【量子】复合体 联系在一起。所以,现在每当有人提到量子,你脑海中浮现的第一件事——直到最近,我的第一件事——是“哦,那一定非常复杂!”

我想留下两件事。首先,如果你曾经决定接近量子计算,以同样的心态去做,你做任何其他领域。所有领域都有复杂的主题;他们都有一个学习曲线,有些比其他人更陡。然而,他们都这样做。

第二个,释放你的好奇心;让它带领你去探索和尝试新的领域和方面。我可以向你保证,如果你有进入量子计算的好奇心,你有这样做的智慧。

你足够聪明,可以进入任何你想进入的领域,而不仅仅是量子。所以,不要让量子这个词吓倒你,或者阻止你跳入这个神秘的领域。我在这里告诉你,现在是开始这样做的最佳时机。

[## 为什么现在是开始量子计算的最佳时机的 4 个理由

一个非常欢迎新来者的全新领域

medium.com](https://medium.com/better-programming/4-reasons-why-now-is-the-best-time-to-start-with-quantum-computing-753437487ef4) [## 向量子领域迈出第一步

量子门和量子电路导论

towardsdatascience.com](/take-your-first-step-into-the-quantum-realm-a13e99fab886)

考察霍瓦特钟及其背后的统计方法

原文:https://towardsdatascience.com/examining-the-horvath-clock-and-the-significance-of-biological-age-a5d64b73bc44?source=collection_archive---------12-----------------------

如何从 DNA 甲基化数据中找到生物年龄

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

来源: Unsplash 本人编辑

想象一下,你是一名研究人员,在实验室里研制一种**抗衰老药丸。**经过几个月对不同历史群体使用的不同抗衰老补充剂的研究,你找到了合适的干预方法。现在的问题变成了你如何证明干预确实抑制了衰老?

在临床试验中,你不能等到病人的整个生命周期来验证抗衰老补充剂实际上在哪里起作用。那会浪费时间。

相反,我们需要一个能够在短时间内测量评估不同干预的有效性的指标。这是对衰老生物标志物需求的主要原因。

在我们研究不同的衰老生物标志物之前,定义几个概念是很重要的。第一个是,什么是衰老?

字典对衰老的定义是变老的过程。够简单吧?

嗯,研究人员通常将衰老分为两个不同的类别:**实足年龄、生物年龄。**实足年龄是通常理解的术语中的衰老;你多大了。从你出生到现在的时间。

生物年龄是一个新概念。生物年龄是你的细胞随着时间的推移而发生变化的方式,并且会受到许多不同生活方式因素的影响。为了给你一个直观的例子,让我们以一对双胞胎为例,一个吸烟,一个不吸烟。吸烟者的 生物年龄 会高于不吸烟者。因为他做了一个糟糕的生活方式选择,加速了他的衰老。双胞胎的 实足年龄 应该是一样的。

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

相同实足年龄的人,由于生活方式的差异,可以有不同的生物年龄。来源: Unsplash 本人编辑

通过测量你的生理年龄与实际年龄的比例,它可以给你一个很好的衰老速度的概念。如果你的某个组织按时间顺序是 50 岁,但生物学上是 30 岁,那就很好了。如果你在时间上是 50 岁,但在生理上是 70 岁,那就糟了。

这篇文章中展示的许多研究的关键是确定一个可以显示生物年龄的生物标志物。有几个可能的候选人:

  1. 端粒长度(染色体末端的帽)
  2. 基因表达水平
  3. 蛋白质表达水平

但是最准确、最广泛使用的生物标记叫做 **DNA 甲基化。**研究人员发现,DNA 甲基化是唯一符合被认为是生物年龄标志的标准的生物标志物。

那么有哪些标准呢?

  1. 与实际年龄有很强的相关性
  2. 预测年龄相关的表型
  3. 对不同的干预/生活方式的改变做出反应

甲基化时钟符合这些标准,这使它成为一个非常好的候选物,也是迄今为止研究最多的衰老生物标志物。

dna 甲基化

DNA 甲基化是被称为表观遗传学的更大研究的一部分。表观遗传学是调节基因组的不同生物过程的集合。这是导致细胞分化的原因,或者说是使你的神经细胞不同于肌肉细胞的原因。

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

CH3(甲基)附着在 CpG 位点的胞嘧啶上来源:维基共享

DNA 甲基化通过在 CpG 位点添加甲基基团(CH3)来改变表达。CpG 位点是基因组中胞嘧啶核苷酸后接鸟嘌呤核苷酸的位置。甲基可以与胞嘧啶核苷酸结合,生成5-甲基胞嘧啶。基因组中 CpG 位点出现频率高的地方被称为 CpG 岛 。人类基因组上大约有2800 万个 CpG 位点27000 个 CpG 岛。

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

5-甲基胞嘧啶有一个额外的甲基。来源:[研究之门](http://‘From Death, Lead Me to Immortality’ – Mantra of Ageing Skeletal Muscle - Scientific Figure on ResearchGate. Available from: https://www.researchgate.net/figure/Methylation-of-cytosine-to-5-methylcytosine_fig4_259111694 [accessed 13 Mar, 2020])

CpG 岛通常位于启动子所在的位置或 DNA 中转录开始的区域。约 70%的人类启动子 CpG 含量高。推测基因启动子中 CpG 位点的甲基化可能抑制基因表达。

随着年龄的增长,我们的甲基化模式会发生变化。当我们的细胞分裂时**“表观遗传噪音”**被加入并改变甲基化模式。这个想法是找到以可预测的方式变化的 CpG,以便开发生物学年龄估计。

开发生物年龄的预测器

现在,我们如何从 DNA 甲基化中获取信息,并将其转化为功能性衰老生物标志物?这就是加州大学洛杉矶分校的史蒂夫·霍瓦特博士发挥作用的地方。霍瓦特被认为创造了最常用的甲基化钟之一,称为“霍瓦特钟”。霍瓦特钟提供了一种可以用于多种细胞类型的生物年龄测量方法。我将概述甲基化数据转化为年龄的过程。

霍瓦特收集了从 Illumina 甲基化检测 27k 和 450k 测得的甲基化数据集。27k 看起来大约。27,000 个 CpG 站点,而 450k 查看 450,000 个 CpG 站点,因此得名。

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

这个截图显示了数据输入后的样子。我的电脑来源截图

甲基化是的类似物。它要么在 CpG 网站上,要么不在。然而,这种分析的工作方式是,它观察给定组织中成千上万个细胞的甲基化,然后找到那些甲基化细胞的比例。这就是为什么当输入到他的时钟统计模型中时,CpG 位点的值在 0 和 1 之间。1 在所有细胞中都是甲基化的,0 在所有细胞中都不是甲基化的。

跳过数据标准化步骤,为了从大约 21,000 个将被输入的位点中找到 CpG 位点,霍瓦特使用了一个根据实际年龄训练的弹性网络回归模型。这是一个使用线性回归的统计模型,但是使用了正则化技术来消除和缩减大量参数。查看这个视频系列了解更多。

该模型有 21,000 个参数,其中许多参数对创建时钟并不重要。通过使用这种弹性网络回归,它可以让你摆脱许多无用的参数,霍瓦特缩小到 353

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

霍瓦特时钟年龄和真实年龄的相关性来源:维基共享资源

该模型是根据实际年龄训练的,因为最重要的标准之一是它与实际年龄有很强的相关性,因为实际年龄毕竟是生物年龄的良好代表。霍瓦特时钟年龄实际上与实足年龄的皮尔逊相关系数为 0.98,这是前所未有的。

霍瓦特在 82 个数据集和许多不同类型的组织和细胞类型上训练和测试了他的模型。最终结果是一个以 353 个 CpG 位点作为输入的公式,其权重(系数)显示了与生物年龄的正或负关系。

在创建这篇文章的过程中,我遵循了霍瓦特博士布置的一个教程,该教程采用了一个数据集,并展示了如何用 r 编写模型。这是一个非常酷的教程,GitHub 链接在这里

后续步骤

霍瓦特钟创建于 2013 年。从那以后,随着耶鲁大学的摩根·莱文博士开发的表生时钟和加州大学洛杉矶分校的阿克·卢创造的表生时钟,表观遗传学时钟领域有了很大的进展。

新的表观遗传学时钟对预测专门的疾病特异性时钟感兴趣。创造一种可以预测细胞衰老水平的时钟。随着前沿研究人员不断取得突破,有许多挑战和问题需要解决。

这篇文章是为了帮助我掌握对表观遗传时钟的第一原理的理解,这让我着迷了一段时间。关于表观遗传时钟和生物学年龄,我还有许多问题,最深刻的是甲基化变化背后的生物学机制是什么?我仍然不清楚这是如何工作的,尽管我已经读到这是由于“表观遗传维持系统”。这可能与大卫·辛克莱的衰老传播信息理论有关,我正在读他的书《寿命》。

下次见。

嘿大家好!👋我是亚伦,一个 15 岁的孩子,对人工智能和人类长寿之间的交叉有着超级的热情。请随时在Linkedin上与我联系,或者查看我的完整 作品集

在流行数据集上检验 RCNs 的性能

原文:https://towardsdatascience.com/examining-the-performance-of-rcns-on-popular-datasets-1d6a2a8852c1?source=collection_archive---------36-----------------------

皇家护理学院

大脑启发的计算机视觉模型有多好?

递归皮层网络基于与我们在深度学习中习惯的想法有很大不同的想法。那么,那些受神经科学启发的想法有多好呢?在这篇文章中,我们检查了 rcn 在不同任务上的表现,并对作者引入的想法进行了消融研究。除非另有说明,本文全部基于 RCNs 的论文[1]及其补充文件。

注:本文所有图表均取自【1】。

RCNs 的第一个测试是基于文本的验证码,它可以灵活地处理。500 个 reCAPTCHA 图像用于设置一些超参数的值,包括 RCN 将要被训练的字体。是的,RCN 实际上不是直接在 reCAPTCHA 图像上训练的,而是在对其进行了 10 次变换的单个字母上训练的,如图 1 所示,产生了总共 260 个图像的训练数据集。请记住,中间层仍在 SHREC 3D 数据集上进行训练,不包括在这些数字中。

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

图 1:为验证码图片构建的 RCN 的训练数据集。

这产生了一个模型,该模型以 84.2%的成功率为 reCAPTCHA 提供答案,而人类工人达到了 87.4%的准确率。然而,需要注意的是,如果答案产生的字符串长度与实际长度相似,并且有 0 或 1 个错误字符,则接受答案。这个成功率在逻辑上打破了基于文本的验证码,例如,你不希望一个机器人以这个成功率在你的网站上创建假账户。破解基于文本的验证码是否是一个壮举是另一个讨论,但这里明确的壮举是数据效率和推广到看不见的条件的能力,这将在剩余的实验中变得更加清楚。

为了了解它与 ConvNet 的对比,作者建立了一个 reCAPTCHA 控制集,并基于谷歌街景和 reCAPTCHA 团队 2013 年的一篇论文建立了一个 conv net 模型[2]。该论文声称,在困难的例子上达到 99.8%的准确率,但训练集“在数百万的数量级”。RCN 的作者在 79,000 张图像上训练了 ConvNet,并添加了残余连接,因为论文是旧的。前一段的 ConvNet 和 RCN 得分相当。然而,在增加测试集中字符之间的水平间距时(该间距不在训练集中,但应该使字母更清晰、更容易识别),ConvNet 的性能急剧下降,而 RCN 的性能则有所增加,如表 1 所示。

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

表 1:reCAPTCHA 控制集上 RCN 和 ConvNet 的性能比较。“间距”是水平间距。

为了展示 rcn 的高数据效率,他们在一次性学习 Omniglot 挑战赛上进行了测试。数据集由 20 个符号组成,每个符号有一个训练图像和一个测试图像。从 Omniglot 挑战的 3 年进度报告中,您可以看到他们的成果仍然令人印象深刻,如摘自该报告的表 2 所示[3]。在您的评估中,您应该考虑到 rcn 与 ConvNets 不同,几十年来没有经过不同研究人员的改进。需要注意的是,BPL 并不是像 RCNs 那样的通用架构,这也是它表现如此出色的原因。

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

表 2:不同型号在单镜头 Omniglot 挑战赛上的表现。

RCN 论文中的另一个重要实验是对 MNIST 噪声变体的测试。实验如下进行。他们在 MNIST 数据集的干净图像上训练了 3 个模型:1000 幅图像上的 RCN,1000 幅图像上的 CNN,以及 60000 幅图像上的 CNN。然后,他们在 MNIST 测试图像上测试了每个模型的性能,但添加了 6 种不同强度的不同类型的噪声,如表 3 所示。RCN 在这项测试中的优势从数字中显而易见,因为它始终胜过 ConvNets。但是,我仍然希望您记住,rcn 是在 SHREC 3D 数据集的 10K 图像上预先训练的。

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

表 3:一个 RCN 和两个 ConvNets 在噪声 MNIST 上的性能。报告的数字是测试精度,括号中的数字是标准偏差。

此外,作者进行了一项消融研究,以观察横向连接和反向传递是否有用。在这项研究中,他们测试了具有不同配置的 RCN 在噪声小于 MNIST 方面的性能,如表 4 所示。这个测试表明,对于高数据效率,RCNs 中的所有思想都非常有用。

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

表 4:消融研究结果。报告的数字是分类精度。FP 指的是向前传递,BP 指的是向后传递,Lats 指的是横向连接。扰动因子是横向连接的超参数。

作者做了更多的实验,包括在 ICDAR 挑战上测试 rcn,在不同的 CAPTCHA 数据集上测试,在从有噪声的 MNIST 图像重建上测试,以及在 3D 对象的分类上测试。然而,它们不会在本文中讨论,但是我可能会将它们包含在后续文章中,该后续文章将对 rcn 进行更具批判性的分析,以及我们可以从中学到什么。

您可能会有一个迫切的问题,如果 rcn 是数据有效的,为什么不在现实生活中应用。这有多种原因,但即使是作者也承认的两个主要原因是,它不适用于大规模数据集,并且它假设背景是单一的东西,不包含信息。用作者自己的话说,这是两个原因:

“…因为 RCN 将每个训练样本的原型存储在其倒数第二层(用于分类),所以扩展到非常大的数据集,如 ImageNet 和其他对象识别基准,其中 CNN(如 AlexNet)是最先进的,可能会很困难…”

在真实图像中,背景上下文提供了关于场景中可能存在的对象的无价信息。这个信息目前被 RCN 忽略,RCN 只对前景对象建模,忽略上下文。另一个极端是,CNN 不加区分地汇总前景和背景信息(这样就有可能通过显示脱离上下文的对象来欺骗 CNN)”

那为什么要写各种各样的文章呢?因为这两个缺点并不存在于所有的数据集中(想想资源不足的语言的 OCR ),因为想法在开始时有很多限制是正常的,就像胶囊网络一样。

本文到此为止。如果你想了解更多关于 RCNs 的知识,你可以查看它的论文[1]和补充材料文档,或者你可以阅读我的关于 RCNs 结构的文章。

参考资料:

[1] D. George,W. Lehrach,K. Kansky 等,一种以高数据效率进行训练并打破基于文本的验证码的生成视觉模型(2017),科学杂志(第 358 卷—第 6368 期)。

[2] I. Goodfellow,Y. Bulatov,J. Ibraz 等,利用深度卷积神经网络从街景图像中识别多位数号码(2013),Arxiv。

[3] B. Lake,R. Salakhutdinov,& J. Tenenbaum,《Omniglot 挑战:三年进度报告》(2019 年),Arxiv。

使用 Python 检查 Postgres 目录

原文:https://towardsdatascience.com/examining-the-postgres-catalog-with-python-70d872b8f6d5?source=collection_archive---------55-----------------------

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

Postgres 目录中的大量信息

充分利用数据库元数据

像 Postgres 这样的关系数据库包括一组描述数据库中的表的表。这组元数据表被称为目录,它包含了关于数据库的大量细节。我最近需要编写一个程序来从数据库目录中自动提取见解,这使我编写了一个简单的 Python 模块来连接到 Postgres 数据库,从目录中获取信息,并将该信息加载到 Pandas 数据帧中,以便用 Python 进行进一步处理。这篇文章描述了我遵循的过程。

介绍

关于 Postgres 的一个关键事实是,它有两个目录,而不是一个:

  • ANSI (information_schema):这个目录包含为 ANSI 标准定义的公共关系数据库信息。如果您将目录的使用限制在 information_schema,那么您的代码应该与实现 ANSI 标准的其他关系数据库一起工作。
  • PostgreSQL (pg_catalog):这个目录包含特定于 Postgres 的元数据。如果您的代码依赖于这个目录,那么在它可以与其他关系数据库一起使用之前,需要对它进行更新。

当您使用 Postgres UI 管理工具 pgAdmin 检查与数据库相关的对象时,您可以看到数据库 dvdrental 有以下两个目录:

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

出于本文的目的,我将重点放在 ANSI 目录上,因为它有我需要的信息,并且我编写的用于 Postgres ANSI 目录的代码应该可以用于其他关系数据库的目录。

设置 Postgres 目录的探索

为了从 Python 程序中探索 Postgres ANSI 目录,我遵循了以下步骤:

  1. 下载了并安装了 Postgres,还有 pgAdmin 。出于本练习的目的,pgAdmin 提供了快速检查目录和复查 Python 代码结果的完美方法。
  2. 设置 dvdrental 数据库。这个示例数据库很容易设置,并且有丰富的数据库对象,包括触发器、视图、函数和序列,所以在它的 ANSI 目录中有很多需要研究的内容。
  3. 创建了一个 Python 模块来连接数据库,运行一个查询来从一个目录表中提取信息,并将结果保存为一个 pickled 数据帧

以下部分描述了我为实现步骤 3 而编写的 Python 代码。

探索 Postgres 目录的 Python 模块

你可以在这里找到探索 Postgres 目录的 Python 模块。以下是该守则的要点:

  1. 使用 psycopg2 库创建到 Postgres 数据库的连接。使用从配置文件scrape _ db _ catalog _ config . yml读取的参数和用户交互提供的 Postgres 密码建立连接:

2.使用配置文件中的参数构建查询来检查目录中的一个表,运行查询,并将结果复制到 Python 变量 record_col_details 中。

3.将查询结果写入熊猫数据帧:

配置文件包含连接参数(在 general 部分)和查询参数(在 query_scope 部分)。

通过更新配置文件中的参数,您可以轻松地更改查询,以检查不同的目录表(通过更新 from_table)或目录表中不同的列集(通过更新 cols)。这意味着您可以重复地重新运行 Python 模块来从目录中获得您需要的细节,而不必接触 Python 代码。

例如,如果我想在查询的输出中包含 ordinal_position 列,我只需将它添加到配置文件的 cols 列表中:

请注意,Postgres 连接的密码不包含在配置文件中。相反,代码会直接提示用户输入密码:

以下是 Python 模块的输出示例,显示了从 ANSI 目录的列表(information_schema.columns)中选择的列。我可以使用列的数据类型信息来帮助自动创建简单的深度学习模型,以对这些表中的数据进行预测。

column_name                    data_type     table_name
0     last_name            character varying          actor
1      actor_id                      integer          actor
2    first_name            character varying          actor
3   last_update  timestamp without time zone          actor
4    first_name            character varying     actor_info
5      actor_id                      integer     actor_info
6     last_name            character varying     actor_info
7     film_info                         text     actor_info

结论

Postgres ANSI 目录包含关于 Postgres 数据库的有用元数据。通过使用 psycopg2 库连接到数据库并在配置文件中维护连接和查询参数,您可以从 Python 模块中有效地检查目录。

相关资源

检查美国林务局数据以了解标准化燃烧率

原文:https://towardsdatascience.com/examining-us-forest-service-data-to-learn-about-normalized-burn-ratio-2004cd98500a?source=collection_archive---------30-----------------------

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

2019 年 4 月,加利福尼亚州马里布夏至峡谷,燃烧的灌木在春天生长

我的生命从一开始就是由火形成的。我第一次大快朵颐是在 70 年代,当时我去加州的克里尔湖看望我的祖父母;我们发现自己被火包围了。大火包围了我们的湖,侵占了湖港,导致我的家人和其他几十人在湖边寻找避难所,因为野火切断了所有出口。对这个年轻人来说,这些事件既可怕又刺激。

我看过几次马里布大火,在高速公路被火焰包围的时候在盖蒂开 405,把博物馆藏起来。我的家人半夜从着火的房子里逃了出来。困惑地看着我们半裸的邻居在街上互相庇护,消防员耐心地控制着我们被摧毁的家园。

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

我一直对火很感兴趣。1992 年洛杉矶暴乱后,我沿着拉谢内加大街向北走,探索暴乱带来的暴力和流离失所的边缘。在我的记忆中,我仍然可以看到有一天我遇到的一个被烧毁的购物中心。唯一没有倒塌的是三面墙,在被熏黑的墙上,学生们用人行道上的粉笔画了巨大的彩色花朵。我哭了,在这样的破坏中看到这美丽的景色。

在我的一生中,我经常去以前被烧毁的地方,浸泡在茂盛的再生植物中,这些植物是在那之后再生的。迄今为止,我所完成的大部分工作都围绕着如何从破坏中获得增长这一核心兴趣。

什么是 LANDSAT 和归一化燃烧比?

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

美国宇航局戈达德太空飞行中心提供的地球资源卫星图片

1972 年 7 月 23 日,美国发射了地球资源技术卫星。这个计划,以前被称为“地球资源技术卫星计划”,是世界上所有国家中运行时间最长的卫星成像项目。该项目最初由美国国家航空航天局开发,后更名为 LANDSAT,并于 1975 年移交给 NOAA。

这颗卫星和相关的计划已经重复了八次。下一个预定版本的陆地卫星将于 2020 年 12 月发射。1992 年 10 月,美国国会已经认识到这些卫星和这个项目的价值,并通过了土地遥感政策法案。该法案授权进一步采购卫星,并确保以最低成本向传统(科学家)和新用户持续提供大地卫星数字数据和图像。

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

瓦莱丽·托马斯,美国宇航局数据科学家

Valerie Thomas 是美国国家航空航天局的数据分析师和科学家,他为卫星操作控制中心开发了计算机数据系统(1964-1970 年),然后监督了陆地卫星计划的创建(1970-1981 年),成为陆地卫星数据产品的国际专家。在 1974 年 LANDSAT 发射后,Thomas 领导了一个团队进行大面积作物库存实验(LACIE),这是与 NASA 的约翰逊航天中心、国家海洋和大气管理局(NOAA)和美国农业部共同努力的结果。LACIE 展示了空间技术如何使预测小麦产量的过程自动化。

这一概念由一位女性色彩科学家首创,利用土地图像预测作物产量,很快扩展到其他探索领域。除了不同的方式之外,LANDSAT 还被用于发现新物种、跟踪渔业健康状况、观察冰川消退、测量雨林的生物量、测量地震对地表的影响、分析水体的漂移以及记录野火对我们的公共和私人土地的影响。

标准化燃烧比

野火会根据有机物的类型和体积产生不同的强度,有机物是燃烧过程的燃料。强烈的火燃烧起来很热,并释放出巨大的先前包含的能量。

烧伤的严重程度描述了火灾的强度如何影响发生烧伤的土地和生态系统。局限在有限区域内的强烈火灾可能比更广泛和多样化区域内的不太强烈的火灾严重得多。在不同的生态系统或小气候中,火的影响程度是不同的。

归一化燃烧比(NBR)是一种工具,旨在显示大型火灾区域燃烧面积的信息。该公式结合了电磁波谱的近红外(NIR)和短波红外(SWIR)波长的信息。基本上,生物质和其他材料反射近红外区的光,SWIR 范围不同。健康的、未燃烧的植被在 NIR 范围内显示出高反射率,而在光谱的 SWIR 部分显示出低反射率。而最近烧伤的区域在 NIR 中表现出低反射率,在 SWIR 中表现出高反射率。

LANDSAT 通过将 NIR 和 SWIR 传感器放置在大气层上方,使这些类型的测量成为可能,因此我们作为一个物种,可以使用这些卫星测量全球的 NBR。这些测量是从 705 公里(438 英里)的近极地轨道上的一颗卫星在地面上以 30 米(98+英尺)的分辨率进行的,这颗卫星每 99 分钟绕地球一周。如果你想了解这是如何工作的,我发现这个来自联合国外层空间事务办公室的资源很有帮助。

分析美国林务局的实地研究

联合火灾科学项目 (JFSP)是一个跨部门项目,由美国内政部和美国林务局执行。它的任务是资助涉及野地火灾的科学研究,并向火灾管理和预防方面的利益相关者分发研究结果。它有几个合作伙伴,如印第安事务局、土地管理局、美国鱼类野生动物保护局等。由于 JFSP,有大量的野火研究可供公众使用,这些研究的数据和分析可供公众使用。

我决定检查来自的一组数据,在美国西部的五个生态系统中,过去火灾中的植被恢复和燃料条件如何影响燃料和未来的火灾管理。

从实地研究看几起火灾

虽然我检查的数据集(覆盖 47,010 平方米的土地)包含美国各地 19 起不同火灾的信息(覆盖超过 200 万英亩的土地),但我将触及其中的一个子集,以讨论我认为进一步研究和提问应该引向何处。

我对这个项目有很多疑问。什么是标准化燃烧比?森林管理是如何运作的?有什么工具可以用来了解野火?除了这些问题和许多其他问题,我想对美国野火的更大背景有所了解,因为它们在我们南加州的当地媒体环境中扮演着如此重要的角色。我的研究似乎揭示了更多的问题,而不是答案。这里有一些来自实地研究的图表,后面是一些关于全国野火的数字。

里科火灾

在 2005 年 7 月 11 日和 7 月 15 日之间,南达科他州黑山国家森林的 Ricco 大火吞噬了大约 4000 英亩土地,并威胁到了拉皮德城。NBR 的数据显示这场大火很快燃烧了大量的生物质。NBR 的下降幅度如此之低,表明受影响的土地受到了相当大的破坏。但它也显示了相对较快的复苏。与加州西米谷火灾的数据相比,这种差异是非常明显的。

里科大火发生在拉皮德城外一个崎岖的高海拔地区,除了纯粹关注自然的活动外,几乎没有任何人类参与。在这些地区发现的世界级的捕鱼和徒步旅行使它成为当地人对再生有既得利益的地方。周围地区的居民既能获得这些资源,又能从这些资源中获得收入。因此,NBR 数据显示,火灾区域的生物量非常高,随后生物量相对快速地重建,这在很大程度上是由于周围社区支持生物量的再生长。

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

2005 年 Ricco 火灾的归一化燃烧比

西米火

2003 年 10 月 25 日至 11 月 5 日,洛杉矶县西部和文图拉县东部西米山的西米大火吞噬了大约 108,204 英亩土地。它还摧毁了山谷上下数百座建筑。西米大火发生在荒地和城市交界处。与数据集中的其他地区相比,西米山谷包含数百英亩的混凝土,数千个结构,并建造了许多基础设施。燃烧前的这些 NBR 值相对较低,表明生物质的量相对较少。在火灾后,在这项研究中,数据显示生物量永远不会恢复。在人们居住的城市地区,数据缺乏恢复并不奇怪。火灾通常涉及重建(更多的结构,更多的混凝土),这很少看到生物量的增加。

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

2003 年西米火灾的归一化燃烧比

席卷美国的野火

我通过国家海洋和大气管理局的年度野火报告收集了美国各地火灾数量和烧毁面积的数据。这些数字跨越了 1984 年至 2018 年。正如你所看到的,尽管图表中有波动,但这些年来实际发生的野火数量似乎大致一致。

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

然而,当比较火灾数量和实际烧毁的英亩数时,情况就大不相同了。这些数字呈现出明显的上升趋势。媒体和消防专业人士似乎有充分的理由声称美国的野地火灾状况正在恶化。

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

进一步研究

标准化燃烧比只是了解公共土地、森林和野生动物区火灾的一种工具。还有很多其他的,当然,火有不同的种类。一些燃烧强烈而迅速,而另一些闷烧,燃烧数月或数年。比如澳大利亚的“火烧山”大火,已经燃烧了 6000 年。

这些地区的火灾通常是由雷击引起的(例如,阿拉斯加在任何 24 小时内都可以看到 8000 多次闪电)。尽管如此,纵火也是引发全国大量火灾的原因之一。

燃料负荷,以及燃烧后会产生何种类型的火,由许多因素决定。例如,许多火灾肆虐的地区,当地大部分树木因虫害而死亡,如华盛顿北部的 Okanogan-Wenatchee 国家森林中被甲虫杀死的 lodgepole 松林。这场由闪电引发的大火烧毁了大约 175,184 英亩土地,成为华盛顿历史上最大的野火之一。

燃料负载中的干旱和相对湿度在确定任何给定火灾的强度方面也起着重要作用。在这些研究期间,美国大部分地区经历了长期干旱。

我甚至比开始这个项目时对这个课题更感兴趣了。这项工作的一个重大成果是,在一定程度上了解了 NBR 的工作原理,使用它来测量当地生物量的相对健康状况,以及它对火灾研究的影响。在未来,我将对这个数据集和其他数据集做更多的工作,我将探索这些问题的更多方面。

深度学习中偏差方差权衡的例子

原文:https://towardsdatascience.com/examples-of-bias-variance-tradeoff-in-deep-learning-6420476a20bd?source=collection_archive---------26-----------------------

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

西蒙·艾布拉姆斯在 Unsplash 上拍摄的照片

介绍

啊…偏差-方差权衡…

到目前为止,你可能已经在互联网上看到了大量关于这方面的文章。

这不像他们中的一个。

似乎缺乏关于深度学习(高/低)偏差和方差实际上是什么样子的例子。

希望这篇文章能填补这个空白。

以下是我将要报道的内容:

  1. 对偏差和方差的简要概念理解
  2. 不同情况下拟合损失曲线可能的样子
  3. 如何缓解
  4. 如何优先考虑先减轻什么——你应该先降低偏差还是方差?

机器学习中的偏差和方差

术语“偏差”和“方差”实际上在不同的行业有不同的含义。

在心理学中,“偏见”可以指所有的认知偏见!例如信息偏差、确认偏差、注意偏差等。

有趣的事实:我花了 4 年时间获得心理学学位。然而,我在这里写的是一个与此无关的帖子。生活的结局很有趣。

在数学中,术语“方差”指的是平均值的平方偏差。

然而,在机器学习的背景下,它只是指你训练的模型要么学习得太少(偏差),要么学习得太多(方差)。

简单来说,

偏差=一个简单的模型,它不符合数据

相反地…

方差=过度拟合数据的复杂模型

那么这在概念上看起来如何呢?

下面是不同场景的样子。

原谅看起来凌乱的曲线…这些是我用 powerpoint 画的哈哈。

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

高偏差和低方差与低偏差和高方差的对比示例

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

高偏差和高方差与低偏差和低方差的对比示例

我认为最难理解的概念是高偏差和高方差的情况。

我已经对图表进行了注释,指出了高偏差和差异的区域,这样您就可以直观地理解它在概念上的样子。

到目前为止还不错,是吗?

如果你正在寻找数学和推导,有大量的其他职位涵盖这一点。我不会报道这些。

现在你已经对机器学习中的偏差和方差有了一个简单的理解,让我们来看看它们实际上是什么样子的。

偏差方差权衡的例子

这里是一些实际的屏幕截图,展示了不同的偏差与方差的情况。

这些是运行多个深度学习模型以找到每个模型的好例子的结果。😃

低偏差和低方差

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

低偏差和低方差示例

低偏差和高方差

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

低偏差和高方差示例

高偏差和低方差

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

高偏差和低方差示例

高偏差和高方差

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

高偏差和高方差的例子

您已经看到了四个例子,展示了每种组合可能的样子。

你能说出哪些有高偏差或高方差吗?你在看什么来得出你的结论?

这是我用来确定偏差和方差的东西。

我首先关注的是拟合误差统计。

在上面的结果中,这是曲线上标注的两个数字。这些数字代表跨时代的最小训练/验证误差。

如果训练误差很高,比如说 15.39%,那么你可以说你的模型不合适或者偏差很大。

我会在后面解释为什么“可能”是斜体。这里有一个潜在的假设。

如果验证误差很高,比如说 17.77%,并且验证误差和训练误差之间的差异相对较大(看行间的空白),那么你可以说你的模型是过拟合 或者方差很大。

综合来看,如果训练和验证误差较大,且两个统计量之间的差异相对较大,则存在高偏倚和高方差。

请随意向上滚动,再次查看结果,以确认您的理解。

你如何减轻偏差和差异的问题?

这里有一个解决机器学习中偏差/差异的通用框架。

在这种情况下,对于你的深度学习项目。

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

深度学习项目中如何解决偏差和差异的流程图

这里有一个具体的例子来说明正规化是如何帮助的。

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

正则化对深度学习模型的影响的示例

可悲的是,在正规化时,有时你可能会以上述场景结束。

该模型从低偏差、高方差变为高偏差、低方差。

换句话说,通过将 L2 正则化设置为 0.001,我对权重进行了过多的惩罚,导致模型欠拟合。

确定缓解工作的优先顺序

正如你已经看到上面的流程图,你应该几乎总是优先减少偏差。

然而,回想一下,我在上面用斜体提到了“可能”,并暗示了一个潜在的假设。

精神食粮。

你的偏见是根据什么来衡量的?

想一想。

如果你没有注意到,方差的基础是你的偏见。

那么偏见的底线是什么呢?15.39%的训练误差真的很糟糕吗?

看情况。

肯定会坏!或者……也许不是。

偏倚比较的基础是对特定任务的人类水平表现的假设。

如果我告诉你,我正在训练的任务是一个困难的名称实体识别(NER)任务,人类往往有 15%的时间弄错标签。

然后…

15% vs 15.33%还不算太差!

我甚至会说这个模型非常合适!

这个模型的表现相当于人类的表现。

现在问题来了。

你如何衡量人的水平表现?

一个好的方法是对训练集进行分层采样,并覆盖标签。然后让一个人或一群人煞费苦心地给样品贴上标签。

这个人工标记任务的结果就是你的人类水平的表现。

现在只是为了形式和技术…

你的训练错误和人类水平的错误之间的区别就是所谓的“可避免的偏差”。

注意:在做研究时,你可能会遇到术语“贝叶斯错误”。人为误差是贝叶斯误差的近似值。在统计学中,贝叶斯误差是随机结果的任何分类器的最低可能****误差**。它类似于数学中的渐近线;你的目标是尽可能地接近它,但是你知道你永远也不会达到它。**

现在这个问题已经解决了,让我们回到最初关于优先级的问题。

什么时候应该关注减少偏差还是减少方差?

机器学习错误分析

为了了解你应该把时间和精力放在哪里,你需要做一个错误分析。

下面是机器学习错误分析的例子。

理解起来相当简单。

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

优先化偏见的一个例子

在这个例子中,可避免的偏差高于方差;4%对 1%。

因此,您的首要任务应该是减少模型中的偏差。

现在假设我们稍微改变一下。

你现在应该优先考虑哪个?

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

区分差异优先级的示例

在这种情况下,方差高于可避免的偏差;5%对 1.5%。

如果是这种情况,那么把你的时间集中在减少差异上。

到目前为止,我已经介绍了我想介绍的内容。

但是既然我们谈到了错误分析这个话题,让我们更进一步。

如果发生这种情况,你该怎么办?

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

高测试误差示例

我不知道测试和验证错误之间的区别的名称,所以我把它标为“?”。

但是请注意,该模型在训练集和验证集上都做得很好。

但是,它在测试集上没有表现出来。

这是为什么呢?

如果这种情况发生在你身上,你可以参考以下几点:

  1. 你的测试集和你的验证集来自同一个发行版吗?如果你训练一个猫分类器,你的测试集是老虎的图片吗?
  2. 您是否过度使用了验证集?增加验证集的大小。记住也要打乱你的数据。
  3. 您在培训/验证期间使用的评估标准不是一个好的指标。您可能需要改变度量标准。

可能有更多的原因,但这是我会做的几件事。

结尾注释

以下是到目前为止你所读内容的快速总结:

  1. 我开始给你一个概念上的理解,在机器学习的背景下什么是偏差和方差。
  2. 接下来,我展示了四个真实的例子,展示了每种情况下拟合误差曲线的样子。这是为了确保你自己能够更好地识别它们。
  3. 我还通过一个典型的流程图讲述了如何减轻偏差-方差问题。
  4. 最后,我介绍了像人的水平的性能这样的概念,并介绍了如何执行错误分析。

良好的…就是这样!

我真诚地希望你从中有所收获!

直到下一个帖子,再见!!

剧透:下一篇文章会很长。我已经就深度学习网络的变化如何影响预测结果进行了大量实验,并一直在记录我的结果。期待下一个帖子!😃

LinkedIn 简介:蒂莫西·谭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值