为什么接受“任何数据工作”是一个糟糕的职业决定,你应该做什么
来自 Spotify 数据科学家的内部建议,以便在今天这个困难的就业市场中为你的职业做出明智的决策
·发表于Towards Data Science ·14 分钟阅读·2023 年 11 月 26 日
–
困难的就业市场让你觉得自己是在《饥饿游戏》中为生存而战,而不是为了得到一份工作吗?
如果你已经到了考虑放弃并接受任何数据工作的阶段,请稍等。你即将犯一个大错。
我在 COVID-19 大流行期间开始了我的数据科学职业生涯,那是一个疯狂的时期,类似于现在公司大规模裁员,几乎不招聘任何人*(不过情况更糟糕)*。
那时,我还是一个学生,感到完全是个冒名顶替者,还有着 5 万美元的债务在逼迫我。在绝望的时刻,我做了我们大多数人都会做的事。我把自己的标准扔进了垃圾桶,开始疯狂申请任何能找到的数据工作。
我向我甚至不知道的公司发送了数百份申请,因为我非常绝望——(作者提供的图片)
但随后,一位数据科学家告诉我一件改变一切的事:在这个领域正确起步至关重要。
为什么在数据科学领域这一点如此关键?因为在这个领域,并非所有职位都是平等的。领域的多样性意味着在一个行业中被重视的技能和经验在另一个行业中可能并不那么相关——这可能是公司是否雇用你与刷到下一个候选人之间的区别。
现在,作为 Spotify 的数据科学家,我可以自信地说,等待合适的工作而不是绝望地接受任何数据角色是最明智的决定。
妥协只会让我走上错误的职业道路,或延迟实现梦想工作的旅程。有一点是确定的;我现在不会在这里。
如果你需要一些灵感,这是一张不满足于现状的人的面孔 — (图像作者)
这个故事是帮助你做出明智职业决策的指南,即使在求职市场让你感到窒息时。我将展示给你:
-
如何屈从于接受一个不符合你期望的工作的压力是一个糟糕的举动,可能会破坏你的职业生涯。
-
我用来避免这个陷阱的具体策略。它们最终让我在 Spotify 获得了理想的职位。
你准备好了解如何在不妥协职业目标的情况下导航职场吗?很好,让我们深入探讨。
今日菜单
· 为什么妥协接受任何数据职位是一个糟糕的职业选择
· 步骤 #1 — 退一步再前进
· 步骤 #2 — 缩小差距
· 步骤 #3.a. 提升技能路径
· 步骤 #3.b. 实践路径
· 并非每个雇主都适合你
· 免责声明 — 最终的重要提示
为什么妥协接受任何数据职位是一个糟糕的职业选择
让你对雇主有吸引力的关键因素之一
在数据科学中,并非所有角色都等同。 该领域的多样性意味着在一个行业中被重视的技能和经验在另一个行业中可能并不具有同等的价值。
理解数据科学应用的这种多样性是 至关重要的。
如果你瞄准的是科技公司(或其他行业),了解你在那个环境中所需的具体技能至关重要。
一个公司是否觉得你的数据技能有吸引力的关键因素之一是你如何在过去的经验中应用这些技能。
我曾遇到一位在顶级市场研究公司有超过 10 年经验的高级数据科学家。你可能会认为他可以获得任何他想要的数据科学职位。只可惜……
尽管他有技能,但他甚至没能获得 Spotify 的面试机会。为什么?很可能是因为他掌握的技能和应用与职位要求不相关。他掌握了基础知识 — Python、SQL、沟通技巧 — 但在科技领域,这仅仅是起点。
同样,我的一位拥有金融背景的熟人发现她的数据科学技能在转向科技公司时并没有完全转移。她也面临了困难。
我知道你可能在想
“嘿,我可以接受咨询公司的数据职位,然后在我积累了更多经验后申请理想公司。”但如果你在那里做零售预测,你的理想公司可能对这些技能并不感兴趣。
或者说你在 JP Morgan 找到了一份工作。确实很令人印象深刻。你可能认为这对你的简历来说是一个很好的名字,申请 Google 时不应该有问题,对吧?错了,你在信用风险分析方面的经验实际上并不是 Google 想要的(除非你申请 Google Pay)。他们更倾向于选择那些在较不知名公司进行 A/B 测试和建立指标的候选人。
那么,这里主要的收获是什么? 在一个领域热门的东西,在另一个领域可能连第二眼都不会看。
如果你有特定的职业期望或目标,这一点至关重要。因此,尽早确定你的梦想行业或公司,并将你的技能发展和工作选择与之对接,以* 满足它们的具体需求。
注意 — 请记住,虽然这些建议在我个人成功中起到了重要作用,我分享它们是基于这个原因,但成功是多方面的。诸如技能、时机,甚至运气等因素,这些往往超出我们的控制范围,发挥着重要作用。所以将这些建议视为优化自己旅程中可控部分的指南或踏脚石。
步骤 #1 — 退后一步以前进
图片由 carolyn christine 提供,来源于 Unsplash
记住非常重要的是:
你的工作是你大部分时间的去处。无论你现在对自己的情况有多么绝望,明智地选择下一份工作至关重要。
当你做自己讨厌的事情时,感到痛苦是很容易的。最终,这只是将一个问题换成另一个问题。一个明智且聪明的工作选择不仅仅是关于角色本身,更是关于与你的职业抱负和个人梦想的一致性。
最终,这关乎你整体的幸福和生活满意度。当你达到低谷时,很容易丧失对这一点的把握。
所以,花点时间暂停和反思,尤其是当你从教育到就业一路不停时。 许多人从学习直接跳入职业生涯,而没有花时间 1)评估他们的经历和反思他们迄今的旅程,以及 2)为未来制定战略。
这个反思不仅仅是一个休息,它是一个关键的过程,可以重新定义你的职业轨迹。专注于理解你真正希望从职业中获得什么。
确定你的职业抱负和梦想工作。 这种清晰度将指导你做出一个不仅仅是权宜之计的职业选择,而是一个通往充实未来的踏脚石。
自我提问:
*1. 你对什么充满热情?
2. 是什么让你跳入数据科学领域?
3. 哪些公司在你热爱的领域运营?
4. 你长期的职业目标是什么?如果没有,你希望在职业生涯中实现什么?*
在数据科学领域工作的最佳之处在于你总能找到与自己兴趣相关的行业中的工作 — 视频游戏、电影、太空、小狗,等等。
对我来说,是在音乐行业工作。我梦寐以求的 Spotify,因为我是小提琴演奏者,我想站在我热爱的行业的数据科学前沿。
我能给你的一个大建议是:
找一个导师,找一个更有经验的人,与他讨论你的职业旅程,并从不同的角度了解工作真正的样子。
我明白确定你的职业期望可能是具有挑战性的,特别是在早期阶段。你的目标可能会随着时间而发展,但有一个方向总比毫无目的地漂流要好。导师在这方面可以提供很大帮助!
步骤 #2 — 弥合差距
你缺乏哪些技能?弥合差距 — 照片由 Alex Radelich 提供,在 Unsplash 上
当我开始申请工作时,我的数据科学技能还处于初期阶段,我仍然是一个初级数据科学家 — 更像是一个胎儿。因此,我知道在数据科学就业市场中,想要被认真对待,我还有很长的路要走*(尤其是在科技领域)。*
当你是数据科学的新人(尤其是如果你开始时没有编码或基础数学和机器学习的经验,就像我一样),即使是像 NYU 这样的顶级大学的一年密集课程也可能不足以进入科技行业。
所以我需要提升技能 — 这就是这些科技数据科学工作竞争激烈的方式。问题是:
我需要什么技能才能进入我梦想的公司?
对你也是一样。在定义你的职业目标,并识别出与你的职业抱负和热情交集的公司或行业后,下一步就是找出你技能上的差距。
- 在 LinkedIn 上搜索你目标公司/行业中的工作人员。尝试通过共享连接、城市或母校进行筛选,以最大限度地提高获得回复的机会。例如 — Spotify
你已经拥有 700 多名在 Spotify(我们当前的例子)工作过的有经验的人 — (作者提供的图片)
- 查看他们具备的技能,他们从事的项目类型,以及他们在数据科学领域所做的应用。
这是一个非懒散的人在经验部分列出的技能的示例(与我的空白简历形成对比) — (作者提供的图片)
- 评估你当前的技能,并找出你缺乏这些技能和需要改进的领域。你可以做的一件事是更新你在 LinkedIn 上的技能部分。每当你对平台上的某个角色感兴趣时,LinkedIn 会直接显示你缺乏哪些技能,以及你已经具备哪些技能!
充分利用它 — (作者提供的图片)
这些是你想要提升或获得的技能。 这就是你职业战略的跳板。
下一个需要问自己的问题是:
他们是否需要适当的培训或实践经验来获得?
A/B 测试等技能通常仅通过培训很难获得,最好在公司环境中学习。但如果你的技能差距主要集中在机器学习领域,那么适当的培训是你所需要的。
对我来说,我意识到我需要提升技能,但我在心理上还没准备好再学习 1 到 2 年,所以我选择了简单的方式→我将努力重心转向了欧洲,但即使如此也失败了。
一旦你开始找工作,你会迅速意识到在所有最佳职位都被最优秀的候选人占据后,你只能获得一些零散的职位。我不想以我讨厌的工作开始职业生涯。所以我推迟了贷款还款,并开始寻找美国以外的其他更实惠的数据科学学位。
关键点是什么? 找出你需要弥补的技能差距,以及是否需要培训或实践经验来弥补这个差距。
根据是否需要提升技能或获得实践经验,你需要选择以下路线之一——或混合使用。
第#3.a. 技能提升路线
我第二个数据科学学位第一年的预览——(图片作者提供)
经过大量的眼泪、辛勤工作和一点运气,我成功获得了全球第三最佳数据科学学位,并获得了额外的奖学金。
但我知道这并不适用于每个人——这里的目标是找出你技能上的不足,并跟随任何能弥补这一差距的相关培训。
无论是报名参加另一个数据科学学位、参加培训营、注册在线课程、请求你的仙女教母,还是卖掉你的灵魂,做你必须做的事*(好吧,也许最后一个不算)*。
最终,你需要能够在简历上展示你拥有这些技能,通过你在作品集中展示的项目或证书/文凭。
你可以做的事情包括:
像Coursera、edX 和 Udacity 这样的平台提供了广泛的数据科学课程,你可以根据需要的具体技能进行学习。
如果你还在读书,寻求你热爱的领域或行业的实习机会,无论公司规模大小。即使是小公司也能提供宝贵的学习机会。最重要的是获得技能。
根据你的职业目标,你可能需要通过专业化超越数据科学的基础知识。无论是计算机视觉、自然语言处理、语言模型还是其他领域,确保你在这个子领域获得经验——通过培训或项目——然后再申请这些职位。
对于技术行业,我制作了终极指南,介绍了你在申请前需要掌握的 6 项数据科学技能。 一定要查看一下!
步骤 #3.b. 实践路线
记住,目标是避免在描述中只包含“数据”一词的工作陷阱。
现在你已经明确了需要的技能,可以开始寻找能提供学习这些具体技能的平台的工作。
你应该这样做:
- 寻找与你技能发展目标一致的工作。浏览职位描述以了解要求。避免那些无法促进你技能发展的职位——无论公司有多么吸引人。
如果你想成为 FAANG 公司的数据科学家,这非常合适。它涵盖了你需要的所有顶级技能(实验、数据可视化、统计、跨职能协作、业务参与),这是你想要瞄准的公司类型,无论其规模或声誉如何 — (图片来源:作者)
- 如果不清楚,可以尝试在 LinkedIn 上联系该公司的员工,询问他们学习了哪些技能以及如何在工作中应用这些技能。
我发送了数十封这样的邮件,但从未收到回复,但它们仍然值得发送。随着时间的推移,我通过联系最有可能回复我的人获得了回复(因为消息是法语的,所以不共享这些)— (图片来源:作者)
- 通过与在你所期望行业或领域工作的人建立联系来构建专业网络。参加会议、网络研讨会或本地聚会,以扩大你的联系。
我曾经花了 1000 美元,从纽约市飞往亚利桑那州的凤凰城,参加一个 STEM 会议,许多大科技公司在这里与学生见面、面试并招聘他们。尽管那时我还处于数据科学训练的早期阶段,工作表现平平,但我尽全力发挥了人际网络的作用。我甚至结识了一位谷歌员工,后来通过 LinkedIn 与他建立了联系,并获得了对我其中一个谷歌申请的推荐信。这个故事的教训是什么?你永远不知道下一个帮助你的人是谁。这位先生给了我宝贵的建议,这本身就是一种胜利!— (图片来源:作者)
-
当你收到工作邀请时,要仔细评估它们。考虑诸如技能增长机会、指导和整体与职业目标的契合度等因素。如何做?在面试期间提问,你也在面试他们。否则,可以联系那里的现有员工。
-
不要妥协。
并非所有雇主都适合你
想象一下——在加入 Spotify 的五个月前,我还在盯着电脑屏幕,认为我的努力不会有回报。即使进入了顶尖学校,我仍然被刚起步的创业公司拒绝了。
我曾以为自己不够好,但其实只是我不适合他们,这完全没问题。
记住,并不是每个雇主都会觉得你有吸引力,目标是找到那个会觉得你有吸引力的人。不要让拒绝影响你的自我认知,也不要让冒名顶替综合症渗入。每次拒绝都会让你觉得自己永远不会足够好。
保持韧性——我知道这听起来有些老套,但这是真实的。这是最终一步。你必须继续为梦想奋斗,即使感觉努力没有成果。否则,一切都将付诸东流。
哭泣是可以的,只要确保在按下你辛苦准备的申请表时一起流泪。
挫折是你旅程中的自然部分,这正是它们美丽的地方。把它们当作推动你前进的燃料,而不是拖住你的锚。
免责声明——最后的一个重要提示
你是刚刚开始职业生涯吗?(如果不是,请跳到下一条)
我不久前还处于那个状态,因此我深刻理解你现在可能感受到的兴奋与焦虑。
当你刚起步时,通常会觉得应该抓住任何出现的工作机会。你可能觉得连挑剔工作的奢侈都没有,应该对找到一份工作感到足够感激。
再想一想!如果你在权衡一个大牌公司提供的少量相关技能发展和一个较不知名但实际能提升你技能的公司,我的建议是?选择那个还没人听说过的。我曾经这样做过一次。
在获得 Spotify 实习机会之前,我有两个公司的邀请:以《刺客信条》闻名的 Ubisoft 和巴黎的小型咨询公司 Polynom。出乎意料的是,我选择了 Polynom,因为它更符合我当时的技能发展目标。
记住,你正在规划通往理想工作的路线。重要的是要始终关注那个目标。这通常是实现你为自己设定的重大职业目标的最快途径。
一旦你磨练了技能并获得了必要的经验,你将处于更有利的位置,能够瞄准更大的公司甚至是你的梦想公司。
还是你已经在这个领域有了大量的经验?
那也是完全没问题的,不用担心。如果你在寻求职业上的改变或提升,现在还不算晚。
在 Spotify,我遇到了许多数据科学家,他们在转行之前甚至没有在这个领域待过几年。他们花时间,专注于培养正确的技能,然后在准备好时才去 Spotify。
记住,找到理想的工作可能需要几个月甚至几年。这正是为什么我如此强调聪明和策略性地行事——为了给你额外的推动力并加快进程。
遵循我在这篇文章中分享的策略,应该能帮助你顺利迈向梦想工作!
面对安于现状的诱惑时,请记住:
实现梦想工作的道路可能充满挑战,但回报是无尽的。现在选择简单的路线可能会导致未来长期的遗憾。
争取你想要的。
对我来说,每一次我不想要的工作的拒绝都是一种隐藏的祝福。它迫使我重新评估最佳选项,并重新校准策略以实现我想要的未来。
而且它有效,没理由它对你不起作用。如果你实施这些策略,你将弥补技能差距,迈向你的梦想工作。
保持韧性;不要满足于现状,继续争取你想要的。你的梦想工作不是遥不可及的梦想,它是一个触手可及的目标。
你想知道为什么现在很难找到数据科学的工作以及你可以做些什么吗?
这里有一个完整的指南来应对当前的数据职位市场 + 4 种经过验证的策略来战胜所有困难。
为什么现在很难找到数据科学的工作以及你可以做些什么
towardsdatascience.com
我为你准备了礼物🎁!
注册我的newsletter K’s DataLadder,你将自动获得我的终极 SQL 备忘单,其中包含我在大型科技公司工作中每天使用的所有查询 + 另一个秘密礼物!
我每周分享作为科技行业数据科学家的经历,以及实用的技巧、技能和故事,旨在帮助你提升水平——因为没有人真正知道,直到他们亲身体验!
如果你还没有这样做
很快见!
为什么以及如何实现更长的 LLM 上下文窗口
·
关注 发布于 Towards Data Science ·7 min read·2023 年 10 月 13 日
–
语言模型(LLMs)在过去几年中彻底改变了自然语言处理(NLP)领域,在各种任务中取得了最先进的成果。然而,开发和改进这些模型的一个关键挑战在于延长它们的上下文长度。这非常重要,因为它决定了模型在生成输出时可用的信息量。
然而,增加 LLM 的上下文窗口并非易事。实际上,这会带来计算复杂度的增加,因为注意力矩阵呈二次方增长。
一种解决方案可能是用相对较小的窗口(例如 4K 个令牌)在大量数据上训练模型,然后在更大的窗口(例如 64K 个令牌)上进行微调。这一操作并不简单,因为尽管上下文长度不会影响模型的权重数量,但它确实影响这些权重在令牌稠密表示中如何编码位置的信息。
这减少了模型在长上下文窗口下适应的能力,即使在微调之后也会导致性能不佳,因此需要新的技术来正确和动态地编码位置的信息,在训练和微调之间。
绝对位置编码
在 transformers 中,每个令牌的位置信息在令牌输入到注意力头之前被编码。这是一个关键步骤,因为与 RNN 不同,transformers 不会跟踪令牌的位置。
原始 transformer 架构 [1] 将位置编码为与令牌嵌入相同形状的向量,以便它们可以相加在一起。特别是,他们使用了一个 cos/sin 波的组合,其长度从低维到高维嵌入的顺序递增。
图片由作者提供
这种方法允许对所有令牌位置进行高效的唯一稠密表示。然而,它不能解决扩展上下文长度的挑战,因为这些表示不能有效地编码令牌的相对位置。
为了了解为什么会发生这种情况,我们来关注一对连续的维度。如果我们在图表上绘制它们,我们可以将令牌和位置嵌入表示为二维向量,如下图所示:
图片由作者提供
上图包含两个图表:左侧是嵌入空间,右侧是键/查询空间。嵌入向量是黑色的,位置向量是蓝色的,它们的和用绿色表示。
为了从嵌入转到键(K)和查询(Q),transformer 应用了由两个矩阵Wq 和Wk 定义的线性变换。由于线性性质,该变换可以在嵌入和位置向量之间分别应用。在 KQ 空间中,注意力作为键和查询之间的点积计算,图中用黄色区域表示在两个绿色向量之间。
由于旋转的混合方式不同,基于令牌和位置嵌入的原始方向,以及它们在变换中的缩放方式,模型无法直接访问令牌之间的相对距离。
同样重要的是,在这种情况下,加法是在变换之前应用的,而不是反过来,因为位置嵌入需要通过线性层进行缩放。
相对位置编码
为了高效编码标记之间的相对位置信息,已经提出了其他方法。我们将重点关注RoPE [2],即Rotary Position Embedding,已经为更长的上下文窗口提出了扩展方法。
RoPE 的两个主要创新是:
-
使用 RoPE,我们可以使键和值嵌入之间的点积仅对它们的相对距离敏感。
-
位置嵌入被乘以标记的嵌入,而无需固定大小的查找表。
为了实现这一目标,首先,我们将标记的嵌入从实际的 D 维空间映射到一个复数 D/2 维空间,并在该空间中应用旋转。
再次考虑一对连续的维度。如果我们将它们绘制在复数平面上(将第一个设置在实轴上,第二个设置在虚轴上),我们可以将标记嵌入表示为复数向量,如下图所示:
图片来源:作者
在这里,位置编码获得了新的含义,实际上,它们变成了直接应用于向量的旋转。这一变化使它们能够唯一地编码标记的位置,并在线性变换中得到保留。
这一最后的特性对于在注意力计算中纳入相对位置至关重要。实际上,如果我们考虑未旋转(黑色)和旋转(绿色)版本的kₙ 和 qₙ₊ₖ 之间的注意力,如右侧图表中分别由橙色和黄色角度表示,我们可以注意到一些有趣的现象:
图片来源:作者
旋转的键和值之间的注意力仅因其位置差异成比例地不同于未旋转版本!
这一新特性使得使用 RoPE 训练的模型显示出快速收敛和更低的损失,并且是一些流行技术的核心,这些技术可以将上下文窗口扩展到训练集之外。
到目前为止,我们始终保持嵌入维度固定,但为了看到整个框架,还需要观察沿该方向发生的情况。
图片来源:作者
RoPE 公式定义了第 d 维的旋转角度,与 exp(-d) 成正比。因此,正如我们在上图中看到的,随着 d 的增加,应用于嵌入向量的旋转呈指数下降(对于固定的 n 和位置)。这一特性使模型能够通过从低维到高维,转变嵌入中编码的信息类型,从低频(近标记关联)到高频(远标记关联)。
RoPE 扩展
一旦我们有效地将相对位置信息整合到模型中,增加我们 LLM 的上下文窗口 L 的最直接方法是通过位置插值(PI) [3]进行微调。
这是一种简单的技术,将标记的位置缩放以适应新的上下文长度。例如,如果我们决定将其翻倍,所有位置将被缩小一半。特别地,对于我们想要实现的任何上下文长度 L* > L,我们可以定义一个缩放因子s = L/ L* < 1。
尽管这种技术通过在相对较少的标记上进行微调成功地扩展了 LLM 的上下文,并显示了有希望的结果,但它也有其自身的缺点。
其中之一是,它在对较大上下文进行微调后,略微降低了短上下文大小的性能(例如,困惑度增加)。这个问题发生是因为通过缩放s < 1 标记的位置(以及它们的相对距离),我们减少了对向量的旋转,导致高频信息的丧失。因此,模型较难识别小旋转,从而难以确定接近标记的位置信序。
为了解决这个问题,我们可以应用一种巧妙的机制,称为NTK-aware [4]位置插值,它不是将每个 RoPE 维度均等地缩放s,而是通过对高频率缩放较少,对低频率缩放较多来分散插值压力。
其他 PI 扩展方法还包括NTK-by-parts [5]和dynamic NTK [6]方法。前者施加两个阈值,以限制在某些维度上的缩放;后者在推理过程中动态调整s。
最后,由于观察到随着标记数量的增加,注意力 softmax 分布变得越来越“尖锐”(注意力 softmax 的平均熵减少),YaRN [7](Yet another RoPE extensioN method)是一种通过在应用 softmax 之前将注意力矩阵乘以温度因子t来逆转这一过程的方法。
下面是这些方法在位置(旋转次数)和维度(每次旋转的度数)视角下的操作方式。
作者提供的图像
其他方法
最后,如前所述,其他上下文扩展方法也存在,这里简要描述了最流行的一些方法及其操作方式:
-
Alibi [8]:这是一种位置编码的另一种方法,根据键和值的距离来惩罚查询可以分配给键的注意力值。
-
XPos [9]:另一种位置编码方法,它将 RoPE 推广到包括一个缩放因子。
参考文献
-
Vaswani 等人,2017 年。《Attention Is All You Need》。 link
-
Su 等人, 2022. RoFormer:具有旋转位置嵌入的增强型变压器。link
-
Chen 等人, 2023. 通过位置插值扩展大型语言模型的上下文窗口。link
-
bloc97, 2023. NTK-Aware Scaled RoPE 使 LLaMA 模型在无需任何微调且最小化困惑度下降的情况下,能够拥有扩展(8k+)的上下文大小。link
-
bloc97, 2023. 添加 NTK-Aware 插值“分段”修正。link
-
emozilla, 2023. 动态缩放的 RoPE 进一步提升了长上下文 LLaMA 的性能,无需任何微调。link
-
Peng 等人, 2023. YaRN:大型语言模型的高效上下文窗口扩展。link
-
Press 等人, 2022. 训练短,测试长:具有线性偏差的注意力机制实现了输入长度的外推。link
-
Sun 等人, 2022. 一个长度可外推的变压器。link
为什么以及如何在多重假设检验中调整 P 值
在选择相关特征时,通常会使用低于某个阈值的 P 值作为一种方法。以下建议说明了如何正确使用它们。
·
关注 发表在 数据科学前沿 · 9 分钟阅读 · 2023 年 5 月 5 日
–
图片由作者提供。拍摄于加州拉荷亚的 Westfield UTC 购物中心。
多重假设检验发生在我们在多个特征上重复测试模型时,因为随着测试数量的增加,获得一个或多个假发现的概率也会增加。例如,在基因组学领域,科学家们经常想要测试成千上万的基因中是否有任何基因在某个结果中表现出显著不同的活性。或者糖果是否会导致痤疮。
在这篇博客文章中,我们将介绍几种常用的方法,通过调整模型 p 值来考虑多重假设检验:
-
假阳性率(FPR)
-
家庭错误率(FWER)
-
假阳性率(FDR)
并解释何时使用这些方法是有意义的。
这份文档可以总结为以下图像:
图片由作者提供。
创建测试数据
我们将创建一个模拟示例,以更好地理解如何通过各种 p 值操作得出不同的结论。要运行此代码,我们需要安装pandas
、numpy
、scipy
和statsmodels
库的 Python 环境。
为了这个示例,我们从创建一个包含 1000 个特征的 Pandas DataFrame 开始。其中 990 个特征(99%)的值将从均值为 0 的正态分布中生成,这称为空模型。(在下面使用的函数norm.rvs()
中,均值是通过loc
参数设置的。)其余的 1%的特征将从均值为 3 的正态分布中生成,这称为非空模型。我们将用这些特征来表示我们希望发现的有趣特征。
import pandas as pd
import numpy as np
from scipy.stats import norm
from statsmodels.stats.multitest import multipletests
np.random.seed(42)
n_null = 9900
n_nonnull = 100
df = pd.DataFrame({
'hypothesis': np.concatenate((
['null'] * n_null,
['non-null'] * n_nonnull,
)),
'feature': range(n_null + n_nonnull),
'x': np.concatenate((
norm.rvs(loc=0, scale=1, size=n_null),
norm.rvs(loc=3, scale=1, size=n_nonnull),
))
})
对于每个 1000 个特征中的特征,p 值是观察到的值至少如此之大(假设它是从空分布生成的)的概率。
p 值可以通过累积分布(norm.cdf()
来自scipy.stats
)计算,累积分布表示获得一个值等于或小于观察到的值的概率。然后为了计算 p 值,我们计算1 - norm.cdf()
来找到大于观察到的值的概率:
df['p_value'] = 1 - norm.cdf(df['x'], loc = 0, scale = 1)
df
假阳性率
第一个概念称为假阳性率,定义为我们标记为“显著”的空假设的比例(也称为第一类错误)。我们之前计算的 p 值可以按其定义解释为假阳性率:它们是从空分布中获取一个值至少与指定值一样大的概率。
为了说明,我们将应用一个常见的(神奇的🧙)p 值阈值 0.05,但可以使用任何阈值:
df['is_raw_p_value_significant'] = df['p_value'] <= 0.05
df.groupby(['hypothesis', 'is_raw_p_value_significant']).size()
hypothesis is_raw_p_value_significant
non-null False 8
True 92
null False 9407
True 493
dtype: int64
注意,在我们的 9900 个零假设中,493 个被标记为“显著”。因此,假阳性率为:FPR = 493 / (493 + 9407) = 0.053。
FPR 的主要问题是,在实际情况中,我们不知道哪些假设是空的,哪些不是。因此,仅凭原始 p 值(假阳性率)用途有限。在我们的案例中,当非空特征的比例非常小,大多数标记为显著的特征将是空的,因为它们的数量更多。具体来说,在 92 + 493 = 585 个标记为真正(“正”)的特征中,只有 92 个来自我们的非空分布。这意味着大多数或约 84%(493 / 585)的报告显著特征是假阳性!
那么,我们可以对此做些什么?有两种常见的方法来解决这个问题:我们可以计算家庭-wise 错误率(FWER)或虚假发现率(FDR),而不是虚假正率。这些方法都以原始未调整的 p 值集合作为输入,产生一组新的“调整后 p 值”作为输出。这些“调整后 p 值”代表了 FWER 和 FDR 的 上界 估计值。它们可以通过 multipletests()
函数获得,该函数是 statsmodels
Python 库的一部分:
def adjust_pvalues(p_values, method):
return multipletests(p_values, method = method)[1]
家庭-wise 错误率
家庭-wise 错误率是错误拒绝一个或多个零假设的概率,换句话说,就是将真实的零假设标记为非零假设的概率,或看到一个或多个虚假正例的概率。
当仅测试一个假设时,这等于原始 p 值(虚假正率)。然而,测试的假设越多,我们获得一个或多个虚假正例的可能性就越大。估计 FWER 有两种流行的方法:博尼费罗尼和霍尔姆程序。虽然博尼费罗尼和霍尔姆程序都没有对测试在单个特征上运行的依赖性做出任何假设,但它们会过于保守。例如,在所有特征完全相同(相同的模型重复了 10,000 次)的极端情况下,不需要校正。而在其他极端情况下,如果没有特征相关,则需要某种类型的校正。
博尼费罗尼程序
修正多重假设检验的最流行方法之一是博尼费罗尼程序。之所以这种方法流行,是因为它非常容易计算,即使是手动计算也很简单。该程序将每个 p 值乘以所进行的测试总数,或者如果这种乘法会使 p 值超过 1,则将其设置为 1。
df['p_value_bonf'] = adjust_pvalues(df['p_value'], 'bonferroni')
df.sort_values('p_value_bonf')
霍尔姆程序
霍尔姆的程序提供了一种比博尼费罗尼程序更强大的校正方法。唯一的区别在于,p 值并不是全部乘以测试总数(这里是 10000)。而是,每个排序后的 p 值依次乘以递减序列 10000、9999、9998、9997、……、3、2、1。
df['p_value_holm'] = adjust_pvalues(df['p_value'], 'holm')
df.sort_values('p_value_holm').head(10)
我们可以自己验证这一点:输出中的第十个 p 值被乘以 9991:7.943832e-06 * 9991 = 0.079367。霍尔姆的校正也是 R 语言中 p.adjust()
函数调整 p 值的默认方法。
如果我们再次应用 p 值阈值 0.05,我们来看看这些调整后的 p 值如何影响我们的预测:
df['is_p_value_holm_significant'] = df['p_value_holm'] <= 0.05
df.groupby(['hypothesis', 'is_p_value_holm_significant']).size()
hypothesis is_p_value_holm_significant
non-null False 92
True 8
null False 9900
dtype: int64
这些结果与我们将相同阈值应用于原始 p 值时大相径庭!现在,只有 8 个特征被标记为“显著”,而这 8 个特征都是正确的——它们来自于我们的非零分布。这是因为即使有一个特征被错误标记的概率也只有 0.05(5%)。
然而,这种方法有一个缺点:它未能将其他 92 个非零特征标记为显著。尽管它非常严格,以确保没有零特征被漏入,但它只能找到 8%(100 个中的 8 个)非零特征。这可以被视为比虚假正例率方法采取了不同的极端。
是否有一种更中间的方案?答案是“有”,这种中间方案就是虚假发现率。
虚假发现率
如果我们可以接受一些虚假正例,但希望捕获更多的真正正例,而不仅仅是个位数的百分比呢?也许我们可以接受一些虚假正例,只要这些虚假正例不会淹没我们标记为显著的所有特征——就像在 FPR 示例中那样。
这可以通过在指定的阈值水平(例如 0.05)下控制虚假发现率(而不是 FWER 或 FPR)来完成。虚假发现率定义为所有被标记为正面的特征中虚假正例的比例:FDR = FP / (FP + TP),其中 FP 是虚假正例的数量,TP 是真正正例的数量。通过将 FDR 阈值设置为 0.05,我们表示我们接受在所有被标记为正面的特征中有 5%(平均)虚假正例。
控制 FDR 有几种方法,我们将在这里描述如何使用两种流行的方法:Benjamini-Hochberg 和 Benjamini-Yekutieli 程序。这两种程序虽然比 FWER 程序更复杂,但仍然类似。它们仍然依赖于对 p 值进行排序、乘以一个特定的数字,然后使用截断标准。
Benjamini-Hochberg 程序
Benjamini-Hochberg (BH) 程序假设每个测试都是独立的。依赖的测试会发生,例如,当被测试的特征之间存在相关性时。让我们计算 BH 调整后的 p 值,并将其与我们之前使用 Holm 校正的 FWER 结果进行比较:
df['p_value_bh'] = adjust_pvalues(df['p_value'], 'fdr_bh')
df[['hypothesis', 'feature', 'x', 'p_value', 'p_value_holm', 'p_value_bh']] \
.sort_values('p_value_bh') \
.head(10)
df['is_p_value_holm_significant'] = df['p_value_holm'] <= 0.05
df.groupby(['hypothesis', 'is_p_value_holm_significant']).size()
hypothesis is_p_value_holm_significant
non-null False 92
True 8
null False 9900
dtype: int64
df['is_p_value_bh_significant'] = df['p_value_bh'] <= 0.05
df.groupby(['hypothesis', 'is_p_value_bh_significant']).size()
hypothesis is_p_value_bh_significant
non-null False 67
True 33
null False 9898
True 2
dtype: int64
BH 程序现在正确地将 100 个非零特征中的 33 个标记为显著——相比于 Holm 校正的 8 个,这是一种改进。然而,它也将 2 个零特征标记为显著。因此,在 35 个标记为显著的特征中,不正确特征的比例是:2 / 33 = 0.06,即 6%。
请注意,在这种情况下,我们的 FDR 率为 6%,尽管我们旨在将其控制在 5%。FDR 将以 5% 的速率平均控制:有时它可能更低,有时可能更高。
Benjamini-Yekutieli 程序
Benjamini-Yekutieli (BY) 程序在测试是否独立的情况下都能控制 FDR。再次值得注意的是,所有这些程序都试图建立 FDR(或 FWER)的上限,因此它们可能更保守或更宽松。让我们将 BY 程序与上述 BH 和 Holm 程序进行比较:
df['p_value_by'] = adjust_pvalues(df['p_value'], 'fdr_by')
df[['hypothesis', 'feature', 'x', 'p_value', 'p_value_holm', 'p_value_bh', 'p_value_by']] \
.sort_values('p_value_by') \
.head(10)
df['is_p_value_by_significant'] = df['p_value_by'] <= 0.05
df.groupby(['hypothesis', 'is_p_value_by_significant']).size()
hypothesis is_p_value_by_significant
non-null False 93
True 7
null False 9900
dtype: int64
BY 程序在控制 FDR 方面更严格;在这种情况下,甚至比用于控制 FWER 的 Holm 方法更严格,仅标记了 7 个非空特征为显著!使用它的主要优势是当我们知道数据可能包含大量相关特征时。然而,在这种情况下,我们可能还希望考虑过滤相关特征,以便不需要测试所有这些特征。
总结
最后,程序的选择留给用户,取决于分析试图做什么。引用本雅明、霍奇伯格(Royal Stat. Soc. 1995):
通常不太需要控制 FWER。在多个单独推断的结论可能出错时,控制 FWER 是重要的。
例如,在几种新治疗方法与标准进行竞争时,可能会出现这种情况,并且从被声明显著优于标准的治疗方法集合中选择单一治疗方法。
在其他情况下,当我们可以接受一些假阳性时,FDR 方法如 BH 校正提供了不那么严格的 p 值调整,并且如果我们主要想增加通过某个 p 值阈值的真阳性数量,则可能更可取。
还有其他未在此提及的调整方法,尤其是一个q-value,也用于 FDR 控制,在撰写时仅存在作为 R 包。
为什么所有地图都不准确?
原文:
towardsdatascience.com/why-are-all-maps-inaccurate-e566f08d91fe
理解地图投影及其为何被用于一些最受欢迎的地图
·发布在 Towards Data Science ·阅读时间 7 分钟·2023 年 12 月 31 日
–
照片由 Kyle Glenn 提供,发布在 Unsplash 上
我们大多数人知道地球是球形的,或者更准确地说是椭球形的。由于我们必须将一个弯曲的三维表面表示成一个二维的平面或屏幕,这意味着涉及到一些失真。将地球表面“投影”到二维图像上的方法被称为地图投影。
地图投影有数百种,每种投影在形状、距离、面积和方向上都有不同程度的失真。然而,没有任何地图投影能够完全消除这些失真,因此了解每种投影的优缺点对于确定适合你项目的投影是至关重要的。
目录
正射投影
墨卡托投影
横轴墨卡托投影
兰伯特等距圆锥投影
罗宾逊投影
总结
源代码
要可视化各种投影,我们可以使用 Python 库 matplotlib
和 cartopy
。
pip install matplotlib cartopy
本文中创建的大多数世界地图的代码源如下所示。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as feature
# fix maplotlib params
plt.rcParams[‘figure.dpi’] = 175
# projections & borders
CRSs = [ccrs.Orthographic(),
ccrs.Orthographic(central_longitude=0, central_latitude=-90),
ccrs.Mercator(),
ccrs.UTM(zone=29),
ccrs.Robinson(),
ccrs.LambertConformal()]
borders = [(0, 1, 1, 0.05),
(0, 1, 1, 0.05),
(0, 1, 1, 0.05),
(0, 1, 1, 0.05),
(0.05, 1, 1, 0),
(0, 1, 1, 0)]
names = ["ortho", "ortho_southpole", "merca",
"utm", "robin", "lambertc"]
dir = "/Users/jake/Desktop/gis"
for crs, br, name in zip(CRSs, borders, names):
fig, ax = plt.subplots(subplot_kw={‘projection’: crs})
projection_name = str(crs).split(" ")[0]
# Draw countries and coastlines
ax.coastlines(linewidth=0.5)
ax.add_feature(feature.BORDERS, linestyle=’:’, linewidth=1)
# Draw parallels and meridians
gridlines = ax.gridlines(draw_labels=True, linewidth=0.25, color=’gray’, linestyle=’--’)
gridlines.top_labels = False
gridlines.right_labels = False
gridlines.xlabel_style = {‘size’: 7}
gridlines.ylabel_style = {‘size’: 7}
# spacing
plt.subplots_adjust(left=br[0], right=br[1], top=br[2], bottom=br[3])
# border
for spine in ax.spines.values():
spine.set_linewidth(0.5)
# save the map
plt.savefig(f"{dir}/{name}.png")
正射投影
正射投影。(由作者创建)
正射投影是从太空中看地球时最准确的表现。这种投影类型被称为平面投影,其中地球表面被投影到一个平面上的虚拟平面上。
然而,我们只能在这个平面上查看一个半球,且当我们从地图中心移动时,所有形式的失真都会发生,特别是在边缘部位尤为明显。我们很少看到这种投影被使用,除非是为了美学目的或在我们希望为地图注入一些真实感的情况下。
以南极点为中心的正投影。(作者创作)
话虽如此,当我们将焦点转向南极点时,与之后的其他地图相比,南极洲的形状更加准确。用于极地区域制图的另一种更准确的平面投影是立体投影。
墨卡托投影
墨卡托投影。(作者创作)
墨卡托投影由杰拉尔德斯·墨卡托于 1569 年创作,无疑是所有投影中最具识别性的。谷歌地图使用了这种投影的一个变体,称为伪墨卡托或Web 墨卡托。
它受欢迎的原因在于它很好地保留了形状和角度,这对于过去船只的导航以及我们当前使用数字地图应用查看领土边界的形状并进行放大时保持形状完整是至关重要的。
地球的表面投影到一个假想的圆柱体的内部,赤道与圆柱体接触。然后将圆柱体展开以显示为世界地图。CSS 请注意这种墨卡托投影中纬度从赤道越远,扩展越大。(作者创作)
墨卡托投影是一种圆柱投影,赤道接触圆柱体,因此只有赤道沿线的条带在面积上没有失真。距离极点越远,失真就越明显和夸张。
一个很好的例子是,在上面的墨卡托投影世界地图中,你可以看到格林兰的大小与非洲大陆大致相同。但实际上,格林兰的面积只有非洲的 14 分之一,或者仅为非洲面积的 7%!
横轴墨卡托投影
从早期的墨卡托投影中得到的主要结论是,赤道处的失真最小,因为它接触了假想圆柱体。这一知识用于制作另一种非常流行的投影,称为横轴墨卡托。
在横轴墨卡托投影中,只有沿经线接触圆柱体的条带被投影和使用。(作者创作)
与其让圆柱体竖立并接触赤道,不如将其“横切”,以便特定经度长度触及圆柱体。只有这条狭窄的条纹被使用,因为它的失真最小。横切墨卡托投影有许多变体,但投影逻辑类似。区别在于中央子午线(触及圆柱体的经线)的位置和条纹的宽度。
这种独特的狭窄投影区域广泛用于具有南北延展的土地测量,因为其精度高。出于同样的原因,使用米(或在美国使用英尺)作为坐标单位,而不是纬度和经度。
通用横切墨卡托
通常被称为UTM的通用横切墨卡托是横切墨卡托投影中最知名和使用最广泛的。它沿每条经度条纹投影,因此将地球平均分为 60 条经度条纹或区域,每个区域宽度为6 度纬度。
在 Plate Carrée 投影中显示世界上的 UTM 区 1 至 60。(作者制作)
由于每个区域都是独特的投影,我们不能将它们一起显示在世界地图上,而必须使用另一种投影来显示如上所示。如你所见,由于条纹的狭窄,许多国家和州的领土区域会重叠多个 UTM 区。
新加坡横切墨卡托
一些国家使用横切墨卡托的变体。例如,新加坡有其国家投影,称为 SVY21(新加坡垂直基准 2021)。这有意义,因为新加坡是一个微小的国家。虽然它位于 48 号 UTM 区内,但由于不在该区域的中央子午线上,它仍会出现失真。
SVY21 投影的中心参考点,官方称为 BASE7(位于皮尔斯水库第 7 号柱)。(来自 Google Maps 的截图)
对于 SVY21,中央子午线位于新加坡中心,提供了最高的准确性。
兰伯特等距圆锥投影
使用兰伯特等距圆锥投影的世界地图。(作者制作)
使用兰伯特等距圆锥投影的世界地图视图看起来很独特,好像投影在一个 3/4 圆上。
圆锥投影类型。(作者制作)
这是因为它是一种圆锥投影类型,其中圆锥像派对帽一样放置在地球顶部,表面被投影到内部,然后展开。
你可以想象一个圆锥的周长将触及地球的某一点。这条线被称为标准平行线,是投影区域失真最小的线。
普遍使用的美国州地图是使用兰伯特等距圆锥投影创建的。(作者创建)
锥形投影的优势在于我们想要投影位于中纬度的国家,并且这些国家具有东西向的质量分布,而标准纬线正好放置于此。之前提到的平面和圆柱形投影无法准确实现这一点。
此外,兰伯特等距圆锥投影可以在标准纬线上保持角度、形状和方向,因此它被广泛用于为美国、澳大利亚和中国制作地图。
罗宾逊投影
所有前述的投影在减少一种或两种类型的扭曲方面表现优秀,或者仅在有限的范围内表现出色。罗宾逊投影在一定程度上可以减少世界上的所有扭曲。因此,它通常被认为是不同类型扭曲之间的折中方案。
这个投影是由亚瑟·H·罗宾逊于 1963 年创建的,并且曾被国家地理在十年间用作他们的世界地图。
罗宾逊投影。(作者创建)
这也被称为伪圆柱形投影,因为经线被弯曲以减少扭曲。另一种类似的投影是温克尔三重投影,联合国在撰写本文时使用了其世界地图。
总结
本文提到的具体投影可以分为三大类投影表面:平面、圆柱形和锥形。(作者创建)
我展示了一些当今地图中使用的流行投影。它们可以大致分为三大类投影表面,希望你现在能清楚这些投影为何被使用。当然,如果我们更深入地探讨,这将是一个更复杂的话题,但这里展示的基本原理应该足够你自己进一步探索。
进一步阅读
QGIS 3.28 文档:8. 坐标参考系统
docs.qgis.org [## 投影类型 - ArcMap | 文档]
许多常见的地图投影根据所使用的投影表面分类:圆锥形、圆柱形或平面形。
为什么语言模型无处不在?
原文:
towardsdatascience.com/why-are-language-models-everywhere-36d9961dd9e1
答案在于 75 年的 NLP 历史
·发表于 Towards Data Science ·6 分钟阅读·2023 年 5 月 26 日
–
图片由 Romain Vignes 提供,来自 Unsplash
你是否想过我们是如何走到今天的 ChatGPT 和大型语言模型的?答案在于自然语言处理(NLP)本身的发展。所以让我们来谈谈吧。别担心;历史比你想象的更有趣!第一部分将描述 AI 和 NLP 的诞生。第二部分将讨论该领域的主要支柱。第三到第五部分将详细介绍过去 75 年的时间线。最后第六部分,我们将描述这些领域如何汇聚到语言建模中,今天已经变得如此流行!
1 起源
起初,有艾伦·图灵 1950 年的出版物 计算机及智能,他提出了“机器能思考吗?”的问题。该论文常被誉为人工智能的起源。虽然它没有明确讨论自然语言,但为未来的 NLP 研究奠定了基础。这也是为什么 NLP 的最早工作出现在 1950 年代。
NLP 的两个支柱
-
机器翻译:这是当 AI 接收一种语言的句子并输出另一种语言的句子。例如,谷歌翻译。
-
语音处理:AI 接收音频作为输入,并生成相应的文本作为输出。
-
文本摘要:AI 接收一个故事作为输入,并生成一个摘要作为输出。
-
语言建模:AI 接收到一系列单词后,将确定下一个单词。
这些只是其中的一部分。随着时间的推移,各个领域的支柱逐渐趋向于使用语言模型来完成其任务。在接下来的部分,我们将深入探讨每个时间线。
图 1:NLP 主要支柱的时间线(图像由作者提供)
3 机器翻译
基于规则的系统:1954 年出现了乔治城 IBM 实验,用于冷战时期的俄语到英语翻译。这个想法是将翻译任务分解为一组规则,以便将一种语言转换为另一种语言,即基于规则的系统。另一个早期的基于规则的系统是耶霍舒亚·巴尔-希勒尔的“分析引擎”,用于将希伯来语翻译为英语。
统计方法:规则基础系统的问题在于它们做了大量假设。问题越复杂,这些假设就越成问题。翻译是复杂的。从 1980 年代起,随着我们获取了更多的双语数据和统计方法的逐步完善,我们开始将这些统计模型应用于语言翻译。一种被称为统计机器翻译(SMT)的范式变得流行。SMT 范式将问题分解为两个子问题:翻译问题和语言建模问题。
神经方法:自 2015 年起,SMT 已被神经机器翻译取代。这些方法利用神经网络直接学习翻译任务。它们包括递归神经网络的发展,最终发展为 Transformer 模型。随着像 GPT 这样的模型的引入,基线预训练模型变成了语言建模,并通过翻译进行微调。
4 语音处理
基于规则的系统:语音处理的起点也可以追溯到 1950 年代和 60 年代,那时能够识别单个数字和单词。例如,贝尔实验室的 Audrey 识别数字,而 IBM 的Shoebox则执行语音命令下的算术运算。
统计方法:然而,将语音转换为文本是一个复杂的问题;存在不同的方言、口音、音量。因此,将这个复杂问题分解为子问题是一个解决方法。大约在 70 年代,隐马尔可夫模型被引入后,语音到文本的复杂问题可以被分解为三个更简单的问题:
-
语言建模:我们可以确定单词和句子的顺序。这些是n-gram 模型。
-
发音建模:这是为了将单词与音素关联起来。这些本质上是简单模型或甚至是表格。
-
声学建模:我们理解语音与音素之间的关系。这些是带有高斯混合模型的隐马尔可夫模型。
这三部分被单独训练,然后一起使用。但这也带来了自身的复杂性。
神经网络方法:在 2000 年代初,我们看到这些技术被神经网络所取代。随着大规模文本语料库的出现,神经网络开始超越其他所有方法。它们实现了端到端的语音转文本。因此,我们可以直接优化从输入语音生成文本的目标;这带来了更好的性能。随着领域的发展,我们进入了递归网络、卷积神经网络,并最终细化了预训练语言模型。
5 文本摘要
基于规则的系统:研究始于 Luhn 在 1958 年发表的The automatic creation of literature abstracts,该研究通过词频来排名句子的的重要性。这种方法从原文中选择句子来构建总结;相应的总结被称为“基于提取的总结”。该领域的下一个重大突破出现在 1969 年,Edmonson 的论文New methods of automatic extractive中。他声称句子的重要性不仅取决于词频,还取决于其他因素,如句子在段落中的位置;句子是否包含某些提示词;或者句子是否包含标题中的词。在 1980 年代,我们尝试不使用原始句子来总结文本。这些是“抽象总结”。FRUMP(快速阅读和理解记忆程序)和 SUSY 是早期的这种系统的实现。然而,它们也依赖于手工制作的规则,且总结质量不高。
统计方法:在 90 年代和 2000 年代,我们使用统计方法构建分类器,以确定一个句子是否应该被包含在总结中。这些分类器可以是逻辑回归、决策树、SVM 或任何其他统计模型。
神经网络方法:自 2015 年起,神经网络随着A neural attention model for abstractive sentence summarization.的引入产生了影响。这种方法生成的抽象总结通常是非常简短的标题。然而,LSTM 单元的加入以及sequence-to-sequence 架构使得处理更长输入序列和生成合适总结成为可能。从那时起,该领域采取了与机器翻译相同的方法,并使用了我们今天看到的预训练和微调架构。
6 将一切整合起来
前面讨论的多个支柱的历史展示了一些共同的模式。
规则基础系统在 1950 年代和 60 年代的早期 AI 中占据主导地位。到 70 年代,我们看到了统计模型的引入以解决这些问题。然而,由于语言的复杂性,这些统计模型会将复杂任务拆解为子任务来解决这些问题。随着 2000 年代更多数据和更好硬件的出现,神经网络方法逐渐兴起。
神经网络可以端到端地学习复杂的语言任务,因此比统计方法表现更好。Transformer 神经网络 于 2017 年推出,能够有效地学习解决语言任务。但由于它们需要大量的数据来有效地训练模型,BERT 和 GPT 被引入并使用了迁移学习的概念来学习语言任务。这里的想法是,对于那些对语言本身有一定基础理解的系统,语言任务并不需要大量数据。例如,GPT 通过首先理解语言建模,然后在特定语言任务上进行微调,从而获得这种“语言理解”。这就是为什么现代 NLP 核心都趋向于使用语言模型的原因。
希望你现在明白为什么像 ChatGPT 这样的大型语言模型如此重要,以及为什么我们到处都能看到语言建模。到达这一点花费了近一个世纪的时间。有关 NLP 和语言建模的更多详细信息,查看这个视频播放列表,它深入探讨了该领域的不同概念。祝你学习愉快!
为什么随机实验是因果推断中的黄金标准?
理解实验中的识别假设
·
关注 发表在 Towards Data Science ·7 分钟阅读·2023 年 3 月 7 日
–
图片由 takaharu SAWA 提供,来源于 Unsplash
没有假设的因果推断是不可能的。每一种可用的方法都需要不可测试的假设,以从数据中观察到的关联中建立因果关系。因此,陈述识别假设并为其辩护是因果推断中最关键的方面,但这也是最被忽视的方面。
在我之前的文章中,我们通过描述什么是识别以及为什么它在因果推断中优先于估计来开始讨论这个话题。提醒一下,识别本质上包括清晰地陈述从数据中获得的统计估计需要的假设,以便这些估计可以被赋予因果解释,并在我们的因果分析中为这些假设辩护。接下来我们讨论随机实验中的识别,即因果推断中所有识别策略中的黄金标准。
提升你的因果智商,通过掌握识别建立对因果推断的信任
实验在其他识别策略中为何具有特殊地位?这有两个原因。首先,良好开展的实验只需最少的识别假设来确定因果关系。其次,这些假设比其他方法所需的假设更为合理。这两个事实的结合增加了随机实验中因果推断的可信度。
为了帮助讨论,我们再次考虑一个简单的案例,其中两个处理条件由一个二元随机变量描述,Ti=[0,1],结果由Yi表示。我们感兴趣的是找到平均处理效应(ATE),即期望值之间的差异:
其中 Yi1 表示如果被试 i 接受治疗的潜在结果,而 Yi0 表示如果被试 i 不接受治疗的潜在结果。如果潜在结果的含义不清楚,我强烈建议你阅读上述链接的文章。你将看到一个具体的例子,这将帮助你理解本文的其余部分。
由于我们仅能访问样本而不是整个总体,我们只能观察到条件期望 E[Yi|Ti=1] 和 E[Yi|Ti=0],即我们数据中看到的处理组和对照组的期望结果。
现在,为了声称我们通过条件期望的差异得到的是 ATE,即我们的因果估计量,我们需要展示这些差异等同于无条件期望。做到这一点的方法是通过提出假设并使我们的观众相信它们在我们特定背景下的合理性。
识别部分 1:陈述假设
在随机实验中,识别假设如下:
**1. 独立性:**潜在结果与治疗状态独立。
2. SUTVA(稳定单位处理价值假设):(1)没有互动效应,意味着一个单位收到的处理不会影响另一个单位的结果。(2)没有隐藏的处理变异,只有施加在特定受试者上的处理水平可能会影响该受试者的结果。
从技术上讲,除了两个识别假设之外,我们还假设实验对象之间没有系统性流失和不遵守情况。
有了这些假设,我们可以如下编写观察结果的期望值:
这使我们能够利用数据中处理组和对照组的结果来获得 ATE:
另一种观察这些假设如何发挥作用的方式是查看以下分解:
独立性假设有效地消除了偏差项,我们剩下的是 ATT(对处理组的平均处理效应),这相当于 ATE。
识别部分 2:捍卫假设
这种识别策略的直接后果是它允许我们
断言处理组和对照组在所有方面(可观察和不可观察)都是相同的,除了处理分配的差异。
此外,如果我们有一个良好实施的实验且受试者之间没有系统性流失,那么说服我们的观众接受识别假设的有效性将容易得多。
为了使事情更具体,我们用一个模型来描述结果、Yi、处理Ti和协变量Xi之间的关系,并且为了简化起见,我们假设它是线性的:
P协变量可能非常大,包括对结果的其他线性影响的观察或未观察到的影响,Bi是个体处理效应,即两个潜在结果Yi1 — Yi0之间的差异。我们没有观察到这一效应,但通过从处理组的平均结果中减去对照组的平均结果,我们得到了这个:
这表明当所有其他效应对结果的均值差异相同时,我们通过均值差异获得我们想要的结果。
这两组是相同的。
这是完美平衡的情况,随机化通过构造保证了这一点,因为它为我们因果模型中其他P因果因素提供了正交性。换句话说,我们知道在确定处理分配时除了掷硬币之外没有使用其他方法。
仍然存在对内部有效性的威胁,这可能会削弱我们的因果推断。首先,SUTVA 的违背,即两个组之间的受试者相互作用,在许多社会和经济应用中可能会发生。如果发生这种情况,我们所做的比较将不再是处理组和对照组之间的比较,而是处理组和部分处理组之间的比较。
其次,由于共同原因排除混淆是有期望保证的,这意味着处理组和对照组仅在处理分配上有所不同而在其他方面没有差异的概率,随着样本量的增加而变得任意更高。在给定样本中,特别是如果样本较小,其他原因的净效应可能不为零,这可能会偏倚 ATE。
因此,在分析实验之前,检查处理组和对照组样本中的观测值平衡总是一个好的做法。通常,这通过计算标准化差异作为分布差异的无尺度度量来完成,而不是使用 t 统计量。具体而言,对于每个协变量,我们报告按处理状态划分的平均差异,按方差和的平方根进行缩放:
其中 S1²、S0² 分别是处理组和对照组的样本方差。作为一个经验法则,大于 0.10 的差异可能表明不平衡,这将要求在分析中进行协变量调整。
然而,请注意,我们没有办法测试实验中是否排除了共同的不可观测原因。我们只是简单地假设如果在观测值中达成平衡,那么它在不可观测值中也有可能保持平衡。但这可能并非如此,尤其是在小样本中。
我们还需要注意实验结果的普遍适用性,即其外部有效性。重要的是认识到实验使我们能够在研究所用的人群中识别处理效应。此外,除非实验旨在测量长期效应,否则估计的 ATE 通常适用于短期。通常将实验中的估计视为真理,不仅仅在研究样本中,更广泛地应用,但这可能并不有效。
有许多案例中,企业决定根据一个市场、样本或时间段的实验结果来扩展操作,但由于这些结果未被证明是普遍适用的,因此失败了。一般来说,为确保有效的外推,我们需要随机抽样以及处理的随机化,或额外的假设。例如,如果我们有一个在线实验,为确保结果对预定位置的所有用户都是普遍适用的,我们需要通过在一天内和一周内随机抽样访问者来消除星期几和时间的影响。
结论
因果推断的困难在于其固有的不确定性,只要我们提高对最关键部分——识别的理解,就可以取得进展。随机实验需要的识别假设比其他任何识别策略都少。而且,这些假设在实验中更加可信。这两个特征共同使实验在因果推断中赢得了金标准的地位。然而,如果实验未能正确进行,它们仍可能缺乏内部效度,并且将实验发现推广到其他情境也存在挑战。
感谢阅读!希望你觉得这值得你的时间。
我努力为从事因果推断方法和应用以及营销数据科学的实践者编写高质量和有用的文章。
如果你对这些领域感兴趣,可以关注我,并随时分享你的评论/建议。
参考文献
[1] L. Keele, 因果推断统计:来自政治方法论的视角(2015),政治分析。
[2] A. Lewbel, 计量经济学中的识别意义:识别动物园 (2019),经济文献期刊。
[3] G. W. Imbens 和 J. M. Wooldridge, 项目评估计量经济学的最新进展,(2009),经济文献期刊。
[4] J. List, 《电压效应:如何将好想法变成伟大想法并使其扩展》,(2022)。
为什么回测重要以及如何正确进行
原文:
towardsdatascience.com/why-backtesting-matters-and-how-to-do-it-right-731fb9624a
我们如何知道我们的预测模型是否准确可靠,并评估其在未见数据上的表现?这就是回测的作用所在。
·发表于Towards Data Science ·阅读时间 7 分钟·2023 年 7 月 18 日
–
“回测”,由Giulia Roggia。经许可使用。
-
什么是回测?
-
Python 示例:航空乘客
-
结论
什么是回测?
为了评估预测模型的表现,我们使用一种称为回测的程序(也称为时间序列交叉验证)。回测本质上是测试模型在过去使用时的表现。
它是如何工作的?
要对时间序列预测模型进行回测,我们首先将数据分为两部分:训练集和验证集(有时也称为测试集,但我们将在接下来的部分澄清其差异)。训练集用于训练模型,而测试集用于评估模型在未见数据上的表现。模型训练完成后,可以用它对测试集进行预测。然后可以将这些预测与实际值进行比较,以查看模型的表现。
我们如何衡量模型的表现?
有多种指标可以用来评估时间序列预测模型的表现,如平均绝对误差(MAE)或均方根误差(RMSE)。这些指标衡量预测值与实际值的接近程度。
该程序通常会重复多次,允许我们:
-
对模型表现有一个良好的估计
-
视觉化模型表现随时间的演变
下面我们展示了回测过程的图形表示,使用了 3 个分割:
使用扩展窗口的回测。图像由作者提供。
在上图中,我们只展示了 3 个不重叠的验证时期。然而,没有什么阻止我们使用更多部分重叠的窗口,可能每个时间步一个。
为什么回测很重要?
如果模型在测试集上表现良好,你可以对其在未来做出准确预测的能力更有信心。通过回测时间序列预测模型,你可以了解它在历史数据上的表现,并对如何在未来使用它做出更明智的决策。
如何利用回测来改进我们的模型?
回测还可以用于改进我们的模型,例如通过调整超参数或特征选择。在这种情况下,由于我们通常会选择表现最佳的组合,我们的度量估计可能会过于乐观。如果我们想获得一个不偏倚的性能估计,我们应该在两个不同的连续时期进行两次回测:
-
第一次回测用于调整超参数,选择最佳特征,通常做出构建我们“最终”模型所需的所有选择。用于评估这个时期内预测的分割称为验证集。
-
第二次回测用于对最终选择的模型进行性能估计。它应该在用于验证之后的时期进行。用于评估这个时期内预测的分割称为测试集。
回测变体
扩展或固定训练窗口?
在前面的图中,我们可以看到训练窗口的大小在扩大。另一种选择是使用固定大小的时间窗口作为训练集,如下图所示。
使用固定窗口的回测。图像来源于作者。
使用固定窗口的缺点是模型使用的数据较少进行训练,但如果数据非常动态,最新数据可能比旧数据更具信息量,这种做法可能更为便利。一般来说,窗口大小可以看作是一个超参数,可以通过回测进行调整。
训练截止与特征截止
需要记住的一点是,用于训练模型的数据和用于构建输入特征的数据是两个不同的概念。
原则上,我们可以有与数据中的时间步数一样多的分割。然而,为每个时间步重新训练模型可能会耗时且计算密集。在实践中,通常使用的替代方法是较少频繁地训练模型,例如每隔N时间步训练一次,并在每个时间步用最新的模型进行预测。数字N也可以通过回测进行调整。
最后,请注意,在本文中,我们为了简便考虑了单一时间序列。然而,相同的概念可以应用于对多个时间序列进行预测的模型(如果您对这个话题感兴趣,可以查看这篇文章)。
示例:航空乘客
图片由 Lars Nissen 来自 Pixabay
在本节中,我们展示了一个简单的 Python 回测实现,使用了航空乘客数据集,该数据集在Darts上提供,采用 Apache 2.0 许可证。
让我们首先导入必要的库。
import pandas as pd
import plotly.graph_objects as go
from lightgbm import LGBMRegressor
数据准备
数据集包含了从 1949 年到 1960 年的国际航空乘客月度总数。让我们加载并准备数据。
# Load data.
data = pd.read_csv('https://raw.githubusercontent.com/unit8co/darts/master/datasets/AirPassengers.csv')
# Rename columns.
data = data.rename(columns = {"Month": "time", "#Passengers": "passengers"})
# Set time to datetime.
data.time = pd.to_datetime(data.time)
# Set time as index.
data = data.set_index("time")
让我们快速查看一下数据:
# Let's visualize the data.
def show_data(data,title=""):
trace = [go.Scatter(x=data.index,y=data[c],name=c) for c in data.columns]
go.Figure(trace,layout=dict(title=title)).show()
show_data(data,"Monthly totals of international airline passengers")
图片由作者提供。
我们可以看到数据展示了强烈的上升趋势和年度季节性。
数据工程
基于以下内容,让我们预测下个月的值:
-
一些滞后值:前 3 个月,加上 6/12/24 个月前的值
-
当前月份(作为分类特征,以帮助处理季节性)
def build_target_features(data, lags, horizon=1):
# Build lagged features.
feat = pd.concat(
[
data[["passengers"]].shift(lag).rename(
columns={"passengers": f"lag_{lag}"}
)
for lag in lags
],
axis=1,
)
# Build month feature.
feat["month"] = [f"M{m}" for m in data.index.month]
feat["month"] = feat["month"].astype("category")
# Build target at horizon.
targ = data["passengers"].shift(-horizon).rename(f"horizon_{horizon}")
# Drop missing values generated by lags/horizon.
idx = ~(feat.isnull().any(axis=1) | targ.isnull())
feat = feat.loc[idx]
targ = targ.loc[idx]
return targ, feat
# Build targets and features.
target, features = build_target_features(
data,
lags=[0,1,2,5,11,23],
horizon=1,
)
回测实现
让我们实现一个简单而通用的回测函数。该函数接受模型和数据作为输入,以及用于开始训练窗口和重新训练的频率的两个参数。我们使用扩展的训练窗口,并在开始窗口之后的每一个时间步做出预测。
def run_backtest(
model,
target,
features,
start_window = 10,
retrain_frequency = 6,
):
"""Simple backtesting implementation.
Args:
model: A model with fit and predict methods.
targets: Series with the target in chronological order.
features: Dataframe with the features in chronological order.
start_window: The initial window to train a model.
retrain_frequency: How often to retrain the model.
Return:
A dataframe with the validation target and prediction.
"""
# Sanity check on shape
assert features.shape[0] == target.shape[0]
all_preds = []
all_targets = []
last_timestep = start_window
while last_timestep < len(target):
# Split train/valid
targ_train = target.iloc[:last_timestep]
feat_train = features.iloc[:last_timestep]
targ_valid = target.iloc[last_timestep:last_timestep+1]
feat_valid = features.iloc[last_timestep:last_timestep+1]
# Train the model
if last_timestep==start_window or last_timestep % retrain_frequency == 0:
model.fit(feat_train,targ_train)
# Predict on valid set
pred_valid = model.predict(feat_valid)
# Save the output
all_preds.append(pred_valid[0])
all_targets.append(targ_valid)
# Process next timestep
last_timestep += 1
# Format output
output = pd.concat(all_targets).rename("target").to_frame()
output["prediction"] = all_preds
return output
上述代码可以通过多种方式扩展。例如,您可以允许使用固定的训练窗口,或通过使用矢量化和/或并行化来提高效率。然而,我们建议从简单开始,仅在必要时增加复杂性。
现在我们可以将回测函数应用到我们的数据上,并检查回测性能。
# Apply run_backtest to our data.
output_backtest = run_backtest(
LGBMRegressor(min_child_samples=1, objective="mae"),
target,
features,
start_window = 36,
retrain_frequency = 6,
)
# First, let's visualize the data.
show_data(output_backtest,"Backtested predictions at horizon 1")
# Then, let's compute the MAE.
MAE = abs(output_backtest.prediction - output_backtest.target).mean()
print(f"MAE: {MAE:.1f}")
这给出了 25.6 的 MAE 以及下图。
图片由作者提供。
此示例中使用的完整代码可在 这里获取。
结论
回测是时间序列预测中的一个关键步骤,它允许您评估模型在未见数据上的准确性和可靠性。通过遵循一些最佳实践并使用适当的回测方法,您可以提高模型的性能,避免常见的陷阱。
喜欢这篇文章吗? 看看我的其他文章 并关注我以获取更多内容! 点击这里 阅读无限制的文章,并在没有额外费用的情况下支持我❤️
为什么卷积?理解卷积和深度网络中的特征提取
1D/2D 卷积的解释、它在特征学习中的作用及一个可视化工具
·发表于 Towards Data Science ·9 分钟阅读·2023 年 2 月 5 日
–
图 1: 1D/2D 卷积及交互式可视化工具(来源:作者)
如今,构建深度神经网络时常常会用到一组卷积层。然而,早期的神经网络和其他机器学习框架并没有使用卷积。特征提取和学习曾经是两个独立的研究领域,直到最近。这就是为什么理解卷积的工作原理及其在深度学习架构中占据重要位置的原因。在这篇文章中,我们将深入探讨卷积,你将能够通过一个交互式工具更深入地理解这个概念。
引言
卷积是通过应用另一个函数来改变一个函数的形状的过程。这是一种对两个函数进行的操作,就像其他算术操作一样,然而它作用于函数而不是函数值。因此,它产生一个第三个函数作为结果。更正式地说,卷积 *C=f(x)g(x) 是函数 f 和函数 g 之间的一种操作,由卷积算符 ***** 表示。在数学公式中,卷积是函数 f 与函数 g 的乘积的积分,其中函数 g 在 x 轴上被镜像并按时间步 t 进行平移。
注意,输出函数是t的函数,而输入函数f是x的函数。执行了一定数量的时间步长 —— 通常等于f函数值的样本数。在每个时间步长上,卷积函数通过将G的函数值作为权重来计算函数f曲线下的面积。t的符号决定了移动的方向。对于t的正值,移动方向是朝向 + ∞,而对于负值,移动方向是朝向 — ∞。直观地说,卷积函数提供了f函数值的加权移动平均。
卷积算子也可以被看作是一种积分变换。在微积分中,积分变换是一种将输入函数f与内核函数K结合应用的函数变换T。
数据样本的卷积
内核函数的设计决定了变换的输出。最常使用的是对称内核函数,这使得方程中的乘积具有交换性。内核函数的大小决定了卷积的扩展范围。较大的内核大小包含更多的邻近点,并且输出受大量邻居的影响。
图 2:卷积算子对表示统计数据的随机点的示例效果(来源:作者)
如果我们以图 2 中的数据集为例,并应用一个常数值为0.25的卷积内核,则会得到一个如图 2 所示的正态分布曲线。这表明,具有常数值输出的卷积函数会产生数据的标准化曲线。现在,如果我们扩展这个概念,并创建一个大小为 10、仅填充 0.1 值的内核函数,并将其应用于相同的数据,那么我们会看到图 3 中的结果。如图所示,结果是一个平滑的曲线。这是因为我们创建了一个具有 10 个邻近点的移动平均内核。内核函数中的每个值为计算给定点的加权平均提供了一个概率权重。
图 3:使用常数内核的数据显示(来源:作者)
我们提供的这些权重在内核函数中不必全部相同。实际上,大多数时候它们并不是常数值。因此,我们可以构造一个内核函数,该函数的值从 0 逐渐增加到 0.5,直到内核的中间,然后逐渐减少回零。这种内核会产生图 4 中的结果。结果显示,它在平滑数据曲线方面做得更好。这是因为我们近似了一个最常见的平滑内核——高斯内核。
图 4:高斯卷积核对数据点的影响(来源:作者)
到目前为止,你已经看到卷积作为平滑操作的效果,然而,正如你将在后续章节中看到的,卷积操作的应用不仅限于平滑。卷积是一个通用操作符,可以被修改来执行对函数值进行多种不同形式的计算。通过卷积操作可以创建的效果完全取决于卷积核函数的构造。
一维卷积
在前一节中,我们讨论了卷积及其对数据的影响。我们使用的示例是 1D 数据。在本节中,我们将扩展并展示卷积在各种 1D 信号中的表现。卷积在 1D 信号上的应用是最明显的应用,实际上这就是概念的起源。1D 信号是独立变量(例如时间)的函数,通过采样获得一组离散的依赖变量值作为输出。离散采样范围通常用于观察函数。采样范围提供了一个视窗,显示该范围内函数的形状。两个信号之间的卷积操作是第二个信号改变第一个信号形状的过程。正如你在图 5 中看到的那样,一条曲线如何影响另一条曲线并产生结合两者的第三条曲线(粗略地说类似于平均)。
图 5:卷积操作的描述(来源:作者)
在这种情况下,卷积发生在两个相似的函数之间。卷积函数仅在幅度上有所不同,其相位已被移动。然而,通常情况可能并非如此。卷积函数可以采取各种不同的形式,并产生不同的结果。图 6 中展示了一些卷积核函数及其对不同函数的影响。你可以看到,当方波与正弦波或直流核卷积时,‘平均效果’。在两个相位相反的情况下,波并不会像两波的破坏性干涉那样相互抵消,而是得到两个相位的平均输出。当应用于由多个简单的正弦、余弦波和噪声组件组成的复杂信号时,卷积信号会变得平滑,有助于减少噪声。平滑是卷积操作最常见的效果;然而,卷积核函数也可以用来突出、区分或抑制函数的不同部分。我们将在后续章节中看到这些如何发挥作用。
图 6:一维卷积的结果,第一行:对方波信号的影响,第二行:各种正弦波相互作用的影响(来源:作者)
二维卷积
2D 卷积只是 1D 卷积的扩展,增加了一个维度。操作不仅在一个维度上进行,而是在两个方向上进行。图像是 2D 函数的一个例子,其值(即 R、G、B)表示经过量化得到的函数离散样本。这些样本排列在一组 2D 矩阵中,每个矩阵代表一个颜色通道。这样的数据结构的内核函数也是一个 2D 矩阵,一组内核矩阵称为滤波器。卷积操作通过在所有颜色通道上移动滑动窗口迭代执行,并应用相应的内核。
图 7:2D 卷积过程的描述(来源:作者)
在图 7 中,你可以看到 2D 卷积应用于图像的过程。对于每个像素,提取一个与内核大小相同的邻域窗口。若像素在图像边界上,则插入一组零填充像素。邻域窗口和内核矩阵的点积给出新卷积图像中相应位置的像素值。从图中可以看到,卷积图像在视窗对角线上具有更高的值。这就是这种类型的内核对图像所做的。它是一个边缘检测器的示例,能够找到图像中的对角边缘。对图像中的每个像素重复相同的过程,通过在图像上滑动内核并获得相同大小的新卷积图像。注意我们没有翻转内核矩阵;这是因为该内核是对称的。如果内核构造为非对称,则在计算点积之前需要翻转/镜像。
图 8:卷积操作的示例应用,第一行:图像模糊,第二行:边缘检测(来源:作者)
如前所述,卷积过程不仅限于某一特定操作,它可以用于执行各种不同类型的操作。在图 8 中,我们展示了卷积操作的两个示例应用。当图像与高斯内核卷积时,会产生模糊效果。然而,当应用边缘检测内核(例如我们之前展示的那种)时,会生成一个仅突出图像边缘的输出图像。内核系数决定了图像的输出。这些系数可以是手工制作的,也可以通过学习框架学习得到。
2D 卷积的特征学习
在上一节中,我们看到 2D 卷积如何应用于图像。在这一节中,我们将探讨如何利用卷积提取特征。图像处理中的特征是描述物体的像素不变模式。可以从物体图像中提取的一组特征可以用来唯一地识别该物体。卷积核提供了一种稳健的特征构建方式,因为它们是批量操作的机器。否则需要的特征提取操作(例如,一组边缘)只需一次矩阵乘法和一个加法操作。这降低了计算成本,并提供了一个通用的特征提取框架,通过构建和应用各种特征核。在图 9 中,显示了四个边缘检测核,每个核专门用于检测某种边缘方向。
图 9:2D 彩色图像上的特征提取过程示例(来源:作者)
显示的滑动窗口决定了特征的大小。根据滑动窗口的步幅,可以从图像中提取出多个特征。一个具有单位像素步幅的小窗口提供一组局部特征,而少量较大的窗口构建全局特征空间。
在深度神经网络(例如 CNN)中,它通过指定每层学习到的特征数量来控制。此外,深度网络将卷积核的参数学习作为整体参数学习的一部分。因此,无需手动构建特征,然而,从概念上讲,学习到的特征与之前描述的特征是相同的。例如,代替为垂直边缘构造粗糙的手工制作的核(这些在现实世界的图像中通常不那么频繁),它可以学习一个非线性核,这可以找到物体的曲率。在卷积层学习到的特征为深度神经网络后续部分的一组全连接分类层提供了基础。
最终说明
在本文中,我们探讨了卷积的概念、其各种类型,并讨论了如何利用卷积从图像中提取特征。卷积是一种通用计算机制。由于与 GPU 架构的兼容性,它可以利用 GPU 处理的强大能力。计算可以被拆分成批次并独立执行。利用卷积进行特征学习可以提供对图像中特征的稳健和自动化提取,这正是深度神经网络所采用的。实际上,特征学习可能是物体分类深度卷积神经网络中最关键的部分。学习到的核更好地捕捉复杂的模式,并且学习到的特征更加多样。
你可以通过下面链接找到的可视化工具来进一步提高对概念的理解和实践。
图 10:2D 卷积的可视化工具(来源:作者)
代码:
www.github.com/azad-academy/DL-Convolutions
成为 Patreon 支持者:
在 Substack 上找到我:
关注 Twitter 获取更新:
获取书籍:
为什么数据不是新石油以及数据市场为何让我们失望
实时程序化数据交换将如何改变一切
·
关注 发表在 Towards Data Science ·13 分钟阅读·2023 年 7 月 13 日
–
“数据是新石油”这一说法由克莱夫·汉比于 2006 年提出,并且自那时以来被广泛引用。然而,这一类比在只有少数几个方面才具有合理性(例如,两者的价值通常随着精炼而增加),而且数据对经济的广泛影响在除少数科技和金融公司之外并不显著。但石油和数据之间的实际差异是根本性的。
最显著的是,石油是一种商品。其质量标准化且可测量,使得来自不同来源的石油在经济学上是“同质商品”。它广泛存在并有一个固定价格。最重要的是,如果你有一桶石油,你不能简单地复制一桶——石油是一种有限资源,必须从地下开采。
数据,另一方面,是一种异质商品。它种类繁多,每次出现的价值无法客观衡量。当两个参与方交换商品时,卖方需要定价,买方需要确定他们愿意支付的价格。这受到数据的两个特性影响:
向另一位买家出售相同数据的边际成本为零。生产数据的成本高度可变(测序基因组的成本高于测量体温),但一旦数据存在,这个成本已沉没。将数据出售给另一买家的过程实际上就是复制它,实践中几乎没有成本。
在“消费”数据之前很难确定其价值。销售线索数据库只有在产生实际销售时才有价值。更糟糕的是,相同数据集的价值高度依赖于买方(或其预期用途)。在这方面,数据实际上更接近“体验商品”,如书籍或度假。
在这篇文章中,我将论证数据是最未被充分利用和因此被低估的商品之一。我概述了一个实时程序化数据交换,它是我正在顾问的新公司Arcus的核心,并可能对数据经济产生深远的影响。
“数据是最未被充分利用和因此被低估的商品之一。”
为什么我们应该关注数据的经济学?
区分 1st 和 3rd 方数据
我认识的没有人对数据的重要性提出异议。但即便*“数据是资产”*的叙述已经相当普遍,数据可能仍然是最未被充分利用和因此被低估的商品之一。
当大多数企业考虑数据时,他们考虑的是他们拥有的数据。这些 1st 方数据(1PD)通常来自网站、CRM/ERP 系统、与客户的通信等。一些 1st 方数据集比其他的数据集更有价值:谷歌的大量搜索和点击历史是他们 1PD 语料库的一部分。
作者提供的图片
显而易见的是,存在的第三方数据(3PD),即你不直接拥有的数据,数量比你的 1PD 大几个数量级。我将要提出的观点是,大多数人没有意识到 3PD 对他们业务的价值。让我们用一个例子来说明这一点。
检测电子邮件垃圾邮件(以及为什么你的 1PD 可能没有你想的那么有价值)
你认为检测电子邮件垃圾邮件的最具预测性信号是什么?最常见的答案包括:错别字、语法 或提到诸如 v1agra 这样的特定关键词。一个稍微更好的答案是 “发件人是否在你的联系人中” — 这并不是因为它是真实的(在你的联系人中有更多有效的非垃圾邮件发件人),而是因为它考虑了电子邮件本身以外的数据来源:你的联系人。
即使仅仅为了这个轶事,我们可以说,检测电子邮件垃圾邮件最重要的信号实际上是发件人域名的年龄。一旦陈述出来,这似乎是直观的:垃圾邮件发送者经常注册新的域名,这些域名在短时间内会被电子邮件提供商屏蔽。
为什么大多数人没有想到这个答案?因为发件人的域名年龄不在你的“第一方数据集”之内,这个数据集仅包含诸如发件人和收件人的电子邮件、主题和邮件正文等信息。但任何对域名有所了解的人都会告诉你,这些信息不仅很容易获取,而且是免费的。获取域名,去到域名注册商处,你可以查到它的注册时间(例如,gmail.com 于 1995 年 8 月 13 日注册)。
事实证明,如果你的数据(1PD)与*其他人拥有的数据(3PD)*结合使用,它可能对你更有价值。
图片由作者提供
从电子邮件垃圾邮件到量化交易(甚至更远?)
从这样一个想法出发,即通过增加发件人域名的年龄来更好地检测电子邮件垃圾邮件,你可以想象有无限种方法可以应用同样的原则。以下是一个简单的例子,展示了你可以从一个地址中找到的数据(至少在美国是如此)。
图片由作者提供
当然,这不是一个新想法。对冲基金已经使用“替代数据”几十年了。RenTech 是最早利用替代数据的公司之一,如卫星图像、网页抓取和其他创意来源的数据集,帮助他们在交易中获得优势。UBS 使用卫星图像来监控大型零售商的停车场并将车流量与季度收入关联,从而在盈利公布之前更准确地预测盈利。
你可以大概猜到这将如何发展。在仅美国就有超过 30 万个数据提供者,以及可能数十亿的数据集。许多数据集可以为你提供预测或分析中的竞争优势。唯一的限制就是你的创造力。
使用外部数据的(主观)价值
尽管外部数据对量化交易公司的价值是即时而显著的,但其他行业的高管却迟迟没有意识到这一点。一个思维实验可以帮助理解:考虑一下你业务中最重要的预测任务。对于亚马逊,这可能是一个给定客户最有可能下一次购买的产品。对于一家石油勘探公司,这可能是发现下一个石油储层的地点。对于一家连锁超市,这可能是任何特定时间点对特定产品的需求。
接下来,想象一下你有一个神奇的旋钮,你可以旋转它来改善预测任务的表现以及对你业务的价值。连锁超市损失了大约 10%的食品因变质。如果它们能够更好地预测需求,就可以改善供应链并减少变质。在约 20%的毛利率下,每降低一个百分点的变质将使毛利率提高 0.8 个百分点。因此,对于像 Albertsons 这样的公司,每提高一个百分点的需求预测可能价值约 6.4 亿美元。替代数据可能会有所帮助。
同样的数据可能为一家连锁超市节省数亿美元,但对商业房地产开发商而言可能更有价值。然而,数据市场尚未能够提取这种价值(通过价格歧视),因为它们离实际的业务应用太远。它们不得不对库存设定一个通用价格,而不考虑最终用途。
尽管如此,外部数据已经成为一个估计达 50 亿美元的市场,增长率每年达 50%,而交易这些数据的市场代表了另外一个 10 亿美元的市场。这仅仅是潜在市场规模的一小部分,原因至少有两个:(1)尽管每家公司都应该能够从 3PD 中受益,只有最具分析成熟度的公司知道如何利用 3PD 来获得优势。(2)那些敢于尝试的人被发现和购买 3PD 的过时流程所拖慢了。让我们简单探讨一下广告购买流程,以说明这一点。
程序化广告可以教会我们如何改善数据经济
广告购买流程的演变
不久前,在 2014 年,程序化广告购买的比例不到数字广告支出的半数。那时人们是如何购买广告的?他们告诉代理商他们想要接触的受众类型。然后,代理商查看他们合作的出版商及其“库存”(杂志页面、广告牌、电视广告位等),并制定一个广告投放计划以满足这些要求。经过一些谈判,公司和代理商最终签署了合同。广告创意将被开发、审查和批准。插入订单将被提交,广告活动最终会开始。几个月后,公司会收到代理商关于广告活动效果的报告(基于一个小的样本数据集)。
随后,谷歌(以及其他一些公司)普及了所谓的程序化广告购买。谷歌创建了自己的广告交换平台(AdX),将来自多个出版商的库存与不同的广告网络连接起来。当用户进行搜索或访问网站时,它会进行实时拍卖(是的,在加载网页的时间内),将所有广告主进行竞争,选出最高出价者(实际上是第二高出价者)来展示他们的广告。
就这样,广告购买从一个需要大量人工参与且透明度极低的漫长过程,变成了一个实时交易过程,这个过程不仅通过拍卖设置价格并且提供了即时的展示效果测量(有时甚至是转化效果)。这种速度、流动性和透明度的提升导致了在线广告市场的爆炸性增长,而程序化广告购买现在占据了接近 90%的数字广告预算。
过时的数据购买过程
事实证明,如今购买数据比 20 年前购买广告更加痛苦。
作者提供的图片
发现: 首先,你需要意识到第三方数据(3PD)对你可能极为宝贵。还记得电子邮件垃圾邮件的例子吗?接下来,你需要具备创造力,考虑所有可能的第三方数据来补充你的第一方数据(1PD)。你会考虑使用停车场的卫星图像来预测零售商的收入吗?然后,你必须前往所有的数据提供商,寻找你认为需要的数据。你会发现大多数“数据市场”基本上只是对描述的自由文本搜索。接下来,你需要查看数据的模式,以确保它包含你需要的信息,具有所需的粒度(例如,有时你需要逐分钟的客流量而不仅仅是每小时一次),并且覆盖范围正确(例如,适用于正确的日期范围或地理区域)。
采购: 一旦你找到你认为需要的数据,你必须弄清楚如何采购这些数据。你会惊讶地发现这并不总是一个简单的“点击购买”的过程。你必须与数据提供者交谈,了解数据许可证(你是否可以将这些数据用于预期的目的?),谈判条款并签署合同。你需要对来自不同提供者的多个 3PD 重复这一过程,这些提供者都有不同的合同、条款和许可证。你等待在邮箱里收到数据(开个玩笑)。
整合: 最终,你获得了你想要的数据。你等待了几周,期间你的数据工程团队将其与 1PD 进行整合,结果你发现它实际上并不像你期望的那样有用。你花费的时间和金钱都白费了,你也再没有尝试过。或者,更让人痛苦的是,你发现 3PD 确实带来了有意义的改善,你继续将你的预测模型投入生产,却发现你需要每小时获取新数据,而你使用的数据源之一仅每周更新一次。如果你再尝试一次,你现在知道,除了基于模式检查粒度外,你还需要考虑刷新率。
这个过程可能需要几个月到一年以上。为了构建更快的马匹,一些咨询公司建议的解决方案是雇用整个“数据采购团队”并与数据聚合商建立关系。
数据经济需要一个实时编程的数据交换平台
我引用程序化广告购买的例子是因为我坚信数据经济可以以相同的方式发展,从而产生类似深远的经济影响。
发现与采购: 想象一个数据交换平台,它将所有数据提供者(即“库存”)汇聚在一起,并合理化许可证,以便能够以编程方式促进交易。数据消费者会提供任何 1PD,并表达他们感兴趣的任务(例如预测需求)以及他们对每单位改善的价值(记住,在需求预测中每 1pp 的改善对 Albertsons 来说价值 640 百万美元?)。数据交换平台会自动识别哪个 3PD 能为该任务提供可衡量的改善,基于数据消费者的预算进行实时拍卖,并优化选择符合要求的 3PD 子集。这种接近实际任务(及其相关价值)的方式将解决现有数据市场必须将数据视为商品而非经验产品的问题。
持续集成和改进: 由于大多数有价值的预测任务本质上是持续性的(例如,你需要定期预测需求,而不仅仅是一次),数据交换将成为重复交易的中心,随着新的数据提供者和消费者进入生态系统,提供越来越多的价值。每次进行预测任务时进行拍卖(而不仅仅是在决定购买哪些数据时进行一次)将确保新的数据提供者立即实现分发,数据消费者也能从最新的数据库存和价格发现中受益。正如广告购买从离线和手动演变到实时一样,数据交易将变得实时、程序化,并且最重要的是可度量。
图片由作者提供
这种“实时程序化数据交换”将为市场中的所有参与者提供经济激励:
-
数据提供者和消费者都将从改进的发现性中受益。数据市场存在长尾问题:数据量和种类繁多,使用现有方法几乎不可能发现任何给定任务/应用最相关的数据。
-
标准化条款和许可证,以便交易能够程序化进行,将提升数据经济的速度和流动性,消除购买过程中的摩擦,并使其面向更广泛的受众。因此,整体市场将显著扩大。
-
通过在拍卖中根据每个数据消费者的主观价值设定价格,如果有多个数据提供者提供可比的数据,消费者可以获得更好的交易,而提供者则可以在不同的消费者之间进行价格歧视。
-
在一个平台上汇聚数据消费者的需求将为数据提供者提供宝贵的见解。例如,基于需求方的所有任务和支付意愿,数据交换可以准确推断出提供方缺少哪些数据,从而帮助优先考虑数据的获取和创建。请注意,合成数据提供者!
需要解决的难题
除了像 Google 对广告所做的那样解决数据的发现性和定价问题外,这种程序化数据交换还需要处理许可和交付问题,这与 Spotify 对音乐的处理方式类似。但如果没有一些难题需要解决,它就不会如此有趣和有意义。
商业
-
数据许可仍然相对较新。 根据我的观察,数据许可的标准化程度不高。每个数据提供者都有自己独特的许可证类型,这些许可证往往不兼容。为了促进交换,许可需要被简化。
-
数据市场可能担心去中介化。 数据生态系统很复杂。对于数据提供者来说,这将是一个全新的分销渠道。他们深知发现性问题的痛苦,而这个交换平台可能会将市场开放给数以百万计的潜在新消费者,他们原本不会考虑替代数据。而数据市场和聚合商则像唱片公司一样,可能希望阻止数据提供者直接访问程序化数据交换。
-
向“传统”行业引入新的定价模型是困难的。 程序化交易的流动性机制将显著扩展需求和供应两方面,而定价机制将优化价值捕捉。总体而言,程序化数据交换将对数据提供者带来好处。
技术
-
语义类型检测停留在过去。 为了自动识别哪些数据集可以进行合并,你首先需要理解数据的语义类型。例如,某些数据只是一个数字、一个邮政编码还是一种货币?大多数语义类型检测是基于启发式的,但也有更现代的方法。
-
你不能通过蛮力来发现数据。 事实证明,有很多数据。寻找哪种 3PD 对你的任务最有益的简单方法就是“尝试”所有数据,以确定哪个提供的价值最大。值得庆幸的是,现代信息理论和数据总结领域的突破使得这个问题变得可处理。
-
数据整合很困难。 一旦你了解了语义类型,并且有机制来识别哪些第三方数据(3PD)会提供有意义的好处,你就必须以有趣的方式将第一方数据(1PD)和 3PD 进行整合。天气数据可能附带的气象站的经度和纬度与您想要预测航班延误的机场不匹配。或者,脚步流量数据可能是按小时提供的,你需要确定是否使用平均值、最大值或第 n 百分位数来进行每日汇总。
-
数据安全。 数据提供者不愿意轻易地分享他们的数据(因为数据很容易被复制)。然而,有一些技术(如 联邦学习)可以在保持数据访问和隐私的同时,增强预测能力。
我相信,实时程序化数据交换的影响将是深远的,值得庆幸的是,AI 的最新进展为上述挑战提供了解决方案。我个人期待着未来的数据能够成为一种体验性商品,而不是简单的商品。
本帖中的观点仅代表我个人,并不代表我的雇主的观点。
为什么数据项目无法产生实际影响:作为分析经理需要关注的 5 个关键因素
一份简单的指南,用于理解那些可能对你的工作产生负面影响的宏观因素
·
查看 发表在 Towards Data Science ·7 分钟阅读·2023 年 12 月 14 日
–
是否曾经在一个数据项目中深入研究,却发现它毫无进展?这种感觉比你想象的更常见:
-
VentureBeat 报道称,87%的数据科学项目没有投入生产
-
Gartner 在 2018 年预测,到 2022 年 85%的人工智能项目将会产生错误的结果。在 2016 年,他们估计 60%的大数据项目会失败。
两周前我们讨论了如何进行高质量数据分析,但制作高质量分析实际上只是战斗的一半。许多令人印象深刻的工作从未真正实现,最终只是“数据敏锐性的展示”(充其量)。那么,如何跨越质量工作和有影响力工作的差距呢?
第一步是理解游戏规则——并且对决定你的项目是成功还是失败的宏观元素有一个清晰的了解。
影响数据分析成功的宏观元素(作者提供的图片)
PESTEL——但用于分析
如果你曾经与一些咨询人员互动(或者你自己有咨询背景),你可能听说过“PESTEL”这个术语。它代表“政治、经济、社会、技术、环境、法律”。这个框架用于了解影响组织的宏观环境因素,并形成对业务的优势、劣势、机会和威胁的更好视角。
在某种程度上,相同的原则可以应用于评估你的数据项目的潜在成功,但有所不同(框架毕竟是工具,应该根据需要调整,而不是全盘采用)。对于我们的变体,我们有数据可用性、技能水平、时间框架、组织准备情况和政治环境。这些因素就像是你数据项目成功的大局中的拼图块。理解和对齐这些元素就像调整引擎:调得好,你的项目将顺利运行;调得不好,你将经历一段崎岖的旅程。
数据可用性
这是一种同义反复——但对于任何数据项目,你都需要数据。相关数据的可用性和可获取性是基础。如果你发现必要的数据不可用,或证明无法获取,你的项目将面临重大挑战。然而,不要在遇到这一障碍时立即认输——你应该探索其他选项以获取数据或找到一个可行的替代方案(在这个阶段的坚持至关重要——我见过无数项目在这个阶段被放弃,即使有合适的解决方案)。但如果经过非常彻底的调查后你得出结论认为数据确实无法获取且没有合适的替代方案,那么重新考虑项目的可行性绝对是一个合理(甚至是明智)的决定。
示例: 想象一下,你计划进行一项研究,分析一个小众市场中的消费者行为,但是你发现这个细分市场的具体消费者数据并没有被任何现有来源收集。在放弃这个项目之前,你可以探索替代数据来源,如社交媒体趋势、相关市场研究,甚至进行有针对性的调查来收集近似数据。如果所有这些努力都未能产生有用的数据,那么停止项目就是合理的了。
技能组
现在你已经有了数据——你是否有正确的技能来进行调查?这不仅仅是掌握 SQL 或 Python 等技术技能,同样也是具备进行你正在进行的分析所需的特定知识。当项目的要求超出你通常的专业领域时,这变得尤为关键。例如,如果你擅长构建数据管道,但手头的项目集中在复杂的预测上,这种技能上的不匹配可能成为一个重大障碍。根据团队当前技能与他们需要掌握的技能之间的差距,你可能考虑对团队进行技能提升——这在长远来看也可能是非常有益的——前提是它与项目的时间表相符。这是在找到适当平衡的问题:抓住发展机会,同时又要对项目的时间表和优先事项保持现实的看法。
示例: 你管理一个在患者数据分析方面经验丰富的医疗研究团队,现在有一个项目要求他们运用流行病学建模来预测疾病的传播。虽然他们擅长处理患者数据,但流行病学预测的特定要求——一个不同领域的专业——可能会带来重大挑战。
时间框架
时间方面,有两个要素需要理解:
-
如果你没有留足够的时间来完成一个项目,项目的质量可能会受到严重影响。
-
过了一段时间,你会遇到收益递减的情况,这时投入更多时间并不一定能够带来同样增加的质量水平。
这个视频(病毒式的蜘蛛侠画作)很好地展示了这一现象。在 10 秒钟和 1 分钟的画作之间质量的飞跃是显著的,仅仅多花 50 秒就有了明显的提高。但是,当将 1 分钟的画作与花费 10 分钟的画作进行比较时,尽管后者无可否认地更好,但是质量的提升幅度却没有那么明显,尽管花费的时间大大增加。
示例:你在一家零售公司工作,该公司希望分析客户购买模式,以优化即将到来的假期季节的库存水平。如果你的数据团队被给予一周时间来进行分析,他们可以提供基本的见解,识别出一般趋势和畅销商品。然而,如果他们得到一个月的时间,分析质量会显著提高,能够更深入地理解客户偏好、区域差异和潜在的库存问题。然而,将时间延长到三个月可能只会提供略微更详细的见解,同时延迟关键决策,并可能错过市场机会。
组织准备度
组织准备度涉及公司如何准备好并愿意充分利用数据见解。这不仅仅是拥有数据或分析;还包括拥有适当的结构和流程来对这些见解采取行动。在一篇之前的文章中,我讨论了使你的研究‘易于理解’以提高见解采用率的重要性。然而,这种促进有时会超出你的控制范围。
示例:假设你发现某个特定的商店表现不佳,主要是由于其位置不理想。你建议将商店搬迁仅几条街道即可显著提升收益。为了证明这一点,你与运营团队合作,在建议的新地点设置一个临时的‘快闪’商店。这个实验运行的时间足够长,以消除任何新奇效应,明确展示了收入增加的潜力。然而,这里就涉及到组织准备度的问题:公司当前在表现不佳的地点签订了五年的租约,有财政补贴,并且在目标区域没有适合的备用空间。
政治环境
每个人都最喜欢的一个话题:在组织内导航政治环境 ❤。这不幸地是数据分析项目成功的关键步骤。你需要确保利益相关者与项目目标一致,还需要明确与项目相关的角色和职责。有时,你可能会遇到团队间的利益冲突或项目归属问题——这些都是对项目风险较高的情况,你需要在实际开始项目之前进行处理(如果你不希望多个团队各自为战,做完全相同的工作)。
示例:你在一个跨国公司中,两个区域团队负责分析新产品发布的市场趋势。然而,由于历史上的竞争以及缺乏明确的领导方向,这些团队运作独立。每个团队使用不同的方法和数据源,导致相互冲突的结论。这种情况不仅在数据方面培养了不信任,而且在执行层面上造成了关于哪些见解值得信任和采纳的困惑。这种不和谐最终可能导致有价值的发现被忽视,突显了在有效利用数据方面政治和谐的关键影响。
结论
我们讨论的关键要素 — 数据、技能、时间、组织准备性和政治 — 是推动任何数据项目成功的关键因素。没有正确的数据,即使是最有技能的团队也无法生成见解。但技能也很重要;它们将数据转化为有意义的分析。时间是你的画布 — 太少会使你的图像不完整,太多则会导致失去焦点。组织准备性是确保你的发现不仅停留在架子上积灰,而是需要可行动的。还有政治 — 是在组织中航行的艺术,确保你的工作见诸天日。
最后,这是关于理解组织内部动态以引导项目向成功方向发展的,即不仅仅是产生见解,而是推动变革。
希望你喜欢阅读这篇文章!你有什么想分享的提示吗?在评论区告诉大家吧!
如果你想读更多我的文章,这里有几篇你可能会喜欢:
一个建立了几个不成功的人的清单
[towardsdatascience.com ## 建立分析成熟组织(AMO)
几个简单的框架,用于准确确定组织的分析需求以及如何使其更…
[towardsdatascience.com ## 每月生成更多质量见解的方法
如何建立系统以更少的资源生成更多的产出
[towardsdatascience.com
附注:本文已转载至 Analytics Explained,这是一个我在各种分析角色中提炼所学的新闻通讯(从新加坡初创公司到旧金山的大型科技公司),并回答有关分析、增长和职业的问题。
为什么我们还需要神经网络?
原文:
towardsdatascience.com/why-do-we-even-have-neural-networks-72410cb9348e
神经网络的替代方案:泰勒级数与傅里叶级数
·发表于 Towards Data Science ·阅读时间 7 分钟·2023 年 12 月 16 日
–
”www.flaticon.com/free-icons/neural-network
。" 标题=”神经网络图标” 神经网络图标由 imaginationlol 创建 — Flaticon。
我最近一直在撰写一系列文章,解释现代神经网络背后的关键概念:
神经网络
查看列表 9 个故事
神经网络如此强大和受欢迎的一个原因是它们展示了 通用逼近定理。 这意味着神经网络可以“学习”任何函数,无论其复杂程度如何。
一个函数,f(x),接收一些输入,x,并给出输出 y:
数学函数如何工作。图示作者提供。
这个函数定义了输入与输出之间的关系。在大多数情况下,我们拥有输入和相应的输出,神经网络的目标是学习或逼近将它们之间映射的函数。
神经网络在 1950 年代和 1960 年代左右被发明。然而,当时还有其他已知的通用逼近器。那么,为什么我们还需要神经网络呢……
泰勒级数
泰勒级数 将一个函数表示为从其在单点的导数值计算出的无限项之和。换句话说,它是一个无限多项式的和,用于近似一个函数。
泰勒级数。方程由作者在 LaTeX 中给出。
上述表达式将一个函数 f(x) 表示为一个无限和,其中 f^n 是在点 a 处的 n-th 导数或阶数,n! 表示 n 的阶乘。
如果你有兴趣了解我们为什么使用泰勒级数,请见 这里。简而言之,它们用于将复杂的函数变得易于处理!
存在一种泰勒级数的简化形式,称为 麦克劳林级数,其中 a = 0。
麦克劳林级数。方程由作者在 LaTeX 中给出。
在这种情况下,a_0、a_1 等是对应多项式的系数。泰勒级数和麦克劳林级数的目标是找到最优系数值,以近似给定的目标函数。
听起来很熟悉?
我们甚至可以用矩阵表示麦克劳林级数。
麦克劳林级数的矩阵表示。方程由作者在 LaTeX 中给出。
这几乎是一个单层神经网络! a_0 是偏置项,a_1 到 a_n 是权重,x 到 x^n 是我们的特征。
我喜欢把泰勒级数视为(宽松地)多项式回归!
在机器学习问题中,我们实际上没有整个函数,而只是数据点的样本。这时,我们会将 x^n 特征作为泰勒特征传入神经网络,通过反向传播来学习系数。
另一个有趣的特性是将泰勒级数与机器学习相关联,即梯度下降。一般梯度下降公式来自将泰勒级数应用于损失函数。有关这一概念的证明,请见 这里。
傅里叶级数
傅里叶级数 与泰勒级数非常相似,但使用的是正弦和余弦波,而不是多项式。它定义为:
任何周期函数都可以分解为正弦波和余弦波的和。
这是一条非常简单的声明,但其含义却非常深远。
关于傅里叶级数的补充视频。
例如,下面显示了***sin(2x)和cos(3x)***的函数及其对应的求和:
import plotly.graph_objs as go
import numpy as np
x = np.linspace(0, 3 * np.pi, 500)
y1 = np.sin(2 * x)
y2 = np.cos(3 * x)
y_sum = y1 + y2
trace1 = go.Scatter(x=x, y=y1, mode='lines',name='sine(2x)', line=dict(color='blue'))
trace2 = go.Scatter(x=x, y=y2, mode='lines', name='cos(3x)', line=dict(color='green'))
trace3 = go.Scatter(x=x, y=y_sum, mode='lines', name='sum', line=dict(color='red'))
layout = go.Layout(
title='Example Sum of Sinusoidal Waves',
xaxis=dict(title='X'),
yaxis=dict(title='Y')
)
data = [trace1, trace2, trace3]
fig = go.Figure(data=data, layout=layout)
fig.show()
示例正弦波及其和。图表由作者在 Python 中生成。
***sin(2x)和cos(3x)***函数是简单函数,但它们的和(红线)会导致更复杂的模式。这是傅里叶级数的主要思想,即使用多个简单函数来构建复杂的函数。
傅里叶级数的一个有趣结果是通过对不同奇数(阶数)频率和振幅的无限正弦函数(谐波)进行求和来构造方波:
奇数正弦波的求和。公式由作者在 LaTeX 中编写。
import plotly.graph_objs as go
import numpy as np
x = np.linspace(0, 3 * np.pi, 1000)
y = np.array([np.sin((2*k + 1) * x) / (2*k + 1) for k in range(100)]).sum(axis=0) * (4 / np.pi)
trace = go.Scatter(x=x, y=y, mode='lines', name='Square Wave', line=dict(color='blue'))
layout = go.Layout(
title='Square Wave',
xaxis=dict(title='X'),
yaxis=dict(title='Y', range=[-1.5, 1.5])
)
data = [trace]
fig = go.Figure(data=data, layout=layout)
fig.show()
使用正弦波创建方波。图表由作者在 Python 中生成。
这个结果令人惊讶,因为我们从光滑的正弦函数生成了一个尖锐的直线图。这展示了傅里叶级数构造任何周期函数的真正能力。
傅里叶级数通常应用于时间序列,以建模复杂的季节性模式。这被称为谐波回归。
如前所述,傅里叶级数声明任何周期函数都可以分解为正弦和余弦波的总和。数学上,这可以写作:
傅里叶级数。公式由作者在 LaTeX 中编写。
其中:
-
A_0: 给定周期函数的平均值
-
A_n: 余弦分量的系数
-
B_n: 正弦分量的系数
-
n: “频率的顺序,称为‘谐波’”*
-
P: 函数的周期
同样地,使用泰勒级数,我们的目标是通过傅里叶级数找到A_n和B_n系数,这些系数对应于正弦和余弦函数。
那么为什么使用神经网络呢?
泰勒级数和傅里叶级数可以被视为通用函数逼近器,并且它们早于神经网络。那么,为什么我们还需要神经网络呢?
答案并不简单,因为这三种方法之间存在许多复杂性。我在描述泰勒和傅里叶级数的工作原理时较为宽松,否则这篇文章将非常繁琐。
让我们分解一些泰勒级数或傅里叶级数无法替代神经网络的原因。
泰勒级数
泰勒级数的主要问题是它们围绕一个点进行近似。它们是在一个值及其局部区域上估计一个函数。我们想知道整个函数在大范围内是什么样的。这意味着泰勒级数(多项式)在训练集之外无法泛化。
傅里叶级数
傅里叶级数的一个问题是它需要看到要近似的函数。例如,在时间序列中,它用于寻找数据中的复杂季节性模式。但它知道数据是什么样的。神经网络的目标是学习这个函数。
然而,主要的问题在于傅里叶级数的复杂性。系数的数量随着我们尝试估计的函数中的变量数量呈指数增长。然而,对于神经网络来说,情况不一定如此。
假设我们有一个函数f(x),我们可以用 100 个系数很好地近似它。现在假设我们想要近似f(x,y)。我们现在有 100² = 10,000 个系数。对于f(x,y,z),我们有 100³。这个过程持续下去,指数增长。
我在这里描述的是维度诅咒。
另一方面,神经网络可以准确建模(一些)这些高维函数,而不需要过多增加输入维度。
无免费午餐定理
重要的是要提到,神经网络并不总是比泰勒级数和傅里叶级数更好。机器学习的美在于它是数学的科学。你需要在拟合模型时进行尝试,以找到最佳模型。添加泰勒或傅里叶特征可能会改善它,但也可能会使其变得更差。目标是找到最佳模型,但这对于每个数据集都不同。
另一个事情!
我有一个免费的通讯,Dishing the Data,每周分享成为更好的数据科学家的技巧。没有“空洞的”或“点击诱饵”,只有来自实践数据科学家的纯粹可操作的见解。
[## Dishing The Data | Egor Howell | Substack
如何成为更好的数据科学家。点击阅读 Dishing The Data,由 Egor Howell 编写,是一个 Substack 出版物,包含……
newsletter.egorhowell.com](https://newsletter.egorhowell.com/?source=post_page-----72410cb9348e--------------------------------)
与我联系!
参考文献和进一步阅读
为什么我们拥有庞大的语言模型而视觉变换器却很小?
人工智能 | 计算机视觉 | 视觉变换器
Google ViT-22 为新的大型变换器铺平了道路,并彻底改变了计算机视觉领域
·发表于 Towards Data Science ·阅读时间 9 分钟·2023 年 2 月 17 日
–
图片由 Joshua Earle 提供,来源于 unsplash.com
最近几年,我们看到变换器参数数量的增长。然而仔细观察,这些主要是语言模型(LMs),其参数量高达令人惊叹的 540B。那么视觉模型为什么没有类似增长呢?
对于文本模型来说,数据集规模的增加、可扩展的架构以及新的训练方法使得参数数量得以增长。这不仅提高了特定任务(分类等)的性能,而且随着参数数量的增加,我们看到了新兴的能力。
“最先进的自然语言处理(NLP)模型的规模随时间的变化趋势。这些模型的训练所需的浮点运算数量以指数级速度增长。” 来源:这里
此外,大型模型可以作为 迁移学习 和微调的基础,因此对开发性能越来越高的模型充满兴趣。尽管 LMs 在许多任务中取得了成功,但仍有许多其他任务需要能够进行图像分析的模型。
截至 2016 年,transformer是首选架构,而自注意力的使用显示了明显的优势。因此,多个团队训练了能够处理图像的变换器模型(视觉变换器,ViT)。到目前为止,最宽的 ViT 只有 15 B 参数。为什么?
在一项新研究中,谷歌成功训练了一个 22 B 参数的模型,并理解了为何在扩展 ViTs 时存在困难。
总结:
-
他们解释了为何传统的 ViTs 训练方法在扩展时会产生不稳定性。
-
如何修改架构以进行扩展,以及模型如何达到最新水平。
-
如何在扩展模型时提高公平性
什么是视觉变换器?
图片来自维基百科 (source)
变换器当然是排列不变的,但它们不能处理网格结构的数据(只能处理序列)。因此,为了将变换器与图像一起使用,我们必须找到将它们转换为序列的方法。怎么做?
第一步是将图像转换为一系列的图块(图像被分成一系列称为图块的碎片)。这些图块基本上是我们的令牌(就像经典变换器中的单词)。这些图像随后被展平并转换为低维嵌入(这保留了信息但减少了维度)。此外,和原始变换器一样,我们使用位置编码,以便模型知道图块在图像中的位置。
描述 ViT 的原始文章 (arXiv prepint)
模型随后在监督学习中进行训练(我们有图像标签的大型数据集),然后可以用于下游任务。
一些最大模型如何看待世界
为什么难以扩展它们以及如何解决?
在 ViTs 之前,卷积网络是计算机视觉任务的标准。在“2020 年代的 ConvNet”中,作者指出这个问题仍然存在且很重要。
另一方面,我们还未能扩展 ViTs。由于在变换器中,模型的扩展也会导致无法预先想象的行为的出现,这是一个严重的问题。
作者指出,超过 80 亿参数时,不稳定性表现为几千步后出现发散的训练损失。这是由于“注意力 logits 中的极大值导致几乎是 one-hot 的注意力权重,且熵接近零。” 为解决此问题,作者在点积前为 Queries 和 Keys 添加了层归一化。
图中展示了这种措施如何改善训练。
(来源: 这里)
第二种措施是修改架构。 在经典的 transformer 中,自注意力输出后跟随一个多层感知机(MLP)。而在这里,自注意力块与 MLP 并行。这种操作不会降低性能,同时将训练速度提高了 15%(如 PaLM 这类其他大型谷歌模型所示,该操作基本上是将矩阵乘法合并为单个操作)。
此外,注意力投影中移除了偏置项(这也减少了训练时间而不降低性能)。
图中展示了这些措施之后的新块:
(来源: 这里)
表格比较了谷歌的模型(ViT-22)与之前报告的最大 ViT 模型,ViT-G 和 ViT-e。
(来源: 这里)
训练也已得到优化。谷歌使用了 JAX(谷歌在某段时间内更加专注于 JAX而非 TensorFlow)。他们还使用了一些技巧(异步并行线性操作、参数分片)以确保模型优化适用于TPU。
作者使用了大约 40 亿张图像的数据集,这些图像半自动标注了 30,000 个类别。温馨提示,在 ViT 中,图像被划分为若干部分(称为补丁),然后与位置编码一起转化为序列。每张图像(224 x 224)被划分为 14 x 14 个补丁。因此,一张图像最终由 256 个标记表示。
扩展 ViT 是否值得?
模型训练完成后,他们在ImageNet(100 万图像和 1000 类)上进行了测试,以检验其分类能力。作者表明,冻结模型(即无需微调)的性能与其他模型相当。
(来源: 这里)
此外,该模型已在不同图像分辨率的另一数据集上进行了测试。ViT-22B 在输入尺寸较小时,显著提高了准确性。
(来源:这里)
另一方面,大型模型的一个最常见的用途是迁移学习。毕竟,人们通常使用小数据集,并利用大型模型进行微调,用于与训练任务不同的任务。正如作者所说:
对于密集预测,迁移学习至关重要,特别是因为获得像素级标签可能很昂贵。在本节中,我们研究了 ViT-22B 模型(使用图像级分类目标进行训练)在语义分割和单目深度估计任务中捕捉的几何和空间信息的质量。 (来源:这里)
作者使用了三个语义分割基准数据集(ADEK20k、Pascal Context、Pascal VOC)对模型进行了测试。不仅如此,他们还使用了有限的数据量进行迁移测试。
“在 ADE20k 上进行少样本语义分割,仅使用了训练集的一部分。我们报告了验证集上的语义分割平均 IoU” (来源:这里)
当数据较少时,ViT-22 表现最佳,这非常有用,因为获取图像及其分割掩码通常很昂贵,因此比其他模型需要的样本更少。
此外,该模型在 Waymo Open 数据集上显示出了卓越的单目深度估计能力。
使用不同解码器对 Waymo Open 数据集中的冻结 ViT 特征进行单目深度估计。 (来源:这里)
此外,通过重新利用模型(但保留预训练的 ViT-22 作为组件),可以将其用于视频分类。这展示了模型在各种可能任务中的灵活性。
此外,作者展示了微调能够提升性能:
视频分类结果。我们通过冻结骨干网络来评估 ViT-22B 的表示,并训练一个小型变换器来汇聚冻结的逐帧表示。ViT-22B 的表现超越了包含 40 亿参数的最大前视图骨干网络 ViT-e。 (来源:这里)
这个模型的公平性如何?
人工智能模型容易受到意外偏见的影响。这些偏见许多存在于训练数据集中,模型可以放大这些偏见,学习虚假的关联和错误的差异。由于预训练模型随后被用于后续任务,错误会被带到新的任务中。
作者认为,扩大模型规模可以帮助缓解这些偏见,并决定通过使用人口统计平等(DP)作为公平性的衡量标准来进行测试。
作者解释了他们的方法:
我们使用 CelebA(Liu 等,2015)中的二元性别作为敏感属性,而目标是“吸引人”或“微笑”。我们强调,这种实验仅用于验证技术声明,绝不应被解释为对这种视觉相关任务的支持。我们选择后者属性,因为它们如图 15 所示展现了与性别相关的偏差。(来源:here)
“模型中的 DP 通常反映了数据中的 DP,除非采取偏见缓解措施。在此图中,二元性别是敏感属性,线性头被训练用于预测 CelebA 中的其他属性,使用预训练特征。”(来源:here)
如文献所述,扩展模型提供了更有利的权衡(“性能随着规模的增加而改善,前提是任何规定的偏见约束水平”)。其次,所有子组都受益于这种改善,并且扩展减少了子组之间的性能差距。
“上图:在每个 DP 水平上,ViT 变体去偏倚后的准确率(ACC)。中图:去偏倚前 CelebA 中每个子组的准确率。下图:y 轴是两个子组(女性和男性)之间的性能绝对差异。与较小的 ViT 架构相比,ViT-22B 提供了更公平的性能。”(来源:here)
模型看到什么?
如前所述,计算机视觉模型主要关注纹理,而人类则更多依赖于形状。
人类的形状偏差为 96% / 纹理偏差为 4%,而 ViT-22B-384 实现了前所未见的 87%形状偏差 / 13%纹理偏差。(来源:here)
这个结果非常有趣,因为大多数模型的形状偏差为 20-30% 和纹理偏差为 70-80%(卷积网络也如此)。这种偏差也是为什么通过改变图像的纹理,即使形状可识别,模型也可能被欺骗,错误解读和标记图像的原因之一。
“形状偏差:许多视觉模型具有低形状/高纹理偏差,而在 ImageNet 上微调的 ViT-22B(如模型名称后的括号所示,红色、绿色、蓝色训练于 40 亿张图像,除非仅在 ImageNet 上训练)拥有迄今为止记录的最高形状偏差,使其更接近于人类的形状偏差。”(来源:here)
此外,理解模型所见的另一种方法是获取显著性图(基于梯度的特征归因方法)。
模型冷却前后的显著性(来源:here)
结论
Google 推出了一款比之前的 ViT 模型大 5 倍以上的模型。
我们展示了 ViT-22B,这是一种当前最大规模的视觉变换器模型,具有 220 亿个参数。我们展示了通过对原始架构进行小但关键的修改,我们可以实现优秀的硬件利用率和训练稳定性,从而获得一个在多个基准测试中推动 SOTA 的模型。(来源:这里)
除了模型的规模和基准测试结果之外,这一模型也是更大模型的起点。事实上,在此之前,成功地扩展 ViT 模型很困难,因为训练期间的不稳定性。作者们展示了通过修改架构可以解决这些问题。
大模型可以用作不同任务的预训练支架(计算机视觉模型可以用于许多现实世界的任务)。此外,意外行为出现(这些行为在小模型中不存在,且无法通过缩放法则预测)。而且,正如所示,这些模型随后可以整合到多模态模型中(并且可能影响其中的突现行为)。
此外,ViT-22B 显示了在公平性方面的改进。这一模型也更加稳健,更符合人类视觉(不那么依赖纹理,更依赖形状)。
我们很可能很快会看到更大的 ViTs(单独使用或作为多模态模型的组成部分)。你对此有何看法?
如果你觉得这很有趣:
你可以查看我的其他文章,也可以订阅以便在我发布文章时获得通知,你还可以通过LinkedIn与我联系。
这是我 GitHub 存储库的链接,我计划在这里收集与机器学习、人工智能以及更多相关的代码和资源。
[## GitHub - SalvatoreRa/tutorial: 机器学习、人工智能、数据科学的教程…
关于机器学习、人工智能、数据科学的教程,包含数学解释和可重用的代码(使用 Python…)
github.com](https://github.com/SalvatoreRa/tutorial?source=post_page-----5d59ac36c1d6--------------------------------)
或者你可能对我最近的一篇文章感兴趣:
[## 微软 BioGPT:迈向生命科学的 ChatGPT?
BioGPT 在不同的生物医学 NLP 任务中达到了 SOTA。
如何摆脱 1000 亿参数,并在一个 GPU 上愉快地进行推理
已知的内容、最新消息、影响和变化,都在一篇文章中
年度最差模型是什么?出了什么问题?
为什么你需要使用 SQL 分组集来汇总数据?
原文:
towardsdatascience.com/why-do-you-need-to-use-sql-grouping-sets-for-aggregating-data-3d172ff5c088
效率、可读性和可扩展性
·发表于 Towards Data Science ·阅读时间 4 分钟·2023 年 4 月 20 日
–
由 Helena Lopes 提供的照片,来源于 Unsplash
尽管 SQL 被称为查询语言,但它不仅可以查询数据库,还能进行高效的数据分析和处理。SQL 被数据科学界广泛接受也就不足为奇了。
在本文中,我们将了解一个非常实用的 SQL 特性,它允许我们编写更简洁、更高效的查询。这个希望早点知道的特性就是 GROUPING SETS
,它可以看作是 GROUP BY
函数的扩展。
我们将学习它们之间的区别以及使用 GROUPING SETS
相比于 GROUP BY
函数的优势,但首先我们需要一个数据集来进行操作。
我从 Kaggle 上提供的 墨尔本住房数据集 创建了一个 SQL 表,该数据集拥有公共领域许可证。表的前 5 行如下所示:
(image by author)
GROUP BY
函数
我们可以使用该函数来计算每组的聚合值或列中、多个列中的不同值。例如,以下查询返回每种列表类型的平均价格。
SELECT
type,
AVG(price) AS avg_price
FROM melb
GROUP BY type
这个查询的输出是:
(image by author)
多重分组
假设你想查看北部地区每个区域的平均价格,这可以通过使用 GROUP BY
函数实现:
SELECT
regionname,
AVG(price) AS avg_price
FROM melb
WHERE regionname LIKE 'Northern%'
GROUP BY regionname
输出:
(image by author)
考虑一个情况,你想在同一表格中查看这两个地区不同房屋类型的平均价格。你可以通过编写两个分组查询并使用UNION ALL
来结合结果来实现这一点。
SELECT
regionname,
'all' AS type,
AVG(price) AS average_price
FROM melb
WHERE regionname LIKE 'Eastern%'
GROUP BY regionname
UNION ALL
SELECT
regionname,
type,
AVG(price) AS average_price
FROM melb
WHERE regionname LIKE 'Eastern%'
GROUP BY regionname, type
ORDER BY regionname, type
查询的作用是先计算每个地区的平均价格。然后,在一个单独的查询中,它按地区名称和类型对行进行分组,并计算每个组的平均价格。联合操作将这两个查询的结果结合起来。
由于第一个查询没有类型列,我们手动创建了一个值为“all”的类型列。最后,结合结果按地区名称和类型排序。
这个查询的输出:
(作者提供的图片)
每个地区的第一行显示该地区的平均值,接下来的行显示不同房屋类型的平均价格。
我们不得不写两个独立的查询,因为在GROUP BY
语句中不能有不同的查询,除非我们使用GROUPING SETS
。
GROUPING SETS
让我们用GROUPING SETS
重写之前的查询。
SELECT
regionname,
type,
AVG(price) as average_price
FROM melb
WHERE regionname LIKE 'Eastern%'
GROUP BY
GROUPING SETS (
(regionname),
(regionname, type)
)
ORDER BY regionname, type
输出:
(作者提供的图片)
输出结果相同,只是类型列中的空值可以很容易地替换为“all”。
使用GROUPING SETS
有两个主要优点:
-
它更简洁、更直观,使代码更容易调试和管理。
-
它比写独立查询并结合结果更高效,因为 SQL 会扫描每个查询的表。
最后的想法
我们常常忽视查询的可读性和效率。只要查询返回了所需的数据,我们就会感到满意。
效率是我们始终需要牢记的。写出不良查询的影响可能在查询小型数据库时可以容忍。然而,当数据量变大时,不良查询可能会导致严重的性能问题。为了使 ETL 过程可扩展且易于管理,我们需要采用最佳实践。GROUPING SETS
就是这些最佳实践之一。
你可以成为一个 Medium 会员 以解锁我所有的写作内容,以及 Medium 的其他内容。如果你已经是会员,请不要忘记 订阅 以便在我发布新文章时收到邮件通知。
感谢阅读。如果你有任何反馈,请告知我。
为什么假设检验应该从《哈姆雷特》中汲取灵感
原文:
towardsdatascience.com/why-hypothesis-testing-should-take-a-cue-from-hamlet-1e714733cec3
统计思维
模拟还是不模拟,这是个问题
·发表于Towards Data Science ·5 分钟阅读·2023 年 6 月 26 日
–
如果你是一个科学家或数据专业人士,很可能你的假设检验程序缺少一个至关重要的步骤,这在你的常规课程中悲剧般——还是悲喜剧般?——被遗漏了。不要担心,在这篇博客文章中,我会向你展示缺失的部分,以及为什么你会在演员的剧本中找到解决方案。
《哈姆雷特》由 Kehinde Wiley 风格生成,由作者使用Midjourney创建。
(注意:本文中的链接会带你到同一作者的解释文章。)
第一幕,第一场
场景开始于你得意洋洋地获得预算以去收集实际数据。也许一切都是数字化的;你正准备告诉你的工程团队应该记录哪些变量或运行哪些在线实验。或者你可能要走向现实世界,设置一些传感器、准备一些移液管,或者做其他任何获取数据的工作。(对从现实世界中获取测量的实际操作感到好奇?查看我关于取样树木的文章。)
不要急!如果你不知道自己在做什么怎么办?搞砸数据收集过程的实际部分是非常尴尬的,更不用说这是对你团队宝贵时间的巨大浪费了。即使一切都是数字化的,你也确实不希望带着尾巴回到你的工程团队那里请求重做。
但你怎么能确保你以正确的方式记录了正确的内容呢?有没有技巧?幸运的是,有!而这个技巧在事后看来是如此明显……这也许就是为什么你的教授忘记教给你的原因。
技巧是借鉴戏剧演员的经验!
戏剧舞台上的酒杯,风格类似于 Kehinde Wiley,由作者使用 Midjourney 生成。
如果演员在首演前对表现不佳感到紧张,他们会做什么?(不是喝酒。)
他们会排练!
好吧,你也可以进行排练。在收集任何数据之前,设立一个除观众之外的彩排。嗯,观众?我是说,除了真实世界的数据。
彩排
在数据科学中,彩排涉及制作一个虚假的但可信的数据集。我们称之为模拟。
如果你不熟悉模拟虚假的但可信的数据的概念,可以查看这篇博客文章,我会切换到演示模式而不是讲解模式。你将在那里看到基于代码和电子表格的示例。形成了模拟的心理图像后,可以继续阅读这里的内容。
当你模拟你的彩排数据时,确保设计一个你可以控制的清晰故事。尝试设置模拟参数,建立一个你希望采取某种行动的小玩具世界,然后生成这些数据并尝试分析它。确保在分析结束时你能恢复正确的决策。如果不能,那对你的统计计划来说是一个很糟糕的信号!
如果你知道正确的结论是什么(在一个你创建的规则的世界里你总是知道),而你的方法没有给出这个结论,你可能使用了一个不好的方法,或者数据不足。尽早获取这些警告信号总是更好。
也许更重要的是,你经常会发现你希望自己在最初就设置好数据。分析假数据时,你会想,“要是我有这一额外的列,一切都会更好……”
好吧,现在是弄清楚这一点并扼杀GIGO的最佳时机,而不是在你收集了真实数据之后。太昂贵且耗时!
不要浪费你的机会
即使你的数据集是完美的,你提出的方法可能也不是最合适的。不幸的是,除非你在做一些相当复杂的事情,否则你应该知道,你只能使用真实的测试数据集一次。所以只有一次机会——你不能像训练机器学习模型那样尝试不同的方法。统计推断是一项残酷的认识论事业,它对你的感受毫不在意:只有一次机会。不允许数据重复使用。
重用测试数据是你能犯的最大罪恶之一,而你的知识不足的同行经常犯这种错误,这并不意味着它是无害的。
不要在你珍贵的最终数据集中胡乱选择方法。你只有一次机会,不要浪费。
如果你想尝试不同的方法以查看它们是否适合你的测试数据,你需要一个具有相同结构的单独数据集。如果你已经有了大量数据,你可以将其拆分。如果你还没有数据,你需要模拟一些虚假的数据以便规划你的方法论。不要在你珍贵的最终数据集中胡乱选择方法。你只有一次机会,不要浪费。
这就是为什么在开始获取数据之前使用模拟是一个如此有用的技巧,完全抄袭自彩排概念。
是否进行模拟,这就是问题所在:
是否在心中忍受更高尚
骄人的命运的弹弓和箭矢,
还是抵抗一片麻烦的海洋
通过对抗来结束它们。
感谢所有的手指,Midjourney。❤
感谢阅读!
如果你想表示感谢,我很感激分享和转发。如果你想阅读更多我的写作,文章中的大多数链接会带你到我的其他随笔。
怎么样,来一门课程?
如果你在这里玩得开心,并且正在寻找一个有趣的、以领导力为导向的课程,旨在让 AI 初学者和专家都感到愉快,这是我为你准备的小礼物:
课程链接:bit.ly/funaicourse
更愿意磨练你的决策技能,而不是建立你的 AI 实力?你可以通过这个链接学习我的免费课程:
[## 你生活的方向盘——决策智能视频教程 | LinkedIn Learning…
决策能力是你可以学习的最宝贵的技能。你的人生归结为两件事:你的生活质量和你的…
bit.ly](https://bit.ly/decisioncourse?source=post_page-----1e714733cec3--------------------------------)
附言:你曾经尝试过在 Medium 上多次点击鼓掌按钮,看看会发生什么吗? ❤️
喜欢作者吗?与 Cassie Kozyrkov 联系
成为朋友吧!你可以在 Twitter、YouTube、Substack 和 LinkedIn 找到我。想让我在你的活动中发言?请使用 这个表单 与我联系。
阅读 Cassie Kozyrkov 的每一篇故事(以及 Medium 上成千上万其他作者的作品)。你的会员费直接支持…
kozyrkov.medium.com](https://kozyrkov.medium.com/membership?source=post_page-----1e714733cec3--------------------------------)
我为什么签署了“暂停大型 AI 实验”请愿书
原文:
towardsdatascience.com/why-i-signed-the-pause-giant-ai-experiments-petition-e9711f672d18
·发表于Towards Data Science ·阅读时间 8 分钟·2023 年 4 月 1 日
–
“精神”是对的;但“身体”存在许多缺陷
照片由Álvaro Serrano拍摄,来源于Unsplash
上周二,我收到来自未来生命研究所的一封电子邮件,邀请我签署一份暂停大型 AI 实验的请愿书。当我签署这封信时,组织者要求我们在信件发布前保持保密。当时,我没想到它会引起如此多的新闻、评论、文章等。
在文章发布后不久,我接到了一些新闻媒体的联系,一家来自阿根廷,另一家来自墨西哥,邀请我参加他们的直播节目并发表我的观点。
就在那时,我意识到 FLI 的信确实是一个具有高影响力的倡议。
尽管最后我决定签署它,但我也发现信中有许多我不同意的陈述,因此在这篇文章中,我想澄清记录,阐述支持和反对这封信的理由。我鼓励你也阅读这封信,它并不长。
为什么现在?
重要的是要意识到,公开信中的紧迫感并不是关于人工智能一般问题,而是关于最近开发和发布的被称为“生成性 AI”或简称 GenAI 的技术。
除非你一直躲在石头下,否则你应该听说过 ChatGPT(去年 11 月发布,天哪,感觉已经很久了),它是 GenAI 最显著的例子,但还有很多其他的,比如DALL-E、Claude、Stable Diffusion、Poe、You.com、Copy.ai等等。AI 能力也被融入到许多产品中,如 Notion、Microsoft Office、Google Workplace 套件、GitHub 等。
我们许多人认为 GenAI 是一个真正的颠覆者,而其他人则称其为“一时的潮流”。比尔·盖茨写道他在自己漫长的生命中见过两次变革性技术,GenAI 是第二次(第一次是当他看到图形用户界面时)。
但这并不是一帆风顺的道路。
除了那些臭名昭著的“邪恶人格”劫持聊天机器人的案例,我们还见过很多事实错误甚至是虚构的事实——被称为“幻觉”——这些误导性的内容让人类感到困惑,因为这些文本看起来像是极其自信地写成的;我们人类在不确定自己所说内容时往往会表现出不安,但当然,机器不会感到不安(实际上也没有自信)。
像 OpenAI 这样的公司试图给人一种错误被修正的印象,但一些专家认为错误和幻觉是技术的固有部分,而不是小细节。我提出了一种减少错误的方法,并非假装完全消除它们。
尽管缺陷远未得到纠正,尤其是 OpenAI(背后有微软)与谷歌(及其关联公司 DeepMind 和 Anthropic)之间的竞争却在全速进行。产品以令人窒息的速度发布,只为了市场份额的优势,而不真正担心对社会的后果。
我们——公民——只能独自应对 GenAI 在我们生活中的引入,面对各种虚假信息、偏见、假新闻、假音频,甚至假视频的可能性。
政府对此无动于衷。国际组织对此无动于衷。
我理解图像生成的文本看起来可能不如医学诊断或药物治疗那样重要,但仍然有重要的后果。我们首次体会到误信息(被像 Twitter 这样的科技平台利用)在美国 2016 年和 2020 年选举中所扮演的角色,现在我们在全球范围内都在遭受社会的两极化。但几年前的 Twitter 机器人与即将到来的 GenAI 相比简直微不足道,如果我们对其采用无动于衷的话。
现在让我们回顾一下这封信正确的部分,然后再看看在我看来它的错误之处。
公开信中的正确之处
-
GenAI 系统是“强大的数字思维,没有人——甚至它们的创造者——可以理解、预测或可靠地控制。” 他们是“不可预测的黑箱模型,具有新兴能力。” 这解释了为什么它们本质上是危险的系统。例如,“新兴能力”意味着当 GenAI 系统变得足够大时,新行为会突然出现——比如幻觉。新兴行为不是经过工程设计或编程的;它们只是突然出现。
-
“AI 实验室[正]陷入失控的竞赛,开发和部署越来越强大的数字思维。” 这场不停的竞赛可以从公司市场份额的主导地位来理解,但社会后果又如何呢?他们说他们关心这些问题,但这种无休止的节奏却显示了其他的东西。
-
我们不应该让这种鲁莽的竞赛继续下去,而应“制定和实施一套共享的高级 AI 设计和开发安全协议,这些协议应由独立的外部专家进行严格的审计和监督。”
-
另一个好的观点是不试图完全停止 AI 研究或创新:“这并不意味着对 AI 发展的总体暂停,只是从危险的竞赛中后退一步,以避免更大、更不可预测的黑箱模型及其新兴能力。” 此外,提出了技术努力的重新定位:“AI 研究和开发应重新聚焦于使今天强大、最先进的系统更加准确、安全、可解释、透明、稳健、对齐、值得信赖和忠诚。”
-
最后,提出了将政策制定作为解决方案的重点:“AI 开发者必须与政策制定者合作,以显著加快强有力的 AI 治理系统的发展。这些系统至少应包括:致力于 AI 的新和有能力的监管机构;对高度能力的 AI 系统和大量计算能力的监督和追踪;用于区分真实与合成以及追踪模型泄漏的来源和水印系统;一个稳健的审计和认证生态系统;对 AI 造成的伤害的责任;对技术 AI 安全研究的稳健公共资金;以及应对 AI 所引起的剧烈经济和政治冲击(尤其是对民主的影响)的资源充足的机构。”
这封信中的错误
我认为信中的大部分问题在开头没有说对;后来情况大有改善。我清楚地感觉到信的开头和结尾部分是由不同的人写的(我不怀疑这两部分是由机器人写的)。让我们深入探讨具体内容:
-
参考文献权威性不够。口头声明不是客观证据。即使是Bubeck 等人的参考文献也不是真正的科学论文,因为它甚至没有经过审稿!你知道,发表在著名期刊上的论文都会经过匿名评审的过程。我每年审稿的数量超过十篇。如果 Bubeck 的论文被送到经过审稿的期刊,肯定不会被接受,因为它使用了主观语言(比如“人工通用智能的火花”)。
-
信中的一些说法完全荒谬:它以“具有与人类竞争的智能的 AI 系统”开始,但正如我在之前的帖子中解释的那样,目前的 AI 系统根本不具备与人类竞争的能力,大多数人类与生成 AI 的比较都是误导性的。支持机器竞争力的参考资料也是虚假的,正如我在前一点中解释的那样。
-
信中暗示了人工通用智能(AGI)的说法,如“当代 AI 系统现在在一般任务上变得与人类竞争”,但我认为 AGI 是一个非常遥远的未来,甚至不认为 GPT-4 是通向 AGI 的实质性步骤。
-
对就业市场的危险描述不准确:“我们是否应该自动化所有工作,包括那些令人满足的工作?”拜托,AI 并不会取代大多数工作,但它接管某些工作的方式(比如从数千张图片中提取图形设计能力,却没有给人类作者任何经济补偿)可以通过征税大科技公司和支持图形设计师社区来解决,而不是通过暂停。
-
对不起,但信中几乎每个问题的表述都很糟糕:“我们是否应该发展非人类思想,这些思想可能最终会超越、智胜、淘汰并取代我们?”这是一个“人类与机器”的场景,这不仅荒谬,而且助长了对 AI 系统的错误宣传,正如Arvind Narayanan (@random_walker) 在推特上指出的那样。像终结者那样的场景并不是真正的危险。
-
最后,针对信中毫无意义的问题,我们来看看这个:“我们是否应该冒失去对文明控制的风险?”这在很多方面都是错的,难以评论。首先,我们现在有控制我们的文明吗?请告诉我除了富人和国家元首之外,还有谁控制我们的文明。然后,“我们”指的是什么?人类?如果是这样,我们回到了人类与机器的对立思维,这是基本错误的。真正的危险是一些人类利用 AI 工具来支配其他人类。
-
提议的“补救措施”(暂停开发比 GPT-4 更强大的大语言模型)既不现实也不恰当。这不现实,因为它针对的是主要受大科技公司控制的 AI 实验室,这些公司有特定的财务利益——其中之一就是增加市场份额。你认为他们会做 FoL 研究所建议的事,还是做他们老板希望的事?你说得对。这也不恰当,因为暂停措施无法解决已经发生的从人类作者那里抢劫或人类行为者利用工具传播虚假信息所造成的损害,这些工具不需要比 GPT-4 更强大。
-
最后,一些签署这封信的人,特别是埃隆·马斯克,不能被视为 AI 伦理行为的典范:马斯克通过将“完全自动驾驶”称为特斯拉的能力来误导特斯拉客户,而这些能力不仅未能符合由汽车工程师学会提出的 5 级标准,也未能符合 4 级标准,甚至勉强符合 3 级标准。不仅如此,特斯拉在确保安全之前就将潜在致命的机器推向公众,而且特斯拉的自动驾驶模式实际上造成了人员伤亡。那么,埃隆·马斯克有什么道德权威要求“安全、可解释、透明、可靠、对齐、值得信赖且忠诚”的 AI 系统,而他自己公司里并未付诸实践?
那么,我到底为什么签署了这封信?
尽管这封信有很多错误,我为什么决定签署?
我并不是唯一一个签署这封信并批评它的人。例如,@GaryMarcus 也表示,纽约时报报道了他的观点:
“这封信不完美,但精神正合适。”
这是一种表示需要采取行动的方式,信件可以被视为第一次尝试这样做。这一点我可以同意。
但如果你想对这个话题有更清晰的理解,可以阅读例如尤瓦尔·赫拉利在《纽约时报》的专栏。除了像“起初是言语”这样的过于宏大的措辞外,我喜欢他对终结者式情景的批评以及他对真正危险的看法:
… 仅仅通过掌握语言,人工智能就能拥有控制我们在一个类似矩阵的幻觉世界中存在的一切,而无需开枪或植入任何芯片。如果需要开枪,人工智能可以通过讲述正确的故事让人类扣动扳机。