TowardsDataScience 博客中文翻译 2019(二百二十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Google Drive+Google Colab+GitHub;不要只是读,要做!

原文:https://towardsdatascience.com/google-drive-google-colab-github-dont-just-read-do-it-5554d5824228?source=collection_archive---------1-----------------------

GitHub、Google Colab 和 Google Drive 如何协同工作;如何处理自定义文件,并将 Jupyter 笔记本修改推送到 GitHub Repo。

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

Interaction Between The Three Components

我最近被贝塔斯曼理工学院奖学金挑战课程第一期录取了——人工智能轨道纳米学位项目。在课程中,Jupyter 笔记本练习由 Udacity 在 GitHub repo 中提供。我一直在本地使用 Anaconda Jupyter 和 Jupyter lab 来运行这些练习,但是我注意到在这些课程的后面有更多的任务需要更广泛的计算,并且运行时间越来越长。对于我的旧笔记本电脑来说,CPU 的工作量太大了,所以我必须找到其他替代品。

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

Google Colab 已经在 Slack 社区中提出。它有一个完全在云上运行的 Jupyter 笔记本电脑的预设置环境(我的笔记本电脑非常感谢🐌).最重要的是,它提供了“免费”的 GPU(图形处理单元)。

本文的目标是了解:

  • 如何将 Github repo 集成到 Google Colab(提供步骤)
  • 如何处理自定义 Python 文件
  • 如何将您在 Jupyter 笔记本上的更改保存到不同的分支,并保持主分支干净。

奥列格·żero 的文章和娜塔莉亚斯韦尔奇科娃的 G itHub repo 提供了非常好的指导,帮助我开始设置。然而,对我来说,我在实现过程中发现了几个挑战。我花了几个小时寻找额外的资源来解决我遇到的这些问题,但是没有直接的指南来实现我想要的,所以我希望这篇文章可以帮助面临相同问题的其他人。

开箱即用的解决方案 Google Colab 和 GitHub

在这个笔记本中,有几种直接从 GitHub 加载/浏览笔记本文件的方式。您可以在您的私有存储库(需要 GitHub 认证)或公共存储库中访问您的笔记本。

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

Colab-Github-demo Jupyter notebook

如果你点击http://colab.research.google.com/github,它会指引你一个弹出窗口,你可以通过 GitHub 网址、组织或用户进行搜索。

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

在我做出更改后,我可以将这些文件保存回 GitHub 分支。很简单,对吧?没那么快!如果您的笔记本没有任何想要导入的自定义文件,这种方法将会很有效。所以,我需要找到另一种解决方案。

先从 Google Colab + Google Drive + GitHub 开始吧

在我们详细讨论之前,让我们来看看那些组件(Google Drive、Google Colab、GitHub)的每个角色以及它们之间的交互。

  • Google Colab: 所有的操作都在这里调整大小。它被用作 shell 来运行 bash 命令和 git 命令。当然,我们使用 Jupyter notebook 运行我们的 Udacity 笔记本。
  • Google Drive: 当我们使用 Google Colab 时,我们的工作被临时存储在一个虚拟机中大约 8 到 12 个小时。所以这并不理想,因为我们的处理任务可能会持续几天、几个月或几年,这取决于每个项目。解决方案之一是将你的培训存储在云存储托管中。众所周知,Google Drive 是谷歌提供的云存储。它提供免费的 15 GB 存储空间,并且很容易与谷歌 Colab 集成。在这种情况下,我们使用这个位置来永久存储我们工作的克隆 GitHub repo。
  • GitHub: 一个用于版本控制和协作的代码托管平台。使用版本控制和分支策略是一个很好的实践。我分叉了 Udacity 深度学习-v2-pytoch

1.将 Google Drive 安装到 Google Colab

在 Google Colab 中,我们将创建一个笔记本来执行我们的命令。如果您已登录,一旦您创建了笔记本,您的文件将存储在名为 Colab Notebooks 的文件夹中。

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

Colab Notebooks Folder in Google Drive

我将奥列格·żero 的文章中提供的部分代码划分到笔记本的不同单元格中,以便更好地理解流程。要将 Google Drive 安装到 Colab,我们可以使用:

Mount Google Drive Gist

感谢 Google 提供的库,这非常简单。按照说明使用 Google Drive 进行身份验证。

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

Running commands to mount Google Drive

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

Result after authenticated and mounted successfully

如果看到“挂载在/content/drive”,说明 Google Drive 挂载成功。🎉

如果您熟悉终端命令,您可以仔细检查位置和目录:

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

请参考我为每个命令添加的每个注释。注意上面最后一个命令的输出。我们有“Colab 笔记本”和“MyDrive”文件夹。这些文件夹存储在我的 Google Drive 的根目录下。

2.将 GitHub 存储库克隆到 Google Drive

现在我们准备克隆我们的 GitHub repository 项目,并通过 Google Colab 将其存储在 Google Drive 中。我将克隆分叉库deep-learning-v2-py torch

  • 在我的例子中,我将把克隆的 GitHub 存储库存储在这个目录中:"/content/Drive/My Drive/uda city/deep-learning-v2-py torch "

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

Google Drive Directories

我们需要定义一些将在脚本中使用的变量:

  • 我的谷歌驱动路径
  • GIT _ 用户名
  • GIT_TOKEN (GitHub 访问令牌)
  • GIT_REPOSITORY

如何生成 GitHub 访问令牌:

进入右上角的用户资料→点击设置→然后选择开发者设置。

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

GitHub personal access tokens

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

select scope for your access token

在这种情况下,回购范围就足够了。要了解有关定义个人令牌访问的范围的更多信息:https://developer . github . com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/

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

注意:不要将你的访问令牌公开

  • 在笔记本的新单元格中,我们将设置所需的信息:

https://gist.github.com/vsay01/12ff13b05d768dc2d4f4646fbf41cd33

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

  • 设置完所需的信息后,让我们执行克隆。

我们有两个选择:

选项 1

最后,我们应该看到 GitHub 存储库的内容保存在我们指定的目录中。注意我们有 folder .git,它是用来表示这个文件夹是 git 文件夹。

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

请记住,我们希望在开发分支中进行更改,而不是在主分支中。所以,我们来验证几件事。如果您不熟悉 git 或需要更新,这里有一个很好的资源。

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

在输出中!git 分支,有两个分支,开发和掌握。“*”表示我们正在进行的当前分支。默认情况下,您将从主分支开始,除非您克隆特定分支。您可以使用以下命令签出开发分支:

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

选项 2

如果你想将所有文件/文件夹从你在 google drive 中克隆的存储库中复制到 Google Colab 本地运行时,那么你可以遵循奥列格·żero文章

注意: data/是一个包含我想排除的大量数据的文件夹。请随意将其更改为您想要排除的不同文件夹路径/名称。

正如奥列格·żero 的文章中所解释的:

上面的代码片段在*/content/drive*安装 Google Drive 并创建我们项目的目录。然后,它从 Github 中取出所有文件,并将它们复制到那个目录中。最后,它收集属于驱动器目录的所有内容,并将其复制到我们的本地运行时。

这个解决方案的一个好处是,如果多次执行,它不会崩溃。无论何时执行,它只会更新新的东西。此外,使用*rsync*,我们可以选择排除一些内容,这可能需要很长时间来复制(…数据?).

3。修改/处理您的笔记本

到目前为止,我们做了以下工作:

  • 将 Google Drive 安装到 Google Colab
  • 将 GitHub 存储库克隆到 Google Drive

这是有趣的部分😃。现在,我们准备在笔记本上进行更改和工作

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

4。处理自定义文件问题

第 2 部分 PyTorch 中的神经网络(练习)。ipynb notebook,我们需要导入一个自定义文件 helper.py,来访问 helper 函数。

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

可以看到,helper . view _ classify(img . view(1,28,28),ps)正在工作。

5.将更改保存到 GitHub

如果您选择上面的选项 2,那么请按照 奥列格żero 一节的“保存,收工”来保存您的更改。

对于选项 1,现在您已经完成了更改,是时候将更改保存并推送到您想要的分支中的 GitHub 存储库中了。这是 git 备忘单

我建议在不同的单元中运行这些命令,以确保所有的文件更改都正确地添加到提交中。

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

上面的命令将添加所有文件;如果只想添加修改过的文件,可以使用:

也请更改提交的注释;用户.电子邮件和用户名

在这里,我可以验证更改是否已成功推送:

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

我们完成了——我希望你喜欢这篇文章。

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

我将继续添加我在学习过程中发现的与 Google Colab 相关的任何问题:

问题#1

Google Colab 脚本抛出“OSError:传输端点未连接”

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

适合我的解决方案:

  • 卸载 Google Drive,然后再次重新装载。
  • 运行时→管理会话并终止笔记本

问题#2

我遇到了这个问题,即使;我已经导入了自定义文件。

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

适合我的解决方案:

当我将 Google Drive 导入 Google Colab 时;我需要确保当前路径是项目文件夹。

问题#3

错误:装入点不能包含空格。

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

适合我的解决方案:

  • 避免在路径中使用空格

问题#4

  • 资产文件夹中的图像不会加载到 Jupyter 笔记本中;

适合我的解决方案:

  • 从图片中获取可共享 google drive 链接。
  • 在这个 URL 中使用来自可共享 google drive 链接的图片 id:https://docs.google.com/uc?id =[图像 id] [1]

例如:

https://docs.google.com/uc?id = 1 hfswhk 0 uiwleeiuz _ bwb 1 dxnoqrapzo-

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

问题#5

来自 Jupyter 代码的 google drive 中的参考图片。在 custom_filters.ipynb 笔记本中,我们需要引用数据文件夹“data/curved_lane.jpg”中的图像

适合我的解决方案:

  1. 导入 google drive
  2. 然后你有两个选择:
  • 引用代码中图像的完整路径。比如,“。/Drive/My Drive/My Drive/uda city/deep-learning-v2-py torch/卷积-神经网络/conv-可视化/数据/curved_lane.jpg "
  • 将目录切换到父文件夹并访问数据文件夹。因此,到图像的路径可以缩短为。/data/curved_lane.jpg "

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

问题#6

我在conv _ visualization . ipynb笔记本中遇到以下错误。

————————————
错误回溯(最近一次调用 last)
<ipython-input-1–9775 b 898 dc2d>在<模块>()
10 bgr _ img = cv2 . im read(img _ path)
11 #转换为灰度【T15COLOR_BGR2GRAY)
13
14 #规格化、重新缩放条目以位于[0,1]内

错误:OpenCV(4 . 1 . 2)/io/OpenCV/modules/imgproc/src/color . CPP:182:错误:(-215:断言失败)!函数“cvtColor”中的 _src.empty()

对我管用的方案:

发生此问题的原因是输入图像的路径不正确或输入图像名称中有特殊字符。在我修正了输入图像路径后,它工作得很好。

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

谷歌联合学习和人工智能

原文:https://towardsdatascience.com/google-federated-learning-and-ai-64c6e4e4e22f?source=collection_archive---------17-----------------------

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

Photo by @memorieson35mm

保密性和人工智能

我以前听说过联合学习。然而,最近几天深入半监督学习让我意识到了这个概念及其用法。在这篇文章中,我将给出一个简单的概念解释,而不是深入到广泛的技术细节。由于疏忽管理用户数据,脸书最近被美国联邦贸易委员会罚款 50 亿美元。谷歌同样面临来自欧盟委员会的十亿美元的正式指控。这些公司如何改进?谷歌提出了部分解决方案。

由于对通信技术中的隐私和安全目的的日益关注,很高兴看到 Google 希望通过这个概念来解决这个问题。现在我想进一步探索它,但首先我想分享一幅来自谷歌的关于联合学习的漫画的一部分:

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

谷歌关于联合学习的漫画就这样开始了。我真的建议你查看上一句中链接的完整版本来阅读整个故事。

根据维基百科上机器学习页面的短存根:

联合学习 是一种训练机器学习模型的新方法,它分散了训练过程,允许用户的隐私得到维护,无需将他们的数据发送到中央服务器。这也通过将训练过程分散到许多设备来提高效率。例如,Gboard利用联邦机器学习在用户手机上训练搜索查询预测模型,而无需将单个搜索发回谷歌。

简而言之:关于在分散的数据上训练一个集中的模型。

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

那么为什么这很重要呢?

隐私和人工智能

我决定去看看国际隐私组织对人工智能有什么看法。

【隐私国际(PI) 是一家慈善机构,挑战那些想要了解个人、团体和整个社会一切的政府和公司。PI 希望的未来是,人们能够控制他们的数据和他们使用的技术,政府和公司不再能够使用技术来监控、跟踪、分析、描述,并最终操纵和控制我们。但是我们必须为未来而战。

他们的网站上有一个关于人工智能的网页。我将从他们的简短页面中借鉴或复制一些要点(斜体)😗*

  • 重新识别和去匿名 :人工智能应用可用于识别和跟踪不同设备上的个人,无论是在家中、工作场所还是公共场所。
  • 剖析的不透明和保密 :人工智能的一些应用对个人、监管者,甚至系统的设计者本身来说可能是不透明的,因此很难质疑或询问结果。
  • 数据利用 :人们往往无法完全了解自己的设备、网络、平台产生、处理、或分享的数据种类和数量。随着我们将智能和互联设备带入我们的家庭、工作场所、公共空间甚至身体,教育公众了解这种数据利用的需求变得越来越迫切。

在这种情况下,使用人工智能进行侧写,或者跨设备甚至在公共场所跟踪和识别人,这种不对称放大了鸿沟。那么他们提出的解决方案是什么呢?

  1. 使人工智能领域和机器学习技术的使用符合尊重、促进和保护国际人权标准的最低要求。
  2. 确保人工智能保护个人免受审查现有法律带来的风险并在必要时修订法律**,以解决新出现的隐私威胁的影响。**

回到谷歌漫画,这是如何在联邦学习中解决的?

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

****安全聚合是一种交互式加密协议,用于计算屏蔽向量的和,如模型权重。它通过协调成对的参与客户端之间的随机掩码的交换来工作,使得当接收到足够数量的输入时,掩码相互抵消。要了解更多关于安全聚合的信息,请参见保护隐私的机器学习实用安全聚合

追踪报道的弊端

技术领域的数据科学家、工程师、软件、硬件或销售人员有任何责任吗?是的,所以让我引入医疗事故的概念。

医疗事故 :在侵权法中,医疗事故,也称为业务过失,是“业务人员的疏忽或不称职的一个实例”

这是出了名的难以断言,然而责任的概念是一个有趣的概念。我们可以严肃地质疑这种渎职或专业疏忽是否是技术行业在处理数据方面如此糟糕的声誉的原因。如果有一些关于你如何处理数据的专业标准,那就太好了。

****你觉得沃尔玛更了解你了吗?沃尔玛进行了广泛的市场调查,但是我们可以质疑他们带有机器学习的新相机是否仅用于跟踪盗窃。沃尔玛透露,它已经在 1000 家商店用人工智能摄像头跟踪收银台的盗窃行为。

Everseen 首席执行官艾伦·欧赫利希(Alan O’Herlihy)表示,该公司的技术旨在减少结账处的摩擦,并将结账监控“数字化”。

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

Ireland-based Everseen is one of several companies supplying Walmart with the technology for its Missed Scan Detection program.YouTube/Everseen from Business Insider

这张照片当然是我在以前的文章中提到的拟人化的一个很好的例子——希望将机器显示为人类。当然,没有像人一样的机器盯着你的图像,尽管它看起来像一系列朗朗上口的词的体现,如机器人,机器人过程自动化(RPA),自主等。

一家新公司刚刚为一个人工智能筹集了 1 亿美元,这个人工智能融合了线上和线下行为来建立消费者档案。

广告和营销领域的圣杯之一是找到一种方法来准确捕捉和理解消费者一整天都在做什么,不管是数字活动还是线下活动。[……]附近——该公司已经建立了一个名为“火种源”的交互式、基于云的人工智能平台,该平台在 44 个国家开展工作,根据大量信息创建匿名的、基于位置的用户档案(目前每月 16 亿),这些信息来自手机、数据合作伙伴、运营商及其客户,但该公司声称该平台是“以隐私设计为基础”建立的

那么,追踪你的感受,汇总并在未经你同意的情况下出售它怎么样?至少没有你的明确同意(阅读条款和条件)**

目前没有同意的案例,因此这在欧盟严格来说可能是不合法的,但我不确定。可能会有一些灰色地带,一些演员可以利用,我不是律师。

当一个人自愿同意另一个人的提议或愿望时,表示同意。这种模糊的定义在技术领域并不可取,因为似乎大多数公司都认为你同意进入他们的平台。

:一般禁止处理个人数据,除非法律明确允许,或者数据主体已经同意处理。虽然同意是处理个人数据的一个较为知名的法律依据,但它只是《一般数据保护条例》( GDPR)中提到的六个依据之一。其他是:合同、法律义务、数据主体的重大利益、公共利益和 GDPR 第 6(1)条所述的合法利益。****

现在可能有更多的要求来说明你收集了哪些数据,并要求那些出售数据的人进行申报。然而,沃尔玛和 Near 或许能够以某种方式绕过这一点。众所周知,很难理解数据卖家的情况,以及他们把什么卖给了谁。然而,作为一个启发式的经验法则,我们可以推测这是否是一个过分的要求。

先征得同意:

  1. 使用数据
  2. 汇总数据
  3. 存储数据
  4. 出售数据

这似乎经常被忽视,仅仅是出于权宜之计的考虑— 也就是快速移动和打破东西,这似乎已经成为处理数据的同义词。去年(2018 年)的一个做法被量化的 VC 描述为非常

脸书可能在 2019 年 7 月受到 FTC50 亿美元罚款的打击。然而,4 月份的时候,据说[公司预留了 30 亿美元](http://In April, Facebook said it set aside $3 billion to help cover an expected fine of between $3 billion and $5 billion.)来期待这一天的到来。

具体来说,监管机构试图确定脸书是否违反了它在 2011 年与当局达成的协议条款,当时它承诺不会在未经用户同意的情况下收集和分享个人数据。

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

我们可以严肃地质疑这种公司人员的渎职或专业疏忽以及处理数据的系统性问题是否是导致科技行业如此声名狼藉的原因。以谷歌为例,到目前为止,它已经被欧盟委员会罚款超过 80 亿美元(尽管这对他们的收入影响很小)。

亚马逊最畅销的产品之一是他们的新带摄像头的闹钟。然而,这可能会产生意想不到的不良后果。私人房东已经开始使用便宜的照相软件来追踪车牌。甚至一些人工智能和伦理的倡导者也将它称为“人工智能算法”,并将“它”与伦理行为结合起来。不同收入水平的公司以及个人都在应用这些技术,需要确定如何处理不同个人的数据以及何时越过这条线。

我们必须开始讨论人,而不是技术,尽管透明的算法是要争取的。Cassie Kozyrkov在谈到算法中的偏差时做出了明智的声明:

教科书反映了作者的偏见。像教科书一样,数据集也有作者。它们是根据人们的指示收集的。[……]偏见不是来自 AI 算法,而是来自人。

偏见 :对某人或某团体的倾向或偏见,尤指以被认为不公平的方式。

我这么说,并不是说我们可以责怪人们,而不是他们工作的公司。然而,对于与处理数据相关的实践,必须有专业的责任。在这方面,我们不能一直拿“算法”或“人工智能”当替罪羊。

联邦计算和学习

2019 年 5 月 9 日,谷歌关于 Tensorflow 的演示展示了联合计算和联合学习的概述。您可以在此处查看演示的视频版本,但是您也可以滚动查看此处展示的几张幻灯片:

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

所以总结起来联邦学习隐私技术的四个原则是:

  1. 设备上的数据集:保留原始数据,过期旧数据,静态过期。
  2. 联合聚合:合并来自多个设备的报告。
  3. 安全聚合:计算加密设备报告的(向量)和。一个具有安全保证的实用协议:通信效率和掉话容忍度。
  4. 联合模型平均:每个设备上的梯度下降的许多步骤。

联盟是一组计算或网络提供商,他们以集体的方式就操作标准达成一致。当描述两个不同的、形式上断开的、可能具有不同内部结构的电信网络的互操作时,可以使用该术语。该术语也可用于团体试图授权集体发展权以防止分裂的情况。在电信互连中,不同系统的内部操作方式与联盟的存在无关。****

在软件工程中 碎片化或 项目分叉 当开发人员从一个软件包中取出一份源代码并在其上开始独立开发时,就会出现这种情况,从而创建出一个独特而独立的软件。这个术语通常不仅仅意味着一个开发分支,还意味着开发人员社区的分裂,一种分裂的形式(人与人之间的分裂)。

A 作案手法 (通常简称为 M.O. )是某人的工作习惯,特别是在商业或刑事调查的背景下,但也更为普遍。这是一个拉丁短语,大约翻译为操作模式。

正如我之前在关于半监督机器学习(SSL) 的文章中提到的,我在那里听说过联合学习这个术语:“作为一名作家,我解释谷歌大脑成员的文章和谷歌人工智能的博客帖子,可能看起来像一个青少年在评论一个专业运动队。”

从这个意义上说,如果有什么不清楚的地方,我可能不清楚,如果你想解释或讨论,我总是很乐意这样做。

最后一点,我确实意识到这是谷歌的推销,不能全信。

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

这是第 500 天的第 44 天

什么是#500daysofAI?
我在挑战自己,用#500daysofAI 来写下并思考未来 500 天的人工智能话题。一起学习是最大的快乐,所以如果你觉得一篇文章引起了共鸣,请给我反馈。

Google 足球环境—使用 A3C 安装和培训 RL 代理

原文:https://towardsdatascience.com/google-football-environment-installation-and-training-rl-agent-using-a3c-d058a44f0fad?source=collection_archive---------13-----------------------

合著者: Ujwal Tewari

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

Frame from google football environment

几天前,谷歌大脑团队发布了一个开源足球环境,用于强化学习研究。他们提供了代码库(GitHub) 和他们的研究论文。

了解环境

让我们分解这个复杂的环境,了解它的状态空间表示,动作空间和成功的 RL 模型训练所需的其他配置-

状态空间

这个环境支持三种类型的状态表示。

  1. 像素:表示由一个 1280×720 的 RGB 图像组成,对应于渲染的屏幕。请注意,这包括记分牌和在画面底部中间部分的小地图(迷你地图),原则上,所有玩家的位置都可以从中推断出来。

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

4 frames of dimension 1280 x 720

2.超级迷你地图(SMM): SMM 基本上是一堆二进制矩阵,定义了呈现在屏幕中下方的迷你地图。SMM 表示由四个 96 × 72 矩阵组成,分别编码关于主队、客场队、球和现役球员的信息。编码是二进制的,表示在相应的坐标中是否有玩家、球或活动玩家。

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

Super Mini Map

3.floats:floats 表示提供了更紧凑的编码。它由一个 115 维的向量组成,概括了游戏的许多方面,如球员坐标、控球、方向、活跃球员或游戏模式。

注意-只有像素和 SMM 表示可以跨多个连续的时间步长进行堆叠(例如,确定球的方向)。

动作空间

gfootball 的动作空间非常有趣,并且与实际的足球比赛非常相关。该动作被给予当前活动的玩家**,即头上有蓝色条的玩家。该环境支持 20 种操作。**

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

他们已经为不活跃的球员实现了内置的基于规则的机器人,该机器人遵循与合理的足球动作和策略相对应的动作,例如当我们不控球时奔向球或者与我们活跃的球员一起向前移动。

场景

谷歌大脑团队提供了不同难度的不同场景。它的主要目标是允许研究人员快速开始新的研究想法,并对其进行迭代。代理最容易学习的场景是“空球门关闭”,其中只有一名球员站在球门前,没有守门员。

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

Empty goal close scenario

安装

让我们开始将这种凉爽的环境融入我们的系统。我们使用的系统有 ubuntu 18.04 操作系统和 python 3.6。安装游戏引擎和库的最好和最简单的方法是克隆 git 库。

注意—最好先创建一个 anaconda 环境或 python 虚拟环境,然后在该环境中安装依赖项。

- git clone https://github.com/google-research/football.git
- cd football
- pip3 install .[tf_cpu] --process-dependency-links
  Or for gpu version
- pip3 install .[tf_gpu] --process-dependency-links
- This command can run for a couple of minutes, as it compiles the C++ environment in the background.

安装后,您可以通过运行 GitHub 存储库中的文件 environment_test.py 来测试您的安装。

- git clone [https://github.com/Ujwal2910/Deep-RL-on-Gfootabll-Google-football-OpenAI-style-environment.git](https://github.com/Ujwal2910/Deep-RL-on-Gfootabll-Google-football-OpenAI-style-environment-.git)
- cd Deep-RL-on-Gfootabll-Google-football-OpenAI-style-environment/
- cd enviornment_render/
- python3 environment_test.py

它将连续渲染帧:

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

Output of running environment_test.py

如果您遇到 numpy 版本错误,根本原因可能是重叠的 numpy 版本。只需尝试卸载 numpy,然后再次尝试运行脚本。

要记住的事情

我们目前已经向 google football Github repository 报告了两个问题,他们已经承认了这个问题,并给出了一个临时的解决方案,直到他们修复这个问题。

  1. 在 115 维向量的浮点表示中,115 维仅针对 11v11 场景指定,对于所有其他场景,该数字会有所不同。所以你可以首先用 state.shape[0]检查,然后相应地构建你的模型。(链接到问题)
  2. 目前,他们的程序改变了运行代码的当前工作目录,因此在保存模型时使用绝对路径。(链接到问题)

培训 RL 代理

强化学习基本上分为基于值的函数和基于策略的函数上运行的算法。在这些算法中,演员-评论家算法是两者的结合,具有较小的方差和较高的收敛速度。

关于各种 RL 算法的更详细的数学解释,你可以参考这篇博文

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

Classification of reinforcement algorithms: Source

在这样的行动者-评论家算法中,有一种是异步优势行动者-评论家算法,或通常称为 A3C。

异步优势演员-评论家-

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

让我们分解这个复杂的算法,理解 A3C-的三个 A

异步-

A3C 具有多个工作人员的优势,每个工作人员分别在自己的环境中工作,并采取彼此完全独立的行动。以下步骤将以简单易懂的方式总结其工作原理,并展示其优于其他 RL 算法的优势-

  1. 每个工人在他们自己的环境中独立工作。
  2. 随着每个工作者在平行空间中运行,更多的探索发生了。
  3. 每个工人在每集结束时给出包含-[当前状态、下一个状态、采取的行动、获得的奖励、完成(布尔值,表明该集是否结束)]的信息元组。
  4. 来自每个工作者的这些元组在全局缓冲区中是成对的
  5. 然后全局代理在这个全局缓冲区上训练并保存其权重。
  6. 然后,工作者加载全局代理的保存的权重。
  7. 然后,工人根据全局代理的训练权重采取行动。
  8. 重复相同的步骤,直到全局代理收敛。
  9. 由于工人平行运行,训练速度更快。

优势功能-

q 值可以分为两部分-

  1. 状态值函数 V(s)
  2. 优势值 A(s,A)

优势函数可以如下导出

Q(s,a)= V(s)+ A(s,A)

A(s,a) =Q(s,a) -V(s)

A(s,a)= r+ γV(s_cap) -V(s)

优势函数实际上帮助我们更好地描述在给定状态下一个动作与其他动作相比如何,而价值函数则捕捉在这个状态下它有多好。

代码实现

对于 RL 算法的实现,我们使用了 ChainerRL 库,因为它包含 A3C 的优化版本。我们使用了一个名为 a3c.py 的文件,其中包含了培训代理的代码。

上面的代码片段只包含了算法的核心。你可以在这里查看整个文件。我们使用学院关闭目标场景进行训练,场景名称可在变量global _ environment _ name中定义,同样,其状态空间可在变量 state_space_size 中定义。

以下视频展示了培训结果

Training result on Empty Goal Close scenario

存储库链接

https://github . com/ujwal 2910/Deep-RL-on-Gfootabll-Google-football-open ai-style-environment

谷歌已经破解了“量子霸权”,还是他们已经破解了?

原文:https://towardsdatascience.com/google-has-cracked-quantum-supremacy-cd70c79a774b?source=collection_archive---------19-----------------------

数据科学

快速浏览一下谷歌最近在美国宇航局网站上泄露的关于量子计算的论文

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

Image — Google

问量子计算机和量子比特已经出现有一段时间了,关于它的应用有很多讨论和令人惊讶的关注。美国宇航局和谷歌一直在量子计算项目上合作,今年早些时候有迹象表明,谷歌即将破解量子霸权。几周前的 9 月,一篇谷歌泄露的论文被发布在美国宇航局的网站上,并立即被撤下。但互联网就是互联网,报纸的副本再次浮出水面,从那以后就有很多讨论在进行。

这篇论文的标题是使用可编程超导处理器的量子优势。根据谷歌的说法,一台 53 量子位的量子计算机首次利用量子特性在特定任务上超越了经典机器,从而实现了 量子优势。但是它还没有在任何科学杂志上发表,专家们还没有证实谷歌的说法,但是根据这篇论文的一段引文,它写道

据我们所知,这个实验标志着只能在量子处理器上进行的第一次计算

量子计算机正在与超级强大的经典计算机竞争,以模拟伪随机量子电路的输出,换句话说,就是一个数字发生器。

毫不奇怪,量子计算机轻而易举地赢得了比赛,但与竞争对手相比,它产生输出的速度可能有点令人震惊。在量子处理器上产生 100 万个随机数只需要 200 秒,而传统的超级计算机需要 10000 年。毕竟一万年后,我们中没有人会被留下来验证这些样本,这将需要数百万年的时间。

尽管所有这些说法都有待证实,但所有专家一致同意的事实是,量子计算机远未准备好用于商业用途。引用约翰·普雷斯基尔在 2011 年创造的“量子至上”一词

他们的机器以惊人的速度解决的问题是精心挑选的,只是为了展示量子计算机的优越性

但是,一台至少有 1500 个逻辑量子位的量子计算机可能能够解决比特币、密码术和加密等构成互联网上可信数字通信和账簿的数学问题。谷歌目前使用的量子计算机俗称 Sycamore 仅使用 53 个物理量子位,这是在 72 个物理量子位的计算机变得难以控制后开发的。扩展量子计算机绝非易事,你添加的量子位越多,系统就变得越不稳定。

至少现在,可以肯定的是,数据解密还需要很多年,因为它需要 1000 个量子位。所以,是的,你可以继续购买加密货币,并希望赚钱,只要谷歌在不久的将来不会出现奇迹并震惊我们。

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

Image- Unsplash

我们也不要破坏谷歌在这方面取得的成就。科学家们多年来一直致力于破解这一难题。值得注意的是,谷歌并不是唯一的玩家。像 IBM、英特尔、微软这样的公司已经为实现量子优势努力了很长时间。IBM 推出了一台 20 量子位的量子计算机,它是为商业用途设计的,但从未真正为它做好准备。因此,如果谷歌的工作得到证实,这将是这场争夺 霸权的激烈战斗中一个值得庆祝的里程碑。

同时,你可以在这里 阅读原泄露论文 的节选。

更新-谷歌今天(2019 年 10 月 23 日)发布了一个名为“展示量子优势”的官方视频。

Google Sheets 作为可靠数据源的终极指南

原文:https://towardsdatascience.com/google-sheet-data-warehouse-c22bb2cce4b0?source=collection_archive---------10-----------------------

保持冷静,使用大量的数据验证

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

我偶尔需要授予一位非技术同事在特定基础上向我们的数据仓库输入信息的能力。例如,我们在 Milk Bar 的客户服务团队在 Google Sheets 中维护了一个特殊的婚礼蛋糕订单列表,我们需要从中收集数据用于下游计算。

对于数据工程师来说,这是一个棘手的问题——我的同事不具备与我们的数据堆栈直接交互的技术技能,我也不想支持自己的 web 表单或类似的基础设施来收集这些信息。如果我们可以将他们的 Google Sheet 直接同步到我们的数据仓库中的一个表,会怎么样?

乍一看,这听起来是个糟糕的主意。向没有模式控制的数据仓库表中自由输入数据是数据工程师的噩梦。如何防止有人意外删除某列或输入错误类型的数据?我如何知道我的同事正在按照我的期望输入数据?我已经能感觉到你的心开始跳动,想着这种方法违反了多少最佳实践!

和我在一起。我在这里想让你相信,Google Sheets,加上适当的防护栏,对于分析团队之外的同事来说,是一种输入表格数据以供下游使用的极好方式,甚至在自动化转换中也是如此!

我们将探索如何建立一个受限的、经过数据验证的 Google 表单,并讨论如何将这些数据同步到您的数据仓库,对其进行测试,甚至将转换后的结果发送回表单供您的同事查看或分析。

保护您的谷歌表单

许可

我们将从您应该对 Google Sheet 数据源实施的最明显的保护开始:共享权限。简单明了地说,唯一允许编辑你的工作表的人应该是你信任的人,他们会适当地编辑你的工作表,并且受过这方面的培训。保持链接共享关闭,除非你需要它打开,在这种情况下,链接权限应该设置为可以查看

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

The Google Sheets Share menu. Don’t miss the Advanced button in the bottom right corner!

下一个重要的步骤经常被忽略,因为这个设置隐藏在谷歌共享菜单的高级部分。确保您限制编辑添加新人或更改访问权限。您希望确保您的同事不会无意中添加未经批准的编辑。

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

This menu is accessed by clicking Share in the top right corner, then clicking Advanced. Check the first box to make sure your share permissions don’t change without you realizing it.

受保护的工作表和区域

除了我们上面设置的工作簿级别的权限之外,我们还可以为单个工作表甚至特定的单元格区域设置权限。

要设置这些权限,导航到数据菜单并选择受保护的工作表和范围。您可以限制工作表和范围,使它们只能由某些人编辑,或者只允许人们在确认有关其操作后果的警告后编辑它们。

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

The warning message that Google displays if you try to edit a protected sheet or range with the “Show a warning when editing this range” option selected.

您可能有一些工作表包含公式或计算的必要信息,不需要任何用户进行编辑。如果是这种情况,请保护这些工作表,这样只有您可以修改它们。

数据有效性

彻底的数据验证使 Google Sheets 成为直接同步到数据仓库的可靠选择。有了数据验证,你可以在你的工作表中的期望范围上施加几乎任何你能想到的约束

你可以从谷歌工作表中的数据菜单进入数据验证。数据验证会要求您输入一个单元格区域、一个约束以及在不满足该约束时要采取的动作。

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

The data validation menu in Google Sheets.

我建议当输入无效数据时,你的表单应该采取“拒绝输入”的动作。谷歌的“显示警告”选项在有问题的单元格的右上角显示一个小小的橙色三角形,用户很容易忽略。拒绝所有未经验证的内容,可以确保您只将干净的数据传递给依赖于一致模式的任何自动化流程。

我将浏览 Google 提供的每个约束选项,并讨论我们如何使用每个选项来限定干净的数据并拒绝杂乱的数据。

  • ***列出一个范围。***我们经常使用它来迫使用户从预定义的值或类别列表中进行选择。一个便利的好处是,您可以在范围内的每个单元格中添加一个下拉列表,这样您的用户就可以直接选择一个有效值。我喜欢为我的验证范围保留一个单独的、完全受保护的表(只有我可以编辑它)。
  • 物品清单。 类似于来自一个范围的列表,除了你以逗号分隔列表的形式直接提供有效值。这对于根据静态值的简短列表来验证条目非常有用。
  • 号。 该标准用于检查条目是否在数值范围内。我们可以防止负数或强制输入小于已知的最大值。
  • 文字。 我们可以测试条目,看看它们是否包含某些子字符串。也许您想确保您的用户在复制发票号码时输入了正确的前缀。在下拉列表的底部还有几个有用的选项:是有效的电子邮件还是有效的网址。这些都是常见的验证需求,需要正则表达式或类似复杂的东西来确认。
  • 日期。 我们可以验证条目是否为有效日期,是否在要求的范围内。由于日期格式的多样性,日期是出了名的混乱。如果用户要在工作表中的任何地方输入日期,这个验证标准是至关重要的。
  • 自定义公式是。 这是数据验证的真正改变者。您可以编写任何返回 True 或 False 值的自定义公式,Google 将根据它来验证条目。你可以用这种方式实现一些非常复杂的验证逻辑。例如,使用REGEXPMATCH公式来确认条目匹配一组更复杂的字符串逻辑。Google Sheets 也不允许对同一个单元格应用多个验证标准,所以这个选项允许我们将标准合并到一个公式中。
  • 复选框。 您可以用复选框替换您单元格区域中的单元格,当被选中和取消选中时,它将返回一个自定义值。这里 99%的用例可能都是对与错,但是如果你愿意的话,也可以灵活地表示其他东西。

如果这还不足以让您进行测试,您可以使用 DataValidationBuilder 类编写一个定制的 Google Apps 脚本来实现您自己的规则。

修改已经设置好的数据验证有点烦人。在一个工作表中应用的所有有效性规则没有一个统一的列表。相反,您必须选择感兴趣的单元格或区域,并返回到数据有效性菜单来删除或修改条件。

一旦您彻底验证了 Google 表单中的数据,您的表单将和定制的 web 表单一样好,甚至更好。您可以对数据的质量充满信心。

用条件格式向用户发出信号

有时用数据验证拒绝用户的输入过于严格,会导致糟糕的用户体验。你可以使用谷歌的“显示警告”选项,但是添加的橙色警告三角形很容易被用户忽略。我更喜欢使用条件格式将整个单元格变成令人担忧的红色或令人满意的绿色。

假设您希望在用户输入的值比平均值大或小两个标准差以上时向用户发出警告。您可以设置带有条件格式的公式,将单元格变为黄色,以警告用户该值是异常值,可能输入不正确。

当然,您可以使用自定义的数据验证公式来拒绝该值,但是条件格式会给您带来灰色阴影(真的!)向您的用户发出除了接受或拒绝之外的信号。有时候,拥有这种灵活性是件好事。我不打算深入设置条件格式的细节,但是如果你不熟悉这个概念,谷歌关于这个特性的文档在这里是。

可选:使用单独的导入范围表进行转换

我喜欢设置一个只有我可以编辑的中间导入表,而不是直接从用户访问的表同步到数据仓库。这个中间表给我提供了更多的控制。我使用IMPORTRANGE 公式配置这个表来复制用户访问的表中的所有数据。在将它传递到我的数据仓库之前,我可以在这个表中进行任何必要的调整。

  • 例如,我可能只导入用户访问的工作表的特定范围,因此该范围之外的错误数据不会破坏下游的任何东西。
  • 我还可以将两个用户访问的表(可能有多个表,一年一个)合并成一个带有垂直数组的表。
  • 我甚至可以使用QUERY 公式来过滤用户访问的工作表中的行,以删除空白。

替代方案:用谷歌表单完全控制数据输入

如果用户在输入数据后不需要编辑数据,您可以使用 Google 表单设置一个仅附加系统。Google Forms 与 Google Sheets 进行了本机集成,这使得这种设置对于仅附加的需求来说非常简单。Google Forms 将在带有时间戳的 Google 表单中为您的表单的每个回复添加一行。如果您添加问题,工作表将扩展以匹配您的表单。

通过为您的表单选择适当的问题类型来确保数据整洁。要配置 Google Sheets 集成,您需要在 responses 选项卡中单击 Google Sheets 徽标,这将生成表单。

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

This Google Sheets logo in the Responses tab of a Google Form will create an auto-populating Google Sheet with the form’s responses.

因为您不能拒绝表单自身验证之外的数据,所以我建议您设置一个如上所述的中间导入表。在那里执行任何所需的过滤,以使您的数据在干净的状态下进行加载。

将您的 Google Sheet 同步到您的数据仓库

将 Google 表单加载到数据仓库是一个常见的问题,因此有很多潜在的解决方案。

如果你是 Google BigQuery 用户,最简单的方法是将 Google Sheet 设置为一个外部表。BigQuery 的文档更详细地描述了如何做到这一点,但是您需要做的只是为表定义一个模式,并且您可以直接从 BigQuery 查询您的表的第一个选项卡。

如果您正在使用雪花、红移或其他数据仓库,您可以从这些选项中进行选择。

  • 大多数 数据加载服务 都集成了处理加载谷歌表单的功能。参见 Fivetran 的文档Alooma 的
  • Stitch 的 Google Sheets 集成。 数据加载服务 Stitch 有一个关于如何在 Google Sheets 中设置一些将数据发送到 Stitch 的导入 API 的应用程序脚本代码的指南。然后,Stitch 会将数据加载到您选择的数据仓库中。使用这种方法,您必须通过单击“同步到缝合”来手动同步数据,这可能是一种祝福,也可能是一种诅咒,取决于您的需求。请注意,如果你还不是 Stitch 的客户,你必须注册,但同步几张表不太可能超过他们每月 500 万行的免费级别。
  • 单张纸。 这是一个由 GitLab 的数据团队创建的 Python 工具,用于将本地 CSV 和 Google Sheets 加载到数据仓库中。在编写时,该工具支持 Postgres 和雪花。
  • Ro 的 Google Sheet 集成。Ro的数据团队开源了他们将 Google Sheets 数据加载到雪花中的定制方法。请注意,他们的方法在每次加载时都会截断并替换数据表,因此不会保留删除或修改的行。
  • 你也可以考虑用 Zapier、webhooks 和像 AWS Lambda 这样的无服务器功能推出自己的模块化方法。您可以在工作表中创建行时触发 Zap,它会通过 webhook 将数据发送到一个无服务器函数,该函数设置为接收有效负载作为端点。如果您需要捕获更新和删除,这种方法会变得更有挑战性。

测试您仓库中的数据

一旦数据同步到您的仓库,您就差不多完成了!如果您仍然担心数据质量,或者对设置的数据验证不完全满意,可以将同步的数据仓库表作为临时表进行测试。一旦您的数据通过了 SQL 测试,就将其复制到生产环境中。

在数据仓库中测试数据是一个更大的主题,(这个主题我已经在这里广泛地写过了),但是我们在 Milk Bar 使用数据构建工具(dbt) 来实现这一点。dbt 管理我们的数据仓库,并在 CI 管道中运行我们的 SQL 测试,以检查任何逃过验证的数据问题。

BigQuery 的加分:将数据发送回 Google Sheets

如果您是 BigQuery 用户,并且您的公司使用 GSuite,那么还有一个我不得不提到的功能。您可以在 Google Sheets 中查询 BigQuery 数据。

在谷歌工作表的数据菜单中,有一个数据连接器的选项。在这里,您可以连接到 BigQuery 数据仓库,用 SQL 查询表,将实时数据返回到 Google Sheet 中。在您的数据仓库中执行任何必要的下游计算或转换,然后以适合您的数据堆栈的节奏将有价值的信息返回给您的用户。

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

这种方法最多只支持 10,000 行,但 Google 正在测试这一功能的扩展,称为 Connected Sheets,它将允许您将整个表返回到 Google Sheets,无论它有多大。这项功能目前处于测试阶段,你可以在这里申请

我希望这篇指南已经让你能够自信而正确地建立自己的 Google Sheet 数据源。如果你对使用 Google Sheets 作为数据源有所顾虑或有创意,请在评论中告诉我。

进一步阅读

  1. Matthew Lincoln 的杰出文章,在你的数据项目中使用 Google Sheets 的最佳实践

使用 python 进行图像分析的 Google vision API

原文:https://towardsdatascience.com/google-vision-api-for-image-analysis-with-python-d3a2e45913d4?source=collection_archive---------19-----------------------

谷歌视觉 API 使用预先训练的机器学习模型从图像中检测物体、人脸、印刷和手写文本。您可以将每个图像上传到该工具并获取其内容。但是,如果您的本地桌面上有大量图像,那么使用 python 向 API 发送请求是非常可行的。

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

这篇文章讲述了如何使用 python 和 google cloud sdk 创建图像,将图像上传到 google bucket,对大型图像数据集执行标签检测。“gsutil”用于快速上传图片,并在 google bucket 上设置生命周期。所有图像都用批处理进行分析。

第一步:创建一个项目

按照下面链接中的步骤创建一个新项目,并启用 google vision AI。将密钥存储在 JSON 文件中。

[## 开始之前|云视觉 API 文档|谷歌云

在您可以使用 Cloud Vision API 之前,您必须为您的项目启用它:登录您的 Google 帐户。如果你…

cloud.google.com](https://cloud.google.com/vision/docs/before-you-begin)

第二步:下载 google cloud sdk 和 gsutil

Gsutil 工具有助于将大型图像数据集轻松上传到 google bucket。在命令提示符或终端中运行以下代码

【https://sdk.cloud.google.com】|迎头痛击

另外,您也可以从以下链接下载 sdk

MAC OS:https://cloud.google.com/sdk/docs/quickstart-macos(将文件夹存放在主目录中)

windowshttps://cloud.google.com/sdk/docs/quickstart-windows

第三步:设置配置:

需要以下命令来连接到您在步骤 1 中创建的 google cloud 项目。在终端中键入以下内容

gcloud init

选择要使用的配置:选择“创建新配置”

选择一个帐户来执行操作:如果您没有看到您的 gmail 帐户,请选择“使用新帐户登录”并登录该帐户。

选择要使用的云项目:您应该看到您在步骤 1 中创建的项目并选择它

第四步:上传图片到谷歌云存储

创建存储桶:gsutil MB ’ GS://bucket name '(存储桶名称应该是唯一的)

将图像文件夹从本地桌面上传到 google bucket:

gsutil-m CP-R ’ path/to/image folder ’ ’ GS://bucket name ’

第五步:在 google bucket 中获取图片标签

现在你已经有了桶中的所有图像,使用’ ImageAnnotatorClient '获取标签。如果你有很多图像,那么遍历桶中的每一个图像将会非常耗时。批处理可以加快这一过程,每批最多可处理 16 幅图像(https://cloud.google.com/vision/quotas)。

*#install google cloud vision
pip install google-cloud-vision#import dependencies
from google.cloud import vision
from google.cloud import storage
from google.cloud.vision_v1 import enums
from google.cloud.vision_v1 import ImageAnnotatorClient
from google.cloud.vision_v1 import types
import os
import jsonos.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project_key.json' 
#(created in step 1)# Get GCS bucket
storage_client = storage.Client()
bucket = storage_client.bucket('bucket_name’)
image_paths = []
for blob in list(bucket.list_blobs()):
    image_paths.append("gs:// bucket_name/"+blob.name)# We can send a maximum of 16 images per request.
start = 0
end = 16
label_output = []for i in range(int(np.floor(len(image_paths)/16))+1):
    requests = []
    client = vision.ImageAnnotatorClient()
    for image_path in image_paths[start:end]:
        image = types.Image()
        image.source.image_uri = image_path
        requests.append({'image': image,'features': [{'type': vision_v1.Feature.Type.LABEL_DETECTION}]})
        response = client.batch_annotate_images(requests)
    for image_path, i in zip(image_paths[start:end], response.responses):
        labels = [{label.description: label.score} for label in i.label_annotations]
        labels = {k: v for d in labels for k, v in d.items()}
        filename = os.path.basename(image_path)
        l = {'filename': filename, 'labels': labels}
        label_output.append(l)
    start = start+16
    end = end+16#export results to JSON file
with open('image_results.json', 'w') as outputjson:
json.dump(label_output, outputjson, ensure_ascii=False)*

标签检测的结果可以存储在 JSON 文件中。

***第六步:从 google bucket 中删除图片:*你可能想在完成分析后删除图片,因为会有存储成本。删除循环中的每个图像需要时间。相反,为存储桶设置一个生命周期,这样您就可以一次删除整个存储桶。将以下代码粘贴到一个 JSON 文件中,并将其保存为 lifecycle.json,然后执行 gsutil 代码

*#Age tells about how many days after bucket creation you want to delete it.{
 "rule":
 [
  {
   "action": {"type": "Delete"},
   "condition": {"age": 2}
  }
 ]
}#This codes sets lifecycle for the bucket
gsutil lifecycle set 'lifecycle.json' 'gs://bucket_name'*

如果你还有一些问题或者想做文本/人脸检测,请查看https://code labs . developers . Google . com/code labs/cloud-vision-API-python/index . html?index=#0

希望这篇文章有所帮助。快乐阅读!

谷歌的 AutoML 与手工制作的模型在识别肺炎方面的比较

原文:https://towardsdatascience.com/googles-automl-vs-a-hand-made-model-in-identifying-pneumonia-f818902d24fc?source=collection_archive---------21-----------------------

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

最近有很多关于 AutoML 或“无人驾驶 ML”改变机器学习方式的潜力的谈论,并将该技术放在非编码人员的手中。谷歌是推动其“云自动”套件的公司之一,该套件包括计算机视觉、表格数据和自然语言处理的应用程序。他们的工具声称易于使用,并通过使用神经架构搜索来找到性能最佳的模型架构,比手工制作的机器学习模型具有更高的准确性。但它真的兑现了宣传吗?我们在 Pytorch 中将 Google AutoML 计算机视觉与我们自己的从头开始模型进行了对比测试。

试题——从 x 光片中识别肺炎

为了比较这两种方法,我们使用了一个代表计算机视觉真实世界用例的测试问题:我们使用 5200 张胸部 x 光图像的数据集来预测患者是否没有肺炎、细菌性肺炎或病毒性肺炎。精确模型的好处是显而易见的,可以帮助医生快速识别患者的肺炎病例。

试用谷歌汽车

我们从谷歌的 AutoML 开始,使用他们的计算机视觉模块来自动构建模型。导入数据和设置作业非常简单,尽管该工具在如何构造和标注要导入的数据方面提供了有限的灵活性。下面是结果页面的截图,显示了< 15 minutes of training. AutoML yielded an impressive 81.3% precision and 78.9% recall on this task, without requiring a single line of code! It also provides an API to access the model we created for use in generating predictions.

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

使用 PyTorch 和 FastAI 手工制作的模型后的结果

然后,我们使用 PyTorch 和库 FastAI 从头开始构建我们自己的模型,这使得在 PyTorch 中构建和训练模型更快。我们通过使用视觉变换在我们的训练数据集上使用数据增强来建立更鲁棒的模型,并在训练迭代中调整超参数以及缩小然后放大图像。通过几个小时的工作和大约 15 分钟的训练时间,我们实现了 82.7%的准确率和 81.0%的召回率,比 Google AutoML 的结果高出 1-2 个百分点。

我们的结论

虽然我们使用手工制作的神经网络在这个测试问题上取得了优于谷歌 AutoML 的结果,但它也明显更加耗时和复杂。即使有 FastAI 的库和 PyTorch 的帮助,我们自己也花了~ 2 个小时来建立和训练一个模型。一旦我们在 AutoML 上设置好了,不超过 30 分钟就可以导入我们的数据并训练一个模型,而无需编写一行代码。就简单性和易用性而言,AutoML 轻而易举地胜出。

然而,当数据集没有被整齐地组织到带标签的文件夹中或者您想要使用自定义验证集时,事情就变得复杂了。今天的 AutoML 在界面上相当死板,极大地限制了灵活性和可定制性。它非常适合“教科书”问题,但是对于许多在输入、标记或验证技术方面增加了复杂性现实世界的问题,它现在还不能处理它。

虽然我们手动实现了更好的精度建模,但我们获得的 1–2%精度增益的值实际上取决于所解决的具体问题。在某些情况下,这可能不是一个显著的差异,而在其他情况下,它可能会创造或破坏模型的价值。

总的来说,AutoML 是一个很好的简单工具,可以用来为标准分类任务快速构建“足够好”的模型,而不需要编码。然而,在其当前形式下,它在现实世界机器学习问题的适用性方面很快就崩溃了,这些问题涉及实践中经常使用的混乱的数据组织、定制标记方法或定制验证技术。它还充当了一个黑盒模型,不暴露任何内部细节来进行检查,也不需要在以后进行额外的培训或改进时进行调整。根据我们的经验,在现实世界中部署预测时,黑盒模型几乎总是一个坏主意。

谷歌的巴赫人工智能:一位拥有音乐理论博士学位的机器学习科学家做出了反应

原文:https://towardsdatascience.com/googles-bach-ai-a-machine-learning-scientist-with-a-phd-in-music-theory-reacts-68d055f2461d?source=collection_archive---------4-----------------------

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

Bach’s signature: B(B-flat), A, C, H (B-natural)

迟到的生日快乐,J·S·巴赫。为了庆祝,谷歌发布了一个“涂鸦”,如果你首先提供旋律,它会使用人工智能(AI)来调和巴赫的合唱曲。虽然我很想对谷歌的 Bach AI 进行深入研究,但这需要时间。巴赫的生日是昨天,我不想在派对上迟到了。

由于我拥有音乐理论博士学位,目前是机器学习和人工智能领域的应用科学家,所以有几个人问我的想法,所以他们在这里。

巴赫合唱团在音乐理论中有着特殊的地位。他们经常被认为是优秀的、遵守规则的、西方的、古典的(意思是普通的调性)音乐和声应该是什么样子。事实上,以巴赫合唱风格调和旋律和低音线是我音乐理论教学的一部分,从大学一年级的测验到写论文前必须通过的博士诊断考试。我的理论学生也体验到了巴赫合唱和声对橡皮寿命的不友好。

由于这些原因,当我们(理论家)看到一个“坏的”协调时,我们就知道它。平行第五?巴赫杀死了一只小猫(这是大约 2007 年早期脸书一个流行乐队的名字)。增强秒?你怎么敢。语音穿越?不可唱。这样的例子不胜枚举。

我的音乐理论社交媒体 bubble 很快指出了人工智能生成的合唱中的许多(许多许多许多)部分写作和声错误。乍看之下,我无法忽略这些错误——甚至那些只有基本理论知识的人也能轻易避免的错误。也许我有点嫉妒机器学习和音乐受到如此多的关注,当然我可以做得更好。但是我正在努力让第一物种的对位人工智能工作…

当我想到自己用人工智能创作更简单的音乐时,我意识到谷歌的“涂鸦”非常好。当然,如果是一个大二的学生,他们可能会失败,但是我们在谈论一台电脑。

我有写的代码创造了第一种对位。该代码基本上是一长串的规则和启发,将保证两个声音的和谐,不违反任何规则。这种方法不太符合音乐,尽管它是将音乐规则应用于代码的一个很好的练习。

没有对自我、风格、美等的真实表达。仅仅遵循一套规则。希望即使是我们理论家也不认为规则是最重要的。我怀疑有哪个作曲家只是为了避免不可提及的东西(平行五度音等等)。)就完事了。这并不是说规则不重要,但一个普通调性的作曲家应该对这种风格有足够好的把握,规则是本能地遵循的,重点是表达一种音乐思想(恰好遵循规则)。

谷歌的巴赫人工智能“涂鸦”试图与基于规则的系统相反。人工智能背后的“大脑”是一个人工深度神经网络。我不会进入细节(再说一次,我已经迟到了),但你可以在他们的 Magenta 项目中了解谷歌在人工智能和音乐方面的工作。

深度学习的基础是这样的:将数据输入到神经网络中(比如旋律的一个度量);数据通过“神经元”,神经元随机地给数据中的各种参数分配权重;网络随机猜测一个标签(比如输入旋律应该赋予什么和声音符)。

关键在于:基于网络的猜测是正确还是不正确(以及正确的程度),随机权重被调整。这些调整——称为反向传播——在大量不同的数据上发生数千次甚至数百万次(例如所有巴赫合唱曲,这实际上是一个非常小的深度学习数据集)。

反向传播是机器学习的“学习”部分。在我们上面描述的假设网络中,如果你用一首原创的旋律进行测试,你会得到一个随机的音符和休止符的集合。所谓随机,我指的是 128 面骰子滚动,128 个 midi 音符中的每一个都有一面。随着网络的训练(看到更多的数据,经历更多的反向传播),产生的谐波开始进入正常的键盘范围。再往后,由此产生的和声可能会开始产生某种音乐感。

把人工智能想象成一个学生。你只是让它“听”巴赫的合唱曲数千次并模仿它,而不是教它规则。从很多方面来说,这是一种音乐教学法。学生艾正在通过接触有关和声的文献来学习*。*

我们象牙塔中的理论家和谷歌“嘟嘟”之间的区别是,我们有更大的大脑,也许更重要的是,我们已经听了很多年的调性音乐。我不确定如果没有一个有用的规则列表,我们中有多少人会在听合唱时避免所有的和声错误。

作为一名研究人员,我个人最感兴趣的是为什么人工智能会做出这样的决定。通过大量的工作,我们可以深入到神经网络的各个层次来观察决策过程,并将它们与我们的进行比较。当我们了解机器如何作曲时,我们可以了解更多关于我们自己的思想,也许可以找到思考音乐决策的新方法。

在他的书《仙境:游戏如何创造了现代世界》中,史蒂文·约翰逊提供了“自我演奏”的音乐机器和一些塑造了我们周围世界的最卓越的技术发明之间令人信服的联系。也许音乐人工智能将帮助我们发明新的技术里程碑。

所以让小“嘟嘟”继续训练吧。我敢肯定,这只是刚刚开始学习。

P.S .谷歌向数千人介绍了巴赫合唱曲,甚至让他们尝试作曲。别把他们都吓跑了。

谷歌新的“可解释人工智能”(xAI)服务

原文:https://towardsdatascience.com/googles-new-explainable-ai-xai-service-83a7bc823773?source=collection_archive---------6-----------------------

谷歌已经开始为“可解释的人工智能”或 XAI 提供一项新服务,这是一种时髦的叫法。目前提供的工具并不多,但是目标是正确的。

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

人工智能有一个可解释的问题

人工智能将改变全球生产力、工作模式和生活方式,并创造巨大的财富。

研究公司 Gartner 预计,到 2022 年 ,全球人工智能经济将从去年的约 1.2 万亿美元增长到约【3.9 万亿美元,而麦肯锡认为,到 2030 年 全球经济活动将达到约【13 万亿美元】。

人工智能技术,特别是DeepLearning(DL)模型正在一个又一个应用领域以令人瞠目结舌的性能彻底改变商业和技术世界——图像分类、对象检测、对象跟踪、姿势识别、视频分析、合成图片生成——仅举几例。

它们被用于医疗保健、信息技术服务、金融、制造、自动驾驶、视频游戏、科学发现,甚至刑事司法系统。

然而,它们一点也不像经典的盈利算法/技术。DL 模型使用数百万个参数,并创建极其复杂和高度非线性的图像或数据集的内部表示。

因此,他们通常被称为完美的暗箱 ML 技术。在我们用大数据集训练它们之后,我们可以从它们那里获得高度准确的预测,但我们几乎没有希望理解模型用来将特定图像归类的数据的内部特征和表示 。

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

Source: CMU ML blog

谷歌已经启动了一项新的服务来解决这个问题

毫无疑问,正如商业分析师和经济学家所预测的那样,谷歌(或其母公司 Alphabet)在巨大的人工智能经济的适当发展中有很大的利害关系(见上一节)。

早在 2017 年,谷歌就将其官方战略政策设定为“人工智能优先”。

因此,它可能感到了压力,要成为行业的火炬手,通过提供可解释的人工智能服务,让人工智能不那么神秘,更容易为普通用户所接受。

什么是可解释的人工智能?

这个概念,顾名思义,很简单。你希望你的模型不仅能给出预测,还能给出一些解释,关于为什么预测会变成那样**。**

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

但是为什么需要它呢?

这篇文章涵盖了一些要点。人工智能系统提供可解释性的主要原因是—

  • 提高人类可读性
  • 确定机器所做决策的合理性
  • 帮助决定责任,责任导致良好的决策
  • 避免歧视
  • 减少社会偏见

围绕它仍有许多争论,但一个共识正在形成,即后预测论证不是一个正确的方法。可解释性目标应该在核心设计阶段构建到 AI 模型/系统中,应该是系统不可分割的一部分,而不是附件。

已经提出了一些流行的方法。

  • 更好地理解数据 —直观形象地展示区别特征
  • 更好地理解模型 —可视化神经网络层的激活。
  • 更好地了解用户心理和行为 —在统计学习的同时将行为模型整合到系统中,并在此过程中生成/整合适当的数据/解释

甚至 DARPA 已经开始了整个项目来为未来人工智能/人工智能驱动的防御系统构建和设计这些 XAI 原理和算法。

在核心设计阶段,可解释性目标应该被构建到人工智能模型/系统中

请阅读这篇文章,以获得对这一概念的全面讨论。

** [## AI 应该自我解释吗?或者我们应该设计可解释的人工智能,这样它就不必

在本文中,我将介绍:

towardsdatascience.com](/should-ai-explain-itself-or-should-we-design-explainable-ai-so-that-it-doesnt-have-to-90e75bb6089e)

谷歌云希望在 xAI 领域领先

谷歌在吸引人工智能和人工智能人才方面处于领先地位,它是当前世界信息化经济中无可争议的巨头。然而,与亚马逊和微软相比,它的云服务远远排在第三位。

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

Source: Top cloud providers 2019

然而,正如本文所指出的,尽管传统的基础设施即服务之战已经在很大程度上决定了,但人工智能和 ML 等新技术已经为玩家开辟了新的主题、策略和尝试方法的领域。

基于这些想法,在本周伦敦的一次活动中,谷歌的云计算部门推出了一个新设施,希望它能给自己带来相对于微软和亚马逊的优势。

著名人工智能研究员 Andrew Moore 教授在伦敦介绍并解释了这项服务。

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

Prof. Andrew Moore in London for Google Cloud explainable AI service launch, source

从他们的官方博客

“可解释的人工智能是一套工具和框架,可以帮助你开发可解释和包容的机器学习模型,并自信地部署它们。通过它,您可以了解 AutoML 表和 AI 平台中的特征属性,并使用假设分析工具直观地研究模型行为。”

最初—适度的目标

最初,目标和范围相当有限。该服务将提供关于人脸和物体检测模型的性能和潜在缺点的信息。

然而,随着时间的推移,GCP 希望提供更广泛的见解和可视化,以帮助使其人工智能系统的内部工作不那么神秘,更值得每个人信任。

人工智能和人工智能等新技术为云服务玩家打开了一个领域,让他们尝试新的主题、策略和方法。

摩尔教授坦率地承认,在可解释性问题上,人工智能系统甚至让谷歌最优秀的头脑也感到为难。

"让我们在谷歌疯狂的一件事是,我们经常建立非常准确的机器学习模型,但我们必须理解他们为什么要做他们正在做的事情。在许多大型系统中,我们为我们的智能手机或我们的搜索排名系统或问答系统构建的,我们在内部努力了解正在发生的事情。

谷歌希望给用户一个更好的解释,方法之一是通过所谓的型号卡

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

Google model card for face detection, Source: ZDNet article

谷歌曾经提供了一个场景分析工具。他们鼓励用户将新的可解释工具与这个场景分析框架结合起来。

“你可以将人工智能解释与我们的假设工具结合起来,以全面了解你的模型的行为,”谷歌云战略总监特雷西·弗雷说。

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

Google AI’s What-If tool

而且,目前它是一个免费的附加软件。可解释的人工智能工具免费提供给 AutoML 表或人工智能平台的用户。

欲了解更多细节和历史观点,请考虑阅读这篇精彩的白皮书

总的来说,这听起来是一个好的开始。虽然,并不是每个人,甚至是谷歌内部的人,都对 xAI 的整个想法充满热情。

偏见和审计?

有人说偏见是一个更大的问题

过去,谷歌研究总监彼得·诺维格曾说过可解释的人工智能,

“你可以问一个人,但是,你知道,认知心理学家发现,当你问一个人时,你并没有真正了解决策过程。他们先做决定,然后你问,然后他们给出一个解释,而这个解释可能不是真实的。”

所以,从本质上说,我们的决策过程受到心理学的限制,对机器来说也是如此。我们真的需要为机器智能改变这些机制吗?如果得出的答案和见解不为用户所接受怎么办?

相反,他认为在机器的决策过程中,应该给予跟踪和识别偏见和公平更多的思考和重视。

要做到这一点,模型的内部工作不一定是最好的观察点。人们可以观察系统随时间做出的所有输出决策,并识别隐藏偏差机制的特定模式。

对于未来的人工智能系统来说,偏见和公平应该比单纯的解释更重要吗?

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

如果你申请贷款并被拒绝,一个可解释的人工智能服务可能会吐出这样一句话——“你的贷款申请被拒绝是因为缺乏足够的收入证明”。然而,任何建立了 ML 模型的人都知道,该过程不是一维的,产生这种决策的数学模型的具体结构和权重(通常作为一个整体)取决于收集的数据集,在涉及收入和经济流动性的问题时,这些数据集可能对社会中的某些人有偏见。

因此,这场辩论将围绕这样一个相对重要的问题展开:仅仅拥有一个显示出基本的、淡化了的解释的系统,以及建立一个更少偏见、更高程度公平的系统。

外部自动审计?

为了让人工智能系统更容易解释(或者至少更负责任),一些人提出了自动化、可扩展的外部审计系统来管理来自黑盒人工智能平台的决策。艾伦人工智能研究所的柳文欢·埃齐奥尼在这里提出了这样一种方法

[## 高风险的人工智能决策需要被自动审计

今天的人工智能系统在贷款、医疗诊断、假释等方面做出重大决策。它们也是不透明的…

www.wired.com](https://www.wired.com/story/ai-needs-to-be-audited/)

如果你有任何问题或想法要分享,请联系作者tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库中的代码、思想和机器学习和数据科学方面的资源。如果你像我一样,对人工智能/机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我在 Twitter 上关注我

[## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…

通过写作使数据科学/ML 概念易于理解:https://medium.com/@tirthajyoti 开源和有趣…

www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/?source=post_page-----c02c141c5756----------------------)**

谷歌的夜莺计划和紧急医疗数据

原文:https://towardsdatascience.com/googles-project-nightingale-and-emergent-medical-data-7382b15f051f?source=collection_archive---------43-----------------------

其他人的健康数据对你有什么影响

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

Photo by Marcelo Leal on Unsplash

你知道手机应用收集位置、通话记录、社交媒体帖子等等。这些数据收集机器在收集相关信息以识别选择性广告的客户方面不断改进。虽然我们所处的这种反乌托邦式的定向广告前景令人恐惧,但这仅仅是商业化潜力或个人数据歧视的冰山一角。数据在我们的数字经济中有着巨大的价值,没有任何数据比患者病历的价值更高。广告商可以利用这些数据来推销昂贵的药品,并针对一个人的医疗状况定制行为广告。保险公司也可以收集这些医疗数据来计算患者的保费。

健康数据影响着我们生活和身份的方方面面。诊断可能使我们改变生活方式或接受终生治疗。对于那些不想公布潜在健康状况的人来说,仍然可以使用我们的数字指纹来观察由于健康原因而导致的生活方式的改变。此外,一些行为可能预示着未诊断的医疗状况。梅森将这些从数字足迹中推断出的医疗状况描述为紧急医疗数据。在今年 6 月发表的一篇文章中,脸书的研究人员表明,来自社交媒体帖子的信息可能与潜在的医疗状况相关联。该研究包括 999 名患者的病历和脸书状态。该研究表明,仅基于脸书的帖子,在诊断糖尿病患者和精神健康状况方面是有效的。

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

Photo by Joshua Hoehne on Unsplash

脸书邮报是一个面向外部的媒体,旨在向更广泛的社区表达情感。搜索结果对用户来说更加“私密”,因此许多人会搜索他们永远不会公开发布的信息。这种对搜索引擎的信任使得控制搜索引擎的公司特别擅长收集潜在的健康数据,因为患者可能会通过在诊断后收集更多信息来开始他们的健康之旅。最大的搜索引擎谷歌最近被曝与美国最大的非营利医疗系统阿森松岛进行了秘密谈判。这项名为“南丁格尔计划”的交易让谷歌获得了 5000 万份患者病历。谷歌健康记录数据库的规模和来自“私人”搜索结果的扩展信息赋予谷歌前所未有的能力,来识别反映所有用户中疾病的存在或早期发作的单词、短语和其他变量。

南丁格尔项目为谷歌创建了一个黄金标准健康数据库,以发现新的健康标志,并将它们应用于广泛的公司平台,以推断用户的医疗状况。谷歌最有可能将这个黄金标准数据集导出到母公司 Alphabet 的其他分支机构。例如,谷歌和 Nest 正在努力为一种智能家居健康算法申请专利,该算法能够从居住者的行为中推断他们是否患有阿尔茨海默氏症或物质使用障碍。这些新的健康标志将作为商业秘密受到保护,不向公众公开,可能会花费数百万的医疗费用和无数的生命。

谷歌在健康领域的野心越来越大,最近收购 Fitbit 就是明证。2700 万 FitBit 用户为谷歌扩展到可穿戴健康技术时正在建立的消费者健康监控帝国提供了一个新的角度。

谷歌并不是唯一一个雄心勃勃收集消费者健康数据的公司。Apple Health 和 Apple Watch 可穿戴设备可供苹果开发的时机已经成熟。微软和亚马逊紧随其后,这些科技公司提供医疗保险等产品,并利用从购物习惯和智能扬声器收集的数据来预测用户的健康信息。

并非所有数据都是平等的。患者的医疗记录很有价值,因为它们可以用作训练算法的黄金标准,以搜索另一个用户未公开或未诊断的医疗状况。科技公司开始使用这些信息来为行为广告或药物分析用户。我的一个朋友多年来一直在与潜在的疾病作斗争,并向我分享了他对他最喜欢的流媒体平台上不断出现的药品广告的烦恼。他的潜在状况的细节是如何被转移到针对他的健康的广告商那里的,这令人担忧。我们会成为未确诊疾病的行为广告的目标吗?这些技术公司有义务向用户报告推断的情况吗?随着我们越来越多的个人数据被用于盈利,监管机构和个人应该要求提供这些信息。

来源:

https://slate . com/technology/2019/11/Google-ascension-project-nightingale-emergent-medical-data . html

【https://journals.plos.org/plosone/article? id = 10.1371/journal . pone . 0215476

https://blog . petrieflom . law . Harvard . edu/2017/10/11/emergent-medical-data/

被幻觉欺骗的 GoogleVision?

原文:https://towardsdatascience.com/googlevision-tricked-by-illusions-e698d98cc3cf?source=collection_archive---------24-----------------------

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

Photo by Conor Luddy on Unsplash

马克斯·伍尔夫的这条推文在一段时间内被到处谈论

我发现这很有趣。所以,我想弄清楚谷歌视觉 API 如何对互联网上不同类型的幻觉做出反应。

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

Classification - Dog 100% (Confidence)

所以,在第一张图中,我们可以清楚地看到一只

视觉 API 归类为 100% 置信度的狗。

这并不奇怪。

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

Classification — Head, nose, jaw, and mouth 85% (Confidence, Avg)

现在让我们将图像向右旋转 90 度。

我给你做了标记,让你很容易认出代表一个戴着帽子的男人的部分——看起来有点悲伤,因为是狗耳朵的一部分!

令人惊讶的是, Vision API 也收到了!它以大约 85%的置信度预测它是头部、鼻子、下巴和嘴巴。

下图显示了类似的结果:

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

Classification — Frog, Toad, Amphibian 65% (Confidence, Avg)

它被归类为青蛙、蟾蜍、两栖动物,有大约 65%的把握。

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

Classification — Horse 93% (Confidence)

它被归类为马!有着超过 90 %的信心。

谷歌更进一步,把它归类为’鬃毛’、’ T24 种马’和’ m ustang '也是!

显然视觉 API ,就像你和我会感知一个图像,需要它来旋转图像并得到一个“哦,我现在看到了!”瞬间。

取向的确很重要。

这里有一个陷阱,当伪装在背景中时,视觉 API 无法识别图像中的对象。它甚至在图像中失败,在图像中,它会有不同的组件融合在一起,造成某种东西由它们组成的幻觉。

你可以自己去看。

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

Save The Animals Poster by WWF

我们可以看到一些隐藏的动物(为了便于可视化而标记),但遗憾的是 Vision API 只能看到植物群,而不是动物群。

同样,这里它识别一棵树、一根树枝、一棵木本植物,而不是脸。

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

就是这样!如果你有任何问题,请随时发微博给我。

哦,我在网上找到了这个-

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

关注我随时更新我的帖子。祝您愉快!🎉

有数据科学的工作吗?

原文:https://towardsdatascience.com/got-data-science-jobs-552e39d48da2?source=collection_archive---------8-----------------------

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

首次提供后数据科学训练营的登陆挑战(以及一些建议)

那么你正在考虑参加数据科学训练营?你已经看过像这样的列表说数据科学家是美国最好的工作(而且薪水很高),你不断被广告轰炸,广告说训练营 ABC 将如何培训你并帮助你获得第一份数据科学工作。

辞去现在的工作,支付 15,000 到 20,000 美元,回到学校三个月,然后在训练营结束后找一段时间的工作,这绝对是一场赌博。

现在,我已经经历了数据科学训练营的经历,并从另一边走了出来,下面是我希望我事先知道的关于它和随后的求职过程的内容。 免责声明: 我在三藩市参加了 Metis,所以如果你选择另一个训练营和/或地点,你的经历可能会和我的不同。

你会学到很多很酷的东西……但是其中 70%对你的第一份工作没有用处

计算机视觉超级酷,用 LSTM 神经网络生成文本也是如此。但是有 99%的可能性,你的面试官会更关心你的 SQL 表连接技能,而不是你对深度学习的知识和热情。

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

Eyes blurry from too many SQL queries…

我并不是说了解深度学习和人工智能不重要(它们肯定很重要),而是说当你第一次完成训练营时,你可能会面试大多数数据分析师角色(或伪装成数据科学家头衔的数据分析师角色)。

据我所知,这些角色需要的关键技能是:

  • 结构化查询语言
  • 结构化查询语言
  • 结构化查询语言
  • SQL(你需要非常擅长 SQL)
  • 用 Python 清理数据(NumPy 和 Pandas)
  • A/B 测试
  • 数据可视化(最好使用 Tableau)
  • 基本统计学(相关性、统计推断、线性回归)
  • 一些聚类和分类算法的知识

遗憾的是,你在训练营期间花了大量时间做的许多事情(老实说,训练一个神经网络来引用埃德加·爱伦·坡的话要比对两种方法之间的差异进行假设检验有趣得多)都不会得到面试官的赏识。

不幸的是,作为一名绝对的忍者,SQL 在训练营期间几乎没有涉及到。相反,你很可能会在训练营结束后的前几周独自努力练习 SQL。如果你想加快这个过程,那就在训练营的几个晚上学习和练习 SQL。 我的好朋友兰迪正在这里写一个很棒的 SQL 入门系列。

你必须自己安排大部分的面试

你的训练营将会宣传其校友网络、招聘伙伴、招聘协助和面试准备的变革力量。

是的,肯定有一些职业帮助,但数据科学训练营不同于传统的软件开发人员训练营,我完全是猜测,但我要说,每聘用 1 名数据科学家,就可能聘用 15 至 20 名软件工程师。尽管数据科学家目前很受欢迎,但在技能需求方面,他们仍然无法与软件工程师相比——因此,你不应该利用朋友的软件工程训练营招聘结果作为你参加数据科学训练营的动机。

数据科学家供需不匹配的情况已今非昔比。多年的炒作和高薪可能已经使市场更加接近平衡,与此同时,许多公司发现数据科学和机器学习可以帮助他们实现的目标是有限的。

因此,这个故事的寓意是,我们中有越来越多的人在争夺一块馅饼,而这块馅饼的增长速度可能没有我们希望的那么快。

就我个人而言,我去训练营的时候期望在接近尾声的时候会有一个“招募日”或者“面试日”,但是我很失望。虽然我们确实有一个职业日,在那里我们向一些招聘人员展示了我们的最终项目,但我不相信我的同事中有任何人获得了现场面试,更不用说获得工作了。并不是因为缺乏尝试——我的同学展示了一些非常棒的项目,在网络会议期间,每个人都很努力地交谈。不幸的是,许多招聘人员要么不招聘,要么试图填补需要更多经验的职位。

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

LinkedIn will become your best friend

那么,一个有抱负的数据科学家应该做些什么呢?我有三个建议:

  1. 垃圾邮件 LinkedIn 上的简单应用按钮。 LinkedIn 有一个叫 Easy Apply 的惊人功能,可以让你在 5 秒钟内申请一份工作(只要你的简历已经上传)。即使回复率真的很低(是的,你应该期待这些列表的回复率更低,因为每个人都申请,因为它太容易了),你仍然可以每周获得一次或两次面试。这是因为如果你每晚只花 10 分钟发送简单的申请,你将会每周申请 40 或 50 份工作。
  2. 如果你有关系网的话,那就多依靠你的关系网。和你感兴趣的行业或公司的朋友和熟人一起吃午饭,喝咖啡,做任何你能做的事情。是的,社交并不有趣(至少对我来说),但它是这个过程中必不可少的一部分。如今,科技公司会发放丰厚的推荐奖金,因此,如果你能证明自己是一个好奇、谦逊、相当博学的人,那么人们通常会渴望(并受到激励)提供帮助。
  3. 不要过分拘泥于数据科学家的头衔。你不应该期望你在训练营后的第一份工作是你的梦想工作(但是如果你找到了,那就太棒了)。每一份新工作都是一个学习和建立新技能的机会,只要你继续这个复合过程,你就会在某个时候找到你梦想的角色。但我强烈建议你不要成为一个工作势利者——相反,尽可能多地寻找获得分析经验的途径。

没有人会关心你所做的项目,除非你让他们关心

训练营的一个关键卖点是有机会将数据科学项目组合在一起,然后我可以向公司兜售证据,“嘿,我可以做这个数据科学的事情!”

但是回过头来看,我太天真了,因为我训练了一个产生良好结果的模型,把它放在我的 GitHub 上,并在我的简历上写了一个关于它的项目,招聘人员或招聘经理会神奇地看到它,并说,“酷!我们应该给那个家伙一个机会。”

你需要推销你的项目和你的数据科学知识。就我个人而言,我通过我的博客来做这件事。如果你是一个有抱负的数据科学博客作者,这里有一些中等技巧:

  • 在像 这样的刊物上发表面向数据科学的 ,拥有大量的忠实追随者。比起你自己发表,更多的人会看到你的作品,尤其是在开始的时候。
  • 使用非技术性语言、清晰简单的例子和吸引人的视觉效果来解释你的工作和想法因为媒体上的大多数人都不是数据科学家。这有一个额外的好处,那就是确保你真正理解你所写的东西——学会向一个非技术人员解释一个复杂的话题是建立你自己的理解和专业知识的一个非常有效的方法。你也会得到更多的阅读。
  • 不要只是一步一步地重复你的项目。这不是高中科学项目报告。你是在为既想娱乐又想受教育的观众写作。**如果你想突出你的项目工作,你可以考虑你的项目的某个方面如何展示一个关键的数据科学原理。**例如,你可以写你的线性回归项目,同时教导你的读者为什么你的模型坚持普通最小二乘法的假设是至关重要的。这样写通常比“我先写 A,然后写 B,然后写 C,等等”更有趣。更有趣意味着更多的阅读,最终会给你和你的作品带来更多的曝光率。

无论你如何推销你的项目和你自己,只要记住,除非你让他们关心你(以引人注目的方式展示你的过程和见解),否则他们不会关心你所有的努力工作。

你需要了解(你面试的每个地方的)业务

这在湾区更难(相比之下,像休斯顿这样的地方,所有公司都在石油和天然气行业)。有这么多的创业公司,每个都试图用自己独特的商业经济学来颠覆一个特定的行业。

因此,不幸的是,如果你想在湾区的科技行业(尤其是科技创业公司)工作,你将不得不大量阅读和研究各种行业的竞争动态。维基百科和 Crunchbase 是很好的起点。 这样的商业策略博客,a16z 博客 strate Chery非常适合深入你感兴趣的行业或进行面试。晨星公司在分析公司和行业方面也做得出奇的好——特别注意他们关于是什么驱动了一家公司的经济护城河的讨论——这些特征使得一家公司能够随着时间的推移持续获得高资本回报。

在多次面试中,我被问到的第一个问题是,“那么你对我们了解多少?”

一般来说,招聘人员和招聘经理希望我至少知道以下事情:

  • 的公司是做什么业务的,卖什么产品或者服务?
  • **它是怎么赚钱的?**公司商业模式的哪些特点使其能够从竞争中脱颖而出并获得利润(如果没有利润,那么是什么使其比竞争对手增长得更快)?
  • 了解公司目前如何应用数据科学来获得竞争优势或克服业务障碍

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

Don’t forget to code!

找工作本身就是一项全职工作——同时,如果你不努力,你辛苦获得的数据科学和编码技能将会萎缩

许多数据科学训练营的毕业生都是职业改变者,其中许多人没有或至少没有技术背景。在求职中获得成功需要花费大量的时间和精力。

至少对我来说,找工作及其所有必要的事情(申请、求职信、咖啡会议、电话、面试准备、实际面试本身,以及感谢信)是极其耗时的。除此之外,我还需要维护我的博客。

不知不觉中,一个多星期过去了,我几乎没有接触过 Python。那时,我强迫自己从找工作中抽身出来,从事一个旧的数据科学项目。

尽管我们很想得到这份工作,但重要的是要记住,我们不是数据科学家,因为一些公司愿意付钱让我们成为数据科学家——相反,我们是数据科学家,因为我们经常实践数据科学(编写新项目的代码,参加 Kaggle 竞赛,研究和阅读新算法,等等)。).

所以,继续努力,继续做那些项目,继续展示你的激情,最终会有人给你一个机会。干杯,祝你好运!

更多数据科学与分析相关岗位:

了解 PCA

了解随机森林

理解神经网络

了解 A/B 测试

用 Tableau 可视化股票

维度的诅咒

GPT2,计数意识和好奇的黑客

原文:https://towardsdatascience.com/gpt2-counting-consciousness-and-the-curious-hacker-323c6639a3a8?source=collection_archive---------1-----------------------

免责声明:我希望它是非常明确的,我绝对 100%开放的想法,我在这篇文章中的任何错误。我不仅接受,而且明确要求能够让我相信我在这些问题上是错的论点。如果你认为我在这里有任何错误,并且有一个可能说服我的论点,联系并提出你的论点。我很高兴说“哎呀”,并收回这里提出的任何意见,并改变我的行动方针。

俗话说:“当事实改变时,我改变我的想法。你是做什么的?”

TL;DR:我是一名复制 OpenAI 的 GPT 2–1.5b 的学生,我计划在 7 月 1 日发布它。在批评我这样做的决定之前,请阅读下面我的论点。如果你仍然认为我错了,请通过 Twitter @NPCollapse 或电子邮件(thecurioushacker@outlook.com 联系我,并说服我。代码和技术细节见 本帖

更新:我的想法已经改变,我打算不发布。看到我的更新帖子 这里 说明了我的推理。

更新 2:这篇文章现在是(计划中的)4 系列文章的第 1 部分。如果你喜欢你所读到的,请继续阅读第二部分

这篇文章分为三个部分。第一部分介绍了什么是 GPT2 的背景以及为什么它值得关注。在第二(长)部分,我阐述了我对 GPT2 对我们社会意味着什么的想法。在第三部分,我谈了一个有点离题的话题,我认为这个话题对我们关于人工智能安全的一般性讨论是有价值的,也是我开始这个项目的最终原因:好奇黑客的思想。

我为我的长篇大论道歉,但是我有太多的话要说,我可以轻松地写两倍的内容。我呼吁你在阅读时不要妄加评论,请跟我读完。我经常岔开看似不相关的话题,但是如果你坚持下去,我保证我会回到一个有趣的话题(通常…希望如此…)。

第一部分:GPT2

不久前,OpenAI 披露了他们在人工智能系统 GPT2 创造语言方面的最新实验细节。这不是第一次建造这样的系统,尽管它的结果远远超过了迄今为止的任何其他尝试,但可以说这不是这个项目最受关注的地方。OpenAI 决定不发布他们模型的全尺寸版本(1.5B),因为他们担心其潜在的安全隐患,特别是在产生假新闻方面。他们确实发布了一个较小的版本(117 米),后来又发布了一个中等大小的版本(345 米)。理论上,将 1.17 亿或 3.45 亿扩展到 1.5 亿没有太大障碍,但有一个实际障碍:计算。在云计算领域,创造 15 亿的成本估计在 4 万美元左右。这遵循了人工智能技术发展水平的一个长期趋势,即计算成本越来越高。

不公开发布他们的模型的决定,尽管他们的名字中有“open ”,获得了广泛的响应。但是直到今天,1.5 亿仍然没有发布(除了几个研究伙伴),而且据我所知,还没有复制。没有一个个人或合理的学术研究小组会有足够的资源从零开始创造 15 亿。

嗯,我复制了 1.5B。

我不在任何政府、大学或大公司的指导下工作(尽管我觉得我欠谷歌我的第一个孩子或其他什么东西,因为他们给了我大量的免费支持)。我只是一个好奇的本科生,把空闲时间花在人工智能实验上,而不是出去和女孩们聊天。

在这篇文章中,我不想解释我是如何做到这一点的技术细节(我已经在的另一篇文章中这样做了),而是我想借此机会,当有人看到我时,讨论一下我对整个 GPT2 情况的看法,以及它对人工智能和人工智能安全的意义。

为什么这很重要?

如果你看一看工作中的 GPT2 的样本,你应该很快就会明白为什么这可能是一件大事。他们有时在风格上甚至在内容上出奇地一致。这个例子有些滑稽,但也令人担忧。

GPT2 与许多其他模型的不同之处在于它的通用性。它在所有链接到 reddit.com 的网站上接受了至少三种因果报应(一种人类质量预过滤)的训练。我用较小的型号做了大量的实验,从中获得了巨大的乐趣。我和朋友们花了几个小时的时间试图让这个东西生成有趣的文本,让我们大声读给彼此听(我们发现,如果你用圣经引文来填充它,它会变得特别滑稽的宗教咆哮)。我和一个朋友一直在开发一款融入了 GPT2 的视频游戏,甚至有一次在派对上,我们围坐在一架钢琴旁,提示人工智能,直到它吐出一些类似歌词的东西,所以我的朋友塞巴斯蒂安(@shyteagames) 把它变成了一部即兴的太空歌剧音乐剧(这不是我那天晚上期望做的事情,但真的很有趣)。

当然,就像我的大部分饮食和锻炼习惯一样,任何有趣的事情对你来说都是有害的。让 GPT2 创作关于你朋友的有趣的达达主义情色漫画的一般性也意味着它可以做许多不那么无聊的事情:虚假评论、煽动性的政治信息(它喜欢谈论英国退出欧盟)以及互联网上已经太多的其他事情。出于这些原因,OpenAI 决定不发布完整的模型(它生成的文本远比小模型更有说服力)。但这有效吗?这是正确的选择吗?像我这样的人复制了这种“危险”的技术意味着什么?

分水岭时刻?

“道德是世界应该如何运转,经济是世界实际如何运转.”

让我们后退一步。或者很多步骤。是什么让 GPT2 具有潜在的危险性?它有哪些性质是我们需要警惕的?那些属性是如何影响现实世界的?

人们主要担心的是,GPT2 可能会严重扰乱网络世界,甚至比现在更糟。好吧,那它是怎么做到的?这种观点认为,利用 GPT2,恶意行为者可以制造出大量名副其实的虚假内容,以推动叙事,操纵产品评论,或者只是非常令人讨厌。但是 GPT2 是如何实现的呢?GPT2 产生文本。人类可以产生文本。所以这不是什么新鲜事。不,GPT2(以及一般的人工智能和技术)将我们带回了经济学家最喜欢的工具之一:成本。

理由是,使用 GPT2 这样的技术,我们本身并没有从事一项全新的活动,但我们正在降低生成令人信服的文本的成本。如果你在想“嗯,这听起来非常无聊”,那么你真的错过了经济学是多么神奇(我曾经认为经济学就像商业、金钱和其他东西一样。男孩是我错了,经济学是最酷的科学之一。通过降低产品成本,你有时可以让全新的行业和应用变得可行。举个明显的例子,电脑。原则上,你可以在一台 20 世纪 80 年代的计算机上完成任何你现在能做的计算,如果你把它造得足够大并且等得足够久的话。但是在实践中,对于我们现在认为是常规的许多应用程序来说,成本(金钱和时间)将是天文数字。有一种趋势是软件增长似乎跟随硬件增长;随着硬件变得更快,新型算法成为可能。但是经济学家听到的不是“更快”,他听到的是更便宜

所以,假设,GPT2 可以代表一种分水岭时刻,在这一时刻,它降低了生产文本的成本,以至于可以进行某种新的恶意活动。我明白这个论点的意思,但我认为问题出在细节上。

为了解释我的推理,我们将不得不再往后退步。请容忍我对这个问题极其吹毛求疵的解构,我认为它引导我们得出一个有趣的结论。

第二部分:计数意识

为什么“防御”一定会失败,而且可能是弊大于利

我想澄清一点:我非常重视人工智能的安全(尽管有一些警告,我将在第 3 部分讨论)。我来自 MIRI 学派,认为人工智能及其安全使用是我们这个时代最重要的问题。但是,与 MIRI 类似,我对这个话题的想法与许多主流观点有点不同。(澄清一下:我与 MIRI 没有任何关系,尽管我希望如此)

话虽如此,我认为很多关于 GPT2 的想法不幸地被我们当前的政治迷因圈毒害了。我保证,这不是一篇政治文章,但我确实相信“假新闻”这个词在这一点上已经变成了一个迷因。我并不否认假新闻的存在或危险,但我觉得这个词已经变得如此模糊和政治化,以至于人们并不总是充分考虑假新闻实际上是什么,它的威胁有多大,以及如何有效地打击它。

真的可以推荐这个系列的迷你纪录片的题目。他们真的做得很好,事实上立陶宛有一支对抗巨魔的“精灵”军队是我很久以来听到的最令人惊讶的事情。

假新闻是真实的,无处不在的,潜在的危害非常大。最肯定不是假新闻的是

每一代人都有一种倾向,认为一切都比过去糟糕得多,如果一个人真的读一点历史,这很快就会成为大多数人持有的最荒谬的信念之一。我强烈推荐史蒂芬·平克的《我们本性中更好的天使》和《现在的启蒙》以及汉斯·罗斯林的《真实》这两本书,让你领略一下如今的事物是多么令人惊讶的美好,以及这个世界在很多方面曾经是多么不可思议的地狱。

很多人对假新闻的看法也属于这一类。是的,有人认为疫苗会导致自闭症。是的,有人认为世界是平的。是的,有些人持有更危险的观点。是的,他们经常从互联网上获得这些奇怪的,有时甚至是危险的想法。

但是你见过前现代时代吗?

是的,让你所有关于世界的新闻远离你的政治化的脸书信息并不好。你知道什么更糟吗?从你当地的宗教官员那里获得你对政治、物理、生物、经济和该烧死谁的看法。在人类历史的大部分时间里,这是的默认设置。比起西班牙宗教裁判所,我更想要平土器,非常感谢(没想到会在这个帖子里看到它们吧?).

“好吧”,你可能会想,“当然,很好。但是我们可以做得更好!我们仍然需要反对虚假,即使它没有过去那么坏。”这一点我完全同意。我不是说我们不应该反对虚假,实际上恰恰相反。

最近,OpenAI 发布了一个来自 GPT2 的样本输出的数据集,目的是帮助开发反措施来检测这种虚假文本。我认为这不仅是被误导的,而且是完全危险的。原因很简单:

真理不是免费的。

不仅不是免费的,真理是昂贵的。找出这个世界的真相需要做很多工作。如果你想知道某件事的真相,你将不得不投入工作去寻找真相,这是没有办法的。

好吧,有一种可能的解决方法,这就是为什么我们人类在成就上比这个星球上的其他生物成功得多的根本原因。

最有价值的商品

给我出个谜题:人类经济中最有价值的商品是什么?

如果你想到“钱”或“石油”,我会说你想得不够抽象。不,我认为正确答案是“信任”*。*

什么使人类不同于其他动物?为什么我们可以通过在海洋下面发射激光束,将宇宙飞船送上月球,并与地球另一边的人通话?显而易见的答案是“智力”,但我认为智力只是故事的一部分。把有史以来最聪明的人,或者说是他们的新生克隆体,放在一个山洞里。没有教育,没有语言,什么都没有。现在让他们尝试发明工业技术。你将会等待很长时间的*。*

不,智力是一个更强大的因素:合作。通过共同努力,人类能够实现对个人来说完全不可能实现的体力和智力的壮举。想象一个人类从未一起工作过的世界。几代人都不会积累知识。每当有人想出一些有用的东西,下一代就会忘记它,不得不从头开始。有些世代和个人会过得更好,有些不会,但总体而言绝对不会有任何改变,不会有任何进步。这基本上是黑猩猩的状态。

但是人类发明了一些强大的东西,信任和与完全陌生的人合作的能力。最终,我们人类的成功在于通过这些广泛的互动积累了越来越多有用的文化知识。我可以就此长篇大论,但你应该读读尤瓦尔·赫拉利的《智人》和《德乌斯人》,丹尼尔·丹尼特的《从细菌到巴赫,再回来》,以及其他更好的相关论文。

对于我们的讨论来说,重要的是:一条信息的危险和/或有用程度取决于我们对它的信任程度。

如果每个人一看到假新闻就立刻认出来,只是不相信它,除了它阻塞带宽之外,就不会有来自它的威胁。但是我们已经确定这不可能这么容易。如果你能立即发现任何谎言,这意味着你是无所不知的,而你(可能)不是。

所以我们来谈谈我的观点:我认为检测假新闻、仇恨言论或其他东西的方法是危险的,至少在目前处理它们的方式上是如此。我认为原因既微妙又明显:如果我们有一个系统负责检测我们能信任什么和不能信任什么,我们并没有消除我们投资信任的需要,我们只是将我们的信任从我们自己的官能转移到机器的官能。(我想大声说出布鲁斯·施奈尔的这篇非凡文章,它帮助我得出了这个结论)

如果我给你一篇文章,却完全不告诉你它来自哪里,你怎么知道它是否可信?这很棘手,你必须阅读它,考虑它如何符合你现有的知识,你如何能找到更多来验证这些说法等等。你对什么该相信的信任分配取决于你大脑和经历中内置的狗屁检测算法。

假设我给你一篇纽约时报的文章。那是另一回事了,对吧?《纽约时报》是一个非常著名的信息来源,所以即使它包含一些你通常会怀疑的信息,你可能会更倾向于更新你的信念,因为你知道你可以信任这个来源。

但是我们为什么要相信《纽约时报》?因为纽约时报是由人类组成的,他们用大脑来做这些检测算法试图做的事情:检测糟糕的故事,找到真相。你可以把《纽约时报》视为一个巨大的、混合生物合成的过滤算法,它接收关于世界的信息,其中大部分是噪音,一些是故意误导,并提取有价值的(希望是)真实的信息供你消费。

理论上,我认为不需要人工干预的算法的存在没有问题。人类和其他人一样是机器,而也有偏见,所以没有理由不存在一种在生成真理方面更好的人工智能算法。但是我们最好确信它确实更好。我认为没有任何现有的技术可以超越人类在这方面的能力,即使他们有偏见。目前的人工智能实际上仍然无法区分相关性和因果性,我们希望能够判断我们看到的信息?这事不会有好结果的。

我们必须跟踪我们的信任在哪里。因为我们不能不信任,我们必须信任一些东西,我们只需要尽最大努力去信任正确的东西。如果我们使用当前类型的算法来尝试和“防御”GPT2 这样的“威胁”,我认为我们将会弊大于利。因为他们不仅无法认识和管理真相,还有一个更深刻、更令人不安的问题…

令人不安的真相:胡言乱语者

我花了相当多的时间玩人工智能。探测他们的输出,查看他们的数据集,调整参数,诸如此类的事情。自从 GPT2 问世以来,我花了很多时间研究文本生成人工智能。我记得有一天下午,我和一个朋友出去玩,我们在看一些我们在互联网上找到的数据集,我们也许可以在这些数据集上训练我们的下一个人工智能。我们无意中发现了一个“有毒评论”的数据集,并对其进行了深入研究。读了一会儿后,我的朋友问了一个比我认为我们当时意识到的更深刻的问题:

“等等,这些是人工智能生成的,对吗?”

不,他们不是。这些是真实的,人类的评论。但是当我看着他们的时候,我突然想到了一件事。你知道有时候你会觉得某人脑子里什么都没有吗?话从他们嘴里说出来,却没有理解?他们组成完整的句子,表达思想和愿望,但他们只是看起来…像一个僵尸,不受理性的影响。可能你现在正在考虑一些政治对手,因为你自己的人类偏见。现在不要觉得自己太趾高气扬,因为我可以保证你也曾经是那个空虚的人。但是看到这些文本和 GPT2,我终于有了一个具体的例子来描述这种感觉。这些评论,这些人,他们听起来像 GPT2!就像单词和句子的简单统计连接!

一如既往地走在我前面,我发现罗宾·汉森(Robin Hanson)已经写了关于这个确切主题的文章,并将这种现象称为“胡言乱语”。我强烈建议你在这里停下来看看他的博客文章,它不是很长。完成了吗?很好。(莎拉·康斯坦丁在她的非常有趣的博客文章中详细阐述了这个问题)

那么这意味着什么呢?这意味着,据我所知,人工智能无法生成连贯、真实的文本。但是 AI 现在能做的,是咿呀学语。牙牙学语不仅仅是人类交流的一个小部分。我认为有一个强有力的证据表明我们大部分的交流都是在胡言乱语。想想闲聊或学校论文。尽管我认为它比那要深刻得多。

那个对我们的对话又意味着什么呢?这意味着,即使我们有一个系统可以完美地检测人工智能产生的咿呀学语并部署它,它也不仅仅会审查人工智能,还会审查大量真实的人类交流。我们喜欢认为我们在某种程度上与机器和计算机有着本质的不同,但事实并非如此。GPT2 以另一种新的方式展示了这一点。

我们该拿咿呀学语怎么办?

好了,我们已经建立了一个框架来理解我们现在的处境。

  • 我们有人工智能能够做一些与人类“咿呀学语”行为非常相似或相同的事情,而且它们只会从这里变得更好。精灵从瓶子里出来了。
  • 我们想要改善,或者至少保持,在一个有这些人工喋喋不休者的世界里,我们在线互动的质量。

很明显,我们希望从我们的平台上消除低质量的胡言乱语。在我看来,人们可以沿着两条轴线来识别这种胡言乱语:胡言乱语本身的内容,或者它的来源。

让我们来看看 babble 的内容。理论上,我们可以开发方法来检测胡言乱语,然后过滤掉它,就像我们处理垃圾邮件一样。但我在这一部分试图说明的要点是,这是行不通的,因为与垃圾邮件不同,区分人工智能咿呀学语和人类咿呀学语的不仅仅是风格,而是内容及其真实值。只要我们没有能够自动检测政治主张是否真实的系统,这就行不通。我们无论如何都可以过滤,而且,你知道,也许这并不是那么糟糕,如果它过滤的都是低质量的交互,不管它们是来自人工智能还是人类。但我对此表示怀疑。我认为咿呀学语和高层次思想之间的界限是模糊的,仅仅从一段文字中是很难发现的。因此,如果我们过滤胡言乱语,我们就过滤了许多真实的、高质量的人类互动,创造了一个由不透明算法的难以理解的偏好设计的怪异的人工环境。呀。

另一边呢,源头?好吧,如果一个新的帖子到达我们的网络服务器,我们立即知道它是由人工智能生成的,我们可以简单地否认它,我们很好!但是当然,这是行不通的,因为我们实际上无法知道一段给定文本的来源。它只是一个浮动的数据块,没有附加作者身份(通常)。即使是,我们怎么知道作者数据是真实的?

假新闻如此容易迷惑我们的一个重要原因是,我们的思维是在这样一种环境中进化的,在这种环境中,高水平、基于语言的信息的唯一来源是其他人。尽管有相反的说法,但没有会说话的动物、精灵或石头(不幸的是)。这意味着我们的大脑中有一种本能,当我们看到文本或讲话时,我们知道它是由人类发出的,这决定了我们如何信任这些信息。

但我们不是白痴,我们知道人类可以撒谎和操纵,所以并不是说由另一个人创造的东西会让我们立即相信它。你不相信某个陌生人走到你面前,提出疯狂的要求,是因为说谎的代价很低。宣称月球不存在基本上不花我一分钱(哈,那些登月怀疑论者,居然相信月球存在,真是一群绵羊!).这种说法是真的吗?我把这作为一个练习留给读者。

但是有些关于人类工作本质的东西并不便宜。例如,虽然我很容易声称月亮不是真的,但让 1000 个人声称月亮不是真的对我来说就很难了(尽管没有我希望的那么难)。所以如果你只听到我说月亮不是真的,你不会让我多想。但是如果有 1000 个人来认领呢?如果你全家都认领了呢?如果整个世界和所有的科学家都宣称它是自己的呢?如果这是真的,相信月亮是真的将是愚蠢的事情!

从众会招致很多憎恨,这是理所当然的。但它的存在是有原因的。因为让我们人类如此强大的是合作,而合作的一部分就是承认你可能是错的。如果大量的人,他们中的许多人可能比你我更有资格,声称某事,不改变你的观点将是不理智的,除非你有一些真正该死的非凡的证据。

生物区块链

这就是事情变得奇怪的地方(至少比我已经做出的更奇怪)。

这整个想法之所以可行,基本上是因为一个原因:制造更多的人类并让他们相信某件事是昂贵的。在某种程度上,人类的繁殖和成熟时间与比特币的工作证明算法实现了相同的目的。

让我继续(另一个)小话题来解释一些关于区块链和分布式信任的事情。

假设有一天,一个朋友走过来对我说“我在 PayPal 上给你汇了 100 美元”。我如何知道我是否真的收到了钱?好吧,简单,我检查贝宝,相信他们告诉我的。PayPal 是集中信任的一个例子。我相信 PayPal 会处理一切事情,以确保交易存在并确实有效(我的朋友是否有足够的钱汇给我,他们是否真的汇了钱,各种反欺诈措施等)。因此,当我登录我的 PayPal 帐户,看到我的朋友寄来的 100 美元时,我们可以同意这是一笔真实发生的合法交易。

但是这个系统有一个主要的失败点:PayPal 本身。没有技术上的原因,一个流氓员工(也许是朋友自己)不能在 PayPal 的数据库中编辑一些行,给我多 100 美元,尽管他们从来没有发送过。这意味着数据库现在处于“不一致”的状态,因为现在系统中的钱比投入的多,这可能不是我们想要的。但是理论上 PayPal 可以对他们的数据库做任何他们想做的事情,不管是否一致(至少在联邦政府出现之前,或者客户完全失去信任之前)。

那么,有没有什么方法可以避免有一个你必须信任的中心的、易出错的实体呢?我想澄清的是不存在完全不可信的系统(正如布鲁斯·施奈尔等人长期以来一直在说的)。但有一种东西叫做分布式信任,比特币等加密货币就是其中最显著的例子。

它的工作方式基本上是这样的:我们有(a)某种人人都能看到的共享信息库(“区块链”)。这和站在公共广场上与人交谈没有太大区别。信息是可以交换的,但是制造假信息还是很便宜的。区块链的特别之处在于(b) 以不受欢迎的方式修改它们是非常非常昂贵的(或者是不可能的)。这通常通过一种叫做“工作证明”的方法来完成。基本上,像比特币这样的加密货币使用非常聪明的算法来迫使用户创建一个“证明”,证明他们已经花费了一定的计算量。只有使用这样的(一次性使用)证明,您才能以有限的方式修改区块链。即使是这种有限的编辑,也只有在其他人检查并验证它是真实的情况下才会被接受。这使得以对你不公平有利的方式可靠地编辑区块链(比如给你自己比应该有的更多的钱)是极其昂贵的,以至于不值得或者实际上不可能。实际上并非不可能,只是足够接近而已(你需要运行比特币的所有计算的 50%以上的计算能力,这并非不可能,但仍然是一项几乎难以理解的昂贵努力)。

这样做的结果是,你可以相信比特币区块链,只要你不相信任何人拥有篡改它所必需的超级强大的计算能力(并且代码没有任何致命的错误)。总的来说,这是一个非常合理的假设。因此,相信比特币区块链是有道理的。

这很重要的原因是人类物种形成了一种生物区块链。可信信息就像区块链上的交易。只有当相当一部分管理区块链的人同意它们是有效的,它们才会被认为是真实的。人类以同样的方式工作。一旦大量的人接受了新的信息,我们就把事情当作“常识”和“真理”来接受(这不是我们发现真理的唯一途径,但却是重要的途径)。当然,它比漂亮、干净、数学上精确的区块链要复杂得多,但原理是一样的。

我们有 a)一个以我们共同信念为形式的公共数据仓库,和 b)一种使其难以篡改的方法:你需要让很多人接受和传播你的新信息。这很难的原因是因为有一个固有的限制,那就是有多少人,你能多容易接近并说服他们。请记住:

“你可以一时愚弄所有的人,也可以永远愚弄一些人,但你不可能永远愚弄所有的人。”—亚伯拉罕·林肯

连林肯都理解生物区块链的概念!对于我们的大脑来说,将“很多人相信 X”与“X 一定是真的”联系起来是完全符合生物学意义的。如果我想让我的石器时代部落相信我的新奇想法,那是,是昂贵。一点也不像胡乱宣称!如果我成功了,这是一个可靠的迹象,表明我的想法已经通过了审查,至少通过了一些合理的审查。同样,这种方法并不完美,但它比什么都没有好得多(回想一下黑猩猩)。

破坏生物区块链

最后,这让我明白了我的观点:这就是为什么假新闻是危险的。

我发现自己一直在这样做:我读了一些我不太了解的 reddit 标题,读了下面的一两条评论,本能地,不加思考地,我相信那些评论说的是真的。我真诚地训练自己注意到这种情况的发生,并试图摆脱它,但这很难。这是我们大脑的一个内置系统,是我们人类思考的方式。而这样想是有道理的。看着那些顶部的评论,我的大脑看到了语音,这意味着它是由真正的人类用真正的人类大脑创造的,不仅如此,它们还有大量的赞成票,这意味着许多其他真正的人类相信这一点!此外,正如丹尼尔·卡内曼(认知偏差研究之父)所说,“所见即所得”。我的大脑看到大量我的人类同胞向生物区块链提交了一条信息,而没有其他信息,所以我认为它是可信的。

一般来说,即使在互联网上,这也不算太坏。投票最高的评论通常更好(尽管到目前为止并不总是如此)。但是这个系统会在几个方面崩溃,我相信你能想到其中的许多(例如愤怒的信息如何传播超过它们的质量优点),但是现在让我们只关注与我们的讨论最相关的一个。

我感兴趣的失败模式是互联网使之达到全新程度的模式:当且仅当我们的“工作证明”成立时,这种相信“流行”事物的整个启发才有效,这意味着“让”更多的人相信我们的东西是昂贵的。但是随着大众媒体的出现,至少可以追溯到印刷术的发明和互联网的进一步发展,这一点不再那么明确了。

原因是,正如我们之前讨论的,我们(通常)根本看不到一条信息的来源。因此,相反,如果我们想判断是否将我们的生物区块链启发式方法应用于这条新信息,我们首先使用一些方法来尝试和确定来源是否是一个真实的人(这是我们将这条新信息添加到生物区块链的要求)。我们最古老的方法很简单:“如果是演讲/写作,那就是人类”。在历史上的大部分时间里,这种方式运转得非常好。如果我听到你告诉我什么,我就能确定它的来源。甚至在书写被发明之后,我知道书写只能由另一个人产生(尽管是一个有偏见的人类样本,因为很少有人会写)。

自从印刷术被发明以来,这种基本的启发就已经土崩瓦解了(并且在书写发明之后已经被破坏了),因为现在一小部分人就可以生产大量的文本,如果由真正的人手工制作,将需要一支军队。随着文字制作成本的下降,文字的来源越来越不可靠。而且这种趋势还在继续。录音降低了演讲的成本和价值,录像降低了视力。互联网使这些成本进一步下降。

拿简单的文字来说。如果是在中世纪,我得到了来自不同人的 100 个手写签名来支持我的观点,这意味着很多。但是如果我给你一个没有标记的 100 个名字的网页,你会相信我的观点吗?希望不会。自从互联网诞生以来,人们就已经意识到生成文本是极其廉价的。

所以,作为聪明的猿类,我们开始研究对策。其中一些,如垃圾邮件过滤器,是基于过滤内容,因为虽然生产简单的文本是便宜的,但生产高质量(甚至 babbler 质量)的文本仍然是昂贵的。相反,其他方法试图识别来源是否是人类,例如 CAPTCHA,它在许多情况下工作得相当好,尽管机器人有许多方法来逃避它,有时它也有一些其他类型的问题

这意味着,在大多数情况下,如果我们看到一段有点连贯、复杂的文本,仍然有理由假设它是由人类生成的,并让其内容影响我们的生物区块链。

这是我的核心论点:多年来,我们认为可以接受的证据影响我们生物区块链的标准一直在稳步上升,GPT2 代表了这一标准的最新上升,标志着我们再也不能相信“胡言乱语”级别的文本。

现在我认为有一个强有力的论点,那就是我们很久以前就已经超越了这一点,基本上是自从书面宣传的概念被发明以来。但 GPT2 是 babbler 级别文本生成的时刻,其成本已经降至基本为零,就像十年或二十年前互联网是廉价和低质量的垃圾邮件。(对于那些好奇的人来说,这里有一个关于垃圾邮件的非常有趣的 Defcon 演示)

我们能做些什么吗?我认为没有简单的解决办法。我认为我们已经到了这样一个地步,一般来说,不再可能确定一个给定的文本是否是人类生成的。但我认为这根本不是一个单一的“点”,而是一个光谱,从 90 年代最简单的垃圾邮件到今天的 GPT2,再到谁知道明天会发生什么。

我认为这是一个本质上很难解决的问题。我们想做什么,给每个人一个“意识许可证”,让他们在写评论时展示出来?老实说,我认为这将提高我们生物区块链的质量,但我不应该拼写出赛博朋克反乌托邦的含义。我们目前拥有的最好的工具仍然是人脑。我们应该把重点放在教育人类了解他们自身偏见的现实,以及信息是如何在互联网和其他地方产生的。

我真的认为,如果人们知道像 GPT2 这样的东西存在,并且就在外面,这将迫使他们提高他们信任什么信息的标准。垃圾邮件也是如此。当尼日利亚王子和其他类似可笑的原始骗局第一次出现时,他们成功了。计算机病毒也是如此。许多第一批病毒之所以有效,是因为没有人想到一个文件可能是恶意的。为什么安全研究人员会侵入系统并暴露其缺陷?因为这是让人们倾听的唯一方法,所以你必须证明你的威胁确实存在(即便如此,任何安全专家或气候活动家都可以告诉你许多故事,说明有多少人仍然没有足够认真地对待风险)。人们只有在知道威胁是真实存在的时候才会产生抵触情绪。

这就是为什么我计划在 7 月 1 日向公众发布 15 亿美元。我在等待,因为我想给人们时间来说服我,如果我错过了什么,我是错的。因为假装这些东西不存在或“只在像 OpenAI 这样的好人手中”是一个被比 OpenAI 或我更不友好的秘密团体滥用的处方。我认为我们应该尽可能广泛地宣传 GPT2 和其他咿呀学语方法的存在,它们掌握在许多人手中,就像垃圾邮件和病毒一样,我们需要适应。

你不能把精灵放回瓶子里。

把这一切结合在一起:GPT2,咿呀学语和信任

所以,最后,我们在这里,与我的主要论点。概括一下:

  1. 目前的人工智能无法生成有价值的真实文本,但它们可以胡言乱语。
  2. 很大一部分真实的人类互动是咿呀学语。
  3. 目前的技术无法检测或产生真相。

我从这些争论中得出的结论是:

  1. GPT2 并不是唯一危险的,而是不可避免趋势的最新一步。它可能会也可能不会降低生成可信文本的成本,但强大的组织已经可以通过人类和其他算法产生大量更好的内容,而且 GPT2 也不是他们力所不及的。
  2. 对抗低质量的胡言乱语,无论人工智能是否产生,现在和将来都是至关重要的,但我认为将信任转移到明显有缺陷的“反胡言乱语”算法是错误的做法。有一天,值得我们信任的系统将会存在。今天不是那一天。
  3. 我们不应该训练人们依赖有缺陷的算法,而是应该帮助他们找到正确的信任点,首先是通过训练他们自己的批判性思维技能。人类大脑目前仍然是我们所知的最强大的真相生成机器。
  4. 为了促进人类适应,我认为这些方法应该尽可能广泛地传播,这样就没有人能躲在虚假的安全感后面。为了推进这一点(并把我的钱用在我的嘴上),我计划向公众发布 1.5B。

这是我的论点和这篇文章的核心。这是与 GPT2 及其后果直接相关的部分,但我还有一点我认为值得讨论的。这基本上是一个独立的话题,但我认为它为我们当前的讨论增添了一些内容。

第 3 部分:好奇的黑客

黑客【原来是用斧头制作家具的人】n.
1。一个喜欢学习编程系统的细节以及如何扩展他们的能力的人,与大多数用户只喜欢学习最少的必要知识相反。
2。热衷于编程的人,或者喜欢编程而不仅仅是编程理论的人。
3。一个能够欣赏黑客价值的人。
4。擅长快速编程的人。并不是黑客制造的所有东西都是黑客。
5。某一特定程序的专家,或经常使用或研究该程序的人;例如:“一个赛尔号黑客”。(定义 1 到 5 是相关的,符合的人聚集在一起。)
6。一个恶意的或好奇的爱管闲事的人,试图通过四处打探来发现信息。于是有了“密码黑客”、“网络黑客”。

——黑客字典(https://www.dourish.com/goodies/jargon.html)

在这篇文章中,我试图把我的人排除在外,因为我认为我是谁对我的核心观点并不重要(希望这些观点仅仅基于他们的客观论点)。但对于这第三部分,我想谈谈一个似乎有点不相关的话题:我称之为“好奇的黑客”的心理学(我可能会称之为“黑客”,但不幸的是,这个词有许多负面含义)。

对一些人来说,我做了这一切,创造了一个“危险的”人工智能,但没有给自己带来任何经济利益(恰恰相反,这让我花费了大量的时间和精力,而这些时间和精力本可以花在更直接的事情上),然后想把它发布给公众,这是令人困惑的。对于我期望阅读这篇文章的许多人来说,我希望他们认为我这样做的原因是显而易见和可以理解的。那是因为他们和我一样,是好奇的黑客。

但对许多人来说,像我这样的人的想法很奇怪,他们不理解我们为什么要做这些事情。这不是因为他们不能或不想。很难理解那些和你习惯的想法不同的人和你自己以及你的同事。但我认为好奇的黑客在我们的生活中是一个非常重要的因素,即使我们可能没有意识到这一点,我认为理解他们的心理对于理解我们的世界以及如何处理出现的问题是非常必要的。

所以我想邀请你们进入我的思维,来理解我为什么做我正在做的事情,为什么我认为有像我一样的人更重要,为什么理解这些人是至关重要的。

是什么让好奇的黑客?

200 小时的工作。这大约是我对这个项目投资的估计。现在,并不是所有这些都是高质量的工作,很多都是盯着充满数字的黑屏等待事情发生,但很多都是硬核,每天 8 个多小时编码和阅读科学论文。我一分钱也没得到。没有人告诉我这样做,没有人支持我这样做(除了通过硬件谷歌),我可以花时间和我的朋友在一起,或者为大学学习,或者做任何其他事情。

那么,如果不是为了利润或者是因为别人让我这么做,我为什么要这么做呢?我想说的是,正是出于第二部分提到的所有原因,我有了这个伟大的哲学/道德准则,我准确无误地遵循着这个最终目标,推进我所相信的真实和正确。我认为许多和我相似的人试图为他们自己的项目传递这种信息,他们的行为是经过深思熟虑的,事先有负责任的判断。但事实并非如此(至少通常对我来说是这样)。

我这么做是因为,该死的,这太酷了!

我认为这是好奇黑客的典型特征。我做疯狂的事情,通常很难,也没有明确的回报,因为它们很酷(就我个人而言,甚至更多,因为它们很有趣)。好奇的黑客做事情,因为他们可以*。我(和像我一样的人)在做困难的事情时有一种内在的快乐,不是因为它们容易,而是因为它们很难(尽管有些人走得太远了)。***

GPT2 不仅非常酷,而且非常有趣,对我来说是不可抗拒的。再加上一些你不应该做的事情的神秘性,好奇的黑客就像鱼一样上钩了。是因素的完美风暴让我这样的人痴迷。

好奇的黑客很重要

好奇的黑客喜欢玩。他们喜欢把坚硬复杂的东西拿来修补,打碎,再重新组装。像我这样有科学或数学问题的人就像一只拿着毛线球的猫。我们喜欢这样做。(你认为科学家为什么会接受他们经常忍受的恶劣工作条件?)

我并不孤单。这种好奇心、游戏性和对解决问题的痴迷的混合是一种强有力的性格特征鸡尾酒,你在一种非常特殊的人身上反复看到:科学家。

我只是一个无名小卒,但是像莱纳斯·托沃兹、阿尔伯特·爱因斯坦和理查德·费曼这样的人呢?(或者更直接地说,像比尔·盖茨、拉里·佩奇和史蒂夫·沃兹尼亚克这样的人)如果你读到任何关于他们个性的东西,你会很快被他们身上有多少好奇的黑客特质所震惊。爱因斯坦是如何提出他著名的狭义相对论的?当他 16 岁时,他试图想象骑着一束光会是什么样子。没有人付钱给他,他只是在玩弄一个巧妙的想法。

学术界以外的一些人想象科学家是非常刻板、正式的人,研究按照非常正式的时间表进行(是的,对我的学术和技术读者来说,我知道这种想法对你来说很奇怪,但许多人确实相信这一点,研究对许多人来说是一个陌生的世界)。有时这是真的,但是,通常情况下,没有什么比这更偏离事实了。最好的科学家是有创造力的,好奇的,而且通常是古怪的。当你听到科学家解释他们为什么进入科学领域,或者他们如何想出他们最伟大的想法时,你会一次又一次地看到这一点:他们更多地遵循内在的好奇心,而不是任何外在的激励因素。太疯狂了,我们这个时代有多少绝对重要的技术仅仅是因为某个家伙曾经在实验室里摆弄过什么东西而产生的。请记住:

***“闲逛和科学的唯一区别是把它写下来”

我们要感谢好奇的黑客们发明了现代物理学、计算机、互联网,谁知道我们的现代世界还有多少。这些人很重要,他们有所作为,这就是为什么我认为理解他们的心理很重要,同样理解政治领导人的个性也很重要(这往往与 T4 大相径庭)。

但是,我也认为另一个原因很重要:因为当这些看起来非常积极和友善的个性变得危险时。

黑客的阴暗面

好奇的黑客创造了互联网,好奇的黑客创造了许多伟大的东西。现在我讨厌成为那个在谈论 AI 时总是去这个地方的家伙,但是你知道什么是肯定是由好奇的黑客制造的吗?核弹。****

费曼在他的书《费曼先生,你肯定是在开玩笑吧》中描述了他在曼哈顿计划中的经历,读起来就像是一个民族讽刺电影剧本。他对他的科学家同事搞恶作剧,和行政部门闹得不可开交,经历各种各样的可怕事情。我记得当我十几岁的时候第一次读到它的时候,我所能想到的就是“天哪,这听起来很有趣!”。不仅仅是费曼,许多科学家也有类似的曼哈顿计划的故事(尽管不那么边缘漫画化)。而我完全明白为什么。你可以从事你那个时代最酷、最疯狂的技术,基本上没有任何限制,没有预算限制,周围都是你这一代最聪明、最酷的人。对我来说,那听起来像天堂。**

但是后来,1945 年 7 月 16 日。关于这如何影响目睹它的科学家有多种说法,对许多人来说,这是一个突然的、黎明的恐怖。

“我们做了什么?”

罗伯特·奥本海默(Robert Oppenheimer)的一句令人心寒的话完美地说明了这一点,这句话似乎是令人心寒的话的无穷来源:

“当你看到一些技术上很好的东西时,你就去做,只有在你取得技术上的成功后,你才会争论该怎么办。原子弹就是这样。”罗伯特·奥本海默

这就是为什么理解好奇的黑客是如何工作的,即使(或特别是如果)你是一个如此重要。

在很大程度上,好奇的黑客是你见过的最好、最善良的人。曼哈顿计划中肯定有很多鹰派,但你只需要看看有多少前曼哈顿科学家最终成为最直言不讳的反核活动人士,就能明白事情变得如此糟糕。

我可能是你能想象到的最善良、最有意图的人之一。我不想伤害任何人,从来没有。这会让你产生一种虚假的安全感。“我不想伤害任何人,所以我不会那么做,简单!我是个好人,我绝不会做坏事。我的行为永远不会对他人构成威胁。”

但是许多好奇的黑客,包括我自己,不管是好是坏,经常成为他们好奇心的奴隶。有时候,在狂热地研究我最新的令人厌恶的人工智能(相信我,GPT2 不是我最古怪的项目)时,我会暂停一会儿,耳机里传来赛博朋克合成音乐,我会问自己:“我是黑镜角色吗?”

你可以想象得到,我是反战的,支持人类的,但是如果我生活在 40 年代,美国邀请我研究原子弹……我不知道我是否会拒绝。

不是因为我想伤害别人,这是了解好奇黑客的重要一点,而是因为它实在是太他妈酷了。分裂物质本身的基本构件来制造大爆炸?那就是他妈的牛逼!**

如果好奇心真的能杀死猫,那么,嗯……

拥抱好奇的黑客

现在会有很多非常严肃的人读到这里,嘲笑以高人一等的姿态被解雇,他们会说:“所以你说的是你在用一个可爱的标签来合理化你残酷、自私的本性?就是不要做那些坏事!**

这只不过是一个掌声灯,意味着听起来明智和伟大,让每个人点头同意和鼓掌,但缺乏任何实际有用的贡献。我的全部观点是,是的,有坏人出于坏的原因做坏事,而且关于这种危险行为已经说了很多。但是好奇的黑客不是那种典型,他们出于不同的原因做危险的事情。我们在媒体上看到了大量导致危险行为(贪婪、虐待狂等)的“传统”人格特征的描述,但我认为对危险的来源,即好奇的黑客原型关注太少。(来自漫威电影宇宙的托尼·斯塔克是一个明显的例外。当我表达我完全理解托尼为什么在《复仇者联盟 2》中塑造奥创时,我经常受到奇怪的目光。很多人觉得他在那部电影中的行为完全是愚蠢和不可理解的)每个人都明白坏人做坏事,但我们很难把握好人是如何被引导去做坏事的(即使如此也可以说是现实世界中的默认案例)。

我们冒着风险避开好奇的黑客。因为人们犯的错误而妖魔化他们,尤其是聪明和善意的人,是非常短视的。好奇的黑客已经给了我们许多现代世界所能提供的最好的东西,他们将继续这样做。因为他们不能停下来,他们知道他们不能。

与其将此视为对好奇的黑客的批评,我希望这是对理解和自我完善的呼吁。我们,不管是不是好奇的黑客,都需要理解这个原型的光明面和黑暗面。我们在硅谷看到的这么多问题是因为它基本上成了好奇的黑客的飞地,一个数字化的 21 世纪曼哈顿项目(对我来说,这听起来又像是天堂)。

对于那些不好奇的黑客,我想让你了解他们的思维方式。当然也有例外,但一般来说,好奇的黑客都不是坏人。他们通常是最理想主义和最善良的人。正如尤瓦尔·赫拉利(一位著名的硅谷评论家)所说:

***“我见过许多这样的高科技巨头,他们通常都是好人。他们不是匈奴人阿提拉。在人类领袖的抽签中,你可能会变得更糟。”

好奇的黑客会做坏事,做危险的事,但我们都一样。通过相互理解,我们可以原谅,并找到改进的方法。

对于那些好奇的黑客来说,我的信息很简单:注意你的阴暗面。你可能不会觉得自己做了什么坏事,我相信你。我相信你只是出于好玩的好奇心和对人类乐观的希望。怎么会有比这更纯洁的东西呢?但是历史给了我们一个清晰的教训。直到 2014 年,几乎连 AI 安全都没人当回事。许多人仍然不这么认为,尽管只需一次斯图亚特·罗素的演讲就能推翻大多数反驳。我们需要变得更好。

我们需要的不是回避好奇的黑客,而是拥抱他们。我们需要利用他们所能利用的一切优势,并找到负责任的方式来管理风险。

所以我也在努力改进,尽我所能。我可以直接把 15 亿美元扔到网上。我想。当我第一次读到 OpenAI 没有发布 1.5B 时,我非常恼火。信息要免费,妈的,我要看!但是一旦我有了精灵,我就慢慢来了。在把它从瓶子里放出来之前,我想了想我想做什么。我仍然得出结论,我想让它出来,但现在我这样做是有原因的,而不仅仅是因为它很酷。这也是为什么我等了更长时间才发布,因为我足够谦虚地意识到,也许我在逻辑上犯了一个可怕的错误,我根本不应该发布它。我已经接受了自己的阴暗面,并尽我所能负责任地处理它。我认为这很好,因为这仍然是低风险,没有人会死于 GPT2(可能)。但是,十年或二十年后,当我拿到博士学位,新的曼哈顿计划来敲门时,会发生什么呢?

我希望我已经吸取了教训。

如果你喜欢你所读的,继续阅读第二部分 ****

GPU 加速数据分析和机器学习

原文:https://towardsdatascience.com/gpu-accelerated-data-analytics-machine-learning-963aebe956ce?source=collection_archive---------9-----------------------

未来就在这里!使用 Python RAPIDS 库支持加速您的机器学习工作流。

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

(Source: https://res.infoq.com/news/2018/10/Nvidia-keynote-gtc/en/resources/1BFA0900F-5083-497B-8275-B80D87C9CFF8-1539179054604.jpeg)

介绍

GPU 加速如今变得越来越重要。这一转变的两个主要驱动因素是:

  1. 世界上的数据量每年都在翻倍[1]。
  2. 由于量子领域的限制,摩尔定律现在即将结束。

作为这种转变的一个证明,越来越多的在线数据科学平台正在添加支持 GPU 的解决方案。一些例子是:Kaggle,谷歌合作实验室,微软 Azure 和亚马逊网络服务(AWS)。

在本文中,我将首先向您介绍 NVIDIA 开源 Python RAPIDS 库,然后向您展示 RAPIDS 如何将数据分析速度提高 50 倍。

本文使用的所有代码都可以在我的 GitHubGoogle 联合实验室上找到,供您使用。

湍流

在过去的几年中,为了处理大量的数据,已经提出了许多解决方案。一些例子是 MapReduce、Hadoop 和 Spark

RAPIDS 现在被设计成数据处理的下一个发展阶段。由于其 Apache Arrow 内存格式,与 Spark 内存处理相比,RAPIDS 的速度提高了大约 50 倍(图 1)。此外,它还能够从一个 GPU 扩展到多个 GPU[3]。

所有的 RAPIDS 库都是基于 Python 的,并且被设计成拥有 Pandas 和 Sklearn 这样的接口来促进采用。

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

Figure 1: Data Processing Evolution [3]

所有的 RAPIDS 包现在都可以免费在 Anaconda、Docker 和 Google Colaboratory 等基于云的解决方案上使用。

RAPIDS 结构基于不同的库,以便加速端到端的数据科学(图 2)。它的主要组成部分是:

  • cuDF =用于执行数据处理任务(熊猫喜欢)。
  • cuML =用于创建机器学习模型(Sklearn like)。
  • cuGraph =用于执行绘图任务(图论)。

RAPIDS 还集成了:用于深度学习的 PyTorch & Chainer、用于可视化的 Kepler GL 和用于分布式计算的 Dask。

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

Figure 2: RAPIDS architecture [3]

示范

我现在将向您演示,与使用 Pandas 和 Sklearn 相比,使用 RAPIDS 如何能够实现更快的数据分析。我将使用的所有代码都可以在谷歌合作实验室上获得,所以你可以自由地自己测试它!

为了使用 RAPIDS,我们首先需要使我们的谷歌协作笔记本能够与特斯拉 T4 GPU 一起在 GPU 模式下使用,然后安装所需的依赖项(指南可在我的谷歌协作笔记本上获得)。

预处理

一旦一切就绪,我们就可以导入所有必要的库了。

在这个例子中,我将向您展示与仅使用 Sklearn 相比,RAPIDS 如何加快您的机器学习工作流。在这种情况下,我决定使用 Pandas 来预处理 RAPIDS 和 Sklearn 分析。在我的谷歌合作实验室笔记本上也有另一个例子,我用 cuDF 代替预处理。使用 cuDF 而不是 Pandas,可以导致更快的预处理,特别是在处理大量数据的情况下。

对于本例,我决定使用由三个要素和两个标注(0/1)组成的高斯分布来构建一个简单的数据集。

已经选择了分布的平均值和标准偏差值,以便使这个分类问题相当容易(线性可分数据)。

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

Figure 3: Sample Dataset

创建数据集后,我将它的特征和标签分开,然后定义一个函数对其进行预处理。

现在我们有了训练/测试集,我们终于准备好开始我们的机器学习了。在这个例子中,我将使用 XGBoost(极端梯度推进)作为分类器。

湍流

为了在 RAPIDS 中使用 XGBoost,我们首先需要将我们的训练/测试输入转换成矩阵形式。

接下来,我们可以开始训练我们的模型。

上述单元的输出如下所示。使用 RAPIDS 提供的 XGBoost 库只花了不到两分钟来训练我们的模型。

CPU times: user 1min 54s, sys: 307 ms, total: 1min 54s
Wall time: 1min 54s

此外,RAPIDS XGBoost 库还提供了一个非常方便的函数,可以对数据集中每个特性的重要性进行排序和绘图(图 4)。

这对于减少我们数据的维度非常有用。事实上,通过选择最重要的特征并在此基础上训练我们的模型,我们将降低过度拟合数据的风险,并且我们还将加快训练时间。如果你想了解更多关于特性选择的信息,你可以阅读我的文章。

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

Figure 4: XGBoost Feature Importance

最后,我们现在可以计算我们的分类器的准确性。

我们使用 RAPIDS 的模型的整体准确性等于 98%。

XGB accuracy using RAPIDS: 98.0 %

Sklearn

我现在将使用普通的 Sklearn 重复相同的分析。

在这种情况下,训练我们的模型只花了 11 分钟多一点。这意味着使用 Sklearn 解决这个问题比使用 RAPIDS (662s/114s)慢 5.8 倍。通过在预处理阶段使用 cuDF 而不是 Pandas,我们可以为这个例子的整个工作流减少更多的执行时间。

CPU times: user 11min 2s, sys: 594 ms, total: 11min 3s
Wall time: 11min 2s

最后,利用 Sklearn 计算了模型的整体精度。

此外,在这种情况下,总体准确率等于 98%。这意味着使用 RAPIDS 可以更快地得到结果,而不会影响模型的准确性。

XGB accuracy using Sklearn: 98.0 %

结论

正如我们从这个例子中看到的,使用 RAPIDS 导致了执行时间的持续减少。

这在处理大量数据时非常重要,因为 RAPIDS 能够将执行时间从几天减少到几小时,从几小时减少到几分钟。

RAPIDS 提供了有价值的文档和示例来充分利用它的库。如果你有兴趣了解更多,这里有一些例子这里这里

我另外创建了另外两个笔记本来探索 RAPIDS cuGraph 和 Dask 库。如果你有兴趣了解更多,这里有这里有这里有

联系人

如果你想了解我最新的文章和项目,请在 Medium 上关注我,并订阅我的邮件列表。以下是我的一些联系人详细信息:

文献学

[1]什么是大数据?—大数据世界入门指南。阿努什里·苏布拉马年,爱德华卡!。访问地点:【https://www.edureka.co/blog/what-is-big-data/

[2]不再有晶体管:摩尔定律的终结。有趣的工程学,约翰·雷夫勒。访问地址:https://interesting engineering . com/no-more-transistors-the-end-of-Moores-law

[3]急流:平台内外,乔希·帕特森 10–23–2018。访问网址:http://on-demand . gputechconf . com/gtcdc/2018/pdf/DC 8256-rapids-the-platform-inside-and-out . pdf

[4] GPU 加速的数据科学|英伟达 GTC 主题演示。黄仁勋。访问地点:https://www.youtube.com/watch?v=LztHuPh3GyU

MacOS 上 GPU 加速的机器学习

原文:https://towardsdatascience.com/gpu-accelerated-machine-learning-on-macos-48d53ef1b545?source=collection_archive---------4-----------------------

苹果可能不喜欢 NVIDIA 卡,解决方案叫 PlaidML+OpenCL

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

PlaidML is a software framework that enables Keras to execute calculations on a GPU using OpenCL instead of CUDA. This is a good solution to do light ML development on a Mac without a NVIDIA eGPU card.

大规模并行编程对于在相似输入上多次应用相同操作的情况下加速计算非常有用。如果你的代码包含许多ifcase语句,你可能想在使用的 CPU 上运行,例如 OpenMPI 。如果你的代码涉及到随机数的生成,并行编程可能不是最好的解决方案(不过,这里见)。否则,你很可能是在正确的地方,所以继续阅读!

训练一个神经网络涉及非常大量的矩阵乘法。这是典型的大规模并行操作,这也是 GPU 对机器学习至关重要的主要原因之一。需要记住的一条经验法则是,1K 个 CPUs = 16K 个内核= 3 个 GPU,尽管 CPU 可以执行的操作种类远远超过单个 GPU 内核。对于 GPU 来说,实力在数量!

iMac 和 MacBook Pro 电脑配备了 AMD 镭龙 GPU 卡。不幸的是,这种硬件不能直接用于加速机器学习应用中典型的计算,例如训练 CNN。虽然没有适用于所有可能应用的解决方案,但是仍然有一个基于并行编程语言 OpenCL 的简单架构的解决方案。

两个最流行的 ML 框架 KerasPyTorch 支持基于通用 GPU 库 NVIDIA CUDA 的 GPU 加速。CUDA 只适用于 NVIDIA GPU 卡。

NVIDIA 外置 GPU 卡(eGPU)可用于带有雷电 3 端口的 MacOS 系统和 MacOS High Sierra 10.13.4 或更高版本。按照 本指南 安装 eGPU。

在 MacOs 上安装 CUDA 遵循 官方文档 。这里可以找到 驱动

使用 Python 的 OpenCL

项目 PyOpenCL 可能是在 Mac 上开始使用 GP-GPU 的最简单的方法。另见其姊妹项目 PyCUDA

$ pip install pyopencl

OpenCL 的核心是一个内核,这是一个可以应用于大量输入数据的函数(用类似于 C 的语言编写)。

要了解并行编程,请阅读基于 CUDA 的在线课程 ,或者购买 Tim Mattson et al 撰写的本书

OpenCL 比 CUDA 更灵活,允许程序在不同的架构上执行。这是有代价的:需要编写一些“样板”代码来定义一个上下文 ( 什么样的硬件可用)、一个队列 ( 一个命令序列)和一组内存标志( READ_ONLYWRITE_ONLY等。).典型的工作流程如下:

  1. 输入数据被复制到 GPU 内存中
  2. GPU 缓冲存储器被保留用于存放计算结果
  3. 内核被执行
  4. 结果从 GPU 内存复制到主机内存

NB: OpenCL 内核可以在 CPU 和 GPU 上执行,但是如果代码针对某个 GPU 架构进行了高度优化(例如具有大内存),它可能无法完全移植。

虽然 GPU 通常更快,但根据处理器的架构,将大量数据从 CPU 传输到 GPU 所需的时间可能会导致更高的开销时间。

下面是一个计算两个矩阵之和的全功能 OpenCL 程序示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import absolute_import, print_function
import numpy as np
import pyopencl as cla_np = np.random.rand(50000).astype(np.float32)
b_np = np.random.rand(50000).astype(np.float32)ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)mf = cl.mem_flags
a_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a_np)
b_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b_np)kernel = """
__kernel void sum(
    __global const float *a_g, __global const float *b_g, __global float *res_g)
{
  int gid = get_global_id(0);
  res_g[gid] = a_g[gid] + b_g[gid];
}
"""prg = cl.Program(ctx, kernel).build()res_g = cl.Buffer(ctx, mf.WRITE_ONLY, a_np.nbytes)
prg.sum(queue, a_np.shape, None, a_g, b_g, res_g)res_np = np.empty_like(a_np)
cl.enqueue_copy(queue, res_np, res_g)# Check on CPU with Numpy:
print(res_np - (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))
assert np.allclose(res_np, a_np + b_np)

使用 OpenCL 作为 Keras 后端的机器学习(PlaidML)

Keras 是最流行的深度学习框架之一。使用 Keras’ 功能 API定义网络架构、运行训练和执行推理非常容易。然而,Keras 本身并不执行实际的计算,而是部署其他软件库来定义、优化和评估涉及多维数组的数学表达式。最常见的有 TheanoTensorFlow 。反过来,这些库使用 CUDA 在 GPU 上执行并行计算。如前所述,这带来了非常强的硬件限制,即它只能在 NVIDIA 卡上工作。

通过使用 PlaidML 库可以部分避免这个问题:

$ pip install plaidml-keras

安装之后,执行安装脚本(选择默认,除非您知道自己在做什么):

$ plaidml-setup

您应该会看到类似这样的内容:

PlaidML Setup (0.6.4)Thanks for using PlaidML!Some Notes:
  * Bugs and other issues: https://github.com/plaidml/plaidml
  * Questions: https://stackoverflow.com/questions/tagged/plaidml
  * Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
  * PlaidML is licensed under the Apache License 2.0 Default Config Devices:
   metal_amd_radeon_r9_m380.0 : AMD Radeon R9 M380 (Metal)Experimental Config Devices:
   llvm_cpu.0 : CPU (LLVM)
   opencl_amd_radeon_r9_m380_compute_engine.0 : AMD AMD Radeon R9 M380 Compute Engine (OpenCL)
   opencl_cpu.0 : Intel CPU (OpenCL)
   metal_amd_radeon_r9_m380.0 : AMD Radeon R9 M380 (Metal)Using experimental devices can cause poor performance, crashes, and other nastiness.Enable experimental device support? (y,n)[n]:Selected device:
    metal_amd_radeon_r9_m380.0Almost done. Multiplying some matrices...
Tile code:
  function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.Save settings to /Users/user/.plaidml? (y,n)[y]:
Success!

该库支持许多但不是所有的 Keras 层。如果您的架构只涉及密集层、LSTM 层、CNN 层和漏层,那么您当然很好,否则请查看文档。

原则上,您所要做的就是在您的程序前添加以下代码行来激活 PlaidML 后端:

import osos.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

在执行过程中,您应该会看到如下打印输出:

Using plaindml.keras.backend backendINFO:plaidml:Opening device "metal_amd_radeon_r9_m380.0"

这是一个示例,改编自 Keras 的官方文档,应该可以开箱即用:

#!/usr/bin/env pythonimport osos.environ["KERAS_BACKEND"] = "plaidml.keras.backend"import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as Kbatch_size = 128
num_classes = 10
epochs = 12# input image dimensions
img_rows, img_cols = 28, 28# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

在 2015 款 iMac (3.2 GHz 英特尔酷睿 i5,16 GB DDR RAM,AMD 镭龙 R9 M380 2 GB GPU)上,使用 PlaidML/OpenCL GPU 后端训练需要 1m50s ,使用 TensorFlow-2.0/CPU 后端训练需要 5m06s

注意,如果没有可用的后端,指令from keras import backend as K将返回一个错误。例如,如果您没有安装TensorFlow(默认),您会看到:

Using TensorFlow backend.
Traceback (most recent call last):
  File "./test_keras.py", line 8, in <module>
    import keras
  File "/Users/Riccardo/development/venv_opencl/lib/python3.7/site-packages/keras/__init__.py", line 3, in <module>
    from . import utils
  File "/Users/Riccardo/development/venv_opencl/lib/python3.7/site-packages/keras/utils/__init__.py", line 6, in <module>
    from . import conv_utils
  File "/Users/Riccardo/development/venv_opencl/lib/python3.7/site-packages/keras/utils/conv_utils.py", line 9, in <module>
    from .. import backend as K
  File "/Users/Riccardo/development/venv_opencl/lib/python3.7/site-packages/keras/backend/__init__.py", line 89, in <module>
    from .tensorflow_backend import *
  File "/Users/Riccardo/development/venv_opencl/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 5, in <module>
    import tensorflow as tf
ModuleNotFoundError: No module named 'tensorflow'

最后一点,TensorFlow >=2.0包括 Keras API。如果你的程序是从 TF 定义层,而不是从 Keras 定义层,那么你不能仅仅改变 Keras 后端来运行在支持 OpenCL 的 GPU 上,因为 TF2 不支持 OpenCL 。更具体地说:

这不会使用 GPU(假设你已经安装了TensorFlow >=2.0)

from tensorflow import keras
from tensorflow.keras import layers

这将工作得很好(假设你已经安装了Keras)

import keras
from keras import layers

用 Tile 编写 OpenCL 内核

事实证明,PlaidML 不仅仅是一个 Keras 后端。事实上,它附带了一种叫做 Tile 的编程语言,帮助用户编写优化的内核,而不需要深入了解 C 和 OpenCL 的大部分古怪之处。Tile 指令看起来更像数学函数。例如,矩阵乘法

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

在瓷砖上看起来像这样

function (A[M, L], B[L, N]) -> (C) {
    C[i, j: M, N] = +(A[i, k] * B[k, j]);
}

其中“+”运算符代表数学表达式中的“和”。

更多示例可在文档中找到,包括一些最常见的操作,如矩阵乘法、最小/最大、最大池、卷积、累积和。合成内核时,Tile 展平张量并将索引转换为指针偏移量。计算被分成适合内存的,其大小根据可用硬件进行优化。然后在 GPU 内存中布置图块,以优化 SIMDs 指令,如乘法和累加。最后,内核被写出来,就好像它们是由人类用户创建的一样,并被传递给 OpenCL 进行实际执行。

结论

PlaidML 现在是英特尔人工智能集团 Vertex.ai 的一部分。它可能最终使 AMD 卡(可能会有更多的厂商出现)成为 ML 中一个可行的选择。事实上,英特尔也将在 2020 年进入 GPU 市场,为数据中心的 ML 设计硬件,这可能通过竞争进一步降低计算价格。英特尔首席执行官 Bob Swan 表示“2020 年,我们将继续扩大我们的 10 纳米产品组合,推出令人兴奋的新产品,包括人工智能推理加速器、5G 基站 SOC、用于服务器存储的至强 CPU、网络和独立 GPU。本季度,我们的首款独立 GPU DG1 实现了通电退出,这是一个重要的里程碑。”。敬请关注!

GPU 数据科学:将 CSV 转换为 Parquet / ORC 比使用集群更快更便宜!

原文:https://towardsdatascience.com/gpu-datascience-converting-csv-to-parquet-orc-faster-cheaper-than-using-a-cluster-c4b20d969009?source=collection_archive---------29-----------------------

在本地,有一句话已经说了很久了:“我们用启动资金处理企业级数据”——我们需要以更低的成本做到这一点!

这可能会令人沮丧——老实说,我曾经梦想过能够在几分钟内而不是几个小时内启动一个 1000 节点的集群来进行一些痛苦的处理会好得多。因此,我开始尝试一些替代方法,不仅加快我们的数据科学工作,还让它更便宜!

其中一种方法是利用 GPU 的能力。

是什么让 GPU 对数据科学有好处?

GPU 基本上是一个自包含的集群。NVIDIA 芯片有所谓的“CUDA 核心”,每个核心都是一个微型处理器,可以像 CPU 一样执行一些代码。

一款流行的消费级 GPU——GTX 1080 Ti 如下图所示,它显示该卡拥有 3584 个 CUDA 内核,可以并行处理这些数据。

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

Courtesy of videocardz.com

为什么用 CSV 到 ORC 或者拼花为例?

很简单,因为从计算上来说这是一件相对困难的事情。为了从基于行转换到基于列,需要透视整个数据集

最重要的是,数据被分割成条带,需要计算各种统计数据,并且要编写包含所保存数据摘要的文件页眉和页脚。

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

https://www.reddit.com/r/dataengineering/comments/bd5h54/eli5_columnar_databasesdata_storage/

设置

我家里有一个 QNAP NAS,非常适合这次演示,因为我需要大量的存储,它有以下硬件和软件:

  • 14TB SATA (Raid 10)
  • 英伟达 Geforce GTX 1060 6GB
  • Rapids.ai(通过 Docker)

Rapids.ai 是一个由 NVIDIA 人员支持的开源框架,它提供了 GPU 优化的数据帧和各种其他工具来简化这一过程!

数据集

我们为一个客户端创建了一个数据集,它是 117GB 的压缩 CSV 文件(大约 400GB 未压缩),大约有 20 亿行。我们需要将它转换成 ORC 格式,这样我们就可以将它插入我们的平台数据仓库(基于 Presto)。

在 GPU 上处理 CSV 到 ORC

注意:我已经包括了在标准 SATA 驱动器上运行时下面每个步骤的时间

第一步是创建一个包含所有 CSV 数据的 Dask GPU 数据帧。我的 GPU 只有 6GB,因此这里的限制是每个未压缩的块必须适合 GPU 内存,如果您以较少的大文件导出 CSV 数据,这可能会导致问题——在这种情况下,您应该处理未压缩的数据。

CPU times: user 1.82 s, sys: 870 ms, total: 2.69 s
Wall time 6.99 s

第二步是将数据重新划分为更易于管理的文件数量——这里的内存限制再次限制了您可以做的事情(尽管 Rapids.ai 团队正在进行这项工作)。

CPU times: user 60.2 ms, sys: 159 µs, total: 60.4 ms
Wall time: 57.6 ms

最后,获取这个新的数据帧并将其写出到 ORC 文件中:

CPU times: user 1h 4min 4s, sys: 30min 19s, total 1h 34min 23s
Wall time: 41min 57s

所以总共 42 分钟处理 400 GB CSV 数据给 ORC

测试回顾

当然,这个测试并不完美。有许多可以改进的地方。对我来说,最大的烦恼是我必须指定大量的分区,以便保持在我的 GPU 限制内。

激流勇进有一些票打开来解决这个,不过:
https://github.com/rapidsai/cudf/issues/3542
https://github.com/rapidsai/cudf/issues/3342
https://github.com/rapidsai/cudf/issues/3004

他们在开发方面非常积极,所以我只是假设这是处于风口浪尖的一部分!

磁盘速度:

同样,在 SATA 驱动器上运行该测试。42 分钟是一个了不起的结果,比运行 Presto 或类似的 21 节点大型实例集群的类似规模的数据集快得多。
我确实在 NVMe 驱动器上运行了这个,返回了 31 分钟,但是我认为可以通过运行单独的 NVMe 驱动器来进一步减少这个时间,以避免 IO 冲突。

结论

GPU 正迅速成为使用集群完成数据科学任务的廉价而现实的替代方案。与拥有 21 个节点的大型集群相比,部署单个 AWS GPU 实例的成本大约是前者的 1/10,探索这种数据处理方法比以往任何时候都更有意义。

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

抓住多少?跟我谈数据!

原文:https://towardsdatascience.com/grabchat-much-talk-data-to-me-40743ec5a75f?source=collection_archive---------41-----------------------

作者:杰森·李劳拉·伊姆

2016 年 9 月,GrabChat 诞生了,这是一个旨在实现乘客和司机伙伴之间无缝沟通的平台。从那时起,Grab 通过引入即时翻译、图像和音频聊天等功能不断改善 GrabChat 体验,结果是取消率降低了 50%!我们甚至尝试了各种功能在每个国家提供超本地化的体验!那么有了这些功能,我们的用户反应如何呢?让我们对此进行更深入的研究,从我们在新加坡、马来西亚和印度尼西亚的数据中发现一些有趣的见解。

最健谈的国家

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

在两年前的一篇博客文章中,我们揭示了印度尼西亚是东南亚最健谈的国家。我们的最新数据没有什么不同。印度尼西亚仍然是三个国家中最健谈的国家,平均每次预订有 5.5 次聊天,而新加坡是最不健谈的国家!此外,新加坡的乘客比司机伴侣更健谈,而其他两个国家的情况正好相反。

但是人们都在谈论什么呢?

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

Common words in Indonesia

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

Common words in Singapore

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

Common words in Malaysia

不出所料,大多数聊天都围绕着搭讪点。这三个国家之间有许多相似之处,例如打招呼如“嗨”和“谢谢”,以及司机伴侣/乘客来了。然而,各国之间还是有细微的差别。你能认出他们吗?

在印度尼西亚,聊天通常是用印度尼西亚语进行的,而且大多是司机伙伴感谢乘客使用 Grab。

另一方面,新加坡的聊天倾向于用英语,而且大多包含上车地点,比如停车场。在新加坡的语境中有很多独特的词,如“垃圾道”和“街区”,反映了新加坡随处可见的 HDB(公共住房)的特征,这些公共住房是受欢迎的住宅区。

马来西亚似乎是其他两个国家的混合体,人们用英语和马来西亚语聊天。许多聊天突出了上车地点,如警卫室,以及所有马来西亚人都知道的短语:堵车。

时间趋势

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

对这三个国家的聊天趋势的分析揭示了一个意想不到的发现:从午夜到凌晨 4 点的聊天越来越多。困惑但好奇的是,我们进一步挖掘,以发现是什么促使我们的用户在这种奇怪的时间里说更多的话。

从午夜到凌晨 4 点,商店和商场通常在这些时间关闭,随着人们深夜在镇上闲逛,取货地点变得更加模糊。因此,司机伴侣和乘客倾向于进行更多的对话来确定上车点。这也解释了为什么所有消息中基于 接送位置的消息的比例在 12 点和早上 6 点之间最高。另一方面,这些消息在早上(6am-12pm)不太常见,因为人们往往会从标准的住宅区被接走。

图像趋势

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

GrabChat’s Image-function uptake in Jakarta, Singapore, and Kuala Lumpur (Nov 2018 — March 2019)

GrabChat 上发送图像的功能于 2018 年 9 月推出,旨在帮助司机合作伙伴确定乘客的确切上车位置。在发布的最初几周内,仅在新加坡就有 22,000 张图片被发送出去。从上面的 gif 图中可以看出,雅加达、新加坡和吉隆坡对图片功能的使用有所增加。

通过分析,我们发现更偏远的地区,如新加坡的 Tengah,发送的图像比例往往最高,这表明图像对不熟悉地方的用户很有用。

安全第一

除了图像,Grab 还引入了另外两个功能:模板和音频聊天,以避免司机伴侣在开车时发短信。

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

Templates and audio features used by driver-partners, and a reduced number of typed texts by driver-partners per booking

“模板”(预先填充的短语)允许司机伙伴只需快速点击即可发送模板消息。在我们最近的数据分析中,我们发现几乎 50%的司机合作伙伴文本包含模板。

“音频聊天”和“图像聊天”于 2018 年 9 月推出,该功能的使用一直在稳步增加,音频包括越来越多的司机合作伙伴文本。

随着这两项功能被所有三个国家的司机合作伙伴采用,Grab 在三个月内成功减少了每次预订的司机合作伙伴文本(非模板)的总数。

简短的提货指南

没人喜欢取消的旅程,对吧?在分析了数百万个数据点后,我们发现了一些巧妙的技巧和窍门来帮助你完成你的旅程,我们正在与你分享!

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

这第一个建议可能是显而易见的,但是回复你的司机伙伴会导致更高的完成率。没有人喜欢闷闷不乐,是吗?

接下来,我们发现了可以提高完成率的各种方法,如下图所示。

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

通知司机伙伴你要来了,给他们指路,告诉他们如何识别你,这样完成旅程的机会几乎会翻倍!

最后但同样重要的是,我们不要忘记我们的礼仪。Grab 的数据分析显示,说“谢谢”与完成率的增加相关。另外,要准时到达接车点——记住,对于我们的司机伙伴来说,时间就是金钱!

结论

就像莎士比亚的*中的无事生非一样,*仅仅是一个突发奇想的信息就可以收集到大量的信息。Grab 一直致力于为乘客和司机伙伴提供最佳体验,而数据在帮助我们实现这一目标方面发挥了巨大作用。

这只是这本书的第一页。隐藏在每一页之间的信息量是无穷无尽的。因此,请继续关注我们 GrabChat 平台的更多有趣见解!

梯度增压机(GBM)—Eli 5 方式

原文:https://towardsdatascience.com/gradient-boosting-machines-gbms-the-eli5-way-c4a21b2e2b0a?source=collection_archive---------21-----------------------

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

【GBMs】梯度推进机器(GBMs)是机器学习中的一种集成技术,其中建立个体弱学习者(弱模型)的复合模型,以便组合它们的所有结果并形成强学习者(强模型)。这是因为给定一个映射每一个观察值的数据集 (xi,易),我们和算法总是更容易将整体函数【F(x)分解成个简单的子模块(子函数),而不是必须一次猜测整个表达式。由于这种分而治之的方法,该算法在逼近强模型方面变得非常好,从而减少了预测过程中出现的错误。

简而言之,Boosting 模型旨在提高前一个函数的精度分数,可以递归表示为:

*Fm(x) = Fm-1(x) + fm(x)where,1\. Fm(x) = overall composite function of "m" simpler models
2\. fm(x) = m-th sub-module for Fm(x)
3\. Fm-1(x) = overall compositve function without fm(x)*

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

The overall function y = 30 + x + sin(x) has been broken down into its sub-modules to illustrate how its simpler constituents can individually make an overall difference

**Example:***F(x)  =** 30 + x + sin(x)**f1(x) =** 30
**f2(x) =** x
**f3(x) =** sin(x)**F(x)  =** f1(x) + f2(x) + f3(x)*

在这个例子中,我们可以说,我们正在训练 M = 3 个弱学习者来近似整体函数f1(x)+F2(x)+F3(x)**

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

我们训练我们的复合学习器,使得每一次迭代的输出值都向真实值的方向推进。在上图中,我们看到一名高尔夫球手试图通过不同强度和方向的努力将球击入洞中。梯度增强以类似的方式工作。

梯度推进决策树

梯度增强决策树(GBDT)是按顺序建模的——每次构建一棵树,其中每个新树负责纠正先前添加的树所产生的错误。尽管与训练随机森林相比,这个训练过程需要更长的时间,但是我们发现 GBDTs 是更好的学习者,即,我们用更少数量的树获得更好的准确度分数。此外,boosting 还可以处理不平衡的数据集。

培训 GBDTs 时需要执行 3 个步骤—

  1. 损失/目标函数被优化
  2. 弱学习者做预测
  3. 加法模型将弱学习者堆积起来,以最小化成本函数。
**Cost Function = average(outputs of Loss Function)**

培训 GBDTs 时需要考虑的事项

梯度推进是一种贪婪的算法,容易过度拟合。我们可以考虑一些参数来优化我们的模型—

  1. 增加树的数量,直到没有观察到改进,以确保我们的模型是可推广的。
  2. 较浅的树(4 - 8 层)是首选,以使模型不那么复杂。
  3. 学习率可以保持在[0.1,0.3]的范围内,甚至小于 0.1。这是因为收缩减少了每棵树对整体模型未来改进的影响。
  4. 也可以通过对权重执行 L1 和 L2 正则化来避免过拟合。一个规则化的目标将倾向于选择一个使用简单和预测函数的模型。

梯度下降

原文:https://towardsdatascience.com/gradient-descent-3a7db7520711?source=collection_archive---------10-----------------------

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

这是一个滑坡,但是保证在底部会变得更好

TL;dr 梯度下降是一种优化技术,用于通过最小化成本函数来改善深度学习和基于神经网络的模型。

在我们之前的帖子中,我们谈到了激活函数(链接这里)以及它在机器学习模型中的应用。然而,我们也大量使用了术语“梯度下降”,这是深度学习模型中的一个关键元素,这将在本文中讨论。

定义和术语

梯度下降是发生在反向传播阶段的过程,其目标是基于权重 w 在相反方向上连续地重新采样模型参数的梯度,不断地更新,直到我们达到函数 J(w)全局最小值

简单来说,我们用梯度下降最小化代价函数, J(w)

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

Fig 1: How Gradient Descent works for one parameter, w

可以用一座陡峭的山来做类比,这座山的底部与大海相接。我们假设一个人的目标是到达海平面。理想情况下,这个人必须一次迈出一步才能达到目标。每一步都有一个负向的梯度(注意:值可以是不同的量级)。这个人继续往下走,直到他到达底部或一个临界点,在那里没有空间再往下走了。

数学

让我们将类比形式化为算法形式。我们计算输入参数的激活度,通过取激活度及其偏差的加权和来执行前馈。我们通过用实际“目标”值减去输出样本来提取误差项。

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

梯度下降过程以反向传播步骤的形式展示,其中我们从最后一层开始反向计算误差向量δ。根据激活函数,我们通过对函数相对于 w 的偏导数来确定需要多少变化。变化值乘以学习率。作为输出的一部分,我们从以前的输出中减去这个值,得到更新的值。我们继续这样,直到我们达到收敛。

在下面的代码中,我想强调如何编写一个简单的代码来可视化梯度下降是如何工作的。运行这段代码;使用 Tanh 激活函数,我们将观察到 10 的当前值在第 10000 次迭代时下降到值 8.407e-06 ,这是我们的全局最小值。

Fig 2: A simple implementation of gradient descent, based on the Tanh activation function

有很多梯度下降算法。下面我就举几个:

  • 批量梯度下降
  • 随机梯度下降
  • 小批量梯度下降

如果你想深入研究最近的一些技术细节,我强烈推荐你去看看 Sebastian Ruder 关于这个话题的文章。

爆炸和消失渐变

在深度网络或递归神经网络中,Pascanu 等人(1994 年)在一篇论文中解释了两个已知问题——爆炸和消失梯度。当我们在代码中迭代进行反向传播时,会发生这种情况,权重矩阵的法线有可能超过 1。如果发生这种情况,梯度爆炸,但如果法线低于 1,梯度消失。

如果我们想可视化爆炸梯度,你会遇到至少一个问题:

  • 该模型将输出“Nan”值
  • 该模型在每一步都会显示非常大的变化
  • 对于训练层中的每个节点,误差梯度值始终高于 1.0。

解决方案:渐变裁剪

为了解决渐变爆炸和消失的问题,我们引入了渐变裁剪,如果渐变超过了某个由最大绝对值表示的阈值,我们就对其进行“裁剪”。因此,我们保持神经网络稳定,因为权重值永远不会达到它返回“Nan”的点。在编码实现中,去除削波的梯度导致损失为“Nan”值或无穷大,并且不能进一步运行。

下面的代码展示了如何执行渐变裁剪。假设我们有一个损失向量和一个学习率,我们能够计算一个梯度向量,然后基于最大 L2 范数值对其进行剪切,在这种情况下,我写为 5。

因此,在一天结束时,当向数据科学家提出使用什么优化器来最大限度地减少损失的问题时,有几个因素需要考虑:

  • 训练数据集的大小
  • 我们需要多快训练数据来实现收敛

参考论文链接:【http://proceedings.mlr.press/v28/pascanu13.pdf

结论

在这篇文章中,我们讨论了很多事情:我们讨论了什么是梯度下降以及它在神经网络中是如何工作的。我们研究了相关的数学,并实现了它的编码版本。最后,我们以消失和爆炸梯度问题的形式讨论了涉及梯度下降的问题,并讨论了使用梯度裁剪的解决方案。在下一堂课中,我们将探索什么是激活函数,以及它们在深度学习模型中如何至关重要,请继续关注!

传播和分享知识。如果这篇文章激起了你的兴趣,请分享给你的朋友或专业人士。更多数据科技相关帖子关注我 这里
我在
Linkedin上也有空,偶尔tweet也有空。😃

梯度下降在 5 分钟内揭开神秘面纱

原文:https://towardsdatascience.com/gradient-descent-demystified-in-5-minutes-f02966704e35?source=collection_archive---------19-----------------------

“我在和一个女孩约会。一切都很好,直到我开始谈论梯度下降。从那以后,一切都走下坡路了。”

嗯,运气不好,但这是她的损失。

这对你没有任何意义吗? 爽,保持阅读。

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

Photo by Stephen Leonardi on Unsplash

如果你没有生活在岩石下,你很可能听说过一种叫做梯度下降的优化算法。但是仅仅因为你听说过它并不意味着你理解它。试着用几句话解释一下,不要使用专业术语。

没那么容易吧?那么你在这里是件好事。让我们开始吧。

梯度下降是一种优化算法,用于找到最小化成本函数的函数参数的最佳值。这听起来可能很奇特,但是试着从视觉上来思考。你有一个大碗,就像你早上吃麦片的那个一样。那个碗是一个成本函数。现在,在碗的表面上任意取一个位置——这些是你的系数的当前值。这个想法是以某种方式达到底部——因此达到一个函数的最小值——因此找到最佳参数。

我们的想法是继续尝试不同的系数值,并评估每个值的成本,然后选择稍微好一点的新系数—成本更低。重复这个过程足够多的次数将引导你到达碗的底部,你将发现系数的最佳值——最佳值意味着它们导致最小的成本。

但是什么是成本函数呢?

在数据科学和机器学习中,成本函数用于估计你的模型有多好或多坏。用最简单的话来说,成本函数是衡量模型在估计特征( X )和目标变量( y )之间关系的能力方面有多差的一种方法。

使用什么作为成本函数并不重要,但最常用的是:

  • 残差平方和( SSR/SSE )
  • 均方误差( MSE
  • 均方根误差( RMSE )

它有时也被称为损失函数或误差函数。你的目标是找到模型的最优参数,也就是最小化成本函数的参数。

现在当你理解了这一点,让我们继续梯度下降。

逐步梯度下降

该算法从设置系数的初始值开始——您可以随意设置值(而不是字符串或布尔值),但通常的做法是将它们设置为 0。如果我有两个系数,比如β0 和β1,我会先将它们设置为零:

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

现在为了简单起见,让我们假设我正在处理一个线性回归任务,这些β是我的系数(β0 是偏差截距)。然后,我将定义我的成本函数,例如 SSR:

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

这可以进一步简化:

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

读起来挺简单的。你做一个预测,然后从实际值中减去这个预测,然后取它的平方。然后,对数据集中每个实例的所有方块求和。

现在到了你应该知道一点微积分的部分来完全理解正在发生的事情。您需要为每个系数计算偏导数,这样系数可以在以后更新。您应该熟悉的主题有:

  • 权力规则
  • 链式法则
  • 多元微分

前一段时间,我写了一篇关于在 Python 中求导的文章,它在一定程度上涵盖了这些主题:

[## 在 Python 中取导数

学习如何处理机器学习中的微积分部分

towardsdatascience.com](/taking-derivatives-in-python-d6229ba72c64)

回到正题。由于我的模型只有两个系数,我需要计算两个偏导数,一个关于β0,另一个关于β1。方法如下:

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

现在到了你使用这两个函数并做一些被称为 epoch 的事情的时候了——这只是一个对数据集进行单次迭代的时髦说法。您正在浏览数据集,关注自己的事情,并跟踪系数的成本—让我们将它们表示为:

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

不知不觉中,您已经到达了数据集的末尾,是时候重新计算系数了。再介绍一个术语——学习率(LR) 。它决定了新获得的信息覆盖旧信息的程度。在初始化系数时,将其设置为某个常数,通常在 0.0001 到 0.1 之间:

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

将学习率设置为太小的值将导致需要大量的历元来寻找最佳参数,而将其设置为太高的值可能会导致算法“跳过”最佳值。需要一个学习率来计算步长——一个告诉算法下一次迭代要走多远的数字。

如果函数在给定点很陡,步长会更大,当接近最佳参数时,步长会减小,从而使算法达到最佳状态。

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

一旦你得到这些计算结果,你可以按如下方式更新系数:

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

简而言之,这是一个时代。重复这个过程 10000 次,你会得到系数的最佳值。

在你离开之前

这应该是一些可管理的文本和可管理的数学,以理解机器学习和深度学习的最基本的主题之一。如果你还是觉得不明白,那就拿起笔和纸,按照方程,手动计算一切。

如果这对你来说听起来有些难以处理,不用担心,几天后我将发表一篇关于使用梯度下降来寻找线性回归的最佳系数值的文章——我将精确地使用上面列出的方程。

现在概念对你来说更清晰了吧?请让我知道。

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

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

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

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

梯度下降:给我看看数学!

原文:https://towardsdatascience.com/gradient-descent-show-me-the-math-7ba7d1caef09?source=collection_archive---------4-----------------------

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

Photo by Martin Jernberg on Unsplash

梯度下降是一种迭代学习算法,也是神经网络的主力。对于 PyTorchKeras 来说,有了许多可定制的例子,构建一个千篇一律的神经网络就成了一项微不足道的工作。然而,当事情出错时,掌握基础知识可以节省大量冗长的调试时间。

在这篇文章中,我们将深入挖掘梯度下降的数学公式,为它建立一个更好的直觉。有些例子很简单,可以手工解决。此外,写下东西有助于记忆,所以请随意拿一张纸和一个计算器!

误差度量

神经网络(NN)做出的预测经常会错过目标,有时会相差很大。我们需要以这样一种方式量化误差,即符号总是正的,并且大的误差被放大。我们定义误差平方和(SSE),用大写字母 E 表示:

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

  • y=基本事实
  • ŷ (y hat)=预测
  • j=网络的输出单位
  • μ ( 希腊字母 mu )= 所有数据点

在 j 上的第一个和中,找出每个真值和它对应的预测值之间的差,求这些差的平方,然后把它们加起来。

接下来我们有 μ 个数据点*。*在第二次求和中,对于我们计算平方距离的内部和的每个数据点,我们对所有这些进行求和。

回想一下,神经网络的预测 ŷ 是由其权重决定的:

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

  • w=重量
  • x=特征
  • i=特征数量

因此,在 SSE 方程中插入 ŷ 的方程,我们可以看到误差取决于权重:

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

因此,我们的目标是确定最小化误差的权重。后者有时被称为由 J(w) 表示的成本函数,其思想是我们对错误的预测进行惩罚。

链式法则

理论

为了找出函数的最小值出现在哪里,我们对它求导。鉴于我们有许多变量,我们将看到链规则如何帮助我们制定这个导数。

在单个输出单元的情况下,其中 j=1,我们可以得到误差 E 相对于权重的导数为:

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

假设 ŷ 是单个激活函数 f 的结果,该函数接受输入 h ,使得 h 接受输入并将其乘以其权重:

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

在误差的导数中替换:

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

注意求和项的偏导数,如果我们写出随机权重 wi:

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

和对 I 的偏导数只有 xi,其他都等于零。我们可以代入 E 的偏导数:

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

相对于某个权重的平方误差的梯度是误差乘以激活函数在 T2 h T3 的导数再乘以输入值 T4 Xi T5 的负值。我们将其乘以学习速率 η (希腊字母 eta)以获得权重步长:

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

为了使我们的符号更容易理解,我们将误差项 δ 定义为误差乘以 h 处激活函数的导数:

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

这将重量步骤简化为:

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

用更一般的符号来写:

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

单输出单元示例

现在我们有了如何进行的想法,我们可以将它应用到单个输出单元上。我们使用由 S 表示的 sigmoid 函数作为激活函数。回想一下,激活函数的一般符号是 f(h):

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

sigmoid 函数的一个特殊之处在于其导数的最大值为 0.25。查看这篇帖子以获得如何计算其导数的指导。

用 python 实现它:

现在让我们定义初始特征、权重和学习速率:

根据上面的公式,我们可以如下计算重量的变化:

梯度下降通用实现

在大多数应用中,我们将有不止一个节点。因此,我们需要改变我们计算误差的方式,以避免对可能导致梯度发散的大误差求和。我们引入均方误差:

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

  • m=数据中的记录数

我们可以将对数据集应用梯度下降的一般算法定义如下:

  1. 将重量步长设置为零:wi = 0
  2. 对于培训数据中的每条记录:
  • 向前通过网络,并计算输出 ŷ
  • 计算输出单元的误差项 δ
  • 更新权重步长:δwi =δwi+δXi

3.更新权重:wi = wi+ηδwi/m

4.重复 e 个时期

在这一点上,我们如何初始化权重成为一个相关的问题。我们希望权重足够小,以使 sigmoid 的输入位于 0 附近的线性区域,并且不会在高端和低端受到挤压。

我们遵循斯坦福 CS231n 规定的方法,随机初始化它们,使它们都有不同的初始值并发散,打破对称性。因此,我们从以 0 为中心的正态分布初始化权重,并以 1/sqrt(n)对其进行缩放,其中 n 是输入单元的数量。

对于具有 n _ recrods 和 n_features 的数据集,我们可以用 python 实现如下:

反向传播

到目前为止,我们已经了解了如何计算输出节点中的误差并向前传播误差。我们也可以使用反向传播来反向传播误差。

层的输出由层之间的权重决定,因此由单元产生的误差由相应的权重来缩放。

考虑归因于输出单元 k 和隐藏层 h 的隐藏单元 j 的误差 δ 。我们可以这样写这个错误:

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

  • o =输出层
  • h=隐藏层
  • j =的隐藏单位
  • k=输出单位

梯度下降步骤与前面定义的步骤相同,但增加了下标以标识操作发生的位置:

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

  • wij=输入层和隐藏层之间的权重
  • xi=输入单位值

因此,权重步长等于上面计算的步长乘以该层的输出误差乘以该层的输入值:

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

  • δ输出 =输出误差
  • V in =层的输入,如输出单元的隐藏层激活

反向传播手算

如果你还没有纸和笔,现在是个好时机😉。

考虑下面从底部流向顶部的两层神经网络。我们有两个输入值,一个隐藏单元和一个输出单元。

我们还在隐藏和输出单元应用了 sigmoid 激活函数。我们可以使用其他激活, PyTorch 文档列出了许多带有相应图形的公式。

请注意,输入的相应权重用黑色写在线旁边。

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

Photo credit: Udacity.com

为了这个例子的目的,让我们假设我们的目标输出是 y=1

我们从正向传递开始,从输入到隐藏单元:

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

隐藏单元的输出随后被激活:

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

对于输出注释,我们将重量倍增与激活相结合:

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

回想一下,导数 sigmoid 激活函数如下:

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

因此,输出单元的误差项为:

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

进一步通过网络,我们计算带有传播的隐藏单元的误差项。回想一下,每个隐藏层对误差的贡献与其权重成比例:

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

在上面的等式中,我们通过将输出单元连接到隐藏单元的权重 W 来缩放来自输出单元的误差项。在我们的例子中,我们只有一个隐藏节点,可以将上面的表达式简化为:

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

学习率乘以输出单元误差乘以隐藏单元激活值等于隐藏到输出的权重步长:

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

因此,连接隐藏到输出层的当前权重 W=0.1 将被更新这个数量。

最后一步是输入隐藏权重。更新等于学习率乘以隐藏单元误差,再乘以输入值:

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

随着权重的更新,我们可以重复上述步骤,直到我们的预测变得几乎等于地面真相。

请注意,如果我们有许多层,使用 sigmoid 激活函数会将输入附近层中的权重步长快速降低到微小值。这不是别人,正是消失渐变问题

数字示例

我们可以在 NumPy 中使用稍微复杂一点的网络做同样的事情:三个输入节点,两个隐藏节点,一个输出层。

结论

我们已经看到学习的数学是如何为神经网络工作的。通过上面的练习,我们可以更好地理解错误、激活函数,也许还可以为神经网络构建一个 python 类。

还有更多的资源可以探索,如斯坦福 CS231n。我也强烈推荐 Andrew Trask 的探索深度学习,这是一个很好的资源,有可解释的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值