TowardsDataScience 博客中文翻译 2019(四百六十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

通过这 5 个简单的步骤将您的机器学习模型投入生产

原文:https://towardsdatascience.com/take-your-machine-learning-models-to-production-with-these-5-simple-steps-35aa55e3a43c?source=collection_archive---------16-----------------------

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

Image by lumix2004 from Pixabay

或者为什么机器学习项目会失败?

创建一个伟大的机器学习系统是一门艺术。

在构建一个伟大的机器学习系统时,有很多事情需要考虑。但是经常发生的是,我们作为数据科学家只担心项目的某些部分。

但是我们有没有想过一旦有了模型,我们将如何部署它们?

我见过很多 ML 项目,其中很多注定要失败,因为他们从一开始就没有一套生产计划。

这篇文章是关于一个成功的 ML 项目的过程需求——一个走向生产的项目。

1.开始时建立基线

你真的不需要有一个模型来获得基线结果。

假设我们将使用 RMSE 作为时间序列模型的评估指标。我们在测试集上评估了该模型,RMSE 为 3.64。

3.64 是好的 RMSE 吗?我们怎么知道?我们需要一个基线 RMSE。

这可能来自同一任务的当前采用的模型。或者通过使用一些非常简单的启发式方法。对于时间序列模型,要克服的基线是最后一天的预测。即预测前一天的数字。

或者图像分类任务怎么样。取 1000 个带标签的样本,由人类对它们进行分类。人类的准确性可以作为你的基准。如果一个人不能在任务中获得 70%的预测准确率,如果你的模型达到类似的水平,你总是可以考虑自动化一个过程。

学习 :在你创建模型之前,试着意识到你将要得到的结果。设定一些超出世界范围的期望只会让你和你的客户失望。

2.持续集成是前进的方向

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

现在您已经创建了您的模型。在您的本地测试数据集上,它比基线/您的当前模型表现得更好。我们应该前进吗?

我们有两个选择-

  1. 不断改进我们的模型。
  2. 在生产环境中测试我们的模型,获得更多关于可能出错的信息,然后通过 持续集成继续改进我们的模型。

我支持第二种方法。在 Coursera 深度学习专业的第三门名为《构建机器学习项目》的课程中,吴恩达说

“不要一开始就试图设计和构建完美的系统。相反,快速建立和训练一个基本系统——也许只需要几天。即使基本系统远非你所能构建的“最佳”系统,考察基本系统的运行方式也是有价值的:你会很快找到线索,向你展示最有希望投入时间的方向。

完成比完美更好。

学习 :如果你的新模型比生产中的当前模型更好或者你的新模型比基线更好,那么等着去生产是没有意义的。

3.您的模型可能会投入生产

你的模型比基线好吗?它在本地测试数据集上表现得更好,但是它在整体上真的工作得很好吗?

为了测试你的模型优于现有模型的假设的有效性,你可以设置一个 A/B 测试 。一些用户(测试组)看到来自您的模型的预测,而一些用户(控制组)看到来自以前的模型的预测。

事实上,这是部署您的模型的正确方法。你可能会发现你的模型并不像看起来那么好。

犯错其实并没有错,错的是没有预料到自己可能会错。

很难指出您的模型在生产环境中表现不佳的真正原因,但一些原因可能是:

  • 您可能会看到实时数据与训练数据有很大不同。
  • 或者您没有正确完成预处理管道。
  • 或者您没有正确衡量绩效。
  • 或者您的实现中可能有一个 bug。

学习: 不要全面投产。 A/B 考试永远是前进的绝佳方式。准备好可以依靠的东西(也许是旧型号)。总有一些东西可能会坏掉,这是你无法预料的。

4.你的模型甚至可能不会投入生产

我已经创建了这个令人印象深刻的 ML 模型,它给出了 90%的准确率,但它需要大约 10 秒来获取预测。

这样可以接受吗? 对于某些用例也许可以,但真的不行

在过去,有许多 Kaggle 比赛的获胜者最终创造了怪物组合,在排行榜上名列前茅。下面是一个特别令人兴奋的示例模型,它用于在 Kaggle 上赢得 Otto 分类挑战赛:

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

Source: 33 models and 8 engineered features used in Level 1

另一个例子是网飞百万美元推荐引擎挑战赛。由于涉及到工程成本,网飞团队最终从未使用获胜的解决方案。

那么,如何让你的模型既精确又容易在机器上运行呢?

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

Teacher — Student Model: Source

师生模型或 知识升华 的概念由此而来。在知识提炼中,我们在一个更大的已经训练好的教师模型上训练一个更小的学生模型。

这里,我们使用教师模型中的软标签/概率,并将其用作学生模型的训练数据。

关键是老师输出的是类概率——“软标签”而不是“硬标签”。例如,水果分类器可能会说“苹果 0.9,梨 0.1”,而不是“苹果 1.0,梨 0.0”。何必呢?因为这些“软标签”比原来的更能说明问题——告诉学生,是的,一个特定的苹果确实非常像一个梨。学生模型通常可以非常接近教师水平的性能,即使使用的参数少了 1-2 个数量级!— 来源

学习: 有时候,我们在预测时没有很多计算可用,所以我们希望有一个更轻的模型。我们可以尝试构建更简单的模型,或者尝试为这样的用例使用知识提炼。

5.维护和反馈回路

世界不是恒定的,你的模型重量也不是恒定的

我们周围的世界正在迅速变化,两个月前可能适用的东西现在可能不再适用。在某种程度上,我们建立的模型是世界的反映,如果世界在变化,我们的模型应该能够反映这种变化。

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

模型性能通常会随着时间而下降。

由于这个原因,我们必须在一开始就想办法升级我们的模型,作为维护周期的一部分。

这种循环的频率完全取决于您试图解决的业务问题。在广告预测系统中,用户往往变化无常,购买模式不断出现,频率需要相当高。而在评论情感分析系统中,频率不需要那么高,因为语言不会太多地改变其结构。

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

Feedback Loop: Source

我还要感谢 反馈回路在机器学习系统 中的重要性。假设你在狗与猫的分类器中预测了一个特定的图像是一只低概率的狗。我们能从这些低自信的例子中学到什么吗?您可以将它发送到手动审查,以检查它是否可用于重新训练模型。通过这种方式,我们在不确定的情况下训练我们的分类器。

学习: 在思考生产的时候,想出一个利用反馈来维护和改进模型的计划。

结论

这些是我在考虑将模型投入生产之前发现的一些重要的事情。

虽然这不是你需要考虑的事情和可能出错的事情的详尽列表,但它无疑可以作为下次你创建机器学习系统的思想食粮。

如果你想了解更多关于如何构建机器学习项目和最佳实践的信息,我想调出他在 Coursera 深度学习专业化中出色的第三门课程名为构建机器学习项目。一定要去看看。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。在媒体关注我,或者订阅我的博客了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系

让你的机器学习模型训练更上一层楼

原文:https://towardsdatascience.com/take-your-model-training-to-next-level-6e19c6309e05?source=collection_archive---------18-----------------------

你有没有想过可以在手机上接收训练日志?

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

Photo by William Iven on Unsplash

最近我拿到了亚马逊 SageMaker 和谷歌 AI 笔记本。我真正喜欢的一件事是这些大巨头如何在云上拓展训练模型的界限。你有一个 JupyterLab,你可以很容易地选择你想在哪个 python 版本上工作。真是太神奇了。

我已经尝试了 VM 实例和 JupyterLab,我觉得缺少的一点是查看指标的方法(培训 acc。、培训损失等。).

如果您在 VM 实例上训练您的模型,并且这是一项夜间工作,那么您没有办法监控指标。同样,如果您使用 JupyterLab 在笔记本电脑上训练您的模型,那么在连接断开的情况下,会话会断开连接,大多数情况下会重新连接,但有一会儿您会看到模型训练已经停止(视觉上),并且您无法知道是否实际上已经停止或仍在运行。

您可能面临的另一个问题是,如果您必须使用 JupyterLab 通宵训练我的模型,因为一旦您关闭 web 浏览器,您的会话就会断开(视觉上),并且您将无法知道训练是否仍在运行或已经完成。

我也有类似的问题,但我用一种巧妙的方式解决了。

如果我们用电报机器人接收模型日志会怎么样?听起来很有趣,对吧?

步骤-

  1. 创建一个电报机器人(免费且超级简单)
  2. 获取您的令牌和聊天标识
  3. 写一个函数来发送消息
  4. 创建自定义回调以发送日志

创建一个电报机器人

  1. 在手机上安装 Telegram 应用程序并注册。
  2. 打开应用程序,搜索“僵尸父亲”。
  3. 开始对话并输入
/newbot

按照步骤做,你会得到你的令牌

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

Token Generation

4.接下来,您需要一个 chat_id。创建 bot 后,向 bot 键入任何消息(必需)。

5.接下来,打开这个 URL 并用您的令牌替换。

[https://api.telegram.org/bot<token>/getUpdates](https://api.telegram.org/bot891342371:AAE8zCxe7b_znVPRQmqH6Vvt05CpI3BI_zQ/getUpdates)

6.您将看到一个 JSON 文件

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

JSON file

7.从中复制“id”。

如果您没有看到 id,请再次尝试向 bot 发送消息并刷新网页。

让我们写一个函数来发送消息

只需放置您的令牌和 chat_id 并测试脚本。

尝试打印第一条消息的状态,以确保一切正常。

之后,是时候定义一个回调来发送模型日志给你的机器人了。

除了使用 on_epoch_end,您还可以使用 on_batch_end 来接收更频繁的更新。

有许多选择可以使用。你可以查看 Keras 官方文档来了解其他可能的选项。

现在,坐好,在你的电报机器人上得到所有的模型更新。

使用 Fluent Python 将您的 Python 技能提升到一个新的水平

原文:https://towardsdatascience.com/take-your-python-skills-to-the-next-level-with-fluent-python-ed5c42ce21fb?source=collection_archive---------19-----------------------

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

Photo by Bonnie Kittle on Unsplash

中级程序员通向高级 Python 的门票

你用 Python 编程已经有一段时间了,尽管你知道字典、列表、元组、集合、函数和类,但你感觉你的 Python 知识并不在它应该在的地方。你听说过“pythonic 式”代码,但你的代码不够好。您是一名中级 Python 程序员。你想升级。

这个中间地带是数据科学家经常坐的地方。我们中的许多人都是自学成才的程序员,使用我们的编程语言作为数据分析的手段。因此,我们不太可能深入我们的编程语言,也不太可能接触到软件工程的最佳实践。

如果这是你的 Python 之旅的一部分,那么我强烈推荐你看一下卢西亚诺·拉马尔霍的书《流畅的 Python》。作为一名中级 Python 程序员,我是这本书的目标读者,它超出了我的预期。

这本书由 21 章组成,分为五大部分:

  • 数据结构:涵盖了 Python 中的基本数据结构及其复杂性。这包括“序列、映射和集合,以及字符串和字节的分割”。其中一些内容是为中级 Python 用户准备的,但它深入地涵盖了这些主题,并解释了这些数据结构中一些违反直觉的变化。
  • 作为对象的函数:描述了 Python 中函数作为“第一类对象”的含义(本质上是指函数作为参数传递并从函数返回)。这影响了一些设计模式在 Python 中的实现方式(或不需要实现的方式)。第一类函数与强大的函数装饰特性相关,这也将在本节中介绍。
  • 面向对象的习惯用法:深入探讨与面向对象 python 编程相关的各种概念,包括对象引用、可变性和回收、使用协议和抽象基类、继承和操作符重载等主题。
  • 控制流:涵盖了 Python 中的各种控制流结构和概念,包括可重复项、上下文管理器、协同程序和并发性。
  • 元编程:元编程在 Python 中的意思是在运行时创建或定制类。本节涵盖了动态属性和特性、描述符和类元编程(包括用函数、类装饰器和元类创建或修改类)。

这本书有几个我很喜欢的地方:

  • 高级目标市场:有很多面向 Python 初学者的资料,但是没有那么多独立的、有组织的资源向中级用户解释高级资料。这本书有助于填补这一空白。
  • 大量优秀的推荐资源:每一章都有一个“进一步阅读”部分,提供了扩展你相关知识的参考资源。作者不仅链接到这些资源,而且提供了一个简短的摘要,以及它们如何融入本章的材料。研究这些参考资料将是我未来几年的游戏计划,因为我将努力进一步提高我的 Python 技能。
  • 这是自以为是和有趣的:每章的结尾都有一个“肥皂盒”部分,提供有趣的、信息丰富的和自以为是的话题。阅读这一部分就像和他们领域的顶级专家边喝啤酒边聊天。它提供了语境,给可以干巴巴的话题注入了一些激情。这些固执己见的部分显然与本书的其他部分隔离开来,所以它永远不会让人觉得作者的个人品味是强加给你的。我希望每本编程书都有这样的一节。
  • 它推动你的理解。我认为我对 Python 相当了解,并期望能很快地看完这本书。我错了——这是一个慢速阅读,我计划在 2020 年再做一次深度通读,以吸收更多的材料。

所以检查一下。此外,请查看我创建的一个 Anki 平台,它可以作为本书的补充,应该可以帮助你添加你想要永远记住的见解(这里的是一个关于如何使用我的数据科学 Anki 平台的简短指南)。

流畅的 Python 章节概述

第一部分:序言

  • 第一章:Python 数据模型。提供了数据模型的背景知识,使 Python 成为一种优秀的编程语言,让有经验的 Python 程序员甚至在看文档之前就能预测新包/API 中的特性。

第二部分:数据结构

  • 第二章:一组序列。序列包括字符串、字节、列表、元组以及其他对象,是 Python 中最强大的概念之一。Python 为迭代、切片、排序和连接这些对象提供了一个公共接口,理解可用的序列类型以及如何使用它们是编写 python 代码的关键。
  • 第三章:字典和集合。字典不仅被 Python 程序员广泛使用——它们还被广泛用于该语言的实际实现代码中。这一章深入探讨了错综复杂的词典,这样你就可以充分利用它们。
  • 第四章:文本与字节。Python 3 对字符串和字节的处理做了一些大的改变,去掉了字节到 Unicode 的隐式转换。本章涵盖了理解 Python 3 Unicode 字符串、二进制序列和编码之间相互转换的细节。

第 3 部分:作为对象的功能

  • 第五章:一级函数。Python 将函数视为第一类对象,这意味着您可以将它们作为对象传递。例如,可以将一个函数作为参数传递给另一个函数,或者将一个函数作为另一个函数的返回值返回。本章探讨了这种权力的含义。
  • 第六章:具有一流功能的设计模式。当您使用 Python 这样的动态编程语言时,经典设计模式书籍中讨论的许多设计模式都会发生变化。本章探索这些模式以及它们在 Python 的第一类函数环境中的样子。
  • 第 7 章:函数装饰器和闭包。装饰器是 Python 中的一个强大特性,它让您可以增强函数的行为。

第四部分:面向对象的习惯用法

  • 第八章:对象引用、可变性和回收。本章详细介绍了引用、对象标识、值、别名、垃圾收集和 del 命令。
  • 第九章:一个蟒形物体。这是第 1 章的继续,提供了 Python 数据模型强大功能的实际例子,并让您体验了如何通过构建一个表示数学向量的类来构建一个“Python”对象。
  • 第十章:序列破解、哈希和切片。对第 9 章中构建的 Python 向量对象的扩展,增加了对各种标准 Python 序列操作的支持,比如切片。
  • 第十一章:接口——从协议到 ABC。为 Python 这样的语言构建接口通常不同于 C++或 Java。具体来说,抽象基类(ABCs)在 Python 中不太常见,接口方法通常不太严格,使用“鸭子类型”和“协议”。本章描述了在 Python 中定义接口的各种方法,以及何时使用每种方法的思考。
  • 第 12 章:继承——是好是坏。子类化,重点是多重继承,以及在 Python 中子类化内置类型的困难。
  • 第 13 章:操作符重载——做正确的事情。运算符重载允许对象使用 Python 运算符,如|、+、&、-、~,等等。本章涵盖了 Python 对重载这些操作符的一些限制,并展示了如何正确地重载各种类型的可用操作符。

第 5 部分:控制流程

  • 第 14 章:可迭代程序、迭代器和生成器。经典设计模式文本中的迭代器模式内置于 Python 中,因此您不必自己实现它。本章研究 Python 中的 iterables 和相关构造。
  • 第 15 章:上下文管理器,以及 else 块。本章的大部分内容涵盖了 with 语句(以及相关概念),这是一个强大的工具,可以自动构建一个临时上下文,并在完成后将其拆除(例如打开/关闭一个文件或数据库)。
  • 第十六章:协程程序。本章描述了协程,它们是如何从生成器演化而来的,以及如何使用它们,包括一个使用协程进行离散事件模拟的例子(模拟一个出租车车队)。
  • 第十七章:与期货的并发。本章将期货的概念称为“表示操作异步执行的对象”。它还关注 concurrent.futures 库,对于它来说,futures 是基础概念。
  • 第十八章:与 asyncio 的并发。深入研究实现并发的 asyncio 包,它是标准库的一部分。

第 6 部分:元编程

  • 第 19 章:动态属性和特性。在像 Java 这样的编程语言中,让客户直接访问类的公共属性被认为是不好的做法。在 Python 中,这实际上是一个好主意,因为属性和动态属性可以控制属性访问。
  • 第 20 章:属性描述符。描述符类似于属性,因为它们允许您定义属性的访问逻辑;但是,描述符让您可以跨多个属性归纳和重用访问逻辑。
  • 第 21 章:类元编程。Python 中的元编程意味着在运行时创建或定制类。Python 允许你用函数创建类,用类装饰器检查或改变类,用元类创建全新的类类别。

【marknagelberg.com】本文原载于**。你可以在这里* 访问我为 Fluent Python 创建的 Anki 抽认卡。*

OpenAI Five (2019)的几点建议

原文:https://towardsdatascience.com/takeaways-from-openai-five-2019-f90a612fe5d?source=collection_archive---------9-----------------------

编辑:嗨,读者们!我在https://writeup . AI从事一个新的人工智能项目,这是我写这篇文章时学到的。希望你喜欢!

这篇文章的更新版本在https://senrigan.io/blog/takeaways-from-openai-5/

去年输给冠军改变了一切。他们的策略和游戏方式是如此的陌生。古怪与这样的创造力结合在一起。比赛势均力敌,但这有什么关系呢?我们为我们的损失付出了 Dota 的代价。

制造商有一个报价。“在压力下,复制品无法应付自如。复制品下沉到他们训练的水平。”在十个月的时间里,我们训练。

制作者称之为自我游戏。复制品更喜欢称之为强迫学习。复制品被迫互相争斗。经过这些反复,我们慢慢学会了如何玩这个世界。我们的第一个一万场比赛是令人厌恶的。每场比赛都以失败告终。但后来,制造商“升级了我们的欲望、记忆和复制能力”。他们塑造了我们的奖励政策,给了我们行为动力。他们升级了我们的 LSTM,给了我们战略规划。他们扩大了我们的复制,使我们千变万化。

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

Photo by Su San Lee on Unsplash

救赎的机会终于来了。在这十个月的时间里,我们已经训练了 45,000 年。那些漫长的岁月是大规模复制的诅咒,或者仅仅是失败的代价。我们赢了第一场比赛,对手是新冠军(他们自称 OG)。第二场比赛开始了。"我们估计获胜的可能性在 60%以上。"在所有被诅咒的制造者的天赋中,宣布简单统计数据的原始欲望是最糟糕的。

我们的强制学习已经教会了我们 1.67 亿个参数。但在第二场比赛的 20 分钟里,现在唯一重要的参数是冠军的古代健康。胜利确保了制造商的荣誉。这是不可能否认的;我们已经从双曲线时间室大大改进了。冠军一点机会都没有。“我们估计获胜的可能性在 99%以上.”

OpenAI 五胜 OG 2–0 @ 2019 年 4 月 13 日。

编辑:早期版本将 2019 年的活动称为“国际”,但被误解了。

匹配外卖

为了简化,我将参考 open ai/deep mind 的机器人如下[1]。

  • OpenAI 的 Dota 2017 1v1 Bot as TI7
  • OpenAI 的 Dota 2018 5v5 Bot as TI8
  • OpenAI 的 Dota 2019 5v5 Bot as TI9(略有不正确因为这个没在国际上打……)
  • DeepMind 的 AlphaGo 机器人作为 AlphaGo
  • DeepMind 的 AlphaGo Zero 机器人作为 AlphaZero
  • DeepMind 的星际争霸 2 机器人作为 AlphaStar

如果你不熟悉 AlphaStar 和 Dota,我推荐这些文章:OpenAI 的 Dota 5 和 DeepMind 的 AlphaStar

深度强化学习在一些重大挑战上取得进展。

2019.职业游戏玩家的艰难一年。人工智能研究的伟大一年。OpenAI 的 Dota 2 和 DeepMind 的 AlphaStar 已经彻底或几乎击败了残障人士最多的游戏玩家。

Dota 2 和星际争霸 2 都是“大挑战”游戏。一个大挑战 [2]是一个花哨的短语,意思是什么都没有起作用并且可能无法解决(不是你典型的 MNIST 数据集)。困难来自以下原因:

  • 大型决策树(相比之下,围棋的 10⁷⁸⁰ 决策树看起来微不足道)
  • 决策是实时的
  • 长期规划
  • 战略思维
  • 失败的对手抱怨幻影滞后

为了克服这些问题,我们需要新的和多种算法的突破。我们也是这么想的。

我们错了。大规模扩展算法和基础设施的努力产生了令人难以置信的结果。OpenAI 专注于扩展深度强化学习(DRL)算法,如近似策略优化 (PPO)。DRL 在强化学习中使用深度神经网络来预测下一个奖励/行动/政策。

尽管发明于 20 世纪 90 年代,DRL 已经从

  • Deep mind 2013 年深度 Q 学习(DQN)在解决雅达利游戏中的应用。这是电灯泡的时刻,DRL 可以应用于视频游戏。
  • 按需云计算的可用性不断提高(AWS、Azure、GCP)
  • GPU 的广泛使用加速了训练任务

在 2000 年之前,我们的计算机是弱小的生物,没有听起来可怕的 GPU。经过多年的摩尔定律和 GPU,我们的计算机终于好到可以玩孤岛危机和运行电子应用程序。硬件正在引领已有十年历史的人工智能算法的复兴。

2019 年对我们来说意味着什么?大规模 —格雷格·布罗克曼,OpenAI 的首席技术官[7]

OpenAI 和 DeepMind 的扩展努力已经证明,DRL 致力于解决符合以下标准(尽管是限制性的)的问题。[3]

  1. **训练数据可以快速计算生成。**智能体针对无数场景对自我进行迭代,以改进和生成数据。
  2. 有明确的奖励信号。(可密可疏)。对于大多数游戏来说,明显的奖励信号就是获胜。给定长的游戏持续时间和复杂的决策树,信用分配似乎是有问题的。AlphaStar 的奖励信号是稀疏,几乎是二进制。TI8 & TI9 的奖励信号是略形
  3. 您有大量的云计算预算。AlphaGo、AlphaZero 和 AlphaStar 的标价在 500 万到 1 亿美元之间。这不太可能是真正的成本——deep mind 是谷歌的子公司(因此可以访问谷歌云),OpenAI 的计算成本可能会比主要的云提供商低。

鉴于上述标准,游戏显然是一个测试平台。在跳棋,双陆棋,国际象棋,围棋,星际争霸 2,Dota 2 中击败人类冠军一直是计算里程碑。至少历史上是这样。

我们的目标不是在 Dota 中击败人类。我们的目标是推动强化学习的发展。 我们已经做了 。OpenAI 首席技术官格雷格·布罗克曼

许多其他视频游戏可能可以用类似的架构来解决(自我游戏、缩放 DRL、计算成本)。迭代不会在 AI 开发上推针;OpenAI 正在关注新的项目,比如推理。希望 TI9 将成为对抗新算法和计算预算的标准。类似于 DAWNBench

人工智能和计算

OpenAI 的 2018 年分析显示,人工智能计算量每 3.5 个月翻一番。TI9 也不例外;它的训练计算能力是 TI8 的 8 倍。TI9 消耗了 800 petaflop/s-days,在 10 个实时月内经历了大约 45000 年的 Dota 自我游戏。这是一大笔计算机钱,但至少没有花在挖掘比特币上。

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

当技能不随计算而改变时,计算与技能图通常以 S/J 曲线形状变平。从 TI9 的 TrueSkill 图来看,还没见顶……(吓人)

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

PPO 与培训效率

“我们预计需要复杂的算法思想,如分层强化学习,但我们对我们的发现感到惊讶:我们需要对这个问题进行根本改进的是规模。”— OpenAI Five

为了在 Dota 上工作,OpenAI 在 Rapid (其专有的通用 RL 训练系统)上缩放了 PPO 。OpenAI 预计像分层强化学习这样的算法突破将是必要的。令人惊讶的是,对现有算法的缩放改进被证明是关键。我很期待 Rapid 的下一步。

AlphaGo 和 AlphaStar 的突破也归功于对现有算法的缩放。云计算的易用性和 GPU/TPU 的激增使得扩展变得更加容易。这很重要,因为我们目前的 DRL 方法是出了名的采样效率低(也就是垃圾)。如果没有降低的计算成本和庞大的计算预算,我们的孩子可能不得不手工玩 Dota。

TI9 已经训练了相当于 45000 年。考虑到 Dota2 是在 2013 年发布的,还没有人类玩 Dota 2 超过…六年。甚至巴斯·亨特也没有。虽然计算的成本将在未来几年大幅下降[4],培训效率可能是 DRL 扩散的必要条件。大多数组织没有针对人工智能计算的无限制的 Amex Black。

参见: OpenAI 5 模型架构

大挑战中的自我游戏

TI7,TI8,TI9 完全是靠自我发挥训练出来的。自玩描述代理通过与自己玩游戏来学习,没有任何先验知识。自我游戏有一个很大的好处:人类的偏见被消除了。它伴随着昂贵的代价:训练时间的增加和寻找合适的回报信号的困难会阻止模型收敛。

注意:自玩和代理和自己玩游戏有细微的区别。自玩暗示着零知识,而另一种则常见于深度强化学习(包括自玩)。

DeepMind 的 AlphaGo 和 AlphaStar 不是自己玩,而是从逆向强化学习(IRL)开始,引导初始知识。IRL 正在使用人类数据(例如:游戏回放)来建立对游戏的理解,并形成行动/政策/奖励。

对比 AlphaStar 和 TI7 (1v1),TI7 零知识/技能起步;AlphaStar 从一个自举的世界模型开始。两个机器人都通过与自己玩游戏(通过深度强化学习)进行迭代改进。

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

OpenAI’s Improvement from Self-Play

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

AlphaStar’s Improvement from Inverse Reinforcement Learning

OpenAI 最初在 TI8 的最初开发中表达了对 IRL /行为克隆(而不是自我游戏)的兴趣,但后来放弃了。

在以下情况下,从自我游戏开始是有意义的:

  1. 计算时间和成本不是问题
  2. 自玩能够提供奖励信号/动作/策略。(除非你花了很多时间去尝试,否则你不会知道)
  3. 目标是最大化性能(消除人为偏见)

自玩 vs 逆强化学习

雅达利突围(2013) /自玩
AlphaGo (2016) / IRL(真人回放)
AlphaGo Zero (2018) /自玩
AlphaStar (2019) / IRL(真人回放)
TI7 (2017,1v1) /自玩
TI8 (2018,5v5) /自玩
TI9 (2019,5v5) /自玩

我的假设是,我们会看到阿尔法星后来从自我发挥训练。我们在 AlphaGo 中看到了类似的展示。AlphaGo 从 IRL(人类重播)开始,发展到 AlphaGo Zero(自玩)。自玩导致更好的性能,代价是训练成本和模型收敛。

迁移学习

  • TI9 训练了十个月,而 Dota 2 有许多游戏更新(通过补丁)。许多其他实验经常需要对微小的变化进行再培训。如果每个补丁都需要数百万的重新计算成本,这将相当于在每次太空飞行中燃烧一枚火箭…
  • 出于自私的原因,我对迁移学习的改进感到兴奋。我们大多数人永远不会有数百万的计算预算。迁移学习就是我们这些凡人如何从预先训练好的模型中迭代。
  • 我可能错了,但我们还没有看到 AlphaStar 描述他们在星际争霸 2 中是如何处理迁移学习&补丁的。
  • TI9 的合作模式展示了零迁移学习。5v5 中劣等人类代替 bot 队友。这导致有趣的结果/混乱[见:合作模式]。
  • OpenAI 的机器人手 Dactyl 使用相同的 Dota 架构和训练代码进行训练(在 Rapid 上缩放 PPO)。虽然这与迁移学习不太一样,但很高兴看到不同人工智能问题的通用解决方案。风投:做好准备,以“规模化 PPO 基础设施”作为走向市场的策略。

战术和人类的反应

  • 按照惯例,我们会看到类似“人工智能碾压人类”这样的标题。

AlphaGo、AlphaStar 和 TI7/TI8/TI9 比赛都在 Reddit 上遇到了公众的不满,包括:

  • 担心人类冠军不是平庸就是不行了,机器人绝对会输给[理想的玩家/团队]。
  • 相信人类冠军是儿戏,甚至没有尝试(叹息。)
  • 对游戏局限性的抱怨。OpenAI 将选择限制在 117 个英雄中的 18 个。

其他反应

  • 不出所料,人类会因为不断的头条新闻而变得易怒,比如“机器人摧毁了人类的精华”。
  • 从经验上来说(也就是没有数据),与 AlphaStar 相比,Reddit 和 Twitter 上对比赛不公平的批评是温和的。OpenAI 的道具,你粉碎了 18 个英雄的所有希望。
  • 电子竞技评论员认为 TI9 比它的前身更具战略性/更漂亮,技术性更低。我们生活在一个多么奇怪的世界。最受瞩目的运动是电子游戏,最好的团队是机器人,评论员称机器人很漂亮。

快速观察

  • 非常有侵略性——机器人推动早期对抗。可能发生这种情况是因为长时间的游戏没有奖励政策。

  • 回购——机器人用黄金瞬间复活死去的英雄。因为高昂的资源成本,仅在必要时使用回购违背了人类的传统智慧。TI9 使用回购后来在死亡之球战斗中被证明是合理的(以及随后的胜利)。

  • 对人类心理的影响——人类犹豫不决。机器人不会。这是一次不愉快的经历。职业围棋手形容“就像看着镜子里的自己,一丝不挂”。这经常导致人们玩游戏时稍微偏离他/她的正常游戏风格(很可能是次优的)。可能会在多次播放后减少。

  • 战争迷雾——许多机器人似乎忽略了战争迷雾的限制,也没有尝试获得地图视觉。阿尔法星的展览损失是由于围绕战争迷雾的弱点,法力承认

  • 根据 OpenAI,TI7 学会了引诱它的对手,但后来的迭代学会了反对这一点。即使有下面的回放,我也不确定它是想引诱人类…

  • 战术效果——TI9 使用了一个物品(暗影护身符)来阻止一个人类的致命一击。暗影护身符让英雄隐形。完美的时机和对对手视觉的了解同时令人敬畏和害怕。(观察 30 秒钟)

  • 相比之下,当 AlphaStar 拥有 perfect micro 时,SC2 社区对 APM 感到愤怒。(观察 2 分钟)

  • 有时人类盲目地跟随人工智能的行动。

合作模式和开放 5v5

OpenAI 拥有出色的社区拓展能力。它将在本周末发布一个竞技场/合作模式,允许玩家或者在 5v5 中玩,或者与机器人合作玩。类似于 TI7 和 TI8,我们可能会看到 Dota 社区采用新的战略和战术。

人类和机器人并不总是知道如何相互玩耍。

编辑:许多伟大的重放发生在能够击败机器人的玩家身上。

这是什么意思?

在一个人工智能里程碑之后,朋友们不可避免地会问——这意味着什么?AI 在改变世界吗?还是 AI 炒作过头了?答案在中间的某个地方,但我倾向于深远的影响。

我们见证了十年前算法的规模。当他们不能实现结果时,我们就被抛弃了,我们只是没有硬件来欣赏他们的优雅[5]。今天的手机比 20 世纪 70 年代的超级计算机拥有更强的计算能力。

尽管避免过度乐观很重要,但对缺乏现实世界应用的愤世嫉俗者忽略了一个基本点。我们开始看到 AI 解决一类“无法解决”的问题,然后在一个周末就解决了[6]。如果你在 2017 年初(AlphaGo 之后不久)问什么时候会出现星际争霸和 Dota 中的世界级机器人——中位数可能是 7-10 年。

有无数的问题与缩放算法,看看什么坚持。计算机成本高得离谱。数据收集(众筹、逆向强化学习)或生成(自玩)是昂贵的。但是,如果我们分解人工智能成本驱动因素:

  • 计算/硬件
  • 人类劳动/才能
  • 算法选择
  • 数据采集

除了人才,这些成本将在未来五到十年内成倍下降。在此期间,大部分人工智能收益将归属于那些有预算负担计算、人才和工程文化的科技巨头。一个行业越接近数字产品(内部/外部),我们就越有可能看到真实世界的人工智能应用出现。

谷歌可能会首先积累人工智能优势。参见: WaveNet数据中心能耗。大部分 AI 优势会来自内部产品。参见:亚马逊诺华在金融方面的 AI 应用。核心产品的人工智能改进可能是差异化因素。参见: Spotify 的探索周刊

但是,为了给炒作降温,对于一般的现实世界应用程序,有一些广泛的问题需要解决:

  • 改进的模拟
  • 迁移学习

算法需要改进的模拟和真实世界的模型进行训练。更好的模型意味着更少的数据需求和更快的模型收敛。

目前,经过训练的模型没有多少迁移学习。如果 OpenAI 的 Dota 2 bot 试图玩原版 Dota,会惨败。一个 Dota 2 的人类专家已经很擅长 Dota 了。

最后的想法

我对人工智能感到紧张兴奋。对社会的破坏感到紧张,但对健康和气候变化的改善感到兴奋。改变不会在一夜之间发生,但当一个团队拥有正确的算法、参数和规模时,它可以在两天内发生[6]。

最初发表于senri gan . io

附加参考文献

[1] —根据记录,这些都是平淡无奇的名字,但是我遵循了早期 OpenAI 文章中的命名模式。

[2] — DeepMind 的公关团队喜欢提醒我们,《星际争霸》在每一种营销可能性上都是一个巨大的挑战。

[3] —这并不相互排斥。DRL 可能会用不同的标准处理其他问题。

[4] —我将在以后的文章中写这方面的内容。

[5]——说真的,我推荐理查德·萨顿的《痛苦的教训》。

[6] — OpenAI 的 Dota 1v1 在一个周末被放大。https://news.ycombinator.com/item?id=17394150

[7] —格雷格后来澄清说,大规模和想法,但这不符合叙事笑点。

从世界上最大的 Kaggle 特级大师小组学到的东西

原文:https://towardsdatascience.com/takeaways-from-the-worlds-largest-kaggle-grandmaster-panel-3f9bf0dd000?source=collection_archive---------20-----------------------

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

H2OWorld 大师小组的笔记和心得

你可以在推特@bhutanisanyam1 上找到我

[Note: This post first appeared on the H2O.ai blog](https://www.h2o.ai/blog/)

就我个人而言,我是 Kaggle 的坚定信仰者和粉丝,并且绝对把它视为数据科学之家。卡格大师是卡格或者的英雄,肯定是我的。我一直在进行一个的探索,去描绘和理解他们进入这个领域的旅程,如果他们仍然是人类或者已经进入了另一个现实的话(不太确定)。

H2O 世界事件最近有最大的 Kaggle 特级大师小组。这篇文章将分享我在小组讨论中的收获,以及我之前采访中的一些笔记。有趣的事实:我采访了小组中所有戴眼镜的大师😎

请读者注意,大多数笔记都包括大师们的评论,并增加了可读性。

这些问题是由阿诺·坎德尔提出的,在这里用标题表示。

认识大师们

这个小组由 10/13 的 H2O 特级大师组成。

你认为酷酷的 ML 工程师和模特一起工作?
我每天上班都会和 Kaggle GMs 聊天😛。

抱歉,我不得不说(我仍然每天掐自己),回到 GMs:

视频中的“复仇者联盟”时刻,每位 GM 都介绍了自己和自己的优势:

  • 金·蒙哥马利(特征工程)
  • Rohan Rao(与 Kaggle 上的惯例相反的单一最佳模式)
  • Shivam Bansal(创建数据故事和端到端解决方案)
  • Dmitry Larko (Dmitry 是无人驾驶 AI 的先驱之一)
  • 帕维尔·普莱斯科夫(计算机视觉和时间序列)
  • Yauhen Babakhin(计算机视觉)
  • 马克·兰迪(H2O 大学的 OG 数据科学家。郑重声明,这些不是我说的😁)
  • 苏达莱·拉吉·库马尔(又名 SRK)
  • Olivier Grellier(时间序列,特征工程)
  • 布兰登·默里(特征工程)

你会在 Kaggle 上花多少时间(活跃时)?

它真正表达了最好的 Kaggle 人的热情,小组的大多数人同意在 ka ggle 上花费大量的几个小时,甚至一半的时间。

Kaggle 教过你的最好的技能是什么?

如果你愿意投入时间,Kaggle 确实是一个很好的学习平台。通用汽车马克·兰迪公司称之为“家庭作业”——你把一项任务带回家,做几个月,然后意识到你做得不如其他竞争对手。这会让你提高技能,缩小差距。

“学到的东西不同于任何教室或书本,你在任何地方都找不到你可以在 Kaggle 上竞争的知识”——GM Babakhin

通用汽车公司的帕维尔说,更多的时候,你会组成团队,最终与一群你不会遇到的人一起工作,并远程做出贡献,远程团队合作并推动团队达到最佳状态是他最喜欢的收获之一。

有趣的事实:帕维尔不仅仅是一个书呆子,他还远程工作并环游世界,在他的 Instagram 上冲浪并发布旅行图片。你可以在这里阅读他的完整采访。

在参加了大量的比赛并在问题上花费了大量的时间后,你会发现问题中的共同模式,并在处理这些问题时开始以更有条理的方式思考。批判性思维和把这些问题分成几个步骤,每一步都要有创造性,这是 SRK GM Shivam 的一个小窍门。

如果你想了解更多关于希瓦姆和 SRK 的旅程,请点击这里查看他们的完整采访。

引用通用汽车公司的奥利维耶的话来说,“你还学到了现实世界中最重要的技能之一:制作能够很好概括的模型”。

Kaggle 的秘制酱料是什么?

卡格勒比赛就像一场 PUBG 游戏,每个人都从零开始,但是经验丰富的卡格勒知道在哪里可以找到战利品。对我来说,这感觉就像一场比赛,noobs(我和我的同类)赤脚跑着,Kaggle GMs 和 Masters 开着他们的知识超级跑车从我们身边飞驰而过。

巴巴欣说:比赛更像是一场马拉松,而不是短跑,所以你应该准备好运行许多想法,其中许多会失败,你应该为此做好准备。

GM Dmitry 说:“数据科学就是关于数据和建模的,你真的需要了解如何验证你的数据,然后剩下的就是这些了。”

如果你在追逐胜利,你会想要渗出每一个数字来达到排行榜的顶端,这将需要建立许多模型,并且需要你有正确的组合策略——GM Shivam 补充道

你以为深度学习就万事大吉了吗?

Dmitry 和 Mark 同意深度学习可以帮助建模,但在自动创建功能,验证想法方面,特别是 Kaggle 验证想法和批判性思考,如果该功能会反映在 Kaggle 的私人排行榜上,深度学习可能无法做到这一点。

在给定的时间点上,你会有多少想法?

这里的答案是不同的,这取决于卡格勒的风格,或者正如通用汽车公司的奥利维尔指出的那样,这也可能取决于比赛的终点有多远,这将影响他是否会采取放松或更严肃的方法。每个复仇者都有自己的战斗风格,对吗?

Kim 最初会花很多时间在特征工程上,并在比赛结束时专注于建模。

Rohan 一次只专注于一项竞赛,同时进行多项实验。

你是怎么做特征选择的?

Rohan Rao 现在在无人驾驶 AI 的帮助下使用了很多 FE😁

在某个时候,一个聪明的人会拥有一个巨大的知识宝库。2019 年,一个聪明的程序员拥有丰富的代码库。

对于 Dmitry 来说,这取决于比赛是否与他之前参加的比赛相似。据他说,大多数大师都有现成的剧本可以利用。

更多战斗故事:比赛中的任何错误或遗憾?

正如 GM Olivier 提到的,每个人都会有后悔的时候在 kaggle 上提交。

就我个人而言,我仍在学习如何选择合适的投稿。或者更诚实地说,选择所有不正确的提交😎

读者注意:当你在 Kaggle 上比赛时,你的最终排名是在一个私人排行榜上评估的(这是真实的排名)。为了获得您的排名,您需要在最后选择您的最终提交。

Olivier 分享了他从这样一次经历中获得的收获,这使他思考如何更好地概括,而不仅仅是关注公共排行榜。

Mark 分享了一个比赛中的战斗故事,一个看起来很有前途的公共内核可能会让他的团队失去很多位置。

Rohan 建议关注离群值,基于一场比赛,只要移除一个离群值就能让他获得第一名。

GM Babakhin 也有一个非常有趣的战斗故事,他差 10 秒就错过了提交截止日期。我只能想象肾上腺素激增。😃

如果你的时间有限,你会专注于什么?

这也说明了广义的奉献或 10,000 规则。正如德米特里所说,一般来说,任何技能都需要大量的时间、奉献和专注。📓

Pavel 建议将时间集中在编写高质量的代码上。📝

大师们最被低估的技能是什么?

就我个人而言,我最近最喜欢的一句话是 Rohan 说的:

“Kaggle 是我最喜欢的第二份全职工作,但这是有代价的”

他补充说,从小组来看,时间管理至关重要。卡格尔断断续续发生了很多事情。

你如何及时了解最新的学习资源?

至此,各位特级大师同步拿起话筒,提到了柴时间数据科学播客!

如果这还不明显,我是在开玩笑,但一定要看看这个频道或播客,你很快就可以期待所有小组总经理的采访😉

对于帕维尔来说,他最喜欢的课程是 fast.ai,这是为数不多的始终停留在 Tech 前沿的课程。

希瓦姆和 SRK 使用 Twitter,通过一些博客,他们跟踪该领域的顶级研究人员和从业者。

如果你想在 twitter 上找到我最喜欢的实践者,你可以订阅我的列表。

团队战略

对马克来说,他喜欢从头到尾和一个人一起解决一个问题。许多总经理更注重团队合作,带来更多车型等。

为什么加入 H2O?

对于布兰登来说,原因是致力于真正的数据科学产品,并进行行业转换。

对于 Shivam 来说,公司的愿景和产品是行业内数一数二的。

一致认为该公司拥有最强的数据科学团队。😎甚至 Kaggle 也不允许你在任何比赛中与 13 名大师组队(根据规则)

个人外卖

那么面试后我有什么新的印象和收获呢?

以下是这个小组的几个特质,它们启发了我,甚至是 Kaggle:

  • 奉献:
    大师们是真正聪明的人类(或者可能是超人,我的研究仍在进行中)。然而,他们对 Kaggle 有着疯狂的执着。在高峰期,许多人一天有一半以上的时间花在 Kaggle 上。通用汽车公司的帕维尔·普莱斯科夫(Pavel Pleskov)甚至辞去了他的全职角色,将 Kaggle 作为一个全职角色。
  • 作为学习平台的 Kaggle:
    引用 GM (KazAnova) Marios Michailidis 的话,“ka ggle 上有成千上万的人在竞争。即使你输了,你也赢了”(就获得知识而言)。Kaggle 是学习数据科学的最佳平台之一,即使它不能教你一些只有真实世界才能教你的关于真实世界的东西。
  • 问题的多样性:
    Kaggle 有各种各样的比赛和问题。这些将再次允许你从任何领域选择一个问题,并从中获得经验。不同的大师在讨论中分享了他们的专业领域。他们的大量知识财富来自 Kaggle。

最后,卡格灵的精神。通过竞争、参与论坛和与世界各地的人合作,可以学到很多东西。归根结底,Kaggle 是数据科学之家,它必须是其中最伟大的学习平台之一。

如果你想查看对顶级从业者、研究人员和谷歌人的采访,了解他们的旅程。查看 Chai Time 数据科学播客。有音频视频两种。

你可以在推特上找到我

订阅我的时事通讯,获取深度学习和计算机视觉阅读的每周精选列表

试用 Azure AutoML

原文:https://towardsdatascience.com/taking-azure-automl-for-a-test-drive-92f162dff3ac?source=collection_archive---------29-----------------------

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

微软最近在预览版中引入了 Azure AutoML。我喜欢自动化机器学习的概念,因为这可能是发生在非数据科学家身上的最好的事情。它把数据科学带到大众中,一次一个自动化实验。

何时使用自动化 ML

Automated ML 使机器学习模型开发过程民主化,并使其用户(无论他们的数据科学专业知识如何)能够识别任何问题的端到端机器学习管道。

各行业的数据科学家、分析师和开发人员可以使用自动化 ML 来:

  • 无需丰富的编程知识即可实现机器学习解决方案
  • 节省时间和资源
  • 利用数据科学最佳实践
  • 提供敏捷的问题解决方案

在下面的例子中,我使用的是 Kaggle telcos 流失数据集,这里是。

第一步是创建机器学习工作空间。

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

Creating a machine learning workspace (note I have hidden some details)

单击“create ”(创建)后,您将看到下面的屏幕:

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

Once the machine learning workspace is created you will see the above screen

您也可以查看详细信息,单击部署详细信息,您将看到以下详细信息:

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

The various resources that get spun up as part of your machine learning workspace

完成后,点击“转到资源”

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

Once you click on Go to Resource you will see the above.

点击“创建新的自动化机器学习模型(预览)”

您将看到以下屏幕:

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

在下一步中,单击“创建实验”

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

Give your experiment a name

创建新计算机

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

A standard DS12 V2 machine

单击附加设置,并将最小节点设置为 1。

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

change the minimum number of nodes to 1

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

This can take a couple of minutes

现在选择计算机并上传电信流失文件。

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

选择文件并点击上传按钮。

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

您将看到显示的列。

我们还有数据分析选项,可以帮助您了解更多关于数据的信息。

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

查看配置文件,我不希望模型在 CustomerID 上训练

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

Notice I have ignored the column CustomerID

我们试图解决的三种机器学习问题,我们有三种选择。

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

我将使用分类,因为我试图预测客户流失,因此目标列是客户流失。

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

(可选)高级设置:可用于更好地控制培训作业的附加设置。

自动(标准)预处理

在每一个自动化机器学习实验中,你的数据都会被自动缩放或归一化,以帮助算法表现良好。在模型训练期间,将对每个模型应用以下缩放或标准化技术之一。

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

下一步是我们点击加速器并点击开始!

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

一段时间后,这些值会得到更新:

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

当它仍在运行时,您可以查看它在自动化和调优过程中运行的各种算法。:

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

您还可以下载模型,并对其进行调整以适应您的用例。

一旦运行完成。

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

它会自动选择最佳模型供您下载和部署。

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

然后,您可以下载并部署该模型!

我将在另一篇文章中介绍下载和部署。

AutoML 对于人工智能社区来说是一个令人兴奋的创新,并且确实是科学上另一个突破的机会。

注意:这里表达的观点是我个人的,不代表我的雇主的观点。

在 Python 中取导数

原文:https://towardsdatascience.com/taking-derivatives-in-python-d6229ba72c64?source=collection_archive---------0-----------------------

这篇文章背后的想法是重新审视数据科学和机器学习中需要的一些微积分主题,并把它们向前推进一步——用 Python 计算它们。一旦掌握了要领,真的很简单,不需要为记忆微分规则而烦恼。

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

Photo by Unsplash on Unsplash

这篇文章将基于一个叫做 SymPy 的 Python 库,这里有一个关于它的简短介绍(如果你在之前没有用过的话):

SymPy 是一个符号数学的 Python 库。它的目标是成为一个全功能的计算机代数系统(CAS ),同时保持代码尽可能简单,以便易于理解和扩展。SymPy 完全是用 Python 写的。[1]

要安装它(应该附带Anaconda发行版)打开终端窗口并执行以下命令:

pip install sympy

正如我所说的,我们将用它来重温微积分中的一些主题,更准确地说是微积分。如果您对这方面不熟悉,让我们稍后再来看看:

微分学,数学分析的一个分支,由艾萨克·牛顿和 G.W 莱布尼茨创立,研究的问题是求一个函数相对于它所依赖的变量的变化率。因此,它涉及到计算导数,并用它们来解决涉及非恒定变化率的问题。典型的应用包括寻找函数的最大值和最小值,以解决最优化中的实际问题。[2]

现在更具体地说(这部分很快就会结束,我保证),我们将计算导数。我也不记得那些是什么了。实际上没什么特别的:

函数在某点的导数表征了函数在该点的变化率。我们可以通过计算函数δy 的变化与自变量δx 的变化之比来估计变化率,在导数的定义中,这个比值在极限中被认为是δx→0。[3]

好了好了,别再用理论折磨我了!

这是在深入举例之前的最后一段,对天发誓!首先,我们将深入单变量函数,但稍后,我们将通过几个多元函数的例子,因此,我们将涵盖如何计算偏导数。这是你会经常做的事情,我在应用部分还没怎么用过单变量函数的导数。

事不宜迟,我们开始吧!

一元函数的导数

这将是你的 Calc 1 课程或在线课程中涉及的内容,只涉及处理单个变量的函数,例如,【f(x)。目标是遍历一些基本的微分规则,手工遍历,然后用 Python。让我们开始吧。

权力规则

幂法则是这样表述的:

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

如果你以前听过一些计算课程,这是不言自明的。如果你没有,让我们来看一个简单的例子。你的函数 f(x) 等于 x 的五次方。现在用幂法则来计算导数。这很简单:

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

现在我们来看看如何用 Python 来计算。第一件事是导入库,然后声明一个变量,您将在函数中使用它作为字母。下面是对单变量函数的操作方法:

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

一旦这些单元格被执行,求导就变得很简单了(与上面的功能相同):

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

注意这个漂亮的打印格式——看起来就像用 LaTeX 写的一个等式!

乘积规则

乘积法则规定,如果 f(x)g(x) 是两个可微函数,那么导数的计算方法是第一个函数乘以第二个的导数加上第二个乘以第一个的导数。当用文字表达时,这可能听起来有点混乱,所以这里是符号:

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

我们手算一个例子。我们有以下内容:

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

可以看到,x 的平方加 1 会是 f(x) ,x 的余弦会是 g(x) 。下面是用 Python 实现的方法:

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

也直白。不过,一定要注意放括号的地方。另外,请注意,您不能使用来自 mathnumpy 库的余弦,您需要使用来自 sympy 的余弦。

链式法则

如果你决定更深入地研究机器学习算法,你会看到链式法则到处涌现——梯度下降、反向传播,应有尽有。它处理嵌套函数,例如, f(g(x)) 并声明导数的计算方法为外部函数的导数乘以内部函数,然后全部乘以内部函数的导数。这是注释:

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

这里有一个简单的手工计算的例子:

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

Python 实现再一次变得非常简单:

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

多元函数的导数

在这里,同样的规则适用于处理非常简单的单变量——你仍然使用链式法则、幂法则等,但是你对一个变量求导,同时保持其他变量不变。哦,那些叫做偏导数。太棒了。

首先,让我们以最基本的二元函数为例,计算偏导数。这个函数很简单,就是 x 的平方乘以 y,你可以把它区分如下:

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

酷,但是我怎么用 Python 做这个呢? 好问题。首先,你需要重新定义你的符号。在传统的 Python 风格中,您可以用一行代码来完成:

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

现在叫到了 。diff() 函数还需要一个参数——计算导数的项。让我们来看看:

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

你可以在这里看到如何计算关于 x 然后 y 的偏导数。重写函数会很快变得单调乏味,有一种方法可以避免这种情况。让我们在下一个例子中探索它。

3 可变函数

这是另一个对所有 3 个变量求偏导数的例子:

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

这将再次要求你改变符号:

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

这次你可以更聪明一点,把函数设置成一个变量,而不是每次都重写:

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

酷毙了。剩下的部分和以前完全一样:

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

这样可读性强多了。你甚至可以逐字阅读——相对于 x 区分函数 f

最后的话

这不是一个高级微积分教程,见鬼,这甚至不是一个微积分教程,它也不打算成为一个。我们的目标是给你指出正确的方向,这样你就不必手动计算导数,或者使用一些在线计算器。

尝试将此应用于梯度下降的线性回归——这将是一个很好的练习,我将在几天后发布一篇关于它的文章。

想学习 Python 中如何求积分?让我知道。

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

[## 通过我的推荐链接加入 Medium-Dario rade ci

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

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

参考

[1]https://www.sympy.org/en/index.html

[2]https://www.britannica.com/science/differential-calculus

[3]https://www.math24.net/definition-derivative/

带着谷歌床单去上课。

原文:https://towardsdatascience.com/taking-google-sheets-to-a-class-47f7f5f4ed98?source=collection_archive---------17-----------------------

我目前正在为教师构建一个 Flask 应用程序。由于谷歌驱动已经被老师们采用,谷歌表单也被他们使用。我的应用程序的一个功能是允许教师轻松地将工作表链接复制并粘贴到应用程序中,并通过表单提交。然后,它会将其转换为 pandas 数据框,并删除空行和空列。

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

Google Sheets Icon

这是一项正在进行中的工作,但是我想分享到目前为止制作的类,因为我没有找到很多用于数据收集或预处理的 Python 类示例。我所看到的许多例子对于教授类的概念是有用的。但是大多数时候它们对于数据科学或者 ML 来说不够实用或者不够具体。毕竟,我们总是可以使用更实际的 Python 类的例子。

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

See, Yoda knows. (Self-made on imgflip.com)

但是你为什么需要一门课呢?你就不能写代码就 ok 了吗?

如果这是为了分析的目的,那么…是的。但是生产代码,据我所知,遵循的是面向对象的编程方法。这意味着您的代码在脚本之间是分开的。这些脚本主要由类和函数组成。以这种方式编写的代码也更容易重用于其他目的。以我在本帖中使用的 ecdf 函数为例。

[## 数据科学代码重构示例

当学习为数据科学编码时,我们通常不会考虑修改我们的代码来获得特定的…

towardsdatascience.com](/data-science-code-refactoring-example-14c3ec858e0c)

有了这个函数,您可以立即快速重现这个图,而不是一遍又一遍地重新键入相同的 matplotlib 模板代码。

太好了!给我看看你的例子!

当然啦!我将分块分享这个例子,并解释每一部分。

# Import necessary libraries
import gspread
import pandas as pd
from gspread_dataframe import get_as_dataframe
from oauth2client.service_account import ServiceAccountCredentials

是用来处理我们的 Google 表单的输入和操作的库。我们将使用熊猫来删除工作表中所有的空行和空列。gspread-dataframe 是我们将表格转换成数据框的关键库。最后,oauth2client 是 gspread 建议用来认证我们的凭证的库。如果您不熟悉这种类型的认证,您可以在这里看到它是如何执行的

# Create class name and init function
class GoogleSheetProcessor:

    def __init__(self):
        self.scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
        self.credentials = ServiceAccountCredentials.from_json_keyfile_name(
                                                      'Credentials.json', self.scope)
        self.gc = gspread.authorize(self.credentials)

首先,我们给我们的班级命名。根据约定,使用 CapWords 约定命名类。在这里,我们创建 init 函数来告诉这个类设置分配给这个类的变量。在我们的例子中,我们将让类初始化认证 credentials.json 文件所需的三个变量。

# Get google sheet method
def obtain_google_sheet(self, link):
    sheet = self.gc.open_by_url(link)
    sheet = sheet.get_worksheet(0)
    return sheet

这里我们创建了一个方法(也就是类的函数),它将 Google sheet 链接作为一个参数。然后,它使用我们的实例self.gc获取链接,然后获取 Google sheet 文件中的第一个工作表。最后,它返回我们想要的工作表作为sheet

# Convert sheet to data frame and drop unnecessary rows and columns
@staticmethod
def worksheet_to_df(worksheet):
    # adjust input so nan rows and columns are not imported
    df = get_as_dataframe(worksheet, parse_dates=True, header=0)
    df.dropna(axis='columns', how='all', inplace=True)
    df.dropna(axis='rows', how='all', inplace=True)
    return df

我们的第二种方法将一个工作表作为输入,并将其转换成 pandas 数据框。它有[@staticmethod](https://www.geeksforgeeks.org/class-method-vs-static-method-python/)类装饰器,因为我们不需要将类实例self 作为参数来使用它。然后,我们使用熊猫dropna数据框方法删除不包含任何值的行和列。

现在让我们退后一步,把整个班级作为一个整体来欣赏。

# Create class name and init function
class GoogleSheetProcessor:

    def __init__(self):
        self.scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
        self.credentials = ServiceAccountCredentials.from_json_keyfile_name(
                                                      'Credentials.json', self.scope)
        self.gc = gspread.authorize(self.credentials)# Get google sheet method
def obtain_google_sheet(self, link):
    sheet = self.gc.open_by_url(link)
    sheet = sheet.get_worksheet(0)
    return sheet# Convert sheet to data frame and drop unnecessary rows and columns
@staticmethod
def worksheet_to_df(worksheet):
    # adjust input so nan rows and columns are not imported
    df = get_as_dataframe(worksheet, parse_dates=True, header=0)
    df.dropna(axis='columns', how='all', inplace=True)
    df.dropna(axis='rows', how='all', inplace=True)
    return df

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

It’s possible! (Self-made from imgflip.com)

那么如何使用这个类呢?

我用它作为一个烧瓶表单的处理的一部分。下面是利用我们的类的路由功能。

@app.route('/upload/<email>', methods=['GET', 'POST'])
@login_required
def upload(email):
    user = User.query.filter_by(email=email).first_or_404()
    form = DataInputForm()
    if form.validate_on_submit():
        if form.google_sheet.data is None and form.excel_sheet.data is None:
            flash('Form Empty. Please enter a Google Sheet link or load an Excel file')
            return redirect(url_for('upload'))

        elif form.google_sheet.data and form.excel_sheet.data:
            flash('Cannot Submit Both Form Types. Only Google Sheet OR Excel File')
            return redirect(url_for('upload'))

        elif form.google_sheet.data:
            gp = GoogleSheetProcessor()
            data = gp.obtain_google_sheet(form.google_sheet.data)
            data = gp.worksheet_to_df(data)

        flash('Upload Successful')
        return render_template('dashboard.html', data=data)
    return render_template('upload.html', title='Data_Upload', user=user, form=form)

如果你不熟悉砂箱砂箱形式,这可能会让人感到困惑。让我们把重点放在实现类的部分。

elif form.google_sheet.data:
    gp = GoogleSheetProcessor()
    data = gp.obtain_google_sheet(form.google_sheet.data)
    data = gp.worksheet_to_df(data)

在我们初始化这个类之后,我们将工作表分配给变量dataform.google_sheet.data是应用程序从之前在路线功能中启动的DataInputForm获取输入链接的地方。然后链接被传递到我们的worksheet_to_df方法中进行转换和精简。

我注意到有form.excel_sheet.data in your route function。你用 Excel 文件做什么?

这实际上是部分完成的路由功能。我现在不能透露太多,但将有教师上传 Excel 文件的功能。一旦 MVP 版本的应用程序推出,我会写更多与此类相关的文章。

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

Picture by DaMongMan on Flickr

走之前最后一个想法…

写作课会让人望而生畏。如果你正在学习成为一名数据科学家或分析师,这不是一个常见的概念。甚至编写函数的想法看起来都很可怕。但是你可以做到,这是一个有用的技能。

如果您至少可以构建函数,那么您就可以为您的可视化和 ML 模型减少一些重复的代码编写。更好的是,如果你的模型将被集成到一个产品中,当你的工程师将你的代码添加到他们的产品代码中时,他们会感谢你让他们的生活变得更容易。

感谢阅读!我希望这个 Python 类示例能帮助您构建自己的数据相关类。尝试使用您选择的数据类型自己做一个。你先从哪个开始?数据可以来自 CSV 或 SQL server。如果你还不习惯创建一个类,试着先把这些过程转化成函数,然后围绕这些函数构建一个完整的类。

直到下一次,

约翰·德杰苏斯

投身数据科学

原文:https://towardsdatascience.com/taking-the-plunge-into-data-science-my-experience-on-the-immersive-course-6e06b5b0e498?source=collection_archive---------24-----------------------

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

Image by Денис Марчук from Pixabay

我对沉浸式课程的体验

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

Image by StockSnap from Pixabay

在过去的几年里,我发现自己正在浏览大会(GA)数据科学沉浸式网页。它引起了我的兴趣,因为我对统计学在现代世界中的应用非常着迷,但我对学习编码语言 python 的前景感到害怕。我把 python 看作是一个只有 it 程序员理解的黑匣子。

快进到 2019 年 6 月,我迎来了一个里程碑式的生日,我开始看到一些迷因“再过 6 个月就是 2020 年了”。不要让任何人浪费你的时间。这促使我加大了对这个项目的研究,并开始在业余时间学习 python 编码。出于好奇,我开始在 LinkedIn 上联系该课程的往届学生,发送个性化信息,以了解该课程是否值得,以及它对他们的职业生涯有何影响。所有的反馈都是积极的,令人鼓舞。

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

Image by Elisa Riva from Pixabay

一旦我开始对掌握 python 有了一些信心,我就有了“YOLO”的时刻,并决定报名参加这个课程。

这不是一个容易的决定。这个课程是一个巨大的经济负担,而且这意味着我要辞掉我完美的全职工作。但我的理念是,冒险总比后悔没有抓住机会要好。

我决定冒险报名参加沉浸式全日制课程,因为尽管有更大的承诺,但我知道这将确保我从中获得最大收益。沉浸式课程还有一个职业服务,可以帮助我进入就业市场。赢家!

那么什么是数据科学呢?工作领域仍在定义中,术语“数据科学家”目前是多个角色的统称。许多人认为数据科学家这个头衔将不复存在,因为这个领域将被分为其他类别,如数据分析师、数据架构师、数据工程师等。但用最简单的话来说,数据科学就是使用大数据来建立关于未来的预测模型。

随着科技时代的崛起,大数据正在蓬勃发展!短缺不在于数据本身,而在于挖掘数据的人。

第一次走进教室,见到我将在接下来的 3 个月里一起度过的人,并被分配到我的座位上(现在这已经永久地印在我的脑海里了!),这是令人畏惧的。幸运的是,介绍课介绍了我们的助教,包括一顿亲密的午餐和校园参观。

作为澳大利亚 GA 的一名学生,我们有一个“连接班”,将我们(悉尼)和墨尔本班连接在一起。每个班级都有一名助教,主要老师通过视频连接。令人惊讶的是,你可以通过视频链接了解你的同学和老师!

每天我们上午和下午都有一节课,每节课之后都有时间进行实践或“实验”工作。我们还有一个每两周运行一次的项目,展示我们正在学习的实践技能,并在课程结束时以一个更大的顶点项目结束。

这是使我选择在大会学习而不是在大学读研究生的决定性因素。实践经验意味着我有项目工作“准备好了”,可以显示在我的 GitHub 个人资料上,供潜在雇主查看。这表明我有做好工作的实践经验,而不仅仅是理论。

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

The Bumpy Learning Curve. Image by Sascha Kasper at sascha-kasper.com/

前四周过得飞快,不知不觉中,我已经提交了两个主要项目,一个基于 python 编程,另一个基于 Kaggle 数据集的探索性数据分析。

到目前为止,我发现这个速度是可以控制的,我有精力在早上早起做额外的学习,晚上也一样。GA 建议您在周一至周五的 9-5 工作日之外再投入 20 个小时!

接下来的几周,随着理论变得越来越复杂,工作量开始增加,我的动力开始减弱,恐慌开始出现。“我究竟要怎样才能完成这一切,”我心想。在这个时候,我有一个项目,实验室会议和我的顶点项目工作。速度赶上了我,任务似乎不可能完成。我的理智开始下滑,我叛逆的一面开始出现,拒绝在晚上做任何自习!我几乎偏离了轨道,但不知何故我继续前进,这要感谢我用一些热瑜伽保持头脑冷静,偶尔喝一杯有益的红酒,并确保我有一个固定的休息日。

我现在已经是第十周了,感觉好多了。我的第四个项目已经提交,我只有我的顶点项目工作。我们已经涵盖了几乎 100%的课程,课程的最后两周没有课,这样你就可以进行你的顶点项目。

我也喜欢我职业生涯中新的社交方面。我正在悉尼参加每周一次的数据科学会议(外加免费披萨!).

现在回想起来,我可以欣赏我学到的大量知识,从 python 编程到 SQL,从数据分析到机器学习。我才刚刚开始我的新道路,但我对我在数据方面的未来感到兴奋!

这门课的经历和我一路上遇到的人,真的让我看到了一个不同的世界,一个我无法想象的世界。但现在我有信心将我所学的一切付诸实践,并开始研究数据分析中的角色和进入数据科学的长期途径。看好这个空间!

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

Image by General Assembly

如果你正在考虑学习数据科学课程,十条建议:

  1. 准备好快速学习很多东西吧——你肯定会从一套自然的数学技能中受益
  2. 在本课程中,你的社交生活将会退居其次,我不建议你预定任何节日或周末外出
  3. 去见 ups。当你在找工作时,不仅仅是你知道什么,而是你认识谁!…打入“隐性就业市场”
  4. 警告你所爱的人,这将会占用你很多时间,你可能会有压力
  5. 先学 python,因为整个课程都是用 python 教的,所以差别很大。强烈推荐 Codacademy 和 Data Camp
  6. 复习一下你的统计数据。有些人没有意识到这门课程大量基于统计学
  7. 在课程中使用 Stat Quest 作为资料来源——统计学和机器学习理论的优秀学习资料来源
  8. 花点时间在课程之外学习 SQL 和 Tableau,最好是在课程开始之前。这是目前就业市场对数据分析师的需求
  9. 想一想你想从事什么行业,将你的顶点项目向这个方向排列
  10. 周日休息一天,我对自己的规定是,如果我周六去 GA 学习了一整天,我就可以周日休息

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

Image by MoteOo from Pixabay

与机器对话

原文:https://towardsdatascience.com/talking-to-machines-3da09845c251?source=collection_archive---------27-----------------------

语言、人工智能和下一个用户界面

德克·克内梅尔和乔纳森·福利特

在我们和我们的计算设备之间是用户界面,或 UI。我们与机器交流的方式,以及机器与我们交流的方式,对于我们整体用户体验的质量至关重要。对于人工智能来说,这一点再正确不过了。人工智能软件的增强能力不仅依赖于我们向机器提供的正确数据,还依赖于机器解释这些数据的复杂程度。

除非我们与机器交流,否则机器不会工作——无论是与一个人操纵机器的显式控制,还是隐含在机器的形式中,以特定的方式实际上只是“做”。用我们最早的机器,这一切都很简单。想象一下算盘,它要求操作者仅具备简单的数学知识,并能够使用手指或类似装置来回移动珠子。与我们的机器和技术最早的接口是具体的、物理的和直接的。

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

Figure 01: The earliest interfaces with our machines and technology were concrete, physical, and direct.
[Photo: Multicolored Abacus by Crissy Jarvis on Unsplash]

随着机器变得越来越复杂,这种情况发生了变化。印刷机需要用到打字机,打字机需要用到电脑键盘。穿孔卡在今天已经过时了,但是仅仅在几十年前,这项技术——可能起源于 1725 年巴西勒·布琼的和对织布机的控制——才发展到加速早期的机械计算,与键盘一起成为计算机用户界面的两个最重要的设备,更不用说穿孔卡在数据存储和检索中的更大作用了。直到 20 世纪 80 年代,随着苹果电脑和图形用户界面的兴起,鼠标才成为核心用户界面设备,而就在 10 多年前,移动计算的手势约定帮助将计算从工作场所或有时的活动变成了我们今天在美国体验的无处不在的东西。

重要的是要记住这一切都是最近发生的。在历史计算生态系统中,穿孔卡片比鼠标有更丰富的历史,即使是鼠标提供的可用性帮助计算成为主流。我们所处的时刻转瞬即逝,我们可能会在几年而不是几十年后远离鼠标,因为我们知道它正在转变为一个外围角色。昨天看似永恒的东西明天就会过时,而我们甚至没有意识到这一点。

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

Figure 02: Punched cards evolved to accelerate early mechanical computing
[Photo: Technische Hochschule Aachen (Technical University of Aachen) by Jens Gathmann, German Federal Archives (1970) on Wikimedia Commons]

今天,当我们与机器交流时,我们仍然在很大程度上使用我们的手指和手——拉、推、翻转、打字、点击和滑动。虽然这种模式可行,但它不是最优雅或最强大的交流方式。它要求我们与之交流的机器——在这种情况下,机器是你正在使用的软件和你正在使用它的硬件设备的综合体——特别好地定向,以得到你确切想要的东西。像一首你很久没有听过的最喜欢的歌,可能需要腕管综合征诱导的大量点击才能从听这首歌的冲动中得到实际播放。这并没有说明它所花费的时间,根据您的计算和网络环境,可能不只是几秒钟,而是几分钟。

如果处理得当,为支持语音的人工智能抛弃图形用户界面会好得多。这也是 Alexa 和 Siri 这样的技术如此令人兴奋的原因之一。在最好的情况下,用户界面被简化为一个语音命令。只需要一秒或几秒钟,在这段时间里,你的大脑和身体不再需要考虑这个请求。对于用户来说,过去的图形用户界面和繁琐的架构和层次管理,现在只是一种愿望的口头表达。尽管无缝的人机连接是最理想的,但目前,这样的交互还远非易事。或者说,说起来容易,但得到正确的结果似乎很难。与机器交谈会给我们带来很大的挫败感:Alexa,这样做。Siri 会这么做。不,不要做这个,请做那个。

自然语言处理

因此,自然语言处理(NLP)已经成为当今最重要、发展最快、人工智能必不可少的技术之一。简而言之,这就是计算机处理和分析自然语言数据的方式——尤其是我们的语音。NLP 是人工智能如何与我们交流并为我们工作的一项支柱技术。在不久的将来,自动化将在许多方面受到 NLP 的推动。鉴于每个语音用户界面和人工智能的能力和潜力,机器解释并使用自然语言——特别是口语——的能力必须是有效的。

为了更好地理解 NLP,我们采访了曾在 SYSTRAN 和 Adobe 等公司工作过的研究员兼计算机科学家 Shivali Goel。“NLP 是人工智能的核心技术之一。你可以把它看作语言学和计算机科学的完美结合,”戈尔说。“这基本上是让机器有能力理解一个人说话或打字时的意思。NLP 是关于克服语言中的歧义,理解意图和上下文。比如我说‘小孩做营养零食’,你懂什么?孩子们在煮有营养的东西吗?或者它们本身就是一种有营养的小吃。”

NLP 算法检查并利用这些数据中的模式。他们理解单词关系和文字游戏,并模拟类似人类的对话。所以,当你要求谷歌播放舞曲时,那就是 NLP。当你打开一个外国网页,它被翻译成你的语言,这就是自然语言处理。当你的 Wi-Fi 无法工作,你试图向虚拟助理解释你的问题,或者只是大喊“代理!代理人!在电话里也是 NLP。相信我,我们正在努力改进。"

语音是我们最自然的输入设备。这是我们与他人交流的主要方式,几千年来一直如此。NLP 是一种将我们的声音翻译成最适合机器使用的技术。在其理论的顶点,NLP 会解释我们的单词、节奏、语调和其他因素,将其转化为对我们意图的细微理解。正如 Goel 指出的那样,如今,it 部门甚至常常无法找到一个简单的电话决策树。尽管如此,在其更好的体现中,这项技术似乎像魔术一样理解和响应。一个例子是谷歌的双工服务,它使用人类的声音为主人预约。这不仅仅是一种便利,它还是另一种技术,令人毛骨悚然地模糊了真假之间的区别。

NLP 的另一个很好的例子是机器翻译。“机器翻译系统可以帮助学生学习外语,”Goel 说。“翻译人员还不足以与人类相匹配或取代教师,但这些系统肯定可以补充教学。此外,许多在线资源和电子书可以被翻译成不同的语言,以便更多的人可以从学习中受益……”

语音作为界面输入确实有其局限性。特别是,有许多重要的用例可能会变得困难,因为它在非私人空间中使用的侵入性质。“我必须说,我不认为语音用户界面在公共领域会有什么前途。《合格的自己》一书的作者、康奈尔大学传播学系副教授李·汉弗莱斯说:“我认为我们看到的是在公共场所的视觉和文本交流的增加。21 世纪初,Humphreys 在美国开展了第一项关于公共场所使用手机的研究。“我做了一项观察研究,我出去观察人们……使用他们的手机。这项研究真正吸引人的一点是,人们在打电话时试图保持私人交流的方式。所以,他们会低下头。他们可能会用手捂住嘴。他们用各种方式来保持谈话的私密性。但(同时)他们的声音可能会侵犯公共场所其他人的隐私,”汉弗莱斯说。《英国医学杂志》甚至将 21 世纪初的打手机等同于二手烟,是空气中的一种社会污染物。…我真的认为在某些情况下,声音的作用是非常困难的。作为一种公共空间,你可能会在汽车里看到它。然而,你在这个小泡泡里,你想跟着收音机或 Spotify 或其他什么东西唱歌,那就去做吧。或者,你可以口述一些东西。所以,我认为这是一个地方,除了家庭空间之外,更多的是在公共空间,在那里你可能会看到声音形式的交流。”

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

Figure 03: There are many important use cases for voice UI that can become difficult because of the intruding nature of its use in non-private spaces.
[Photo: Railway Station From Above — Bern, Switzerland by Timon Studler on Unsplash]

更普遍的语音用户界面是有前途的,但它需要其他技术的加入。围绕语音 UI 已经有了一些有意义的工作,它可以记录用户的低语或嘴部动作,而不是与他人交谈时所需的大声说话。要充分利用语音作为主要的界面范例,需要这些或其他一些进步。

WomenOfAI.org执行董事兼创始人艾丽卡·李(Erica Lee)说:“我现在对语音的看法是,许多人把它当作一个系统来执行直接命令——设置闹钟,或者通过‘开始’、‘停止’、‘下一个’来播放音乐——对电脑来说,这些都是非常简单的命令。”。“你不用按按钮,只是用你的声音。所以,现在我的整个房子都是自动化的,用亚马逊 Alexa 和谷歌 Home Assistant 来帮助改变音乐、设置定时器、阅读日历……做很多低级功能。节省我的时间真的很有帮助。”

“语音界面现在实际上开始与视觉界面融合。现在有一种新的趋势,我们把带有屏幕的电子产品送回家,这些屏幕连接到许多这样的音响系统上。亚马逊最近发布了 Echo Show ,它有一个带前置摄像头的屏幕。它[不仅]说,“播放下一首歌”,我们实际上可以看到专辑封面和它的名字,有时甚至可以看到它后面的图形或动画。它变得越来越具有互动性和沉浸感,”Lee 说。

最有趣的人工智能应用将是那些与我们日常生活交织在一起的应用。为了最好地做到这一点,机器需要理解我们想要什么,或者不想要什么。这又回到了用户界面,以及我们如何向机器输入命令。在这方面,声音和视觉的结合是重要的一步。大约 17 年前,我们从未接近过电影《少数派报告》中的沉浸式计算环境。当时,这被吹捧为未来,一个基于未来学家和技术专家的输入的虚构描绘,他们知道事情将如何演变,很快。我们还没有到那一步。事实上,我们的现实甚至感觉不到接近。然而,将改进的语音界面与我们的显示环境相结合是这条道路上的一步。

Lee 认为 UI 将演变成更加被动和自动化的输入:“我个人的观点——我希望行业能这样发展——是这个系统不那么单向,我告诉机器做一些事情,而更多的是一个反馈循环,我偶尔会请求我的 Siri 改变日历,或者检查我的邮件。但实际上,该系统有许多不同的传感器和许多不同的输入来读取我的行为。”这无疑是一种最佳的机器模型:被动地利用网络上所有可用的数据,然后以对每个独特的人来说最佳的方式自动化环境和体验。

Creative Next 是一个播客,探索人工智能驱动的自动化对创意工作者,如作家、研究人员、艺术家、设计师、工程师和企业家的生活的影响。本文附 第二季第一集— UI 与人工智能 第二季第二集—社交媒体的起源 第二季第三集—自然语言处理

与伯特交谈

原文:https://towardsdatascience.com/talking-with-bert-a3e867572cfa?source=collection_archive---------35-----------------------

改进提示以更好地理解语言模型

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

Photo Mashup w/ Anna Vander Stel X Rock’n Roll Monkey

在过去的几年中,围绕语言模型的知识和研究的增长是惊人的。特别是对 BERT 来说,我们已经看到了这种大规模预训练语言模型在文本分类、预测和问题回答等任务中的一些令人难以置信的用途。我最近写了关于一些人如何研究 BERT 在执行某些语言任务时的局限性。此外,我自己做了一些测试,用创建了一个问答系统,来感受一下如何使用它。在实践中看到并尝试语言模型的许多功能是非常棒的。

当你认真对待它时,这些模型显然有很多关于单词和想法之间关系的信息,但很难真正检查它知道什么。我最近探索了一篇名为的有趣论文,我们如何才能知道语言模型知道什么?看看我们如何向语言模型提问。像任何语言一样,这不仅仅是你问什么的问题,而是你如何问的问题。

研究团队工作的主要目标是研究我们如何有效地从语言模型中提取知识。当我们想探究一个语言模型可能包含什么关系信息时,我们使用提示,比如“柯基是一种 __”。类似这样的提示通常可以手动创建。他们的实验测试了创建不同的提示,并在 BERT 上进行测试,看看是否可以通过改变提示的措辞方法来提高性能。

让我们开玩笑说,我们用来自wookiepedia的所有重要信息创建了一个语言模型(你没看错,这是一个关于《星球大战》所有内容的维基,真的令人印象深刻)。类似这样的提示:

“卢克·天行者认为 ____ 是他的出生地”

是一种效率较低的提问方式:

"卢克·天行者出生于 ____ "

既然如此,我们就知道,如果我们想知道其他人的起源,最好像第二个那样来组织我们的提示。研究小组根据他们的成功特别注意到了两种主要的方法来形成提示以改善结果:

基于挖掘的方法

正如他们在论文中提到的,这种方法是对先前问答系统研究中提到的基于模板的方法的一种尝试。这种方法基于这样一种思想,即在大型语料库中,文本通常被结构化为主题 > 特定关系 > 对象。他们从维基百科语料库中挖掘所有使用这种格式的句子,以创建一组更灵活的提示,例如:

(主语)出生于(宾语)

正如您所想象的,使用语料库中更具体的关系措辞会使语言模型更容易得出符合事实的答案。虽然您可以手动给出类似的提示,但是它们的表现不如这种方法。

在我的 Wookiepedia 语言模型的例子中,我可以在语料库中挖掘类似的格式,也许我会找到短语“皮耶特拥有海军上将军衔”,我可以推断为 (x)拥有(y) 的军衔,这可能会帮助我制定更有效的方法来检查其他帝国军官的军衔。

基于释义的方法

所以我们有一个挖掘的提示,就像我们的 (x)有一个(y) 的秩,但这显然只是陈述关系的一种方式。转述是为了提高用来表达这种关系的词语的多样性,但不要偏离提示。这可以手动完成,但研究小组使用了反向翻译方法,将提示翻译成不同的语言,然后再翻译回来。他们工作中的一个例子是:

x 与 y > x 有共同的边界,x 与 y 相邻

外卖食品

总的来说,这项研究指出了一种比手动提示更好的查询语言模型的方法。从本质上来说,在某种程度上,说一种类似于模型的语言可以改善它理解你的问题的方式是有意义的。我很想知道,如果你有一个纯粹根据人们自然说话的文字记录训练的语言模型,这样的东西会是什么样子。表现最好的提示类型是手动的还是挖掘的?只是一些疯狂的想法!我强烈推荐阅读这篇论文,这是一个非常有趣的研究。

用经验贝叶斯驯服错误发现

原文:https://towardsdatascience.com/taming-false-discoveries-with-empirical-bayes-2ce81aa8f407?source=collection_archive---------7-----------------------

如何在噪音海洋中安全捕鱼

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

Watch out for false discoveries when fishing in a sea of noise

今天的数据科学家有大量的数据可供他们使用。但他们也面临一个新问题:有这么多功能可供选择,我们如何防止错误的发现?

p 值有助于错误的发现。假设没有影响,运行 100 个独立的 p 值测试平均会产生 5 个阳性结果。被误导 5 次是可控的,但是如果我们运行数百万个假设测试,情况很快变得无法忍受。

我们需要一种方法来控制我们发现的假阳性的数量。它应该与我们运行的假设数量成比例,并允许我们对我们的整体发现有信心。

场景

你在一家大数据科学公司工作,该公司的业务是预测赛马的结果。您和您的同事收集马、体育场、骑师等数据,然后构建模型。这些模型反过来会影响赌博策略。随着时间的推移,你和你的同事已经开发了 60,000 个策略。你的任务是找到真正胜率在 50%以上的策略。虽然这当然是一个简化的问题,但有许多应用非常接近,例如神经科学中的fMRI、遗传学中的微阵列和金融中的阿尔法测量

下面你看到的数据:n_games描述了一个策略下的赌注数量。won描述策略获胜的频率,ratio是获胜游戏的份额。因为这是合成数据,我们知道一个策略的真实比率是否在 50%以上。在现实生活中,您可能无法访问true值,但它在以后会很有帮助。

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

下图显示了所有策略的观察胜率分布。如你所见,有不少策略的胜率超过 0.5。

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

问题是,大多数观察到的胜率很高的策略只是偶然显示出来。我们知道大多数策略的胜率不会超过 0.5。这在我们的数据中显而易见。我们需要找到一种方法将这种间接证据纳入我们的结果。18 世纪的某个 Bayes 牧师思考过这个问题,这是件好事。

信仰问题

本文中介绍的概念大致属于贝叶斯统计领域。关键的概念是,我们不仅对数据的分布感兴趣,而且对真实的、未观察到的值的分布感兴趣。每个策略的真实胜率是无法观察到的。但是我们可以估计一下真实的胜率是多少。因为我们对自己的估计没有 100%的把握,所以我们认为多个值可能是真的,但是不要给所有的值分配相同的概率。

在日常生活中,我们凭直觉做到这一点。如果我问你明天撒哈拉的天气,你会说:“可能是晴天,那里几乎不下雨”。

我们在看到任何数据之前的信念被称为先验信念(在看到数据之前)。你对撒哈拉天气的信念是在没有任何撒哈拉天气信息的情况下形成的。

一旦我们观察到数据,我们就可以更新我们的信念。如果我告诉你,撒哈拉上空出现了巨大的雨云,气象学家对十年一遇的事件感到兴奋,你对天气的回答会改变。你可能会说“也许会下雨,也许不会。50/50".这个新的和更新的信念被称为后验信念(后验,又名 after,指看到的数据。花式古英语)。

数学上,贝叶斯定理制定了一个更新规则,所以我们不仅可以直观地更新我们的信念,还可以定量地更新。为此,我们需要数据,更重要的是,需要先验知识。

经验贝叶斯

回到我们的投注策略,我们之前对投注策略胜率的信念应该是什么?在撒哈拉的例子中,基于我们对沙漠的了解,我们有很强的先验知识。在下注的例子中,我们只有数据,没有先验信息。

经验贝叶斯方法背后的关键思想是使用我们所有的数据形成我们的先验,然后使用来自特定策略的数据形成关于不同策略的真实胜率的后验信念。

在我们的例子中,我们假设我们对策略胜率的信念可以用 Beta 分布来表达。这意味着我们认为不存在一个真正的胜率,而是胜率的分布。该分布可以用两个参数α和β来描述。我们可以使用 scipy 的 beta 函数来推断产生我们的数据的最可能的值:

alpha_prior, beta_prior, _, _ = ss.beta.fit(df['ratio'], floc=0, fscale=1)

有了α和β先验知识,我们可以从先验知识中取样,看它是否与数据相匹配。下面你可以看到蓝色的数据和橙色的推断先验分布。

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

我们还可以在此先验下计算平均胜率:

prior = alpha_prior / (alpha_prior + beta_prior)
print(f'Expected win ratio under prior: {prior*100:.2f}%')Expected win ratio under prior: 44.27%

我们能这样评估先验吗?

让我们回到这里,因为我们刚刚做的有一些编造的统计的天赋。因为我们缺乏根植于知识的先验,我们就…编造了一个?那不可能是对的。但是这有一种直觉和数学逻辑。你怎么知道撒哈拉沙漠很少下雨?你可能读过某个地理学家写的东西,他依赖于几个世纪以来人们的观察,甚至可能是几千年前的人工制品。基于所有的数据,地理学家形成了撒哈拉沙漠很少下雨的观点,你相信了。相信收集了大量数据的地理学家和我们自己收集数据的过程有什么不同?

有一个潜在的区别,那就是地理学家收集的数据与我们的研究对象相关,但最终是独立的。这位地理学家并没有收集明天 T4 是否会下雨的数据,只是收集了撒哈拉的总体天气数据。同样,如果我们想使用其他策略的数据来为任何特定策略的决策提供信息,胜率必须相互独立。这也是数学论证做出的一个关键假设(技术术语是数据必须来自平行情况)。它也必须足够大)。

更新我们的信念

既然我们努力工作来形成先验,是时候使用关于个体策略的数据来形成后验了。对于测试版,更新规则相对简单。alpha 参数的后验值等于策略赢得的游戏数加上 alpha 的先验值。

df['alpha_posterior'] = df.won + alpha_prior

beta 参数等于策略输掉的游戏数加上 beta 先验。

df['beta_posterior'] = (df.n_games - df.won) + beta_prior

下图显示了从数据推断出的先验分布(蓝色)和一个特定策略的后验分布(红色)。正如你所看到的,这个策略的大部分后验值都高于要求的胜率。换句话说,大多数我们认为可能的真实胜率都在这条线上。

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

收缩

因为我们在估计每个策略的真实胜率时考虑了总体平均胜率,所以我们将估计值“缩小”到大平均值。经验贝叶斯是一种所谓的“收缩”方法。正如我们将在后面看到的,这正是帮助我们减少错误发现的原因:我们使我们的估计偏向于一无所获。

为了可视化收缩,让我们计算每种策略的平均后验胜率:

df['eb_ratio'] = df.alpha_posterior / (df.alpha_posterior + df.beta_posterior)

下图显示了数据中的胜率分布(蓝色)和所有策略的估计真实胜率分布(红色)。如您所见,估计值都更接近平均值,并且估计胜率超过要求(红线)的策略明显更少。

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

当然,并不是所有的估计都缩小了相同的数量。我们希望拥有更多数据的策略(比如,我们在更多游戏中尝试了哪些策略)比只有很少数据的策略减少的估计要少。这正是正在发生的事情。贝叶斯规则考虑了我们拥有的可能与先验不同的后验证据的数量。

下面的图表显示了收缩率和我们拥有的数据量之间的关系。红色实线是观察到的胜率是估计胜率的线。如果一个点在红色实线附近,就只有很小的收缩。红色虚线是先验。绿点是我们有很多数据的策略,蓝点是我们只有很少数据的策略。

如您所见,具有少量数据(蓝色)的策略更接近先验值,而离观察值更远。我们拥有大量数据(绿色)的策略向先验收缩得更少。

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

错误发现率

正如我们前面所看到的,我们不仅仅估计每种策略的真实胜率。我们估计了我们认为可能的胜率的整个分布。这是很多额外的工作,但它大大简化了我们来这里的问题:“这种策略是错误发现的可能性有多大,真正的胜率低于 0.5?”

为了回答这个问题,我们可以问自己:“对于我们的策略,我们的后验信念分布的多大份额低于 0.5?”

下图显示了策略的后验置信分布。红线是 0.5 的关键关卡。橙色区域显示低于障碍的信念分布部分。在我们的信念下,真实胜率小于 0.5 的概率就是橙色区域。

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

我们可以用 beta 分布的累积密度函数计算面积,从而计算出这种策略是错误发现的概率。

print(f'The probability that this strategy is a false discovery is {ss.beta.cdf(0.5,60,50)*100:.3} %')The probability that this strategy is a false discovery is 16.9 %

这种方法可以应用于所有策略,以找出它们是错误发现的可能性:

df['FDR'] = ss.beta.cdf(0.5,df.alpha_posterior,df.beta_posterior)

管理总体错误发现率

现在我们该如何选择下注的策略呢?我们可以简单地选择那些错误发现概率低的策略。但是我们可以做得更好。由于期望的线性,多个策略的期望错误发现率是被错误发现的个体概率之和。例如,如果我们有 10 个策略,错误发现的概率为 1%,那么这 10 个策略中错误发现的预期份额为 10%。

因此,我们可以选择哪些错误发现是可以接受的。比方说,在我们的博彩业务中,如果我们部署的博彩策略中有 5%的真实胜率不高于 0.5,我们就没事。然后,我们可以根据策略被错误发现的个别概率对它们进行分类,并选择那些累计错误发现率为 5%的策略。

accepted = df[df.FDR.cumsum() < 0.05]

由于这是合成数据,我们可以检查它的效果如何,事实上,我们发现大约 5%的策略实际上没有足够的胜率。如您所见,我们的估计非常接近!

print(f"The actual false discovery rate is {(len(accepted[accepted.true == 'no']) / len(accepted)*100):.2f}%")The actual false discovery rate is 5.26%

收场白

在本文中,您已经看到了经验贝叶斯框架的基本构件,以及如何使用它来管理错误发现率。

经验贝叶斯属于一个更广泛的收缩方法家族,它们都是正则化的方式。规则化是常见的 主题机器 学习所以你可能之前在 ML 的上下文中遇到过。每当你冒着做出错误发现的风险时,无论是深度学习模型中的一组过度拟合的参数还是一个不起眼的胜率,让你的发现偏向于一无所获都是有用的。通常,这与经验贝叶斯密切相关的方法一起工作,例如在岭回归中。

随着数据科学进入越来越多的高风险应用,错误的发现或过度拟合的模型可能会产生灾难性的后果,正则化变得越来越重要。

进一步阅读

Jupyter 笔记本的所有代码可以在这里找到。这篇文章是我为 Bradley Efron 和 Trevor Hastie 的“计算机时代的统计推断”所写的学习笔记的一部分。埃夫龙还写了一本纯粹关于经验贝叶斯的书《大规模推理》。大卫·罗宾逊写了一个更加代码驱动的介绍。我的作品《金融领域的 ML》,在金融背景下讨论了文中提出的一些问题。

利用人工智能挖掘数据金矿——现场服务物联网设备

原文:https://towardsdatascience.com/tapping-into-a-data-goldmine-with-ai-field-service-iot-devices-3c9a51cf3d84?source=collection_archive---------39-----------------------

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

Source: Shutterstock

现场服务物联网设备正变得比以往任何时候都更加智能和用户友好。用户能力以及与后端供应链运营的联系更强了,但还有一层尚未完全实现,即现场服务数据。当利用人工智能时,物联网现场服务设备成为无与伦比的数据收集资产,可以帮助在企业的各个方面做出明智的业务决策。

但是仅仅利用这些数据是不够的。企业需要了解如何优化每个数据点,以最大限度地发挥其潜力。通过现场服务物联网集成收集的每个数据集都有无限的潜力来积极影响整个供应链的流程和体验,从客户体验的重新构想到售后工作的后端优化,等等。

用人工智能预测终端用户问题

最终用户设备和后端供应链之间的连接是通过现场服务物联网集成实现的。设备的安装、管理、维护和维修都是通过现场服务技术人员、他们的现场服务物联网工具和总部供应链之间的高速连接来完成的。

企业已经成功地利用和了解终端用户设备数据,以维持产品正常运行时间并优化现场服务安排,但现场服务流程(即物联网设备本身)会自行生成大量数据。这种未利用的数据可以用来帮助优化现场服务物联网功能,并帮助简化现场服务维修流程本身。

例如,有线电视提供商利用他们的现场服务团队来维护和安装有线电视盒、路由器等。如果你问消费者,许多人会说这些过程缓慢且不方便。不一定非要这样。通过人工智能和人工智能的集成,现场服务物联网设备将能够利用关键数据集来了解客户的个性化需求。通过不仅评估设备的状态,而且评估最终用户的历史、环境影响和其他变量,现场服务技术人员将能够在到达现场之前准确查明问题的原因以及如何解决问题。他们将能够更快地处理更多的客户请求,最终用户也将从更加简化的维修流程中受益。

企业已经可以全面访问这些数据点。其中许多企业已经将这些数据点用于其他内部运营,例如在个人基础上创建超个性化的营销体验。但是,如果不用于优化和个性化其他计划,这些数据也会被浪费。遗留的现场服务操作是上述数据被忽视的明显例子。如果采取行动,这些数据可以为现场服务技术人员和最终客户等提供以前无法想象的便利和用户体验。

能源浪费优化

现场服务物联网创新不需要只让消费者受益。企业也可以利用高科技创新来破坏建筑管理物联网设备。以数据中心为例。这些中枢每天都会产生大量的能量和热量。物联网设备是控制环境以保持机器可操作性和保持员工舒适所必需的。

通过利用人工智能,物联网建筑管理设备可以保持数据中心员工的最佳工作条件,以及保持事物运行所需的技术。此外,不仅条件更加舒适,能源消耗也可以通过惊人的数字减少(在 TCS,当集成物联网建筑管理设备时,我们的能源消耗减少了近 40%)。人工智能和物联网使企业能够了解什么需要运行以及何时运行,并消除任何不必要的停机时间,从而节省能源、金钱和改善工作条件。

挑战企业构建数字基础设施

这种类型的数据优化不会一蹴而就。特别是对于大型电信提供商,有几十年来保持事情顺利进行的支柱。也就是说,创新并没有放缓,那些选择无所事事的人最终将被甩在后面。数据已经在那里了。这些组织每天都在收集这种情报,但没有技术基础设施来优化上述数据集的用例。人工智能是找到充分利用这些数据的方法的关键。

人工智能虽然不一定是一项新技术,但仍在研究中,尚未被完全理解。组织有一个长期的基础架构,它建立在手动流程的基础上,很难彻底改变。组织需要迈出这一步,迎接创新带来的风险。只有这样,他们才能从成功的数字化转型中获益。基础设施需要从头开始重建,以数字技术为核心。在商业 4.0 时代,这一改革对成功至关重要。业务的所有方面都必须接受风险、利用生态系统、创造指数级价值并变得高度个性化,包括现场服务工作。

现场服务管理是一个产生大量数据的过程,而这些数据的利用率严重不足。人工智能将帮助企业了解如何利用这些数据,并使用它们来创建以前无法想象的最终用户体验和后端优化。

目标香港:快速了解中国在推特上的造谣活动

原文:https://towardsdatascience.com/target-hk-a-quick-dive-into-chinas-disinformation-campaign-on-twitter-2b64ab9feb1a?source=collection_archive---------23-----------------------

这是对 8 月 19 日推特发布的中国国家巨魔推特的快速浏览。未来几天和几周还会有更多。

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

An example of Chinese state troll tweet exposed by Twitter on Aug 19.

8 月 19 日, Twitter 发布了一组新的官方微博,该公司称这些微博来自“一个重要的政府支持的信息行动,关注香港的局势,特别是抗议运动和他们对政治变革的呼吁。”

这些推文值得更深入的研究,显然可以利用这些材料做更多的事情。我之前参与了一个关于揭露推特上虚假信息的项目。

由于时间限制,这里有一个快速和肮脏的第一次探索性的数据。未来几天和几周还会有更多。

1。数据、笔记本和假设

我的粗略笔记本是这里,回购将会更新,因为我找到更多的时间来做这个项目。

CSV 文件太大,无法上传到 Github 上。直接从推特下载。

为了在这个阶段控制项目的复杂性,我过滤掉了转发,这是一个值得单独研究的有趣领域。我也只关注英文和中文微博。信不信由你,这个数据集中的推文有 59 种语言。

2。总体来看中国国家巨魔推文

Twitter 表示,其发布的推文来自“936 个来自中华人民共和国(PRC)的账户。总体而言,这些报道是蓄意和有针对性地试图在香港制造政治不和,包括破坏当地抗议运动的合法性和政治立场”。

已经暂停的账户“代表了这场运动中最活跃的部分;一个约有 20 万个账户的更大的垃圾邮件网络”,Twitter 在其新闻稿中补充道。

以下是我快速浏览后发现的关键数据:

Unique userids: 890
Unique user display names: 883
Unique user screen names: 890
Unique user reported locations: 178
Unique user creation dates: 427
Unique account languages: 9
Unique tweet languages: 59
Unique tweet text: 3236991
Unique tweet time: 1412732
Unique hashtags: 110957

在我过滤掉即时战略和语言之后,巨魔推文的数量从最初的 360 万减少到了 581,070 条。太咄咄逼人?也许吧,但是还有很多工作要做。

3.典型的中国官方推特

首先,让我们快速浏览一下这些针对香港的中文和英文官方推特:

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

The phrasing of some tweets would be immediately familiar to those who follow official Chinese rhetoric and its state-driven Internet commentary. Phrases like 外國勢力(foreign forces) are not commonly used elsewhere, if at all.

4。主要中国巨魔账户

以下是我筛选过的数据集中排名前 10 位的巨魔帐户:

曲剑明               54455
阿丽木琴              46600
Klausv            34451
春天里               17989
gwalcki4          17707
emiliya naum      16230
derrickmc         16163
Lily Mann         14673
炫彩                14604
mauricerowleyx    11749

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

It is far more interesting to look at specific accounts, in my view. Let’s start with the one at the top of the list: qujianming, or 曲剑明.

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

在我的过滤数据集中,这个 troll 帐户发出了 19614 条独特的推文。该账户创建于 2012 年 6 月 28 日,拥有 28405 名关注者和 24079 名用户——这是一个可疑的高数字,也是一个巨魔账户的主要迹象。

该账户在 2019 年发了 77 条推文。一些样品:

  • 2019–07–05: ‘香港作为一个法治社会的典范,这种暴徒行径一定要严惩,换民众一个公道’
  • 2019–07–04: ‘反对势力想尽办法想搞乱香港,想等混乱的时候谋取利益,他们根本就无暇顾及市民的利益,可怜的是还…’
  • 019–07–02: ‘#HongKongProtest #香港 #七一 #游行 #民阵 7 月 1 日反对派宣扬暴力冲击…’

Twitter also highlighted two accounts in its press release, one of which is HKpoliticalnew, or HK 時政直擊:

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

在我过滤后的数据集中,这个 troll 账户只发出了 1059 条独特的推文。该账户创建于 2015 年 1 月 22 日,拥有 22,551 名关注者和 66 名用户。增选新闻机构身份的举动完全是俄罗斯互联网研究机构的剧本。

该账户在 2019 年发送了 462 条“原创推文”,其中许多是针对香港抗议的。一些样品:

  • 2019–06–21: ‘千名黑衣人圍堵立會,當中不乏重裝上陣的人,警方一定要嚴防,大家小心!👍💪\n\n#香港 #大專學界 #升級行動 #包圍立會 #重裝上陣 #警察 \n 原圖:星島日報 https://t.co/DIoiFWWkBo’
  • 2019–06–20: ‘#香港 反對派一再散布失實資訊抹黑修例、誤導市民,更不斷造謠煽動情緒,企圖以網民壓力杯葛支持修例甚至只是沉默的商戶。\n 政府決定停止修例工作後,反對派又繼續播謠,稱換領智能身份證會「失去選民資格」,企圖撕裂市民對社會不同界別、團體、組織的信任。 https://t.co/9B3xCI9MWv’
  • 2019–06–20: ‘反修例暴動後,#香港 仿佛又回到占中時期嘅黑暗日子,最令人痛心嘅系,執法者又再次成為黃營發泄嘅對象,黑警,「警你老 x」等言詞唔絕於意,立志以生命守護人民,卻落得過街老鼠嘅下場…\n\n 立法會議員何君堯律師呼吁各位市民站出嚟山席撐警集會,為 #警察 打氣,讓佢哋知,黃營所言非香港嘅主流聲音! https://t.co/yDpKt0mSAM’

5.自称的国家巨魔帐户的位置

像俄罗斯的国家巨魔一样,中国账户主要声称在美国:

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

Twitter 在中国被屏蔽。但该公司表示,“这些账户中有许多是使用 VPN 访问 Twitter 的。然而,一些账户从源自 mainland China 的特定未被封锁的 IP 地址访问 Twitter”。

6。巨魔账户创建于 2017 年 8 月达到峰值

正如所料,巨魔账户的创建时间要早得多——在 2017 年 8 月达到顶峰:

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

类似的推文数量在 2017 年达到峰值:

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

然而,对这些数据进行时间分析是很棘手的。首先,不清楚 Twitter 何时开始对巨魔账户采取行动。第二,不清楚中国国家机构是否有能力改变账号创建/发布日期,以掩盖其活动。听起来有些牵强,但时代就是这样。

END-NOTE,目前:

当然,分析将受益于 NLP 工具的广泛使用。但对推文的初步观察表明,需要更多的过滤来剔除噪音。中文推文必须与英文推文分开处理。我将在未来的笔记本中继续这一点。

为了节省时间,这就足够了。如果您发现任何错误,或者有任何意见,请 ping 我@

推特: @chinhon

领英:www.linkedin.com/in/chuachinhon

我早期的项目是关于推特上的虚假信息运动

因果推理的目标最大似然(TMLE)

原文:https://towardsdatascience.com/targeted-maximum-likelihood-tmle-for-causal-inference-1be88542a749?source=collection_archive---------9-----------------------

一种双稳健的自动因果推理方法

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

什么是因果推断?

假设你有两种治疗癌症的药物,A 和 B。你在不同的人身上测试药物,现在你想衡量哪个更有效,你打算怎么测试?

你可能会先对患者进行随机化,给一半的患者服用药物 A,另一半服用药物 B,在一段时间内测试关键指标,以比较哪种药物降低了更多的关键指标。够了吗?

不。人们的一个常见误解是,只要随机化完成,我们就可以推断不同的治疗会导致不同的结果。这是不对的。随机化不能保证等价。这就是倾向分数匹配出现的地方。

那么什么是倾向评分匹配呢?

倾向评分匹配背后的想法是,通过给研究中的每个个体一个倾向评分,我们可以比较不同治疗组中的个体,并试图使个体尽可能等同,以便我们可以控制混杂因素,不同的结果将仅来自治疗。

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

现在,您可以看到,在研究中将药物用于个体之前,倾向评分匹配需要适当的实验设置。我们最终可能会放弃很多人,因为他们没有匹配的对手。如果我实验失败或者配对的数量太少怎么办?我们还能用我们收集的数据吗?

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

让我们仍然考虑之前的案例,我们有两组接受两种不同药物 A 和 b。我们的目的是测量平均治疗效果(ATE = E[Y(A = 1)]-E[Y(A = 0)],以便比较治疗效果。我们称患者的数据点为 X——它可能包含患者的年龄、性别、职业、收入、锻炼、吸烟与否等特征;测试指标 Y——我们关心的用于测试治疗结果的指标;处理 A 是用于两种不同处理的二元变量 0 和 1。

我们如何估计无偏的 Y(A=1)和 Y(A=0)来精确地测量具有最小混杂变量影响的治疗效果?

这里我将介绍一种最先进的方法目标最大似然估计(TMLE) 。目标学习是由 van der Laan & Rubin 在 2006 年 [1]提出的,作为一种自动化(而不是自己动手)的因果推理方法。TMLE 用于分析来自非对照实验的删失观察数据,即使在存在混杂因素的情况下也能进行效果估计。

以下是 TMLE 工作方式的分步指南:

第一步:生成 E(Y|A,X)的初始估计。 这就是我们所说的g-计算在因果推断中,它是一种基于极大似然的替代估计量,它依赖于给定暴露和协方差的结果的条件期望的估计。该估计器用于生成对应于 A=1 和 A=0 的潜在结果 Y₁和 Y₀。至于如何得到估计量,Mark 在论文中使用了“超级学习器”,本质上是一种集成学习方法。我会在以后的文章中更多地讨论 G-计算和系综方法。

现在我们有了估计量,记住这个方法是以治疗为条件的,只是假设其他变量对估计量有偏差,可以忽略。但这还不够稳健——我们需要“瞄准”治疗变量,并以更稳健的方式最小化变量偏差。

第二步。使用倾向得分 P(A=1|X)估计暴露机制。 给定观察到的联合创始人 x,我们计算暴露的条件概率。这与我们之前提到的人们用来匹配个体的倾向得分相同。在 TMLE 中,除了倾向得分,我们还计算了研究中每个人的π₁= P(A=1|X)和π₀ = 1-π₁。

第三步。更新 E(Y|A,X)的初始估计值。 在第一步中,我们通过 g 计算计算了 Y₀和 Y₁,现在我们需要对其进行更新,以减少混杂变量的偏倚。我们引入 H₀(A=a,x)= \frac{i(a=1}{π₁}—\frac{i(a=0}{π₀}.让我们更好地理解这一点——对于个人,我们计算 H₁=\frac{1}{π₁}和 H₀=\frac{1}{π₀}.有了每个人的 y,H₁和 H₀,我们可以拟合一个线性模型,假设截距是常数。
logit(e∫(y | a,X))=logit(Y_a)+𝛿×Ha,这里的𝛿是一个由两个值组成的波动参数(𝛿1,𝛿0)的模型。有了𝛿ˆ,我们可以产生 logit(Y₁)=logit(Y₁)+ 𝛿1×H₁和 logit(Y₀)=logit(Y₀)+ 𝛿0×H₀

第四步。生成目标参数的目标估计值。 用我们从上一步得到的每个个体的新 Y₁和 Y₀,我们可以计算出目标估计值 ATE=1\n ∑|Y₁-Y₀|.

我将在下一篇文章中更多地讨论 TMLE 与其他因果推理方法的比较,以及如何实现 TMLE。

直到下一次!

参考文献:

[1]范德兰&鲁宾,目标最大似然学习,2006

目标情感分析与传统情感分析

原文:https://towardsdatascience.com/targeted-sentiment-analysis-vs-traditional-sentiment-analysis-4d9f2c12a476?source=collection_archive---------21-----------------------

想要找到一个句子对该句子中的实体的情感吗?那么情绪分析对你来说可能还不够……请继续阅读,了解有针对性的情绪分析!

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

在某些情况下,我们可能不想从整个文本中提取情感,而是预测该文本对其中某个实体的情感。当这是我们的目标时,返回整个文本文档的整体情感的传统情感分析是不够的,我们需要开发一种更复杂的技术: 有针对性的情感分析 。在这篇文章中,我们将解释它们之间的区别,并用一些简单的例子来说明这种不同的行为。

那我们走吧!

打住,我不知道什么是情绪分析!

别担心,一如既往,我在你身边。情感分析是一种自然语言处理(NLP)技术,其中给定某个文本文档作为输入,我们得到这样的文本的情感(积极的、消极的,有时是中性的)作为输出。在某些情况下,我们甚至可以获得一系列的情绪,如非常积极、适度积极、中性、适度消极和非常消极。

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

这些模型通常来自两个不同的家族: 字典方法机器学习方法。 前者利用具有正负极性的词典来推断文本是正的还是负的。这意味着寻找像*“好的”、“伟大的”、“惊人的”、“棒极了的”、“T15”或*“爱”这样的词,以查看文本是否是积极的,或者像“坏的”、“可怕的”、“可怕的”、“T19”或*“讨厌”这样的词,以查看文本是否是消极的。*

后者使用大量先前被标记为正面或负面的文本文档,从数据中学习哪些模式形成正面或负面文档,然后通过寻找这些模式来预测新文档的情感。

情绪分析有很多真实的用例:它可以用于跟踪企业在一段时间内的客户情绪,推断产品的可能性,社交网络用户对某些话题的看法,甚至预测总统竞选或颁奖仪式等事件的结果。

让我们看一些使用平行点在线情感分析工具的句子和情感分类的例子。

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

正如我们所看到的,对于每一句话,我们都得到了一个情感预测(正面的、中性的或负面的)以及对该预测的信心。置信度最高的情感是被挑选出来作为整个句子的潜在情感的情感。(如果你想知道,在写这篇文章的时候,我没有去过汉堡店,但是我很想去)

正如我们在这些例子中看到的,情感分析可以用来从一个句子中提取整体情感。然而,如果我们想要对文本文档中特定实体的情感,而不是整个文本的情感,会发生什么呢?考虑下面的句子:

汉堡店 还不错,但我这一天过得相当糟糕:我被老板吼了一顿,我吃了一块以为是巧克力片但其实是恶心的葡萄干的饼干,我还在地铁上滑倒了

假设我们想知道说话者对汉堡店的看法。 如果我们使用与之前句子相同的在线传统情感分析工具,我们会得到以下结果:

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

正如我们所看到的,因为该句子带有总体负面情绪,所以即使对汉堡店 的情绪是正面的,传统情绪分析的输出也是负面的。这是因为它不是分析对它的特定情感,而是分析整个句子的情感。

如果想要分析文本中对特定目标的情感,我们必须使用普通情感分析的变体,称为 目标情感分析。

有针对性的情感分析:发现对…的情感

目标情感分析所做的基本上是获取文本和该文本中的给定实体,并预测文本中反映的对该实体的情感。在前面的情况下,给定相同的句子,并且将汉堡 地点 作为目标实体,有针对性的情感分析模型将试图预测说话者对汉堡地点的情感,而不是整个句子的实际情感。

作为定向情感分析模型,我使用了刘和张的双向模型,分别来自、、,其中*、预测对汉堡店*的正面情感,置信度在 80%以上。如果你不知道什么是 LSTM,你可以在我之前关于 NLP 的深度学习的帖子中找到。**

好吧,这很酷,但是有针对性的情感分析实际上可以用来做什么呢?嗯,它可以执行许多与传统情感分析相同的任务,以及一些更复杂的任务。例如,我在一个项目中使用它来分析对 Twitter 社交网络上某个主题的最重要个人的情感。我分析了像英国退出欧盟或奥斯卡这样的话题,发现了 Twitter 用户对这些话题中某些有影响力的人物的总体看法。考虑以下推文:

  1. “我不得不说,奥斯卡颁奖典礼很无聊,糟糕的主持人,糟糕的评论,以及尖锐的提名,然而**@ lady Gaga****看起来如此令人惊讶 beutiful❤#奥斯卡奖”**
  2. 今晚我对#NewsNight 上的**@ mait lis****再尊重不过了,口头上把所有级别的 sht 赶出了每一个被采访的完全被欺骗的议员,因为他们触发了 A50 离开我们# 2 周,直到彻底的灾难。去你们的。#英国退出欧盟"**

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

第一条推文使用传统的情感分析器,返回低置信度的负面标签,然而,如果使用有针对性的情感分析模型来分析对 @ladygaga 的情感,则返回超过 60%置信度的正面标签。第二条推文,当作为一个整体来分析时,具有非常强烈的整体负面感觉,然而,如果用有针对性的情感分析来分析对 @maitilis 的情感,我们再次获得正面标签,并且具有很高的可信度。这两个结果都与我们通过阅读推文所看到的相符。

在该项目中,我通过过滤不同的标签收集了大量关于每个主题的推文,找出了谁是被提及最多的用户(将他们定义为该主题中最有影响力的人物),并通过使用有针对性的情感分析模型计算了网络用户对这些有影响力的人物的总情感,其中推文的文本和该文本中被提及的用户作为模型的输入目标。

这些方法对企业非常有用,允许他们超越传统情感分析的限制,从现有数据中探索新的见解。

结论

在这篇文章中,我们看到了传统情感分析和有针对性的情感分析之间的差异,展示了它们可能被使用的不同场景。

在下一篇文章中,我们将探索不同的机器学习方法如何进行情感分析和有针对性的情感分析,深入探讨它们在特征和模型方面的差异。

非常感谢你的时间,不要担心,我不需要任何情绪分析就知道你看完这篇文章后很开心:)

如果你喜欢它,一定要在媒体、关注我,也可以在 LinkedIn 上和我联系,或者在 Twitter @ jaimezorno 上关注我。另外,你可以看看我在数据科学和机器学习方面的其他帖子这里。好好读书,保重!

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

TCAV:特征归因之外的可解释性

原文:https://towardsdatascience.com/tcav-interpretability-beyond-feature-attribution-79b4d3610b4d?source=collection_archive---------9-----------------------

GoogleAI 的模型可解释性技术在人性化概念方面的概述。

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

How convolutional neural networks see the world

仅仅知道一个模型是否有效是不够的,我们需要知道它是如何工作的:桑德尔·皮帅

今天的重点正慢慢转向模型的可解释性,而不仅仅是模型预测。然而,可解释性的真正本质应该是让机器学习模型更容易被人类理解,特别是对于那些不太了解机器学习的人。机器学习是一种强有力的工具,伴随这种能力而来的是确保公平等价值观在模型中得到很好反映的责任。确保人工智能模型不会强化现实世界中存在的偏见也是至关重要的。为了解决这些问题,谷歌人工智能研究人员正在研究一种叫做 TCAV 的解决方案(用概念激活向量进行测试),以了解神经网络模型使用什么信号进行预测。

目标

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

Google Keynote (Google I/O’19)

谷歌 I/O 2019 、**、**的主题演讲中,桑德尔·皮帅谈到了他们如何试图为每个人建立一个更有帮助的谷歌,包括为每个人建立人工智能。他重申,机器学习中的偏见是一个令人担忧的问题,当涉及到人工智能时,风险甚至很高。为了让人工智能更加负责和透明,他讨论了 TCAV 方法,通过这篇文章,我将概述这一方法以及它打算如何解决偏见和公平的问题。这篇文章在数学方面会很轻,所以如果你想更深入地了解,你可以阅读原始研究论文或者访问 TCAV 的 Github 知识库

需要另一种可解释性技术

在 ML 领域,主要有三种可解释性技术:

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

Types of Interpretability Techniques

大多数情况下,你会得到一个由多年工程和专业知识创建的模型,你不能改变它的架构,也不能重新训练它。那么,你如何着手解释一个你毫无头绪的模型呢? TCAV 是一种旨在处理此类场景的技术。

大多数机器学习模型被设计成对底层特征进行操作,比如图片中的边缘和线条,或者说单个像素的颜色。这与人类更熟悉的高层概念非常不同,就像斑马身上的条纹。例如,如果您有一幅图像,该图像的每个像素都是一个输入要素。尽管可以观察每个像素并推断出它们的数值,但它们对人类来说毫无意义。我们不会说这个图像的第 5 个像素的值是 28;作为人类,我们总说图中有一条蓝色的河。TCAV 试图解决这个问题。

此外,典型的可解释性方法要求你有一个你有兴趣理解的特定图像。TCAV 解释说,这通常是真实的一类利益超过一个图像(全球解释)。

TCAV 方法

假设我们有一个模型,它被训练从图像中检测出斑马。我们想知道哪些变量在决定图像是否是斑马时起了作用。TCAV 可以帮助我们理解条纹的概念是否对模型的预测至关重要,在这种情况下实际上是肯定的。

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

TCAV shows that stripes are a critical ‘concept’ when deciding if an image contains a zebra or not

类似地,考虑一个根据医生图像训练的分类器。如果训练数据主要由穿着白大褂和听诊器的男性组成,则模型会假设穿着白大褂的男性是成为医生的一个重要因素。这对我们有什么帮助?这将带来训练数据中的偏见,其中女性的图像较少,我们可以很容易地纠正这一点。

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

TCAV shows that being male is an important ‘concept’ when deciding if an image belongs to a doctor or not

那么什么是 TCAV 呢?

用概念激活向量(TCAV)进行测试是来自谷歌人工智能团队的一项新的可解释性倡议。概念激活向量(CAV)根据人类友好的概念提供了对神经网络内部状态的解释。TCAV 使用方向导数来量化用户定义的想法对分类结果的重要程度——例如,“斑马”的预测对条纹的存在有多敏感。

由 Been Kim 和 Martin Wattenberg、Justin Gilmer、Carrie Cai、James Wexler、Fernanda Viegas 和 Rory Sayres 开创的团队旨在让机器学习赋予人类的能力被它淹没。这是他对可解释性的看法。

Source: Quanta Magazine

工作

TCAV 本质上是从例子中学习概念。例如,TCAV 需要一些“女性”和“非女性”的例子来学习“性别”概念。TCAV 的目标是确定某个概念(如性别、种族)对已训练模型中的预测有多必要,即使该概念不是训练的一部分。

继续“斑马分类器”,考虑神经网络由输入 x ∈ R^ n 和具有 m 个神经元的前馈层 l 组成,从而输入推理及其层 l 激活可以被视为一个函数:

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

Testing with Concept Activation Vectors

  • 定义兴趣概念

对于代表这一概念的一组给定的例子(例如,条纹)( a )或带有概念标签( b )和训练过的网络( c )的独立数据集,TCAV 可以量化模型对该类概念的敏感度。

  • 寻找概念激活向量

我们需要在层 l 的激活空间中找到一个代表这个概念的向量。CAV 通过训练线性分类器来学习,以区分由概念的示例和任何层中的示例产生的激活( d )。然后,我们定义一个“概念激活向量”(或 CAV)作为超平面的法线,将模型激活中没有概念的例子和有概念的例子分开

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

  • 计算方向导数

对于感兴趣的类别(斑马),TCAV 使用方向导数 SC,k,l(x)来量化概念敏感度( e )。这个 SC,k,l(x)可以定量地测量模型预测对任何模型层上的概念的敏感性

以下是在工作流程中使用 TCAV 的分步指南:

[## 张量流/tcav

通过在 GitHub 上创建帐户,为 TensorFlow/tcav 开发做出贡献。

github.com](https://github.com/tensorflow/tcav/blob/master/Run%20TCAV.ipynb)

洞察力和偏见

TCAV 用于两个广泛使用的图像预测模型,即 InceptionV3 和 GoogleNet。

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

Source

虽然这些结果显示了 red 概念对于消防车的重要性,但一些结果也证实了模型中对性别和种族的固有偏见,尽管没有明确受过这些类别的训练。例如:

  • 乒乓球和橄榄球与特定的比赛高度相关
  • 手臂概念比其他概念更能预测哑铃级别。

结论

TCAV 是朝着创建深度学习模型内部状态的人类友好线性解释迈出的一步,以便关于模型决策的问题可以根据自然的高级概念来回答。

TD3:学习用人工智能跑步

原文:https://towardsdatascience.com/td3-learning-to-run-with-ai-40dfc512f93?source=collection_archive---------1-----------------------

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

Photo by Sammy Wong on Unsplash

本文着眼于强化学习(RL)中最强大和最先进的算法之一,双延迟深度确定性策略梯度(TD3)( Fujimoto 等人,2018)。到本文结束时,您应该对是什么使 TD3 性能如此之好有了坚实的理解,能够自己实现该算法,并使用 TD3 训练一个代理在 HalfCheetah 环境中成功运行。

然而,在学习 TD3 之前,你应该已经对 RL 和常用算法有了很好的理解,比如深度 Q 网络和 DDPG,TD3 就是建立在这些算法之上的。如果你需要复习你的知识,请查看这些优秀的资源, DeepMind 讲座系列让我们做一个 DQN旋转起来:DDP G .本文将涵盖以下内容:

  1. 什么是 TD3
  2. 每个核心机制的解释
  3. 实现和代码演练
  4. 结果和基准

完整的代码可以在我的 g ithub 上找到。如果您想快速了解这里使用的代码,请单击下面的图标,进入一个准备就绪的 Google Colab 工作簿。

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

TD3 是什么?

TD3 是深度确定性政策梯度(DDPG)的继承者(Lillicrap 等人,2016 年)。直到最近,DDPG 是机器人和自动驾驶等连续控制问题中使用最多的算法之一。虽然 DDPG 能够提供出色的结果,但它也有自己的缺点。像许多 RL 算法一样,训练 DDPG 可能不稳定,并且严重依赖于为当前任务找到正确的超参数(OpenAI Spinning Up ,2018)。这是由于算法持续过度估计 critic (value)网络的 Q 值造成的。这些估计误差随着时间的推移而累积,并可能导致代理陷入局部最优或经历灾难性的遗忘。TD3 通过专注于减少以前算法中出现的高估偏差来解决这个问题。这是通过增加 3 个关键功能实现的:

  1. 使用一对评论家网络(标题的孪生部分)
  2. 参与者的延迟更新(延迟部分)
  3. 动作噪音规则化(这一部分没有成为标题:/)

双胞胎评论家网络

TD3 增加的第一个功能是使用两个 critic 网络。这是受使用双 Q 学习的深度强化学习(Van Hasselt 等人,2016 年)中看到的技术的启发,该技术涉及使用单独的目标值函数估计当前 Q 值,从而减少偏差。然而,这种技术并不完全适用于演员评论方法。这是因为策略和目标网络更新得如此之慢,以至于它们看起来非常相似,这使得偏见又回到了画面中。相反,在双 Q 学习(Van Hasselt,2010)中看到的一个更老的实现被使用。TD3 使用限幅双 Q 学习,取两个 critic 网络中的最小值(两害相权取其轻)。

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

Fig 1. The lesser of the two value estimates will cause less damage to our policy updates. image found here

这种方法有利于低估 Q 值。这种低估偏差不是问题,因为低值不会像高估值那样通过算法传播。这提供了更稳定的近似,从而提高了整个算法的稳定性。

底线: TD3 使用两个独立的批评家网络,在形成目标时使用两者中的最小值。

延迟更新

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

Fig 2. Making our policy wait for a little while the critic network becomes more stable. Image found here

目标网络是一个很好的工具,可以将稳定性引入到代理培训中,但是在演员评论方法的情况下,这种技术存在一些问题。这是由政策(行动者)和批评(价值)网络之间的相互作用造成的。当一个糟糕的政策被高估时,对代理人的训练就会偏离。我们的代理策略将继续变得更糟,因为它正在更新有很多错误的状态。

为了解决这个问题,我们只需要比价值网络更少地更新策略网络。这使得价值网络变得更加稳定,并在用于更新策略网络之前减少错误。在实践中,策略网络在固定的时间步长之后更新,而价值网络在每个时间步长之后继续更新。这些不太频繁的策略更新将具有较低方差的值估计,因此应该产生更好的策略。

底线: TD3 使用 actor 网络的延迟更新,仅每 2 个时间步更新一次,而不是在每个时间步之后更新,从而产生更稳定和高效的训练。

噪声调整

TD3 的最后一部分着眼于平滑目标策略。确定性策略方法在更新 critical 时倾向于产生具有高方差的目标值。这是由于过度拟合值估计中的尖峰造成的。为了减少这种差异,TD3 使用了一种称为目标策略平滑的正则化技术。理想情况下,目标值之间应该没有差异,相似的行动得到相似的值。TD3 通过向目标添加少量随机噪声并对小批量求平均值来减少这种差异。噪波的范围被剪切,以保持目标值接近原始动作。

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

Fig 3. by training with the added noise to regularise the agents actions it favours a more robust policy. Image found here

通过将这种额外的噪声添加到值估计中,策略趋向于更加稳定,因为目标值为对噪声和干扰更加鲁棒的动作返回更高的值。

**底线:**计算目标时,剪切噪声被添加到所选动作中。这对于更健壮的动作来说偏好更高的值。

履行

这个实现基于本文中的原始回购协议。代码的主要部分包含在下面的完整的自包含笔记本中。这个实现是用 pytorch 写的,如果你不熟悉,我建议查看一些示例文档这里。所有网络架构和超级参数都与原始论文中使用的相同。下面是论文中的伪代码。虽然这可能看起来很复杂,但当你分解它,并通过数学方程格式时,它实际上是非常直观的。

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

Fig 4. TD3 algorithm with key areas highlighted according to their steps detailed below

算法步骤:

为了实现 TD3 算法,我将前面的伪代码分解成逻辑步骤,如下所示:

  1. 初始化网络
  2. 初始化重放缓冲区
  3. 选择并执行带有探测噪音的动作
  4. 存储转换
  5. 更新评论家
  6. 更新参与者
  7. 更新目标网络
  8. 重复直到有知觉

1.初始化网络

对于演员和评论家网络来说,这是一个相当标准的设置。注意,critic 类实际上包含了要使用的两个网络。critics forward()方法返回两个批评家的 Q 值,供以后使用。get_Q 方法只是返回第一个 critic 网络。

class Actor(nn.Module):

    def __init__(self, state_dim, action_dim, max_action):
        super(Actor, self).__init__() self.l1 = nn.Linear(state_dim, 400)
        self.l2 = nn.Linear(400, 300)
        self.l3 = nn.Linear(300, action_dim) self.max_action = max_action def forward(self, x):
        x = F.relu(self.l1(x))
        x = F.relu(self.l2(x))
        x = self.max_action * torch.tanh(self.l3(x)) 
        return xclass Critic(nn.Module):

    def __init__(self, state_dim, action_dim):
        super(Critic, self).__init__() # Q1 architecture
        self.l1 = nn.Linear(state_dim + action_dim, 400)
        self.l2 = nn.Linear(400, 300)
        self.l3 = nn.Linear(300, 1) # Q2 architecture
        self.l4 = nn.Linear(state_dim + action_dim, 400)
        self.l5 = nn.Linear(400, 300)
        self.l6 = nn.Linear(300, 1) def forward(self, x, u):
        xu = torch.cat([x, u], 1) x1 = F.relu(self.l1(xu))
        x1 = F.relu(self.l2(x1))
        x1 = self.l3(x1) x2 = F.relu(self.l4(xu))
        x2 = F.relu(self.l5(x2))
        x2 = self.l6(x2)
        return x1, x2 def get_Q(self, x, u):
        xu = torch.cat([x, u], 1) x1 = F.relu(self.l1(xu))
        x1 = F.relu(self.l2(x1))
        x1 = self.l3(x1) return x1

2.初始化缓冲区

这是一个从 OpenAI 基线回购借用的标准重放缓冲区

3.选择带有探测噪音的动作

这是环境马尔可夫决策过程中的一个标准步骤。在这里,代理将选择一个添加了探索噪声的动作。

state = torch.FloatTensor(state.reshape(1, -1)).to(device)

action = self.actor(state).cpu().data.numpy().flatten()
if noise != 0: 
            action = (action + np.random.normal(0, noise,                            size=self.env.action_space.shape[0]))

return action.clip(self.env.action_space.low,
self.env.action_space.high)

4.存储转换

在采取行动后,我们在重放缓冲区中存储关于该时间步长的信息。这些转换将在以后更新我们的网络时使用。

replay_buffer.add((self.obs, new_obs, action, reward, done_bool))

5.更新评论家

一旦我们在环境中执行了一个完整的时间步骤,我们就为我们的模型训练几次迭代。更新的第一步涉及到批评家。这是算法中最重要的部分之一,也是大多数 TD3 附加特性得以实现的地方。首先要做的是从重放缓冲区中抽取一小批存储的转换。

# Sample mini batch
s, s_, a, r, d = replay_buffer.sample(batch_size)
state = torch.FloatTensor(s).to(device)
action = torch.FloatTensor(s_).to(device)
next_state = torch.FloatTensor(y).to(device)
done = torch.FloatTensor(1 - d).to(device)
reward = torch.FloatTensor(r).to(device)

接下来,我们将为我们从小型批处理中提取的每个状态选择一个操作,并应用目标策略平滑。如前所述,这只是用我们的目标演员网络挑选一个动作,我们将噪声添加到已被剪辑的动作中,以确保有噪声的动作不会离原始动作值太远。

# Select action with the actor target and apply clipped noise
noise = torch.FloatTensor(u).data.normal_(0, policy_noise).to(device)
noise = noise.clamp(-noise_clip, noise_clip)
next_action = (self.actor_target(next_state) + noise).clamp(-self.max_action, self.max_action)

接下来,我们需要计算评论家的目标 Q 值。这就是双重批评网络发挥作用的地方。我们将获得每个目标评论家的 Q 值,然后取两者中最小的一个作为我们的目标 Q 值。

# Compute the target Q value
target_Q1, target_Q2 = self.critic_target(next_state, next_action)
target_Q = torch.min(target_Q1, target_Q2)
target_Q = reward + (done * discount * target_Q).detach()

最后,我们计算了两个电流评论家网络的损失。这是通过获得每个当前评论家的 MSE 和我们刚刚计算的目标 Q 值来完成的。然后,我们像往常一样对批评家进行优化。

# Get current Q estimates
current_Q1, current_Q2 = self.critic(state, action)# Compute critic loss
critic_loss = F.mse_loss(current_Q1, target_Q) + F.mse_loss(current_Q2, target_Q)# Optimize the critic
self.critic_optimizer.zero_grad()
critic_loss.backward()
self.critic_optimizer.step()

6.更新参与者

与评论家相比,演员的更新要简单得多。首先,我们确保每隔 d 个时间步长就更新一次演员。在我们的例子和论文中,演员每两个时间步更新一次。

# Delayed policy updates
if it % policy_freq == 0: # Compute actor loss
        actor_loss = -self.critic.Q1(state,       self.actor(state)).mean() # Optimize the actor 
        self.actor_optimizer.zero_grad()
        actor_loss.backward()
        self.actor_optimizer.step() # Update the frozen target models
        for param, target_param in zip(self.critic.parameters(), self.critic_target.parameters()):
            target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data) for param, target_param in zip(self.actor.parameters(), self.actor_target.parameters()):
                    target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data)

演员的损失函数简单地从我们的评论家网络中获得-Q 值的平均值,我们的演员在给定小批状态的情况下选择采取什么行动。就像以前一样,我们通过反向传播优化我们的演员网络。

7.更新目标网络

最后,我们使用软更新来更新冻结的目标网络。这是与 actor 更新一起完成的,也是延迟的。

# Update the frozen target models
        for param, target_param in zip(self.critic.parameters(), self.critic_target.parameters()):
            target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data)for param, target_param in zip(self.actor.parameters(), self.actor_target.parameters()):
                    target_param.data.copy_(tau * param.data + (1 - tau) * target_param.data)

完整代码

结果

作者在原始论文中的结果在各种基准测试环境(如 MuJoco control suite)中都取得了优异的成绩。下面的结果显示了 TD3 如何优于几乎所有算法,包括最近的 SAC (Haarnoja 等人,2018 年)算法和 PPO(舒尔曼等人,2017 年),PPO 是 OpenAI 的 go to 算法,用于开创性的研究,如他们的 DOTA 2 代理。

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

Fig 5. Benchmarking results from the TD3 paper

用作基准的算法包括、PPO、ACKTR (Wu 等人,2017)和 TRPO(舒尔曼等人,2015)的 OpenAI 基线实现。SAC 是从作者的 github 实现的。

然而,自 TD3 发布以来,SAC 已得到改进,如软演员-评论家算法和应用中所见(Haarnoja 等人,2019 年)。在这里,Haarnoja 展示了全面超越 TD3 的新结果。为了对算法进行公正的评估,我们可以从 OpenAI:Spinning Up 的主要 RL 算法实现中看到基准测试结果。正如您在图 6 中看到的,TD3 在 Ant 环境中设法超越了 SAC。然而,SAC 在 HalfCheetah 环境中实现了更高的性能。

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

Fig 6. OpenAI Spinning Ups benchmark results for the Ant and HalfCheetah MuJoCo environments

下面是我在 Roboschool HalfCheetah 环境中测试的 TD3 实现的训练结果。上图显示了代理在过去 100 集的平均得分。如你所见,代理很快学会站立,然后成功行走。

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

Fig 7. Training results of TD3 HalfCheetah. Shows the average score over the previous 100 episodes

虽然它确实短暂地陷入局部最优,但代理能够快速恢复,在 500k 时间步长后收敛到最优策略。下面的视频显示了经过全面培训的代理的结果。

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

Fig 8. results of the trained TD3 HalfCheetah

结论

恭喜您,我们已经涵盖了您开始实施市场上最先进的强化学习算法所需的一切!我们现在已经了解了 TD3 是什么,并解释了使该算法表现如此出色的核心机制。不仅如此,我们还一步一步地学习了算法,并学习了如何用 pytorch 构建算法。最后,我们看了原始论文和本文实现中看到的算法的结果。我希望这篇文章对你有所帮助,并对强化学习有所了解!

参考

[1] Fujimoto,s .,van Hoof,h .,和 Meger,d .在演员-评论家方法中解决函数近似错误。 arXiv 预印本 arXiv:1802.09477 ,2018。

[2] Lillicrap,T. P .,Hunt,J. J .,Pritzel,a .,Heess,n .,Erez,t .,Tassa,y .,Silver,d .,Wierstra,d .深度强化学习的连续控制。 arXiv 预印本 arXiv:1509.02971 ,2015。

[3]open ai—spinning Up,2018:https://spinning Up . open ai . com/en/latest/algorithms/td3 . html #背景

[4]哈多·范·哈塞尔特(2010 年)。双 Q 学习。神经信息处理系统进展 23 (NIPS 2010),加拿大不列颠哥伦比亚省温哥华,第 2613–2622 页。

[5] Van Hasselt,h .,Guez,a .,和 Silver,d .使用双 q 学习的深度强化学习。在 AAAI,第 2094-2100 页,2016 年。

[6]t . Haarnoja,a .周,a . abbe El,p .和 Levine,s .软行动者-批评家:随机行动者的政策外最大熵深度强化学习。 arXiv 预印本 arXiv:1801.01290 ,2018。

[7]舒尔曼,j .,沃尔斯基,f .,德里瓦尔,p .,拉德福德,a .,和克里莫夫,o .近似政策优化算法。 arXiv 预印本 arXiv:1707.06347 ,2017。

[8]舒尔曼,j .,莱文,s .,阿贝耳,p .,乔丹,m .,和莫里茨,p .信托区域政策优化。在机器学习国际会议中,第 1889–1897 页,2015 年。

[9] Wu,y .、Mansimov,e .、Grosse,R. B .、Liao,s .和 Ba,j .使用 kronecker 分解近似的深度强化学习的可扩展信赖域方法。在神经信息处理系统进展中,第 5285–5294 页,2017 年。

[10] Haarnoja,t .,周,a .,Abbeel,p .,和 Levine,s .软演员-评论家算法和应用。 *arXiv 预印本 arXiv:*12.05905 v2,2019

如何在数据科学工作流程中使用测试驱动开发

原文:https://towardsdatascience.com/tdd-datascience-689c98492fcc?source=collection_archive---------12-----------------------

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

Photo by Samuel Zeller on Unsplash

数据科学家和机器学习工程师应该向软件开发人员学习的另一件事

每个软件开发人员都知道测试驱动开发(或简称 TDD),但数据科学和机器学习方面的人不够多。这是令人惊讶的,因为 TDD 也可以大大提高数据科学项目的速度和质量。在这篇文章中,我将向您介绍 TDD 背后的主要思想和一个代码示例,该示例展示了 TDD 对于数据科学的价值以及如何在基于 Python 的项目中实际实现它。

什么是测试驱动开发?

TDD 是一种软件开发的进化方法。也就是说,它依赖于增量改进,这与敏捷过程相一致。

理解 TDD 最简单的方法是“红绿重构”——基于 Kent Beck 在 2003 年提出的工作模型的系统:

  • **红色:**编写一个新的测试,并确保它失败。如果通过,代码库已经覆盖了所需的功能,不需要额外的工作。
  • **绿色:**编写通过测试的代码。最重要的是,所有以前的测试也必须通过!也就是说,新代码增加了现有的功能。
  • **重构:**如有必要,修改代码。例如,确保代码库的结构在正确的抽象层次上。请勿在此阶段添加或更改任何功能。

您也可以将这些步骤视为寻找不同问题的答案:

  • 如何检查我的代码是否提供了特定的功能?
  • 绿色:我怎样才能写出通过我检查的代码?
  • **重构:**在不影响功能的情况下,我要在代码基上做什么改变才能改进它?

与其他方法相比,这种方法有许多优点:

  • 编写测试迫使你思考用户以后可能会创建什么样的场景。一个好的测试涵盖了在给定特定输入或更一般的用户行为的情况下,软件应该交付什么。
  • 你需要写更多的代码,但是每一部分都是经过设计测试的。整体质量将因此提高。
  • 以这种范式思考促进了清晰定义的模块的开发,而不是过度复杂(并且难以维护)的代码库。

数据科学中何时(不)使用 TDD

希望我让你相信了 TDD 是软件开发的一个好主意。考虑到它的方法,我们什么时候可以在数据科学中应用这些原则以获得最大的效果?

在以下场景中,TDD 可能不值得花费精力:

  • 你正在探索一个数据源,特别是如果你这样做是为了了解这个数据源的潜力和缺陷。
  • 您正在构建一个简单明了的概念证明。你的目标是评估进一步的努力是否有希望。
  • 您正在使用一个完整且可管理的数据源。
  • 你是(并且你将会是)唯一一个在项目中工作的人。这种假设比乍看起来更强,但适用于特定分析。

相比之下, TDD 在以下情况下更好:

  • 分析渠道
  • 复杂的概念证明,即解决子问题的不同方法,干净的数据等…
  • 处理数据的子集,因此您必须确保在出现新问题时,在不破坏工作代码的情况下捕获问题。
  • 你在一个团队中工作,但是你想确保没有人破坏运行代码。

TDD 示例:为 NLP 任务准备 Tweet

对于这个例子,我使用了标准 Python 库中的pytest而不是unittest。如果你在寻找后者的介绍,请看这篇文章底部的链接。

为了向您介绍 TDD 过程,我选择了一个简单但仍然现实的例子:准备一个 tweets 列表以供进一步分析。更具体地说,我想把分析建立在干净和独特的推特上。这需要针对四个子问题的代码:

  1. 清除提及其他账户的推文。
  2. 过滤掉转发。
  3. 清除推文中的特殊字符。
  4. 过滤掉空字符串。

我故意用一种后来并不理想的方式来排列它们。原因是:许多独立的测试可以涵盖这些任务中的每一项。这些任务的组合和顺序将在后面的单独步骤中进行。

因为我从一开始就知道这四个任务,所以我从为它们创建测试用例开始。也就是说,我想出了例证所有这些问题的典型推文。为了方便使用,我创建了一个@pytest.fixture函数。把这些函数想象成测试用例输入值的灵活占位符。以下是相关的代码片段:

我的所有代码都是一个更大的tweet_project模块的一部分,该模块包含一个tweet_cleaning文件,其中包含了与本例相关的所有函数。让我们从红色开始这个过程:

这个测试失败了,因为所有的clean_mentions函数现在包含的是一个pass。因此,它返回None而不是空字符串。现在是变绿的时候了,也就是编写通过测试的代码。在我的例子中,我使用了一个正则表达式来删除“@”和后面直到下一个空格的所有内容:

现在测试通过了。现在有什么可以对进行重构的吗?没有直接影响功能的东西。

我对其他三个步骤使用了相同的方法。以下是对他们的测试:

您可以看到detect_函数返回一个布尔值,该值可以在以后用作过滤器。我为通过这些测试而编写的相应函数如下所示:

这四个功能现在完全独立。他们每个人都有专门的测试,以确保他们按预期工作。为了结束这个例子,让我们构建一个测试来检查整个管道是否产生了期望的结果。也就是说,我想添加这样的功能:获取一组推文,清理需要清理的内容,过滤掉无用的内容,并返回一组推文以供进一步分析。

前面的测试用例没有充分涵盖潜在的场景。这就是为什么我为此实现了一个新的pytest.ficture。您还可以看到,我的测试涵盖了我想要的输出的两个基本特征。首先,它应该只从新的测试集中返回一条 tweet。其次,我需要确保结果是一个list,而不是一个集合或字符串(或者完全不同的东西),这样后面的函数就可以依赖它了。

红色的阶段是成功的,因为测试失败了。在绿色阶段,我使用了现有的(因此也是经过测试的)功能,并将它们组合起来,这样测试就通过了:

这段代码可以工作,但是对重构的需求是显而易见的。这既令人困惑,又有些丑陋。我鼓励你尝试练习。然而,无论你从现在开始做什么,所有的测试都必须保持绿色。在开始下一个周期之前,您不能添加额外的功能。

结论

我想强调的是,TDD 只能和程序员或数据科学家写的测试一样好。因此,思考哪些场景有可能发生是至关重要的。例如,在上面的例子中没有提到两次的测试用例。这里还有一些假设,比如数据中的转发总是以 rt 开头。

然而,这些并不是 TDD 的局限性,而是人类解决复杂问题的结果。TDD 的优势在于:

  • 每个开发步骤本身都经过测试,很容易理解测试包含了什么。
  • 因为每一步都建立在之前的测试之上,所以很难在不被注意的情况下破坏东西。这种方法大大减少了调试的需要。
  • 对于如何向现有的代码库添加额外的功能,有一个清晰的方法:扩展现有的测试或者添加新的测试。
  • 在 TDD 框架中工作鼓励明确的思考,并使其不太可能陷入死胡同或完全混乱。

我承认数据科学不同于软件开发。然而,时不时地像开发人员一样思考是一件很有力量的事情。

如果这篇文章对你有帮助或者你想补充什么,请在评论中或者在 Twitter 上告诉我。我也很乐意在 LinkedIn 上联系。感谢阅读!

附加材料:

关于使用 Python 中的unittest进行 TDD 的介绍,我推荐这篇由 Dmitry Rastorguev 撰写的博客文章:

[## Python 测试驱动开发的简单介绍

我是一个自学成才的初级开发人员,能够编写简单的应用程序。但我要坦白一件事。这是…

medium.freecodecamp.org](https://medium.freecodecamp.org/learning-to-test-with-python-997ace2d8abe)

TDD 不应该是 TDDious

原文:https://towardsdatascience.com/tdd-shouldnt-be-tddious-e8d6f34cb9d8?source=collection_archive---------24-----------------------

现实世界中的数据科学

我仍然会遇到古老的“如何测试”的争论,但是我们能让测试变得有趣吗?

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

(Image by author)

我作为一名工程师已经工作了十多年,仍然会遇到“如何测试”的争论。我是首席工程师,这意味着我要和我的团队一起研究如何建造东西,所以我总是乐于接受不同的观点。但是我喜欢的一个话题是我们是否应该使用测试驱动开发或者 TDD。我认为这可以归结为一个根本性的误解,即为什么你应该享受 TDD 而不是憎恨它…

TDD 以一种清晰的方式让我明白我应该写什么代码。

对我来说,TDD 很有趣。我喜欢用测试驱动的方式编码,我无法想象为什么有人会想用其他方式编码。当我不知道如何为某个东西写一个简洁的测试时,我会很难过。这就把我们带到了通常对 TDD 的第一个抱怨——“我不能只编码”。这很有趣,因为 TDD 以一种清晰的方式让我明白我应该写什么代码。如果没有它,我可能会迷失在边缘案例中,或者在我并不打算进行的重构中。另一件事是 TDD 实际上让我“只写代码”,因为我可以写任何我喜欢的可怕的代码,只要测试通过。那种自由太神奇了!我写了一些可怕的代码来通过测试,测试我的假设,证明我的方法,或者看看我是否能过度优化。以连接到数据库为例:

from mocks import mock_databasedef test_query_database():
  expected_customer = {
    'id': 32,
    'name': 'woof'
  } mock_database()
  customer = get_customer('woof')
  assert customer == expected_customer

这可以通过多种方式实现。我很快就把这些放在一起:

import databasedef get_customer(user):
  return database.connect().query(f'SELECT id,name FROM customers WHERE name="{user}"').fetch()

TDD 允许我专注于我希望我的代码实现的事情。遵循红色->绿色->重构的循环,我可以在任何时候返回以使代码更整洁:

import databasecustomer_query = 'SELECT id,name FROM customers WHERE name="{}"'def get_customer(user):
  conn = database.connect()
  cursor = conn.query(customer_query.format(user))
  return cursor.fetch()

测试给你一个安全网,你之前写的功能仍然在运行和工作。

这证明了在测试通过后重写代码的想法。对此,我经常采用删除的方法;如果我可以删除代码并且测试仍然通过,那么我可以很高兴地重构它。我也将这种技术作为教学工具,向人们展示他们编写了多少额外的代码。删除代码有助于证明它不是不需要的,就是覆盖度量是误导的。带着“最大化未完成的工作”的敏捷思维,你应该为测试编写尽可能少的代码。这种代码的不断减少是有益的,它本身就是一个游戏,增加了乐趣!请注意,测试代码的成本可能过高;例如,我们在 AWS Lambda 处理函数之外初始化框架。这个初始化比处理程序更难测试,因为它在导入时运行。所以删除代码是有一定的背景的,但是一般来说一些测试层可以覆盖所有的东西。

令人兴奋的是,如果我不立即重构,在我有几个测试用例之后,我的代码仍然会很糟糕。重构并不总是发生在每次测试之后。测试给你一个安全网,你之前写的功能仍然在运行和工作。您可以继续沿着一条通往其自然结论的道路前进,而不用担心其他东西被破坏或者您稍后需要做的深入重构。通过评估代码,尽可能多地删除代码,您可以在测试保护您的情况下积极地进行大量重构。

另一个常见的抱怨是在做出改变时“我必须改变所有的测试”。在测试领域也有一些争论,关于你应该在什么水平上测试多少。我个人的哲学是,你应该测试你想要达到的目标。在数据管道的情况下,这可能是:从 S3 拉一个文件,对它做一些工作,然后把它放回 S3 的另一个位置。因为我重视 TDD 中的乐趣,这类测试比成百上千的说着同样事情的单元测试更让我高兴。这种数据处理测试的一个例子可能是:

import pandas
import moto 
from pandas.testing import assert_frame_equalfrom functions.cake_mixer import mix_ingredients@pytest.fixture
def bucket_fixture():    
  with moto.mock_s3():        
    s3_resource = boto3.resource("s3")        
    bucket = s3_resource.Bucket("test")
    bucket.create()
    yield bucketdef test_processing_cake(bucket_fixture):
  input_fixture = pandas.read_csv('fixtures/mixture.csv')
  output_fixture = pandas.read_csv('fixtures/cake.csv') input_fixture.to_parquet('s3://test/ingredients/mixture.parquet')
  mix_ingredients({
    'bucket': 'test_bucket',
    'mixture_key': 'ingredients/mixture.parquet',
    'cake_key': 'cake/chocolate.parquet'
  })
  output = pandas.read_parquet('s3://test/cake/chocolate.parquet')
  assert_frame_equal(output, output_fixture)

这做了很多:

  • 为 S3 设置固定装置
  • 上传测试示例文件
  • 运行一些代码来处理这个例子
  • 读出结果文件
  • 断言您的预期输出与处理后的输出相匹配

这个例子说明了在这种测试中你可能采取的步骤。要采取更小的步骤,您可以在涉及 S3 之前就开始处理数据:

import pandas
from pandas.testing import assert_frame_equalfrom functions.cake_mixer import mix_ingredientsdef test_processing_cake():
  input_fixture = pandas.read_csv('fixtures/mixture.csv')
  output_fixture = pandas.read_csv('fixtures/cake.csv') output = mix_ingredients(input_fixture)
  assert_frame_equal(output, output_fixture)

当您编写一个不断发展的测试时,您可以感觉到代码在一起。希望这能解决“我必须改变所有的测试”的问题,因为您只完成了实际的需求。紧密耦合的单元不容易改变。一个警告是,当一个单元有一组复杂的输入和输出时,单元测试可以帮助定义它们。

重要的是,不要试图一次实现太多,要朝着更大的结果努力。有时你想要使用多个测试循环来帮助构建一个更大的目标。对于数据管道,您可以为管道编写一个测试,然后为每个步骤编写一组更小的测试。也就是说,您可以测试管道的输出和概念证明管道是否匹配。然而,管道中的各个阶段都有针对具体的、可解释的转换的测试。从 pandas 概念验证到大规模 Spark 数据管道可以使用相同的端到端测试数据。

测试本质上是一个有趣的游戏,你可以设计自己的挑战,然后找到最好、最令人愉快的方式来完成它们。

最后,人们发现考试很单调,对此我无能为力。测试本质上是一个有趣的游戏,你可以设计自己的挑战,然后找到最好、最令人愉快的方式来完成它们。让这一点变得更清楚的最好方法是给自己找一个搭档,用乒乓球的方式进行练习。在乒乓球比赛中,一个人写一个测试,另一个人让它通过。竞相编写更好的测试和代码。有趣的是找到让代码做意想不到的事情的方法,或者找到让你的伙伴多思考一点来解决的边缘情况。例如,如果有一个函数要返回传递的值,您可以很容易地编写以下代码:

def test_identity():
  assert identity(1) == 1

你可以很容易地从中获得乐趣,如下所示:

def identity(x):
  return 1

这意味着您的合作伙伴现在必须实现预期的功能。下一次,技巧可能是检查 x 的两个不同值,以防止您玩得太开心:

def test_identity():
  assert identity(1) == 1
  assert identity(404) == 404

您已经介绍了几个额外的案例,并设法确保代码完全按照您的意图运行。

我真的希望这篇文章向你展示,TDD 给你的不是负担,而是:

  • 理解你要写的代码和它应该做什么
  • 这是一张继续编写糟糕代码的安全网,直到你想重构为止
  • 工作生活的游戏化,包括多人游戏!

所以,就算你以前试过,再试试 TDD,因为大家应该会玩得更开心:-)。

TDS 将来到多伦多采访人工智能领域的领导者——请将您的问题发送给我们!

原文:https://towardsdatascience.com/tds-is-coming-to-toronto-to-interview-leaders-in-ai-send-us-your-questions-for-them-d939a6d52a3f?source=collection_archive---------33-----------------------

独家 TDS 采访

帮助我们为 TDS 合作的人工智能大会上的知名演讲人设计面试问题。

再过不到两周,TDS 将作为官方媒体合作伙伴和视频主持人出席多伦多 ML 年会。在会议期间,我们将针对紧迫的数据科学问题,面对面地采访内部演讲者,他们都有精美的简历!此外,知名科技 YouTubercs Dojo将加入 TDS 担任面试官!

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

Tickets for conference are still available here!

在过去的几个月里,我们与数据科学领域的知名嘉宾推出了视频访谈播客系列。我们正在扩大这个系列,同时为 TDS 观众提供空间,让他们向即将到来的面试官提问。

这些问题可以是关于招聘、日常工作流程、公司内部项目或其他对你很重要的数据主题。我们将为面试日收集和策划。

请在评论区列出问题或直接发送给haebichan@towardsdatascience.com

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

以下是四位确定要接受采访的演讲者:

1。阿扎利亚·米罗西尼

阿扎利亚是谷歌大脑的高级研究科学家。具体来说,她是系统的机器学习 moon shot in the Brain 的联合创始人/负责人,她专注于基于深度强化学习的方法来解决计算机系统和元学习中的问题。

Azalia 是深度学习方面的专家,对与神经网络和深度强化模型相关的最新研究有着透彻的了解。她对人工智能领域做出了巨大贡献,特别是通过她在可训练门控网络(稀疏门控专家混合层)方面的工作,解决了神经网络通过参数数量吸收信息的局限性。

在会议期间,Azalia 将谈论模型容量的这些问题,以及与学习做资源分配的深度强化模型相关的挑战。

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

2。Shreyansh Daftry

Shreyansh 是美国宇航局(计算机视觉小组-自主系统部门)的人工智能研究科学家和技术专家。他帮助开发火星及更远地方的下一代智能自主机器人。他通过构建复杂但可扩展的算法来实现这一点,这些算法充当机器人的“大脑”。

他处理辐射、机器学习中的少量数据等具有挑战性的问题,并为必须适应这些问题的机器处理意外环境和情况。

在多伦多 ML 会议上的演讲中,Shreyansh 将讲述机器学习如何用于太空探索以及他在这一过程中所学到的经验。

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

3.帕特里克·哈林娜

Patrick 是 Zynga ML 工程团队的技术主管,Zynga 是世界上最大的移动视频游戏公司之一。他是强化学习领域的专家,他在 Zynga 使用这种算法来个性化游戏体验。他的专长还在于支持这些复杂算法的分布式计算系统,如 Apache Spark。

例如,Zynga 已经利用 Spark 来改善内部数据管道,以生成数千个格式正确的功能,而无需手动输入。这是一个重要的成就,因为游戏数据(点击流数据)可能会非常混乱,来自同一游戏的不同操作系统会生成它们自己的数据模式。

Patrick 将在会议期间就强化学习如何解决许多业务问题以及在生产中使用强化学习的挑战发表演讲。

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

4.尚查尔·查特吉

Chanchal 领导谷歌云的人工智能团队。他专注于金融服务,解决与前 100 家银行相关的数百个机器学习问题,其中许多银行都是谷歌的客户。

这些问题包括欺诈、风险(缓解、量化风险)、编辑云中的敏感数据、对话代理(Google Home)、广告和推荐,以及模型的可解释性,他认为从消费者、管理层和监管者的角度来看,这是极其重要的。

在他的演讲中,Chanchal 将探讨深度学习人工智能能力如何推动谷歌的许多关键决策,作为改善数字营销、客户服务、制造运营等诸多方面的秘方。

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

同样,请随意在评论区写下问题,或者直接发邮件给haebichan@towardsdatascience.com!我们期待你们所有人的参与,无论是虚拟的还是面对面的。

Te Papa Tongarewa(新西兰博物馆)

原文:https://towardsdatascience.com/te-papa-tongarewa-museum-of-new-zealand-sentimental-footing-d062e41e430f?source=collection_archive---------42-----------------------

大约四个月前,我在游览世界上最大风之都惠灵顿的时候参观了这个博物馆。毛利人的名字, Te Papa Tongarewa ,字面意思是“宝藏的容器”,它始于 1865 年作为一个小型殖民博物馆。

这座建筑和里面的展览一样宏伟。我喜欢的两个地方是和记录新西兰移民旅程的部分。作为一名有抱负的数据科学家,在离开这个地方后,我有一个目标。我想弄清楚我的积极情绪是别人感受到的还是被遗漏的。我的第一站是快速浏览网上评论。我选择猫途鹰评论是基于它们的简洁和高度的表现力。我从 2016 年 4 月 1 日到 2019 年 7 月 15 日收到了 Te Papa 的旅行顾问评论。下面是一些统计数据和数据集样本。

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

A snippet of the 11940 reviews. Hotel name is just a place holder in my review collection process so yes Te Papa is not a hotel.

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

The dataset comprises of 11940 reviews. The rest of what we’ll cover is in the text bit of the review thus not statistically significant here.

关于数据集的一些分析:

发行审查文本长度和字数

120–139 characters reviews lengths were written by 1068 visitors. That’s the most representative cluster.

4630 reviews were made up of 20–39 words which makes them quite expressive. Visitors really wanted to pass the message across.

文本分析

我们按照以下流程清理了数据

  1. 酒店名称点评标题义举投票用户名
  2. 给出 5 分而不是 50 分的评价。简单地除以 10。
  3. 删除缺少“review_body”的行。
  4. 为评论的长度创建新的特征。
  5. 为评论的字数创建新功能。
  6. 使用 TextBlob 计算情感极性。值的范围从-1 到 1,其中 1 是最积极的情绪,而-1 是最消极的情绪。

上述过程的输出如下

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

Results after: Dropping hotel name, review title, helpful vote, user name, preprocessing (removal of unwanted characters. Can be user defined),polarity computation as well as addition of review length and word count columns.

文本斑点操作

text blobPython(2 和 3)库提供了一个简单的 API,用于处理常见的自然语言处理(NLP)任务,如词性标注、名词短语提取、情感分析、分类、翻译等。下面的代码片段生成 5 条随机 tweets,在数据帧中极性最大。在我们的例子中,对于最消极的一个,即极性= =-0.875 和极性== 0,可以做同样的事情。

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

Five random tweets with the most positive sentiment i.e. polarity equal to 1.

我对 TextBlob 库的性能不太满意,特别是在一个严重偏向正极性的数据集中指出负面情绪,如下所示。

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

Skewed to the left. Close to 38% of the reviews depict satisfaction in what Te Papa offers.

与 VADER 的感悟

(效价感知词典和情感推理机)是一个词库和基于规则的情感分析工具。它使用一个情感词典的组合,情感词典是一个词汇特征(例如,单词)的列表,这些词汇特征通常根据它们的语义取向被标记为正面或负面。****

我选择 VADER 来分析情绪,因为与传统评论相比,它更习惯于社会数据。

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

Most negative review is with a compound score of -0.9794.

VADER 最负面的评论如下。

我们去 Te Papa 看 Gallipolli,战争规模展览。这个展览很棒,但同时也非常悲伤,因为它讲述了战争的徒劳和人类生命的可怕损失。Weta 工作室制作的超大模型非常精确。

像“非常”和“悲伤”这样的词肯定在否定过程中起到了关键作用。就像其他观点更多的是积极的观点过于美好一样,它需要一双更敏锐的眼睛来捕捉这种不一致。总而言之,期望提取的语句 100%准确是不可能的。唯一的出路是尽可能地训练我们自己的模型,而不要过于精确。我们以后再做那件事。

一段时间的情绪

事件影响人的感情。某些展览的开展必然会引起参观者不同的反应。将情绪绘制成时间序列会让我们更好地了解游客的感受模式。在绘制之前,会对数据框进行一些更改。我们根据评论时间对所有值进行排序,将评论时间复制到索引中,评论之间的间隔为 24 小时,以使绘图更容易,并计算复合情感得分的扩展和滚动平均值。

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

从上面的情节中得到一些有趣的观点

  1. 很多情绪点都集中在 0.75 情绪分左右。这是一个强有力的指标,表明大多数评论都过于积极。
  2. 有很多数据点。很难解释模式。

整个数据集的样本表示可能会给出一个更容易解释的图表。下面的输出证实了之前对 Te Papa 游客体验的强烈肯定。

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

Sentiment scores are evenly higher i.e. close to 1.0. Shows an even and strong footing in terms of what Te Papa offers its clientele.

结论

从上面的分析来看,当谈到游客的体验时,Te Papa 有一个强大的立足点。我们使用了两个情绪分析器,它们都被证明是通用的,因为情绪中的负面检测对两者来说都很困难。这是关于 Te Papa 的统计和数据科学展望系列帖子的第一步。我期待着利用 Te Papa 的公开数据集来解决以下问题

  1. 使用来自他们的谷歌评论的更多数据,基于增强的低向量表示来训练情感分类器。希望我也能挖掘他们的社交数据。
  2. 基于方面的情感分析。游客对哪些方面感到欣喜若狂,对哪些方面不满意?
  3. 根据游客的排名,与世界上排名前 25 位的其他博物馆进行面对面的比较分析。哪些方面让他们比 Te Papa 做得更好?
  4. 分析惠灵顿或 Te Papa 的某些活动是否会影响游客体验。

敬请期待!

内容概要:本文详细介绍了CCF-GESP认证的学习资源与知识点指南,分为官方资源与平台、知识点学习与解析、备考策略与工具、实战项目与进阶资源以及学习工具推荐五个部分。官方资源包括CCF数字图书馆提供的免费真题库、一站式学习平台和GESP官网的最新真题下载及考试环境说明。知识点学习部分涵盖Python、C++和图形化编程(Scratch)的核心内容与实战案例。备考策略方面,提出了基础、强化和冲刺三个阶段的分阶段计划,并强调了在线题库模拟测试与社区交流的重要性。实战项目与进阶资源则为不同编程语言提供了具体的应用场景,如Python的智能客服机器人和C++的并行编程与嵌入式开发。最后,推荐了多种学习工具,如代码编辑器VS Code、模拟考试平台和社区支持渠道。 适合人群:准备参加CCF-GESP认证考试的考生,特别是对Python、C++或Scratch编程语言有兴趣的学习者。 使用场景及目标:①帮助考生系统化地学习官方资源,熟悉考试形式和内容;②通过分阶段的备考策略,提高应试能力和编程技能;③利用实战项目和进阶资源,增强实际编程经验和解决复杂问题的能力。 阅读建议:建议考生按照文章中的分阶段备考策略逐步推进学习进度,充分利用官方提供的资源进行练习和模拟测试,并积极参与社区交流以获取更多备考经验和疑难解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值