admin管理员组

文章数量:1645531

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

我如何用人工智能将哈利波特角色重新想象成日本动画

原文:https://towardsdatascience/how-i-used-ai-to-reimagine-harry-potter-characters-as-japanese-anime-87275babb0dc

用文字到图像的人工智能激发你的创意之旅

作者中途生成的霍格沃茨城堡

把一幅字画得如此生动,我甚至不用画。

我相信你看过一个犯罪系列,在那里目击者描述了一个艺术家眼中的罪犯。

然后,艺术家根据一张陌生面孔的零星描述信息拼凑出一幅素描。

而且,我很难相信这位艺术家仅凭这些描述就能画出如此精确的草图。

但是想象一下如果那个艺术家是艾!

这类似于我本周在访问中途时所做的实验——给人工智能发送文本并从中获取图像。

对于那些还没有听说过它的人来说,Midjourney 是一个研究实验室及其人工智能程序的名称,该程序从描述性的 ext 创建图像。《经济学人》用它制作了他们 2022 年 6 月的封面图片。

它作为一个机器人在你的不和谐服务器上工作。你必须登录并获得不和谐邀请。然后,您也可以将机器人添加到您的服务器。他们有一个关于如何开始的简明教程这里。

在这篇文章中,我尝试了一些独特的**——使用 Midjourney 将 哈利波特角色重新制作成日本动漫 。**

这篇帖子旨在激励你,引导你进入创造性人工智能的迷人世界,并分享我学到的经验。

因此,我已经将我使用过的所有提示和生成的图像一起发布了。您可以自由尝试相同的提示或使用不同的提示。

对于每个提示,AI 会生成 4 幅图像——你可以根据自己的选择创建不同的图像,也可以放大你喜欢的图像。这很简单。

所以请坐好,享受这些图像吧!

“重新想象”的人物

首先,简单介绍一下我在图片中使用的艺术风格。我使用了一种叫做 的日本门艺术风格 来生成所有的图像。

这是通过在所有提示中使用 moe art 来完成的。我敢肯定,即使你没有听说过这种艺术风格,你也一定会从一些流行的动漫中认出它!

注意 —所有中途的提示都是以命令想象开始的,就像这样:

**/imagine** *prompt*

因此,在下面的所有例子中,我只提到了提示,以避免重复命令。

让我们从我们的英雄开始!

1.[文学作品]哈利波特

是世界上最知名的虚构人物之一。因此,即使没有太详细的提示,人工智能也能很好地工作。我选择了我认为最合适的一张(以下所有图片都一样)。

提示:

**harry potter face + moe art style + anime  --ar 16:9 --uplight**

由作者通过 Midjourney 生成

2.赫敏·格兰杰

就像哈利一样,我不需要对赫敏做任何更详细的描述。

提示:

**hermione granger + Moe art style + anime  --ar 16:9 --uplight**

由作者通过 Midjourney 生成

3.罗纳德·韦斯莱

在这种情况下,我不得不使用相同的提示生成更多的变体,以正确获得 Ron。最后,我选定了下图。

提示:

**ronald weasley + Moe art style + anime  --ar 16:9 --uplight**

由作者通过 Midjourney 生成

4.西弗勒斯·斯内普

我给斯内普用了几个更详细的提示,但是简单的一个似乎产生了最好的结果。

提示:

**snape + moe art style + anime --ar 16:9 --uplight**

由作者通过 Midjourney 生成

5.阿不思·邓布利多

邓布利多是这个系列中我最喜欢的角色。所以我想创造一个更详细的他的动漫版。但是由于某种原因,邓布利多很难像哈利那样用简单的提示来生成。每次 AI 把胡子弄得一团糟(我想不通为什么)。所以我在这里尝试了一个更详细的,得到了一个比较满意的结果。

提示:

**old wizard, dumbledore, benign, smiling, long white beard and hair + moe art style + anime --ar 16:9 --uplight**

由作者通过 Midjourney 生成

6.伏地魔

那个不能说出名字的人的例子中,我使用了几个额外的细节来得到一个更恐怖的图像。在我最终选择下面这一个之前,有许多生成。

提示:

**voldemort + moe art style + anime + scary scarlet eyes  + slit pupils + forked tongue + symmetrical bald face --ar 16:9 --uplight**

由作者通过 Midjourney 生成

这个实验的收获

1.文本到图像的工具令人印象深刻

最近几个月,图像生成人工智能出现了爆炸式增长。我不禁为之折服!

  • 无论是 Dall-E 2 还是 Midjourney,我发现它们都能根据提示快速生成令人惊叹的图像。
  • 人工智能非常擅长交叉授粉和叠加艺术风格。比如(自己试试)——梵高风格的写实埃菲尔铁塔画像。
  • 人工智能很好地创建了一个图像,可以在以后进行微调和修改。
  • 你可以使用人工智能来生成超现实的场景和景观——你可以用它们作为创作视频游戏甚至电影场景的灵感!

尽管有这些优势,我必须承认这一点:虽然我在这篇文章的开始称它们为创造性的人工智能,但我认为这样称呼是误导的,至少在目前的水平上是这样。

这让我想到了我的下一个外卖。

2.AI 图像生成很难

尽管在本文中看起来非常简单,但至少可以说,生成所有这些图像非常耗时!

不经过反复试验,你永远不可能得到一个完美的提示。即使有相同的提示,人工智能也不会每次都生成相同的图像。

仔细观察以上所有图片,你会发现它们并不完全正确。 好像有什么东西掉了——好像眼睛不太对,总体看起来有点诡异

在这种情况下,真正的艺术是正确地得到提示!

这也是人类仍然统治的领域——创造力。

因此,即使图像生成技术有所进步,人类的思维仍然处于主导地位。

我相信我们还需要几年时间才能让人工智能自己创造出真正有意义和鼓舞人心的图像!

3.人工智能图像生成是昂贵的

哦!我还没有提到人工智能图像生成是昂贵的吗?

有了 Dall-E 2,你最初可以免费获得 35 张图片,然后每月减少到 15 张。如果你需要生成更多的图片,你需要花费近 15 美元来获得 100 张左右的图片。

对于 Midjourney,你最初只能免费获得 25 张图片(我很快就用完了),然后你必须每月支付 10 美元来获得大约 200 张图片(按 GPU 分钟数计算)。

你觉得还不错?

光是提示的反复试验就足以像饥饿的袋獾一样吃掉你的美元!

所以你真的需要明智的判断。我花了将近 10 美元终于得到了我贴在这里的图片!

有鉴于此,我将留给你一些值得一提的我的试用图像(因为我为花了 10 美元却不能使用所有生成的图像而感到内疚😉):

由作者在中途使用提示生成:阿不思邓布利多+莫伊艺术风格+动漫+古代办公背景+机械仪器— ar 16:9 — uplight

由作者在中途使用提示生成:西弗勒斯·斯内普+ moe 艺术风格+动漫+带化学背景的货架— ar 16:9 — uplight

由作者在中途使用提示生成:伏地魔+ moe 美术风格+动漫+恐怖— ar 16:9 — uplight

由作者在中途使用提示生成:伏地魔+ moe 美术风格+动漫+恐怖+大蛇— ar 16:9 — uplight

由作者在中途使用提示生成:哈利波特脸+ Moe 艺术风格+日本动漫+漫画— ar 16:9 — uplight

作者在中途为赫敏产生的变化(同样的提示)

作者在中途为 Ron 生成的变体(相同的提示)

****感谢阅读到最后!我希望你喜欢这篇文章,就像我喜欢为你创作它一样。

那么,你喜欢我最后挑选的图片吗?

或者你认为我应该从这些变体中选择一些其他的版本?

这里的哪些图片是你最喜欢的?

你现在有没有受到启发,想尝试一下生成图像的人工智能?

你想知道更多关于人工智能如何工作的细节吗?

我很想听听你的看法!

在那之前,祝阅读愉快!

鳍。

资料来源及注释:

  • 这篇文章的灵感来自创作共用的哈利波特艺术。
  • 生成的图像仅用于教育目的。

我如何利用数据科学创造五个稳定的收入流

原文:https://towardsdatascience/how-i-used-data-science-to-create-five-consistent-streams-of-income-74f48bb6cb98

用数据科学赚钱的成熟方法

照片由 Unsplash 上的 Jp Valery

新年快乐

当我们进入 2022 年,我相信你们中的许多人已经想到了一些你想要实现的决心和目标。其中一些目标可能需要增加你的收入,无论是通过升职还是增加新的收入来源。

为了给你另一个视角,我想和你分享我是如何利用我的数据科学知识创造五个持续收入流的。但在此之前,我想让你知道我不是一夜之间做到的。事实上,在我从这些渠道中获得任何实质性的东西之前,大多数渠道至少花了一年时间来建立。

记住这一点,让我们开始吧!

务必 订阅此处 千万不要错过另一篇关于数据科学指南、诀窍和技巧、生活经验等的文章!

1.数据科学家的职业生涯

第一个似乎是显而易见的,但这是我想说的第一个,因为它很可能会占你收入的最大比例。这意味着,从这个角度来看,这应该是最高优先事项。

最重要的是,你从数据科学家的职业生涯中获得的经验将有助于你开发其他收入来源,如咨询,因为你将获得更多的声誉和知识。

因此,你的主要目标应该是学习有助于你在职业生涯中提升自己的概念和主题。

2.咨询

我想谈的第二个收入来源是我的咨询业务。这是一个有趣的问题,因为数据科学咨询并不局限于构建 ML 或 DL 模型。事实上,我的项目都与建筑模型无关。我今年参与的一些项目包括:

  • 我回顾了一家公司创建的 Python 包,并就其简单性、实用性和直观性提供了反馈。
  • 我与一家安全公司合作,提出了一种方法来比较两组不可比的数据(苹果和橙子),并编写了一个脚本来自动化 100 多份个性化报告。
  • 我为一家食品配送公司提供高级数据策略方面的建议,帮助他们定义和建立关键 KPI,并构建简单的决策框架。

我的观点是,有很多方法可以“咨询”数据相关的知识,所以要对自己想承担什么样的项目保持开放的心态。

现在你可能想知道我是如何找到我的客户的,这让我想到了我的下一笔收入:

3.中等

如果你写关于编码或数据科学的文章,Medium 尤其是一个巨大的收入来源,因为有一些成熟的出版物,如 TDS 和 Better Programming,有助于拓展业务。

如果你想了解更多关于我如何建立一个成功的数据科学博客的信息,请查看我下面的文章:

[## 我写一篇成功的数据科学博客的秘密

towardsdatascience](/my-secrets-to-writing-a-successful-data-science-blog-b2597b2553c6)

媒体不仅是一个巨大的收入来源,也是一个伟大的营销工具。因为有了媒介,我才能够…

  1. 从硅谷和多伦多的创业公司获得几个工作机会
  2. 与数据社区中一些最大的世界领导者建立我的网络,包括谷歌的数据和分析主管
  3. 为我的咨询实践和技术写作实践寻找客户。

这让我想到了我的第四个收入来源:

4.技术和内容写作

信不信由你,我们非常需要技术过硬、会写作的数据科学家!通过 Medium,我找到了几个客户,他们希望我撰写与数据科学相关的教程、内容和文章。

这种工作的报酬各不相同。一开始,我一个字只能赚 10 美分。现在,每件作品可以赚 100 到 500 美元。我的一些工作包括:

  • SQL 收入群组分析指南
  • 一篇关于什么是统计偏差以及偏差类型的文章
  • 学习高级 SQL 的综合课程

想了解更多关于我如何从技术写作中获得收入以及如何找到客户的信息吗? 订阅此处 从没错过我的另一篇文章。

5.子堆栈

我最后的收入来源是 Substack。我最近才开始做,所以现在还不重要,但我看好这个平台。

如果你问我是用 Substack 还是 Medium,我无法回答,因为这就像你在拿苹果和橙子做比较。我为 Medium 写的内容和读者与我的 Substack 时事通讯有很大不同。

我希望让我的 Substack 简讯更有个性,更小,更频繁(至少这是我的目标)。

如果你想订阅我的个人时事通讯,请在这里注册。

感谢阅读!

一定要 订阅此处 千万不要错过另一篇关于数据科学指南、诀窍和技巧、生活经验等的文章!

不确定接下来要读什么?我为你选了另一篇文章:

还有一个:

-特伦斯·申

  • 如果您喜欢这个, 订阅我的媒体 获取独家内容!
  • 同样,你也可以 跟我上媒
  • 报名参加我的个人简讯
  • 跟我上LinkedIn其他内容

我如何使用 Python 和 SQL 找到世界上最贵的手表

原文:https://towardsdatascience/how-i-used-python-and-sql-to-find-the-most-expensive-watches-in-the-world-785ff71bc893

从使用 Python 抓取网页,到构建数据集,再到编写分析性 SQL 查询,这就是我如何找到在 1996 年至 2021 年的一场奢侈品拍卖会上售出的最昂贵的手表。

约翰·托尔卡西奥在 Unsplash 上拍摄的照片

上周,在我的出版物Pipeline:A Data Engineering Resource中,我写了一篇关于奢侈品手表拍卖市场趋势的文章,并提到我将继续使用我的方法。从获取数据到获取、清理数据,最后用 SQL 查询数据,我将带您了解我创建最新数据驱动故事的过程,并说明如何构建一个端到端数据分析项目。

由于这是一个端到端的数据工程和数据分析项目,以下是各个阶段的划分:

  • 数据来源和摄取
  • 数据清理
  • 创建数据集和表并加载到数据库中
  • 分析查询
  • 可视化见解

数据来源和摄取

除了在谷歌上搜索“昂贵手表列表”,这个过程的第一步是确定一个高质量和可访问的数据集,以便摄取和稍后格式化进行分析。

我在维基百科页面上找到了“拍卖的最贵手表清单”。原始数据表如下所示:

截图由作者提供。

从数据整洁的角度来看,有几个问题立即困扰着我,比如“Ref”在分析中有些无用的列。我一消化完数据就放弃了那个专栏。Pandas 的 read_html 功能令人难以置信,它消除了一些通常与 BeautifulSoup 抓取网页文本和数据的方法相关的手工工作。

base_url = '[https://en.wikipedia/wiki/List_of_most_expensive_watches_sold_at_auction'](https://en.wikipedia/wiki/List_of_most_expensive_watches_sold_at_auction')watches = read_html(base_url, attrs={'class': 'wikitable sortable'}, header=1)watch_df = pd.DataFrame(watches[0])watch_df.rename(columns={'.mw-parser-output .tooltip-dotted{border-bottom:1px dotted;cursor:help}M.Y.': 'Model_Year', 'Watch model': 'Watch_Model', 'Inflation-adjusted': 'Inflation_Adjusted',
'Auctiondate': 'Auction_Date', 'Auctionplace': 'Auction_Place', 'Auctionhouse': 'Auction_House'}, inplace=True)

watch_df = watch_df.drop(['Ref.'], axis=1)

这里要注意的另一件事是,因为我们正在获取类‘wiki table sortable’的所有实例,所以将会返回多个表。为了获取第一个结果,即“Top 77”表,我从索引位置 0 开始:

watch_df = pd.DataFrame(watches[0])

虽然我可以遍历每个索引值,但是由于每个表都需要自己独特的格式,所以我认为我最好分别抓取和格式化它们。

数据清理

我的转换都不是特别复杂,但是我想指出,如果您必须从 wiki 表中删除括号或括号表达式,这是一段非常有用的代码:

for col in watch_df.columns:
        watch_df['Watch_Model'] =
        watch_df['Watch_Model'].str.replace('[Note 4]', '')
        watch_df['Watch_Model'] =   watch_df['Watch_Model'].str.replace(r'\[.*\]', ' ')

结合使用 str.replace 方法和一点 regex 语法可以去掉维基百科引用周围的括号。

对于最后一个表,我合并了三个返回的 wiki 表。我还考虑了 NA 值,并使用 Pandas 的 sort_values()方法过滤掉重复的。

watch_all = pd.concat([watch_df, watch_second_half_df, watch_third_df], ignore_index=True)
watch_all = watch_all.sort_values(by=['Manufacturer'], ascending=True).reset_index(drop=True)
watch_all['Original'] = watch_all['Original'].fillna(0)
watch_all['Inflation_Adjusted'] = watch_all['Inflation_Adjusted'].fillna(0)
watch_all['Price_USD_Millions'] = watch_all['Price_USD_Millions'].fillna(0)

watch_all_df = pd.DataFrame(watch_all)

创建数据集/表并加载到数据库中

这是目前为止数据框的外观(减去 Price_USD_Millions 列,未显示):

截图由作者提供。

我对这个输出很满意。由于我更喜欢 SQL 进行数据分析(对不起熊猫),我将把这个上传到我的 BigQuery 数据库。

截图由作者提供。

下面是模式,我在 BigQuery 的 UI 和代码中都定义了它(为了安全起见)。尽管 BigQuery 会自动检测 CSV 文件的模式,但我过去在使用自动检测功能时遇到过问题,所以我尝试总是包含一个模式。

截图由作者提供。

这是表格预览的样子:

截图由作者提供。

分析查询——也就是有趣的部分

在这个阶段从表中查询和获得洞察力确实使这个项目成为一个端到端的项目。这也令我兴奋,因为我的工作往往局限于数据科学过程的管道和 ETL/EL 阶段。因此,当我能够在我的个人项目中做一些数据分析时,我很开心。

因为我的职业是数据工程师,所以我能从表格中提取见解而不用太费力,这对我非常重要。这意味着,即使在我获取了数据帧之后,我也要做一些更改,以便更好地为我未来的分析服务。

我做的第一个更改是将“Style”列从字符串转换为布尔值。如果我需要在后面的分析阶段引用它,这将使计算值和使用该度量作为分类变量变得更加容易。

SELECT
  EXTRACT(DATE
  FROM
    Auction_Date) AS Auction_Date,
  Manufacturer,
  Watch_Model,
  Model_Year,
  CASE
    WHEN Style = 'Wrist' THEN 0
  ELSE
  1
END
  AS Style
FROM
  `ornate-reef-332816.watches.auction_prices`

我也不喜欢原始数据框中美元值与无关值一起出现的方式,所以为了可读性,我将每个值四舍五入到两位小数。

SELECT
  EXTRACT(DATE
  FROM
    Auction_Date) AS Auction_Date,
  Manufacturer,
  Watch_Model,
  Model_Year,
  CASE
    WHEN Style = 'Wrist' THEN 0
  ELSE
  1
END
  AS Style,
  ROUND(Original, 2) AS Original_Price_Millions,
  ROUND(Inflation_Adjusted, 2) AS Inflation_Adjusted_Millions,
  ROUND(Price_USD_Millions, 2) AS Price_USD_Millions
FROM
  `ornate-reef-332816.watches.auction_prices`

我也意识到有几行的定价有出入。原始数据集包括多个具有美元值的列。原始数据包括原始价格和虚高价格。这使得数据有点不清楚。为了找到给定手表的实际价格,我取了各列的最大值(使用最大函数),因为这可能是手表的售价。

SELECT
  EXTRACT(DATE
  FROM
    Auction_Date) AS Auction_Date,
  Manufacturer,
  Watch_Model,
  Model_Year,
  CASE
    WHEN Style = 'Wrist' THEN 0
  ELSE
  1
END
  AS Style,
  ROUND(Original, 2) AS Original_Price_Millions,
  ROUND(Inflation_Adjusted, 2) AS Inflation_Adjusted_Millions,
  ROUND(Price_USD_Millions, 2) AS Price_USD_Millions,
  ROUND(GREATEST(Inflation_Adjusted, Price_USD_Millions, Original),2) AS Actual_Price,
  Rank
FROM
  `ornate-reef-332816.watches.auction_prices`

最后,因为我知道轴上的字符串值会变得多么混乱,所以我通过大写和截断字符串值来创建城市的缩写。我还删除了“等级”一栏,因为这对我来说有点武断。

SELECT
  EXTRACT(DATE
  FROM
    Auction_Date) AS Auction_Date,
  Manufacturer,
  Watch_Model,
  Model_Year,
  CASE
    WHEN Style = 'Wrist' THEN 0
  ELSE
  1
END
  AS Style,
  ROUND(Original, 2) AS Original_Price_Millions,
  ROUND(Inflation_Adjusted, 2) AS Inflation_Adjusted_Millions,
  ROUND(Price_USD_Millions, 2) AS Price_USD_Millions,
  ROUND(GREATEST(Inflation_Adjusted, Price_USD_Millions, Original),2) AS Actual_Price,
  UPPER(LEFT(Auction_Place, 3)) AS Auction_Place,
  Auction_House
FROM
  `ornate-reef-332816.watches.auction_prices`

下面是最终的干净表格的一个片段,其中包含调整后的列:

截图由作者提供。

项目的其余部分包括针对这个表编写查询。由于其中一些有点基础(但仍然是必要的),我将分享一个更有趣的片段。这是一段 SQL 代码,用于查找哪个制造商销售了最多的库存(以百万美元计)。

SELECT * EXCEPT(row_num)
FROM(
SELECT Manufacturer, MAX(Actual_Price) AS Actual_Price_Millions, ROW_NUMBER() OVER(PARTITION BY Manufacturer) AS row_num
FROM clean_tab
GROUP BY 1
)
WHERE row_num = 1
ORDER BY Actual_Price_Millions DESC

除了查找实际价格之外,该查询还包含一行消除重复值的内容,以确保我们获得准确的数据。下面是作为数据帧的输出(我使用 Python 的 BigQuery API 进行查询):

截图由作者提供。

可视化见解

就像我喜欢干净的数据一样,我也喜欢简约、干净的可视化。由于我已经在 Jupyter 笔记本上工作,我决定使用 Matplotlib 和 Seaborn 来可视化我从这个数据集获得的见解。

下面是一个简单的例子:

图表由作者提供。

图表由作者提供。

从这里,我可以结合可视化来建立一个仪表板,这样我就知道我要为我的梦想手表存多少钱了。

如需额外的可视化和完整的分析,请随意阅读全文:

https://medium/pipeline-a-data-engineering-resource/ticktock-the-most-expensive-watches-in-the-world-a-data-story-c425df9b9648

如果你对这个项目的范围感到好奇,你可以在 my GitHub 上查看代码。

我如何使用跟踪和数据科学来学习 Redux 与糟糕的应用程序性能有关

原文:https://towardsdatascience/how-i-used-tracing-and-data-science-to-learn-redux-correlates-with-terrible-app-performance-4fe976ef8a06

为什么减少 redux 大小是值得的

图像来源:像素

几年前,我是 Slack 前端性能团队的创始成员之一。目标是了解什么影响 Slack 的前端性能。该公司想要了解的一个指标是从一个频道切换到另一个频道所需的时间,即什么导致频道切换缓慢?

该项目的开始只是为了跟踪不同的数据,以便我们可以了解频道切换期间发生了什么。例如,我们跟踪了频道切换期间发生的所有 redux 动作以及它们花费的时间;后来,我们跟踪反应渲染以及。我们使用的工具是一个与 OpenTelemetry 具有相同 api 的 tracer,以及一些数据分析软件,包括 Honeycomb 。如果您不熟悉跟踪,请阅读我以前的文章关于如何使用跟踪来测量应用程序性能的文章。

https://blog.devgenius.io/measuring-react-performance-with-opentelemetry-and-honeycomb-2b20a7920335

我们还用关于用户和团队的信息来标记每个跟踪。这些信息包括他们使用哪种电脑,他们来自哪个地理区域,他们有多少渠道,他们的团队有多少人,他们的 redux 商店有多大,等等。

下面是通道切换跟踪的样子:

作者用 Honeycomb.io. Image 可视化频道切换轨迹。

注意:我划掉了可能被认为是专有的信息。

主父跟踪测量从单击一个频道到该频道完成呈现最近消息列表所用的时间。子跨度是 redux 动作、thunks 和 react 组件的呈现。

添加痕迹或多或少是这个项目中比较容易的部分。实现一个健壮的、可伸缩的、其他开发人员可以轻松使用的系统仍然存在技术挑战。然而,这是很简单的工作。困难的部分来自于确定应该测量什么以及如何分析跟踪来理解性能瓶颈。

本文的大部分内容是关于我用来分析前端性能的技术,以及我在团队工作时学到的经验。

分析应用性能的基本工具和技术

我使用 Jupyter notebook 和几个 python 库来创建可视化并进行分析。

有几种方法可以获得跟踪数据。你可以直接从 Honeycomb 下载一个 CSV 文件(但我认为有 1000 行的限制)。你也可以通过他们的 API 查询蜂巢的数据。Slack 将跟踪数据存储在自己的数据库中,所以我查询了 Slack 的数据库来进行数据分析。

下一步是使用pandas python 库从 CSV 文件或 api 数据创建一个数据帧。在完成了创建数据帧的所有预处理之后,就可以开始分析轨迹了!

相关热图

关联热图是了解哪些标签可能与频道切换时间相关的一种简单而有见地的方式。

在 Jupyter notebook 中,使用seabornmatplotlib用几行代码制作热图。

import seaborn as sns
import matplotlib.pyplot as pltcorrelations = dataframe.corr()heatmap = sns.heatmap(correlations, vmin=-1, vmax=1, annot=True, cmap='BrBG')heatmap.set_title(f'Correlation Heatmap for {dataframe_name}')plt.show()

最终的热图将会是这样。

关联热图—标记的编辑名称。图片作者。

整个热图显示了所有标签之间的相互关系。我们最感兴趣的行是最后一行,即这些标签的系数与频道切换是否可容忍(即不慢)的关系。

从热图中,我可以识别与频道切换是否缓慢最相关的标签。接近 0 的数字表示给定的两列之间没有相关性。接近 1 的数字表示强正相关,接近-1 的数字表示强负相关。

is_tolerable最不相关的标签与 redux 商店规模有关。换句话说,这是我第一次暗示 redux 存储大小与应用程序性能相关。

散点图

我进一步用散点图研究了 redux 商店规模对频道切换性能的影响。

为此,我在 x 轴上存储了 redux 存储大小。在 y 轴上,我查看了该时段内被视为“慢”的频道切换的百分比

Redux 大小与慢速通道切换百分比的关系。图片作者。

如您所见,redux 存储大小越大,慢速频道切换的百分比就越大。

我还查看了每个时段内频道切换时间的 p50(中值)。趋势与预期相似。redux 商店规模越大,p50 值越高。

Redux 尺寸与通道切换时间 p50 的关系。图片作者。

对于这两个图,我使用了[matplotlib.pyplot.scatter](https://matplotlib/3.5.1/api/_as_gen/matplotlib.pyplot.scatter.html)

我根据不同的标记值进一步分解了样本数据。例如,我观察了企业与非企业的性能,我观察了硬件能力如何影响性能,等等。

redux 动作和 thunks 呢?

使用像 Honeycomb 这样的工具很难分析子跨度的存在或属性如何影响其父跨度。例如,并非所有通道开关都触发相同的 redux 动作集,但是您不能比较包含 redux 动作“A”的通道开关轨迹与不包含 redux 动作“A”的通道开关轨迹。您也不能在子跨度和主通道开关跨度之间进行相关性分析。也许蜂巢最终会有这个功能,但目前还没有。这意味着进行子跨度分析的唯一方法是将关于这些跨度的信息作为父跨度上的标签添加到父跨度中。您还可以编写复杂的查询和预处理脚本来提取子 span,并通过parent_id将它们绑定到主通道交换机 span。这是一个很大的努力,最终,我们没有决定去那个方向。

为什么 redux 大小与应用程序性能相关,以及注意事项

相关性并不意味着因果关系。虽然 redux 存储大小与通道切换速度(以及我们测量的其他几个指标)密切相关,但这并不意味着因果关系。

一般来说,redux 存储大小与应用程序的复杂性有关。应用程序越复杂,应用程序拥有的组件和信息越多,redux 就越大。性能退化通常是应用程序复杂性的一个症状。这是因为低效率往往被埋在各处。例如,在我在 Slack 的团队通过引入 lint 规则解决这个问题之前,我在mapStateToProps看到过许多创建新对象(例如新数组)的案例。我见过不必要的道具被传递到组件中,导致组件不必要地重新呈现。应用程序越大,redux 大小越大,这些反模式就变得越有症状。

因此,如果您做了其他所有正确的事情,redux size 本身可能不会对性能产生太大的影响。然而,软件在生产中并不是完美的,至少我没见过。因此,更大的 redux 大小会导致更多的渲染和更长的处理时间,从而导致更差的性能(在 mapStateToProps、选择器、reducers 等中)。).

挑战和经验教训

总的来说,这是一个极具挑战性的项目,涉及许多未知因素和反复试验。它原本应该是一个调查通道切换性能的短期项目。然而,它演变成了一个多季度的计划,导致在 Slack 创建了一个独立的性能工程部门!我和一个由 4-5 名前端工程师组成的小组在这个性能可观察性项目上工作了将近 1.5 年。

团队的目标不时改变,但想法是找到性能回归的大贡献者,并为开发人员创建容易看到他们的项目的性能影响的方法。

我在可观察性团队中最大的收获是工具问题。很多。不同的分析产品适合不同的使用案例。试错法中的部分“错误”来自对大量数据的追踪,这些数据最终并没有带来多少可操作的见解。正如我之前提到的,很大一部分原因是用我们现有的工具很难分析一些数据,如儿童跨度。

因此,在实现跟踪(或任何软件特性)之前,您应该对如何分析数据有一个很好的认识,并弄清楚您收集信息的方式对于手边的工具是否理想。

另一个重要的收获是,当处理一个你没有受过训练的领域时,有一个容易接近的结对编程伙伴,或者更好的是一个导师。

我的背景是前端。为了这个项目,我走进了数据科学的世界,之前没有任何培训或指导。我自学了 python 和它的许多数据科学库,并且在伯克利和斯坦福上了统计学和数据科学课。

尽管我在学习我必须学习的内容方面足智多谋,我有空闲的渠道可以提问,我也向数据科学家咨询过几次寻求帮助,但缺乏适当的指导仍然导致了可以避免的障碍。

我认为一个软件工程师应该具备的最重要的技能之一是多才多艺。拥有一个成长的心态会有所帮助。在过去的几年里,我学到了很多关于跟踪、可观察性、性能、数据科学和机器学习的知识!

我将如何学习编码(如果我必须重新开始)

原文:https://towardsdatascience/how-i-would-learn-to-code-if-i-had-to-start-over-607428f14266

学习如何为现实世界的数据科学编码的有力建议

作者图片

目录

  1. R 还是 Python?
  2. 第一步:建立环境
  3. 7 个编码基础
  4. 基于项目的学习
  5. 数据轨道的细节
  6. 新程序员最重要的提示

我最近得到了一个惊人的机会,一个朋友提出教我柔术,作为交换,我教他如何编码。我很快意识到,从零开始教别人如何编码,比我想象的要困难得多。毕竟,距离我自己写第一行代码已经快 10 年了。这篇文章是关于我为我的朋友写的非常具体和详细的计划,教他数据科学编码的基础知识。因为我为他做了所有的工作,我想我也应该在这里和你分享所有的细节!

关于如何开始编码,有很多类似的资源。这些都很棒,但我认为这有点不同,因为它更专注于数据编码,并使用了非常具体的真实案例研究。此外,我建议使用各种免费的在线资源来进一步简化初学者编程技巧的自学。最后,我强调了任何新程序员都应该知道的 3 件最重要的事情,所以你肯定想看看。

如果您更喜欢视频格式,请考虑以下内容以了解有关该主题的更多信息:

r 还是 Python?

让我们从选择的语言开始学习。我知道,如果您正在处理数据,通常有两种选择,Python 或 r。让我们快速比较一下这两种语言的数据科学家风格。

当查看堆栈溢出开发者调查时,我们发现大约 48%的受访者使用 Python,而只有大约 5%的人使用 r。在工业中,Python 是一种更常见的语言。现在让我们更具体地看看数据科学家,而不仅仅是所有的堆栈溢出用户。

在我最喜欢的数据科学学习和项目平台 Kaggle 上,我们可以在这个笔记本中看到,大约 84.2%的受访者使用 Python,而只有 20.5 %的人使用 r。由于这些加起来超过 100%,我们可以假设一些数据科学家正在使用两种语言。

图片来自 Kaggle (阿帕奇 2.0)

最后,让我们来看看这两种语言的发展历程。我们可以在的另一个笔记本中看到,从 2020 年到 2021 年,Python 的采用有所增加,而 R 的使用有所减少。

图片来自 Kaggle (阿帕奇 2.0)

这对我来说是显而易见的。我觉得应该选择学习 python 那种语言更受欢迎,而且还在增长。这并不是说 R 不好。然而,我认为 Python 正在成长,对于就业市场来说,它将是一项更有价值的技能。我个人也觉得比 r 更直观灵活一点。

作者图片

第一步:建立环境

既然选择了 Python,那么我的朋友应该先学习哪些编码技巧呢?变量,逻辑,函数,算法,类?我的脑子在打转。这花了我一秒钟的时间,但我对我学习编程的第一天有一个奇怪而混乱的闪回。我甚至不知道从哪里开始在我的电脑上安装 Python。我对教授编程的功能部分感到非常兴奋,我完全忘记了为成功建立环境的基础。

我做的第一件事是给我的朋友一些我最喜欢的关于选择环境和在他的计算机上获得正确版本的 Python 的资源。我实际上有点纠结:他应该使用什么 IDE?他知道 IDE 代表什么吗?对于新手来说,IDE 代表集成开发环境。这实际上只是您用来编写代码的文本编辑器。

如果你在写一篇文章,你可以选择使用微软 Word、谷歌文档、记事本,或者甚至是纸和笔。就像这些都是你写最后一分钟论文的媒介一样,数据科学家和软件工程师也需要写代码的地方。这些地方是理想之地。就像 Microsoft Word 有拼写检查和格式设置来确保您不会犯语法错误一样,许多 ide 可以帮助您确保代码中有正确的语法。从技术上来说,微软 Word 可以被认为是一个 IDE,但是我绝对不推荐这样使用它,除非你是霍马理工大学的。

这是数据领域中最常用的 ide 列表。如您所见,Python 的常见 ide 有 VSCode、Jupyter Notebook、PyCharm 和 Spyder。

在做任何事情之前,我想让我的朋友对开发环境如何工作有一个很好的理解。这是我完全困惑的事情。当我学习编码时,我从 Python 开始,在一个叫做 IDLE 的 IDE 中进行。IDLE 对于学习来说很棒,但是我真的从来没有在为工作或数据项目编写代码时使用过它。我想确保他使用的东西能够代表他在现实世界中使用的东西。

对于这个特定的朋友,我推荐他从 freeCodeCamp 的以下视频开始学习基础知识。在视频中,他们向您展示了如何设置 PyCharm 环境并轻松使用它。我认为 PyCharm 是可靠的,如果你熟悉它,你可以很快地学会 VScode、Jupyter 笔记本或 Spyder。同样,我不认为你开始使用的 IDE 有那么重要。更重要的是,你使用的是那些真正将 Python 代码投入生产的人使用的工具。

作者图片

7 个编码基础

好了,接下来是编码基础。令人惊讶的是,我认为这可能是整个过程中最简单的部分之一。你看,有一种普遍的误解,认为编码是试图欺骗你。有这样一个阴谋,学习编码应该是非常困难和可怕的。我认为事实恰恰相反。编码语言,尤其是 Python,实际上被设计得尽可能直观。它们被设计成在创造良好效果的同时尽可能易于使用。如果你改变你的视角,把它们看成是直观的,编码会变得更加有趣和轻松。这并不是说你不会再被困住了;这是说,当你陷入困境时,几乎总是有一个合乎逻辑的原因和一个合乎逻辑的解决方案来解决它。

符合简约的主题。在最基本的层面上,初学者编码可以分为 7 个概念。我将在这里给出一个非常高层次的概述。

1.首先,我们从数据类型开始。在 Python 中,你可以处理数字、文本、布尔值、列表或大量数据结构。首先很好地理解这些是很重要的。

作者图片

2.接下来,我认为熟悉一下变量如何工作是有意义的。这可能因语言而异,所以只要确保您知道如何在 Python 中分配和更改变量。

作者图片

3.变量之后,你应该看看逻辑运算符是如何工作的。这些在你最初的几个项目中非常方便。 Ifelse 语句是最重要的一个,但是你肯定可以为其他人找到用例,尤其是当你处理数据的时候。

作者图片

4.你需要了解的第四件事是循环是如何工作的。计算机最擅长的一件事就是一遍又一遍地做一件简单的事情。你会惊讶地发现这些对你未来的编程是多么有用。

作者图片

5.之后,你应该学习一下**的功能。**这为您在编程之旅中所做的几乎所有事情奠定了基础。函数允许你封装代码并重用它。如果你真的仔细想想,好的编码就是尽可能多的重用比特。这才是真正的开始。

作者图片

6.至此,您已经对 Python 的关键构建模块有了很好的理解。现在你应该对一些基本数据结构的工作原理有了更多的了解。我建议更深入地研究列表、字典和元组。这些将为您以后的大部分数据工作奠定基础。

作者图片

7.最后,你应该开始学习使用。最重要的有熊猫、NumPy、Scikit-learn 和 Matplotlib。这些都为您提供了分析、可视化和操作数据的额外工具。Pandas 和 NumPy 还引入了一些新的数据结构,如数组、序列和数据帧。如果你了解 python 中更基本的数据结构是如何工作的,你应该能够很快学会这些!

作者图片

就是这样。有了这 7 样东西,你就有了处理数据所需的编码基础。如果你是一名软件工程师,你可能会认为我遗漏了一些东西。我在这个列表中有意省略的是对类的解释。类是面向对象编程的基础。面向对象编程是一种围绕对象而不是功能或逻辑组织代码的编程模型。面向对象的编程非常强大,但是老实说,对于处理数据的初级阶段来说,它并不太适用。在你很好地学习了这些其他概念之后,这是你绝对应该自己去探索的事情!

下面的链接是学习所有这些概念的一些很好的资源。其中大多数都是免费的,但如果你正在寻找一种资源,让你超越编码,获得更多切实的数据科学技能,我还提供了 365 数据科学课程的折扣链接。

  • freeCodeCamp:学习 Python —初学者全教程【教程】
  • Python 教程:Python 教程和入门部分
  • 🌟365 数据科学课程(57%的年折扣;这是一个联盟链接)
  • 初学 Kaggle 练习册

作者图片

基于项目的学习

我喜欢我链接的所有课程的一点是,它们在课程工作中融入了一些小项目。我认为基于项目的学习是在获得基本基础后学习技术概念的唯一最有效的方法。我强烈建议你考虑如何使用代码来构建对你有用的东西。

对于我的朋友,我让他做的第一个项目是使用 Python 创建一个柔术随机发生器。对于任何训练来说,强化你的技能是很重要的,但是每天做同样的基础训练会很无聊。我让他制定一个计划,从一个更大的列表中随机选择 2-3 个我们应该在训练中进行的训练。这是一个简单的项目,但对我们的工作直接相关和有用。在下面评论一个你想做的 Python 项目,让自己负起责任!

作者图片

数据轨道的细节

好了,你已经学习了 Python 的基础知识。现在怎么办?如果你有兴趣学习更多关于数据的知识,我强烈建议你做一个与数据相关的项目。最好的地方是卡格尔。如果这有点太吓人,你可以跟着一起做我做过的一个项目或者其他人在 Kaggle 上做过的成千上万个项目中的一个。

很多人在这一步失去了动力。他们看到其他人已经完成的伟大工作,感到沮丧。老实说,我记得我也有这种感觉。我建议做的是浏览一些基本的笔记本,比如泰坦尼克号数据集,然后复制代码,在你自己的电脑上一行一行地运行。许多人认为这是“作弊”,但实际上这是一种很好的学习方式。更好的是,当您运行它时,对代码进行一些修改,看看会发生什么。也许可以试着将图表上的颜色从蓝色改为红色,或者将线条变粗。

作者图片

还记得我们谈论 IDEs 时提到的 Jupyter 笔记本吗?Kaggle 使用类似的东西,让你在线使用它。如果您对资源的访问权限有限,这将是一种强大而免费的计算能力。如果您想在笔记本电脑或台式机上处理数据,我建议您下载 Anaconda,这是一个软件包,它将所有相关的 Python 库和数据科学 ide 集成到一个包中。

作者图片

对新程序员最重要的提示

最后,我有 3 个建议送你上路。这些可能是新程序员可以学习的最重要的东西。

  1. **使用 Google 和栈溢出。**如果你有一个问题,几乎可以保证之前有人在网上问过。善于通过搜索自己找到答案可能是数据科学家或软件工程师最重要的技能。
  2. **使用错误。**你的代码不会运行,会崩溃,你会难过。不要沉溺于自怜之中。阅读错误消息;他们会告诉你什么是错的。谷歌的错误,这将节省你很多时间和头痛。
  3. **放松点。**唯一不会编程的人是那些从不尝试或过早放弃的人。

感谢您阅读这篇文章。如果您喜欢这篇文章,请记得在 Medium 上关注我以获取更多类似内容,并注册我的简讯以获取我的内容创作和数据科学行业其他学习资源的每周更新!此外,考虑通过注册会员来支持我和成千上万的其他作家。

下次再见,祝您的数据科学之旅好运!

ML 驱动的系统有何独特之处?—了解为什么需要 MLOps 以及需要 ML 基础架构的哪些组件

原文:https://towardsdatascience/how-is-an-ml-driven-system-unique-4b52ae4aed03

更深入地解释为什么需要 MLOps,以及 MLOps 试图解决什么问题来使 AI 在现实世界的生产环境中工作

对于任何已经建立了 ML 解决方案或者甚至处于开发 ML 模型的 PoC 阶段的组织,我确信 MLOps 已经成为一个话题。事实上,为了以可靠、安全和高度可用的方式在生产环境中开发和部署 ML 解决方案,需要 MLOps。

在今天的博客中,我想退一步解释一下:

  • 为什么 MLOps 是必要的和必需的?
  • 更重要的是,MLOps 到底想解决什么问题?
  • 为了解决这个问题,需要 ML 基础设施的哪些组件?

希望通过了解原因,您可以就做出更明智的决定,如果您的组织需要 MLOps,如果需要,为了解决阻止 AI 在您的组织中工作的问题/挑战,MLOps 的哪些组件是必要的。

首先,我想解释一下 ML 驱动系统的独特性,以及这种独特性需要 MLOps 解决方案的原因。

照片由马库斯·温克勒在 Unsplash 上拍摄

ML 驱动系统有何独特之处

为了理解为什么 MLOps 是必要的,并评估您的组织需要建立哪些与 MLOps 相关的能力,我们需要首先理解 ML 驱动的系统是如何独特的。我将 ML 驱动系统的“独特性”总结为以下四个方面:

  • 以数据为中心 —以数据为中心不仅意味着 ML 驱动的解决方案的成功取决于数据的质量和数量,而且数据本身的内在特征决定了需要什么样的 MLOps 功能。
  • 多团队和多技能组合协作 —在大多数组织中,构建和运行一个 ML 驱动的系统通常需要多个团队的努力,包括数据科学家、数据工程师、ML 工程师、DevOps 工程师等等。我将很快解释团队结构如何影响 MLOps 工作流和流程的设计。
  • 动态生态系统 —对于 ML 和 AI 来说,有一个极其丰富且快速增长的生态系统。比如 ML 和深度学习(DL)算法的开源库也不少,像 Scikit Learn,Tensorflow,Keras,PyTorch,Fast.ai,抱抱脸。此外,还有各种各样的人工智能应用可以从 ML 中构建,包括监督、半监督、自我监督、非监督、强化学习等等。根据您的 ML 系统构建的算法和应用,所需的 MLOps 功能也有所不同。
  • 连续变化 —从数据中建立和学习 ML 驱动系统。当底层数据发生变化时,ML 模型和算法也需要相应更新。ML 驱动的系统总是处于持续变化的状态,而且真的没有尽头。因此,监控数据变化和模型性能变化变得非常必要。商业环境和数据变化越快,就越有必要对 ML 模型进行“再训练”和“再学习”。因此,您确实需要了解您的业务需求和数据环境变化,然后确定在您的 MLops 工作流中构建监控解决方案的重要性。

让我们深入探讨上述 4 个方面如何影响您选择整体 MLOps 解决方案的设计。

以数据为中心

当我们谈论以数据为中心的 ML 系统时,显而易见的解释是 ML 模型的性能很大程度上取决于数据的质量和数量。的确,这是真的。但是,我认为“以数据为中心”在 MLOps 方面有更多含义:

  • 首先,数据总是变化。数据总是在变化,这就需要一种监控解决方案来检测数据漂移,包括关键统计数据的变化,如最小值、最大值、标准差变化和数据分布变化。一旦底层数据发生变化,基于该数据训练的 ML 模型的性能也很可能发生变化(通常是以坏的方式)。还需要监控模型性能。因此,如果您的数据更改非常频繁,则绝对有必要在您的整体 MLOps 基础架构堆栈中构建监控功能。
  • 第二,数据几乎总是脏的。众所周知,数据科学家花了相当多的时间清理数据并将数据转换为干净的状态。了解您自己的数据科学家在清理脏数据上花费了多少时间是值得的。如果时间很长,那么了解您的整个数据管道现在是如何运行的,并包括一些数据质量检查和模式实施以提高整体数据质量和可靠性,可能会很有用。
  • 第三,数据并不总是可用的。原始数据很少能被输入最大似然算法进行即时学习。数据科学家经常必须将原始数据转换成特征,以帮助最大似然算法更快更准确地学习。这个转换过程被称为特征工程。特征工程通常需要数据科学家投入大量时间和精力。因此,功能也是组织的资产,就像数据本身一样。如果您的组织有多个数据科学家团队,并且他们处理相似的原始数据,那么他们很有可能会生成相似甚至相同的要素。在这种情况下,为数据科学家构建一个中心要素库来发布、共享他们的要素以及发现和重用由其他数据科学家创建的要素,可以显著增加价值并加快 ML 模型的开发时间。当然,除了特征发现和特征重用,特征库还有其他功能。我很快会有另一个关于“特色商店”的深度博客。如果您想在特色商店的博客发布时收到通知,请随时关注我的 Medium。

以上是“ML 是以数据为中心”这一事实所带来的影响。这些暗示需要你的 ML 基础设施的不同组件来处理,比如数据和模型监控,以及特征存储。

多团队多技能协作

构建端到端的 ML 解决方案,需要多个团队的不同技能。在我之前的文章— 了解 MLOps 的核心—构建机器学习(ML)管道中,我提到为了构建一个端到端的 ML 解决方案,至少需要以下 3 个关键管道:

  • 数据和特征工程管道,通常由数据工程团队开发。
  • ML 模型培训和再培训管道,通常由数据科学团队开发和拥有。
  • ML 模型推理/服务管道,通常由 ML 工程师或生产工程师团队开发和拥有。

为了以可靠的方式自动化这三个管道,还需要其他关键组件—持续集成/持续培训/持续部署(CI / CT / CD)和基础设施即代码(IaC)。这些组件通常归基础架构团队或开发运维团队所有。

通常这些团队使用非常不同的服务和工具集。例如,数据科学家主要使用 Jupyter notebook 进行 ML 模型培训和实验,数据工程师使用 Python、SQL 和 Spark 开发数据管道,而 ML 工程师不仅需要了解 ML 模型如何将数据科学家的笔记本转换为模块化和可测试的代码,他们还必须了解底层基础设施(如 Container 和 Kubernetes 和 DevOps),以及 DevOps 管道(如 Github actions 和 Azure DevOps 管道)。

使用不同的工具、服务和框架,通常会在这些团队之间产生更多的差距。团队不得不花费更多的时间来集成不同的服务和框架,这可能会重复一些工作,并可能造成不一致。如果这些场景在您的组织中经常发生,那么考虑一个可以支持各种工作负载(数据工程、ML 培训和部署、ML 管道、功能存储、工作流编排、DevOps 集成、数据和模型监控)的单一平台将是非常有价值的,以便这些不同的团队可以在同一个平台上工作。我知道 Databricks 有这样一个数据和 AI 统一的平台,支持上面提到的各种工作负载。

有了这样一个统一的平台,管理您的 ML 基础设施和建立您的端到端 MLOps 工作流程将变得更加容易,因为您可以避免将不同提供商的许多不同服务“缝合在一起”。

如果团队花费相当多的时间集成不同的平台,由于这些集成导致不一致,(甚至错误),或者由于这些平台差异导致团队成员交流(甚至争论),也许是时候考虑迁移到统一的平台,从基础设施层解决这些问题了。

动态生态系统

ML 生态系统的所有方面都在快速发展,包括 ML 模型算法、分布式培训、数据和模型监控、ML 生命周期管理、ML 管道框架、ML 基础设施抽象、工作流程编排,以及用于共享数据见解和 ML 模型结果的网络应用。此外,人工智能和人工智能可以应用的各种商业用例也在蓬勃发展——例如计算机视觉、自然语言处理(NLP)、音频、表格数据、重新通知学习和机器人,以及多模型任务。

下面,我总结了这些 ML 方面的几个顶级开源库:

  • ML 模型算法— Scikit Learn、Tensorflow、Keras、Pytorch、fastai、拥抱脸变形金刚、XGboost
  • ML 分布式培训— Ray、Horovod、Dask
  • 数据和模型监控—显然,arize、whylabs、Deepchecks、
  • ML 生命周期/管道管理— mlflow、ZenML
  • ML 基础设施抽象——元流、库贝流
  • 用于共享数据和 ML 结果的 Web 应用程序— Streamlit、Gradio
  • 工作流程编排— Metaflow、kubeflow、ZenML、Argo、Luigi、Dagster、Prefect
  • 用例—计算机视觉(图像分类、图像分割、对象检测)、自然语言处理(会话、文本分类、问答、摘要)、音频(音频分类、语音检测)、表格(分类、回归)、强化学习和机器人技术

这个动态的生态系统无疑鼓励并创造了 AI 和 ML 社区中的许多创新。但是,如果每个团队都有自己的数据和 ML 栈和库,那么在整个组织中建立标准化和一致的 ML 工作流也会面临挑战。

如果您的组织拥有分散到不同职能部门的各种数据科学和 ML 团队,评估和推荐跨团队的一组一致的开源堆栈和库,并将它们作为整体 ML 基础架构的一部分,将会非常有用。在这种情况下,团队的工作可以重用,知识可以共享,ML 工作流/ MLOps 实践可以标准化。

连续变化状态

与普通软件不同,ML 驱动系统的迭代可以非常快,因为 ML 模型是从数据中学习的,而不是用定义的和固定的规则编程的。事实上,我们知道数据可能会很快改变。结果,ML 驱动系统的性能会显著改变(通常以恶化的方式)。为了应对这些挑战并确保 ML 驱动的系统始终保持高性能和可靠性,有两个方面非常关键。一个是监控,一个是自动化。

  • 监控 一般来说,ML 监控包括数据监控、特征监控和模型监控。数据监控是指了解数据的汇总统计、分布和趋势是否发生了变化。与数据监控类似,特征监控是为了了解用于训练模型的特征如何随时间而变化。模型监控侧重于关键指标的性能退化,并在未知问题对您的产品和业务造成真正损害之前将其暴露出来。如果我们以分类模型为例,这些关键指标将包括分类准确度、精确度、召回率、F1 和混淆矩阵。对于可能对特定群体产生偏见和不公平的 ML 驱动的系统,深入了解模型如何跨特定群组得出结果也是至关重要的。用多维比较根除和减轻潜在模型偏差对边缘群体的影响。
  • 自动化 由于 ML 驱动系统的迭代可能非常快,要求任何人通过重新开发新功能、重新训练 ML 模型和重新部署模型来手动响应变化是不现实的,特别是当您有数百个 ML 模型在生产中运行时。首先,这种手动方法非常耗费人力,您必须不断发展您的数据科学和 ML 团队来应对这些变化。第二,这种方法是不可测试的,如果 ML 驱动的系统没有经过充分的测试和验证,可能会产生更多的错误。第三,这种手动方法可能需要几天的时间来完成,并且可能永远不够快来处理变更并部署 ML 模型的最新更新版本。因此,有必要将这种模型重新训练和重新部署过程自动化。强大的监控加上有力的持续集成/持续培训/持续部署(CI / CT / CD)可以实现这种自动化。这就是为什么 MLOps 是非常必要的,特别是对于在生产中有许多 ML 模型或者有非常复杂和关键的系统使用 ML 模型作为基本部分的组织。

摘要

对于许多 ML 驱动的系统,MLOps 是必要的。希望通过解释为什么 ML 系统是独特的——以数据为中心、多团队和多技能组合、动态生态系统和持续变化状态——您可以更好地理解为什么 MLOps 是必要的。更重要的是,您可以了解 MLOps 试图解决什么问题,以便您可以做出更明智的决策,如您的组织是否需要 MLOps,如果答案是“是”,那么 MLOps 的哪些组件是必要的,以及您应该如何构建您的数据和人工智能基础设施以真正收获人工智能的价值。

我希望你喜欢阅读这篇博客。如果你想在有新博客发表时得到通知,请随时关注我。我一般每周都会发表 1-2 篇关于数据和 AI 的文章。

如果你想看到更多围绕现代高效数据+AI 栈的指南、深度潜水、见解,请订阅我的免费简讯— 高效数据+AI 栈 ,谢谢!

注:以防万一你还没有成为一个媒体成员,并希望获得无限制的媒体,你可以使用我的推荐链接注册!我可以免费给你一点佣金。非常感谢你的支持!

线性代数在机器学习中是如何应用的

原文:https://towardsdatascience/how-is-linear-algebra-applied-for-machine-learning-d193bdeed268

从使用矩阵和向量来表示数据开始

用于机器学习的线性代数(图片来自作者的网站

说实话,线性代数在机器学习中的作用一直困扰着我,因为我们大多是在数学背景下学习这些概念(如向量、矩阵),而放弃它们在机器学习环境中的应用。事实上,线性代数在机器学习中有几个基本的用例,包括数据表示、维数约简和向量嵌入。从介绍线性代数中的基本概念开始,本文将构建一个如何将这些概念应用于数据表示的基本视图,例如求解线性方程组、线性回归和神经网络。但是,如果您想了解更多关于主成分分析(PCA)的线性代数,您可能会发现这篇文章更有帮助。

对于机器学习线性代数的视频演练,我在本文底部包含了我的 YouTube 视频。

标量、向量、矩阵和张量的定义

首先,让我们解决线性代数的构建模块——标量、向量、矩阵和张量。

标量、矢量、矩阵、张量(图片由作者提供)

  • 标量:单个数字
  • Vector:一维数字数组
  • 矩阵:数字的二维数组
  • 张量:多维数组的数字

为了实现它们,我们可以在 python 中使用 NumPy 数组np.array()

scalar = 1
vector = np.array([1,2])
matrix = np.array([[1,1],[2,2]])
tensor = np.array([[[1,1],[2,2]], 
                   [[3,3],[4,4]]])

让我们看看上面生成的向量、矩阵和张量的形状。

向量、矩阵、张量形状(图片由作者提供)

矩阵和向量运算

1.加法、减法、乘法、除法

矩阵运算中的加减乘除(图片由作者提供)

类似于我们对数字的运算,同样的逻辑也适用于矩阵和向量。但是,请注意,对矩阵的这些操作对两个大小相同的矩阵有限制。这是因为它们是以元素方式执行的,这与矩阵点积不同。

矩阵运算(图片作者提供)

2.点积

点积经常与矩阵元素乘法混淆(上面已经演示过);其实是对矩阵和向量比较常用的运算。

点积通过将第一个矩阵的每一行与第二个矩阵的每一列一次一个元素地迭代相乘来操作,因此j x k矩阵和k x i矩阵之间的点积是一个j x i矩阵。这是一个 3x2 矩阵和 2x3 矩阵之间的点积的例子。

矩阵点积(图片由作者提供)

点积运算需要第一个矩阵中的列数与第二个矩阵中的行数相匹配。我们用dot() 来执行点积。运算中矩阵的顺序至关重要——如下所示,matrix2.dot(matrix1)将产生与matrix1.dot(matrix2)不同的结果。因此,与逐元素乘法相反,矩阵点积是不可交换的。

矩阵点积(图片由作者提供)

3.使再成形

矩阵整形(图片由作者提供)

一个向量通常被视为一个只有一列的矩阵,通过使用reshape()指定列数和行数,它可以被重新整形为矩阵格式。我们也可以将矩阵改变成不同的布局。例如,我们可以使用下面的代码将 2x2 矩阵转换为 4 行 1 列。

矩阵整形(图片由作者提供)

当矩阵的大小未知时,reshape(-1)常用来降低矩阵维数,将数组“展平”成一行。整形矩阵可广泛应用于神经网络中,以使数据适合神经网络结构。

矩阵整形(图片由作者提供)

4.移项

矩阵转置(作者图片)

转置交换矩阵的行和列,这样一个j x k矩阵变成了k x j。为了转置一个矩阵,我们使用matrix.T

矩阵转置(作者图片)

5.单位矩阵和逆矩阵

矩阵求逆(图片作者提供)

逆矩阵是矩阵的一种重要变换,但是为了理解逆矩阵,我们首先需要解决什么是单位矩阵。单位矩阵要求列数和行数相同,并且所有对角元素都为 1。此外,矩阵或向量在乘以其对应的单位矩阵后保持不变。

为了用 Python 创建一个 3×3 的单位矩阵,我们使用了numpy.identity(3)

身份矩阵(图片由作者提供)

矩阵本身(下面表示为 M)和矩阵的逆矩阵的点积是单位矩阵,它遵循以下等式:

关于矩阵求逆,有两件事需要考虑:1)矩阵和矩阵求逆的顺序无关紧要,即使当顺序改变时,大多数矩阵点积是不同的;2)并非所有矩阵都有逆矩阵。

为了计算矩阵的逆矩阵,我们可以使用np.linalg.inv()

矩阵求逆(图片作者提供)

在这个阶段,我们只涉及了线性代数中支持数据表示应用的一些基本概念;如果你想更深入地了解更多的概念,我发现 Deisenroth,Faisal 和 Ong 的书《机器学习的数学》特别有帮助。

感谢您远道而来。如果你想阅读我更多关于媒介的文章,我将非常感谢你的支持,注册成为 媒介会员

线性代数在 ML 中的应用

我们将从向量和矩阵在解线性方程组中最直接的应用开始,并逐渐推广到线性回归,然后是神经网络。

1.线性代数在线性方程组中的应用

假设我们有下面的线性方程组,计算 a 和 b 的值的典型方法是一次消除一个元素,这对于两个变量来说需要 3 到 4 个步骤。

3a + 2b = 7

a — b = -1

另一种解决方案是用矩阵和向量的点积来表示。我们可以将所有系数打包成一个矩阵,将所有变量打包成一个向量,因此我们得到如下结果:

矩阵表示给了我们一种不同的心态,一步解决方程。如下所示,我们将系数矩阵表示为 M ,变量向量表示为 x 和输出向量 *y,*然后将方程的两边乘以矩阵 M 的逆矩阵。由于矩阵的逆矩阵和矩阵本身之间的点积是单位矩阵,我们可以将线性方程组的解简化为系数矩阵 M 的逆矩阵和输出向量 y 之间的点积。

我们使用下面的代码片段一步计算变量 a 和 b 的值。

以矩阵形式求解线性方程组(图片由作者提供)

通过用矩阵表示线性方程组,这大大提高了计算速度。假设我们使用传统的方法,它需要使用几个 for 循环来一次消除一个元素。对于这样一个简单的系统来说,这似乎是一个小小的增强,但如果我们将其扩展到机器学习,甚至是由大量像这样的系统组成的深度学习,它会大大提高效率。

2.线性代数在线性回归中的应用

在求解线性方程系统中示出的相同原理可以被推广到机器学习中的线性回归模型。如果你想刷新你对线性回归的记忆,请查看我的文章“线性回归实用指南”。

假设我们有一个包含 n 个特征和 m 个实例的数据集,我们通常将线性回归表示为这些特征的加权和。

如果我们用矩阵的形式来表示一个实例的公式呢?我们可以将特征值存储在一个1 x (n+1)矩阵中,权重存储在一个(n+1) x 1向量中。然后我们将相同颜色的元素相乘,将它们相加得到加权和。

线性回归矩阵表—一个实例(图片由作者提供)

当实例数量增加时,我们自然会想到使用 for 循环一次迭代一个条目,这可能会很耗时。通过以矩阵格式表示算法,线性回归优化过程归结为通过线性代数运算求解系数向量[ w0,w1,w2 … wn]

线性回归矩阵表单—多个实例(图片由作者提供)

此外,流行的 Python 库(如 Numpy 和 Pandas)建立在矩阵表示的基础上,并利用“矢量化”来加快数据处理速度。找到了文章《告别 Python 中的循环,欢迎矢量化!“在 for-loop 和矢量化的计算时间比较方面很有帮助。

3.线性代数在神经网络中的应用

神经网络由多层互连的节点组成,其中来自前几层的节点的输出被加权,然后被聚合以形成后几层的输入。如果我们放大神经网络的互连层,我们可以看到回归模型的一些组件。

神经网络中的隐藏层(图片由作者提供)

举一个简单的例子,我们从一个神经网络中可视化出隐藏层 I(具有节点 i1,i2,i3 )和隐藏层 j(具有节点 j1,j2 )的内部过程。 w11 代表馈入节点 *j1、*的输入节点 i1 的权重, w21 代表馈入节点 j1 的输入节点 i2 的权重。在这种情况下,我们可以将权重打包成 3x2 矩阵。

矩阵形式的神经网络—一个实例(图片由作者提供)

这可以推广到数千甚至数百万个实例,形成神经网络模型的大规模训练数据集。这个过程类似于我们如何表示线性回归模型,除了我们使用一个矩阵来存储权重,而不是一个向量,但是原理是一样的。

矩阵形式的神经网络—多个实例(图片由作者提供)

更进一步,我们可以将此扩展到深度学习的深度神经网络。这就是张量在表示二维以上数据时发挥作用的地方。例如,在卷积神经网络中,我们对图像像素使用 3D 张量,因为它们通常通过三个不同的通道(即,红色、绿色、蓝色通道)来描述。

正如你所看到的,线性代数在机器学习和深度学习算法中起着构建模块的作用,这只是线性代数在数据科学中的多个用例之一。希望在未来的文章中,我可以介绍更多的应用,如线性代数降维。要阅读更多我关于媒体的文章,我将非常感谢你的支持,注册成为媒体会员。

带回家的信息

线性代数在机器学习中的重要性似乎是不言而喻的,然而,它在数据表示等方面发挥着重要作用。在本文中,我们首先介绍一些基本概念,例如:

  • 标量、矢量、矩阵、张量
  • 加法、减法、乘法、除法、点积
  • 整形、转置、反转

此外,我们讨论了这些概念如何应用于数据科学和机器学习,包括

  • 线性方程组
  • 线性回归
  • 神经网络

更多这样的文章

德斯坦贡

机器学习实用指南

View list10 stories

德斯坦贡

开始学习数据科学

View list8 stories

原载于 2022 年 12 月 28 日【https://www.visual-design】

您的数据是如何分布的?Kolmogorov-Smirnov 检验的实用介绍

原文:https://towardsdatascience/how-is-your-data-distributed-a-practical-introduction-to-the-kolmogorov-smirnov-test-6b4fa7ba32ef

初学者 KS 测试介绍

照片由papazachariasa Pixabay

数据科学家通常需要评估数据的适当分布。我们已经看到了正态分布的夏皮罗-维尔克检验,但是非正态分布呢?还有一个测试可以帮助我们,那就是科尔莫戈罗夫-斯米尔诺夫测试。

需要检查分布情况

数据科学家通常面临检查他们的数据分布的问题。他们处理样本,需要检查样本是否来自正态分布、对数正态分布,或者两个数据集是否来自同一分布。当你在机器学习中执行训练测试分割时,这很常见。

例如,您可能希望查看从总体中抽取的样本在统计上是否与总体本身相似。或者从同一人群中抽取几个样本,想看看彼此是否相似。

所有这些问题都有一个共同的因素:将样本的分布与另一个样本的分布或已知的概率分布进行比较。

接下来是 Kolmogorov-Smirnov 测试。

科尔莫戈罗夫-斯米尔诺夫试验

KS 测试有两个版本,每个版本都有自己的零假设:

  • 样本是根据给定的概率分布生成的
  • 从相同的概率分布中生成了两个样本

前者是单样本 KS 检验,后者是双样本 KS 检验。

两种测试都将样本的累积分布函数与给定的累积分布函数进行比较。从数学上来说,计算这种分布之间的距离,并将其用作可用于计算 p 值的统计值。

这些测试非常强大,尽管它们在计算 p 值时存在一些近似值,并且存在异常值。但是,是一个非常有用的工具,必须放在数据科学家的工具箱中。

让我们看看它们在 Python 中是如何工作的。

Python 中的一个例子

让我们分别从正态分布和均匀分布创建两个数据集。它们不需要具有相同的尺寸。

import numpy as np 

x = np.random.normal(size=100) 
y = np.random.uniform(size=200)

现在,我们可以执行 KS 检验来评估第一个样本是来自正态分布还是均匀分布。为了执行这个测试,我们需要从 SciPy 导入我们想要检查的分布的累积分布函数和一个执行测试的适当函数(“ks_1samp”函数)。

from scipy.stats import ks_1samp,norm,uniform

现在,我们可以运行测试,将“x”数据集的分布与正态累积分布进行比较。

ks_1samp(x,norm.cdf) 
# KstestResult(statistic=0.05164007841056789, pvalue=0.9398483559210086)

正如所料,p 值相当大,我们不能拒绝零假设,即数据集是由正态分布生成的。

如果我们对均匀分布进行同样的检查,结果会非常不同:

ks_1samp(x,uniform.cdf) 
# KstestResult(statistic=0.5340516556530323, pvalue=3.580965283851709e-27)

一个非常小的 p 值可以让我们拒绝零假设,即样本是由均匀分布产生的,这实际上是我们所期望的。

双样本测试非常简单。我们必须从 SciPy 导入“ks_2samp”函数,并将两个样本作为参数传递。

from scipy.stats import ks_2samp 

ks_2samp(x,y) 
# KstestResult(statistic=0.53, pvalue=9.992007221626409e-16)

正如预期的那样,p 值非常低,因为我们从非常不同的分布中人工构建了这些数据集。

因此,Kolmogorov-Smirnov 测试证实了我们的假设。

结论

Kolmogorov-Smirnov 测试是数据科学家工具箱中非常强大的工具,每次我们想要查看我们的数据是否来自给定的分布或者两个数据集是否共享相同的分布时,都必须正确使用。然而,p 值的计算可能会受到一些近似值的影响,必须正确处理,就像任何 p 值一样。

我是 Gianluca Malato,意大利数据科学家、作家和企业家。我通过我的在线课程和书籍帮助人们成为专业的数据科学家和分析师。看看我的在线课程 这里

原载于 2022 年 11 月 14 日 https://www.yourdatateacherhttps://www.yourdatateacher/2022/11/14/how-is-your-data-distributed-a-practical-introduction-to-the-kolmogorov-smirnov-test/

知识图表如何让人工智能理解我们的世界

原文:https://towardsdatascience/how-knowledge-graphs-are-making-ai-understand-our-world-666bc68428e2

基于逻辑的计算方法的成功与失败

萨拉·库菲在 Unsplash 上拍摄的照片

你可能听说过谷歌的知识图,它为用户在搜索引擎上的查询提供文字答案。

这些知识图表在计算机科学中有很长的历史。研究人员在 70 年代就已经试图建立一个通用的数据库来回答任何可能的问题。但是这种方法很快就在可伸缩性和理解能力方面达到了极限。

今天,这些数据结构在企业数据库、市场情报和推荐算法中找到了第二次生命。让我们看看这些知识体系的好处和局限性。

专家系统的历史

斯坦福启发式编程项目的霉素实验封面,1984 年

在 20 世纪 70 年代,一些人工智能研究人员怀疑计算系统能否形成对事物的全局理解。所以他们决定让他们研究狭窄的、定义明确的问题。

通过向算法提供特定专业领域的知识,他们认为自己会做出比人类专家更好的决策。他们称之为基于计算机的专家系统有三个部分。

首先,一个知识库,里面装满了与当前主题相关的“如果-那么”规则(例如,如果一个动物有羽毛,它就是一只鸟)。其次,包含当前断言和信息的运行记忆系统(“这种动物有一层毛”)。第三,推理系统,用不同的规则对案例进行推理,并给予它们或多或少的权重(“这种动物没有羽毛,因此它不是鸟”)。

研究人员已经用成千上万条规则构建了专家算法,并对结果感到非常惊讶。在某些情况下,他们发现他们几乎可以击败人类专家的判断。

例如,斯坦福大学的一个团队试图创建一个专家系统,对血液疾病进行准确的诊断。这个名为 MYCIN 的系统是由真正的医生的知识提供的,这些医生把他们的一生都奉献给了这个课题。随着案件变得越来越复杂,该算法还包括概率因素,以评估决策的不确定性。

多亏了这个复杂的数据库,霉素可以在同一病例中提供等同于或优于人类医生的诊断。这为许多其他处理类似狭窄主题的专家系统铺平了道路。

但是,尽管有这些说法,这些系统可能显示出真正的局限性,这取决于所研究的主题的性质。其中之一就是很难提取出复杂话题背后的所有显性规律。

通用信息库的诱惑

一个本体工程图的例子【https://en.wikipedia/wiki/Ontology_engineering

受基于符号的人工智能成功的激励,研究人员在 80 年代提出了越来越雄心勃勃的项目。

他们中的一个,道格拉斯·莱纳特,设想了一个计算系统,它包含足够的知识来建立我们世界的智能。他所谓的 Cyc 项目。

为了实现这样一个项目,Lenat 和他的团队试图描述每一个让我们了解我们环境的明确规则(例如,扔进池塘的石头会下沉,或者飞机需要推力才能飞行)。

但在解释规则之前,研究人员必须首先教给系统一些基本概念,以便能够思考(什么是一个事物,它与其他事物有什么关系……)。他们必须试图构建他们所谓的工程本体论,即共同理解的基础。在这个结构基础上,团队经过大量努力,历时十年创建了一个极其庞大的知识图谱。

计算机科学的先驱 Vaughan Pratt 被他们的项目迷住了,他决定严格评估他们系统的智能。在几次演示中,Pratt 用认知练习测试了对 Cyc 的理解。一项是分析一个人放松的照片。Cyc 的反应是展示一张人们拿着冲浪板的照片,将冲浪与海滩和放松的环境联系在一起,这显示了很好的推理。然而,在检查系统思维链时,普拉特也意识到它依赖于不太必要的逻辑推理(就像人类有两只脚一样)。

这不是 Cyc 的唯一缺陷。在更复杂的常识性问题上,它也表现不佳。当被问及面包是否是一种饮料时,系统没有给出任何可理解的答案。同样,虽然 Cyc 知道许多死亡原因,但他不知道饿死。演示因此以悲观的基调结束:Cyc 似乎总是被侵蚀其全球一致性的知识缺口所绊倒。

尽管如此,Douglas Lenat 继续从事这个项目,为建立知识库带来了新的方法。而且他可能仍然对某些东西感兴趣,因为知识系统现在正在寻找新的有趣的应用。

使用知识图促进数据理解

谷歌上“星球大战中的绿色怪物是什么”的搜索结果。作者制作的标题。

自从 80 年代的实验以来,智能知识系统已经找到了更具体的商业应用。

最具标志性的例子是谷歌将知识图表应用于其服务的方式。2012 年,该公司推出了一个系统,可以掌握互联网上的知识结构,为其搜索引擎提供信息。基于用户的意图,谷歌的算法可以将一个词与一个概念联系起来,并解开单个词背后的不同含义。

例如,人们键入类似“泰姬陵”的查询,既可以查找关于印度纪念碑的信息,也可以查找关于同名艺术家的新闻,还可以找到街角的印度餐馆。这完全取决于用户输入它的意图。

为了做出正确的回应,谷歌正在构建一个知识系统,这个系统能够比字面上的关键词查询匹配更深入地理解信息。它可以从文本中提取一般规则,并对事实进行逻辑推理。例如,当你寻找“星球大战中的绿色怪物”时,谷歌可以从链接中判断出你正在寻找贾巴小屋,说明它是“一个巨大的,类似鼻涕虫的外星人”。所以它可以把“外星人”这个概念和查询“绿怪”联系起来,相对准确。

但是除了搜索模型之外,知识图也被用于其他人工智能模型。例如,在卫生部门,研究公司收集了大量没有任何标签或结构的数据。这些数据是一个巨大的错过的机会,以获得对药物开发和治疗可能性的更好的见解。

通过自动注释和使用人类的洞察力,自然语言处理模型为研究数据提供意义,在疾病和治疗之间做出推断。基于精心构建的知识,这种模型可以通过准确、有根据和透明的推理将疾病或已知的健康状况与科学研究联系起来。

这种模型也越来越多地用于投资和商业发展决策。大公司需要市场情报,而不仅仅是基于无意义的数据搜集。他们希望捕获与其特定业务问题相关的信息。

他们还希望能够监控所有关于该公司的新闻和评论,以评估他们的声誉。基于知识图表,智能数据处理软件可以帮助发现新的见解,并收集关于公司的深层反馈。

换句话说,人类知识和数据智能之间的协作从未如此激烈。而这仅仅是人类和机器之间漫长而富有成效的对话的开始!

线性回归、时间序列分析和箱线图如何帮助我们理解制造过程

原文:https://towardsdatascience/how-linear-regression-time-series-analysis-and-box-plot-can-help-us-understand-manufacturing-5c581f945edb

关于如何在不了解流程的情况下,查看制造数据并尝试理解是否可能存在系统性制造问题的一些想法

乔希·比奇在 Unsplash 上的照片

说到制造业,数据变得越来越重要。我研究了不同种类的制造过程,我可以说,我们可以通过分析数据来了解过程中是否存在一些制造问题;当然,在分析之后,如果我们认为某些制造问题可能存在,则必须在制造生产环境中调查该过程。

在继续之前,我必须说,这种方法已经在真实的案例研究中得到测试和验证,但我在本文中展示的图表是根据模拟数据生成的。当然,即使这些数字是模拟的,这也不会影响过程,它仍然是有效的:显示的数字只是理解过程的参考。

首先要知道的是,我只分析了由人类操作员实现的制造过程:我从未(直到现在)分析过由机器人或以某种方式自动化的制造过程(我认为,这项研究必须以不同的方式进行)。这种分析制造数据的方式可以在许多手工制造过程中给出好的结果;它们可以是:焊接、装配、功能测试、钣金弯曲等。

因此,假设我们有一个在“x”制造阶段实现的产品。“x”的值是多少并不重要,因为这种方法是通用的,每次研究一个阶段是有用的。
假设我们已经注册并存储了产品的生产数据。我们拥有的数据是每个阶段制造产品所需的时间,我们甚至知道是什么时候制造的(日期,用日、月和年表示)。
最后,我们将“周期时间”定义为每个阶段制造产品所需的时间。

现在,假设我们已经导入并清理了我们的数据(“周期时间”),我们希望看到每个月的周期时间,用回归线分布。让我们称我们的数据框架为“阶段”。
首先,我们希望从“日期”列中提取“月份”,并添加“月份”作为数据框的新列;我们可以这样做:

#pandas as pd already importedphase[‘month’] = pd.DatetimeIndex(phase[‘date’]).month

现在,我们可以用回归线绘制每个月的周期时间散点图:

import seaborn as sns
import matplotlib.pyplot as plt#plotting the time series analysis with a regression line
sns.regplot(data=phase, x="month", y="time",
line_kws={"color": "red"})#labeling
plt.title(f"LINEAR REGRESSION OF THE TIME SERIES ANALYSIS", fontsize=25) #plot TITLEplt.xlabel("MONTH", fontsize=20) #x-axis label
plt.ylabel("CYCLE TIMES [m]", fontsize=20) #y-axis label

这是结果:

周期时间的时间序列的线性回归(红线)。图片由作者提供。

因此,从 4 月(第 4 个月)到 10 月(第 10 个月),平均周期时间增加了,因为回归线具有正斜率。我们只能说这些吗?能不能稍微深入分析一下这个阶段?

可以试试箱线图分析,看能不能帮到我们。让我们创建箱线图:

#boxplot
sns.boxplot(data=phase, x='month', y='time')#labeling
plt.title(f"BOXPLOT", fontsize=16) #plot TITLE
plt.xlabel("MONTH", fontsize=14) #x-axis label
plt.ylabel("CYCLE TIME[m]", fontsize=14) #y-axis label#adding an horizotal line to the mean cycle time
plt.axhline(mean, color="red") #horizontal line of mean cycle time
red_line = mpatches.Patch(color="red",
label=f"mean value: {mean:.1f} [m]")#handling the legend
plt.legend(handles=[red_line],prop={"size":12})

这是结果:

周期时间的箱线图。图片由作者提供。

箱线图似乎更有帮助。事实上,我们可以看到,从 4 月到 6 月,盒子有一点“波动”,这是正常的;但是,从 7 月到 10 月,箱子的周期时间明显变长了!

当然,我们不知道是什么导致了这种转变,但既然转变是明显的,即使根据回归线,周期时间也有所增加。

这种分析为我们提供了进入细节的输入,试图理解是什么导致了周期时间的增加,以及是否可以消除它。因为,因为我们是在制造业,周期时间的增加可能是因为需要提高产品的质量(例如,我生产得更慢,提高质量和减少错误)。

结论

我认为这种方法真的有助于理解是否存在“系统性制造问题”,分析我们拥有的数据。当然,在此分析之后,必须在生产环境中分析制造流程,以了解为什么会出现这种系统性的制造问题,这是什么问题,以及是否必须消除这种问题。

我们一起连线吧!

https://federicotrotta.medium/

LINKEDIN(向我发送连接请求)**

如果你愿意,你可以 订阅我的邮件列表这样你就可以一直保持更新了!

考虑成为会员:你可以免费支持我和其他像我一样的作家。点击 这里成为会员。

机器学习如何推动零信任革命

原文:https://towardsdatascience/how-machine-learning-powers-the-zero-trust-revolution-6953bfc0c14c

图片来源: Pixabay

零信任正在安全领域掀起风暴。这是一种新的模式,在提高现代分布式 It 环境的安全性方面具有巨大的潜力。然而,零信任需要先进的技术来评估计算机网络上的活动,动态确定风险,并自动分配策略。

在本文中,我将解释零信任系统的这些复杂要求,以及机器学习如何使它们成为可能。

什么是零信任?

零信任是一种安全模型,旨在保护网络免受内部威胁。它包括实施安全措施,执行“永远不信任,永远验证”的方法。常见的零信任安全措施包括微分段、粒度访问控制策略和第七层威胁防御。

Forrester Research 的 John kinder vag构思了这个安全模型。他意识到传统的安全模型天真地假设网络中的一切都是可信的。因此,这些网络不会怀疑用户身份遭到破坏,假设所有用户都负责任地行动。

零信任模型将信任视为一个漏洞,因为它使内部人员(无论恶意与否)能够在网络中横向移动,访问用户允许的任何数据和操作。

机器学习如何推动零信任安全

启用基于风险的安全策略

安全领导者正在从传统的以合规为中心的安全方法转向风险驱动的方法。不同之处在于,在传统方法中,组织对已知的法规遵从性要求做出反应,而在基于风险的方法中,组织不断评估威胁形势并采取主动措施来防止威胁。

组织可以依靠机器学习技术来实时评估用户请求,评估设备、网络和相关行为数据等安全环境,并生成风险评分。访问控制策略可以包括这种动态风险分值,以允许访问、拒绝访问或要求更严格的身份验证。

机器学习驱动的风险评分可以考虑各种因素来识别和应对风险:

  • 试图访问的位置。
  • 设备特征,包括固件类型、浏览器类型和操作系统。
  • 设备健康,包括安全补丁、软件更新和反恶意软件保护。
  • 角色、资历和历史访问日志等用户属性。
  • 日、月、年的时间。
  • 最近对权限或权限请求的异常更改。
  • 异常命令或对资源的访问。

大规模实施安全策略

在大型组织中,可能有数百个应用程序和云服务以及数千个用户。需要在这个复杂的环境中实施标准化的策略,并可靠地检测违规行为。

机器学习可以通过根据行为模式的实时分析自动调整访问策略来提供帮助。这可以根据组织定义的中央策略自动完成,而不是让 IT 和安全团队不断审查访问请求并手动授予访问权限。

从最终用户的角度来看,这也提供了更好的体验,因为如果用户的请求是合法的,他们将获得快速访问,而无需等待手动批准。

改善用户体验

传统上,在改进的安全性和积极的用户体验之间有一个缺点。更安全的系统通常令人沮丧且难以使用。组织现在认识到安全性应该是透明的,对用户来说是非侵入性的,这将鼓励用户采用安全的身份验证机制,并将提高整体安全性。

早期的多因素身份认证(MFA)对用户体验有负面影响,并受到用户和员工的反对。许多组织倾向于不采用 MFA,或使其成为自愿的,以避免吓跑用户。然而,新一代零信任技术正在改变这一点。

基于机器学习技术的现代认证将用户的安全环境考虑在内,可以实现更简化的用户体验。一个例子是无密码认证系统,它可以通过组合动态认证因素来认证用户。另一个例子是,从办公室使用公司工作站登录的用户可能使用 SSO 身份验证令牌登录,甚至不需要提供密码。相反,如果用户试图远程登录或在不正常的时间登录,身份验证系统可以传达登录尝试不正常,需要额外的身份验证。

这种类型的差别认证是有意义的,并且将会得到用户的支持,尤其是当他们的日常登录过程是积极的时候。基于 ML 风险评分的差异认证可以将用户转变为组织安全工作的合作伙伴。

AI/ML 在零信任技术中是如何使用的?

几项安全技术在零信任部署中起着关键作用:

  • 下一代防病毒(NGAV) —用于验证最终用户设备的健康状况,并使零信任系统能够阻止被入侵设备的访问。
  • 扩展检测和响应(XDR) —用于跨越孤岛,从混合环境中收集数据,以检测和响应复杂的威胁。
  • 用户和事件行为分析(UEBA) —用户和服务帐户行为分析背后的引擎,它是零信任访问方法的基础。

人工智能在下一代反病毒中的应用

NGAV 通过检测与已知文件签名不匹配的新攻击来改进传统防病毒软件。它可以抵御零日攻击、无文件攻击和改变源代码以避免被传统防病毒软件检测到的规避恶意软件。

NGAV 利用几种机器学习技术来检测未知威胁:

  • 静态特征 —将单个二进制代码或汇编文件与已知恶意软件的代码片段进行比较。
  • 字符串分析 —分析来自可执行程序的可打印字符串,这些字符串可能出现在 URL、文件路径、菜单、API 命令、配置文件或命令行输出中。
  • N-grams 分析 —分析从可疑二进制文件中提取的字节序列。
  • —分析代码的统计方差,识别加密或混淆代码。
  • 可视化二进制内容 —将恶意软件的二进制代码转换为图像格式(其中每个字节都是图像中的一个像素),并使用计算机视觉技术对其进行分析。
  • 控制流图(CFG) —使用控制流图来比较可疑恶意软件和已知恶意软件。

扩展检测和响应(XDR)中的人工智能

XDR 是一种新的安全技术,它关联和分析来自各种来源的数据,以识别规避的威胁。这有助于在零信任环境中检测和主动搜寻高级威胁。

XDR 解决方案利用机器学习技术将来自网络日志、端点和云日志的数据点缝合在一起,以检测攻击并实现更简单的调查。该数据具有很高的维度(通常一次攻击的行为维度超过 1000)。对组合攻击数据的分析利用了:

  • 自动化数据预处理 — XDR 解决方案从许多来源聚合数据,将其标准化并自动清理,以便在机器学习算法中使用。从某种意义上来说,XDR 解决方案是一个“盒子里的数据科学家”,从 IT 系统中提取实时数据,并将其转化为标准化的数据集,可以馈入无监督和有监督的 ML 算法。
  • 无监督机器学习 — XDR 解决方案使用无监督算法来创建用户和设备的基线行为,并识别对等组,这有助于确定特定实体的正常行为。然后,它可以比较过去的行为、当前的行为和对等行为,以检测恶意软件、命令和控制(C & C)通信、横向移动和数据泄漏。
  • 监督机器学习 — XDR 解决方案识别网络上的各种实体,如 Windows 电脑、电子邮件服务器或 Android 手机。然后,它可以使用已知的可疑事件作为训练集,对与一类实体相关的流量和事件进行大规模监督算法训练。然后,该算法执行推理以在运行时识别可疑事件。这种方法可以极大地减少误报。

用户和实体行为分析中的人工智能(UEBA)

UEBA 是许多安全系统的基础,这些系统试图通过将当前行为与已知的行为基线进行比较来识别未知的威胁。

UEBA 系统的输入是日志数据。这些数据被处理成事件,被摄取到机器学习算法中,输出是每个事件的风险分数。商业 UEBA 系统在非常大的规模上这样做,以低延迟推理对实时大数据进行操作。

自动 UEBA 的一个重要部分是其自动化数据预处理。它执行统计分析以查看哪些数据字段适合进行分析,提取对安全分析有用的变量或特征,并确定哪些可用算法最适合数据。

UEBA 使用非监督和监督方法来分析安全数据,动态决定哪种算法最适合每种类型的数据:

  • 监督算法 —当 UEBA 拥有预先标记的数据时,它会利用监督算法。例如,如果安全系统提供已确认事件的历史日志,则该日志被标记为恶意活动数据。UEBA 系统可以根据这些数据进行训练,并分析任何类似的数据来检测相同类型的恶意活动。UEBA 系统中常用的算法有逻辑回归、线性回归和深度神经网络。
  • 无监督算法 —在许多情况下,UEBA 没有带标签的数据集可供使用。在这种情况下,它使用像 K-means 聚类这样的算法,可以学习数据点之间的相似性。例如,聚类算法可以查看访问日志的大型数据集,识别统计属性,如频率、直方图和时序结构,并将它们分组为具有明显相似性的聚类。通常,异常行为将被分组到最小的群集中,这是系统可以发现可疑或恶意访问尝试的地方。

结论

在这篇文章中,我解释了零信任的基础,以及机器学习如何影响组织中零信任的采用。我介绍了三个案例研究,展示了机器学习是如何在零信任技术中使用的:

  • 下一代防病毒(NGAV) —利用各种技术来分析被怀疑为不安全的二进制文件,并识别新的和未知的恶意软件中的恶意属性。
  • AI in eXtended Detection and Response(XDR)—执行自动化数据预处理,创建与多个 IT 系统相关的海量数据集,并使用监督和非监督方法将相关事件缝合在一起并识别攻击。
  • AI in User and Entity Behavioral Analytics(UEBA)——收集网络中实体的数据,动态决定对其应用哪种机器学习算法,并基于标记或未标记的数据集计算风险分值。

在未来几年,我们可以期待看到人工智能和机器学习在安全行业变得更加普遍。很快,强大的 ML 基础将成为任何零信任安全技术的关键部分。

有多少个集群?

原文:https://towardsdatascience/how-many-clusters-6b3f220f0ef5

选择正确聚类数的方法

简介

聚类是一种无监督的机器学习方法,可以从数据本身识别相似数据点的组,称为聚类。对于一些聚类算法,如 K-means,需要事先知道有多少个聚类。如果没有正确指定簇的数量,那么结果的信息量就不大(见图 1)。

图 1 :不同簇数的聚类,k=4,6,& 8。具有 6 个集群的模拟数据。图片作者。

不幸的是,在许多情况下,我们不知道我们的数据中有多少聚类。事实上,弄清楚有多少个集群可能是我们首先要执行集群的原因。当然,数据集的领域知识可以帮助确定聚类的数量。但是,这是假设你知道目标类(或者至少知道有多少个类),而这在无监督学习中是不成立的。我们需要一种不依赖于目标变量就能告诉我们聚类数的方法。

确定簇的正确数量的一个可能的解决方案是强力方法。我们尝试用不同数量的聚类来应用聚类算法。然后,我们找到优化聚类结果质量的幻数。在本文中,我们首先介绍两个流行的度量标准来评估集群质量。然后,我们介绍三种方法来寻找最佳的集群数量:

  • 肘法
  • 轮廓系数的优化
  • 差距统计

聚类结果质量

在讨论确定最佳聚类数的不同方法之前,我们先来看看如何定量评估聚类结果的质量。想象以下场景。相同的数据集被分成三个集群(见图 2)。如您所见,左边的分类定义得很好,而右边的分类却很难识别。

图 2 :基于同一数据集的定义明确的聚类(左)和定义不明确的聚类(右)的例子。箭头指示数据点与其聚类中心之间的距离。图片作者。

这是为什么呢?请记住,聚类的目标是将数据点分组为簇,以便(1)簇内的点尽可能相似,(2)属于不同簇的点尽可能不同。这意味着,在理想的聚类中,类内变化较小,而类间变化较大。因此,一个好的聚类质量度量应该能够定量地总结(1)和/或(2)。

一个这样的质量度量是惯性。这是通过数据点和它们所属的聚类中心之间的平方距离之和来计算的。惯性量化了集群内的变化。

另一个流行的指标是轮廓系数,它试图总结集群内和集群间的变化。在每个数据点,我们计算到该数据点所属聚类中心的距离(称为 a ,以及到第二好的聚类中心的距离(称为 b )。这里,第二最佳聚类是指不是当前数据点的聚类的最接近的聚类。然后基于这两个距离 ab ,该数据点的剪影 s 计算为 s=(b-a)/max(a,b)。

在理想的聚类下,距离 a 与距离 b 相比非常小,导致 s 接近 1(见图 3,左侧)。如果聚类不是最理想的,那么距离 ab 可能不会有很大的不同(见图 3,中间)。在那种情况下, s 接近于 0。如果聚类更差,那么距离 a 实际上可能大于距离 b (见图 3,右侧)。在这种情况下, s 变为负值,接近-1。

图 3 :聚类最优(左)、次优(中)、更差(右)的场景。星星表示星团中心。图片作者。

一旦在所有数据点计算了 s ,则 s 的平均值确定了轮廓系数。可以分别为每个聚类或所有数据点计算轮廓系数。轮廓系数接近 1 表示聚类算法能够将数据划分为分离良好的聚类。

肘法

惯性是群集数量 k 的递减函数。然而,它的减少率在高于或低于最佳聚类数 K 时是不同的。对于KK<KK来说,惯性下降很快,而对于KK>KK来说,惯性下降很慢。因此,通过在 k 的范围内绘制惯性图,可以确定曲线在 k 处的弯曲位置,图 4 显示了图 1 示例中的惯性图。我们可以清楚地看到在 k =6 处有一个弯曲,或者说是肘部。

然而,这种方法有些主观,因为不同的人可能在不同的位置识别肘部。在我们图 4 的例子中,有些人可能认为 k =4 是肘。此外,正如我们将在后面看到的那样,肘部可能并不总是很明显。

图 4 :不同 k 下的惯量图,为图 1 所示的数据集。图片作者。

肘方法的用例可以在一个自然语言问题中看到,使用 KNIME 分析平台确定社交网络中的最佳主题数量(参见博客主题提取:使用肘方法优化主题数量)。因为没有 KNIME 节点来计算惯性,所以在本例中使用了一个 Java 片段节点来计算惯性。下面是用来计算惯性的代码片段。

// Initializing the sum of squares
out_sum_squares = 0.0;
/*
The first half of columns belong to features of the origin.
The second half of columns belong to features of the terminus.
The groups of columns have to be in the same order.
 */
int col_count = getColumnCount();
int no_dimensions = col_count / 2;// Loop over the feature columns
for(int i=0; i < no_dimensions; i++){
  /*
  Checking if the feature i from the origin and
  the feature i from the terminus (i.e., i+no_dimensions)
  are not missing, and have similar column names
   */
  if(!isMissing(i) && isType(i, tDouble)
   && !isMissing(i+no_dimensions) && 
   isType(i+no_dimensions, tDouble) &&
   getColumnName(i+no_dimensions).contains(getColumnName(i))){
    // Calculating the squared distance and adding it to the sum
    out_sum_squares += Math.pow(getCell(i, tDouble) - 
    getCell(i+no_dimensions, tDouble), 2);
   }
}

剪影法

轮廓系数可以提供更客观的手段来确定最佳的聚类数目。这是通过简单地计算 k 范围内的轮廓系数,并将峰值确定为最佳 K 来实现的。一个 KNIME 组件优化的 K-Means(剪影系数)正是这样做的。它在 k 的范围内执行 K 均值聚类,找到产生最大轮廓系数的最优 K ,并基于优化的 K 将数据点分配给聚类。图 5 显示了来自图 1 所示示例数据的轮廓系数图示例。可以看出,轮廓系数在 k =6 处达到峰值,因此被确定为最佳 k

图 5 :不同 k 的剪影系数图,为图 1 所示的数据集。图片作者。

差距统计

为了讨论间隙统计,让我们考虑一个没有任何聚类组织的随机数据集的聚类。假设一个随机数据集被聚类成 k 个聚类,然后根据聚类结果计算惯性(见图 6)。尽管缺乏基本的聚类组织,但随着 k 的增加,聚类的随机数据产生稳定减少的惯性(惯性的复数)。这是因为聚类中心越多,数据点到聚类中心的距离就越小,从而产生衰减惯性。相比之下,正如我们在图 4 中已经看到的,在具有聚类组织的数据集中,无论 k 低于还是高于最优聚类数 K ,惯性下降的速率都会变化。当观察到的惯性和随机数据一起绘制时,差异变得明显(见图 7)。通过比较来自(有希望的)聚类数据集和覆盖数据空间中相同范围的相应随机数据集的惯性来计算缺口统计量(Tibshirani 等人,(2001))。

图 6 :均匀分布的随机数据聚类成 k=4(左)、6(中)、15(右)个聚类。图片作者。

图 7 :原始数据(来自图 1)相对于 k. Image 范围内的随机数据,惯性如何降低。

在间隙统计的实际计算中,会生成一些随机样本,然后在 k 的范围内进行聚类,并记录所得的惯性。这为随机情况提供了一些惯性。原始数据集也在范围 k 上聚集,产生一系列惯性。在 k 簇上的间隙统计量计算如下

其中,Wk(i)是来自第 i 个随机样本(i=1,2,…,B)和第 k 个个聚类的惯量,Wk 是来自第 k 个个聚类的原始数据的惯量。我们还计算其标准偏差为

然后我们找到最优的 K 作为满足条件的最小的 k

间隙统计的计算涉及模拟。我们调用 R 中的函数,通过 KNIME 工作流中的一些 R 脚本来计算 gap 统计数据。具体来说,调用 clusGap()函数来计算不同 k 处的间隙统计量,maxSE()返回满足上述条件的最优 K 。图 8 显示了我们在图 1 中的示例数据集的间隙统计图,基于在每个 kB =100 次迭代。红线代表满足上述条件的最佳 K

图 8 :基于 B=100 次迭代的缺口统计及其标准差图。满足条件的最佳 k=6 由红线表示。图片作者。

需要注意的是,间隙统计法确定的最优 K 可能不一致。例如,当缺口统计方法多次应用于我们的玩具数据时,得到的最优 K 可能会不同(见图 9)。

图 9 :缺口统计图示例。最佳 k 可能不一致,这取决于模拟结果。图片作者。

示例:MNIST 手写数字数据

现在让我们在具有集群组织的真实数据集上检查上述三种方法。MNIST 数据集由从 0 到 9 的手写数字的灰度图像组成。在这个例子中,我们使用 8×8 像素的 n=1797 个图像。图 10 显示了数据集的一些例子。上述三种方法用于确定最佳聚类数。由于该数据集中有 10 个不同的数字,因此有理由假设有 10 个聚类,每个聚类对应于其中一个数字。然而,人们可能有多种方式来书写某些数字。因此,实际上集群的数量不一定是 10。数据的 2D 散点图(由 tSNE 投影到 2D 空间,见图 11)显示,一些集群可能与其他集群分离良好,而一些集群可能接触或重叠。这个例子的工作流程可以在 https://kni.me/w/ACjm92qCUGbXsCX6 的 KNIME Hub 上找到。

图 10 :手写数字数据的例子,以 8×8 像素下采样。图片作者。

图 11 :用 t-SNE(t-distributed random neighbor embedding)投影到 2D 空间的数字数据散点图。图片作者。

肘方法的结果是不确定的,因为图中没有明显的肘(图 12,左)。在图中有一些细微的弯曲(例如,9、12、20、24,仅举几个例子),并且这些中的任何一个都可以被选择作为聚类的数量。

图 12 :由手指数据生成的肘部图(左)和轮廓系数图(右)。图片作者。

图 13 :基于 B=100 次迭代,从数字数据生成的间隙统计图。红线表示最佳 k=12。图片作者。

轮廓系数在 k =12 处有一个峰值(图 12,右)。根据间隙统计法,k=12 也被确定为最佳聚类数(图 13)。我们可以直观地比较 k=9(根据肘方法最优)和 k=12(根据剪影和间隙统计方法最优)的 k 均值聚类(参见图 14)。

图 14 : K-Means 在 k=9,k=12 的数字数据中找到的聚类,用 t-SNE 投影到 2D 空间。图片作者。

结论

我们展示了选择最佳聚类数的三种不同方法,即肘方法、轮廓系数和间隙统计。虽然肘图的解释是相当主观的,但是轮廓系数和间隙统计方法都可以精确地确定聚类的数量。然而,间隙统计涉及模拟,它可能不总是产生相同的解决方案。

与许多机器学习方法一样,这里描述的方法并不是在所有情况下都适用。由于这些方法量化了聚类中心和数据点之间的距离,因此它们适合于寻找凸聚类,例如在 K-Means 聚类中找到的聚类。

参考

  • 罗伯特·蒂布拉尼,根特·瓦尔特,特雷弗·哈斯蒂。通过间隙统计估计数据集中的聚类数。皇家统计学会杂志,B 辑,63:411–423(2001)。

微软和 OpenAI 是如何从 GPT-3 中挤出精华的

原文:https://towardsdatascience/how-microsoft-openai-are-squeezing-the-best-out-of-gpt-3-ad0990a66cbe

μ转移使 GPT-3 模型比以前认为的更好

艾伦·沃伯顿/英国广播公司/AI/Plant/CC 的更好图像-由 4.0

μTransfer 将允许公司廉价地从最大的模型中获得最佳性能。

大型神经网络显示出仅在几年前还不可想象的性能。像 GPT-3、Gopher 或 AlphaCode 这样的模型已经证明了基于大型变形金刚的模型会随着规模的增大而改进。然而,一个限制阻碍了它们在实践中的表现——由于它们巨大的体型,它们只能被训练一次。

GPT-3 175B(家族中最大的)花费了几百万(具体数字没有透露)要求“在预训练期间,需要几千万亿次/秒-天的计算。” AlphaCode 接受过一次训练,尽管再训练对于正确评估表现的变化至关重要。即使研究人员犯了通常会迫使他们重新训练模型的错误,他们也宁愿牺牲性能来避免无法承受的成本。

再培训不仅仅是为了避免错误。当神经网络初始化时,研究人员定义了一组超参数(HPs)。这些 HPs 限制了训练的边界,并引导下降过程以最小的损失收敛。有时,研究人员可以应用足够好的启发法来定义 HPs。然而,在大型神经网络的情况下,他们必须做出假设——通常是基于一组次优的惠普,因为他们无法预测行为如何随着规模的增加而变化。

尽管 GPT-3 在各种任务中的表现令人印象深刻,但由于超参数对模型来说不是最好的,因此它明显是次优的。现在,这将不再是一个问题。微软与 OpenAI ( 论文)合作,开发了μ参数化(μP),这是一种允许跨模型大小进行稳定训练的新技术。这种技术允许他们找到较小模型的最佳 HP 集,然后将它们转移(通过μTransfer)到较大的模型,以较小的计算成本获得更好的版本。

此外,为了帮助开发人员将新技术引入他们的模型,他们发布了 PyTorch 包。您可以通过运行以下命令来使用μP:

pip install mup

利用μP 和μ转移优化模型

当训练不同大小的相似模型时,一个关键问题是训练不一致——至少对于通常的参数化是不一致的。128 宽度型号的最佳 HP 不一定与 2048 宽度型号的相同,尽管它们共享一个公共架构。

通过μP(最大更新参数化),研究人员可以缩放模型大小,保持他们的行为稳定,以便他们"收敛到一个理想的极限,我们称之为特征学习极限该极限是模型能够达到的最佳状态。

他们提出,如果模型共享相同的训练动态,它们也将共享最佳的 HP。他们可以为较小的模型找到最佳的 HPs,并简单地将它们转移到较大的模型上,这将需要大量的计算来进行调整。转移过程称为μ转移(图 1、2)。

图 1:μ传输算法

图 2:μ转移的图示

μ学习率在宽度上的转移

为了证明他们的假设,他们训练了多层感知并绘制了跨模型宽度的损失-学习率曲线,同时改变了参数化(图 3,4)。它们表明μP 下的模型在宽度上共享最小损失点。

这意味着,对于所有宽度,在μP 下,而不是在任何其他参数化下,对于相同的学习率值(本例中选择的 HP ),实现了最小的训练损失。

图 3、4:在左边,训练损失相对于学习率绘制。不同的曲线是模型的不同宽度。在右侧,它们绘制了不同的参数化(图 3 中的 PyTorch 默认值和图 4 中的μP)。当参数化为默认值时,最佳学习率会在整个模型宽度内发生不可预测的变化。当参数化为μP 时,曲线共享具有最优学习速率→特征学习极限的最小损失。你可以在这里看到的动画情节。

不同超参数上的μ转移

他们使用变压器展示了μ转移如何在不同的 HPs 上同时发生(图 5)。

图 5:训练损失相对于学习率、交叉熵温度、初始化规模和学习率时间表绘制。以μP 参数化的变压器同时显示了不同超参数的相同值在宽度上的最小训练损失。

这些结果证明,较大模型的 HP 可以很容易地从较小模型的 HP 中预测出来,这对于具有成本效益的 HP 调整过程具有深远的意义。

不同维度间的μ转移

但他们并没有就此止步。模型不仅仅在宽度上变化,它们也在深度、批量、序列长度上变化。研究人员表明,除宽度外,μ转移也可能发生在其他维度上(图 6)。

图 6:训练损失与学习速度的关系图。以μP 为单位参数化的变压器显示,对于相同的学习率值,在宽度、深度、批量和序列长度上的训练损失最小。

值得注意的是,μ在宽度方向上的转移有很强的理论基础,而在其他方向上的结果则完全是经验性的。这并没有降低这些见解的有效性,但需要进一步的理论基础来建立这些发现。

超参数分类

你可能认为宽度和学习率都是 HP 的类型。为什么作者转移了一些而改变了另一些?其他像退学的 HPs 呢?

他们建立了一个分类,根据它们在μP 和μ转移中的作用来划分 HPs。不是所有的 HP 都能同样好的转移,其他的转移没有意义,等等。他们设计了三个类别:

  • 可转让:有三个子类别。1)优化(学习速率、动量、LR 时间表),2)初始化和 3)参数乘数。
  • 不可转移:正规化(辍学,体重下降)
  • 通过传输的*:宽度、深度、批量、训练时间和序列长度。*

除了深度、批量大小、训练时间和序列长度之外,所有这些都有理论依据,这些都是使用 transformers 经验验证的。

一个实际的场景——μ转移 GPT 三号

由于模型越大,HP 调整的成本越高,研究人员预计最大的模型从使用μP 和μTransfer 中获益最多。

因为更大的模型需要更多的计算资源来调整,所以研究人员通常会在计算成本和惠普优化之间进行权衡。OpenAI 用一组次优 HPs 训练了 GPT-3,并实现了足够高的性能水平,而不是调整模型。

为了展示μTransfer 的潜力,微软和 OpenAI 的研究人员合作,将最初的 GPT-3 与μP 版本的模型进行了比较。他们调整了一个 40M 参数的代理模型,μ将最好的一组高性能处理器转移到 6.7B 版本的 GPT-3(大 168 倍)。

他们发现μ转移的 GPT-3 在所有任务中都优于相同大小的原始版本(图 7)。μ转移模型改进如此之大,以至于它显示出与 13B GPT-3 模型相当的性能。两倍大!

图 7: GPT-3 6.7B + μP 比它的原始对手更好,甚至比两倍于它的原始 GPT-3 更好(13B)。

如果我们推广到其他模型,GPT-3 达芬奇+ μP 将表现得像一个 350B 模型。威震天 NLG 530B 将实现+1T 高密度模型的性能——目前还没有公司制造出这种产品。

更重要的是,他们发现调整成本仅占总预调整计算预算的 7%。这意味着惠普调整现在对于任意大尺寸的型号完全可行,只需多花一点钱。相对于它们提供的性能提升,这些钱可能是最值得花的。

我们可以得出结论,对μP 中参数化的模型进行调优要优于目前可用的其他两种可能性:对更大的模型进行 HP 调优和不进行 HP 调优。

在第一种情况下,它更好,因为在实现类似性能的同时,它要便宜得多;在第二种情况下,它更好,因为虽然稍微贵一些,但性能改善是显著的。

对于给定的模型,p 和 Transfer 以最低的成本提供了最好的性能。

结论

p 提供了一种新的方法来调整大型神经网络的成本效益的方式。有了 Transfer,以前没有探索过的将最大的语言模型优化到它们的特征学习极限的可能性现在变成了现实。

像 GPT 家族这样的模型可以通过廉价的训练达到以前只有体型两倍的模型才能达到的性能水平。超参数调优的痛苦终于结束了。我预测 P 将在深度学习世界中像火一样传播,并将成为任何未来模型的默认功能——就像 ReLU、dropout 和 batch norm 一样。

如果你已经读到这里,考虑订阅我的免费双周刊简讯https://mindsoftomorrow.ck.page/!每两周一次关于人工智能和技术的新闻、研究和见解!

您也可以直接支持我的工作,使用我的推荐链接 这里 成为中级会员,获得无限权限!😃

我们如何利用设计思维来推动数据科学项目

原文:https://towardsdatascience/how-might-we-utilize-design-thinking-to-boost-data-science-projects-f530bf282455

你如何像设计师一样思考,做出更有用、更有影响力、更创新的数据驱动产品

威尔·麦克马汉在 Unsplash 上的照片

首先,你可能会想,“设计思维和数据科学有什么关系?!"我们先来定义一下设计思维,然后看看大家如何将设计思维方法应用到数据科学中。

设计思维的早期先驱之一,他们将设计思维定义为:

设计思维是一种以人为中心的创新方法,从设计师的工具箱中汲取灵感,整合人们的需求、技术的可能性和商业成功的要求。

一些事情跳出来。首先,这是一种以人为本的方法,这意味着你设计的解决方案是为人服务的,而不是技术。每个数据科学家和分析师都应该首先考虑用户!第二,它采用设计师的工具,并将它们应用于普遍的商业成功。设计思维不仅仅是设计师的,当然也不仅仅是软件用户界面(UI)的!

作为一名数据科学家,有许多方法可以将设计思维融入到工作中来帮助解决问题,例如:

  1. 利益相关者管理
  2. 确定要解决的最重要的问题
  3. 确定工作优先级
  4. 得到深思熟虑的批评
  5. 确定解决方案的可用性
  6. 在构建之前,构建一个启动计划

在开始之前,我们先来看看设计思维的几个基本要素。

双菱形

我首先要讲一下双钻石的概念。双菱形是设计思维中的一个核心概念,帮助你构建如何思考解决问题和开发解决方案的框架。这个概念是,你从左边开始,做两组发散收敛练习,帮助你确定要解决的问题,然后探索解决方案周围的广阔空间,最后得出解决方案。设计思维中你会经常听到的两个词是发散和收敛。

  • 发散型:向广泛的可能性敞开你的心扉。正如我的朋友兼导师在开始一个疗程时所说的:

驯服一个疯狂的想法比放大一个微弱的想法更容易。

  • 收敛:将可能性的范围缩小到单一的一个。

双菱形以及发散和收敛思维被应用到不同的设计思维方法中,以帮助开发解决方案。

作者图片

我们怎么可能

你可能听说过这个短语,我们怎么可能,通常缩写为 HMW 。这三个强有力的词帮助我们以一种强有力的、包容的方式构建一个问题陈述。

  • **如何:**暗示我们还不知道解决方案。
  • **可能:**暗示一个解决方案是可能的,并且可能有几种实现它的方法。
  • **我们:**把大家召集起来帮助解决问题。

在练习设计思维时,你会经常看到这一点,我建议你亲自尝试一下,看看它是如何邀请合作来帮助你从新的角度展开问题陈述的。让我们看一个简单的例子:

来自

构建流媒体音乐推荐系统

我们怎样才能让用户喜欢的音乐排队,让他们听上好几个小时?

注意到区别了吗?更具启发性,同时也给用户带来了问题。

设计思维方法

你可以利用许多不同的设计思维方法,可能有成百上千种。不同的组织已经策划了设计思维方法的“系统”,并为你选择了这些方法,例如 IDEO 的设计工具包、 Google Design Sprints ,或者我所认证的 LUMA Institute 的方法。

这是他们网站上亮度方法的完整列表。我们将在这篇文章中讨论其中的几个,但实际上,每一个都可以在某个时间点应用于数据科学。如果你想了解更多,他们的网站上记录了每种方法。

图片作者来自亮度研究所

我们开始吧!

设计思维工具

设计思维的核心工具通常是便利贴、夏普斯、投票点和画架垫。这些极其简单的项目可以帮助你在一个房间里进行会议,产生惊人的结果。

在过去的几年里,令人惊讶的事情之一是数字工具的激增,这有助于促进虚拟设计思维会议。Figma 的壁画、米罗、谷歌 Jamboard 和 FIGJAM 等工具都是很好的帮助工具。每个都有一个免费的选项让你开始你的旅程。

我选择的工具是壁画。我也经常把它作为个人生产力工具。

其中一些甚至加载了模板,让你更快上手。

作者图片

利益相关者管理

当开始一个项目时,你要考虑谁是你的用户或利益相关者。您的利益相关者可能是销售、服务或工程部门的内部成员,也可能是高管或外部客户。每个利益相关者都有不同的需求和愿望;这就是利益相关者管理的用武之地。

在开始一个新项目之前,我喜欢做的第一个方法是运行一个 利益相关者映射 练习,如果可以的话,这是一个和你的团队一起做的很好的练习。这有助于对谁是最重要的人达成共识。我喜欢从树状结构开始,最重要的人物在顶层,然后从那里开始建立。然后根据每个参与者在项目中的参与程度绘制他们的地图。

确定所有关键人物后,您可以将他们映射到一个简单的两两矩阵,以影响力兴趣/可用性为轴。利用这些象限,你可以为他们确定你的参与模式,如保持满意积极参与保持知情监督。一个简单的模型,让您在参与过程中保持结构化。

作者图片

接下来,基于我的利益相关者地图,我喜欢思考我的 面试 策略。我应该与谁交谈,以确保我正确理解客户的需求。面试是一个简单的过程,但是有一些最佳实践:

  1. 如果你为了以后使用而记录面试,确保你得到了对方的同意。
  2. 确保您有一套一致的问题来比较不同的受访者。从简单的问题开始,然后越来越具体。
  3. 确保你是一个好的倾听者,而不是引导别人得到你想要的答案。

确定要解决的最重要的问题

当你开始一个项目时,你必须确保你正在解决正确的问题。我们从识别和采访我们的利益相关者开始,但是我们如何解决最重要的问题呢?确定什么是最重要的工作的一个很好的方法是把你的利益相关者召集在一起开一个引导式会议,让他们实时产生想法。我经常使用的两个活动是一个叫做创意矩阵的发散活动和一个叫做可视化投票的收敛活动的组合。

创意矩阵 包含行和列,允许你在合适的地方给你的参与者一些帮助。这些行通常代表一些使能器,例如技术环境地点游戏等等。这些列通常代表个人或一个问题陈述。对于人来说,可以是销售服务工程等角色,也可以是任何问题陈述。通常,如果你使用问题陈述,你可能想在开始这个练习之前和你的小组一起集思广益,想出那些问题陈述。

设置一个 5-10 分钟的计时器,鼓励人们用想法填满所有的矩阵框。甚至指出缺少内容的区域,并引导他们填充这些框。

作者图片

当你在创意矩阵中产生想法后,你可以通过让参与者用一种叫做 的技术对最有影响力的事情进行投票来缩小这些想法的范围。将投票 可视化。给每人几个投票点(贴);4-5 人通常效果很好,让他们静静地回顾并把它们放在黑板上。完成后,您可以提取投票最高的想法,并进一步发展它们。

像壁画这样的电子工具内置了投票机制!

确定工作优先级

通常,当您有大量工作积压时,您需要额外的帮助来选择处理它们的最佳顺序。有很多区分工作优先级的技巧,但是如果你想合作完成,有一些有趣的技巧,比如购买功能重要性难度矩阵

购买功能 是一个工具,让您的参与者为投票的各种功能赋予一个加权值。您首先要为您拥有的每一个特性分配一个美元值,这个值应该基于特性的相对工作量或实现量。一项大规模的任务可能价值很高,而你一天左右就能完成的事情可能价值较低。

给你的参与者有限的钱花。然后他们将被迫选择在每个功能上的花费。你可以指示他们按照他们希望的任何方式进行分割,包括把所有的钱都放在一个单一的功能上。

这种技术的一个很酷的技巧是让一个非常昂贵的特性无法用他们的钱来实现。例如,购买它可能需要 200 美元,但参与者只收到 100 美元。然后告诉他们,他们可以共同努力,作为一个团体来筹集资金,以资助这些更昂贵的功能。

接下来是 重要性/难度矩阵 团队合作的绝佳工具。两个轴代表两个不同的值。你首先把一个想法放在黑板的底部。然后拿出你的下一个想法,确定它是比中间那个更重要还是更次要。继续这个过程,直到它们都沿着底部展开,如下图所示。

接下来,把一个想法垂直移动到棋盘中间。然后重复这个过程,直到所有的想法都被排序。这个练习的一个关键提示是,每个音符应该只占据棋盘上的一行或一列,迫使小组不要把所有的东西都放在一个象限中。每一个想法对对方来说都是相对重要和困难的。根据重要性和实现的难易程度,你最终会得到四个象限,分别代表速赢最佳选择登月低优先级

作者图片

得到深思熟虑的批评

在我的职业生涯中,获得正面反馈很容易;得到批评(不是批评)可能非常困难。人们通常不想说一些他们可能认为是负面的话。在公司里,不能给出批评是一个糟糕的文化问题,但我一次又一次地看到了这一点。克服这一点的一个奇妙方法是利用技术https://www.luma-institute/rose-thorn-bud/,它提供了一种便捷的方式来带来以下类型的想法:

  • 玫瑰:积极的东西
  • :消极的东西
  • 萌芽:有潜力的东西

有了这些类别,你的参与者很容易给你各种类型的反馈。想法产生后,你们分组讨论。你会发现,这种方法在提供反馈方面非常有效,让你超越了通常收到的“一切都很好”的反馈。

作者图片

确定解决方案的可用性

因此,您已经构建了最新的仪表板、流失预测工具或惊人的预测模型。你如何获得对其可用性的反馈?我们可以使用产品开发中常用的技术来评估我们的数据科学项目,这与任何其他产品没有什么不同。在我的团队中,我们一直在对我们的数据产品和仪表板进行可用性研究。

我喜欢用第一种手法, 将经验用图表表示 。这种方法让用户走完你的工具之旅,然后指出他们一路上的体验如何。从一条水平线开始,在上面有正面经历,在下面有负面经历。然后让用户写下通过工具的流程。每一个过程步骤都被放置在这条线的上方或下方,从用户的角度来看,表明什么是有效的或者无效的。

作者图片

如果你想要一个更系统、可重复的可用性测试,可以使用 系统可用性量表 或者 SUS。SUS 是一种经过验证的确定可用性的方法,它是一个简单的 10 个问题的调查,会问一些问题:

  1. 我想我会经常使用这个系统。
  2. 我发现这个系统不必要的复杂。
  3. 我认为这个系统很容易使用。
  4. 我认为我需要技术人员的支持才能使用这个系统。
  5. 我发现这个系统中的各种功能整合得很好。
  6. 我认为这个系统中有太多不一致的地方。
  7. 我想大多数人会很快学会使用这个系统。
  8. 我发现这个系统用起来很麻烦。
  9. 我对使用这个系统很有信心。
  10. 在进入这个系统之前,我需要学习很多东西。

你可以在这里了解更多关于的信息。你甚至可以使用像 Survey Monkey 或 Question Pro 这样的数字调查工具来进行管理。

在构建之前构建一个发布计划

最后,您已经准备好启动您的数据科学项目。你不必等到所有的工作都完成了才开始考虑你的发布,你可以在你的产品启动时就开始考虑。

第一种方法是开发一张 概念海报 。这个框架使得考虑构建和启动解决方案的一些实际问题变得简单。在概念中,你填写你试图解决的问题,关键利益相关者,大想法,它可能失败的原因,如何原型化和测试,最后,你将如何衡量成功。你也可以用一个例子来说明你的想法。

作者图片来自壁画样本

最后但同样重要的是 封面故事模型 。这种方法类似于为你的产品发布写一篇新闻稿,但是可以帮助你讲述从项目开始你将会产生的影响。通过创建封面故事或新闻稿,你会发现项目团队成员会更好地理解你想要创造的客户价值,因为故事是以你的客户为中心的。玩得开心点。根据您希望收到的反馈类型,包括有关所创造价值的详细信息,甚至是虚假的客户报价。

作者图片来自壁画样本

结论

设计思维是一种以人为中心的创新方法。它可以把人们聚集在一起,形成新的想法,这在你开始之前可能都不会想到。我介绍了识别和优先考虑如何与项目中的利益相关者互动的方法——产生一系列不同的想法,然后将它们缩小到最重要的想法。我介绍了几种通过包含利益相关者来确定工作优先级的方法。当你准备好接受反馈时,玫瑰-荆棘-花蕾法是征求意见的一个很好的方法。我介绍了两种不同的方法来确定您的解决方案的可用性,可以帮助您微调您构建的内容。最后,我分享了一些在产品发布前考虑产品发布的方法。本文只是对如何将设计思维融入数据科学工作的一个高度概括。我鼓励你学习更多,并开始利用一到两种技术!

如果你喜欢阅读这样的故事,并想支持我成为一名作家,考虑注册成为一名媒体会员。每月 5 美元,可以无限制地访问数千篇文章。如果你使用 【我的链接】 注册,我将免费获得一小笔佣金。

编码训练营要花多少钱?

原文:https://towardsdatascience/how-much-do-coding-bootcamps-cost-8df82d8ccb88

以及你真正想问的问题的答案:“编码训练营值得吗?”

亚历山大·密尔斯在 Unsplash 上拍摄的照片

我马上给你一个快速的答案:根据 BestColleges 收集的数据 ,编码训练营平均花费 13500 美元。在这个范围的高端,编码训练营的成本超过 20,000 美元。一些不太贵的营地也就几千美元。当我写这篇文章的时候是 2022 年,所以在此期间这些数字可能会增加更多。

编码训练营的价格取决于几个不同的因素:你是在校园里还是在网上(网上通常便宜 500 美元左右);无论你是全职还是兼职(兼职有时会更便宜,但不总是如此);无论是单一编码语言还是全栈 bootcamp(更全面的编码 boot camp 成本更高)。

一些编码训练营在你找到工作后会收取你一份收入分成协议。虽然这份协议一开始对你有利,但毕业后总成本可能会飙升——让你欠下数万美元。这也取决于质量——最好的在线编码训练营价格更高。

如果这就是你所需要的,我可以完成这篇超级短文,然后送你上路。但是当人们问一件东西多少钱的时候,他们通常问的是别的东西。

你可能想知道:

  • 编码训练营的成本值得吗?
  • 我准备为此支付 10,000 美元——这对我有什么好处?
  • 为什么我要在这上面花费数千美元,而不是一个替代品?

让我们来回答这些问题。

编写训练营的费用只是大学学位的一小部分。

最有用的比较之一是将编码训练营视为软件工程或计算机科学学位的替代方案。要想在数据科学或工程领域找到一份工作,不再需要获得学位。许多入门级的计算机科学工作只需要证明你可以用 Javascript 编码。你的技能比你的文凭更重要。

虽然你不需要去哈佛获得计算机科学学位,但它仍然很贵。普通的计算机科学大学学位总共花费大约 40,000 美元,更不用说你要花四年时间去获得它。相比之下,13500 美元和 16 周的紧张工作听起来相当不错。

编写训练营代码需要几个月的全职工作。

编码训练营的费用大约是 13500 美元,是的。时间成本也很高。编码训练营是专门为在尽可能短的时间内获得尽可能多的编码知识而设计的。但是浓缩理论、基础和实践技能会产生一个极其密集的知识模型。你会以极快的速度学习。至少,你一周需要 40 个小时才能跟上工作量。你更有可能一周工作 50-60 个小时。

即使你是兼职模式,许多编码训练营期望每周 20-25 小时的时间承诺,通常在晚上和周末填满。

全职编码训练营至少运行 12 周,但有时在全职模式下长达 20 周。即使你认为价格是值得的,也一定要考虑时间成本。

编码训练营比其他选择花费更多。

将训练营的编码成本与特定课程的成本进行比较也是值得的。例如,如果你要上 Coursera,你可以找到一门由密歇根大学开设的 Python 基础课程,并附有证书。Coursera 的Python for every one specialization费用为 49 美元/月。他们估计你会在八个月内完成。那是 400 美元。

Coursera 的曲目每月售价在 39-79 美元之间。即使你每月只做 79 美元的曲目,每一首都花了你一年的时间,你也能以和普通的编码训练营一样的价格做 13 首。

拥有大学文凭是很强大的,但是我之前说的仍然有效:许多雇主根本不在乎。如果你能证明你有技能,他们会很高兴让你加入,不管你有没有文凭或证书。

与编码训练营的成本相比,在线课程或社区非常便宜。

编码训练营伴随着大量的实践。

支付 13,500 美元参加编码训练营的真正好处是,从精神上来说,你已经投资了。(很难随便在某件事情上掉几千块钱,然后不承诺。)就像健身房会员或私人培训一样,你花的钱越多,你就越有可能坚持到底。

除了财务承诺,这些课程还旨在帮助你阅读课程材料,并给你一个完成任务、家庭作业和项目的期限。

但是,如果你不需要那种外部压力来完成事情,也有完全免费的替代方案来代替编码训练营。你可以在 YouTube 上观看教程,在上阅读免费在线教材。你可以将它与像 FreeCodeCamp 这样的免费在线编码平台配对,以获得一些指导。

他们没有相同的承诺水平,他们周围的社区很少,他们更加自我导向。但是如果免费是你正在寻找的,你可能会得到和编码训练营一样的技能——只要你有动力和动机。

编写训练营代码可以保证得到一份工作。

要记住的一个重要方面是,许多编码训练营都有工作保证或退款。

编码训练营通常在软件工程行业人脉很广,他们不会羞于代表你好好利用他们的网络。特别是对于提供收入共享协议的编码训练营,确保你在训练营“毕业”后很快被雇佣是对他们最有利的。

然而,知道完成这份工作的要求非常严格也是件好事。许多要求你接受提供给你的第一份工作——即使它不是你想要的,或者它是一份兼职或合同角色。他们可能还需要每周提交一定数量的工作申请。

如果你对这些条件感到满意,那就把它算作编写训练营代码的一个优势吧。

简而言之:编码训练营平均花费 13500 美元左右,但只有你知道它值不值。

编写训练营代码的成本——13500 美元左右——无论如何都不是一个小数目。对于一个普通的两居室来说,这相当于十个月的租金,或者将近 2000 块牛油果面包。

根据单一的价格数据,很难说一个编码训练营是否值得。你需要添加一些背景。贵吗?是的。但是比大学文凭便宜。如果你是那种需要外部压力来完成目标的人,那么学习编码是一个很小的代价,特别是如果你在那之后找到了一份高薪工作。

最后,我不能告诉你是否要花钱参加编码训练营。但是有了这个额外的背景,你应该知道你的选择,你应该知道这对你个人来说是否是正确的选择。

澳大利亚在 2020 年的森林大火中损失了多少绿色?—使用 Landsat-8 图像进行计算

原文:https://towardsdatascience/how-much-green-did-australia-lose-during-2020-bushfires-calculating-using-landsat-8-images-36f35c67edb4

用 Landsat-8 图像计算澳大利亚森林火灾后某一地区健康自然植被的变化

一定区域内健康自然植被的变化。按作者分类的图像(根据数据集创建)。

**摘要——**自从欧洲人定居后,澳洲正经历大规模的森林砍伐,危及其野生动物,并为气候危机打开了新的大门。大约 16%的澳大利亚被森林覆盖,但是由于森林砍伐,森林覆盖面积也在迅速减少。从 2019 年 6 月到 2020 年 5 月,大规模的丛林大火摧毁了澳大利亚大面积的森林和其他健康的自然植被。这场丛林大火在 2019 年底至 2020 年初造成了最大的破坏,成为了世界范围内的重大新闻。因此,对这场森林大火造成的破坏进行分析,对于计算有多少森林和健康的自然植被损失以及需要恢复非常重要。Landsat 级数据的增加为分析人员轻松检测和计算生物量的变化提供了新的机会。Landsat 计划已经连续 40 多年提供地球观测。凭借易于获取的高分辨率 Landsat 8 数据,观测者越来越容易直观地识别城市地区、水体、健康和不健康的植被、农田甚至云层。在这项研究中,我们使用了 2019 年 1 月 20 日和 2020 年 1 月 23 日我们在澳大利亚选择的特定地区的卫星图像,并计算了这一时期健康的自然植被的变化。来自 Landsat 8 的 11 个不同光谱波段的图像为 ArcGIS 中的非监督或监督分类提供了足够高分辨率的数据,然后用于对植被进行分类并计算与之相关的面积。使用卫星数据大大有助于减少误差和更准确地探测土地覆盖变化。

关键词 —林火、野火、对地观测、陆地卫星、森林监测。

一.导言

澳大利亚是世界上第七大洲和第六大国,完全被水包围,是唯一占据整个大陆的国家。尽管澳大利亚是世界上最干燥的国家之一,但它却是世界上最发达的国家之一。最近森林砍伐率有所上升,野火使得澳大利亚健康的植被状况更加糟糕。澳大利亚最严重的自然灾害可能是 2009 年 2 月 7 日的黑色星期六丛林大火[1]。但最近从 2019 年 6 月到 2020 年 5 月的丛林大火可能是其中最严重的一次。这场大火造成 34 人直接死亡,400 多人间接死亡,9300 多所房屋被毁。在全球生态系统中,野火和丛林大火扮演着非常重要的角色,因为它们威胁着生命和植被等自然资源。有必要单独确定火灾事件,以便更好地了解火灾事件如何影响当地和全球环境[3,4]。发现被烧毁的森林和健康的植被并计算总的受灾面积也很重要。通过这种方式,我们将能够估计野火或丛林大火对自然资源的破坏程度。我们的研究工作集中在这个问题上,并利用卫星图像对火灾前后的健康植被进行无监督分类和计算来解决这个问题。植被覆盖变化的计算依赖于不同日期的两幅图像之间的数据驱动属性的比较[6]。在[7]中,研究人员计算了 1967 年至 2007 年间多类土地覆盖分类图的变化,并分析了非洲马里植被覆盖的变化和变异。最近可以找到更多的实验方法,例如基于神经网络和决策树的方法。

由于最近开展的研究工作,人们越来越认识到生物质燃烧在全球碳循环中的重要作用。通过燃烧消耗的生物质数量的估计通常基于下面提到的简单关系[10]。

M = ABc …(1)

这里,在给定的时间间隔内燃烧的植被的质量用 M 表示,在相同的时间间隔内,燃烧的面积用 A 表示,B 是生物量密度,描述燃烧完全性的因子用 c 表示[10]。不过在我们的研究中,我们使用了其他更简单的技术来更快地了解被烧毁植被的规模。

地球表面被 Landsat 卫星传感器系列连续观测了四十多年[8]。在当前和过去的 Landsat 任务中,有 4 种不同类型的传感器用于收集 EO 数据,表 1 [8]提供了每种传感器的特性。

为了探测热异常,在许多研究中使用了 Landsat 级数据。为了研究火山活动,Landsat-5 专题成像仪数据被广泛使用。为了给火灾管理系统提供信息,卫星遥感主动火灾数据已经被广泛使用了十多年[14]。采用免费数据政策和发射新仪器有助于增加大地卫星级数据的可用性,但单个大地卫星级传感器提供的空间和时间覆盖范围相对保持不变。在我们的研究中,我们使用了来自 https://usgs.gov 的陆地卫星数据。我们使用 2019 年 1 月 20 日和 2020 年 1 月 23 日澳大利亚东南部特定地区的 Landsat 影像来进行我们的研究。Landsat-8 图像在 11 个不同的光谱带中下载以进行我们的研究,而我们仅使用前 7 个光谱带图像的不同组合进行我们的研究。

二。相关研究

2010 年,Roger A. Pielke Jr .和 Katharine Haynes 做了一项关于建筑对气候影响的历史研究[1]。该研究还涵盖了 1925 年至 2009 年澳大利亚丛林火灾的影响,重点是 2009 年维多利亚州的黑色星期六火灾。2013 年发表的一项研究报告了通过光谱分析进行火灾严重性研究的应用[15]。这项研究的重点是澳大利亚北部热带稀树草原的火灾严重性分析,描述了火灾后受火灾影响的植被的即时光谱响应。对于火灾严重程度分类,该论文提出了一套候选模型,其中包括中分辨率成像光谱仪的第 2、5、6 和 7 通道。L. Giglio 等人在 2005 年进行了一项类似的研究,该研究使用 MODIS [10]对烧伤面积进行了全球估计。2016 年发表的一项研究重点关注如何利用卫星数据来确定森林火灾的着火点及其可能的日期[2]。2015 年发表了一篇专注于 Landsat-8 数据在主动火灾探测中的意义的论文[14]。他们算法关注的技术之一是从卫星图像中探测地表,并探测潜在的火灾和烟雾。在多种多样的训练和验证场景下,本文提出了一种误差非常小的算法。M. Schmidt 等人在 2015 年发表的一项研究介绍了多分辨率时序图像在澳大利亚森林干扰和生长监测领域的使用情况[11]。Grahame Douglas 等人提出在森林火灾概率检测中使用极值分析[12]。在他们的研究中,广义极值法被扩展到确定森林火灾危险指数(FFDI ),用于设计森林火灾探测。

三。陆地卫星数据和分类方法

表 1 提供了用于收集陆地卫星任务中的地球观测数据的 4 种不同传感器的特性。从 1972 年到 1992 年,多光谱扫描仪(MSS)获取了 Landsat 1–5 的数据。MSS 收集数据的空间分辨率约为 80 米,辐射测量覆盖 4 个光谱带。这 4 个光谱带从可见绿色到近红外(NIR) [8]。Landsat 4-5 使用了专题成像仪,空间分辨率在 30 米至 120 米之间。从 1984 年到 2012 年,使用了专题制图仪。7 个光谱带用于收集数据。大地卫星 7 号正在使用增强型专题制图仪(ETM+),其空间分辨率约为 30 米,分 8 个不同的光谱带。实用陆地成像仪(OLI)和热红外传感器(TIRS ),分辨率在 15 米至 100 米之间,有 11 个不同的光谱带。它从 2013 年开始运作。表 2 列出了 Landsat 1–8 中使用的所有光谱带的波长和用途。

数据集和许可:

Landsat 数据访问页面指出,“美国地质调查局档案馆保存的 Landsat 数据产品可以从各种数据门户网站免费搜索和下载”[17]。

图像选择

我们选择了 2019 年至 2020 年澳大利亚森林大火事件影响最严重的地区之一。图 1 显示了我们研究的选定区域。我们的研究将仅限于这一领域。我们选择的面积大约是 33,300 平方公里。所选区域在图 1 中用深色阴影示出。我们下载了前面提到的两个日期的 11 个不同光谱波段的 Landsat 8 图像。我们选择了这两个特定的日期,牢记最低陆地云量(LCC)的图像将给出最好和最准确的结果。2019 年 1 月 20 日,LCC 为 0.15%,2020 年 1 月 23 日,LCC 为 1.79%。

图一。选定的研究领域。来源:图片来自[16]。

我们使用地理信息系统(GIS)ArcGIS 来使用不同的波段组合并对 Landsat 图像中的不同区域进行分类,如森林、城市地区和水体等。,基于不同的颜色。

表 1。Landsat 传感器及其特性[13]。

*在 Landsat 5 上的 TM 传感器出现故障之后,MSS 传感器在卫星退役之前被重新激活了一小段时间[8]。

表二。Landsat 1–8 中使用的不同光谱波段及其用法[13]

分类

不同的波段组合为目视检查和监督分类提供了不同的结果。这也有助于无监督分类。表 3 列出了不同波段组合及其用途。

表 3。Landsat 8 的波段组合。图片作者。

我们使用表 3 中的第 9 个波段组合来目视检查我们的研究区域。图 2 和图 3 分别显示了我们在 2019 年 1 月 20 日和 2020 年 1 月 23 日的“植被分析”波段组合中的研究区域。从目测来看,差异非常明显,我们将执行更多的步骤来获得被森林火灾事件砍伐的确切面积。

图二。2019 年 1 月 20 日“植被分析”波段组成中的研究区域。按作者分类的图像(根据数据集创建)。

图 3。2020 年 1 月 23 日“植被分析”波段组成中的研究区域。按作者分类的图像(根据数据集创建)。

我们在 ArcGIS 中使用了非监督分类,以不同的配色方案对影像中的不同区域进行分类。我们用颜色标记了被归类为健康植被的浅绿色区域。根据 2019 年和 2020 年的数据对健康植被进行正确分类后,森林砍伐区变得很容易看到。包含 2019 年 1 月 20 日和 2020 年 1 月 23 日影像中健康植被的分类区域如下所示。

图 4。2019 年 1 月 20 日影像中健康植被的分类。按作者分类的图像(根据数据集创建)。

图 5。2020 年 1 月 23 日影像中健康植被的分类。按作者分类的图像(根据数据集创建)。

在无监督分类过程中,分类的准确性取决于我们对图像不同区域进行分类的类的数量。类别数量过多或过少都会导致分类不准确。在我们的研究中,在对分类图像和原始图像进行视觉检查时,使用 7 个类别给了我们最好的结果。分类后,我们计算了被分类为健康植被的面积。

四。结果和讨论

我们研究的总面积约为 33,300 平方公里。根据两个日期计算出健康植被的面积后,我们得到了表 4 中的结果。

表 4。不同日期包含健康植被的计算面积。图片作者。

图 6。不同日期包含健康植被的计算区域的图形表示。图片作者。

根据这一计算数据,在我们进行研究的地区,有 3522.27 平方公里的森林或健康植被因森林火灾或其他原因被砍伐。这里森林砍伐如此严重的主要原因是 2019 年 6 月开始的丛林大火爆发。从 2019 年 1 月 20 日到 2020 年 1 月 23 日,近 22.46%的现有森林在这一年中被烧毁。

检测和计算森林火灾后的损失对于土地利用规划和建设实践是非常重要的。随着易于获得的卫星图像数量的增加,研究人员使用这些数据和估计森林火灾事件的后果变得更加有效。在我们的研究中,我们使用了 ArcGIS 中非常常用的分类技术,即非监督分类技术,并使用它来计算两个不同日期包含健康植被的面积。无监督分类通常用于对河流和湖泊等水体进行分类,但在这里我们将其用于不同的目的。这种方法既适用于大洲范围的监测,也适用于小范围的监测。它开辟了使用 Landsat 数据计算森林火灾后果的新方法,这将有助于政府、企业和环境研究人员在未来创建生态可持续的基础设施。

动词 (verb 的缩写)结论

Landsat 系列卫星传感器是运行时间最长的地球观测项目之一,它仍在监测地球。自从 2008 年实行大地遥感卫星数据的免费和公开分发政策以来,大地遥感卫星数据是森林管理和分析中使用最多的数据之一,而且由于大地遥感卫星数据具有空间、光谱和时间分辨率,因此非常适合这种情况。

本文描述了用于根据 Landsat 8 数据计算健康植被分布的方法,但该方法可以灵活地用于计算其他要素的分布,如城市地区、水体、农田等。

来自卫星的数据可以大大有助于火灾探测,通过准确的信息和我们的方法,在火灾发生后监测森林和自然资源变得更加容易。这将有助于自动燃烧区域测绘系统和火灾强度分析系统。

我希望你喜欢阅读这篇文章。如果你有,请成为灵媒的一员。只要每月 5 美元,你就可以阅读 Medium 上的任何文章(不仅仅是我的文章,任何文章)。单击下面的链接。

https://samratduttaofficial.medium/membership

https://samratduttaofficial.medium/membership

这篇文章是我,萨姆拉特·杜塔和我的朋友吉妮娅·帕尔文写的。我们双方的信息如下。

萨姆拉特·杜塔:

Github:https://github/SamratDuttaOfficial

领英:https://www.linkedin/in/SamratDuttaOfficial

请我喝杯咖啡:https://www.buymeacoffee/SamratDutta

吉妮亚·帕尔文:

领英:https://www.linkedin/in/jinia-parvin-9a2b06211/

Github:【https://github/jiniaparvin】T22

参考

[1] RP Crompton,KJ McAneney,K Chen,RA Pielke Jr,K Haynes .位置、人口和气候对澳大利亚森林火灾造成的建筑损坏和死亡的影响:1925-2009 年。天气、气候和社会。2010;2, 300-10.

[2] A .贝纳利、A .鲁索、AC Sá、R .平托、O .普莱斯、N .库特西亚斯、J .佩雷拉。用卫星数据确定火灾日期和定位着火点。遥感。2016;8, 326.

[3]LB lantie,ZA Holden,AM Smith,MJ Falkowski,AT Hudak,P . mor gan,SA Lewis,PE Gessler,NC Benson。评估现行火灾特征和火灾后影响的遥感技术。国际荒地火灾杂志。2006;15, 319-45.

[4] L .吉廖,法学博士肯德尔,首席法官。用模拟 AVHRR 红外数据评估全球火灾探测算法。国际遥感杂志。1999;20, 1947-85.

[5] EA 莱曼,JF 华莱士,PA Caccetta,SL Furby,K 兹杜尼奇。澳大利亚大陆时间序列陆地卫星数据的森林覆盖趋势。国际应用地球观测和地理信息杂志。2013;21, 453-62.

[6] P .科平,I .琼克希尔,K .纳卡耶茨,B .穆伊,E .兰宾。生态系统监测中的数字变化检测方法。国际遥感杂志。2004;25, 1565-96.

[7]D . Ruelland,F . Levavasseur,A . tribo TTé。1960 年代以来马里三个试验区土地覆盖变化的模式和动态。国际应用地球观测和地理信息杂志。2010;12、S11-7。

[8] A 班斯科塔,N 卡亚斯塔,MJ 法尔科夫斯基,MA Wulder,RE Froese,JC White。利用 Landsat 时间序列数据进行森林监测:综述。加拿大遥感杂志。2014;40, 362-84.

[10] L .吉利奥、g .范德维尔夫、JT·兰德森、GJ·科拉茨、P .卡西布哈特拉。使用 MODIS 主动火观测对燃烧区域的全球估算。大气化学和物理学,2006;6, 957-974.

[11] M .施密特、R .卢卡斯、P .邦廷、J .韦贝尔塞尔、J .阿姆斯顿澳大利亚昆士兰州森林干扰和再生监测的多分辨率时间序列图像。环境遥感。2015;158, 156-68.

[12] G .道格拉斯,Y .何,Y .向,EC .莫里斯。极值分析在确定森林防火设计年超越概率中的应用。消防安全科学。2014;11, 1379-92.

[13]陆地卫星任务,可在:http://landsat.usgs.gov获得,2020 年 11 月访问。

[14] W .施罗德,P .奥利瓦,L .吉利奥,B .奎尔,E .洛伦茨,F .莫雷利。使用 Landsat-8/OLI 数据的主动火灾探测。环境遥感。2016;185, 210-20.

[15] AC Edwards,SW Maier,LB Hutley,RJ·威廉姆斯,J . Russell-Smith。澳大利亚北部热带稀树草原火灾严重程度的光谱分析。环境遥感。2013;136, 56-65.

[16]陆地卫星任务,可在 http://landsat.usgs.gov获得,2020 年 11 月访问。

[17]陆地卫星任务,可在 https://www.usgs.gov/landsat-missions/landsat-data-access获得,2020 年 11 月访问。

我的物理学学位如何帮助我成为一名更好的数据科学家

原文:https://towardsdatascience/how-my-degree-in-physics-helped-me-become-a-better-data-scientist-726c643c54ae

照片由 罗马法师

我有理论物理的硕士学位优等生。当我开始我的数据科学之旅时,我发现它对这种工作非常有用。

我的背景

我在罗马的“Sapienza”大学学习物理,并于 2008 年获得了学士学位。然后开始攻读理论物理硕士,2010 年获得。我的重点是无序系统和复杂性理论。

自从我获得学士学位以来,理论物理一直是我的最爱。我讨厌去实验室,用激光和旧电脑工作,它们都没有更新的 Windows 98 系统,不能读取 USB 笔驱动器(我不是在开玩笑)。相反,我喜欢编程和软件开发实验室。我记得有一门关于计算物理学的课程,在这门课程中,我学习了蒙特卡罗模拟和优化算法。一切都是用纯 C 语言完成的(Python 没有现在这么有名,Matlab 也很贵)。对我来说很有趣。不幸的是,对我的大多数同事来说并不是这样。

然后我自学了其他编程语言,像 R 和 Python。我记得从 Python 2 过渡到 Python 3 有多难。

我可以说,这 5 年是刺激和美好的。以下是我学到的一些东西,我后来在工作中用到。

科学方法

在我的学术研究中,我被训练成对问题有很强的科学态度。找到原因并排除它。这在软件编程和科学中非常普遍,甚至在数据科学中也变得非常重要。试图从数据中提取信息实际上是一个你不得不面对的非常困难的问题。你发现了问题,然后回到问题的根源去寻找解决方案。它总是以这种方式完成,数据科学强烈地利用了这种方法。

不要害怕近似值

不是所有的解都必须精确。物理学告诉我,如果你能控制它们,并能给出它们需要的明确理由,近似法会被很好地接受。在科学领域,永远没有足够的时间来获得可能的最佳结果,因此科学家们经常使用近似值来发布一些部分结果,同时继续努力找到更好的解决方案。数据科学与这种工作方式非常相似。你总是需要估算一些东西(去掉那个变量,简化那个目标等等)。如果你追求完美,你永远得不到任何好的东西,而其他人会用一个近似且更快的解决方案赚钱。不要害怕近似值。相反,把它们作为讲故事的工具。“我们从这个近似值开始,这是结果,然后我们移到另一个近似值,看看会发生什么”。这是执行分析的好方法,因为近似值可以让您更清楚地了解发生了什么以及如何设计接下来的步骤。物理学告诉我,只要你能控制它们的误差,近似值是可以接受的。记住:你接受近似的风险,所以你必须管理它。

基本统计工具

在我本科的第一年,我已经学会了最常用的统计工具来分析数据。概率分布,假设检验和标准误差。我永远也不会把重点放在计算标准误差的需要上。任何人都讨厌物理学家,因为他们专注于测量中的误差,这是正确的,因为没有误差估计的测量不会给我们任何信息。无论如何,这些年来我在文章中提到的大多数统计工具都来自于我获得学士学位的第一年。只有 bootstrap 出现在第三年,随机过程出现在我的 MS 的第二年。物理学家生活在数据和分析中,所以这是他们教你的第一件事。即使是理论物理学家也必须分析数据,因为他们使用蒙特卡罗模拟,这是一种模拟实验。所以,物理学给了我正确的统计工具来分析每一种数据。

数据就是一切

专业数据科学家知道,数据就是一切,如果与数据质量相比,算法并不那么重要。当你在实验室进行实验时,实验返回的数据就是圣经,必须得到尊重。你不能对噪音进行任何分析,而是必须从噪音中提取信号,这是数据分析中最困难的任务。物理学教会我如何尊重数据,这是数据科学家的基本技能。

所以,下面是物理学教会我如何成为一名更好的数据科学家的原因。当然,物理并不适合每个人,也不是一项必要的技能,但我认为它对开始这个美好的职业真的有帮助。

原载于 2022 年 1 月 17 日【https://www.yourdatateacher】

大自然如何启发人工智能算法

原文:https://towardsdatascience/how-nature-is-inspiring-ai-algorithms-f52261abb75f

大自然是聪明的,我们来复制吧!

图片来源 (Unsplash 许可证)

观察大自然错综复杂的运作方式可以给我们提供大量相关的想法来开发解决我们自身问题的方案。人工智能的范围很远,其影响者也很远,自然有助于推动该技术的发展。

许多算法已经模拟了自然现象,如动物如何组织它们的生活,它们如何利用本能生存,世代如何进化,人脑如何工作,以及我们人类如何学习。

计算机科学家甚至用机器模仿人类的智能,设计了很多 AI 算法。

在这篇文章中,我们将深入探讨几种受自然启发的不同人工智能算法。

群体智能

群体智能(Swarm intelligence)一词由 G. Beni 和 J. Wang 于 1989 年首次提出,描述了一组个体相互作用并与其环境相互作用而形成的自组织系统。

群体中的每个个体都充当一个简单的代理,遵循一小组规则,在没有集中控制的情况下,代理一起工作以做出明智的决策。

群体智能算法的开发者基于蚂蚁、蜜蜂和鸟类等动物的行为。

鸟类的群体智能(图片来源,Unsplash 许可)

这些不同的动物在独处时智力水平都很低,但是在一起工作时,它们都能建立复杂的组织系统并生存下来。

工程师们已经将这种算法应用于机器人技术,创造出能够独立执行简单任务并与其他机器人合作解决复杂问题的机器人。

一些群体智能算法受到蜜蜂等特定类型动物的启发,如下所示:

蜜蜂的群体智能(图片来源,Unsplash 许可

蚁群优化算法

蚂蚁使用一种群体智能来生存。虽然每只蚂蚁都有一个非常小的大脑,但它们成功地合作来支持它们的蚁群。

特别是,一些种类的蚂蚁会在地面上沉积信息素,以标记其他蚂蚁遵循的最佳路径。

受这些蚂蚁智能的启发,研究人员开发了有效的通用https://ieeexplore.ieee/abstract/document/4129846蚁群优化算法。

人工蜂群算法

****IDervis Kara boga 在他的论文中介绍了一种基于蜜蜂群进行数值优化的思想,“人工蜂群算法是一种基于蜜蜂行为的优化算法。

在蜂群中,不同的个体有不同的角色,例如受雇的蜜蜂,它们从特定的来源收集食物,和失业的蜜蜂,它们寻找新的食物来源(侦察员)或在蜂箱里等待(旁观者)。

细菌觅食优化算法(BFO)

另一种受自然启发的群体智能优化算法 BFO 模仿细菌的觅食行为,在搜索过程中获得最大能量。

蝙蝠算法

2010 年,杨新社基于微型蝙蝠的回声定位和生物声纳能力推出了蝙蝠算法。微型机器人利用声音来探测猎物、躲避障碍物和感知周围环境。

萤火虫算法

萤火虫算法是一种元启发式算法,灵感来自萤火虫的社会行为和它们通过生物发光闪光的交流。

图片来源 (Unsplash 许可证)

集体动物行为

CAB 算法从动物身上获得灵感,这些动物组成群体以受益于群体的优势。

在群体中工作的动物在寻找食物时通常会提高效率,优化长距离迁移模式,并更好地躲避捕食者。

CAB 算法模拟一群遵循基于集体行为的规则的动物。

粒子群算法

许多研究人员也开发了受人类行为启发的算法。例如,粒子群算法模拟人类社会如何处理知识。

作为一种优化算法,它试图通过评估个人知道什么和他们的邻居知道什么来改进候选解。

受自然启发的优化算法

除了受群体行为启发的优化算法,研究人员还开发了其他基于自然生物、物理和化学系统的优化算法。

这些算法统称为自然启发优化算法(NIOAs) 。我们来看几个通俗的例子。

引力搜索算法

论文 GSA:一种引力搜索算法提出了一种基于牛顿引力定律的启发式优化算法;

“宇宙中的每一个粒子都以一种与它们的质量乘积成正比、与它们之间距离的平方成反比的力量吸引着其他每一个粒子”。

引力搜索算法

布谷鸟搜索算法

布谷鸟搜索算法是由杨和 Deb 在 2009 年为解决全局优化问题而引入的,其灵感来自布谷鸟物种中鸟类的繁殖寄生现象。

通过将蛋留在其他鸟类的巢中,某些布谷鸟发展出模仿其他物种蛋的颜色和图案的能力,因此宿主无法识别外来的蛋。

进化算法

进化算法(EA)是基于达尔文的进化论,并模仿生物的自然选择过程。

该算法从随机群体开始,评估群体解决某个问题的适应度(解决方案有多好),并选择最佳个体进行繁殖。

这种循环在群体中继续,直到算法达到最优解。

遗传算法

作为进化算法的一种,遗传算法通过受基因突变、杂交和自然选择启发的方法来解决优化和搜索问题。

首先,一个突变被引入一个群体以创造多样性。接下来,杂交将群体中的两个个体结合在一起产生一个新的后代。

然后,在每次迭代之后,一个适应度函数评估新一代并选择最佳候选。

神经网络

神经网络或人工神经网络(ann)是模仿人类神经元相互通信方式的机器学习算法。

神经网络拥有几个不同的层,包括输入层、一个或多个隐藏层和输出层。

神经网络中的每个节点代表一个人工神经元,它以特定的权重连接到其他节点。当被激活时,人工神经元将数据发送到网络的下一层。

强化学习

动物和人类通过惩罚和奖励的反复试验来学习。例如,当一个孩子学习走路时,如果摔倒,他们就失败了(惩罚),如果不摔倒,他们就成功了(奖励)。

如果他们摔倒了,他们会站起来再试一次,直到他们最终能正确行走。这是强化学习的一个例子。

在机器学习领域,强化学习算法在特定环境中执行一系列任务,目标是最大化奖励和最小化惩罚。

在每次迭代中,该算法都会学习在给定的环境条件下什么工作得最好。强化学习不同于监督学习,因为训练数据不提供与输入相关联的答案。

相反,程序员制定奖励和惩罚的规则,强化代理计算出如何执行给定的任务并获得最多的奖励。

包扎

自然执行许多复杂的功能,科学家们仍在努力理解。通过模仿某些动物的行为,我们可以找到解决生活中问题的方法,也可以更好地了解自然。

例如,理解大脑如何工作有助于改进人工神经网络,并且,通过在神经科学研究中利用人工神经网络,我们可以发现有助于我们更好地理解大脑的模式。

向大自然学习,我们可以开发高效的解决方案来解决各种复杂的问题。

你对自然如何影响人工智能算法有什么看法?请在评论中告诉我们!

神经网络如何看待一只猫

原文:https://towardsdatascience/how-neural-network-sees-a-cat-1eab7d19a751

使用目标输出的梯度下降优化可视化卷积神经网络

作为人类,我们知道猫长什么样。但是神经网络呢?在这篇文章中,我们揭示了猫在神经网络大脑中的样子,也谈到了对抗性攻击。

真实而理想的猫。左边的图片是来自 Unsplash 的

卷积神经网络非常适合图像分类。有许多预先训练的网络,如 VGG-16 和 ResNet,在 ImageNet 数据集上训练,可以将图像分类到 1000 个类别中的一个。他们的工作方式是学习不同对象类别的典型模式,然后通过图像识别这些类别并做出决定。它类似于人类,用他/她的眼睛扫描一张图片,寻找熟悉的物体。

AI 初学者课程

如果你想了解更多关于卷积神经网络和一般神经网络的知识,我们建议你访问微软 GitHub 提供的 AI for 初学者课程。这是一个学习材料的集合,分为 24 节课,学生/开发人员可以用来学习人工智能,教师也可以在课堂上找到有用的材料。这篇博文基于课程材料。

图片来自 AI 初学者课程(在麻省理工学院许可下分发)

因此,一旦经过训练,神经网络在它的大脑中包含不同的模式,包括理想的猫的概念(以及理想的狗、理想的斑马等)。).然而,将这些图像可视化并不容易,因为模式分布在整个网络权重中,并且以分层结构组织。我们的目标是将一个神经网络在其大脑中拥有的一只理想的猫的形象可视化

图像分类

使用预先训练的神经网络对图像进行分类很简单。使用 Keras ,我们可以用一行代码加载预训练模型:

model **=** keras.applications.VGG16(weights**=**'imagenet',include_top**=**True)

对于每个大小为 224x224x3 的输入图像,网络会给我们 1000 维的概率向量,这个向量的每个坐标对应不同的 ImageNet 类。如果我们对噪声图像运行网络,我们将得到以下结果:

x **=** tf.Variable(tf.random.normal((1,224,224,3)))
plot_result(x)

你可以看到有一个类的概率比其他类高。其实这个类就是蚊帐,概率在 0.06 左右。事实上,随机噪声看起来类似于蚊帐,但网络仍然非常不确定,并给出了许多其他选项!

为猫优化

我们获得理想猫图像的主要想法是使用梯度下降优化技术来调整我们原始的噪声图像,以使网络开始认为它是一只猫。

优化循环以获得被分类为猫的图像

假设我们从原始噪声图像 x 开始。VGG 网 V 给我们一些概率分布 V(x) 。为了与一只猫的期望分布进行比较,我们可以使用交叉熵损失函数,计算损失L =cross _ entropy _ loss(c,V(x))

为了尽量减少损失,我们需要调整我们的输入图像。我们可以使用用于优化神经网络的梯度下降的相同思想。也就是说,在每次迭代中,我们需要根据以下公式调整输入图像 x:

这里η是学习率,它定义了我们对图像的改变有多激进。下面的函数将完成这个任务:

target **=** [284] *# Siamese cat* 
**def** **cross_entropy_loss**(target,res):
  **return** tf.reduce_mean(
    keras.metrics.sparse_categorical_crossentropy(target,res))

**def** **optimize**(x,target,loss_fn, epochs**=**1000, eta**=**1.0):
    **for** i **in** range(epochs):
        **with** tf.GradientTape() **as** t:
            res **=** model(x)
            loss **=** loss_fn(target,res)
            grads **=** t.gradient(loss,x)
            x.assign_sub(eta*****grads)

optimize(x,target,cross_entropy_loss)

如你所见,我们得到了非常类似于随机噪声的东西。这是因为有很多方法可以让 network 认为输入图像是一只猫,包括一些视觉上没有意义的。虽然这些图像包含许多猫的典型图案,但没有什么可以限制它们在视觉上与众不同。但是,如果我们试图把这只理想的吵猫传到 VGG 网,它会告诉我们,吵的其实是一只概率相当大的猫(0.6 以上):

敌对攻击

这种方法可用于在神经网络上执行所谓的对抗性攻击。在对抗性攻击中,我们的目标是稍微修改一点图像,以欺骗神经网络,例如,使狗看起来像猫。一个经典的对抗例子摘自本文作者伊恩·古德菲勒看起来是这样的:

图片来自报纸古德菲勒,国际法院;施伦斯,j。解释和利用对立的例子。arXiv 2014, arXiv:1412.6572

在我们的例子中,我们将采取稍微不同的路线,而不是添加一些噪声,我们将从一只狗的图像(它确实被网络识别为一只狗)开始,然后稍微调整它,但使用与上面相同的优化程序,直到网络开始将其分类为一只猫:

img **=** Image.open('images/dog.jpg').resize((224,224))
x **=** tf.Variable(np.array(img))
optimize(x,target,cross_entropy_loss)

下面可以看到原图(归类为意大利灰狗概率为 0.93 )和优化后的同图(归类为暹罗猫概率为 0.87 )。

一张狗的原始图片(左边来自 Unsplash)和一张被归类为猫的狗的图片(右边)

理解噪音

虽然对抗性攻击本身就很有趣,但我们还无法想象神经网络拥有的理想猫的概念。我们获得的理想猫看起来像噪音的原因是我们没有对正在优化的图像 x 施加任何约束。例如,我们可能希望约束优化过程,以便图像 x 的噪声更少,这将使一些可见的图案更加明显。

为了做到这一点,我们可以在损失函数中加入另一项。一个好主意是使用所谓的变化损失,这是一个显示图像的相邻像素有多相似的函数。对于图像 I,它被定义为

TensorFlow 有一个内置函数tf.image.total_variation,可以计算给定张量的总变差。利用它,我们可以按如下方式定义出总损失函数:

**def** **total_loss**(target,res):
  **return** 0.005*****tf.image.total_variation(x,res) **+**\
    10*****tf.reduce_mean(sparse_categorical_crossentropy(target,res))

注意系数0.00510——它们是通过反复试验来确定的,以在图像的平滑度和细节之间找到一个良好的平衡。你可能想尝试一下,找到一个更好的组合。

最小化变化损失会使图像更平滑,并消除噪声,从而显示出更具视觉吸引力的图案。以下是这种“理想”图像的一个示例,这些图像很可能被归类为猫和斑马:

optimize(x,[284],loss_fn**=**total_loss) *# cat* optimize(x,[340],loss_fn**=**total_loss) *# zebra*

理想的猫,概率=0.92(左边)和理想的斑马,概率=0.89(右边)

外卖食品

这些图像让我们对神经网络如何理解图像有了一些了解。在“猫”的形象中,你可以看到一些类似猫的眼睛的元素,还有一些类似耳朵的元素。但是,有很多,而且遍布图像。回想一下,神经网络本质上是计算其输入的加权和,当它看到许多猫的典型元素时,它变得更加确信它实际上是一只猫。这就是为什么一张照片上有很多只眼睛比只有一只眼睛给了我们更高的概率,尽管它看起来不太像人类的“猫”。

玩代码

“理想猫”的对抗性攻击和可视化在 AI 初学者课程的迁移学习部分有描述。我在这篇博文中提到的实际代码可以在这里找到。

原载于 2022 年 6 月 7 日 https://soshnikov**

本文标签: 中文翻译博客TowardsDataScience一百九十三