TowardsDataScience 2023 博客中文翻译(三百六十二)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

熵度量了什么?直观解释

原文:towardsdatascience.com/what-does-entropy-measure-an-intuitive-explanation-a7f7e5d16421

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

·发表于 Towards Data Science ·阅读时间 11 分钟·2023 年 1 月 4 日

熵可能看起来很抽象,但它有一个直观的方面:即看到数据中某些模式的概率。它是如何工作的呢?

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

背景来源:Joe Maldonado @unsplash

在数据科学中,有许多与熵的概念相关的概念。最基本的是香农信息熵,通过公式定义在任意分布 P(x) 中:

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

其中求和是对所有可能的类别 C 进行的。

还有其他相关的概念,其公式类似:

尽管熵类似的公式很普遍,但关于公式背后的直觉讨论却很少:为什么涉及对数?为什么我们要将 P(x) 和 log P(x) 相乘?虽然许多文章提到“信息”、“期望惊讶”等术语,但其背后的直觉却缺失。

事实证明,正如概率一样,熵可以通过计数练习来理解,并且可以与分布的某种对数似然性联系起来。此外,这种计数还可以与计算机中的字节数字面上的数量相关联。这些解释将使我们能够揭开熵的许多事实。好奇吗?那就开始吧!

计数熵

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

概率的计数定义使得它变得如此直观(照片由 Ibrahim Rifath 提供,来源于 Unsplash

概率可以从操作上定义:当我们说一枚硬币有 50%的机会落到正面时,这意味着如果我们将硬币抛掷一百万次,正面的次数将接近五十万。随着试验次数的增加,这一比例会越来越接近 50%的概率。这一定义使得概率变得如此直观。

熵是否有类似的解释?有的,不过计数会稍微复杂一些:这将需要一些基础的组合数学。

有多少种方法可以排列 N 个不同的球?第一个球有 N 种选择,第二个球有 N − 1 种选择……等等。答案是 N!,或者阶乘符号:

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

就像在概率的定义中,我们将处理非常大的数字。因此,通过 斯特林近似 来近似这个对象是有帮助的:

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

其中 log 表示自然对数;如果我们使用其他基数如 log₂ 和 log₁₀,也存在类似的公式(这将决定我们测量熵的单位)。大 O 符号表明近似在 N 很大时的有效性。术语 N log N 将成为熵定义中 p log p 的来源。

我们现在准备推导熵所计数的内容。想象有大量可区分的对象或可区分的数据点。这些 N 数据点被分组为 c 个类别,如下图所示:

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

这种情况的总排列方式是多少?记住我们不关心任何类别中数据的排序,答案由经典的多项式系数给出:

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

我们用 Ω 符号来表示配置的数量。

就像概率的情况一样,我们只对大的 N 行为感兴趣。当处理如此大的数字时,取对数是有帮助的,这样我们可以使用斯特林近似来使事情更可控:

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

公式可以通过利用所有 nᵢ 总和等于 N 的事实来简化,

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

如果我们将 nᵢ/NP(i) 代入,我们就得到了熵的公式。或者,对于大的 N,我们可以写成:

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

所以我们达到了熵的操作定义:

熵计算了将大量数据分类成给定概率分布的方式数(以对数单位和每个数据点计算)。

这个计数练习是信息理论的核心,我们接下来会讨论它。

熵作为信息

那么,我们的熵概念如何与计算机中的字面 0 和 1 比特相关呢?

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

当我们将熵应用于 1 和 0 的模式时,熵的概念可以与信息相关(信用:Gerd Altmann)。

想象一个固定长度为N的二进制序列。直观上我们知道它包含N比特的信息:因为实际上需要N比特来存储序列到硬盘或内存中。

但如果序列有一些有趣的模式,例如下面的呢?

  • 000000000000000000000000000

  • 010101010101010101010101010

  • 000000010000000000000000000

在这些情况下,二进制序列表示会非常低效。我们直观地知道有更高效的存储方式:我们可以指定模式,而不是所有的字面比特,这些序列中的有效信息量应该更小。

所以,如果我们忽略数字重复的微妙模式,只看数字的基本统计属性(0 和 1 的比例),在存储这些序列时我们能做得更好吗?

这是我们的熵计数公式可以帮助我们的地方:它可以计算给定固定比例的 0 和 1 的总序列数。

在 0 和 1 的比例为 50/50 的情况下,总的可能性数量是(在大的N极限下):

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

我们看到这大致上产生了所有可能的二进制序列的数量 2。所以存储序列所需的比特数仍然是N。这并不令人惊讶,因为我们知道随机序列应该无法压缩:它具有最大N比特的信息。

但如果比例不再是 50/50 呢?我们应该期望有一些潜在的节省。在这种情况下,存储一个序列所需的比特总数将是:

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

让我们 sanity check 当 0 的数量远小于 1 的数量时的情况,比如nN。在这种情况下,可以忽略P₁项,所需的比特数为:

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

因此,信息量与n成正比,而不是N。这是因为我们现在只需要存储每个 0 的位置,而不是整个序列。

这说明了熵与计算机中物理比特和字节相关的力量。总之,

信息熵指定了每单位长度所需的比特数,用于存储由给定概率分布生成的序列。

换句话说,熵是一种针对序列中固定比例字符的最佳压缩比。这是熵与信息相关联的方式。

除了将序列视为我们的研究对象,我们还可以将注意力转向分布本身。这种观点使我们能够将熵解释为一种概率(或对数似然)。

熵作为对数似然

熵计算的是可能性的数量。我们想将其转换为一种概率。为此,我们只需对计数进行归一化。

N 个数据点分为 c 类别的总方法数是多少?答案很简单,因为每个数据点有 c 种选择:

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

我们现在可以将熵的计数除以总数以获得概率(替换 nᵢ/NP(i)):

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

这样,熵变成了观察到特定分布的概率(由于 N 很大,趋近于最终值):

熵可以视为观察给定分布的对数似然(每个数据点)。

然而,我们的讨论中存在一个隐含的假设,即我们在计算中将每种配置视为同样可能。如果某些类别比其他类别更受青睐会发生什么?

我们可以考虑一些参考分布 Q(x)。如果每个数据点有 Q(x) 的机会进入特定类别 x,那么观察到类别 1 中的 n₁、类别 2 中的 n₂ 等的概率由多项式概率给出:

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

我们可以再次使用斯特林近似。计算过程与之前类似,只是最后多了一个 Q(i)。

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

替换 nᵢ/NP(i),指数内的项变成了 Kullback–Leibler 散度。因此,我们的方程可以总结为

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

在这里,我们使用了指数内的 KL-散度的常见表示法。KL-散度是香农信息熵的推广,我们的方程使我们的解释更加精准:

P 相对于 Q 的 Kullback-Leibler 散度是观察到 P 时按照 Q 采样的负对数似然(每个数据点)。

再次说明,所有这些都是假设 N 非常大。

关于 KL-散度的一些事实现在变得明显:

  1. KL-散度始终非负:这是因为概率永远不会大于 1。

  2. KL-散度可以是无限的:这发生在两个分布没有重叠时,因此计数的结果为 0 = exp[–∞]。

  3. KL-散度为零当且仅当 P = Q:当我们按照 Q 采样数据时,我们期望结果分布类似于 Q——这种期望在 N 很大时是准确的。

凭借这种新的理解,我们现在准备重新解释数据科学中各种熵概念的事实!

熵采样器

下面我们将讨论数据科学中一些常见的类似熵的变量的直觉。我们将再次提醒读者,大* N*极限是隐含假设的。

交叉熵

这对训练分类变量很有用。定义为

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

请注意,我们已经将定义重写为 KL 散度和香农信息熵的和。这可能看起来有点不熟悉,因为当我们训练机器学习模型时,我们仅通过样本(比如S)计算其估计值

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

利用我们的计数直觉,我们得出结论

最小化交叉熵等同于最大化观察到与我们从分布 Q 中采样的数据统计相同的对数似然性,如果我们从训练中的分布 Q 中采样数据

这使得交叉熵损失与回归中的 L2 损失处于类似的概念基础上:它们都是某种对数似然函数。

互信息

互信息可以被视为两个变量之间的一种广义相关性。用I表示,它通过 KL 散度定义

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

在 KL 散度计算中,我们比较两个变量的分布与考虑每个变量单独分布的分布。

我们的计数直觉给出了一个很好的解释:

互信息是获得两个变量给定分布的负对数似然性(每个数据点),当我们根据其边际分布独立地采样这两个变量时

这解释了为什么互信息是一个强大的工具,可以捕捉变量之间的非线性相关性。

熵的不可避免增加?

最后,我们准备讨论关于熵的最著名事实之一:热力学定律和熵的不可避免增加。

但需要记住的是,这里存在两个熵的概念:

  1. 数据科学中的香农信息熵

  2. 热物理学中的熵

熵的增加是一个仅适用于第二种情况的物理定律。然而,物理中的熵可以被视为应用于物理系统时香农熵的一个特例,所以两者之间有联系。

这意味着在计数练习中,可能性数量将不可避免地增加。这很直观,因为当一个物理(混沌)系统不受约束时,它最终应该会采样所有可能性。这有点类似于著名的墨菲定律,它说“任何可能出错的事情都会出错”。

从数据科学的角度来看,如果我们相信我们的数据是某些动力系统的结果,那么最大化熵可能是合理的:因为如果我们相信所有变量都已被考虑,就没有理由认为我们的数据不会探索所有可能性。换句话说,我们希望考虑所有可能性/组合——即使是那些在我们数据中不存在的。这或许赋予了熵的概念在数据科学中强大的超能力。

通过计算所有可能性,熵是我们无知的保守测量

这种观点在我另一篇关于的文章中得到了探讨。

结论

通过将熵的公式解释为计算可能性,我们能够理解熵在信息理论中的作用,并将熵视为一种概率。这种解释最终使各种熵的概念变得有意义和有用。

如果你有任何想法和反馈,请分享,祝阅读愉快!👋

如果你喜欢这篇文章,你可能对我的一些其他相关文章感兴趣:

[## 熵不是混乱:物理学家的视角

熵常被视为混乱的同义词。但它到底是什么呢?在本文中,我们探索了熵如何更多地……

medium.com ## 物理学家对机器学习的看法:机器学习的热力学

自然界中的复杂系统可以通过热力学成功研究。那么,机器学习呢?

[towardsdatascience.com [## 为什么我们不生活在模拟中

将现实描述为模拟大大低估了我们世界的复杂性。以下是为什么模拟……

medium.com

“最佳实践”到底是什么意思?

原文:towardsdatascience.com/what-does-following-best-practices-mean-anyway-41a255debc1b?source=collection_archive---------13-----------------------#2023-04-13

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

·

关注 发表在 Towards Data Science · 作为 新闻通讯 发送 · 阅读时间 3 分钟 · 2023 年 4 月 13 日

当新工具、研究和流行词汇像近年来一样迅速涌现时,“最先进的技术”和“最佳实践”等术语可能显得毫无意义。上个月的前沿模型可能已经显得过时;对你上一个项目非常适用的工作流程,可能在你启动下一个项目时就变得过时。

当然:对更新、更好、更闪亮事物的不断追求可以带来兴奋感。它也容易引发焦虑和对落后的恐惧——这些都是我们不建议加入到数据科学学习中的成分。相反,我们喜欢提醒自己(以及任何愿意倾听的人),渐进的、累积的改进对于可持续的职业成长已绰绰有余。

本周我们为你挑选的文章体现了同样的精神——它们专注于优化你日常任务中的具体领域并培养稳健的习惯。祝你阅读愉快!

  • 如何为你的数据团队成功铺路。鉴于数据科学工作的迭代(有时重复)性质,Rebecca Vickery正确地提醒我们:“无论你是一个独自工作的数据科学家,还是一个共同合作的大团队,制定一套最佳实践都是非常重要的。”她提出了六个建议,帮助你制定适合你需求的最佳实践。

  • **为什么满足于平庸的图表呢?**无论好坏,人们都无法读懂你的心思——这意味着即使是最好的数据分析,如果呈现方式难以解读,也不会产生太大影响。Aruna Pisharody提供了一个详细的、实践性的指南,教你如何使用 LaTeX 制作适合出版的图表。

  • 更有效的实验就在眼前Eryk Lewinson的最新贡献探讨了如何使用 DVC 的 Visual Studio Code 扩展,将你的 IDE 转变为一个机器学习实验平台。在这里,Eryk 演示了如何通过交互式图表监控模型性能和评估实验。

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

图片来源:Emma WaleijUnsplash

  • 享受简化代码的好处Susan Maina表示:“公司和雇主更倾向于优化过的代码,这样可以更容易地扩展,并使新开发者迅速上手。”但是,怎么判断你的代码是否经过优化呢?Susan 的教程带我们了解 Python 的魔法命令以及如何使用它们测试代码的效率。

  • 关于持续集成及其实施方法。如果你想了解 CI 的清晰而易懂的入门知识,以及它如何在你的机器学习管道中防止失败和痛点,请查看Khuyen Tran详细的逐步教程,其中包含了你需要的所有代码。

  • 应用邻近学科的强大经验。优先级排序是数据专业人员面临的长期挑战,他们常常需要平衡开发人员、市场营销人员、业务分析师等的竞争需求。Brian Roepke 借鉴成功产品经理的智慧,分享了可以帮助数据科学家在决策过程中获得的见解。

我们之前提到的学习大餐还在炖煮吗?我们希望如此——还有一些精彩的阅读内容不容错过:

  • 我们最新的月刊版提出了一个时代最关键的问题之一:人工智能能否被治理?

  • 如果你对增强扩散模型输出的方式感兴趣,Andrew Zhu 解释了如何克服令牌大小限制并实施自定义模型加载,以及其他技术。

  • Yennie Jun 的一篇引人入胜的新文章详细探讨了大型语言模型中的创作过程演变,追踪了它们从 GPT-2 到 GPT-4 的进展。

  • 谷歌的 Bard 和 OpenAI 的 GPT-4 对比分析。Cassie Kozyrkov “拆解”了这两个模型,并比较了它们在一些精心挑选任务中的表现。

  • 在 GPT 模型的持续探讨中,Mark Chen 提出了关于生成型 AI 使用和测试的综合研究第一部分,专注于文本总结以基准测试 GPT-3.5 的能力。

  • 数据工程师如何将“从批处理思维转变为流处理思维”?斯科特·海恩斯的深入探讨将帮助你建立正确的思维模型(并装备你所需的知识)以完成这一转换。

感谢你本周花时间与我们相伴!如果你喜欢在 TDS 上阅读的文章,可以考虑成为 Medium 会员。现在对学生来说特别适合加入,因为你们中的许多人现在可以享受会员的实质折扣

直到下一个变量,

TDS 编辑部

当机器学习出现错误时,这意味着什么?

原文:towardsdatascience.com/what-does-it-mean-when-machine-learning-makes-a-mistake-37b213200697?source=collection_archive---------2-----------------------#2023-09-17

我们对“错误”的定义在机器学习/人工智能领域是否合理?如果不合理,为什么?

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

·

关注 发表在 Towards Data Science · 11 分钟阅读 · 2023 年 9 月 17 日

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

图片来源:Kind and CuriousUnsplash

我最近关于机器学习公众认知的帖子中有一个评论让我思考机器学习中“错误”的含义。读者问我是否认为机器学习模型会一直“犯错误”。正如我在那篇帖子中所描述的,人们有很强的倾向将机器学习模型拟人化。当我们与 LLM 聊天机器人互动时,我们会运用从与其他人交流中学到的技巧——说服、措辞、论证等。然而,这通常效果不好,最终会导致不满意的回应。

在我自己日常的工作中,我也会看到与分类器和回归模型相关的类似问题。我和我的团队花费了大量的时间和精力来帮助客户和同事理解机器学习并不完美(而且现实中也永远不会完美)。“为什么模型说 X,而事实是 X-5?”是一个永恒的主题。我不完全责怪提问者,因为正如我在上一篇文章中所写,我们广泛的机器学习社区在教授基础机器学习素养方面做得不够好。

但这提出了一个核心问题,我们需要更多的探讨才能真正解决这个素养问题。

当我们说一个模型犯了错误、失败了、产生了幻觉或说谎时,这是什么意思(以及其他人是什么意思)?

在我们能回答这个问题之前,我们需要从头开始。

什么是机器学习模型?

从一个非常、非常通用的角度来看,机器学习模型是一个接受一些输入或提示并返回某种概率确定的响应的算法。它决定响应应该是什么的方式可能会有很大差异——它可能使用决策树、神经网络、线性回归或其他任何类型的机器学习方法。

要创建一个模型,我们从反映我们寻找结果的样本数据开始。输入样本可以是各种各样的东西——对于生成式 AI,它们可能是大量的人类书写的文本、音乐或图像。对于其他类型的机器学习,它们可能是包含对象特征的大型数据集,或者将图像或文本等分类到类别中的数据集,或更多。

有时候,这些回应会被“标记”以便模型学习哪些是可取的,哪些不是,或者哪些属于特定类别,哪些不属于。其他时候,模型会学习底层样本中的模式,并形成自己对这些模式的理解,以复制输入的特征、在选项之间做出选择、将输入分组或进行其他活动。

生成式 AI 模型的训练方式

我们训练生成模型的方式是特定的,比训练一个简单的概率模型要复杂得多。相反,这些模型是估计许多不同元素的概率,并将它们组合在一起以生成响应。以下是我们进行这种训练的一些非常简单的解释。(这些都是极度的过度简化,请原谅细节的缺乏和任何概括。)

当我们生成声音或图像时,可能会使用生成对抗网络。在这种情况下,模型相互对抗,一个模型生成新内容,另一个模型尝试判断该内容是否来自某个模型,来回交替。这两个模型在成千上万的案例中竞争,每个模型在过程中逐渐变得更好。最终,生成模型将能够产生几乎无法与现实所产生的内容区分开来的内容。(作为副作用,区分模型也会变得非常擅长识别输入是否是人类生成的。)

对于大型语言模型(LLMs)和像 GPT 模型这样的文本生成,我们使用所谓的 Transformer。这种训练包括教模型理解单词的意义如何相互关联,以及如何生成接近于人类生产的文本内容。结果听起来非常有说服力,因为模型知道哪些单词可能会一起出现(基于训练中真实人类语言如何将它们组合在一起的概率)。

为了从文本输入生成图像,例如 Dall-E,我们使用扩散。在这种情况下,我们教模型计算图像中最可能需要的特征,基于所提供的文本。模型本质上从一个静态图像开始,根据你的文本应用细节/颜色/特征。这是基于模型关于文本通常如何与图像对应的学习结果。

使用这些技术,我们教会模型解读输入中的模式——有时是我们自己甚至无法真正解释或检测的模式(尤其对于深度学习来说),然后模型能够解释和应用这些模式。所有这些在表面下都是数学,即使模式可能存在于文本、图像或许多其他事物中。

现在我们知道了这些内容,我们可以讨论输出是什么,以及当输出不是我们想要的结果时意味着什么。

输出

机器学习模型生成的东西可以有很大的不同。特别是生成型人工智能生成的图像、视频、音频和各种文本无所不包。其他类型的模型则给出事件/现象的可能性、未知值的估计、文本翻译成不同语言、内容的标签或分组等等。

在所有这些情况下,复杂的数学计算被用来根据给定输入估算最佳响应。然而,“最佳”是一个非常具体的概念。在创建模型的过程中,你已经向模型指明了你希望其响应具备什么特性。

在创建模型的过程中,你已经向模型指明了你希望其响应具备什么特性。

当我们得到意料之外的结果时,这意味着什么?

这与我们本身一样重要,也与模型一样重要。 这基本上就像任何技术领域的产品一样。产品设计师和创作者在开发要出售给用户的产品时,会制定“用户故事”,这些故事包括谁将使用该产品、如何使用以及为什么使用,以及他们希望从中获得什么。

例如,假设我们正在设计一个电子表格工具。我们会使用用户故事来考虑安妮这位会计师,并与会计师交谈,以确定会计师在电子表格软件中需要什么样的功能。然后我们会考虑商业分析师鲍勃,并与商业智能分析师讨论他们的功能需求。我们会将所有这些列入电子表格工具的规划清单,并以此来指导我们的设计。你明白了吧。

谁是机器学习模型的用户? 这完全取决于模型的类型。例如,如果你的模型预测基于房产特征的房价,可能的用户是房地产经纪人、抵押贷款机构或购房者。具有明确、有限应用范围的模型容易为用户量身定制。我们数据科学家可以确保这个模型满足使用者的期望。

有时预测结果可能不准确,但这是一个数学问题,我们可能能够解码为什么会这样。也许我们给模型提供了错误的数据,或者这个房子有某种我们无法告诉模型的特殊原因。例如,如果模型从未被教会如何解释后院动物园对房价的影响,它将无法整合这些信息。如果出现了房价崩溃?我们不久前看到过这样的情况,你可以想象模型从崩溃前学到的模式将不再适用。

然而,在这种情况下,我们有两个问题:

  1. 模型旨在实现的明确目标,数据科学家和用户都知道;

  2. 一种可量化的方法来衡量模型是否接近其目标。

这意味着当我们想要定义模型是否成功时,这一过程是明确和简单的。在做出这个判断之后,我们可以探讨模型为何会有这样的表现——这就是在该领域中所说的“模型可解释性”或“模型解释性”。

但对于 LLMs(大语言模型)呢?

这个整体框架对像 LLM 这样的东西意味着什么?谁是 ChatGPT 的用户?(你刚刚在脑海里回答“每个人”了吗?)当模型的输出可以像 LLM 那样复杂和多样时,我们开始产生疑问。

对于那些构建生成性 AI 模型的数据科学家来说,虽然他们可能采用不同的训练方法,但我们通常始终尝试创造尽可能接近训练数据的内容,这些数据通常是由人类或自然生成的。为了实现这一目标,模型是通过人类或自然产生的样本内容进行训练的。我们尽力给模型一个数学方式来理解这些内容为何感觉“真实”,以便它可以复制这一点。这就是生成性 AI 模型能够创造效率并使某些人类工作变得过时的方式。

对于那些构建生成性 AI 模型的数据科学家来说,目标是创造尽可能接近训练数据的内容,这些数据通常是由人类或自然生成的。

这些模型在这方面做得非常出色!然而,这也带来了一些陷阱。由于 LLM 模型在模仿人类回应方面非常逼真,用户在思维上容易把它们当作人来看待。这就像孩子学习动物的方式——你教孩子说一只有四条腿和湿鼻子的毛茸茸的动物是狗,但当你把一只猫放在他们面前时,他们会倾向于认为那也是狗,因为基本特征似乎非常相似。只有当你解释猫是另一种动物时,他们才开始理解差异并建立不同的心理模型。

由于这些模型在模仿人类回应方面非常逼真,用户在思维上容易把它们当作人来看待。

目前,我认为大多数公众仍在建立不同的心理模型,以区分 LLM 和人类。(正如我之前所写,数据科学家需要像大人一样解释狗和猫的不同,以继续这个比喻。)

不过我稍微跑题了。这真正意味着与一个非常基础的模型(例如房价)互动的人理解这是一个有限的算法。它更像一个电子表格公式,而不像一个人,这塑造了我们的期望。但当我们使用 ChatGPT 时,它带有许多人类在线聊天的特征,这影响了我们。我们开始期望陈述总是准确的,结果包括连贯的批判性思维,并且期望从模型中检索到今天新闻的事实,即使它是去年训练的。

[P]与一个非常基础的模型互动的人理解这是一个有限的算法。……但当我们使用 ChatGPT 时,它带有许多人类在线聊天的特征,这影响了我们。

在模型结果中出现批判性思维的迹象,是因为模型学会了我们从真实人类来源中解释为“批判性思维”的文本排列听起来更“人类”,因此它模仿这些排列以达到这一目的。当我们与人交谈时,我们会从他们说的话中推断出他们正在进行批判性思维。然而,我们不能用机器学习来做到这一点。

记住我上面描述的房价模型的两个关键要素:

1. 模型旨在实现的明确目标,数据科学家和用户都应当了解;

2. 一种量化衡量模型是否接近其目标的方式。

对于生成式 AI,包括但不限于大语言模型,我们在第 1 点上存在问题,部分原因是目标实际上并不清晰(“返回与人类产生的内容无法区分的材料”),但主要原因是数据科学家确实没有成功地向用户传达这个目标。数据科学家在这些模型上达到了第 2 点,因为他们使用复杂的数学系统来教模型何时生成足够“真实”或类似人类的内容。然而,对于普通用户来说,这要困难得多。判断模型是否做得好的过程更像是评分论文,而不是检查数学问题的结果。主观性悄然渗入。

即使测量更为简单,我仍然坚决认为,即使是一些技术娴熟且受过高等教育的用户,也未必真正清楚这些模型已经训练成什么样,因此也无法知道什么是现实的期望,什么不是。因此,对于模型而言完全合适的结果,比如一个流畅、雄辩、完美“人类风格”的段落描述月亮是由绿色奶酪制成的,也会被视为“错误”。然而这并不是错误——这个输出达到了它的训练目标——这也是我们许多困惑的根源。

调整期望

这表明我们需要调整对这些模型的期望,我希望这篇文章能有所帮助。要成功使用机器学习模型,并区分错误和预期行为,你需要了解模型被训练来执行的任务以及训练数据的性质。如果你能更深入一点,你还需要清楚数据科学家如何衡量成功,因为这会极大地影响模型的行为。

通过融合这些元素,你将拥有理解模型结果含义所需的背景信息,并能够准确解读它们——你的期望将会是合理的,你也会知道这些期望是否得到了满足。而且,当涉及到机器学习时,你会真正理解“错误”意味着什么。

目前有一些有用的材料澄清了许多关于流行生成式机器学习模型的内容(如它们是如何训练的,回应的真正含义等),我在下面添加了一些链接。(我并不 endorsing 这些材料中的所有观点,只是提供给那些想了解生成式 AI 的人作为参考。)

[## AI 模型注定总是要产生幻觉吗? | TechCrunch

像 ChatGPT 这样的语言模型有一个不好的习惯,就是捏造事实。但这能在技术层面上解决吗?

techcrunch.com](https://techcrunch.com/2023/09/04/are-language-models-doomed-to-always-hallucinate/?source=post_page-----37b213200697--------------------------------) [## Google Cloud Skills Boost

Qwiklabs 提供真实的 Google Cloud 环境,帮助开发者和 IT 专业人员学习云平台以及其他相关内容……

www.cloudskillsboost.google](https://www.cloudskillsboost.google/journeys/118?source=post_page-----37b213200697--------------------------------)

Garon, Jon M., 《生成式 AI、合成媒体及最新媒体中的信息实用入门》 (2023 年 3 月 14 日)。可在 SSRN 上获取:ssrn.com/abstract=4388437dx.doi.org/10.2139/ssrn.4388437

查看更多我的工作请访问 www.stephaniekirmer.com.

注意:我通常说“机器学习”而不是 AI,但在“生成式 AI”这种情况下,我选择使用这个短语,因为它在这个领域中得到了广泛的应用。

算法“学习”到底意味着什么?

原文:towardsdatascience.com/what-does-it-really-mean-for-an-algorithm-to-learn-1f3e5e8d7884

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

两种一般观点和一些心理学

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

·发表于 Towards Data Science ·阅读时间 20 分钟·2023 年 4 月 22 日

当人们第一次接触机器学习时,通常会快速浏览一个又一个算法、一个又一个技术、一个又一个方程。但之后,才有可能反思他们所掌握的知识中的一般趋势。

“学习”意味着什么是一个非常抽象的概念。本文的目标是提供机器学习中“学习”的两种一般解释。这两种解释,正如我们将看到的,是同一枚硬币的两面,并且在机器学习中普遍存在。

即使你在机器学习方面经验丰富,暂时脱离具体的机制,考虑学习的抽象概念,可能仍会有所收获。

在机器学习中,学习有两个主要的解释,我们称之为损失导向参数更新流形映射。正如我们将看到的,它们与心理学和心灵哲学有实质性的联系。

损失导向参数更新

一些之前讨论的机器学习算法采用了白板方法:它们从一个“空白”随机猜测开始,并迭代改进其猜测。这个范式对我们来说似乎很直观:当我们尝试掌握一项新技能,比如学习骑自行车或简化代数表达式时,我们犯了许多错误,并通过“实践”变得更好。然而,从算法的角度来看,我们需要明确识别两个实体的存在:状态损失

算法的状态由其一组参数的值定义。在这个上下文中,参数是决定算法行为的非静态值。例如,考虑优化你的保龄球游戏。有几个参数:保龄球的重量、你在指孔中的手指配置、准备投球时的速度、你手臂的速度、你投球的角度、释放时的旋转等等。每次你投球时,你都定义了一个新的状态,因为你作为一个优化算法正在尝试新的参数(除非你投球的方式完全相同,否则你是在返回到之前的状态,但在保龄球和机器学习中这种情况都很少见)。

线性回归和逻辑回归中的每一个系数都是一个参数。基于树的模型没有固定数量的参数,因为它们的深度是自适应的。相反,它们可以根据需要创建更多或更少的条件来优化信息增益标准,但这些都是参数。

然而,基于树的模型——以及所有算法——都受到超参数的影响。这些是参数自身必须遵循的系统级约束。决策树的最大深度和随机森林集成中的树的数量都是超参数的例子。在我们的保龄球示例中,元参数可能包括建筑物的湿度、你所穿的保龄球鞋的质量以及保龄球道的拥挤程度。作为一种优化算法,你存在于这些条件之中,必须优化你的内部参数(你选择哪个保龄球,你如何投球等),即使你不能改变基本条件。

损失,另一方面,是任何给定状态的‘坏 ness’或错误。损失必须制定如何从模型的行为中得出坏 ness。例如,假设我采取了某种状态——我选择了一个直径为 6.3 英寸的保龄球,以每小时 18 英里的速度、相对于球道边缘 9 度的角度释放球,距离球道四英尺远,等等——并击倒了 6 个球瓶。我的状态的行为是我击倒了 6 个球瓶。为了量化状态的坏 ness,我们计算我没有击倒的球瓶数量——4 个球瓶,给定这些确切的状态参数释放的保龄球。为了最小化我的坏 ness,我会在下一次投球时调整我的参数。

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

从算法的角度来说,状态通常是一组系数或标准,它们将输入转化为预测,而损失是模型预测与期望输出之间差异的数学量化。假设一个模型有n个参数,用{x_1, x_2, ..., x_n}表示。这些参数可能是线性回归模型的系数,k-均值模型中簇的中心,或是决策树模型中的分裂标准。我们可以推导出该模型在某些数据集上的误差——例如,均方误差。如果模型迭代地调整其参数集以改善损失,那么我们说它在学习

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

尽管我们可以大致称整个过程为学习,实际的学习算法发生在从损失到参数更新的转换过程中。当前状态的评估(即从参数到损失的转换或推导)可能被视为‘感知’或一种‘智能’过程。

一个心理学和进化学上受到启发的假设认为,我们作为人类不断地进行一种优化游戏,这种游戏在概念上类似于通过损失导向的参数更新范式进行学习的模型:我们不断观察状态的‘糟糕’程度,并通过调整状态来改进糟糕程度。然而,我们对糟糕程度的衡量比均方误差计算更复杂:我们同时处理各种信号,内部和外部,直观和计算的,并尝试将这些信号与我们当前可变特征集联系起来。例如,当你在保龄球时,你可能并不是直接尝试优化击倒的瓶数,即使你试图这样做。相反,你可能在尝试减少社交焦虑或最大化你约会对象或朋友的印象,这不一定会导致与最大化击倒瓶数相同的最优状态配置。

牢记这一点——我们可以将自己的行为视为对状态糟糕程度评估的响应中可变状态的不断更新——可以帮助我们更好地理解损失驱动的参数更新行为的问题和现象。例如,人们并不总是在改变他们的状态,即使他们不断地评估自己的状态。这展示了收敛——这些人已经达到了一个状态集,在这个状态集中,没有任何可行的状态变化会减少糟糕程度。

另外,一些人由于上瘾(对物质、赌博、社交媒体滚动等)或因严重的偏执(担心陷入经济困境、失去珍贵物品、失去尊重、大量人群等)而不幸陷入了重复的破坏性行为。在学习的技术语言中,我们将这些称为局部最小值。这些是代理人到达并“选择”不离开的汇聚点,要么是因为留在那里比立即采取任何步骤离开更容易(例如,摆脱上瘾),要么是因为,等效地,立即离开比留下来更糟(即担心因某些变化而损害或恶化自己的状态)。

算法通常表现出类似的行为,尽管当然在更少人性化的方式中。我们经常通过损失景观的概念,以几何和定量的方式来构思损失与状态之间的关系。在损失景观中,每个参数都有一个轴,额外还有一个损失轴。损失景观使我们能够将每组参数值映射到相应的损失值。

为了说明这个关键概念,假设你正在尝试学习测试的最佳学习策略。我们只考虑学习一个参数——你为测试学习的小时数。假设你之前参加过四次测试,那么——为了说明问题,假设这些测试在环境上是可比的——你有四个数据点可以学习。对于这四次测试中的每一次,你学习了不同的小时数,相应地获得了不同的表现:完全不学习时为 60%,学习 1.5 小时时大约为 75%,学习 4 小时时大约为 70%,学习 6 小时时大约为 60%。我们将这些数据绘制如下,显示损失——通常在损失较小时更为理想,因此在这种情况下将是错误率(表现的倒数)——如何随着优化参数的变化而变化。

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

利用这些信息,我们想要找到最佳的学习小时数,以获得最小的错误率。从我们收集到的信息来看,最佳的参数值似乎在两小时左右。但我们如何确定?我们如何考虑接近的答案或远离的答案?我们如何描述查看数据和寻找最小损失的过程?

损失景观是一个概念工具,帮助我们以物理的、定量的方式思考学习。我们设想可以获取每个参数值及其对应错误率之间的确切关系。这使我们能够在参数-损失空间中绘制出一条曲线或“景观”。我们可以理解每一个已知点是从景观中“采样”得到的。应该重复强调的是,在实际操作中,我们无法获取这个景观。它只是一个理论模型,用于辅助推理和理解。

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

现在,想象你正在观察一个二维世界的山丘。假设你是一个小旅行者,站在这个山丘的表面,寻找最低的海拔位置。你可以随意移动——你可以使用传送器随机跳跃到处,或者慢慢走,也可以大步跳跃。当你探索这个山丘时,你可能会发现没有新的地方比你之前访问的最低点还低。在一些无果的探索之后,你可能决定就此停留在之前访问过的最低位置。这就表明了收敛。

算法可以通过它们如何利用和导航损失景观来区分。你可以将每个算法视为具有自己个性的旅行者。一种简单的学习算法是随机多次改变参数,然后恢复到表现最好的参数——随机搜索。这是一种表现不稳定的旅行者,可能喝醉了,随机跳跃在损失景观中。

另一种保守的学习算法是以某种粒度搜索每组参数值。这是一个非常勤奋但效率低下的旅行者,慢慢走过损失景观的每一“寸”,做笔记并进行细致的测量。

一个更聪明的旅行者可能会尝试设计某个决策带来的收益的度量,或者通过分析当前站立的地面的坡度来确定哪个方向能够最快下降。

损失景观还让我们考虑像局部最小值这样的现象,其中学习算法会收敛到一个相对于“附近”解来说似乎是最好的解决方案,但实际上却比其他一些“全局”最小值更差。在我们之前优化学习时间的例子中,我们会将两小时学习识别为局部最小值。这将产生比学习半小时或四小时更好的考试错误率。然而,真正的全局最小值是学习 10 小时,这样可以获得完美的考试错误率零。可以将局部最小值视为视野的问题:旅行者在崎岖的地形中行走,只能看到前方的山脉,而看不到可能位于更远处的深谷,并决定眼前的浅谷足够了。

考虑一个务实的例子。我们有一个非常简单的模型,只有一个参数m,它控制着直线y = mx,我们希望找到一个最适合数据集的m值(即最小化直线与点之间的平均差异)。

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

损失景观在坡度值从 0 到 4 时看起来如下。

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

让我们考虑在这个损失景观上旅行的过程以及它对微调模型的影响。我们将从这个景观的高处开始,坡度值为 0.1316。这显然不适合我们的数据集,相应地我们处于损失景观的‘非常高地’。

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

让我们“学习”一下。假设我们向‘右’看一点,相应地找到较低的地面。

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

受到第一次成功阶段的鼓舞,我们将再次沿相同的方向迈进两步,使用坡度为 2.1053 的模型达到了最小错误。

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

假设我们再进一步,结果却是爬升而不是下降我们的损失景观,导致模型更差。这就是我们的学习陷入错误的地方;我们可能要么继续探索(也许能找到更好的解决方案),要么回到之前的最佳解决方案。这就是学习过程中的错误和修正。

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

然而,实际情况是,机器学习模型的参数比一个参数多得多。即使是线性回归模型——最简单的模型之一——也大约有和数据集中变量数量一样多的参数。

我们可以将这个想法推广到更高维空间,尽管有点不直观。例如,考虑一个有两个参数的模型。损失景观将具有三个维度,展示了两个参数值的每种组合如何映射到特定的损失。现在我们有一个三维的‘景观’,可以想象在其中进行导航。

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

大多数现代机器学习模型有数十个、数百个,甚至在深度学习的情况下有数十亿个参数。我们可以概念性地理解它们的学习过程——即“机器学习”或“深度学习”中的‘学习’——作为在对应的几十维、几百维甚至几亿维的损失景观中进行导航,搜索‘最低地面的位置’,即最小化损失的参数值组合。

流形映射

指向损失的参数更新是理解学习的直观方式:我们根据反馈信号更新内部参数,这些反馈信号可以是内部或外部的(例如,通过环境)。损失景观的概念使我们能够将学习的抽象问题转化为更物理的空间,并提供了对学习过程中观察到现象的具体解释,比如收敛到较差状态(局部最小值)。

指向损失的参数更新是一种 以模型为中心的学习解释:损失景观空间由模型的组件(参数值轴)和这些组件的总体性能(损失轴)物理定义。另一方面,流形映射解释是 以数据为中心的。与其将学习定义为模型作为一个代理,不如将学习视为在数据中发生的过程。(当然,正如你将看到的,这两者是同一个硬币的两个方面)。

假设你是 Hal 9001 的看护者,Hal 9001 对于在 2001: 太空漫游 中被忽视而未能获得角色仍然心怀怨恨。作为 Hal 9001 的看护者,你的一个责任是预测 Hal 是否会对今天的温度感到满意。你有一些关于之前温度和 Hal 9001 相应满意度的数据。今天的温度是 64 华氏度。你能预测 Hal 9001 是否会满意吗?

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

从数据中可以看出,Hal 9001 很可能会(幸运地)感到满意。你是如何得出这个结论的?你隐含地 构建了一个 流形特征空间 中。由于我们的数据只有一个特征,即温度(Hal 9001 的满意度是 目标,而不是特征),特征空间只有一个维度。这相当于一个数字线:

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

说得更宽泛一点,我们可以绘制一个 流形 来沿某一点分隔数据。在这种情况下,我们可以通过绘制以下流形来完美地分隔数据:

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

我们也可以将流形称为 决策边界,以便于理解。流形是分隔空间的边界,使我们能够决定将哪个类别与特征空间中的哪个点关联起来。

这里的关键见解是,流形不仅仅与它在特征空间中所占的那一小片空间相关:相反,它影响整个特征空间。它定义了哪些区域属于哪些类别。此外,它定义了你如何对未见过的点进行推断。如果我们在这个特征空间中标记出“64”这个点,我们会发现它属于满意度类别“是”。

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

让我们考虑二维空间中的另一个例子。图 2-x 展示了一个二维特征空间(这代表了一个具有两个特征/列的数据集),点的颜色根据它们的类别进行着色。

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

我们可以绘制如下流形来分隔数据。它完美地适应了数据集;也就是说,它完美地将数据分成了各自的类别。

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

然而,我们也可以绘制许多其他有效的流形。这些流形也完美地分隔数据。

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

尽管这些流形在训练集表现上都是相同的,因为它们在特征空间中以等效的完美表现分隔不同类别的项目,但它们在如何影响整个特征空间方面却有显著不同。坐标(1,7)处的点在顶部映射中的分类将与底部映射中的不同,因为流形的方向不同。

同样地,回到我们的一个维度示例,我们也可以用不同的方式绘制边界,这些方式在分隔已知数据时同样有效。

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

这也影响了我们对新数据的决策。假设气温为 55 度;顶部流形预测 Hal 9001 会满意,但底部流形预测 Hal 9001 不会满意。

这种随意性是需要考虑的重要问题。它表明对于系统可以学习的任何问题,有许多不同的同样好的解决方案。然而,通常情况下,我们希望模型学习一个‘真实流形’。这就是我们想象的‘真实流形’,它不仅完美(或至少最优地)分隔已知数据点,还分隔我们将来可能收集到的所有点。这个概念与我们从中收集数据的现象密不可分。

因此,学习的过程就是在特征空间中泛化差异;以一种有意义的方式绘制流形以分隔不同的数据点。在这个过程中,我们学习数据集中的一般规则。

关键是,流形映射的学习解释帮助我们强调学习如何‘影响’数据集。即使模型仅在有限数量的点上进行训练,我们确实理解它与特征空间中的每个点相关。因此,流形映射解释使我们能够理解模型如何泛化——它们如何学习我们希望它们学习的规则(‘真实流形’),而不是学习特征空间中那些便宜地分隔数据的捷径,这些捷径并不能准确反映真实的基本现象。

让我们考虑一个三维流形映射的例子:

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

在三维空间中,分隔这些点的流形是一个‘表面’,在更熟悉的意义上;它像一条覆盖空间的毯子,特征之间的真实有意义的关系(理想情况下)在其在特征空间中的轨迹中的每个弧线和曲线中体现出来。

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

现在,考虑一个将 100×100 像素的图像——这是一张相当低质量的图像——分类为狗或猫的模型。假设这张图像是灰度的,那么这张图像中有 10,000 个唯一的像素。每一个像素都是这个特征空间中的一个维度。这种猫/狗分类器的目标是发现 10,000 维空间中的流形,这个流形在这个庞大的理论空间中弯曲和曲折,捕捉区分狗和猫图像的相关视觉关系,呈现在这个表面的拓扑形状中。

这是一个复杂的想法。它比基于损失导向的参数更新解释更不直观,但却是一个值得深入思考的重要概念。

心理学和哲学的贡献

损失导向的参数更新解释将学习描述为对损失或反馈信号的内部状态集的迭代更新,反馈信号描述了当前状态的糟糕程度。流形映射解释将学习描述为在特征空间中形成一个流形(决策边界、表面),它最佳地分隔不同的数据点,同时也显然在整个空间中进行‘预测’(泛化)。

这些似乎是合理的,甚至是自然的解释学习过程的方式。然而,即便这些是主要的数学、技术和抽象的‘学习’概念描述,也重要的是认识到这种描述仍然肯定或符合某种哲学视角或世界观。

关于‘学习’是什么,‘学习’意味着什么,有许多不同的哲学立场和理论。一个常见的误解是将数学和科学等领域表面上的内部一致性(实际上,经过更仔细的调查,发现并不是如此一致)与‘客观性’和‘真理’的隐含标签联系在一起。正如我们在后续章节中进一步探讨的那样,这种误解常常导致对像 AI 这样的计算或数学系统的信任错位或过度信任。

我们从一开始就开始识别 AI 的各种隐含哲学假设,通过简要了解‘学习’在哲学上是如何被处理的,以及损失导向的参数更新和流形映射解释符合哪些路径。

联想主义是一个有着悠久发展历史的学习理论,从十八世纪的洛克和休谟到现代与人工智能相关的意义。它建议生物体通过经历呈现给它们的世界,基于因果推理的历史学习:如果它们经常遇到某种现象与另一种现象之间有某种联系,它们就开始联想这些现象。

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

例如,每当艾萨克把一个苹果抛向空中,它就会落下来。从联想主义的角度看,艾萨克形成了一条学习知识:每次苹果被抛向空中时,它都会落下来。艾萨克可能会把一个橙子抛向空中几次,发现每次橙子也会落下来。在尝试了几个其他物体后,艾萨克会学会概括这种联想:物体在空中被抛下后落下的特性不是苹果固有的,而是一般物体的特性。

联想主义者认为,只有一个核心的心理过程:通过经验联想思想。伊万·帕夫洛夫在心理学领域的工作或许是最著名的联想学习证据。帕夫洛夫的狗在遇到肉的气味时自动分泌唾液,这是由于嗅到肉(在吃之前)和分泌唾液之间历史上建立的联想。

在更流行的文化中,吉姆在《办公室》里利用联想学习过程来对付德怀特。每当吉姆重新启动他的电脑——播放标志性的 Windows “解锁工作站”声音——吉姆就会给德怀特一颗薄荷糖。德怀特每次都会接受,以至于当他听到声音时会本能地伸出手。一天,吉姆重新启动电脑,德怀特伸出手,期待常规的薄荷糖。吉姆问德怀特在做什么,德怀特回答“我不知道”——然后皱起眉头,发出唾液声,并问为什么他的嘴巴突然味道如此难闻。

在帕夫洛夫之后,爱德华·桑代克于 1911 年提出了“效果法则”。这一理论表明,与满足感相关的行为将导致该行为的重复。效果法则超越了帕夫洛夫的被动联想学习,迈向了主动学习:生物体主动参与(或抑制)行为,以最大化满足感或奖励。这是训练狗良好行为的逻辑,例如:狗在表现出期望的行为时获得奖励(而对不良行为给予惩罚,惩罚可以被视为奖励的否定)。

损失导向的参数更新范式直接与这种联想学习理论相一致。通过强化哪些行为(即状态,参数的集合)是“好的”(低损失)和“坏的”(高损失),模型旨在向更好的行为靠拢,远离更差的行为。

心理学习理论中的两个额外概念是区分统一。在区分中,受试者感知到以前被认为是单一属性的属性之间的差异;在统一中,受试者感知到一个以前被认为是多个属性的属性。这种分离与统一的双重系统有助于理解信息——能够发现区分表面上看似一致的现象的有意义的细微差别,并能够将表面上看起来不同但在某种程度上有意义的概念归为一类。

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

流形映射的学习解释与区分统一的双重概念在数学上直接对应。流形的目标最明显的是分离空间,但也包括确定不分离哪些空间——也就是统一。

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

鉴于流形映射和损失导向的参数更新是同一枚硬币的两面——模型的参数决定了流形的绘制方式,而流形的形状则是为了通过最优的分离来最小化损失——我们也可以看到关联学习理论与区分-统一感知学习理论的联系。这是应用如何可以启发理论的一个例子。早期和现代人工智能发展的实质性工作也同样将技术 AI 进展应用于指导哲学、心理学和神经科学中的新研究探讨。

总之……

我们可以把学习看作是损失导向的参数更新——一个试图调整各种自由变量以最小化误差的代理——也可以看作是流形映射——发现适用于观察空间的普遍规则,从而分离一些样本,同时将其他样本统一。如我们所见,这两种解释是同一枚硬币的两面:一种是以模型为中心的,另一种是以数据为中心的。虽然这两者在机器学习中常常使用,但我们也可以在其他领域,如行为科学中找到它们的应用。

感谢阅读!

所有图片均由作者创作。

数据科学家究竟做什么?

原文:towardsdatascience.com/what-exactly-does-a-data-scientist-do-42c53db57df5

我在 3 个不同数据科学团队工作的诚实反思(提示:PowerPoint 的使用比你想象的要多)

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

·发表于 Towards Data Science ·阅读时间 7 分钟·2023 年 6 月 22 日

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

图片由 Hermansyah 提供,来源于 Unsplash

数据科学家被称为 许多 事物

  • “数据科学家是一个住在旧金山的统计学家”

  • “专业模型师,但不是那种”

  • “我拿钱去谷歌搜索 Stack Overflow”

  • “我向高管出售魔法”

或者,我个人最喜欢的:

  • “数据科学就是 Mac 上的统计学”

正如这份工作描述的百花齐放所示,很难清楚了解数据科学家角色的日常工作内容。很多现有的文章——虽然很出色——都来自 2012 年至 2020 年,而在数据科学这样快速发展的领域中,这些内容很快就会过时。

在这篇文章中,我的目标是揭开隐喻的面纱,给出 2023 年数据科学家的个人见解。

通过借鉴我在 3 个不同数据科学团队的工作经验,我会尽力帮助三类人群:

  1. 有志成为数据科学家:我会提供对这份工作的现实见解,帮助你更好地决定这是否适合你,以及需要掌握哪些技能。

  2. 数据科学家:为你的团队提供尝试新事物的灵感和/或回答“那么你实际做什么?”这个问题。

  3. 与(或想雇佣)数据科学家合作的人:了解我们实际做了什么(也许更重要的是,我们做什么)

这并不是全部都是自动驾驶汽车、ChatGPT 和深度学习。

一家大型科技公司的 AI 负责人曾告诉我,他遇到的最大误解是数据科学家总是在构建深度学习模型和做“炫酷的 AI 工作”。

现在不要误解我的意思——数据科学确实可以非常炫酷,但它包含的内容远超人工智能及其花哨的用例。将数据科学与 AI 等同起来,就像假设律师每天都在法庭上大喊“我反对!”一样;在幕后还有很多事情。

这不仅仅是“炫酷的 AI 工作”。

我最喜欢的关于数据科学的描述之一来自Jacqueline Nolis,她是总部位于西雅图的首席数据科学家。Nolis 将数据科学分为三大领域

  1. 商业智能——“将公司拥有的数据呈现给合适的人

  2. 决策科学——“利用数据帮助公司做出决策

  3. 机器学习——她描述为“将数据科学模型持续投入生产”,虽然我可能会更广泛地看待,包括实际的 ML 模型开发。

不同的公司会强调不同的领域,即使在这些领域中,方法和目标也会有所不同。例如:

  • 如果你是一名在决策科学领域工作的数据科学家,你的日常任务可能包括从运行 A/B 测试到解决线性规划问题的任何工作。

  • 如果你是一名花大部分时间在构建 ML 模型的数据科学家,这些模型可能是以产品为中心的(例如,构建一个推荐算法,将其整合到应用程序中),或以业务运营为中心的(例如,构建定价或预测模型,用于改善公司后台的商业运营)。

就个人而言,我发现数据科学最令人愉快的事情之一就是能够接触这三个领域,因此在我做的数据科学角色中,我总是努力确保有很多变化。这是尝试构建我之前提倡的“全能型人才,专精于一项”心态的好方法,作为框定数据科学家职业生涯的一种方式。

你可能没有想到(或者不想要)PowerPoint 的使用比你想象的要多得多。

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

图片由Teemu Paananen提供,Unsplash上发布

啊,PowerPoint。如果你以为数据科学家可以免于使用它,你就错了。

制作和展示幻灯片是任何数据科学家角色的关键部分,因为如果你无法沟通模型的价值,你的模型就无从发挥作用。正如 Andrew Young 所说:

多年来,我见过许多拥有博士学位的数据科学家花费数周或数月时间建立高效的机器学习管道,这些管道(理论上)能带来实际价值。不幸的是,如果他们未能有效传达自己工作的价值,这些辛勤的成果可能会无疾而终。

在我的团队中,我们非常重视与利益相关者的沟通,因此 PowerPoint 在我们日常工作中往往占据了很重要的位置。

对于每一个项目,我们都会制作一个主幻灯片文档,不同的团队成员可以在上面添加内容,然后每当需要向利益相关者展示时,我们就从这个文档中选择相关的幻灯片。在必要时,我们会尝试创建多个版本的关键幻灯片,以便能够量身定制我们的信息给不同的观众,他们有着不同的技术专长水平。

如果我说实话,我其实不介意花时间在 PowerPoint 上(请不要取消我),因为我发现制作幻灯片是提炼关键想法的一个很好的方法。说实话,这帮助我记住一些大问题,比如:(1)我在解决什么问题,(2)我的解决方案与基线方案相比如何,以及(3)有什么依赖关系和时间线。

清理数据?拿我的啤酒来

人们常说数据科学有 80%是准备数据…

… 以及 20%的时间在抱怨数据准备。

而且我不仅仅是在谈论数据科学是“新事物”的公司。

即使在有着成熟数据集的公司中,数据准备和验证也可能需要大量时间。至少,你会发现数据集(1)存储在不同的平台上,(2)发布的频率不同,或者(3)需要大量整理才能达到正确的格式。即使在你的模型投入生产后,你还需要持续检查数据集是否出现漂移、破损或缺失信息。

而且我真不想谈论用户输入的数据

在我之前的一份工作中,我们有一个在线表单,用户需要输入他们的地址,而我们的用户使用了 95 种不同的方式拼写“巴塞罗那”:我说的是从“barcalona”到“BARÇA”和“Barna”的所有拼写方式。

95 种“巴塞罗那”的拼写方式

故事的寓意是:除非你想花接下来几周的时间哭着看正则表达式文档,否则不要使用自由文本字段。

你总是在学习

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

图片由Christina @ wocintechchat.comUnsplash上提供

我最喜欢数据科学的一个方面就是它涉及持续学习。

对我来说,我一直害怕被困在一个做同样事情的工作中,我很感激地说数据科学并不是这样的职业。作为一名数据科学家,你会发现没有所谓的“标准”项目。所有项目都需要略微定制的方法,因此你总是需要调整现有知识并学习新事物。

我说的并不仅仅是像参加会议或做在线课程这样的“正式”学习。

更有可能的是,你会花费大量时间通过阅读编码文档、Towards Data Science 文章和 Stack Overflow 答案来进行“微学习”。如果你对我如何持续学习和保持更新的方法感兴趣,你可能会对阅读我最近的一篇文章感兴趣,在文章中我会更详细地讨论这一点:

## 我如何在全职数据科学家角色中保持对最新 AI 趋势的了解

不,我不仅仅是让 ChatGPT 告诉我

[towardsdatascience.com

这是一项团队运动

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

图片来自Marvin MeyerUnsplash

数据科学家并不是孤立存在的。

我们嵌入在团队中,为了有效地工作,你必须能够一起合作。我非常喜欢Megan Lieu 说的方式:

当我最终成为数据科学家时,最大的失望是了解到这不仅仅是整天埋头工作的事情。

“我迫不及待地想要不与任何人交谈,自己独自构建模型,做一些技术性的、数据科学的事情!”

令我这个内向者感到恐惧的是,我意识到我不仅需要与他人合作,还必须每天实际“交谈”商业和外部利益相关者

虽然我对团队合作的感觉比 Megan 轻微一些(我本质上更外向),但我也最初对这个角色通常有多么基于团队感到惊讶。在我的角色中,“合作”意味着:有每天的站会来讨论任务和阻碍,定期进行配对编程会话来调试和优化代码,并进行权衡不同技术方法的讨论(也就是说:争论)。

总的来说,我估计我大约花费了 50%–70%的时间在独立工作,其余时间用于配对或团队工作,尽管确切的比例在很大程度上取决于你的公司和资历水平。

就是这样!

感谢你阅读这篇关于我作为数据科学家的生活的小见解。

我希望你觉得这篇文章有帮助,如果你想聊天,请随时联系我 😃

还有一件事——你能成为我那 1%中的一员吗?

我在 Medium 上的读者中不到 1%点击我的‘Follow’按钮,所以无论是在 Medium、Twitter还是LinkedIn,你的点击对我都非常重要。

如果你希望无限访问我所有的故事(以及 Medium.com 上的其他内容),你可以通过我的推荐链接以每月 5 美元订阅。这对你来说不会增加额外费用,与通过一般注册页面订阅相比,它有助于支持我的写作,因为我会获得少量佣金。

GPT-4 带来的 AI 新视角

原文:towardsdatascience.com/what-gpt-4-brings-to-the-ai-table-74e392a32ac3?source=collection_archive---------9-----------------------#2023-04-14

自然语言处理

一种语言模型及更多内容

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

·

关注 发表在Towards Data Science ·7 分钟阅读·2023 年 4 月 14 日

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

图片来自Unsplash

期待已久的最新生成预训练变换器(GPT)模型终于发布了。OpenAI 的 GPT 模型第四版在前几版的基础上有了一些改进,并且新增了一些扩展功能。像前几代模型一样,GPT-4 使用半监督训练进行训练和微调。GPT 模型中使用的半监督训练是通过两个步骤完成的:无监督生成预训练和有监督的判别微调。这些训练步骤帮助绕过了其他语言模型因标注数据不良而面临的语言理解障碍。

GPT-4 如何走到今天

OpenAI 于 2023 年 3 月 14 日发布了 GPT-4,距初次推出 GPT-1 已近五年。每次新版本发布时,这些模型的速度、理解能力和推理能力都有所提高。这些改进在很大程度上归因于训练过程中使用的数据量、模型的稳健性以及计算设备的新进展。GPT-1 在训练期间只能访问 4.5GB 的 BookCorpus 文本。GPT-1 模型的参数大小为 1.17 亿——相较于发布时存在的其他语言模型,这已经非常庞大。GPT-1 在它经过微调的不同任务中表现优异。这些任务包括自然语言推断、问答、语义相似性和分类任务。

对于那些仍对模型是否会超越 GPT-1 感到不确定的人来说,GPT-2 发布时的数字让他们大吃一惊。GPT-2 的参数大小和用于训练的文本大小大约是 GPT-1 的十倍。GPT-2 的尺寸并不是唯一的新增加内容。与 GPT-1 相比,OpenAI 去除了对特定任务进行额外微调步骤的需求。使用了少量样本学习,以确保 GPT-2 能够为单词赋予意义和上下文,而无需多次遇到这些单词。

就像 GPT-2 一样,GPT-3 和其他后续语言模型不需要针对特定任务进行额外的微调。GPT-3 的 1750 亿参数模型是在 570GB 的文本上进行训练的,这些文本来源于 Common Crawl、Web Text、英文维基百科以及一些书籍。GPT-3 的语言理解和推理能力非常深刻,进一步的改进导致了 ChatGPT 的开发,这是一个互动对话 API。OpenAI 开发了 ChatGPT,以便为用户提供一个基于网页的对话环境,使用户可以亲身体验扩展版 GPT-3 的能力,通过让语言模型根据用户的输入进行对话和响应。用户可以提出问题或请求有关模型训练范围内任何主题的详细信息。OpenAI 进一步规定了其模型能够提供的信息的范围。在涉及犯罪、武器、成人内容等的提示中,答案会特别小心。

GPT-4 的令人兴奋的特性

每一次 GPT 的新版本发布都带来了一系列在过去看似不可能的功能。ChatGPT 以其推理和理解能力给用户留下了深刻印象。用户能够获得关于任何主题的准确回应,只要这些主题是 ChatGPT 训练文本的一部分。但也有案例显示,ChatGPT 在回应发生在模型训练后事件的查询时遇到了困难。理解新主题的难度应是预期中的,因为 NLP 模型是对文本的再现,并尝试将时间和空间中的实体映射到期望的上下文中。因此,只有在其训练数据集中存在的主题才能被回忆起,对新主题进行概括将是相当雄心勃勃的。

GPT-3 模型的推理不仅相对有限,而且是单模态的。该模型只能处理文本序列。最新发布的 GPT 在前一版本的基础上进行了改进。由于其更高的推理水平,GPT-4 模型可以更好地估计句子的上下文,并根据该上下文进行一般理解。根据对新模型能力的初步了解,其他新特性如下:

  • 字数限制的增加,限制大小为 25,000 字,而 ChatGPT 的限制为 3,000 字。GPT-4 具有更大的上下文窗口,大小为 8,129 和 32,768 个标记,而 GPT-3 为 4,096 和 2,049 个标记。

  • 推理和理解的改进。文本理解得更好,并对文本进行更好的推理。

  • GPT-4 是多模态的。它接受文本输入以及图像。GPT-4 能够识别和理解图像的内容,并以人类水平的准确性从图像中做出逻辑推断。

  • 由 GPT-4 生成的文本更难被标记为机器生成文本。这些文本更具人类生成的特点,并利用诸如表情符号等句子特征,使文本感觉更个人化,并注入一些情感。

  • 最后,我想特别提到 GPT-4 附带的新动态标志。该标志展示了该模型的多变性以及其潜在应用场景的活力。我认为这个标志可能是赋予模型的最佳身份之一。

真实与虚构

GPT-4 的大小可视化表示

在等待 GPT-4 发布期间的某个时间点,这张图片曾在 Twitter 上流传。这张图片是 GPT-4 规模的传闻大小的视觉表现。与 ChatGPT 使用的参数大小相比,这张图片显示了新模型参数的显著增加。虽然这张图片传达的表现可能听起来是突破性的,但这可能并非完全真实。甚至 OpenAI 的 CEO 也驳斥了关于模型大小的传闻。关于训练多模式语言模型的架构和模型参数大小的官方文档尚未发布。我们无法确定创建这种模型的方法是通过缩放过去的模型还是一些新方法。一些 AI 专家认为,缩放不会提供 AI 世界正在努力实现的急需的通用智能。

OpenAI 在文本生成方面展示了 GPT-4 的巨大优势,但我们是否曾经想过生成文本与一些标准考试的生成文本相比如何?尽管 GPT-4 在某些考试中表现相当不错,但在需要更高推理能力的考试中表现不佳。Open AI 发布的技术报告显示,GPT-4 在两个版本的 GRE 写作考试中一直处于第 54 百分位¹。这门考试是许多考试中考验研究生推理和写作能力的考试之一。可以说,GPT-4 生成的文本几乎与大学毕业生一样好,这对于一台“计算机”来说并不差。我们还可以说,这种语言模型不喜欢数学,或者更确切地说,在微积分方面表现不佳。它在 AP 微积分 BC 考试中的表现处于第 43 至 59 百分位,与同一考试委员会的生物学、历史学、英语、化学、心理学和统计学对应学科的高百分位得分相比显得较低。随着难度的增加,该模型表现出了困难。目前人类仍然处于思维的顶端。

有没有想过这些语言模型在编码方面的表现如何?GPT-4 在一些 Leetcode 任务上进行了编码能力检验。它在简单任务上的表现相当不错,但随着任务难度的增加,其表现却在持续下降。值得注意的是,GPT-4 在 Leetcode 任务的总体得分几乎与 GPT-3 相似。OpenAI 这次的表现并不比以前好,或者说他们可能没有试图将 GPT 模型打造成下一个 Github Copilot。想象一台计算机在面试编码问题上表现优于一般程序员,真是太疯狂了!

尽管某些功能与前代模型相比并未见到许多改进,值得注意的是模型在其他任务上的表现如何。

结论

GPT 的第四个版本展示了语言模型的范围没有限制,因为这些模型并不是多模态的,能够接受文本以外的输入。这可以被视为未来版本更高级功能的先兆。我们可能会看到一个语言模型在图像识别任务中表现得和计算机视觉模型一样好,甚至更好,这得益于 GPT-4 的图像理解能力。我们正逐步朝着通用人工智能迈进。虽然还有很长的路要走,但我们显然有一个方向,并且知道我们要去哪里。

[1]: OpenAI. (2023 年 3 月 16 日). GPT-4 技术报告 cdn.openai.com/papers/gpt-4.pdf

谢谢!

如果你喜欢我的文章,请 关注我 ,这样你就会在我发布故事时收到通知。我将在这个领域发布更多文章。祝你一切顺利。

语义网发生了什么?

原文:towardsdatascience.com/what-happened-to-the-semantic-web-cbaaf547a09f

结果并没有如预期那样发展。

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

·发表于 Towards Data Science ·7 分钟阅读·2023 年 8 月 3 日

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

塞尔·蒂姆·伯纳斯-李设想的由稳定扩散生成的网络

还记得语义网吗?可能不记得了。大约二十年前,它曾风靡一时。但如今,关于它的提及已经很少了。

在开始时怀揣对新网络的大胆愿景(见下文),语义网逐渐失去了动力,逐渐被边缘化。然而,关于为什么会这样,从未有过“清算”——直到现在,语义网的愿景必须考虑到颠覆性和炫目的生成式人工智能技术的存在。

在这篇文章中,我将探讨为什么语义网尽管失去了最初的光彩,但仍然是网络拼图中的一个重要部分,即便与新的生成式人工智能共存,以及为什么数据科学专业人士也应该了解它。

但首先,让我们来看看创立语义网的那个人。

网络背后的男人

蒂姆·伯纳斯-李(TimBL)在 1999 年提出了语义网(SW)的概念,当时他在 万维网联盟(W3C)工作。这个想法是创建一个机器可以处理的数据网络,使它们能够理解信息的含义并在不同数据片段之间建立联系。

我们必须理解,语义网对蒂姆·伯纳斯-李来说是第二次尝试。1999 年,他已经是全球(不是开玩笑)知名人物,因为他早已创造了万维网。

在 1990 年,当他作为访问学者在瑞士的 CERN 时,他向他的老板迈克·森德尔提出了将网络变为现实的想法,后者认为这个提案“模糊但令人兴奋。” TimBL 说他几乎没有发明什么,因为超链接、互联网协议和许多其他元素已经存在。然而,没有人采取将它们全部整合起来的步骤。

正如 TimBL 所说,

我只需将超文本的理念与 TCP 和 DNS 的理念连接起来——瞧!——于是出现了万维网。

人类的一小步……

第一个构建的网页仍然可以在这个地址访问——没有花哨的格式,只是在顶部写着“第一个网站的首页。

现在你对 TimBL 有了了解……以及为什么在他的第二个提案,即语义网提案,几乎在世纪之交时发布时,他会被非常严肃地对待。

语义网的愿景

语义网被视为互联网发展的下一步,互联网直到那时还专注于将文档链接在一起。通过语义网,重点将转向连接数据,创建一个更智能和互联的网络。

语义网的愿景是使机器能够理解网络上信息的含义,并利用这种理解提供更智能和个性化的服务。在世纪之交时,显而易见的是,网络不仅仅是供人类使用的,但信息在网页中的存储方式完全无法自动化处理信息。根据 TimBL 的说法,传统网络正在成为网络处理自动化的瓶颈。

这一愿景非常吸引人:与传统的网络不同,传统网络的页面设计用于向人类展示信息,自描述的网页将使得自动化处理内容成为可能。因此,彻底改造我们所知的互联网是非常有意义的。正如他对网络所做的那样,TimBL 呼吁开始新的革命。

我当时在场,见证了这一运动的兴起——不仅仅是观察:我的几位研究生也在从事语义网相关的研究。

实现语义网的技术

但语义网不仅仅是一个理念——为使其成为现实,开发了一系列技术和标准,这些内容在以下几点中有所介绍:

  • 资源描述框架(RDF):用于在网络上表示信息的数据模型。RDF 使用 URI 来标识资源,使用谓词来描述资源之间的关系。

  • Web 本体语言(OWL):一种用于描述 RDF 数据含义的表达性语言。OWL 可用于定义资源之间的复杂关系以及定义在层次结构中组织的资源类。

  • SPARQL:一种用于 RDF 数据的查询语言。SPARQL 可以用来从 RDF 数据存储中提取信息。

  • 语义网服务:一种使用语义标记来描述服务能力以及它所消耗和产生的数据的网络服务。

一些重要的语义网发展,例如 DBpedia,一种按照上述标准组织的结构化信息的维基百科,已经开展。它包含超过 2.28 亿个实体,当我们不习惯谈论像大型语言模型中的节点数这样的大量数据时,这个数字显得非常庞大(见下文)。

DBpedia 类似于 Google 的“知识图谱”,它被用来解决搜索查询。Google 的知识图谱是一个概念和名称的网络,表现为 RDF 三元组的集合。我不能给你更多的信息,因为这主要是 Google 的内部信息。我相信知识图谱对 Google 提供了相对于竞争对手的优势。

例如,我相信你已经注意到,Google 有时会检索到关键词没有出现但与查询相关的页面。这是因为“语义搜索”。这种搜索超越了简单的关键词匹配,通过结合与查询相关的知识图谱中的术语来进行。语义搜索考虑了同义词和其他概念关系,以丰富搜索结果。

即使不完全了解每项技术,我们也可以看到,从技术角度来看,几乎所有的要素都已经存在。那么,为什么这次缺少了“哇哦!”的时刻?为什么 SW 花了这么长时间才显现?

生成式 AI 的崛起

SW 认为需要机器可读的格式来理解存储在 Web 上的信息的含义。TimBL 认为人类可读的信息对机器来说不可用。

而且时间不长。

直到 2022 年 11 月,ChatGPT 在抓取了数百万个网页文档后,才开始能够回答人类提出的问题,尽管不太可靠。

然后情况发生了快速而戏剧性的变化。ChatGPT 和其他聊天机器人的令人印象深刻的对话能力表明,存储在 Web 上的信息可以被机器“理解”。进一步地,它可以回答问题并向人类建议行动。

谁会想到这一点?我没想到,Tim Berners-Lee 也没想到。

生成式 AI 很快超越了语义网(SW)。它的能力吸引了开发者、研究人员和企业的关注。焦点从创建结构化的 SW 转向利用 AI 的力量生成内容。

会有复兴吗?

一旦 SW 的核心假设(即机器无法理解网页)被证明是错误的,它的未来变得不确定。许多人认为,SW 会变得过时,走向像渡渡鸟一样的灭绝。

不要那么快。

首先,像 RDF、SPARQL 和语义网服务这样的具体 SW 技术将会长期存在,因为它们是现有基础设施的一部分。事实上,它们是 Amazon Web Services 提供的一部分

此外,我认为,无论是在 Google 还是其他地方,知识图谱都将补充生成式 AI 解决方案。

让我给你一个具体的例子。

从今年春天开始,我与同事讨论了 Bing 如何使用知识图谱回答问题(是的,微软也有它的知识图谱版本)。然后我看到了一张 Bing 的技术图解,变得清楚它们是如何做到的。

事情是这样的:

当查询提交给 Bing 时,他们使用它来检索知识图谱的相关部分。结果类似于补充原始用户查询的一组陈述。这种“增强”的查询随后作为 ChatGPT 或其他大型语言模型的提示。就是这样。

从知识图谱获取的信息相比于没有它的聊天机器人有优势:主要的优势在于它由可靠的信息组成,而不是由 LLM 单独生成的虚假信息、幻想或其他虚假信息。

还有一个令人垂涎的可能性没有人提及:AI 可以用于注释常规网页,并使用 SW 标准使其自我描述。

你知道,拖慢 SW 的一个障碍是为每个特定网站采用它的成本。SW 从未成为许多公司的优先事项,所以他们避免将资源用于将页面改造为 SW 标准。

但有了 AI,转变普通网页为 SW 网页可能会变得便宜。实际上,聊天机器人特别擅长遵循格式:我自己验证过这一点。因此,AI 可能会去除 SW 采用的主要障碍,前提是对其仍有兴趣。

结束语

我认为知识图谱以及许多与 SW 相关的技术最终将保持有用。

讽刺的是,生成性 AI 起初看似会给 SW 最后一击,但最终可能会与其形成一种共生关系,使其再次变得相关。它们正在合作开发诸如新型 Web 搜索的生成性 AI 应用,未来可能会继续合作。

所以,回答“SW 会有复苏吗?”这个问题的答案是响亮的“是的”,但不是按照 TimBL 最初的设想,即全面改造 Web,而主要作为对其他系统的支持,确实少了些光彩,但同样有用。

让我们面对现实:TimBL 对语义网的原始愿景永远不会成为现实。那是一个(或看似)极好的想法,个人来说,我曾经坚信不疑地投入其中。但是技术并不促进优秀的想法,而是方便的想法。

那么,让我们结束于新的语义网愿景:

“愿沉闷、乏味、朴实、真实的语义网长命百岁,它将作为闪亮、花哨、迷人的人工智能的支持角色。”

Neo4j v5 中 APOC 发生了什么:核心版和扩展版

原文:towardsdatascience.com/what-happened-with-apoc-in-neo4j-v5-core-and-extended-edition-23994cdf0a2c?source=collection_archive---------9-----------------------#2023-04-04

Neo4j 的 APOC 插件在 v5 版本中被分为两个版本

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

·

关注 发表于 Towards Data Science ·5 分钟阅读·2023 年 4 月 4 日

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

图片由 Markus Spiske 提供,Unsplash

你是否升级或下载了 Neo4j v5,现在一些你喜欢的 APOC 程序不再工作了?你并不孤单。

从 Neo4j v5 开始,APOC 已被拆分为两个版本。主要区别在于,一些过程在核心版中得到了官方支持并可用。APOC Core 包含经过严酷测试的过程和函数,没有外部依赖项。另一方面,扩展版包含可能需要外部依赖项的附加过程,并且没有官方支持。

我写这篇博客文章是为了帮助你理解两个版本之间的新区别。首先,现在有两个独立的文档网站:

此外,如果一个过程不是核心版的一部分,它在文档中会被标记为扩展标签。

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

APOC 扩展标签。图片由作者提供。

例如,apoc.load.json过程是核心版的一部分,因为它没有扩展标签。另一方面,apoc.load.csv过程是扩展版的一部分,如扩展标签所示。

现在让我们来看看安装过程。

Neo4j Desktop

我喜欢使用Neo4j Desktop在本地环境中进行任何原型设计。这是一个很好的应用程序,可以让你通过几次点击来设置和安装 APOC 插件。

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

在 Neo4j Desktop 中安装 APOC。图片由作者提供。

但是,目前并没有明确提到单击安装仅安装核心版。如果我们想添加扩展版,需要手动下载并将其复制到插件文件夹中。

扩展版的发布可以在GitHub上找到。我们需要确保 APOC 版本与 Neo4j 版本兼容。APOC 版本遵循 Neo4j 版本,例如,APOC v5.5.0 与 Neo4j v5.5.0 兼容。确保 Neo4j 和 APOC 之间的前两个版本号匹配。

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

APOC Extended v5.5.0。图片由作者提供。

我们需要下载适当版本的扩展 jar 文件。一些过程需要额外的依赖项,这些依赖项也可以下载。然而,大多数情况下,仅下载扩展 jar 文件就足够了。下载完成后,将 jar 文件复制到插件文件夹中。

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

选择插件文件夹。图片由作者提供。

你可以通过点击三个点选项,选择打开文件夹,最后点击插件来打开plugins文件夹。

文件夹中应已包含你在 Desktop 应用程序中安装的 APOC 插件核心版本。因此,最终应该有两个 APOC Jar 文件,一个用于核心版本,另一个用于扩展版 Docker 版本。

确保首先安装核心版,因为它总是设置适当的配置值,以允许我们执行 APOC 过程!

另一个变化是,我们不能将 APOC 配置设置添加到neo4j.conf文件中。相反,我们需要创建一个apoc.conf文件,并在其中设置任何 APOC 配置值。例如,我们需要设置以下配置,以允许 APOC 过程从本地磁盘读取文件。

apoc.import.file.enabled=true

你可以通过以下流程在 Neo4j Desktop 中设置此配置:

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

设置 APOC 配置值。图像由作者提供。

按照说明打开Configuration文件夹。接下来,创建一个新的apoc.conf文件,然后在新创建的文件中设置适当的配置值。

Neo4j Docker

在生产环境中,我喜欢在 docker 容器中运行 Neo4j。Neo4j 的 docker 容器提供了一个方便的环境变量,帮助我们安装适当版本的 APOC 插件。

docker run \
    -p 7474:7474 -p 7687:7687 \
    -e NEO4J_PLUGINS=\[\"apoc\"\] \
    neo4j:5.6.0

然而,使用环境变量在 Neo4j v5 中安装 APOC 插件将只安装核心版。不幸的是,如果我们想使用扩展版,我们需要手动下载并将其复制到插件文件夹中。

我更喜欢在与 docker 容器交互时使用docker-compose。因此,我将使用以下docker-compose设置来运行 Neo4j,并同时使用 APOC 核心版和扩展版。

version: '3.7'
services:
  neo4j:
    image: neo4j:5.5.0
    restart: always
    hostname: neo4j
    container_name: neo4j
    ports:
      - 7474:7474
      - 7687:7687
    volumes:
      - ./neo4j/data:/data
      - ./neo4j/plugins:/plugins
    environment:
      - NEO4J_AUTH=neo4j/pleaseletmein
      - NEO4J_PLUGINS=["apoc"]
      - NEO4J_apoc_import_file_enabled=true

在这个例子中,我们使用的是 Neo4j v5.5.0。我们还使用了环境变量来安装 APOC 核心库,并允许 APOC 过程从磁盘读取文件。然而,我们需要下载APOC Extended v.5.5.0并将其复制到neo4j/plugins文件夹中。所以,我们只需要手动复制扩展版,而核心版是通过NEO4J_PLUGINS变量安装的。此外,在大多数情况下,你还希望持久化数据库文件。因此,我们还挂载了data文件夹。

总结

在 Neo4j v5 中,APOC 被分为核心版和扩展版。如果你使用的是核心版的过程,安装过程没有变化。然而,如果你使用的是扩展版的过程,你需要手动下载并从 GitHub 发布页面复制扩展版。希望这篇博客文章能帮助解决你在 Neo4j v5 中遇到的任何 APOC 问题。

当大多数在线内容变成 AI 生成时会发生什么?

原文:towardsdatascience.com/what-happens-when-most-content-online-becomes-ai-generated-684dde2a150d?source=collection_archive---------9-----------------------#2023-10-17

了解生成模型在训练数据时如何退化,以及如何应对这一问题

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

·

关注 发表在 Towards Data Science ·6 min read·2023 年 10 月 17 日

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

Spiral — 图片来源于 Ludde LorentzUnsplash

引言

最近,生成性 AI 的突破带来了可以生成高度逼真和复杂的文本、图像和声音的公开 AI 模型,这些模型正在彻底改变内容创作。

这些模型是在从互联网抓取的大型数据集上训练的。例如,在文本数据的情况下,像 ChatGPT 这样的高级语言模型(LLMs)主要是在在线找到的人类生成文本上进行训练的。

生成模型已经在社会上获得了广泛的声誉和快速的采纳,以至于越来越多的 AI 生成内容出现在互联网上,而这正是它们训练数据的主要来源。

我们在这里看到一个循环:生成模型将不可避免地在由生成 AI 而非人类生成的合成数据上进行训练。这就引出了一个问题:如果发生这种情况,模型会有什么表现?

生成模型与退化

一旦大型语言模型(LLMs)贡献了大量在线语言内容,GPT-{n}会发生什么?

这是一个由一组研究人员提出的问题,他们发表了论文 递归的诅咒:在生成的数据上训练使模型遗忘(I. Shumailov 等,2023)。

作者们通过让模型在生成的数据上进行多次迭代学习进行实验。他们将此应用于高斯混合模型(GMMs)、变分自编码器(VAE)和大型语言模型(LLMs)。对于这三种模型,这导致了他们称之为“模型崩溃”的现象:

一种退化过程,其中,随着时间的推移,即使在分布未发生变化的情况下,模型也会遗忘真实的基础数据分布。

模型崩溃 描述了模型遗忘真实分布的尾部(即不太可能、较少见但重要的事件)并过度代表分布中心的行为。随着这一过程的重复,模型会收敛到一个与原始分布相似度很低的分布。

在论文 自我消耗的生成模型会变得 MAD(S. Alemohammad 等,2023)中,其他研究人员类似地将这种逐渐远离原始分布的现象描述为“模型自噬紊乱”(MAD):

[…] 如果每次生成中没有足够的新鲜真实数据,未来的生成模型注定会陷入模型自噬紊乱(MAD),即它们的质量(以精确度衡量)或多样性(以召回率衡量)将逐渐退化。

结论很明确:当生成模型主要在它们生成的内容上进行训练时,它们往往会退化。考虑到它们的训练数据主要来自互联网,这种退化过程代表了多大的风险?

当人类生成的内容变得稀缺时

如果人类生成的内容与 AI 生成的内容的比例保持在目前的水平,并且在线内容中人类生成的内容占据明显多数,那么情况不应令人担忧,生成模型的表现也不应出现前述的退化问题。

然而,关于由 AI 生成的内容主导互联网的前景,确实存在合理的担忧。如果我们关注文本生成,支持这种预测的主要论点是 LLMs,如 GPT 提供的便利。这些工具在写作中解决了真正的痛点:找到合适的词汇、改善风格、获得灵感。那些尝试过这些工具的人可以证明,依赖这些工具是多么具有诱惑力和成瘾性:既然我们可以轻松地提示 LLM 生成在风格和时间效率上都更好的内容,为什么要挣扎呢?

如果人类生成的内容变得不那么普遍,我们可以采取什么措施来减轻将生成模型暴露于 AI 生成内容的风险?一种可能的方法是通过鼓励没有 AI 工具的内容创作来对抗这种趋势。另一种方法涉及开发检测 AI 生成数据的方法,并在模型训练过程中将其筛选出去。

第一个方法的想法是找到激励创作者减少使用生成模型的方式。然而,这种方法的可行性可能有限。即使我们能找到这样的激励措施(例如奖励或惩罚),挑战在于验证一段内容是否真正是人类生成的。这将我们引向第二种方法,这种方法也依赖于区分人类生成和 AI 生成数据的能力。

如何检测 AI 生成的数据

在 2023 年,公司 AI21 Labs 领导了迄今为止最大的图灵测试:超过 150 万用户与人类或 AI 聊天机器人进行在线聊天,并被要求猜测他们与谁对话。这一任务被证明并非易事,因为 68% 的人猜对了,显示了生成型 AI 能多么好地模仿人类。

有鉴于此,让我们回顾一些识别 AI 生成数据的可用技术。

水印

文献中讨论的主要方法来区分人类生成的数据和 AI 生成的数据是水印。水印是将隐藏的信号添加到数据中,这些信号对人类不可见但算法能够检测到。

水印将使检测 AI 生成的数据变得容易,但前提是生成型 AI 提供者将其添加到他们的产品中。目前情况并非如此,并且可能过于乐观地期望近期能实现。

在他的公开信《水印不可行》中,Andrew Ng 对水印的采用持悲观态度。他解释了在当前的生成 AI 竞赛中,水印如何看起来像是 AI 公司的一种竞争劣势。

使用 ML 分类器

一种替代水印的方法是训练一个机器学习分类器,让其学习标记内容是 AI 生成还是人类生成。

执行此任务的系统已经存在,例如 GPTzero。然而,这些系统显示出较高的错误率,并且未能提供可靠的解决方案。即使是机器学习模型,检测 AI 生成的数据也证明是一项困难的任务。

一种零样本方法

论文 DetectGPT: Zero-Shot Machine-Generated Text Detection using Probability Curvature(E. Mitchell 等,2023)中讨论的另一种方法不需要任何训练,基于观察 LLMs 对数概率函数的曲率。

作者发现的标准是,AI 生成的文本往往倾向于占据具有负对数概率曲率的区域,而不是人类撰写的文本。

这似乎是一种有前景的技术,尽管我们可能对其可扩展性存有疑虑:它不是模型无关的(它检测内容是否由特定的 LLM 生成,而不是任何给定的 LLM),并且需要访问模型的对数概率。

结论

我们了解到,训练生成模型时使用人类生成的数据非常重要,以避免性能下降。这带来了一个重大挑战,特别是因为互联网是它们主要的训练数据来源,并且越来越多的在线内容是 AI 生成的。

有两种方法可以解决这个问题:通过推动人类内容创作来扭转趋势,以及防止模型在合成数据上进行训练。然而,这两种解决方案都引发了复杂的开放性问题。我们如何激励在线内容创作者减少对 AI 的依赖?我们如何建立可靠、可扩展的 AI 生成内容检测方法?

令人鼓舞的是,白宫在 2023 年 7 月做出了一个重要的 声明。七家主要的 AI 公司——亚马逊、Anthropic、谷歌、Inflection、Meta、微软和 OpenAI——同意尊重一系列负责任的 AI 承诺,其中包括水印。未来将揭示这些承诺是否得到遵守。

进一步阅读

我作为数据分析师保持相关性的做法

原文:towardsdatascience.com/what-i-am-doing-to-stay-relevant-as-a-data-analyst-af15d714ac58

如何在竞争激烈的职业市场中导航职业发展

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

·发表于 Towards Data Science ·7 分钟阅读·2023 年 5 月 5 日

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

Jonathan Chng 拍摄,来源于 Unsplash

技术和数据的世界不断发展,对数据专业人士的需求也在增长。数据相关的工作处于职业网站的前沿。数据分析师是一个不断增长的职业,薪酬优厚,对组织具有巨大价值,并承诺在数据生命周期内拥有平衡的工作内容。

我大约两年前开始担任医疗数据分析师,并逐步晋升为分析和报告顾问,使用我所在组织广泛使用的多个工具和平台。现在,我每天积累关于公司内特定产品的知识,努力做到卓越,却不知道这些工具和技术是否是当前行业中广泛使用的。它也让我时常怀疑,如果我开始寻找新的工作,我的技能是否仍然相关和适用。

从我在公司中看到的,以及听到的同行和网络讨论,我发现数据分析师在劳动力市场中的需求和供应都很旺盛。随着数据分析师和类似专业人士的涌入,我希望能保持敏捷和竞争力(至少为了保住我的工作),以下是我为保持相关性并脱颖而出的做法。

1. 从工作之外进行数据项目

我已明确不将职业成长和发展限制于日常工作。参与 9-5 工作之外的项目让我能够在主要工作之外提升技能,作为专业人士不断进步,并发展我处理各种问题陈述的思维方式。

对某些人来说,从事工作之外的项目可能是一个激情项目、创造机会,或只是拓展网络。例如,你可以 —

  • 参与研究项目并发表论文 — 你可以联系大学的教授(或你的母校),与研究生合作,进行从头到尾的项目,并获得明确的成果。

  • 写下你的学习和工作经验 — 基本上,就是博客/视频日志记录你的数据之旅。我在 2017 年开始写博客,这成为了保持更新世界和获得曝光的最有效方式之一。

  • 在技术社区活动或会议上做演讲 — 很多专业人士在技术技能方面表现出色,但在沟通技能上有所欠缺。在社区活动或会议上做演讲是了解观众的一种最佳方式,使你的工作适合各种知识水平的人群。你可以从小规模的演讲开始,逐步发展到更大的观众。这将帮助你保持更新,并让你的工作保持相关性。

这里的目标是通过新的技能来提升你的作品集,扩展你的网络和经验,以便在工作中加以利用。

2. 完成在线认证或微硕士学位

学习永无止境,无论你多年轻或多老。

我喜欢投资时间和金钱于在线认证,因为它需要更少的时间来在非常具体的主题领域内发展知识或技能。比如,你发现 Alteryx 是一个对你和你的团队有奇妙效果的工具,你想要具备工作知识,你会去哪里?互联网是当今社会的支柱,而在线认证可以很好地完成这项工作。

我最近发现了许多提供在线微硕士课程的顶级大学,你可以按照自己的节奏学习一年或更短的时间,并获得来自知名学校的微硕士学位,这为你打开了学校的网络、学习资料和教授。

这里的目标是提升你的生产力和成长,从而也增加你对雇主的价值。

你还可以探索在线认证,以便与你希望从事的职位对齐,或获得长期等待的晋升。

3. 与初创公司或新兴科技公司合作

咨询是我喜欢花时间做的事情之一 — 创建策略,从模糊或大型问题陈述中构想解决方案,并提供基于数据的可操作见解。这就像看着你在冬天种下的种子在夏天长成植物一样。这个过程需要时间和耐心,但结果 — aaaah!

在开始工作之后,我很幸运地结识了合适的人,这些人给了我机会,使我能够主要与医疗保健领域的初创公司交流,并与他们一起从零开始构建。首先,以下是如何建立联系的步骤 —

  • LinkedIn始终是寻找初创企业和创始人的好主意——与志同道合的人或具有类似或你梦想职业路径的专业人士建立联系,看看他们今天在做什么。

  • 参加社区活动——这是扩展网络和寻求新机会的最相关方法之一。

  • 安排咖啡聊天与那些让你感兴趣的人——来自Twitter、你的导师或旧工作的朋友,这些对话可能最终会变成一个顾问工作机会。

作为顾问,你可以从外部审视的角度来改进初创企业的潜在客户生成、战略、风险和评估方面,充当一个枢纽。通过公开曝光(如 Medium 博客),你可以为人们找到你打开了大门,而你永远不知道——这可能会引发与未来独角兽的激动人心的合作对话 😉

这里的目标是,首先,将自己展现出来,与那些你可以共同成长的人建立联系。

4. 与跨职能团队合作

许多组织允许专业人士参与次要项目,这正是你与新人员合作、分享知识、倾听新对话、尝试新工具和技术的信号。如果没有,至少要保持开放的心态去建立网络;坐下来向组织内的各个项目介绍自己,然后为你的团队进行基准测试并在内部引入创新。

过去,一次随机的 Teams 聊天让我有机会进行几次卓越的咖啡聊天,并能够向其他团队推荐数据策略——这只需要在公司内找到你喜欢的工作成果的人,并发送一条简短的信息或邮件。

这里的目标是拓宽你的视野,并感受到与更大愿景的连接。

每天,你的 9–5 工作时间表或多或少都遵循类似的结构。但令人兴奋的地方在于认识具有不同技能、责任和学科的人,并从中学习。

5. 探索世界提供的机会

对我来说,参与工作之外的内容和对话使我能够不断学习新知识并保持技能的更新。整天忙碌,你可能没有意识到世界随着新工具、新技术、新思维、商业语法等的变化有多快。

我们不知道我们不知道的事情。

  1. 阅读博客和新闻通讯:阅读世界上要说的内容。你阅读得越多,就越有可能记住单词、想法和短语,并将其应用于你下一个工作项目中。在与初创企业创始人的对话中,我听他说过“数据专业人士只能和他们的数据一样好”,因此现在,每当工作中有流程或准确性改进的对话时,我都会把这句话抛出来,以提高利益相关者的认识和支持。

  2. 听播客:虽然与数据相关的播客可能不多,但关于个人品牌创建、自我重塑、微习惯等的播客会有很多,这些都能塑造你。

    我从去年一个名为Take A Pause(现在已经成为一种习惯)的播客中得到的最大收获之一——记录你的每周工作情况。今天,我会记录下工作周、每日的小胜利和亮点、我如何为团队和组织增值,这些小笔记甚至对年终评估非常有价值。

  3. 加入技术/数据社区: 依然是与拥有共同兴趣、技能和目标的人网络联系的最佳方式之一。

  4. 与同事和联系的人社交: 安排与工作中的同事喝咖啡,发送冷邮件请求讲解你喜欢的新工具。基本上,建立有意义的关系 (这是一个互惠互利的过程),这在长期中能为你的职业生活增值。

目标是了解并适应数据领域的最新和最伟大的事物(无论是什么最适合你的角色),并与志同道合的人联系,学习一些东西。

就我来说,这篇博客就到这里。感谢阅读!希望你觉得这篇文章有趣。请在评论中告诉我你在数据领域的经历和旅程,以及你在 2023 年的期望!

如果你喜欢阅读这样的故事,可以通过这个 链接** 注册成为 Medium 会员**。

数据快乐露营!

Rashi 是一位来自芝加哥的数据达人,喜欢可视化数据并创建洞察故事来传达见解。她是一名全职的医疗数据分析师,并在周末用一杯好咖啡写关于数据的博客……

作为数据科学家,经过一年 AB 测试后我学到的东西 — 第 1/2 部分

原文:towardsdatascience.com/what-i-learned-after-running-ab-tests-for-one-year-as-a-data-scientist-part-1-2-5277911e89ec?source=collection_archive---------9-----------------------#2023-01-03

按照这些简单步骤像数据科学家一样设置你的 A/B 测试

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

·

关注 发表在 Towards Data Science ·13 min read·2023 年 1 月 3 日

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

Nathan Dumlao 拍摄于 Unsplash

数据科学家工作的一大部分是测量差异。更具体地说,是比较产品或服务的不同版本,并确定哪个表现更好。这是通过随机对照试验 (RCT) 或其更高级的商业名称A/B 测试来完成的。

思路非常简单。我们想要改进一个特定的 KPI,比如结账页面的转化率。然后我们假设某些变化可能对我们的 KPI 产生积极影响。例如,我们可能想测试将结账按钮的颜色从灰色改为绿色。然后,我们将随机分配结账页面的访客,一半看到当前版本(灰色按钮),另一半看到新版本(绿色按钮)。当前版本和新版本的术语分别为控制处理。作为数据科学家,我们的工作是测量两个版本之间的转化率差异,并确定这是否具有统计显著性或仅仅是运气(随机变异)。

在这个系列中,我将带你全面了解 A/B 测试的整个过程,从设计实验到分析和展示结果。案例研究旨在模拟在现实环境中进行 A/B 测试时遇到的挑战,同时涵盖数据科学面试中常见的关键问题。指南将分为以下两部分:

第一部分

  • 思路: 商业案例研究概述

  • 设计测试: 选择目标人群和关注的 KPI

  • 测试前分析: 使用功效和模拟来估计样本量

第二部分:AB 测试分析

  • EDA: 合理性检查,时间序列可视化

  • 分析实验结果: P 值、置信区间、自助法等。

1. 思路

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

照片由 Riccardo Annandale 提供,来源于 Unsplash

对于我们的案例研究,假设一个电商零售商在英国销售巴西咖啡豆。每周五,公司提供每消费 50 英镑减 10 英镑的优惠。一个产品经理一直在尝试提高促销效果,并通过研究提出了一个想法。如果我们将优惠的描述改为百分比折扣,那么每消费 50 英镑将获得 20%的折扣。思路是 20 比 10 高,所以客户可能会认为同样的优惠具有更高的价值(尽管 20%和 10 英镑折扣是相同的交易)。

这时我们的主角登场了。对这个想法非常兴奋的产品经理安排了一次与公司数据科学家的电话会议,并向他讲解了这个想法。我们的数据科学家对 A/B 测试并不陌生,因为他过去多次帮助业务利益相关者做出这样的决策。于是,我们的旅程开始了。

2. 设计测试

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

图片由 Alex wongUnsplash 提供

目标人群

在进一步进行之前,重要的是明确我们实验的目标人群。在我们的例子中,就是任何在星期五(即优惠活动上线时)访问网站的人。这是一个重要的区别。如果用户在星期一访问了网站,那么将他们纳入实验没有意义,因为他们不会受到优惠活动变化的影响。

按照这个逻辑,你可能还会问是否适合包括所有星期五的访问者。优惠可能并非在所有页面上都有展示,因此只应包括访问了有优惠展示的页面的用户。你说得对。对于我们的案例研究,我们假设优惠是在网站每个页面顶部的横幅(如下所示),以简化问题。

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

为 A/B 测试设计两个版本 [图片来源:作者]

选择感兴趣的 KPI

无论实验的想法是来自 CEO 还是初级分析师,明确 KPIs 的需求总是存在的。但是为什么会这样呢?我们为什么不能先进行实验,然后查看所有可能受到影响的指标?

除了影响效率之外,还有另一个理由需要在开始测试之前定义我们的 KPI。为了估算(关键词)进行准确推断所需的样本量,我们还必须了解 KPI 的方差。一个波动性较大的指标,如平均支出,可能会偏斜,并具有更高的方差和异常值,因此需要比对称正态分布指标更高的样本量。

好的,让我们开始正式工作。对于我们的实验,我们关注两个 KPI。两者都在访客层面,并且与我们期望的新版本的效果有合理的关联。更多的访客兑换优惠(即更高的 ATPV),而不降低他们的整体支出(更高的 ARPV 或至少对 ARPV 没有负面影响)。

每访客平均收入 (ARPV): 总收入 / 总访客数

每访客平均交易数 (ATPV): 总交易数 / 总访客数

时间窗口

你可能已经注意到,周五没有出现在任何一个指标的公式中。这是因为如果周五的访客支出减少会影响到其他日期的销售,从而导致每周或每月支出保持不变,我们并不关心在周五增加访客支出。我们真正关心的是在设定的时间窗口内逐步增加他们的整体交易量和支出。

由于大多数公司每月报告其关键 KPI,我们也将以 28 天为窗口报告我们的两个 KPI(其他公司可能按周或每两周运营,因此 7 天或 14 天的 KPI 可能更合适):

  • 每个访客在测试上线后第一次访问网站的周五进入实验。这将是他们的第 1 天。

  • 接下来,我们收集接下来的 27 天的数据,从而获得每个访客的 28 天 KPI。

  • 因此,28 天 ARPV 将是访客进入测试后的 28 天内收入总和,除以访客数量。

  • 仅包括在测试中待满 28 天的访客(不是所有访客,因为我们希望给每个人相同的购买时间窗口)。

  • 28 天窗口还确保没有新奇效应(访客对变化最初感到兴奋,但这种兴奋在一两周后很快消退)。

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

KPI 的 28 天窗口示例 [由作者提供的图片]

这些都是面试中需要覆盖的重要点。展示你对总体情况的理解,以及用户进入测试的漏斗的哪个部分(是所有页面还是特定页面)。最后,始终将其与业务需求联系起来。解释清晰地与利益相关者沟通定义 KPI 的必要性,以及你如何设计实验以使其成为资产!

3. 预测试分析

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

图片来源于 AbsolutVisionUnsplash

这就是令人兴奋的部分开始的地方。我们在这一部分的主要目标是估计所需的样本量,以准确推断我们的两个 KPI。这部分被称为功效分析。功效分析 允许我们在给定以下三个量的情况下估计所需的样本量:

  1. 效应大小

  2. 显著性水平 = P(I 型错误)= 发现实际上不存在的效应的概率

  3. 功效 = 1 — P(II 型错误)= 发现实际上存在的效应的概率

我们将显著性水平设定为 5%,功效设定为 80%(我们将在第二部分中详细讨论这些概念)。然后我们只需要计算效应量来获得所需的样本量。幸运的是,Cohen 1988 为我们提供了在比较两个均值时计算效应量的公式(我还添加了比例的公式,因为它是一个常选的 KPI,例如付款率等)。

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

Cohen 1988 提供的效应量公式 [作者提供的图片]

但我们仍未脱离困境。我们需要找出当前版本和新版本的均值及其标准差。由于我们不知道我们的 KPI 在未来会如何表现,我们可以查看历史数据以找到这些数字(作为我们对测试上线时期望结果的最佳估计)。因此,我们将回溯两个月,假设我们当时开始了实验。然后我们将计算 28 天 ARPV 和 28 天 ATPV。这为 20000 名访问者提供了数据(这些用户至少在测试中待了 28 天)。

##########################################
# Load Libraries
##########################################
library("ggplot2")
library("dplyr")
library("scales")
library("patchwork")

#############
# ARPV
#############
# Plot
revenue_plot <- 
  dataset %>%
  ggplot(aes(revenue)) +                          
  geom_histogram(fill ="turquoise3", colour = "white", binwidth = 2, boundary = 0) +
  scale_x_continuous(breaks = seq(0, max(dataset$revenue), 14) ) +
  ylab("No of Visitors") +
  xlab("28-day Revenue (each bar is £2)") +
  ggtitle("Histogram of 28-day Revenue") +
  theme_classic()

# Statistics
dataset %>% select(revenue) %>% summary()
dataset %>% summarise(sqr_rt = sd(revenue))

#############
# ATPV
#############
# Plot
transactions_plot <- 
  dataset %>%
  ggplot(aes(x = transactions)) +                          
  geom_bar(fill ="turquoise3", colour = "white") +
  scale_x_continuous(breaks = seq(0, max(dataset$transactions), 1) ) +
  ylab("No of Visitors") +
  xlab("28-day Transactions") +
  ggtitle("Histogram of 28-day Transactions") +
  theme_classic()

# Statistics
dataset %>% select(transactions) %>% summary()
dataset %>% summarise(sqr_rt = sd(transactions))

#################
# Output plot
#################
revenue_plot + transactions_plot

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

历史收入和交易的直方图 [作者提供的图片]

从这些数据中,我们可以初步了解我们两个 KPI 的分布——从上述图表中可以看出,一半的用户(10000 人)在 28 天窗口期内没有进行任何购买(没有收入和交易)。我们还可以计算当前版本的均值(ARPV 和 ATPV)以及效应量公式的标准差。然而,我们仍然缺少新版本的均值数据。由于我们没有关于新版本表现的数据,这一点尚不可知。不过,我们可以声明我们感兴趣的最小可检测效应(MDE),在我们的情况下为 5%的差异。然后我们可以计算新版本的均值为当前版本增加 5%。

##########################################
# Load Libraries
##########################################
library("pwr")

##########################################
# Cohen's power for ARPV
##########################################
std_arpv <- dataset %>% summarise(std = sd(revenue))
arpv_current_vers <- dataset %>% summarise(avg = mean(revenue))
arpv_new_vers <- arpv_current_vers * 1.05
effect_size_arpv <- as.numeric(abs(arpv_current_vers - arpv_new_vers)/std_arpv)

pwr_results_arpv <- pwr.t.test(
  d = effect_size_arpv, 
  sig.level = 0.05, 
  power = 0.8, 
  type = c("two.sample")
  )
plot(pwr_results_arpv)
pwr_results_arpv

##########################################
#Cohen's power for ATPV
##########################################
std_atpv <- dataset %>% summarise(std = sd(transactions))
atpv_current_vers <- dataset %>% summarise(avg = mean(transactions))
atpv_new_vers <- atpv_current_vers * 1.05
effect_size_atpv <- as.numeric(abs(atpv_current_vers - atpv_new_vers)/std_atpv)

pwr_results_atpv <- pwr.t.test(
  d = effect_size_atpv, 
  sig.level = 0.05, 
  power = 0.8, 
  type = c("two.sample")
  )
plot(pwr_results_atpv)
pwr_results_atpv

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

ARPV的功效图 [作者提供的图片]

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

ATPV的功效图 [作者提供的图片]

从上述内容来看,我们估算 ARPV 和 ATPV 的样本量分别为 6464 和 7279。这些估算指的是控制组和处理组的样本量,因此总共我们需要大约 14000 名访问者的样本。

好奇的读者可能已经注意到,功效计算是基于我们将使用双样本 t 检验进行分析的假设,并向后推导,以给出对于给定效应大小、显著水平和功效所需要的样本量。但该技术有一些假设。特别是,它假设我们的数据大致遵循正态分布(即大致对称且围绕平均值中心)。通过观察直方图,可以清楚地看到营收和交易数据明显不同。这可能仍然可以,因为中心极限定理。我们将在第二部分详细介绍 CLT,但一般来说,具有足够样本量时,违背正态分布并不会导致问题(数据越倾斜和非对称,我们需要的样本量越大)。尽管如此,我还想估计无需假设即可估计所需样本量的方法,即使用非参数方法。

另一种方法是使用历史数据并生成给定大小的 2000 个样本。因此,我们可以从 20000 个观察值中模拟出 100 个大小的 2000 个随机样本。在这些样本中的每一个中,我们然后可以随机将一半用户分配到对照组,另一半用户分配到实验组,并计算指标之间的差异。最后,我们可以在 ARPV 和 ATPV 的差异的 2000 个 95%区间(从第 0.025 到第 0.975 分位数)中可视化,并了解 KPI 的可变性。通过尝试不同的样本量,我们可以找到我们的 MDE 所需的样本量。因此,让我们创建我们将用于模拟样本的函数。

##########################################
# Load Libraries
##########################################
library("caret")

##########################################
# Function for Simulation
##########################################
simulating_sample_size <-
  function(dataset, iterations, sample_sizes_vector, kpi) {

    n <- iterations
    output_df <- data.frame(NULL)

    for (j in sample_sizes_vector) {
      # create 2,000 samples for sample size j
      sampling_df <- data.frame(NULL)
      for (i in 1:n) {
        sampling_temporary <-
          data.frame(kpi = sample(dataset[[kpi]], j, replace = TRUE))
        trainIndex <-
          createDataPartition(
            sampling_temporary$kpi,
            p = 0.5,
            list = FALSE,
            times = 1
          )
        ## split into control and treatment
        sampling_df[i, 1] <- mean(sampling_temporary[trainIndex,])
        sampling_df[i, 2] <- mean(sampling_temporary[-trainIndex,])
        }

      # compute aggregates for sample size j
      # and union with old entries
      output_df <- output_df %>%
        union_all(
          .,
          sampling_df %>%
            mutate(diff = round((V2 - V1) / V1, 2)) %>%
            summarize(
              trim_0.05_diff = round(quantile(diff, c(0.025)),2),
              trim_0.95_diff = round(quantile(diff, c(0.975)),2),
              mean_0.05_abs = round(mean(V1),2),
              mean_0.95_abs = round(mean(V2),2)
            ) %>%
            mutate(iter = j)
        )
    }

    return(output_df)
}

我们现在可以使用我们的函数从我们的历史数据中生成给定大小的样本。我们将使用 500、1000、2000、3000、4000、10000、15000 和 20000 的样本量,并生成每个大小的 2000 个样本。

##########################################
# ARPV simulation
##########################################
simulation_arpv <- 
  simulating_sample_size (
    dataset = dataset,
    iterations = 2000,
    sample_sizes_vector = c(500,1000,2000,3000,4000, 10000, 15000, 20000),
    kpi = "revenue"
)

##########################################
# ATPV simulation
##########################################
simulation_atpv <- 
  simulating_sample_size (
    dataset = dataset,
    iterations = 2000,
    sample_sizes_vector = c(500,1000,2000,3000,4000, 10000, 15000, 20000),
    kpi = "transactions"
)
##########################################
# Plot ARPV from simulations
##########################################
arpv_sim_plot <- simulation_arpv %>%  
  ggplot(aes(x = as.factor(iter), y = trim_0.05_diff )) +                          
  geom_col(aes(y = trim_0.05_diff ), fill="turquoise3", alpha=0.9,width = 0.5) +
  geom_text(aes(label = scales::percent(trim_0.05_diff)), vjust = -0.5, size = 5) +
  geom_col(aes(y = trim_0.95_diff ), fill="turquoise3", alpha=0.9,width = 0.5) +
  geom_text(
    aes(x = as.factor(iter), y = trim_0.95_diff,  label = scales::percent(trim_0.95_diff)),
    vjust = -0.5, size = 5
  ) +
  scale_y_continuous(labels = scales::percent) +
  ylab("% Difference in ARPV") +
  xlab("Sample size") +
  theme_classic() +
  geom_hline(yintercept= 0, linetype="dashed", color = "red")

##########################################
# Plot ATPV from simulations
##########################################
atpv_sim_plot <- simulation_atpv %>%  
  ggplot(aes(x = as.factor(iter), y = trim_0.05_diff )) +                          
  geom_col(aes(y = trim_0.05_diff ), fill="turquoise3", alpha=0.9,width = 0.5) +
  geom_text(aes(label = scales::percent(trim_0.05_diff)), vjust = -0.5, size = 5) +
  geom_col(aes(y = trim_0.95_diff ), fill="turquoise3", alpha=0.9,width = 0.5) +
  geom_text(
    aes(x = as.factor(iter), y = trim_0.95_diff,  label = scales::percent(trim_0.95_diff)),
    vjust = -0.5, size = 5
  ) +
  scale_y_continuous(labels = scales::percent) +
  ylab("% Difference in ATPV") +
  xlab("Sample size") +
  theme_classic() +
  geom_hline(yintercept= 0, linetype="dashed", color = "red")

#################
# Output plot
#################
 (arpv_sim_plot + coord_flip()) + (atpv_sim_plot + coord_flip())

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

模拟不同大小的 2000 个样本中的指标变化[作者提供的图片]

上述结果与我们的功效分析的结果相吻合。看一个样本量为 15000,两个 KPI 的 95%区间在-2%和 2%变化之间。所以如果我们取一个 15000 的样本,并将 7500 分配给对照组和实验组,我们期望在没有差异的情况下,具有四个百分点的变异性(从-2%到 2%)。因此,如果新版本的提升为 5%,我们预计 15000 个样本会返回 3%至 7%的结果(5%-2% = 3%,5% + 2% = 7%)。

摘要

通过最后一步,我们已经准备好启动我们的RCT 实验了!让我们总结一下我们的现状:

✅ 我们定义了测试的两个版本

✅ 我们将人口定义为星期五的所有访问者

✅ 一旦访问者进入测试,他们将被随机分成对照组和实验组(50% — 50%)

✅ 我们定义了我们感兴趣的两个 KPI:28 天 ARPV 和 28 天 ATPV

✅ 我们使用功效分析和模拟估算了实验的样本量为 15000(对照组和处理组各 7500)。

在本系列的下一篇文章中,我们将深入探讨如何分析 A/B 测试的结果。如果你想自己动手操作数据,可以查看下面我用来生成 20000 个观察值的数据集的代码。

set.seed(15)

##########################################
# Create normal skewed ARPV attribute
##########################################
sigma = 0.6
mu = 2
delta = 1
samples = 10000
revenue <- rnorm(samples, rlnorm(samples, mu, sigma) , delta)
revenue <- revenue + 40

##########################################
# Create normal symmetric ATPV attribute
##########################################
transactions <- round(rnorm(10000, 2, 0.5),0)

##########################################
# Create data set with both attributes
##########################################
dataset <- 
  data.frame(revenue, transactions) %>%
  # fixing records with 0 or negative atpv but positive arpv
  mutate(transactions = case_when(transactions <= 0 & revenue > 0 ~ 1 , TRUE ~ transactions)) %>%
  # adding non purchasing visitors
  union_all(., data.frame(revenue = rep(0,10000), transactions = rep(0,10000)))

summary(dataset)

保持联系

如果你喜欢阅读这篇文章并想了解更多,不要忘记订阅以便直接将我的故事发送到你的收件箱。

在下面的链接中,你还可以找到一个免费的 PDF 指南,讲解如何在实际业务场景中使用数据科学技术和最佳实践在 R 中完成客户集群分析。

## 数据科学项目清单 - 渴望成为数据科学家

我是一名拥有 7 年以上分析经验的数据科学家,目前在英国伦敦的一家游戏公司工作。我的……

www.aspiringdatascientist.net

我作为数据科学家在进行了一年的 AB 测试后学到的东西——第二部分/2

原文:towardsdatascience.com/what-i-learned-after-running-ab-tests-for-one-year-as-a-data-scientist-part-2-2-4b30118fec26?source=collection_archive---------9-----------------------#2023-01-11

关于数据科学家如何处理和分析 AB 测试结果的真实案例研究

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

·

关注 发布于 Towards Data Science ·10 分钟阅读·2023 年 1 月 11 日

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

图片由 Luca Bravo 提供,来源于 Unsplash

介绍

欢迎来到本系列的第二部分也是最后一部分!在 第一部分 中,我们讨论了实验设计和样本大小估算。在本部分中,我们将重点关注分析 AB 测试所需的知识和技能。这是数据科学家在业务中提供价值的核心。我们不再根据主观信念做决策,而是依靠数据和统计测试来引导公司朝着正确的方向前进。

第二部分

  • 理解基础知识: 制定测试假设并探索 I 型和 II 型错误

  • 探索性数据分析(EDA): 招募进入测试、时间趋势和 KPI 的分布

  • 分析 AB 测试结果: 解释中心极限定理、p 值、置信区间,并进行参数和非参数自助法

我们将继续使用第一部分的案例研究。你可以在下面的链接中探索 AB 测试的两个版本和 KPI 的选择 👇

## 我作为数据科学家运行 AB 测试一年后学到的东西 — 第 1/2 部分

通过以下这些简单步骤,像数据科学家一样设置你的 A/B 测试

towardsdatascience.com

1. 理解基础知识

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

图片由 Stefan Steinbauer 提供,来源于 Unsplash

制定假设

在每个统计测试中,都有一个初始假设替代假设。初始假设认为我们的两个 KPI 在控制组(£10 折扣)和处理组(20%折扣)之间没有差异,而替代假设认为存在显著差异。初始假设通常被称为零假设,因为它代表了默认或“正常”的状态(即没有差异)。

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

为我们的两个 KPI 制定初始假设和替代假设 [作者提供的图片]

数据科学面试中的一个棘手问题是如何表达你在这些假设中的目标。我们要么拒绝初始假设,要么无法拒绝初始假设。我们永远不能接受它。至于你如何向利益相关者传达结果,这不会有什么不同。但是对于数据科学家来说,这将有所不同!

让我们看看黑天鹅的例子。想象一个世界,我们只见过白天鹅。我们永远无法接受初始假设,即没有黑天鹅。我们可以收集无限的数据,但仍可能错过那只黑天鹅。因此,我们可以未能拒绝假设所有天鹅都是白色的但永远无法接受它!另一方面,如果我们看到一只黑天鹅,我们总是可以拒绝初始假设。现在,虽然黑天鹅代表罕见事件,我们在商业场景中几乎不会尝试测量(最小可检测效应,MDE,通常设为 2%),但这仍然是理解我们如何作为数据科学家进行 AB 测试的一个有用方式。

类型 I 和类型 II 错误

好吧,我们有了初始假设和备择假设,我们可以拒绝或未能拒绝初始假设。这会转化为下表中所示的四种可能性。

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

类型 I 和类型 II 错误 [作者提供的图片]

使用我们从实验中收集的数据,我们将要么接受(你看,我说的没错,记住是未能拒绝),要么拒绝零假设。但没有任何方法论是完美的,也就是说,不可能完全消除假阳性和假阴性(如上图中的红色框)。用 Neyman 和 Pearson(1933 年)的话说:

我们倾向于认为,就某个特定假设而言,基于概率理论的任何测试本身都无法提供关于该假设真伪的有价值证据

这听起来不太有希望,对吧?幸运的是,他们继续补充道:

但我们可以从另一个角度来看待测试的目的。我们不必希望知道每个独立假设的真伪,而可以寻找规则来指导我们对这些假设的行为,从而确保在长期经验中,我们不会过于频繁地犯错

上述内容是一个重要的理解点。在统计学中,我们不处理确定性。我们永远无法以 100%确定性做出推断。然而,我们拥有统计工具(如 p 值和置信区间,稍后会详细介绍),可以帮助我们做出决策。决策或规则,如果你愿意说是规则,长期来看会给我们一定的(可接受的)类型 I 或类型 II 错误概率。

类型 I 错误

  • 当我们得出存在差异的结论,即使实际上不存在时,这种情况就会发生。换句话说,即使零假设为真,我们仍然拒绝它。

  • 这种错误的概率称为测试的显著性水平,用希腊字母α表示。测试的显著性水平通常设置为 5%。

类型 II 错误

  • 当我们得出没有差异的结论,即使实际上存在差异时,这种情况就会发生。换句话说,即使零假设是错误的,我们仍未能拒绝它。

  • 这种错误的概率用希腊字母 β 表示。该概率的补充概率 (1 — β) 称为测试的 效能,通常设定为 80%

2. 探索性数据分析(EDA)

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

照片由 Scott Webb 提供,来源于 Unsplash

尽管所有主要框架中都包含这一部分,但这是最常被匆忙完成或完全跳过的步骤。然而,进行 EDA 确实有实际好处,因为它回答了我们在开始分析结果之前需要知道的重要问题。

测试中的招募

在这一部分,我们只是想检查是否在控制组和处理组之间分配访客时没有出现问题:

  • 招募仅发生在我们预定的星期五,控制组和处理组的访客招募量相同

  • 大多数访客在第一次星期五进入测试,然后招募数量下降。这是一个众所周知的趋势。最活跃的(现有)访客会立即被招募,然后在两到三周后,我们将主要招募新访客

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

按变体划分的测试访客招募 [作者提供的图片]

时间序列

接下来,我们想检查一下我们关注的关键绩效指标(KPI)是否存在任何趋势或季节性变化。让我们看下面的图表,它展示了平均每日收入(作为 28 天 ARPV 的代理):

  • 两个版本之间没有测试前的差异。如果两个版本在测试开始前的几周有所不同,我们需要调整测试期内的 KPI,以纠正任何测试前的偏差

  • 该指标波动性不大(日常波动不极端)

  • 自从我们启动测试以来,每个星期五处理组的表现都高于控制组(明显的峰值)。随着时间的推移,提升效果在增加(最后两个星期五的提升效果最高)

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

平均每日收入的时间序列 [作者提供的图片]

分布

最后,我们想检查控制组和处理组的分布情况:

  • 查看收入,没有极端异常值

  • 我们可以清楚地看到处理组收入的第三个峰值(在£70 到£90 之间)。第一个峰值为£0,第二个为£50

  • 处理组的 ARPV 比控制组高 19%(上涨了£4.70,£29.2–£24.5)

  • 查看 ATPV,处理组也有明显的提升(更多访客进行 3 或 4 次交易)

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

按变体划分的 ARPV 和 ATPV 分布 [作者提供的图片]

3. 分析 AB 测试结果

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

图片由 Tim Stief 提供,来源于 Unsplash

正如你可以想象的那样,如果我们取了相同大小的不同样本,我们会观察到不同的统计数据(ARPV 和 ATPV)。这意味着**(样本)统计量是一个随机变量**。像其他随机变量一样,统计量有一个称为抽样分布的分布。你可以把抽样分布看作是所有可能的统计量值的总体,如果我们从一个大小为 N 的总体中耗尽地抽取所有可能的大小为 n 的样本,并计算每一个样本的统计量。让我们看看抽样分布和自助法如何帮助我们分析 AB 测试的结果。

为什么要使用自助法?

让我们从大多数数据科学面试中的“英雄”——p 值开始。简而言之,p 值是指收集到数据后,让我们相信存在差异的概率,即使实际上没有差异。p 值越低,差异在统计上越显著。这是因为如果实际上没有差异,那么观察到给定的数据集将会更加不可能(仅仅由于运气)。如果 p 值低于我们可接受的统计显著性水平(p 值 < α),我们就会拒绝原假设。

如果你可以将结果写成置信区间而不是 p 值,你应该这样做

置信区间(CIs)可以回答与 p 值相同的问题,其优点在于它们提供了更多的信息,并且更容易解释。如果你想测试两个版本是否具有统计学上的差异,你可以构建一个 95% 的置信区间(1-a%)来查看它们的差异,并检查该区间是否包含零。在这个过程中,你还会额外获得关于你的估计值有多精确的洞察(区间越宽,表示不确定性越高)。

自助法是一种估计统计量抽样分布并计算置信区间的方法

普通自助法,也称为简单自助法,是这种方法的基本版本,也是我们在分析中将使用的方法。它涉及对与原始样本大小相同的样本进行重复抽取(有放回),并计算每一个样本的感兴趣的统计量。然后,我们可以使用所有这些不同的样本(及其相应的统计量)来计算一个 95% 的置信区间。这可以是基于百分位数的非参数方法(在 0.025 和 0.975 百分位之间),或者我们可以采用参数方法计算正态置信区间。我们将两者都进行。

使用自助法置信区间分析 AB 结果

对于我们的目的,我们将使用 boot 包。首先,我们需要创建以下输入:

  • 我们将在 boot 函数中使用的数据集(见下图)

  • 计算每个样本中统计量百分比差异的函数

##########################################
# Create bootstrap datasets
##########################################
boot_revenue <- data.frame(
    dataset %>% 
    filter(variant == "Treatment") %>% 
    select(revenue_treat = revenue_test),
    dataset %>% 
    filter(variant == "Control") %>% 
    select(revenue_contr = revenue_test)
  )

boot_transactions <- data.frame(
    dataset %>% 
    filter(variant == "Treatment") %>% 
    select(transactions_treat = transactions_test),
    dataset %>% 
    filter(variant == "Control") %>% 
    select(transactions_contr = transactions_test)
  )

##########################################
# Create function for bootstrap
##########################################
diff.means <- function(d, i) {    
  results <- 
    (mean(d[i,1]) - mean(d[i,2])) / mean(d[i,2])
  results
}

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

自助法输入数据集概述 [作者提供的图片]

我们将进行 2000 次取样,并分别计算对照组和治疗组之间的 ARPV 和 ATPV 百分比差异的 95%置信区间(使用boot.ci函数,以 boot 函数的结果作为输入)。

##########################################
# Run bootstrap for ARPV
##########################################
boot_results_revenue <- boot(boot_revenue, diff.means, R = 2000)
plot(boot_results_revenue)
boot.ci(
  boot_results_revenue, 
  type = c("norm", "basic", "perc"))

##########################################
# Run bootstrap for ATPV
##########################################
boot_results_transactions <- boot(boot_transactions, diff.means, R = 2000)
plot(boot_results_transactions)
boot.ci(
  boot_results_transactions, 
  type = c("norm", "basic", "perc"))

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

普通自助法的置信区间 [作者提供的图片]

那么我们来解读结果:

  • 治疗组和对照组之间 ARPV 百分比差异的 95%置信区间在 17.7%和 20.6%之间,支持治疗组

  • 治疗组和对照组之间的 ATPV 百分比差异的 95%置信区间在 14.7%和 18%之间,支持治疗组

  • 两者差异显著,因为 95%区间远离零

如果你在想为什么正常的 95%置信区间如此接近非参数百分位区间,有一个非常著名的定理可以提供一些见解。

根据中心极限定理,给定来自总体的足够大样本量,样本均值的(抽样)分布将近似正态

当基础分布为正态时,中心极限定理自动适用于均值。不过在其他所有情况下会发生什么呢?好吧,偏离正态分布越远,我们需要的样本量就越大。boot 函数提供了一个很好的图来检查你的统计量的抽样分布,你可以在下图中看到我们的 ARPV 百分比差异的抽样分布。这两个图都表明抽样分布近似正态,这也解释了为什么非参数置信区间和正态置信区间几乎相同。

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

从普通自助法检查正态性假设 [作者提供的图片]

总结

到此,我们成功完成了 AB 测试!🚀🚀

✅ 我们解释了基本概念,如 I 型和 II 型错误、p 值、置信区间和中心极限定理

✅ 我们运行了 AB 测试的 EDA 检查表

✅ 我们使用参数和非参数自助法置信区间分析了实验结果

我希望上述内容对你获得你的第一个数据科学工作目标有所帮助。我试图涵盖你在数据科学面试中需要的理论,并且还教给你像数据科学家一样运行和分析你自己的实验的技能!

保持联系!

如果你喜欢阅读这篇文章并想了解更多,不要忘记订阅以便直接将我的故事发送到你的收件箱。

在下面的链接中,你还可以找到一个免费的 PDF 指南,介绍如何在真实的商业场景中使用数据科学技术和最佳实践来完成客户聚类分析。👇

## 数据科学项目检查清单 - 有志数据科学家

我是一名拥有 7 年以上分析经验的数据科学家,目前在英国伦敦的一家游戏公司工作。我的……

www.aspiringdatascientist.net

成为高效的机器学习团队领导

原文:towardsdatascience.com/what-i-learned-from-the-best-and-the-worst-machine-learning-team-leads-c9331f56da4d?source=collection_archive---------4-----------------------#2023-02-06

我从最优秀和最差的机器学习团队领导那里学到了什么

管理沟通、基础设施和文档

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

·

关注 发表在 Towards Data Science ·12 min read·2023 年 2 月 6 日

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

作者提供的图片。

软件工程项目的技术管理已经非常成熟,团队领导可以使用多种工具和技术,如敏捷方法。然而,机器学习项目由于准确预测时间线、任务结果和任务可行性等方面的挑战,难以融入这些模式。

在每一步都面临高不确定性的项目需要机器学习团队负责人通过经验获得的技能和知识。在这篇文章中,我将总结我作为团队成员在良好和不良管理下的学习经验,以及我自己领导机器学习项目所获得的经验。

虽然文章重点关注管理机器学习项目的具体技术,但某些通用的项目管理方面特别重要,因此我也将强调这些方面。

首先,我谈论为何管理机器学习项目可能具有挑战性。然后,我讨论了如何通过改进沟通、更好地管理基础设施和文档来克服这些挑战。

领导机器学习项目的挑战

虽然软件工程和机器学习项目有很多相似之处,但由于若干原因,领导机器学习项目可能会有所不同:

  • 机器学习项目通常承担更高的风险。与软件项目不同,软件项目的任务是从确定性的模块中构建系统,而机器学习项目所处理的问题的可行性通常事先未知——我们是否会有足够的数据,数据是否具有合理的质量,模型是否足够大以捕捉关系,我们是否拥有足够的计算能力?

  • 设定截止日期、里程碑和计划更加困难。由于该领域仍在建立中,并且没有现成的解决方案来解决每一个问题,机器学习模型需要从头开始构建。因此,机器学习项目最终变成了以研究为导向的项目。对于这些项目,预测时间框架可能很困难,因为许多决策只能在某个阶段完成后才可以做出。

  • 缺乏性能指标使得跟踪和评估性能变得具有挑战性。有些问题有明确的目标——例如,评估一个垃圾邮件过滤器,我们可以客观地告诉它过滤了 99%的垃圾邮件,而对于更主观的问题,定义性能指标则更加困难。例如,考虑一个美化过滤器——我们如何在没有用户研究的情况下衡量它是否表现良好?而从用户那里获得足够的可靠数据往往是昂贵、缓慢且具有挑战性的,尤其是在严格的 GDPR 要求下。

  • 多学科项目非常常见。因此,团队成员往往会有非常狭窄的专业化方向,为了使项目进展顺利,团队内的沟通流动需要非常出色。

上述许多困难可以通过关注机器学习项目中重要的方面——沟通、基础设施和文档来克服。

沟通

软件工程团队通常不会为会议准备演示文稿。然而,机器学习项目则更常见——许多组件通过图表来沟通更为方便——如损失函数、数据分布、生成结果中的伪影等。

可视化有助于建立沟通技能,让每个人对自己的工作负责,促进信息共享,并鼓励团队其他成员提供反馈,因为在询问澄清时,指向幻灯片会更方便。

机器学习项目通常是跨学科的,当材料没有很好地传达时,保持所有人参与是困难的。为了保持注意力,重要的是从高层次的视角开始,并始终以简单的术语解释事物。

实用注意事项

  • 准时开始和结束。考虑在开始时留出几分钟让大家加入并聊天,以调整会议气氛。开场小聊不会占用太多技术讨论时间,但会提升团队士气。

  • 给人们时间聚集,解除静音并开始发言。询问是否有问题后,心里默数到十。

  • 一致性和以身作则。如果你把某事视为规则,就去实践它。要求团队展示?树立标准。

  • 如果不确定要点是否已经传达清楚,可以让团队成员讲解任务并识别潜在挑战。

  • 没有得到反馈?也许问题表述不够清晰。不要问“当前方法是否有问题或疑问?”,要更具体,让大家参与解决方案的制定,可以改成“有什么更好的方法来加载数据?”。

  • 公开表扬,私下批评——这是永恒的经典。想要鼓励某种行为模式?在小组会议上奖励它。例如,许多人对提问感到不安。但提出问题和指出问题是重要的——有人在一周中的小组聊天中提出了问题?小组会议是感谢他们的好时机。关于如何给予反馈的好书是“Radical Candor” by Kim Scott。

  • 不要试图同时做工程和管理。如果你在领导项目,就要领导和管理。委派任务。鉴于每个机器学习团队成员的专业性,微观管理不仅会让团队恼火,还会损害结果。

  • 团队成员需要知道他们所做的工作为何重要。让团队参与任务形成和优先级排序的过程,大多数团队成员都是领域专家。如果决定如何进行是来自团队的,那么委派任务会更容易——你的角色则转变为协调。

  • 诚实有助于建立你与团队成员之间的信任。如果你不理解某些事情,要诚实面对。如果你看到任务不是很有趣但却必要,不要试图美化它,而要如实解释。诚实会受到赞赏。

  • 在编辑或分享团队成员的工作之前,一定要征得他们的许可。

  • 每个人的优先级、期望和担忧都不同。了解一个人对工作的期望将有助于团队领导为其分配合适的任务。

  • 除非你了解对方,否则要小心假设他们的需求。在分配任务时随口提到“这对你的简历有好处”,可能会被视为廉价的操控。

基础设施

机器学习是一个系统化不可避免的领域。决策的质量取决于数据、代码和结果的组织方式。

然而,由于最终模型的各个方面——数据、架构和超参数之间的复杂关系,系统化也是非常具有挑战性的。此外,每个实验都会生成大量数据,并且由于项目是以研究为导向的,每个模块都可能频繁变化。

在提供反馈或指导团队构建代码或准备数据时——问问自己一个问题,新加入团队的人是否容易理解发生了什么?如果答案是否定的,你需要重新考虑这个过程。

基础设施

有趣的是,项目管理的一个优秀来源是战争书籍,例如,孙子所著的《孙子兵法》。书中分享的智慧之一是,战斗的命运在开始之前就已决定——准备最充分的人赢得胜利。

战斗中最重要的方面之一是补给线。基础设施就像补给线——为了让项目不断发展,基础设施不能有突发的中断或障碍,而且应该易于使用和扩展。

我目前遇到的数据和基础设施管理的最佳实践包括:

  • 为训练准备配置文件并记录它们。这将有助于可重复性,使你可以回溯查看解决方案的获得方式,并减少设置实验时的错误。

  • 为训练数据准备配置文件。这可以简单到模型的输入-输出对列表。这将帮助确保你确切知道模型使用了哪些数据,并简化数据加载器。

  • 对于参数使用合理的默认值——运行代码的人会期望它开箱即用,不需要深入挖掘。如果需要几个超参数,拥有一个执行命令的 bash 脚本会很方便,因为它比终端中的文本更易于修改。

  • 如果资源允许,部署的可自动化部分必须自动化。自动化通过消除重复工作节省团队时间,并防止错误发生。

  • 训练数据的组织方式对数据加载、训练速度、灵活性和分析结果的便利性有重大影响。确保数据按类型分开存储,不要将所有内容放在一个文件夹中——这样可以更方便地可视化现有数据并添加新数据。

  • 训练和测试管道必须尽可能相似——在数据预处理、后处理和模型加载的方式上。

模型跟踪

团队中的多个成员在同一个模型的不同部分工作时,我们需要比较所有结果。为每个团队成员提供一个本地 tensorboard 会非常低效。同时,将所有实验堆积在同一个文件夹中会非常麻烦。

有一些强大的替代工具可以用来分析模型性能,比如wandb(对于小团队可能是免费的)和aimstack(在撰写时完全免费)。

模型比较

机器学习项目会生成大量需要比较的模型。然而,在隔离的开发环境中运行测试以验证性能是不够的。为了突出潜在问题,测试和比较必须尽快作为完整管道的一部分在专用推理设备上进行。

拥有一个专门的测试数据集,最好能反映最终产品场景,并包含尽可能多的边缘案例,以帮助识别最终模型的潜在问题。例如,人类检测的计算机视觉问题应包括具有各种体型、肤色和肤质的多样化人群。

比较结果时,始终要有基准。最好在项目开始时设定一个基准。始终拥有反映生产所需模型属性的明确指标。可以是数学指标或产品试点结果中的用户数据数字。

跟踪模型的构建过程以及哪些方面对模型性能的提升至关重要。文档化——例如一个包含链接到演示、代码和评论的排名表,是一个好的起点。

代码管理

在进行多个实验时,分支爆炸问题不可避免。我看到过一些项目有 500 多个 GitHub 分支,很明显不可能对所有分支进行跟踪和良好文档记录。

鼓励分支合并和归档,否则很容易迷失方向。鼓励小的提交和 PR——大的提交审查时间长,最终会变得过时。

使用简化和抽象部分代码的框架——例如pytorch-lightning,它为训练代码提供结构,并移除与环境设置相关的部分。

另一个挑战是将实验与代码关联起来。模型是用什么代码训练的?是否容易追溯?有一个解决方案 — 要么保持一个文档齐全的项目,要么使用自动化日志记录工具 — MLFlow

文档

文档提供了可重复性、问责制、知识共享、质量和性能控制,以及一种结构化的看待问题的方法。尽管非常重要,但往往被忽视。

一般规则 — 如果一个问题出现超过两次,就需要记录下来。类似地,任何一次性的重要过程也必须记录。例如,数据准备或环境设置。

有几个重要的文档可以显著提高团队成员之间的沟通质量和解决方案的质量:设计文档、路线图和每周笔记。

设计文档

我曾经与我的博士导师在项目的早期阶段坚持开始撰写文章时产生了很多误解。后来在我的职业生涯中,我发现这是一种非常有用的做法。

写下项目的骨架会让你变慢,但会给你更多时间考虑解决方案的每个部分,帮助定义约束条件和指标。关键是消除项目结果中的模糊性。

设计文档解释了项目的来龙去脉并报告结果,并在项目的每个阶段不断演变 — 从项目计划开始,它变成了如何实现最终结果的解释。

在机器学习项目中,失败的实验很常见,虽然这些实验对最终解决方案可能无关紧要,但它们也作为知识的来源,应有一个专门的部分。

不要忘记包含数据 — 使用了哪些数据集以及如何进行清洗。由于在项目之间重复使用数据很常见,详细的部分将有助于未来的项目。

由于文档可能会在后期被某人浏览,或者被具有非技术背景的人阅读,因此总是以简单的术语开始介绍项目的动机和大局。类似于小组会议,视觉化流程 — 例如,建议的流程图将是设计文档的重要部分。

路线图

路线图是项目的逐步计划,包含关键里程碑和实现目标所需采取的步骤。一个好的路线图应包含目标、描述、时间框架、任务负责人以及主要发现和结果链接。

为机器学习任务设置时间框架可能会很困难,因为结果可能不明确 — 例如,将任务设置在一个期望 98%召回率的路线图上是不现实的,因为实验可能会成功也可能不会。相反,任务应该被拆分成小组件,交付物可以是一个代码块或一个数据集。

每周笔记

对于机器学习项目,数据可视化非常重要,因此理想的格式是包含尽可能多的视觉信息和与描述数据相关的代码链接的演示文稿。这些通常存储在共享空间中,每个团队成员可以查看和查找参考资料,而无需打扰负责人。

作为团队领导,会议前有每个人的每周结果/工作的总结是很有用的,因为这样可以在他们的展示中提出有针对性的问题。

实用笔记:

  • 由于需要维护的文档较多,保持一个包含主要文档快捷方式的单一文档并非不合理。

  • 需要接纳新成员,已有入职文档,但请确保你自己从头到尾完成了所有步骤,以免遗漏任何内容。

  • 鼓励团队成员记录已完成的任务,并附上代码和结果的链接——这将帮助他们在绩效评审时回忆起全年所做的工作。

  • 机器学习项目由研究指导。我参与的多数工业项目依赖于使用预训练模型或重新实现论文中的模型。为了有效管理和跟踪前沿进展,并向团队沟通现有工作,一个好的做法是保持一个包含链接的共享文档。

总结

由于团队领导负责项目交付,领导者的一个基本素质是对团队及每个个体成功的长期思考。

将项目视为帮助整个团队及每个团队成员成长的方式。为此,给予每个团队成员自主权,鼓励他们的责任感,主动奖励正确的行为和最佳实践,进行可视化,再可视化,并以身作则。一个很好的 品质列表 可供你在团队中鼓励。

喜欢这位作者?保持联系!

我是否遗漏了什么?请随时留下笔记、评论或直接通过 LinkedInTwitter 联系我!

## 精通机器学习面试

机器学习面试的准备指南和资源。

towardsdatascience.com ## 每个博士生都能免费获得的三种软技能

我在机器学习博士期间学到的关于研究、沟通和团队合作的综合技巧和窍门。

towardsdatascience.com ## 在向你的项目引入 AI 之前要问的七个问题

也就是机器学习的第一规则——不要使用机器学习。

towardsdatascience.com ## 我希望在攻读机器学习博士学位之前掌握的九个工具

无论你是在创建初创公司还是在取得科学突破,这些工具都能将你的机器学习管道提升到…

towardsdatascience.com

本博客中的观点仅代表我个人,并不代表 Snap 公司的立场或观点。

我在担任数据科学总监的第一年学到的东西

原文:towardsdatascience.com/what-i-learned-in-my-first-year-as-a-director-of-data-science-76b79f26b09c?source=collection_archive---------1-----------------------#2023-05-01

关于管理数据科学团队的持续学习和不断进步

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

·

关注 发表在 Towards Data Science · 14 分钟阅读 · 2023 年 5 月 1 日

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

图片由 Brett Jordan 拍摄,来源于 Unsplash

六个月前,我注意到关于如何管理数据科学团队(与数据科学项目相比,后者有更多的内容)的帖子并不多。为了填补这一空白,我写了我的原创文章:“我作为数据科学总监的前六个月所学到的东西。” 这篇文章的反馈总体上是积极的,因此我决定,在我担任数据科学总监满 1 年后,根据接下来的 6 个月的经验更新原文。一些经验教训没有改变,尽管我观察到了一些新的情况或学习到了更多细节。其他的则随着科技界裁员情况的变化而有所改变。有关我自己以及我为什么开始写这些内容的更多背景信息,请参见我的原创文章。

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

照片由若昂·费拉奥拍摄,发布于Unsplash

招聘仍然是我最大的挑战

当我在 2022 年 11 月写下原文时,科技裁员刚刚开始加速。我开始对招聘市场的变化感到非常乐观。我的管理层也开始对数据科学家的薪资预期和报价的变化感到乐观。

简而言之,这种做法并没有取得预期效果。

我加入了几个旨在帮助被裁员的科技人员寻找新工作的在线论坛。然而,我很快注意到数据科学家和机器学习工程师并没有很多。我还发现我在这些公司的朋友们并没有被裁员。我的(轶事性的)结论是,数据科学家在科技界,包括 FAANG 公司中,仍然有相当程度的工作保障。我发现的那些被裁员的人员很快被其他科技公司录用。因此,在这方面,尽管科技界发生了变化,我的招聘情况在过去 6 个月里并没有改变。

话虽如此,我在招聘数据科学家方面又获得了 6 个月的经验和观察。我认为其中一些经验是值得分享的。

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

照片由阿诺德·弗朗西斯卡拍摄,发布于Unsplash

面试设计:编码还是不编码?

这是软件行业内一个长期争论的问题。我们招聘的人是为了编写代码,那么我们难道不想看看他们的代码吗?我们是否希望给他们布置类似于我们公司日常工作中的任务?我们是否希望看到他们实时编程?

这是我在当前角色中处理过的事情。我确实重视观察人们编码的方式。我会查看代码及其整体组织结构。候选人是否使用了精心设计的类?函数是否清晰,并包括文档字符串、类型提示和其他有用的调试工具?是否实施了某种测试?整体文档是什么样的?他们是否只是从 scikit-learn 文档中复制粘贴,还是考虑了超参数并超越了文档的示例问题?

是的,这绝对是我可以在家庭编码挑战或实时编码练习中查看的内容。然而,这些是否公平地评估了一个人的能力?作为 IC,我经历过这两者,各有利弊。这些在各种场合中都被讨论过,但我将简要总结一下。

家庭编码挑战或作业假设候选人有时间去完成它们。它没有考虑到他们可能还在 9 到 5 的“日常工作”中,可能还有家庭或其他义务,这些义务不允许他们花费足够的时间来解决挑战。所以你可能会对那些在闲暇时间有育儿职责的在职父母产生偏见。

当然,你可以进行实时编码会话,例如配对编程或令人畏惧的“我们将观看你编码”或白板练习。毕竟,大多数人,包括那些在另一份工作中接受面试的人,通常会抽出一小时进行面试。但是,那些在公司提供的电脑上被监控且没有其他电脑的人怎么办?他们可能不希望老板看到他们在公司资源上做编码挑战。此外,许多人在这样的高压环境下不会发挥最佳水平。而且,实际上,他们是否会在日常工作中处于这样的环境?(旁注:如果你的团队通常在这种高压情况下运作,你也许应该检查一下你为团队创造的文化。)

到头来,我们团队里不会做这些。我们仍然进行技术面试,但这些更多是讨论,而不是编码。

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

图片由Markus Winkler拍摄,来源于Unsplash

作品集的重要性

尽管如此,我仍希望能看到候选人编写的一些代码或分析。这可能与之前的观点相矛盾。我不需要一个带有华丽格式的个人网页,也不需要将内容部署到 Heroku。一个包含几个经过深思熟虑项目的 GitHub 账号就足够了。你的 GitHub 账号和这些代码应该在你的简历上提供。这些不应是他人仓库的克隆。(每次收到候选人克隆我的仓库的申请时,我总是觉得很有趣。)

再次强调,当你是一个工作中的父母,拥有有限的空闲时间,或者在工作以外没有计算机时,这种系统很难组建。这个系统并不完美。然而,以这种方式查看候选人的代码有一个(尽管是微小的)好处,就是候选人没有时间压力去整理代码。(尽管保持最新的包是个好主意,因为你永远不知道我什么时候会尝试运行你的代码!)

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

Tim Mossholder 拍摄的照片,来源于 Unsplash

阅读职位广告很重要!

我在之前的帖子中谈论过这个话题,但从那时起,根据申请者的数量和面试情况,我有了几个新的认识。

我们团队有两种不同类型的人:数据科学家和机器学习工程师。这些职位名称是在我加入公司之前创建的,为了保持一致性,我一直努力保持这些名称。然而,如果你在这个领域工作,你会知道这些术语可能会被过度使用。

为了尝试区分这两者,我在广告中(如果我这么说的话!)非常清楚地列出了每个职位的职责。再次说明,按照团队历史上的使用,团队中的数据科学家进行实验和模型创建,通常在笔记本中进行,可能还会有一些基本的 Python 脚本。机器学习工程师则将这些模型转化为生产代码和管道。在一些公司,这些可能被称为“数据工程师”或“MLOps”。在其他公司,机器学习工程师是编写模型的。

在过去的一年里,我学到,尝试招聘人员时使用这些模糊的职位名称时,明确日常职责非常重要。我在职位广告中越具体,匹配度就越高。

尽管如此,这仍然远非完美的解决方案。我常常对大量(我称之为)数据科学家申请(我称之为)机器学习工程师的职位感到惊讶。他们没有阅读职位广告。在数据科学的职位广告中,我已经指定了统计学、建模(传统机器学习、深度学习等)、探索性数据分析等经验。而在机器学习的广告中,我提到了 CI/CD、devops、Terraform 等等。也许我写的职位广告还是不对。根据申请机器学习职位的数据科学家的数量(我估计超过三分之二),问题一定出在我这里。肯定是这样,对吧?

这不仅仅涉及职位描述。包括我所在州在内的某些州有法律要求招聘经理披露职位的薪资范围。正如我们所讨论的,科技公司通常能支付比非科技公司更高的薪资,而我工作的是后者。这并不是说我们的工作问题不令人兴奋或有价值!这只是业务的本质。然而,申请者中有不少人声明他们期望的最低薪资完全超出了我所广告的范围,这一点非常显著。

作为招聘经理,鉴于以上情况,我只能得出结论,候选人没有阅读职位广告。这对候选人和招聘经理来说都很不幸。

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

图片由 Farzad 提供,来源于 Unsplash

在非科技领域工作的挑战

面对现实吧。我们有时不得不在公司中担任多个角色。然而,如果你在职业生涯中曾在科技公司和非科技公司工作过,你会知道,这在科技领域之外的意义更为重大。

在科技领域,你经常有机会真正专注于某一特定学科。例如,当我为某家雇主担任机器学习工程师时(在我当前的公司中,这意味着“数据科学家”),我开始深入参与图数据科学。这不仅在技术层面上吸引了我,还帮助公司解决了一些挑战。如果你关注过我在 Medium 上的其他文章,你可能已经注意到它们围绕图形展开,以至于我曾去一家图数据库公司工作过一段时间。

在科技行业之外,专业化的模式作为数据科学家变得更为困难。这一差异源于在非科技领域,你的工作是解决业务问题,而不是创造解决这些问题的技术。因此,你需要成为一个通才,而不是专家。

这不仅仅是知道你需要哪些 Python 包,并采用多样化的方式来解决这些问题。例如,我的团队对云基础设施非常熟悉。这是出于必要性。我们没有一支基础设施团队随时准备帮助我们完成这些工作。我们经常需要为公司提供关于这些基础设施的建议。我们不得不自学信息安全。这样做是否理想?不。但这就是非科技公司的人力资源运作方式。

从许多方面来看,这实际上非常有趣!如果你在一个通才角色中工作,你必须不断学习新事物。例如,我不期望我团队中的每个人都完全理解如何为我们的模型创建生产流水线。但每个人都在学习。我喜欢学习新事物。我认为这是数据科学家的一个要求。

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

图片由 Maklay62 提供,CC0,来自 Wikimedia Commons

管理有限预算

我这里有一个故事。当我在一家无名科技公司工作时,我们使用了一个非常受欢迎的云服务提供商。我的一个同事决定测试一下是否允许他们启动提供商提供的最先进的 GPU 实例,只是为了看看是否存在限制。他们让那个实例运行了一个多月而没有使用它进行计算。总账单达到了几万美元。没有人关心。

我目前角色中的一个责任是监控预算,特别是我们的云基础设施和 CI/CD 管道,我每周都会进行一次监控。我们有一个月度预算(远低于我之前的故事中花费的预算)。当预算设定时相当现实,因此我们通常不需要担心超支,但预算在那儿,我们会进行监控。有时我们会遇到对 CI/CD 运行时分钟数不太了解的人。例如,当我看到使用量激增并且可能超支时,我会要求团队中更资深的成员与那些在有问题的项目上工作的人员合作,以提高资源使用效率。正如我上面所说,每个人都在不断学习。

虽然这适用于我们的计算,但也适用于薪资。我之前提到过,科技行业的薪资通常高于非科技行业。看起来我应该能直接向管理层申请更多的薪资。不幸的是,企业的运作并非如此。我其中一个工作就是为我的团队争取尽可能好的薪资。团队中的另一个工作是保持公司内部薪资的公平一致,以及在更大的预算框架内。有时(总是?)这两者会发生冲突。考虑到数据科学家通常是公司中薪资最高的个体贡献者,去高级管理层争取更多薪资对我来说是个困难的挑战。这就是现实情况。

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

照片由Jason Goodman拍摄,来自Unsplash

与非技术团队沟通

这是非技术公司面临的最大挑战之一。我的团队必须为业务生成解决方案。这些解决方案的质量如何衡量?一种方式是投资回报率(ROI)。企业的存在是为了赚钱。这是显而易见的。每个人都必须为这个使命做出贡献。那些不贡献的模型是不应该被开发的模型。

但是谁是这些模型的最终使用者?在我这种情况下,通常是营销团队。我愿意承认我不是营销人员。(尽管在我上面关于持续学习的声明之后,我正在回学校读 MBA,以了解营销的工作原理。)营销人员在一个不是数据科学的领域中非常擅长技术。因此,在我当前的角色中,学习如何与他们沟通非常重要。

那可能显而易见,但它真正意味着什么呢?首先,这意味着我不能简单地扔一堆数学和图表过去,尤其是没有解释它们的含义。在我的职业生涯中,我参加过许多数据科学会议,有些事情我在那里说的话不需要思考就能解释清楚。其中一个很好的例子是用于评估模型的各种性能指标。在营销角色中的人通常能理解"准确率"这样的术语。但一提到"精确率/召回率"、"F1 分数"或其他我们认为标准的指标,他们就会一脸茫然地看着我。老实说,这很正常,我们不应该期待他们去拿个统计学学位来理解。我们可能认为他们应该关心,但归根结底,他们希望我们能提供一个好模型。

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

照片由Cytonn Photography拍摄,来自Unsplash

这种信任的重要性

然而,我工作中真正困难的一部分是向我们的营销团队传达模型不好的消息。希望这是团队自己发现的问题。如果团队错过了,他们发现了,那将是个糟糕的日子。

事实是,他们不会每天深入研究我们拥有的数据(或者更常见的情况是没有的数据)。观察模型的漂移不是他们应该担心的事情。最终,他们必须相信数据科学团队会处理好这些事情。

但是这种信任是如何获得的呢?

沟通是关键!在理想情况下,团队开发的每一个模型都应该是基于一个在数据科学人员动手之前已经广泛讨论过的业务问题。我努力让利益相关者聚在一起,详细说明业务需求。这通常无法在一次会议中完成,需要多次会议。有时,同一个会议需要重复多次,以便能够接触到那些日程安排无法参加原始会议的利益相关者。然后,还需要更多的会议来继续定义问题及解决方案的样子。

如果沟通是关键,那么文档就是钥匙链。我尽量在每次会议结束时总结所决定的内容。这些内容会被记录下来,并放在一个所有人都能访问的公共位置。这个位置在每次会议时都会共享。我在每次会议后都会请求对文档的反馈。我做得对吗?有没有需要修改、评论或问题?(专业提示:电子邮件不是记录这些讨论的好方法。需要放在更容易被发现的地方。)

然而,仍然会有模型表现不佳的情况。也许存在未被发现的 bug。也许没有数据来创建模型。可能是团队发现的,也可能是市场人员发现的。无论如何,信任通过诚实建立。这似乎是显而易见的,但我在职业生涯中见过太多数据科学家因为不想让团队或模型处于不利境地而默默掩盖问题的情况。

市场人员通常不是统计学家。当事情出现问题或他们不理解时,很容易将责任归咎于数学(或创建它的人)。而且,面对现实吧,机器学习的数学很容易被看作是一个黑箱,难以接受或相信。当存在诚实、开放、值得信任的关系时,团队或模型的信任缺失就不容易摧毁一切。

结论

如果我在这个角色的前六个月是适应从技术领域转变和学习数据科学招聘现状,那么我后六个月的工作则是尝试应对各自的挑战。挑战依然存在,我仍在学习。我如何才能让更多优质的候选人入门?我如何在非技术公司内工作,以为我的团队争取最好的资源,确保我们能够完成工作,并找出最有效的时间使用方法?

我每天都在继续学习。

我在推动提示工程极限时的所学

原文:towardsdatascience.com/what-i-learned-pushing-prompt-engineering-to-the-limit-c40f0740641f?source=collection_archive---------0-----------------------#2023-06-12

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

·

关注 发表在 Towards Data Science ·10 分钟阅读·2023 年 6 月 12 日

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

对提示工程的讽刺描绘。具有讽刺意味的是,DALL-E2 生成的图像是作者使用提示工程生成的,提示为“一个疯狂的科学家把卷轴递给一个人工智能机器人,以复古风格生成”,加上一些变化,以及扩展画布。

我花了过去两个月时间构建一个大型语言模型(LLM)驱动的应用程序。这是一次令人兴奋、智力激发且有时令人沮丧的经历。整个项目过程中,我对提示工程的理解——以及 LLM 的可能性——发生了变化。

我很乐意与你分享一些我最大的收获,旨在揭示一些常被忽视的提示工程方面。我希望在阅读了我的经历后,你能做出更明智的提示工程决策。如果你已经尝试过提示工程,我希望这能帮助你在自己的旅程中更进一步!

为了提供背景,这里是我们将要学习的项目的 TL;DR:

  • 我和我的团队构建了 VoxelGPT,这是一个将 LLM 与 FiftyOne 计算机视觉查询语言结合的应用,旨在通过自然语言在图像和视频数据集中进行搜索。VoxelGPT 还回答有关 FiftyOne 本身的问题。

  • VoxelGPT 是开源的(FiftyOne 也是!)。所有代码都可以在 GitHub 上找到。

  • 你可以在 gpt.fiftyone.ai 免费试用 VoxelGPT。

  • 如果你对我们如何构建 VoxelGPT 感到好奇,可以在 TDS 上阅读更多

现在,我已经将提示工程课程分为四个类别:

  1. 一般经验

  2. 提示技术

  3. 示例

  4. 工具

一般经验

科学?工程?黑魔法?

提示工程既是实验也是工程。从你提问的具体措辞,到你输入的上下文的内容和格式,有无穷无尽的提示写作方式。这可能会让人不知所措。我发现最简单的方法是从简单开始,建立直觉——然后测试假设。

在计算机视觉中,每个数据集都有自己独特的模式、标签类型和类别名称。VoxelGPT 的目标是能够处理 任何 计算机视觉数据集,但我们一开始只用了一个数据集:MS COCO。保持所有额外自由度固定使我们能够集中精力验证 LLM 在写出语法正确的查询方面的能力。

一旦你确定了在有限上下文中成功的公式,就可以找出如何将其概括和扩展。

使用哪个模型?

人们说,大型语言模型最重要的特征之一是它们是相对可互换的。理论上,你应该能够在不显著改变连接结构的情况下,替换一个 LLM 为另一个。

虽然改变你使用的 LLM 通常像更换 API 调用一样简单,但在实际操作中确实会遇到一些困难。

  • 一些模型的上下文长度比其他模型短得多。切换到上下文较短的模型可能需要重大重构。

  • 开源是很棒的,但开源 LLM 的性能(目前)还不如 GPT 模型。而且,如果你要部署一个使用开源 LLM 的应用,你需要确保运行模型的容器有足够的内存和存储。这可能比直接使用 API 端点更麻烦(也更昂贵)。

  • 如果你开始使用 GPT-4 然后因为成本问题切换到 GPT-3.5,你可能会对性能的下降感到震惊。对于复杂的代码生成和推理任务,GPT-4 要好得多。

何时使用 LLM?

大型语言模型是强大的。但仅仅因为它们可能能够完成某些任务,并不意味着你需要——甚至应该——将它们用于这些任务。思考 LLM 的最佳方式是将其视为赋能工具。LLM 不是解决方案的全部:它们只是其中的一部分。不要指望大型语言模型能做所有事情。

举个例子,可能你使用的 LLM 可以(在理想情况下)生成格式正确的 API 调用。但如果你知道 API 调用的结构应是什么样的,并且实际上对填充 API 调用的部分(变量名、条件等)感兴趣,那么只需使用 LLM 来完成这些任务,然后自己使用(经过适当后处理的)LLM 输出生成结构化的 API 调用。这将更便宜、更高效,也更可靠。

拥有 LLM 的完整系统肯定会有大量的连接部分和经典逻辑,以及一系列传统的软件工程和 ML 工程组件。找到最适合你应用的解决方案。

LLMs 有偏见

语言模型既是推理引擎也是知识存储库。通常,LLM 的知识存储库方面对用户非常有吸引力——许多人将 LLM 用作搜索引擎的替代品!到现在,任何使用过 LLM 的人都知道它们容易编造虚假的“事实”——这现象被称为幻觉

然而,有时 LLM 遇到的是相反的问题:它们过于固执于其训练数据中的事实。

在我们的案例中,我们尝试促使 GPT-3.5 确定将用户的自然语言查询转换为有效的 FiftyOne Python 查询所需的适当 ViewStages(逻辑操作的管道)。问题在于 GPT-3.5 了解 MatchFilterLabels ViewStages,这些在 FiftyOne 中存在了一段时间,但其训练数据不包括最近添加的功能,其中 SortBySimilarity ViewStage 可以用来找到与文本提示相似的图像。

我们尝试传入 SortBySimilarity 的定义、使用细节和示例。我们甚至尝试指示 GPT-3.5 绝对不能使用 MatchFilterLabels ViewStages,否则会受到惩罚。不管我们尝试什么,LLM 仍然倾向于其已知的内容,无论是否是正确的选择。我们在与 LLM 的本能作斗争!

我们最终不得不在后处理中处理这个问题。

痛苦的后处理是不可避免的

无论你的示例有多好;无论你的提示有多严格——大型语言模型总会产生幻觉,给出格式错误的响应,当它们无法理解输入信息时,还会发脾气。LLM 最可预测的特性就是其输出的不可预测性。

我花费了大量的时间编写例程来匹配模式并纠正幻觉语法。最终,后处理文件包含了近 1600 行 Python 代码!

这些子例程中有些非常简单,比如添加括号,或在逻辑表达式中将“and”和“or”更改为“&”和“|”。有些子例程则复杂得多,比如验证 LLM 响应中的实体名称,如果满足某些条件,将一个 ViewStage 转换为另一个,确保方法的参数数量和类型有效。

如果你在一个相对封闭的代码生成环境中使用提示工程,我推荐以下方法:

  1. 使用抽象语法树(Python 的ast模块)编写你自己的自定义错误解析器。

  2. 如果结果在语法上无效,将生成的错误消息输入到 LLM 中,让它再试一次。

这种方法未能解决更隐蔽的情况,即语法有效但结果不正确。如果有人对这个问题有好的建议(超出 AutoGPT 和“展示你的工作”风格的方法),请告诉我!

提示技术

人越多越好

为了构建 VoxelGPT,我使用了几乎所有的提示技术:

  • “你是一个专家”

  • “你的任务是”

  • “你必须”

  • “你将会受到惩罚”

  • “以下是规则”

任何这种短语的组合都无法确保某种行为。巧妙的提示是不够的。

话虽如此,你在提示中使用的这些技术越多,就越能将大型语言模型(LLM)引导到正确的方向!

示例 > 文档

现在已经是常识(也是常识!),示例和其他上下文信息如文档可以帮助引导大型语言模型生成更好的响应。我发现 VoxelGPT 确实是这样。

一旦你添加了所有直接相关的示例和文档,如果上下文窗口中还有额外的空间,你应该怎么做?根据我的经验,我发现间接相关的示例比间接相关的文档更重要。

模块化 >> 大一统

你将一个总体问题拆解成更小的子问题的程度越高,效果越好。与其提供数据集模式和端到端示例列表,不如识别单独的选择和推理步骤(选择-推理提示),并在每个步骤中仅提供相关信息。

这有三个优点:

  1. LLM 在一次处理一个任务时表现得比同时处理多个任务更好。

  2. 步骤越小,清理输入和输出就越容易。

  3. 对你作为工程师来说,理解应用逻辑是一个重要的练习。LLM 的目的不是让世界变成黑匣子,而是启用新的工作流程。

例子

我需要多少个例子?

提示工程的一个重要部分是确定你需要多少个例子来完成特定任务。这是高度依赖于问题的。

对于一些任务(有效查询生成根据 FiftyOne 文档回答问题),我们能够做到没有任何例子。而对于其他任务(标签选择聊天记录是否相关标签类命名实体识别),我们只需要几个例子就能完成工作。然而,我们的主要推理任务几乎有 400 个例子(这仍然是整体性能的限制因素),因此我们仅在推理时传入最相关的例子。

当你生成例子时,尝试遵循两个指南:

  1. 尽可能全面。如果你有一个有限的可能性空间,那么尝试为每种情况提供至少一个例子。对于 VoxelGPT,我们至少尝试为每种语法正确的 ViewStage 使用方式提供一个例子——通常每种方式会有几个例子,以便 LLM 进行模式匹配。

  2. 尽可能保持一致。如果你将任务拆分为多个子任务,确保例子在一个任务与下一个任务之间保持一致。你可以重用例子!

合成例子

生成例子是一个繁琐的过程,手工制作的例子只能做到有限程度。事先想到每种可能的情境几乎是不可能的。当你部署应用时,可以记录用户查询,并利用这些查询来改进你的例子集。

然而,在部署之前,你最好的选择可能是生成合成例子。

这里有两种生成合成例子的方式,你可能会发现有用:

  1. 使用 LLM 生成例子。你可以让 LLM 变换语言,甚至模仿潜在用户的风格!虽然这对我们没用,但我相信它对许多应用可能有效。

  2. 基于输入查询中的元素程序性地生成示例——可能带有随机性。对于 VoxelGPT,这意味着基于用户数据集中的字段生成示例。我们正在将其纳入我们的管道中,目前为止看到的结果很有希望。

工具

LangChain

LangChain 之所以受欢迎是有原因的:这个库使得以复杂的方式连接 LLM 的输入和输出变得简单,抽象掉了繁琐的细节。特别是模型和提示模块表现出色。

话虽如此,LangChain 绝对是一个不断进步的项目:他们的记忆、索引和链模块都有显著的限制。这只是我在尝试使用 LangChain 时遇到的一些问题。

  1. 文档加载器和文本拆分器:在 LangChain 中,文档加载器 应将不同文件格式的数据转换为文本,而 文本拆分器 则应将文本拆分成语义上有意义的块。VoxelGPT 通过检索文档中最相关的块并将其传入提示中来回答有关 FiftyOne 文档的问题。为了生成有意义的答案,我不得不有效地构建自定义加载器和拆分器,因为 LangChain 没有提供适当的灵活性。

  2. 向量存储:LangChain 提供了 Vectorstore 集成和基于 Vectorstore 的 检索器,以帮助找到相关信息并纳入 LLM 提示中。这在理论上很棒,但实现缺乏灵活性。我不得不使用 ChromaDB 编写自定义实现,以便预先传递嵌入向量,而不是每次运行应用程序时都重新计算它们。我还不得不编写自定义检索器,以实现所需的自定义预筛选。

  3. 带来源的问答:在构建对 FiftyOne 文档的问答时,我找到了一种合理的解决方案,利用了 LangChain 的 RetrievalQA Chain。当我想添加来源时,我以为只需将该链替换为 LangChain 的 RetrievalQAWithSourcesChain 就可以了。然而,不良的提示技术导致该链表现出一些不幸的行为,例如 关于迈克尔·杰克逊的虚假信息。我再次不得不 自己动手

这意味着什么呢?也许自己构建这些组件更简单!

向量数据库

向量搜索可能正处于 🔥🔥🔥 的热潮中,但这并不意味着你的项目必须使用它。我最初使用 ChromaDB 实现了类似的示例检索程序,但由于我们只有几百个示例,最终我转向了精确的最近邻搜索。我确实需要自己处理所有的元数据过滤,但结果是一个更快的程序,依赖性更少。

TikToken

TikToken 纳入计算是非常简单的。总的来说,TikToken 给项目增加了不到 10 行代码,但使我们在计数令牌和尝试将尽可能多的信息融入上下文长度时变得更加精确。这在工具选择上是唯一的明智选择。

结论

选择的 LLM(大语言模型)有很多,各种新工具琳琅满目,还有一堆“提示工程”技巧。这一切既令人兴奋又可能让人感到不知所措。使用提示工程构建应用程序的关键在于:

  1. 将问题分解;构建解决方案

  2. 将 LLM 视为 赋能工具,而不是端到端的解决方案

  3. 仅在工具能让你的生活更轻松时使用它们

  4. 拥抱实验精神!

去创造一些很酷的东西吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值