应该由人工智能还是人类来做最后的决定?
这是我“不太常见”的回答——我的两分钱。
长话短说。
几天前,我参加了一个著名教授的分享会,有一件事引起了我的注意(这已经作为本文的题目提到了)。
有趣的是,分享会上的这个话题变成了参与者和教授之间无休止的(几乎)问答式的对话。
这让我进行了更深入的思考,随后巩固了我的想法,从业务和技术的角度来回答这个问题。
所以让我们开始吧!
首先,问题本身并不完整,无法给出完整的答案…
应该由人工智能还是人类来做最后的决定?
在我看来,由于问题本身的模糊性和概括性,这个问题没有正确的答案。
如果你仔细辨别,这个问题缺少两个要素——什么和什么时候。
好吧,让我解释一下。
首先,这个问题没有任何上下文或要解决的特定业务问题(这是“什么”)导致一个答案,即是人工智能还是人类应该做出最终决定。第二,即使我们知道“什么”然而我们仍然需要知道在哪个特定的情况下 **(也就是“什么时候”)**被考虑。
因此,重新定义一下这个问题,应该是这样的:
“什么时候”应该由人工智能还是人类来做最终决定
“解决一个商业问题”?
这个重新设计的问题让人们更容易理解并得出一个更有说服力的答案,而不是用另一个答案去乞求另一个问题。
再次声明,这只是我的观点,确实值得讨论。请在下面留下您的评论!
1.为什么问题中需要上下文或业务问题(“什么”)。
我们都知道所有的公司都有业务问题要解决。
然而,人工智能不能为所有的商业问题做出决定,需要人类的直觉来做出最终决定。
换句话说,要知道是人工智能还是人类应该做出最终决定,我们首先必须知道我们试图解决的商业问题到底是什么。
例如,当涉及到使用谷歌地图选择到达目的地的最佳路线时,我们将决策委托给人工智能。如果没有短时间内的密集计算,人类几乎不可能做出准确的判断和选择。在这种情况下,人工智能应该是为我们做出最终决定的人。
相反,我们还必须理解,某些公式化的问题具有约束,并且模型(所谓的 AI)不再能够基于从历史数据的学习而被推广到每一个单独的问题。
以最近的案例为例,自 2014 年以来,亚马逊一直在使用他们的招聘算法来扫描和审查求职者的简历。一段时间后,亚马逊的机器学习团队发现招聘算法对女性有偏见。这是因为向模型输入了主要来自男性的训练数据——这反映了男性在整个科技行业的主导地位。
同样,在某些情况下仍然需要人类的控制,人工智能意味着赋予人类权力,而不是取代他们。
2.为什么问题中需要一个情境(即“何时”)。
既然我们已经知道要解决什么业务问题。下一步是什么?
是的,我们仍然需要考虑一个特定的情况以及它何时发生。
我这么说是什么意思?
让我们回到前面给出的亚马逊的例子。假设现在问题变成了:
人工智能或人类应该在什么时候做出最终决定来决定雇佣哪些候选人?
答案之一可能是:
AI 应该做出最终决定“决定雇佣哪些候选人”AI 系统没有表现出歧视。
或者:
“决定雇佣哪些候选人”“当”人工智能系统显示出不良偏差时”,人类应该做出最终决定。
我们刚刚一起回答了基于业务问题和情况的问题。
无论是哪一种,答案都是清晰明了的。零歧义。
最后的想法
感谢您的阅读。
就我个人而言,我发现这个问题发人深省,因此觉得有必要在这篇文章中分享我的想法。
我希望通过从不同的角度回答这个问题,甚至在试图回答一个问题之前,给你另一个视角。这样会让你的答案更清晰的回答 真正的 问题。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 现在的使命是让每个人都能接触到数据科学。他正在帮助公司和数字营销机构通过创新的数据驱动方法,利用可操作的见解实现营销投资回报。
凭借其在高级社会分析和机器学习方面的专业知识,Admond 旨在弥合数字营销和数据科学之间的差距。
如果你想了解更多关于 Admond 的故事、数据科学服务以及他如何在营销领域帮助你,请查看他的 网站 。
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
数据科学家是否应该获得许可?
许可可以增加公共安全,但代价是减缓创新
每天你的生活都受到不同机器学习算法的影响。有些是无伤大雅的,比如关于网飞的电影推荐。其他如贷款审批和保释判决如果发展不当,可能会造成无法减轻的伤害。随着这些模型的影响力越来越大,它提出了一个问题,即数据科学家是否应该像律师和医生一样获得许可。
一个正式的职业将意味着数据科学家将被要求保持一定水平的技术能力,遵守行为准则,并通过由该领域专业人士组成的经批准的委员会进行自我监管。由于数据科学需要特殊的培训,而渎职会导致严重的负面后果,因此有充分的理由成立一个数据科学专业。
然而,相对于其他许可领域,数据科学仍处于起步阶段,预计未来几年将会细分和改变。尽管还处于初级阶段,但一名数据科学家的疏忽所造成的影响将远远超过一名医生的疏忽。因此,需要有一种方法来惩罚不良行为者并维持公众信任。无论是通过一个专业的许可委员会来限制雇用未经许可的数据科学家,还是通过一个证书来确保数据科学家的完整性。最终目标是一样的,保护公众免受专业无能的伤害。
许可的好处
在考虑许可的理由时,最明显的理由是保护公众。去看病,你对服务有一定的期待。你知道他们是有标准的,如果他们行为不端,将会有诸如取消他们行医资格的后果。然而,行为不端的数据科学家可以简单地找到另一份工作,继续他们的职业生涯。
许可的另一个好处是通过标准化对数据科学家的教育和期望。目前,人们对数据科学家的角色有很多困惑,这导致许多不合格的人将自己标榜为数据科学家,以利用薪酬和声望的增长。通过发放许可证来建立标准,无法满足新的准入要求的低素质工人将被淘汰,而更有动力的工人将不得不参加与工作相关的培训,以满足新的期望。例如,在英国,保安和护理人员职业许可证的引入导致了资格水平和工作相关培训的上升。
许可的弊端
然而反对许可的理由同样令人信服。例如,有证据表明过多的许可会阻碍就业机会的创造,尤其是对于受教育程度较低的人来说,这可能会加剧不平等。
决定谁有资格也是一项艰巨的任务,特别是因为数据科学家来自各种背景。一项小型研究 (n=1001)探索了数据科学家在学术研究(20%计算机科学,19%数学,19%经济学)以及他们工作领域(42%技术,37%工业,16%金融,5%医疗保健)等领域的背景差异,展示了背景的鲜明对比。此外,由于这个领域非常新,未来的数据科学家很可能会拥有与今天的数据科学家不同的技能。
另一个可能出现的问题是,通过设置高准入门槛来抑制创新。对于移民人才来说尤其如此,他们可能已经很有能力,但可能需要接受他们在本国已经接受过的重复培训。随着数据科学已经面临短缺,毫无疑问,任何形式的专业许可都会损害就业增长,并显著降低从业者的进入率。这些问题将是以数据科学协会形式产生的垄断的直接结果,这将限制劳动力供应并减少竞争。
将所有这些放在一起
就其核心而言,颁发职业许可证的问题最终是为了保护公众免受不良行为者的影响,并确保质量的一致性。其他好处包括标准化对数据科学家的教育和期望,减少低素质工人的数量。另一方面,由于数据科学是一个如此新的领域,它可能会阻碍就业创造并减缓创新。这可能会导致移民人才寻求进入门槛不高的其他国家就业。
虽然实现许可背后的机制可能很困难,但证书可能是对许可限制较少的选项。专业协会可以管理考试,希望确保数据科学家质量的公司可以选择优先考虑那些有证书的候选人。另一种选择是只许可和监管那些处理敏感数据或大规模模型的数据科学家。十有八九,随着该领域的成熟和数据科学家的角色更加标准化,重新考虑许可的问题,或者至少建立某种制衡机制可能是有意义的。就目前的情况来看,实施任何形式的限制性许可程序最终都可能弊大于利。
数据科学家应该知道如何编写生产代码吗?
好吧,这是我的答案…
欢迎来到 2019 年,这是我在新的一年里第一篇关于媒体的文章。
下面是俗气的部分(如果有必要,可以随意跳过)——2018 年是我人生转折点的一年,在 Medium 上写作被证明是我最好的决定之一,与这么多数据科学爱好者和志同道合的人分享我的经验和学习之旅——比如你。
感谢你在我的骑行旅程中陪伴着我,我希望在 2019 年与你分享更多!
所以……回到今天感兴趣的话题。
事实上,这是我刚开始涉足数据科学领域时的一个难题。有趣的是,这也是数据科学家最常争论的话题之一。
所以现在的问题是:数据科学家应该知道如何编写生产代码吗?
以下是我的回答:是的。
生产代码是一个经过充分测试的稳定代码,它考虑到了现实生活中的场景,并且必须功能强大。
作为一家公司的数据科学家,拥有编写生产级代码的能力是非常受欢迎的技能之一。
如果您是一名软件工程师转数据科学家,这是一个好消息,因为您可能已经通过构建各种生产代码来部署之前的角色,从而发展了这一技能。
如果你像我一样,既不是以前的软件工程师,也没有任何计算机科学背景,我知道你的感受,这就是为什么这篇文章是给你的。
我们开始吧!
为什么是生产代码?
为什么?
作为一名数据科学家,我们为什么应该首先关注生产代码的编写?
因为这是我们的分析和模型真正为最终用户增加价值的地方。在痛苦的几个月(甚至几年)的模型开发之后,如果没有模型的部署,如果它们不能给客户或最终用户带来任何好处,那么模型将永远是模型。
所有这些长时间的数据收集和清理、模型构建和优化以及演示都是为了表明您的模型能够生成结果和见解,以达到业务目标。
一旦您成功地说服了利益相关者(假设您的模型是健壮的,分析从业务角度来看是有意义的,并且结果能够实现业务目标),部署阶段就不会太远了,这就是您需要通过交付生产级代码将模型投入生产的时候。
坦率地说,你的老板并不在乎你用的是什么型号。他/她关心的只是结果。
所以交付结果,你就可以开始了。
还是那句话,看情况。
我想说,要成为一名数据科学家,没有必要知道如何编写产品质量代码。
在一天结束时,这取决于…
根据我的经验,我合作过的一些公司和客户需要数据分析和模型构建,主要是为了他们的内部分析和使用。
这可能意味着您的利益相关者只是想知道基于历史数据的业务指标的性能,或者您的模型如何使业务运营更高效和更具成本效益。在这些情况下,考虑到业务目标,您可能不需要编写生产代码。
对于其他一些公司,在部署给最终用户之前,必须将生产就绪代码集成到他们现有的系统中。
这就是为什么一些数据科学家的工作描述不包括生产代码技能作为要求之一,而是更倾向于一种更可取的技能,因为他们可能有一个软件工程师或 IT 人员团队来帮助生产模型。
最后的想法
感谢您的阅读。
我不能说我是编写产品代码的专家,因为学习之旅绝对不容易。但是我现在仍然每天都在学习,一步一步地提高。
作为一名数据科学家,我希望这篇文章能够帮助您理解编写生产代码的重要性,并掌握这项在工作描述中没有明确说明的重要技能。
在一天结束的时候,你为公司增加了价值,为公司实现商业目标做出了贡献。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
医学中的数据科学——精确与回忆还是特异性与敏感性?
理解精确性、回忆性和特异性、敏感性之间的区别
在数据科学社区中,通常会通过精确度和召回率来评估您构建的模型。在医学领域,通常通过特异性和敏感性来评估医学测试。这些概念非常相似,但又不同。当这两个世界相遇时,当医学测试是机器学习模型时,这种差异可能会导致医学世界和数据科学人之间的许多误解。
那么,让我们来看看定义:
Precision — Out of all the examples that predicted as positive, how many are really positive?
Recall — Out of all the positive examples, how many are predicted as positive?
Specificity — Out of all the people that do not have the disease, how many got negative results?
Sensitivity — Out of all the people that have the disease, how many got positive test results?
如果我们将一个正面的例子定义为“患有疾病的人”,我们可以看到回忆和敏感性是相同的,但是精确性和特异性是不同的。精度也叫 PPV(阳性预测值)。从现在起,我们将把敏感性称为回忆。
这些定义非常简单,然而,当我试图理解它们的组合对我的算法意味着什么时,我发现自己很困惑。精确度、召回率和灵敏度的每一种组合都是可能的吗?在哪些情况下我做错了什么?
如果有帮助的话,你可以称特异性为当阳性标签被定义为阴性,而阴性标签被定义为阳性时对同一问题的回忆。
为了更好地理解它,我创建了 8 个不同的分类问题和分类器。每个分类器试图以最大化或最小化每个测量值的方式将 10 个样本分类到阳性和阴性“篮子”中。
示例 1 —低精度、高召回率和高特异性
如果分类器预测是否定的,你可以相信它,例子是否定的。但是,注意,如果例子是否定的,你不能确定它会预测为否定的(特异性= 78% )。
如果分类器预测是肯定的,你不能相信它(精度= 33% )。然而,如果这个例子是正面的,你可以信任这个分类器(回忆= 100% )。
示例 2 —高精度、高召回率和低特异性
将一切都预测为积极显然不是一个好主意。但是,由于人口不平衡,精度相对较高,召回率为 100% ,因为所有的阳性样本都被预测为阳性。但是特异性是 0% 因为没有阴性的例子被预测为阴性。
示例 3 —高精度、低召回率和高特异性
这可能是一个有用的分类器——如果它预测一个例子是正面的,你可以相信它——它是正面的。然而,如果它预测它是负的,你不能相信它,很可能它仍然是正的。
示例 4 —低精度、低召回率和高特异性
这个分类器真的很糟糕——它几乎把所有预测为负面,当预测为正面时——它是错误的。实际上,使用与这个分类器预测相反的东西会更好。
示例 5 —高精度、低召回率和低特异性
在这里,与这个分类器预测的相反应该会工作得更好。
示例 6 —低精度、高召回率和低特异性
这个分类器可能没用——它预测一切都是肯定的。所以,它当然可以完美地检测出所有的正面例子(高召回率),但是使用它你得不到任何信息。
示例 7 —高精度、高召回率和高特异性
这是“圣杯”——分类器将所有正面的例子检测为正面的,将负面的例子检测为负面的。所有措施都处于 100% 。
示例 8 —低精度、低召回率和低特异性
这看起来像一个糟糕的分类器,所有的正例被预测为负,所有的负例被预测为正。所有措施都是 0%。然而,你可以简单地做与它预测相反的事情,然后它就完美了👌。
总之,所有的度量(精确度、召回率和特异性)都给了我们关于分类模型好坏的重要信息。重要的是要把它们都看清楚。例如,在不考虑特异性的情况下,您可以创建一个非常精确的模型,并回忆简单地预测所有事情都是真实的,并且没有实际价值(如上面的示例 2)。
数据人员-不要忘记特殊性!尤其是当你在和医学界打交道的时候。
我应该开源我的模型吗?
决定是否开源机器学习模型的最佳实践
我已经研究开源机器学习与敏感性的问题很长时间了,特别是在灾难应对的背景下:什么时候公开发布数据或模型是对的/错的?本文列出了一些常见问题、当今最佳实践的答案,以及我在哪里遇到过这些问题的一些例子。
What are the risks of sharing your Machine Learning model?
OpenAI 本周引发了一场风暴,当时他们发布了新的研究,显示了许多人工智能任务的最新成果,但他们决定不发布他们的机器学习模型,这违背了研究界的普遍做法:
“由于我们担心该技术的恶意应用,我们不会发布经过训练的模型。”
对 OpenAI 决定的批评包括它如何限制了研究社区复制结果的能力,以及这一行动本身如何加剧了媒体对 AI 的恐惧,这种恐惧现在被夸大了。
正是这条推文首先引起了我的注意。Anima Anandkumar 在弥合机器学习的研究和实际应用之间的差距方面有很多经验。我们是 AWS 的同事,最近一起讨论了机器学习从博士到产品的问题(https://vimeo.com/272703924)。
Stephen Merity 很好地总结了社交媒体的反应,他感叹说,机器学习社区在这方面几乎没有经验:
我在机器学习和灾难响应方面的经验很少。在来美国完成斯坦福大学自然语言处理博士学位之前,我在塞拉利昂和利比里亚从事冲突后发展工作,从那以后,我一直在工业和灾难应对领域工作。公平地说,与我一起工作的大多数人以前从未考虑过数据和模型的敏感性,因此本文希望能够弥合这一差距。
本文旨在作为一个独立的资源,供提出这些问题的人参考。如果你想看引发它的文章,这里有 OpenAI 的帖子,其中包含了他们的担忧,如生成类似假新闻的内容和在网上假冒他人的能力:
我们已经训练了一个大规模的无监督语言模型,它可以生成连贯的文本段落,实现…
blog.openai.com](https://blog.openai.com/better-language-models/)
下面是引起如此多讨论的推文——你可以阅读在我写这篇文章的时候仍然收到的回复:
OpenAI 保留他们的模型,而只提前给记者,这是对还是错?我让你来决定。对我来说(正如我下面要讨论的), OpenAI 在两个本可以缓解问题的领域失败了:调查虚假内容是否能被检测出来;并发布多种语言的模型来对抗对英语的偏见。
以下是一些问题,您可以在评估自己是否发布模型或数据集的决策时使用:
应该质疑是否开源我的模型?
是的。如果你的模型是建立在私有数据上的,它可以被逆向工程提取私有数据。
我的模型 100%来自公开数据,那么我需要质疑是否开源我的模型吗?
是的。如果在新的上下文中重新发布,发布的数据可能会变得敏感,聚合数据(包括机器学习模型)可能会变得比单个数据点更敏感。
在阿拉伯之春期间,我看到许多人在推特上谈论他们当地的情况:道路封锁、难民等。虽然它们是“公开”的推文,但这些推文显然是为少数几个追随者写的,他们没有意识到报道道路封闭也有助于描绘部队移动的画面。作为不做什么的一个例子,其中一些推文被复制到联合国控制的网站并重新发布,没有任何机制让原作者将它们从联合国网站上删除。中东和北非的许多参与者将联合国视为负面的外国影响(或入侵者),因此发推文的人被视为合作者——他们不在乎这些人是否只想与少数追随者分享信息。
所以,你需要问自己:将数据或模型重新文本化,使其现在由我自己或我的组织发布,会有什么效果?
当单个数据点不敏感时,聚合数据被视为敏感也是很常见的。这是许多军事组织的标准做法:当他们从一组来源汇总数据时,他们会重新评估汇总信息的敏感程度。聚合通常是统计或无监督机器学习的结果,但基于该数据构建的监督模型同样适用。关于聚合如何改变军队中数据敏感性的公开示例,请参见最近的一个案例,其中军队中使用 Strava 的跑步者意外泄露了基地的位置,当时它显示了军队中跑步最多的人的热图:
现代版的二战时期的警告“信口开河会沉船”可能是“FFS 不要分享你的 Fitbit…
www.wired.com](https://www.wired.com/story/strava-heat-map-military-bases-fitness-trackers-privacy/)
许多组织选择采用类似的政策。Medium 就是其中之一:在写这篇文章时,根据 Medium 的策展指导方针,我不能“暴露某人的身份,包括暴露个人信息或聚集公共信息”。你也应该这样做。
所以,你应该经常问自己:在我的模型中,数据的集合比单个数据点更敏感吗?
我如何评估风险?
使用与安全性相同的模型:权衡误用的成本与它为不良行为者提供的价值。
在安全方面,你把每一个策略都视为“易破的”。目标是使破坏某些安全措施的成本高于您所保护的数据的价值。所以,不值得坏演员花时间去破它。
对于那些出于负面原因想要使用你的研究论文中的模型的人来说,复制这些模型的成本值得吗?你应该明确这一点。这是你决定是否开源的一个因素。
在 OpenAI 的案例中,他们可能已经决定发布该决定的风险简介,大致如下:我们认为不开源该模型的决定足以阻止互联网上大多数孤独的巨魔重新创建该模型。但我们承认,一大群科学家(可能是国家资助的)以我们的研究论文为指导来重建模型是不够的。
我应该相信记者对风险做出决定吗?
不。或者至少,不是没有问题。记者必须出售内容,而更耸人听闻的内容往往会卖得更多。有意识或无意识地,一个记者可能倾向于开源,因为这样他们更容易写它。另一方面,不开源数据的决定可能会导致耸人听闻的关于该决定所包含的危险的报道(就像 OpenAI 的案例一样)。
我见过很多灾难中糟糕的新闻报道导致的可预防的死亡案例。在 2014 年西非埃博拉疫情中,我预测:
每有一个人感染埃博拉病毒,就会有十个人死于其他可预防的疾病。
medium.com](https://medium.com/@robert.munro/the-silent-victims-of-ebola-e1a8f83185a9)
我是应对疫情的大多数主要政府和援助组织的顾问,因为我之前曾在该地区生活过,并分别在东非从事埃博拉疫情追踪工作。我警告过几乎每一家新闻机构,无论是本地的还是国际的,关于围绕报道的炒作和它可能导致的死亡。
一小群记者听了,但大多数没有。疫情结束后,当塞拉利昂卫生部副部长在旧金山的一次会议上发言时,她报告了这些完全相同的令人悲伤的数字:他们估计,每有一个人直接死于埃博拉,就有 10 人因为不去诊所而死于其他疾病。
所以,在和记者谈论你的研究时要非常小心。
我如何确保记者负责任地谈论我的机器学习研究?
接受媒体培训!许多组织都有媒体培训,即使只有几个小时也会有所帮助。我不能在这篇文章中总结你需要知道的所有事情,但是这里是我发现的通常有效的最重要的事情:
问记者他们的故事是关于什么的。
如果他们写的是机器学习研究的进展,那么你可能没问题。如果他们写的是“人工智能的危险”,或“假新闻”,或“干涉选举”,那么你应该越来越小心你的采访可能会被歪曲以适应他们的叙述。
问一个故事是关于什么的策略对我来说很有效,但我记得只有一个例外:一名 BBC 记者正在写一篇关于英语如何主宰互联网的文章。我在接受采访时说,不,英语在互联网上的份额一直在稳步下降:人们更喜欢他们的主要语言,英语正在成为“互联网的第二语言”。但是他们报道我说“英语正在成为互联网的语言”。如果发生这种情况,你也无能为力 BBC 的影响力比我否认我说过这话的推特更大。你可以要求媒体机构修改文章,或者至少公开声明你被错误引用了。
我应该相信政府会做出风险决策吗?
不。很明显,你不应该违反法律。但不能因为合法就说可以。政府是一群像其他人一样的人,试图让他们的头脑面对机器学习的真实和不那么真实的威胁。
政府也容易受到媒体的影响。为应对埃博拉疫情,利比里亚政府关闭了边境。在边境工作过之后,我知道这完全是一场闹剧。边界是一系列相连的村庄、河流、小溪和森林小径,早在今天的官方边界之前就存在了。“关闭”边境和共享边境感染数据让政府看起来很果断,但最终几乎没有人能免受埃博拉病毒的影响,而是让他们远离诊所去治疗其他可治疗的疾病,让情况变得更加糟糕。
像记者一样,将政府视为重要的合作伙伴,但要认识到你们都有不同的议程,其中许多议程将是一致的,但不是全部。
我应该从我的模型中调查负面用例的解决方案吗?
是啊!这是 OpenAI 的失败之一。如果他们认为他们模型的输出可以用来制造假新闻,那么这是可以检验的:
你能创建一个文本分类任务来区分人类书写的内容和 OpenAI 模型的输出吗?
这是一个 OpenAI 可以在几天内运行的实验,它将让我们更好地了解这到底是一个多大的问题。
最近,我与脸书进行了长时间的会谈,讨论加入他们的角色,负责发现假新闻。从一个正在解决这个问题的人的角度来看这个问题,这是我想知道的第一件事:我能通过编程来检测这种模型输出,以便解决它吗?我最终决定担任目前的职位,原因与这个角色本身无关——我认为打击脸书的假新闻是任何人现在都可以做的最重要的事情之一——open ai 的这项额外研究将会有所帮助。更好的是,如果您可以创建一个可以识别生成内容的模型池,那么创建击败所有模型并通过自动检测系统的生成内容将变得更加困难。
如果您可以定量地证明,数据的负面用例更容易或更难应对,那么这将是您决策过程中的一个因素。
这是机器学习的新问题吗?
不,而且你可以从过去的经验中学到很多。
2014—2015 年,沙特阿拉伯政府曾三次找我帮忙监控社交媒体上的异见人士。当时我是 Idibon 的首席执行官,这是一家大约 40 人的人工智能公司,拥有大量语言中最准确的自然语言处理技术,因此我们自然被视为最适合他们用例的技术。沙特阿拉伯的一个部门首先直接接触了我们,然后是间接接触,一次是通过一家精品咨询公司,一次是通过世界上五大咨询公司之一。在每一个案例中,公开的目标都是帮助那些抱怨政府的人。经过与沙特阿拉伯和机器学习专家的仔细磋商,我们决定使用一个识别投诉的系统来识别持不同政见者。由于沙特阿拉伯是一个不经审判就迫害持不同政见者的国家,而且经常是暴力迫害,我们拒绝提供帮助。
如果你正面临类似的困境,请寻找有知识深度的人来谈论最受影响的社区(理想情况下是该社区内的人)以及过去面临类似机器学习问题的人。
假新闻是新问题吗?
不。宣传可能和语言本身一样古老。
2007 年,当我护送记者报道塞拉利昂选举时,我们不断听到暴力报道。我们将跟踪这些报道,以发现没有实际的暴力行为。原来是一家盗版电台在播放假新闻,其中一些是由合法电台接收的,假新闻的意图是将一个或多个政党的支持者描绘成暴力分子,并可能吓得人们根本不去投票。
在塞拉利昂最近的选举中,我看到社交媒体上流传着类似的关于暴力和选举舞弊的假新闻。大型社交媒体公司负责假新闻的人都悄悄地向我承认,他们无法识别塞拉利昂和其他许多国家的大多数语言中的假新闻。
所以,宣传已经在这里很长一段时间了,它使用了一切可用的技术来扩大信息的传播。最大的差距是在对抗宣传的方式上,这意味着在大多数情况下英语之外的更好的人工智能。
我应该专注于平衡机器学习的坏用例与更明显好的用例吗?
是的。通过发布主要具有积极应用领域的模型,很容易对世界产生积极的影响。限制一个有很多负面应用领域的模型发布,很难对世界产生正面影响。
这是 OpenAI 的另一个失败,他们缺乏多样性。与其他任何研究小组相比,OpenAI 发布了仅适用于英语和(很少)少数其他高特权语言的模型和研究。英语只占世界日常对话的 5%。在句子中的词序需要有多严格,在标准化拼写中,以及在“单词”作为机器学习功能的原子单位如何有用方面,英语都是一个异数。OpenAI 的研究依赖于这三个方面:词序、词作为特征、拼写一致。它能适用于世界上大多数的语言吗?我们不知道,因为他们没有测试过。OpenAI 的研究告诉我,我们需要担心英语的这种内容生成,但它没有告诉我今天假新闻流通的 100 多种其他语言的风险。
坦率地说,OpenAI 的多样性问题根深蒂固。当我和几十个人一起注意到一次人工智能会议有 30 多位全是男性的演讲者,并且 OpenAI 的首席科学家是第一位演讲者时,OpenAI 忽视了这些抱怨。
尽管不同的人公开或私下发了一些信息,但我不知道 OpenAI 采取了什么行动来解决这个多样性表现的问题。
我个人拒绝所有我认为会议阵容在机器学习社区中延续偏见的演讲邀请,我知道许多人也这样做。很可能 OpenAI 对多样性的更宽松的态度导致了不多样化的研究。在实践中,我一般不相信世界上 95%的语言只有英语的结果。OpenAI 有很多很好的基础研究,比如如何让任何模型更轻量级,从而在更多的上下文中可用,但他们的英语语言重点限制了积极的用例。
如果你不想踏入假新闻这类应用的灰色地带,那么就选择一个天生更有影响力的研究领域,比如低资源语言中健康相关文本的语言模型。
我需要多深入地考虑用例的敏感性?
一直到各个领域。当我为 AWS 的命名实体解析服务运行产品时,我们必须考虑是否要将街道级地址标识为一个显式字段,并潜在地将坐标映射到该地址。我们认为这是固有的敏感信息,不应该在通用解决方案中产品化。
在任何研究项目中考虑这一点:您是否在您的模型中明确或隐含地识别敏感信息?
我是否应该开源我的模型,仅仅因为其他人都这样做?
不。你应该总是质疑你自己的影响。
无论你是否同意 OpenAI 的决定,他们在做出明智的决定而不是盲目跟风发布完整模型方面是正确的。
我还应该担心什么?
可能有很多东西我今天没有讲到!我写这篇文章是作为对 OpenAI 昨天宣布的快速回应。如果有需求,我会花更多时间分享最佳实践!
机器学习算法应该指导抗生素处方吗?
Photo by freestocks.org on Unsplash
机器学习可以解决抗生素耐药性危机。算法在现实世界中的表现会像在实验室中一样好吗?
答抗生素耐药性正成为一个严重的问题——目前,每年有超过 700,000 人死于抗生素耐药性感染。到 2050 年,预计将有 1000 万人死于耐药性感染。
帮助阻止抗生素耐药性传播的方法
许多感染是“凭经验”治疗的,这意味着如果医生知道你感染了什么细菌,他们会开出标准的抗生素来治疗。这意味着,如果你患有对标准抗生素有耐药性的感染,在你服用抗生素的过程中,细菌仍然在你体内存活和复制。随着时间的推移,这可能导致抗生素耐药性细菌的流行率上升。
人们对在病人开始治疗前测试抗生素耐药性越来越感兴趣。下图有点复杂,但它显示了首次开出正确抗生素的潜在长期影响。
Image: Tuite et al. 2017
图 A 显示了给每个人开两种抗生素组合处方的效果。在几十年的时间里,对这种疗法产生抗药性的感染数量会增加。
B-D展示了如果在开处方前将患者对其中一种药物的耐药性检测从 10%增加到 50%会发生什么。对三种可用抗生素的耐药性实际上上升了,这是一种更糟糕的情况。
但是面板显示了所有三种可用抗生素在 10-50%人口中测试的影响。随着检测覆盖率的增加,对抗生素的耐药性停止增加,大多数感染对所有抗生素都敏感。
将此付诸实践
在开处方前测试抗生素耐药性似乎是一个很好的方法。然而,有一些实际的限制妨碍了这种日常工作。一个主要的问题是,当人们去看医生或去医院接受治疗时,他们希望立刻得到抗生素来治疗他们的感染。实验室耐药性测试可能需要 24 小时(如耐甲氧西林金黄色葡萄球菌)到数月(如肺结核)的时间。
随着时间的推移,全基因组测序变得越来越便宜,使其成为检测抗生素耐药性的更实用的方法。理论上,测序可以在几个小时内给出结果,而不是几天。驱动这些细菌耐药性的机制被编码在它们的 DNA 中,这意味着一个简单的测试就可以告诉我们对一组抗生素的耐药性,还可以给我们其他有用的信息,比如你感染的菌株是否在上升,或者与当时在医院或社区传播的菌株有关。
我们知道我们需要找到的信息在这些细菌的 DNA 中,但我们并不总是知道如何找到它。这就是机器学习的用武之地。
在过去的几年中,有前途的机器学习研究不断涌现,都声称在预测耐药性方面具有很高的准确性。但是,在科学研究的受控条件下比在现实世界中更容易实现高准确性,因此这些算法在面对临床数据时的表现仍然存在不确定性。
检验 ML 模型的稳健性
这是我和我的同事们非常感兴趣的问题,在本月发表的一篇新论文中,我们开始探讨这个话题。这项研究着眼于三种机器学习方法:
- 集合覆盖机
- 随机森林分类
- 随机森林回归
我们正在调查来自淋病奈瑟菌的七组不同的基因组序列数据,这是一种引起淋病的细菌,每一组都是在不同的地点用不同的取样策略收集的。这项研究着眼于环丙沙星(其耐药机制相当简单)和阿奇霉素(其耐药机制更复杂且了解更少)的耐药性。为了将基因组序列数据处理成模型可以使用的东西,基因组序列被分解成 31 聚体,即 31 个字母长的 DNA 片段。使用 5 重交叉验证调整超参数。
虽然 ML 方法对导致环丙沙星耐药性的简单耐药机制表现良好,但它们对更复杂的阿奇霉素耐药性表现不佳。这是一个遗憾,因为我们可以通过寻找单个突变来非常准确地预测环丙沙星耐药性(> 98%的灵敏度和> 99%的特异性)。我们希望 ML 能揭示更多关于阿奇霉素耐药性的信息。我还在全基因组关联研究中发现了类似的事情,这是一种更为明确地设计用于找出基因组中驱动耐药性的因素的更古老的技术——这些方法在告诉我们已知的东西方面很好,但在揭示我们不知道的东西方面不太好。换句话说,如果历史上人类很难理解某个特征的遗传,那么这些算法也很难理解。
Performance of the different methods on predicting ciprofloxacin resistance (left) and azithromycin resistance (right) using two different clinical definitions of resistance (EUCAST and CLSI). Figure from this paper.
就模型性能而言,我们看到抗生素、物种和方法之间存在许多可变性,从这个项目中得到的主要收获是,一种方法并不适合所有问题,即使是在这个狭窄的问题空间内。这意味着,要设计一个我们可以发送所有临床数据的管道并不容易——需要有一个流程来为每个问题选择正确的模型。
我们正在研究的一个主要因素是采样偏差。这可以以仅从特定患者群、特定时间段或特定地理区域取样的形式出现。采样偏差是任何预测建模中的一个主要挑战。在耐药性预测中,从特定患者人口统计数据或在有限的时间段内进行采样会影响耐药性样本的数量以及您捕获的耐药机制的多样性。
Distribution of MIC values (a measure of the concentration of antibiotic bacteria can tolerate before it impairs their growth) for the seven different collections — each collection is shown in a different colour. Figure from this paper.
在不同的淋病数据集中,有些是在当地收集的,有些来自全球收集,有些来自一年,有些跨越 20 多年。我们发现,即使您有一个包含来自世界各地的样本的大型数据集,在此集合上训练的模型在来自新位置的数据上仍然比在本地训练的模型表现更差。有时,在全局集合上训练的模型在来自先前采样位置的新数据上甚至比仅使用来自该位置的数据训练的模型表现更差,这表明存在影响准确性的数据集特定信号(可能是偏差或技术假象)。
这项研究还观察了环丙沙星耐药性预测在肺炎克雷伯氏菌和鲍氏不动杆菌中的表现,这两种细菌比 T4 淋球菌携带的基因范围更广,因此产生更多的 k-mers。对于这些情况,SCM 比 RF 分类器更适合训练数据,但是 RF 分类器总体上不太准确。与淋病一样,寻找单一已知突变比 ML 模型给出了更好或相等的平衡准确性。
这项研究的一个重要收获是不要相信在这个领域建立的只报告其准确性的模型。我们真正关心的耐药谱是那些目前很少对抗生素产生耐药性的谱,所以我们仍然使用抗生素。一个模型可以通过预测所有事物都不具有抗性来实现对这些罕见抗性的高精度。明确了解模型遗漏的耐药分离株的比例和数量非常重要,因为这将导致临床治疗失败和耐药选择。
阅读全文
作者摘要基于机器学习的细菌基因组序列抗生素耐药性预测代表了一个新的研究方向
journals.plos.org](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1007349)
我们应该为未来技术改造基础设施吗?
Photo by Randy Fath on Unsplash
改变我们现在的世界来适应未来的机器人。
当新技术在公共领域变得流行时,基础设施被修改以更好地适应该技术。在早期殖民时期的美国,港口城市通常采用鹅卵石街道。虽然今天,这种路径被浪漫化了,但它们最初是为了改善马蹄与地面的牵引力而铺设的。作为当时的负重兽,马帮助搬运大量货物,鹅卵石街道给了蹄子更大的推进力。
最近,大城市已经适应了无处不在的智能手机技术。纽约市用充电站和 Wi-Fi 热点取代了电话亭。许多现代交通系统,如飞机和地铁,也可以接入 Wi-Fi。特拉维夫市最近实施了楼层交通灯,让手机粘行人知道十字路口的状态。
这两个例子都是反动的基础设施变化。一种技术(或马)被广泛使用,与之相适应的公共基础设施也随之建立起来。然而,一个几乎相反的问题存在于许多现代自动化技术中。随着各公司试图将无人驾驶汽车、飞行出租车、货运无人机和送货机器人引入公共领域,它们不断努力适应我们已经创造的不一致的世界。所以问题来了,我们应该修改我们自己的世界以更好地适应未来的自主技术吗?
目前的自动驾驶汽车依赖于多种类型的传感器来检测它们的周围环境。除了 GPS,自动驾驶汽车还集成了激光雷达和雷达传感器,以帮助导航和解释他们的环境。特斯拉汽车使用彩色视觉摄像头进行导航。虽然所有这些传感器都有其物理限制,但它们的好坏取决于解释它们的算法。当出现弯道情况时,许多车辆依靠学习算法来更好地改善驾驶。这种方法表明,首先需要犯错误。像 Waymo、这样的公司让他们的车辆经历古怪的情况来提高性能。也许有尚未开发的技术可以提高这些机器人的鲁棒性。
特别是随着 5G 网络技术的发展,已经有了利用网络通信辅助导航的考虑。构成现代道路的许多特征——交通灯、停车标志、交通锥标、道路标线——都是为了方便司机而设计的,这些司机需要对如何在道路上行驶进行视觉排队。可以通过无线方式通信的机器不一定需要这样的队列。知道了自己在城市中的位置,汽车就有可能在附近利用无线技术监听交通灯和停车标志信号。
这种实现在十字路口或需要进行重要操作时肯定会很有用。微操作汽车也有可能应用。照亮现代道路的路灯已经是一种能源。给一排路灯配备射频通信系统可以用来定位路上的汽车并确定其速度(抱歉,超速行驶会更困难)。这将让汽车知道它是否偏离了车道中心或以不适当的速度行驶。更实际的是,如果前方有意想不到的路障,这些系统可以迅速通知汽车。
彩色视觉系统不应该被完全抛弃。随着家用机器人技术的出现,视觉系统可能是给机器人快速引导的便利方法。类似于人类阅读文字以确定指令的能力,给世界贴上二维码可能是告知自动驾驶汽车、制造机器人和无人机如何行动的一种简单方式。二维码有被标准化的好处。机器人不需要理解特定国家的书面语言,这已经是一项艰巨的任务。这种系统也是节能的。与其重新分配电力以适应更智能的道路,不如简单地改变交通标志的内容。
Boston Dynamics’ new ostriches use QR codes!
尽管这些对未来的乐观看法令人愉快,但暗示它们会很便宜是愚蠢的。这样的努力将和目前的自动驾驶汽车本身一样雄心勃勃。需要建立一个能够与现代道路规则相结合的电子标准。手动驾驶和自动驾驶世界之间的过渡必须平稳,并且向后兼容。
随着美国开始承认基础设施大修的必要性,对未来技术的考虑是一个值得讨论的问题。实施智能道路不一定要立竿见影。已经采用自主技术的城市,如旧金山、凤凰城和匹兹堡,可以优先考虑逐步过渡。也可以采取相反的方法。严重依赖汽车的美国被忽视的郊区可以成为这类项目的一个有用的试验台。无论如何,基础设施官员与主要技术公司和专家的互动可以对未来几十年社会和自主技术的继续发展产生迷人的影响。
我们应该用英语编码吗
使用语言来减少进入科技行业的障碍
在进入数据科学领域之前,我的背景是一名语言学家。我研究了从马来语到祖鲁语的一切,所以我知道人类语言中存在的丰富多样的语法和句法。
然而,尽管语言流利是我们与生俱来的能力,但对于有抱负的数据科学家来说,最大的障碍之一是获得与计算机对话所需的语言——代码语言。请考虑以下情况:
var languages = ["Amharic", "Catalan", "Finnish",
"German", "Swazi", "Uzbek"];
var text = "";
var i;
for (i = 0; i < languages.length; i++) {
text += languages[i] + "<br>";
}
说英语但没有接受过计算机培训的人不会立即凭直觉知道这段代码在做什么。
语言学家感兴趣的是编程语言如何在一个范围内,从极度僵化和不透明到接近对话。JavaScript(见上图)是形式语言中明显非自然的一端;纯 Python 更偏向另一边:
languages = ["Amharic", "Catalan", "Finnish",
"German", "Swazi", "Uzbek"]
text = ""
for language in languages:
text += language + "\n"
即使是没有什么编程经验的人,至少也可以对这里发生的事情进行有根据的猜测,而不会完全错误。
两个 for 循环产生相同的输出。两种语言都是图灵完备的。但是从纯语言学的角度来看,一个比另一个更容易被初学者理解。
降低计算机编程的门槛
在一个由数据和计算机主宰的世界里,操纵这两者的能力是一项日益重要的技能。有能力的人和没有能力的人之间的知识差距越来越大,因此收入差距也越来越大。
因此,允许非程序员使用计算机科学工具的编程语言很难被高估。以 R 为例。作为一种编程语言,它是个怪人。你可以使用许多不同的策略来达到相同的目的(违反了 Python 的禅,即“应该有一种——最好只有一种——显而易见的方法来做这件事。”).
但这为统计学家、研究科学家和其他需要即时分析数据的人提供了一个巨大的优势:“它允许统计学家在不了解计算系统的血液和内脏的情况下进行非常复杂的分析。”
它也是免费和开源的,这意味着任何有电脑和一些莫邪的人都可以下载它,学习它,并与其可观的用户群联系。对于传统上在技术领域代表性不足的人群来说,这是一个好消息,尤其是女性,对她们来说,R 社区已经证明是性别多样性的 T2 堡垒。这也意味着除了基本的计算机知识之外,你不需要花钱或接受任何专门的教育来开始学习它。
人类大脑可以做计算机做不到的事情——比如识别母羊、母羊、母狮、母鸡和母猪都是雌性动物。我们的认知意味着我们的语言可以少一些字面上的精确,多一些隐喻。(比如说,计算机需要显式的 XML 标签和属性来实现相同的分类。)那么,在某种程度上,每个严肃的程序员都需要学习像正则表达式和正式语法约定这样的东西。
但是为什么以那些开始?进入科技行业已经够难了,尤其是如果你不是富裕的白人男性。谷歌 2019 年多元化报告显示,女性和少数族裔在领导岗位上的比例有所下降,女性从已经很低的 29.4%下降到 25.7%。2018 年新招聘的科技人员中,只有 25.7%不是男性。83%的科技高管是白人。获得计算机科学教育是一个严重的问题,即使对于相对特权的人来说也是如此——由于高需求,大学正在限制计算机科学专业,进一步扩大了不平等差距。
构建抽象的基础
一旦有人掌握了作为计算机编程基础的算法思维模式,他们就能够将它们应用于任何编程语言。那么,为什么不从一门让学习这些概念变得简单自然而不是令人沮丧的语言开始呢?
熨斗学校的创始人强调了这一点,指出重要的不是你学习的第一语言,而是学习如何学习,获得普遍的想法,并学习将它们应用于各种不同的背景。语言几乎是不重要的;甚至可以用积木和现实世界的物体来教编码。
事实上,所有编程语言都是抽象的,通过提供一个或多或少类似于自然人类语言的接口,允许人们间接编写句法和语义上无法理解的机器代码。认为机器学习可能让我们直接用英文编码并不牵强。对于一个初学编程的人来说,编程语言越接近母语越好。任何人最终都会学到难的东西,但为那些刚起步的人创造公平的竞争环境至关重要。通过混合语言提供一座从普通英语到计算机语言的桥梁,这种混合语言共享两者的特征,这似乎是编码作为一种必需的工作技能日益普遍的自然结果。
最初发布于https://www . espritdecorpus . com/posts/should-we-code-in-English/
该不该读数据科学博士?
如何在学术界和商界之间做出选择
如果你正在考虑攻读数据科学的博士学位,你将不得不决定是想利用你的博士学位获得一份数据科学家的工作,还是更深入地参与研究并试图解决真正复杂的理论问题。这可能是一个具有挑战性的选择。
Should you do a PhD in Data Science
PhD 适合你吗?
另一件事是,博士学位是否适合你。我已经在我的另一篇文章中提到过,但是在这里总结一下:
- 确保数据科学是你的激情所在,并且你愿意在它上面花费大量的时间
- 确保你能够资助你的研究
- 保持好奇心,渴望学习新事物
- 坚持不懈,不要轻易放弃
如果你已经决定这是适合你的,但你仍然不知道到底要不要去做,这里有几个问题值得考虑:
- 你想以后留在学术界做研究吗?
- 你想去企业还是初创企业?
- 你想成为一名自由职业者、顾问还是自己创业?
取决于你选择哪一个,你将以不同的心态毕业。
在第一种情况下,你应该尽可能地专注于研究。在第二种情况下,除了研究之外,你应该考虑在学术界之外建立关系网,并开始以普通观众可以接受的形式传播你所做的事情。在第三种情况下,你需要提高你的软技能——沟通、策略、计划,以便有效地利用你的时间。
什么是数据科学博士?
现在谈谈博士——攻读数据科学博士学位可能意味着几件事:
- 经济学院统计学博士
- 应用数学系数学博士
- 在计算机科学系获得计算机科学或机器学习博士学位
选择哪一个答案将取决于你最终想要投入多少编码时间,以及你想要得到多少实用性。
- 选项是给那些想要实用但不怎么编码的人
- 选项是为那些不想一定实用的人准备的
- option 是为那些想要实用并同时编写大量代码的人准备的
这里没有更好或更坏的选择,这完全取决于你博士毕业后想做什么。你是否想象自己每天编码 8-10 个小时?你想认识人并可视化数据吗?你想在商业决策中使用数据科学?回答这些问题让你决定。
这里的关键是选择那些与你最相关的。
读博后有生活
当你完成研究后,你可以期待一个全职和兼职工作的未来,或者为咨询公司做咨询,为客户做数据分析,或者在一家涉及数据分析的公司工作。
对你来说,最好的决定可能是找到一份适合你优势的工作,并用你的博士学位来帮助你实现目标,无论是获得行业内最好的数据科学工作,还是获得更多的研究经验。
祝你好运!
Should you do a PhD in Data Science — watch this video to know more.
如果你想了解更多,请阅读我关于成为数据科学家的其他文章:
让我们保持联系,继续学习数据科学。](https://creative-producer-9423.ck.page/c3b56f080d) 
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
你应该用 SHAP 还是 IG 来解释你的预测?
今天一些最准确的预测模型是黑盒模型,这意味着很难真正理解它们是如何工作的。为了解决这个问题,出现了理解特征重要性的技术:对于一个给定的预测,每个输入特征值对该预测有多重要?两个众所周知的技术是沙普利加法解释(SHAP) 和积分梯度(IG) 。事实上,它们各自代表了一种不同的类型的解释算法:基于 Shapley 值的算法(SHAP)和基于梯度的算法(IG)。
这两种算法类型之间有一个基本的区别。这篇文章描述了这种差异。首先,我们需要一些背景知识。下面,我们回顾 Shapley 值、基于 Shapley 值的方法(包括 SHAP)和基于梯度的方法(包括 IG)。最后,我们回到我们的中心问题:什么时候应该使用基于 Shapley 值的算法(比如 SHAP)还是基于梯度的解释算法(比如 IG)?
什么是沙普利价值观?
Shapley 值(Lloyd Shapley 于 1953 年提出)是一种经典的方法,将合作游戏的总收益分配给合作玩家联盟。可以证明,这是唯一一个具有某些理想属性的发行版(在维基百科上有完整的列表)。
在我们的例子中,我们为每个实例的预测制定了一个游戏。我们认为“总收益”是该实例的预测值,而“玩家”是该实例的模型特征。合作博弈是所有模型特征合作形成一个预测值。Shapley 值效率属性表示特征属性的总和应该等于预测值。归因可以是负的或正的,因为特征可以降低或提高预测值。
有一种叫做 Aumann-Shapley 值的变体,将 Shapley 值的定义扩展到有许多(或无限多)玩家的游戏,其中每个玩家只扮演一个次要角色,如果价值函数(包括玩家联盟的收益)是可微分的。
什么是基于 Shapley 值的解释方法?
基于 Shapley 值的解释方法试图通过检查在其他特征存在或不存在的所有可能组合下移除特征的影响来近似给定预测的 Shapley 值。换句话说,该方法查看像 F(x1, <不存在> ,x3,x4,…, <不存在>, …)这样的特征子集上的函数值。如何评价一个缺少一个或多个特征的函数 F 是很微妙的。
例如,(SHapely Additive exPlanations)通过对从训练集中提取的那些特征的样本进行平均,来估计模型在缺少某些特征的输入上的行为。换句话说,F(x1,<缺项>,x3,…,xn)是从数据集中对缺失特征 x2 进行采样时,通过期望预测来估计的。
具体如何选择样本是很重要的(例如背景数据的边际分布对条件分布对聚类中心),但我将在这里跳过细节。
一旦我们为特征的所有子集定义了模型函数(F ),我们就可以应用 Shapley 值算法来计算特征属性。每个要素的 Shapley 值是该要素对其他要素的所有可能子集的贡献。
SHAP 论文中的“核 SHAP”方法通过定义加权最小二乘回归同时计算所有要素的 Shapley 值,该回归的解是所有要素的 Shapley 值。
最重要的一点是,所有这些方法都依赖于特征子集。这使得理论版本在运行时呈指数增长:对于 n 个特征,存在存在和不存在的 2^N 组合。这对大多数 N 来说太昂贵了,所以这些方法是近似的。即使有近似值,内核 SHAP 也可能很慢。此外,我们不知道任何系统的研究有多好的近似。
有专门针对不同模型架构的 SHAP 版本,以提高速度。例如,树 SHAP 通过巧妙地跟踪所有可能子集流入树的每一片叶子的比例来计算所有子集。但是,如果您的模型架构没有类似这样的专门算法,您就不得不依靠内核 SHAP,或者另一种简单的(未优化的)基于 Shapley 值的方法。
基于 Shapley 值的方法是有吸引力的,因为它只需要对模型的黑盒访问(即从输入计算输出),并且模型架构的版本是不可知的。例如,模型函数是离散的还是连续的并不重要。缺点是精确计算子集在特征数量上是指数级的。
什么是基于梯度的解释方法?
基于梯度的解释方法试图通过使用输出相对于输入要素的梯度(即变化)来解释给定的预测。一些方法,如集成梯度(IG),GradCAM 和 SmoothGrad,实际上应用梯度算子。其他方法如深度提升和 LRP 应用“离散梯度”
Figure 1 from the IG paper, showing three paths between a baseline (r1 , r2*) and an input (s1, s2). Path P2, used by Integrated Gradients, simultaneously moves all features from off to on. Path P1 moves along the edges, turning features on in sequence. Other paths like P1 along different edges correspond to different sequences. SHAP computes the expected attribution over all such edge paths like P1.*
让我描述一下 IG ,它的优点是试图逼近 Aumann-Shapley 值,这是公理化的。IG 通过在特征空间中考虑从手边的输入(例如,来自训练集的图像)到某个基线输入(例如,黑色图像)的直线路径,并且沿着该路径对关于输入特征(例如,图像像素)的预测的梯度进行积分来操作。
本文对 IG 算法的直觉解释如下。当输入沿着基线和当前输入之间的直线路径变化时,预测沿着从不确定性到确定性(最终预测概率)的轨迹移动。在该轨迹上的每个点,可以使用相对于输入要素的梯度将预测概率的变化归因于输入要素。IG 使用路径积分沿轨迹聚集这些梯度。
IG(粗略地)要求预测是输入特征的连续和分段可微函数。(更准确地说,它要求函数处处连续,并且沿每个输入维的偏导数满足勒贝格可积条件,即不连续点集的测度为零。)
请注意,为 IG 选择一个好的基线以进行合理的特征归因是很重要的。例如,如果选择一幅黑色图像作为基线,IG 不会将重要性赋予实际图像中的全黑像素。基线值应该既具有接近零的预测,又忠实地表示完全没有信号。
IG 具有吸引力,因为它广泛适用于所有可微分模型,易于在大多数机器学习框架(例如 TensorFlow、PyTorch、Caffe)中实现,并且在计算上可扩展到具有数百万神经元的大规模深度网络,如 Inception 和 ResNet。
什么时候应该使用基于 Shapley 值的解释方法,而不是基于梯度的解释方法?
最后,回报!我们的建议:如果模型函数是分段可微的,并且你可以访问模型梯度,那么使用 IG。否则,使用基于 Shapley 值的方法。
使用梯度下降训练的任何模型都是可微分的。例如:神经网络、逻辑回归、支持向量机。这些可以用 IG。不可微模型的主要类别是树:提升树、随机森林。它们在叶子上编码离散值。这需要一个基于沙普利值的方法,比如 SHAP 树。
IG 算法比基于原始 Shapley 值的方法(如核 SHAP)更快,因为它只需要计算几个不同输入(通常为 50)的模型输出梯度。相比之下,基于 Shapley 值的方法需要对从特征值的所有可能组合的指数巨子空间中采样的大量输入计算模型输出。计算可微分模型的梯度是有效的,并且在大多数机器学习框架中得到很好的支持。然而,可微模型是 IG 的先决条件。相比之下,基于 Shapley 值的方法没有这样的假设。
看起来离散的几种类型的输入特征(因此可能需要基于 Shapley 值的方法)实际上可以映射到可微分的模型类型(这让我们使用 IG)。让我们看一个例子:文本情感。假设我们希望将情感预测归因于某些输入文本中的单词。起初,这种模型似乎是不可微的,因为输入是离散的(单词的集合)。然而,像深度神经网络这样的可微分模型可以通过首先使用单词嵌入将单词映射到高维连续空间来处理单词。模型的预测是这些嵌入的可微分函数。这使得它易于 IG。具体来说,我们将预测得分归因于嵌入向量。由于属性是相加的,我们沿着每个嵌入向量的域对属性求和(保留符号),并将其映射到嵌入所对应的特定输入单词。
IG 的一个关键问题是:基线预测是什么?对于这个文本示例,一种选择是使用对应于空文本的嵌入向量。一些模型通过用特殊的“无单词”标记填充短句来接受固定长度的输入。在这种情况下,我们可以把基线看作是只有“无字”标记的句子的嵌入。
结论
在许多情况下(具有梯度的可微分模型),您可以使用集成梯度(IG)来获得对预测的特征重要性的更确定且可能更快的解释。但是,其他(不可微)模型类型需要基于 Shapley 值的方法。
在 Fiddler,我们支持 SHAP 和 IG。(充分披露:Ankur Taly,IG 的合著者,在 Fiddler 工作,是本帖的合著者。)欢迎发送电子邮件 info@fiddler.ai 了解更多信息,或者只是打个招呼!
原载于 2019 年 8 月 13 日https://blog . fiddler . ai。
你应该坐飞机还是开车?
Photo by Ross Parmly on Unsplash
一想到飞机失事我就毛骨悚然,因为我需要定期飞回家看望家人。最近,一家埃塞俄比亚航空公司发生了一起悲惨的事故,所有乘客遇难。如果你对飞机失事的细节感兴趣,你可以在这里找到:
在一次事故现场发现新证据后,波音公司停飞了其全球 737 Max 飞机机队
www.bbc.com](https://www.bbc.com/news/world-africa-47553174)
如果发生了这样的事故,显然很难有人能幸免于难。我想提前警告你,这篇文章可能包含一些关于飞行的惊人数据,所以如果你容易焦虑,我建议不要阅读整篇文章。但是,也有一些关于飞行的积极的事情可以缓解紧张。
所以,最近,我从克罗地亚飞往德国。出发时天气平静晴朗,当然也伴有一些讨厌的风。在登机前,我已经开始思考埃塞俄比亚航空公司的坠机事件,这真的不是登上国际航班时的心态。我具体思考的是关于飞机死亡率的贝叶斯定理,换句话说,你死于登机还是开车的概率是多少?
Photo by Paweł Puszkarski on Unsplash
我想到这一点的原因是一个经典的假设,即从统计数据来看,坐飞机比开车更安全。让我告诉你,它肯定不喜欢它。你从飞机的窗户向外看,你会看到那些翅膀基本上在拍打,看起来一点也不结实——当然,一些机械工程师考虑到翅膀上的力,这是经过深思熟虑的,它们的灵活性使它们更结实,更不容易折断。因此,看起来灵活而不结实的翅膀是个好东西。我不需要陈述显而易见的事实,但我还是要陈述,我不是机械工程师。但我具备了使用谷歌的能力,而且幸运的是,我在大学里学过一些物理学。但是,尽管如此,我还是无法摆脱大脑中的偏见——健壮的东西不应该那样移动!
乘车相对来说比较平稳,大部分时间都没什么事情。另一方面,乘坐飞机有一种叫做湍流的乐趣。如果你经常坐飞机,你可能在生活中的某个时候经历过颠簸,那么你就会知道这不是一种真正的好感觉。
拯救统计数据
我仍然安全地躺在地上,想着贝叶斯统计中癌症测试的经典例子。我不会在这里详细解释贝叶斯统计,但简而言之,它处理的是条件概率,即在其他事情已经发生的情况下,某件事情发生的概率是多少。癌症测试示例之所以如此有趣,是因为基于测试的置信度,您患癌症的概率会显著下降,您可以在此处找到关于癌症示例的贝叶斯统计的更详细解释:
贝叶斯定理是一篇详细文章的主题。这篇文章很好,但是超过 15,000 字——这是…
betterexplained.com](https://betterexplained.com/articles/an-intuitive-and-short-explanation-of-bayes-theorem/)
我具体感兴趣的是我死于坐飞机的概率和死于开车的概率(请原谅我听起来有点可怕):
幸运的是,当我经历人生中最大的动荡之一时,我正在思考这个问题,感谢达尔马提亚的 Bora(亚得里亚海上的强劲北风)。为了解决这个问题,我查阅了一些关于飞机和汽车碰撞和死亡的统计数据,我不允许使用图表,但我会通过链接分享相关的统计数据。
为了让它变得简单一点,因为这是一个快速的思维练习,而不是对飞行和驾驶的完整风险评估,我决定只看 2018 年的统计数据。
所以,首先是 2018 年发生的全球飞机死亡人数,统计数据如下:
该图描绘了从 2006 年到 2018 年的全球空中交通死亡人数。2018 年,561 人死于空难…
www.statista.com](https://www.statista.com/statistics/263443/worldwide-air-traffic-fatalities/)
由于我们着眼于 2018 年,死亡人数为 561 人。从积极的方面来说,我希望你记住以下几点:
死亡率,即死亡人数除以飞行次数,正在下降
我怎么知道这个?这是每年飞行次数的统计数据:
该统计数据给出了从 2004 年到 2019 年航空业在全球范围内执行的航班数量。乘客…
www.statista.com](https://www.statista.com/statistics/564769/airline-industry-number-of-flights/)
请注意,一年中的航班数量在稳步增长。与之前的死亡人数图表相比,我们不能说每年的死亡人数在稳步下降。但是,由于每年的飞行次数在增加,死亡率实际上在下降。死亡人数的波动性是可以理解的,因为飞机坠毁是一个罕见的事件。
更积极的一点是:
并非所有的飞机失事都会导致死亡
2018 年,我们发现航班数量约为 3980 万次。我认为一个安全的假设是平均航班载有 300 名乘客(这当然不准确,但使事情更容易计算,可能与事实相差不远)。所有这些航班的乘客人数如下:
那么,你乘坐 1 次航班成为伤亡人员的概率有多大?嗯,粗略估计是这样的:
很小不是吗?不要抱太大希望。让我们根据以下来源来看一下乘车次数:
[## 道路安全事实-安全国际道路旅行协会
查看世卫组织关于道路安全事实的信息图表。平均每年有近 125 万人死于车祸…
www.asirt.org](https://www.asirt.org/safe-travel/road-safety-facts/)
每年大约有 125 万人死于车祸,这是一笔不小的数目……另一项统计显示,当今世界上有 12 亿辆汽车行驶在路上……12 亿辆!另一方面,想象一下由此造成的污染。这本身就值得进行统计分析。同样,为了简化数学,让我们假设每节车厢平均有 2 名乘客。此外,让我们假设平均来说,一辆汽车每天使用两次,因为大多数人都用它上下班。这是一个很强的假设,可能是错误的,我会假设平均值低于 2,因为许多人只有在长途旅行时才开车。不管怎样,我们要找的数字是一年内参加汽车旅行的人数:
现在我们可以推导出你在一次汽车事故中伤亡的概率:
这与航班相比如何?嗯,你可以注意到它有点低,你死于车祸的可能性大约是死于飞机失事的 16 倍。当你只听到这个数字而没有其他任何东西时,16 次听起来相当可怕。根据乘客的正确期望值,该比率可能会有很大变化。如果预期的乘客数量高于 2,那么该比率也变得更低。具体而言,如果预期乘客数量为 4,则该比率变为 8。但是不管这个比例,你应该看到的是和的概率都很低,没有理由害怕飞机或汽车。
当然,你使用汽车越多,发生悲惨事故的可能性就越大。不用说,这种可能性还取决于其他因素,如你开车的地点、你的驾驶经验、旅程的长度和汽车本身的质量。然而,让我们陈述另一个有趣的问题。根据概率,你需要坐多少次汽车或飞机才能使你死亡的概率收敛到 1?我们可以把这看作是幸存的概率收敛到 0。这种情况只会在无数次尝试后才会发生,但是让我们考虑一下这种情况,根据统计数据,你存活的概率是 1%,这是非常渺茫的存活机会。
所以,你需要做 960 万次汽车旅行才能让你的生存几率降到 1%。对于飞机来说,这种计算看起来如何?重复同样的过程,你会得出这样的结论:
你需要乘飞机旅行超过 9300 万次,才能让你的存活率下降到 1%。事实上,存活率是 N 的函数(基于上面的统计):
存活概率下降需要相当多的尝试,事实上,对于 N=1000 000,存活概率仍然超过 95%!这是一种安慰。你知道你什么时候会做一百万次飞机旅行吗?从不。如果您每天乘坐 1 次航班,您将会:
所以,如果你活到了 100 岁以上,你将需要大约 27 辈子的时间才能使你有 95%的生存概率。这很让人放心,我现在对飞机的感觉好多了…
只是不要太早乐观,我总是提醒自己墨菲定律:
任何可能发生的事情都会发生
显然,飞机和汽车相撞有时会发生,但我们可以肯定它们是极不可能的。如果你想知道更多关于极不可能事件的影响,我建议你读一读纳西姆·塔勒布的《黑天鹅》,这是一本非常有趣的书:
[## 《黑天鹅》:第二版:《极不可能的事情的影响》;增加了一个新的章节:“关于…
黑天鹅是一个事件,积极的或消极的,被认为是不可能的,但造成巨大的后果。在这个…
amzn.to](https://amzn.to/2YatE9c)
总而言之,基于我在这篇文章中写下的这些非常规定的统计数据,你应该对使用汽车或飞机旅行感到安全。但别忘了,这全是随机和运气。
使用 Kaggle 内核展示您的数据科学技能
数据科学是每个大学毕业生都想进入的少数领域之一。这主要是由这个领域过去受到的大肆宣传推动的——从 HBR 的“数据科学家:21 世纪最性感的工作”文章到最近的开发人员调查,这些调查将数据科学家列为薪酬最高的角色之一。借助这种宣传,培训机构、教育机构和训练营开始引入商业分析/机器学习/数据科学/人工智能课程,许多在职专业人士和应届毕业生都参加了这些课程,希望这些课程能让他们在数据科学领域找到工作。但是几乎没有!
投资组合
因为,任何一个理智的招聘人员几乎都不会在意自己所学课程的名称,实际上重点是“作品集”——你所做/制作的展示你对数据/数字热情的东西。它可以是任何东西,从公共数据的可视化到你的项目的 Github 代码和一个阅读良好的文档。
“如果你不生产,你就不会繁荣——不管你有多熟练或多有才华。”—加州新港
框架
在我们深入探讨之前,我想先为一个引人注目的投资组合设定一个框架。您想要建立的投资组合应该能够为您做以下事情:
- 可在谷歌上找到更多信息(搜索)
- 创建品牌
- 允许建立粉丝群/观众群
- 这是你可以向潜在雇主提供的评估你专业技能的东西。
- 最终,在你希望进一步发展的领域获得良好声誉
重点是——ka ggle 内核
在这篇文章中,我试图说明一个人如何用 Kaggle 内核展示他们的数据科学技能——在那里你可以建立你的投资组合——这可以是带有讲故事功能的可视化或最先进的神经网络实现。
Kaggle 神话-竞赛赛道
名字 Kaggle 在数据科学社区引起了高度共鸣,是计算机科学社区中一个有竞争力的机器学习平台——很像 topcoder / hackerrank。正因为如此,许多初学者害怕进入 Kaggle 的世界,天真地认为 Kaggle 是专业人士的天地。他们中的大多数人(在某个时候包括我)忘记的是,那些专业人士(在 Kaggle 排名中是大师或大师)在加入 Kaggle 时也曾是初学者。此外,竞赛不仅仅是 Kaggle 的全部。竞赛只是 Kaggle 上可用的曲目之一。内核是 Kaggle 上另一个非常强大的轨道。Kaggle 内核是非常好的学习资源,也是非常好的分享资源——因此,让它成为你的数据科学投资组合。
Kaggle 内核的优势——作为您的投资组合
- Kaggle 内核由谷歌索引,这意味着,如果有人在这个星球上寻找与你的内核相关的东西,它将作为谷歌搜索结果显示出来
- Kaggle 内核——投票/奖牌贡献内核级数系统和排名。也就是说,只要专注于 Kaggle 内核,你就可以完全远离竞赛,仍然是专家/大师/特级大师
- 奖项/名声/金钱 —无论何时,只要你在拥有全球观众的平台上赢得了什么,你就获得了全球知名度。对 Kaggle 来说也是如此。Kaggle 经常举办基于内核的竞赛,并提供现金奖励或 Kaggle 奖品。最新的是本月的内核作者,并有现金奖励(高达 2000 美元)!
- 观众/粉丝群 — Kaggle 个人资料带有关注者/跟随选项。这意味着,任何对你的工作感兴趣的 Kaggler 也可以在 Kaggle 上关注你。它还可以让你添加其他专业资料,比如 Linkedin、Github,人们可以在 Kaggle 之外进一步关注你。
- Kaggle 知名 — Kaggle 在熟悉数据科学/分析/机器学习的理智的招聘人员中非常知名。这意味着,在你的简历中添加一个足够体面的 Kaggle 个人资料链接将会给你带来很多额外的优势,并且你正在利用 Kaggle 在数据科学市场中为其建立的声誉。
结论
虽然拥有多样化的投资组合是明智的——比如博客帖子、Github 代码、幻灯片演示。对于那些无法管理多元化投资组合的人来说,Kaggle Kernels 平台是一个强大的替代选择。虽然符合我们上面讨论的投资组合框架,Kaggle 内核也可以在数据科学社区中留下您的名字。
因此,你可以简单地用 Kaggle 内核展示你的数据科学技能,这最终会帮助你找到工作。
如果你同意/不同意我的观点,请在评论中告诉我你的想法!
参考
- 卡格尔内核—【https://www.kaggle.com/kernels
- 本月 Kaggle 内核作者——【https://www.kaggle.com/page/kernel-author-of-the-month
- https://www.kaggle.com/sudalairajkumar/ SRK 简介—
- https://towards data science . com/announcing-fast-ai-part-1-now-available-as-ka ggle-kernels-8 ef 4c a3 b 9 ce 6
暹罗梦
用连体神经网络跟踪的初学者指南
你坐在你的沙发上,狗在你的脚边,一只手完全沉浸在一袋白切达奶酪智能食品中。网飞在电视上,你刚刚通过 IMDB 评分 6.4/10 的第 48 分钟,惊悚监视。你看着主角试图躲避警察的监视。他们仔细研究了无休止的闭路电视监控录像,跟踪了对手的每一个动作,却没有触动任何一个按钮。你不禁会想。他们不会真的这么做吧?这个问题的答案是肯定的,他们可以。这个例子描述了在计算机视觉的流行科学学科的研究中的许多可能的应用之一。这是一个不断发展的研究领域,已经出现了大量的用例以及有前途的算法。这种算法包括暹罗神经网络,可以实现这些在电视上看到的结果。
现在,让这成为一个警告,这篇文章不会让你一夜成名,你可能不会像这个网站上的其他文章一样,拿出一个功能齐全的原型。你将会了解这些网络是什么,以及它们如何达到这样的结果。
假定是卷积神经网络及其背后的数学的基本知识。如果您没有,我建议您保存此选项卡,观看此视频,然后再回来。
暹罗概述
让我们考虑我们的最终目标是拍摄一段视频,选择一个目标,并在整个过程中跟踪它。现在让我们从兔子洞往下看,把它抽象出来。首先让我们想一想视频到底是什么。从根本上说,它只是一系列快速连续显示的照片或图像。因此,我们所要做的就是在视频的每一帧中找到一个目标,并在它周围画一个方框。这听起来和每个人最喜欢的儿童读物*“沃尔多在哪里”*出奇的相似。
用我们的眼睛,也许用我们的手指,从左到右扫描页面,看每一张脸,每一件衬衫或每一个特征,看看它是否与我们的老朋友沃尔多相匹配。甚至可能在他周围画一个圈,只是为了破坏其他可能想尝试的人的游戏。我们想训练一种算法来做到这一点。找到我们的目标,并在它周围画一个方框。
不幸的是,我们知道我们的网络记性不好。我们必须不断提醒它目标图像(瓦尔多)是什么样子的。为此,我们需要两个网络。一个处理我们的沃尔多图像,另一个处理我们要找的他的整个图像。这就是暹罗的用武之地。就像连体双胞胎一样。我们构建两个相同的全卷积网络*(我们稍后将讨论全卷积网络*)。twins 的工作是处理我们的两个图像(目标和搜索图像)并在两个独立的特征地图中表示不同的特征。它们是相互关联的,因为它们在完全相同的时间执行相同的工作,但是它们的输入是不同的。
它们需要相同的原因是为了以完全相同的方式表示两幅图像共有的特征。这对于比较我们是否拥有真正的瓦尔多至关重要。如果我们比较像他的衬衫这样的特征。我们必须确保我们有共同的属性(大小,颜色,图案)。保持这种状态的唯一方法是通过一个相同的网络来移动它们。
基本的想法是,如果我们可以将目标图像(Waldo)的表示放在搜索图像(场景)的上面。我们可以找到共享最多的特征在哪里,这将是我们的目标图像(Waldo)在图像中的位置。我们在它周围画一个方框,并对所有图像重复,直到视频结束!拍拍自己的背,你刚刚学会了这是如何工作的绝对基础。如果你为了考试或者为了给你的朋友留下深刻印象而学习这个,这可能是一个停止阅读的好地方。如果你正在寻找本质的细节,请继续关注。
为什么这是一种实时跟踪视频的有效方法的关键是我们需要理解的三个概念。这些是迁移学习、完全卷积网络和相关滤波器。我们已经知道什么是卷积神经网络,所以让我们看看什么使一个完全卷积。
全卷积网络
全卷积表示神经网络由卷积层组成,在网络末端没有任何全连接层。
在完全卷积实现中,网络在任何地方都在学习过滤器(特征图)。包括最终决策层。在全连接层中,每个神经元都连接到前一层中的每个神经元。每个连接都有它自己的重量。在卷积层中,每个神经元仅连接到前一层中的几个附近的局部神经元,并且对每个神经元使用相同的一组权重。
我们为什么要这么做?
输入图像大小: 如果你的网络中没有任何完全连通的层,你可以将网络应用于几乎任何大小的图像。因为只有完全连接的层需要特定大小的输入。这就是为什么在像 AlexNet 这样的架构中,你必须提供一定大小的输入图像。由于大多数视频和图像都有不同的大小,这使得我们可以轻松地进行调整,以满足弹性处理所需的规范。在这种情况下,使用全卷积网络会使我们的实现更加鲁棒。
计算成本和速度 :卷积层和全连接层在计算和存储方面也有区别。由于完全连接的性质,它会消耗更多的计算。另一方面,如上所述,全卷积网络具有较少的集中在“本地”的连接。这对于查看图像来说是完美的,其中根据需要,特征是局部的(例如,“Waldo 的红白衬衫”由一组附近的像素组成,而不是遍布整个图像)。连接数越少,全卷积网络的速度越快,由于我们是实时操作,这对于效率至关重要。
迁移学习
当网络不是从零开始学习(调整权重和连接)时,通常使用迁移学习。相反,它使用预先训练的知识,并建立在此基础上。我能想到的一个例子是一名机械师,他可能在大众汽车经销店修理汽车工作了多年。也许他找到了一份修理校车的新工作。他已经知道如何修理汽车,也知道修理汽车的复杂性。虽然他需要专门化他的技能并学习更多的知识来将这些知识转移到一种新型的车辆上。迁移学习在同样的前提下起作用。在我们的例子中,第一对层是经过预训练的,并且承载着一个非常成功的大型网络的重量。这将给出如上所述的图像的一般表示。剩余的层在大型数据集上进行训练,例如具有预定义边界框和目标的戈特-10K 。由网络误差表示的功能损失(预测位置与地面真实值的比较)
Why do we want to do this? -It speeds up network and training!
相关过滤器
好了,我们现在真的开始把这些碎片拼在一起了。让我们回想一下沃尔多在哪里的类比。我们目前有一个我们在 Waldo 寻找的产品展示(眼镜、衬衫、帽子等。).我们所要做的就是将它与我们的搜索图像特征进行比较,看看我们是否能够将它们匹配起来!如果你做了功课,你应该记得卷积神经网络创建特征图的操作。它如何接受滤波器并执行矩阵数学运算,像滑动窗口一样在整个图像上移动。这产生了具有突出特征的新图像。在寻找我们的目标时,我们几乎要做同样的事情。我们将使用搜索图像的特征图,而不是使用一般的学习过滤器。将它逐块传递到图像上,我们对图像进行卷积。我们接收到的输出代表了逐块的相似性,匹配程度越高的区域得分越高。我们搜索图像中相似度最高的区域就是瓦尔多所在的地方。我们现在要做的就是在他周围画一个方框,然后重复。我知道你在想什么,这听起来像是实时发生的许多事情。谢天谢地,数学拯救了我们。我们能够实时进行这些操作的原因是因为它发生在更广阔的领域。我们真的不需要现在就弄清楚为什么会这样。只要知道它允许你的机器同时计算所有这些滑动窗口的操作,通过你的 GPU 的多个核心并行。这使得我们几乎可以在瞬间观察到结果。
未来
类似于我们的 Waldo 在哪里的例子,我们当前实现的问题是我们背景的相似性和遮挡导致了一个问题。我认为在这个领域继续研究是值得的。应用程序是丰富和非常重要的。自动驾驶汽车、机器人、智能跟踪,甚至基于视频跟踪的习得行为,都是特定研究的潜在领域。我强烈推荐 Luca Bertinetto 等人的论文 siamFC:提供了对该领域的一个很好的监督以及一个预训练演示。它是在 Tensorflow 中实现的,允许你在自己的视频上尝试。Github 回购的链接就在这里!如需进一步阅读和更复杂的方法,请查看 siamRPN 和 siamMask 。
最初发表于【http://github.com】。
SiATL 是最新最简单的迁移学习方法
Photo by Allure Graphic Design
这份研究总结只是人工智能学者时事通讯上每周发布的许多研究总结之一。要开始接收每周简讯,请在此注册。
许多传统的迁移学习方法利用已经变得非常流行的预训练语言模型(LMs ),并且具有翻译上下文信息的能力,高级建模语法和语义语言特征在许多任务中产生高端结果,例如对象识别、机器翻译、文本分类等等。
然而,现有的 LMs 面临着缺点,包括高计算成本和对特定任务架构的需求。此外,大多数需要预先培训和微调手头的任务。现在情况不同了,因为研究人员最近发布了一种新的单步迁移学习方法,不需要预先训练或微调。此外,新方法在所有任务中都优于包括 ULMFiT 在内的最先进的迁移学习方法。
单步辅助损失转移学习(SiATL)
SiATL 是一种简单而有效的迁移学习方法,可以解决灾难性遗忘的问题。SiATL 将特定于任务的函数与在训练过程中调整的辅助 LM 损失相结合,并且基于预先训练 LM 并将其权重重新分配给分类器。这使它能够保持语言模型捕捉到的语言规则,同时促进解决任务的充分适应。
正如在简介中提到的,SiATL 不需要预先培训或微调,这使得它的使用非常简单。新模型已经在各种具有挑战性的文本分类任务上进行了测试,并产生了具有竞争力的结果,表明其优于传统的迁移学习方法。
潜在用途和效果
你已经知道了,模特训练不一定要从零开始,也不一定要野。SiATL 可用于驾驭为一项任务训练的模型,并以直接的方式将其应用于另一个领域。在数据不足的情况下,它也能派上用场。
对于数据科学家和开发人员来说,SiATL 提供了一种简单、廉价和实用的方法,通过迁移学习功能来加速模型训练,以增强各种应用的性能,如语音识别、智能视频分析、问答系统、医疗成像等。
感谢阅读。请评论,分享,别忘了订阅!另外,在推特和 T2【LinkedIn】上关注我。干杯!
强化学习中的从零到 SOTA
旁注:为初学者和专业人士发布 4 小时强化学习课程
除了我们的连载博客,****&杯到觉悟’之外,我们还会偶尔发布一些&材料作为单机版或者短期系列。说到题外话,与我们的其他出版物相比,这些材料的性质有些模糊,我们选择称之为“旁注”。
****旁注就这样。与 MTank & AI 相关的附属作品,我们认为我们的读者可能会喜欢。格式会有所不同,但可能包含所有内容。把它想成是对额外项目、会谈&想法的总括。
也就是说,在过去一年左右的时间里,我们花了相当多的时间阅读、回归和提炼我们最喜欢的领域:强化学习(RL) 。对于那些对作为人工智能分支的 RL 感兴趣的人来说,我们正在开源我们去年建立的 RL 课程,作为对工程师&研究人员的介绍。
什么是强化学习?
强化学习是近年来最有前途的技术之一;使视频和棋盘游戏取得巨大进步,并提供解决一般顺序决策问题的框架,为更智能的机器铺平道路。我们已经对这个领域着迷了一段时间,并慢慢开始研究网上的核心材料和论文。
虽然我们觉得有很多可用的资料,但我个人推荐理查德·萨顿的书(链接)和大卫·西尔弗的 UCL RL 课程(链接),一般来说,这些资料都是零散的,或者过于入门,或者过于高深。最终,尽管看了看,我们没有找到适合对这个领域感兴趣的人的好的 10 小时以下的入门读物。所以我们造了一个。
我们做的东西
我们创建了两部分的强化学习课程:强化学习入门和深度强化学习入门。第一个处理 RL 的一些理论基础――政策、奖励、等式,所有这些好东西。后者迅速将读者带入一些最先进的(SOTA)方法,这些方法在人工智能公司用他们的智能 RL 代理摧毁人类游戏玩家时不断出现在媒体上。
Tile-based view of the first 20 slides out of 125. There are too many GIFs inside so initial loading of the slides can take some time. This is a price worth paying for awesome GIFs.
课程在哪里出现/我们为谁制作
该课程最初是为 Fernando 于 2018 年在博世内部举办的 4 小时 RL 研讨会组装的。我们也计划在今年夏天发布一个更新版本。此外,他还在 2 月份的 StuttgartAI meetup 上展示了该课程的节略版。
Ben 在开放数据科学大会(ODSC)上做了一个小时的演讲 [ 链接到站点】涵盖了第一部分和第二部分的一些内容。演讲的视频可以从他们的网站获得:https://learnai . odsc . com/courses/introduction-to-reinforcement-learning及以下网址:
这个课程是为完全初学 RL 的人、和想“赶上”RL 和子领域的一些最新技术的人而设计的。我们之所以这样做,是因为我们认为在 RL 上缺乏全面、简洁的材料资源,这些资源优先考虑真实世界的研究实例以及现代方法。
坦率地说,我们是为自己建造的。但是在这样做的时候,我们创造了一些对其他人也有价值的东西。这些幻灯片尚未定稿,将随着时间的推移和技术的变化不断更新。但希望其他人也能从这项工作中获得价值。
故障一目了然
****第一部分涵盖了 RL 的基础知识、核心概念和基本原理。RL 背后的主要应用、灵感和愿景。冰山的其他部分包括“信用分配”问题,勘探与开发。在算法方面,我们涵盖了:蒙特卡罗与时间差异,加上动态规划(策略和值迭代)。
一旦读者理解了第一部分,第二部分在概念上应该相当简单,因为我们只是建立在第一部分的主要概念上。正如下面可以看到的,我们在 RL 中添加了大量使用深度学习的最新方法。这些方法可以大致分为政策梯度方法和基于深度 Q 学习的方法**。学习愉快!**
收尾
我们希望我们的一些读者,或者未来的读者,会发现这个关于强化学习的闪电战课程很有价值,点击链接。如果你知道,或者知道谁知道,那就把它传下去。此外,我们计划不断改变,完善和更新这些材料。因此,不要羞于发表评论,或者给info@themtank.com发电子邮件,帮助我们做得更好!
如果您有任何问题,需要参考,或希望我们澄清。您知道在哪里可以找到我们,随时乐意为您提供帮助!
We promised many GIFs
尺度不变特征变换
在本文中,我将详细解释 SIFT 算法及其数学原理。
我希望你读完之后会明白这些🤔:
- 筛选的主要步骤
- 为什么我们需要将对数乘以σ来获得比例不变性
- 使用 DoG 接近日志
- 为什么我们使用 Hessian 来拒绝一些位于边缘的特征。
SIFT 是由大卫·g·洛在他的 T2 论文中提出的。(这篇论文很好理解,推荐大家看一看)。
一般来说,SIFT 算法可以分解为四个步骤:
- 特征点(也称为关键点)检测
- 特征点定位
- 方向分配
- 特征描述符生成。
而本文也将遵循这些步骤。
特征点检测
顾名思义,SIFT 具有 尺度不变性 的性质,这使得它比 Harris 更好。Harris 不是比例不变的,如果比例改变,一个 角 可能会变成一个 边 ,如下图所示。
Harris is not scale-invariant
那么什么是尺度,尺度不变性是什么意思?托尼·林德伯格的论文给出了一个很好的解释:
世界上物体的一个固有属性是,它们只在一定的尺度范围内作为有意义的实体存在。一个简单的例子是树枝的概念,它只有在几厘米到几米的范围内才有意义。在纳米或千米级别讨论树的概念是没有意义的。在这些尺度上,谈论形成树叶的分子,或者树木生长的森林,更有意义。同样,只有在一定范围的粗尺度上谈论一朵云才有意义。在更精细的尺度上,更适合考虑单个的液滴,而液滴又由水分子组成,水分子由原子组成,原子由质子和电子等组成。
图像标志的比例是其在图像中的(粗略)直径。它用σ表示,σ以像素为单位,你可以认为比例不变性是指我们可以检测相似的地标,即使它们的比例不同。
那么 SIFT 是如何实现尺度不变性的呢?
你还记得 金字塔 吗?
我们可以找到不同图像尺寸下的特征。
除此之外,我们还可以使用不同σ的高斯拉普拉斯(LoG)来实现这一点。
让我们先来看看日志。
正如李因的文章所指出的,日志操作是这样的。你拿一张图片,稍微模糊一下(使用高斯核)。然后,你计算它的二阶导数的和(或者,拉普拉斯算子)。这将定位图像的边缘和拐角。这些边缘和拐角有利于找到关键点(注意,我们想要一个关键点的检测器,这意味着我们将做一些额外的操作来抑制边缘)。LoG 常用于 blob 检测 (后面我会解释)。
记住卷积和微分的关系。
我们可以只将图像与 高斯的二阶导数进行卷积,并对它们进行求和 (或者只使用 LoG 进行卷积)。
举一个一维的例子, f 是图像的一条扫描线(即图像的一行的像素阵列)。
可以看到,如果我们使用 LoG 来检测边沿,我们需要找到过零的 LoG 响应。如上所述,我们可以使用 LoG 来检测 斑点 ,而不是找到零交叉。
啊哈!我们不再需要找到零交叉,我们可以找到极值(最大值和最小值)。
然而,测井曲线并不是真正的尺度不变,可以发现:拉普拉斯响应随尺度增大而衰减:
那么为什么会出现这种情况呢?
我会给你两种方法来解释:
- 高斯滤波器的导数对理想阶跃边沿的响应随着σ的增加而降低。
- 为了保持响应不变(比例不变),必须将高斯导数乘以σ。
- 拉普拉斯是二阶高斯导数,所以必须乘以σ2。
如果你对上面的解释很满意,也厌倦了纠结一些数学概念,可以随意跳过下面的解释。
另一个解释来自本教程 pdf 。
考虑一个无噪声的图像边缘 I(x)= u(x x0),u 是 单位阶跃函数 。为了先前检测边缘,我们将它们与高斯导数卷积,然后在响应中寻找峰值。假设我们通过将 I(x)与一族高斯滤波器的一阶导数进行卷积来定义尺度空间,其中 一族 意味着我们有一族σ。
在边 x = x0 的位置,我们有
这取决于σ。
**
如果我们有一个 2D 图像,那么我们以同样的方式定义归一化导数滤波器,即
对于 y 也是类似的。使用与上面完全相同的参数来表明水平或垂直边缘处的
值将独立于σ。使用这些滤波器,可以以明显的方式定义归一化梯度尺度空间,并且可以发现任意方向的边缘处的梯度将与σ无关。
接下来是二阶导数
我们知道,如果我们对一个(无噪声)边缘进行滤波,I(x)= u(x x0),利用高斯一阶导数,我们可以在边缘位置获得峰值响应。紧接着,如果我们用高斯的二阶导数来过滤边缘
那么在边缘的位置响应将为零。
高斯滤波器的二阶导数及其 2D 等价物在计算机视觉以及人类视觉建模中非常重要,并且是有影响力的早期边缘检测理论的基础。该滤波器对边缘图像的响应为:
请注意,当 x = x0 时,响应确实为 0,正如我们所预期的那样。峰值出现在哪里?取我们得到的导数
并将其设置为 0。因此,峰值出现在以下情况
即 x=x0 σ。代入,我们看到峰值的值为
正如我们对一阶导数滤波器所做的那样,我们可以通过乘以σ2 来归一化二阶导数滤波器,这样就定义了归一化二阶导数滤波器。
这消除了峰值高度的σ^(−2 依赖性。因此,我们看到,如果用高斯函数的归一化二阶导数(如上所述)对边缘进行滤波,那么在边缘位置会有一个过零事件,在距离边缘σ处会有峰值(正的和负的),但峰值的高度不取决于σ。
综上所述,我们需要 将 LoG 乘以σ2 才能得到真正的尺度不变性。以下是结果:
现在,我们可以在适当的比例下检测地标,这非常重要,因为我们需要在后面的步骤中描述该区域,并且我们需要基于该比例选择其周围区域,如下所示:
实际上,拉普拉斯算子是使用高斯差分(DoG)来近似的。
DoG 和 σ2LoG 之间的关系可以从热扩散方程中理解(用σ参数化,而不是更常见的 t = σ2,更多细节可以参见第 11 页:
由此我们可以看出,利用 kσ和σ处附近尺度的差异,LoG 可以从∂G/∂σ的有限差分近似计算出来:
因此:
这表明当 DoG 函数具有相差一个常数因子的尺度时,它已经结合了尺度不变拉普拉斯算子所需的σ2 尺度归一化。等式中的系数(k1)在所有范围内都是常数,因此不会影响极值位置。
首先,SIFT 结合了金字塔和不同的σ空间来检测不同尺度下的斑点。
**
注意,极值是三维(即 x,y,σ)周围的最大值或最小值。
特征点定位(亚像素定位)
这部分主要来自 N 坎贝尔的文章。
在步骤 1 之后,我们检测一些关键点,这些关键点被粗略地定位,最好定位到最近的像素,这取决于特征在尺度空间中的位置。由于σ在尺度空间中被量化为相对较少的步骤,因此它们在尺度上的局部性也很差。SIFT 算法的第二阶段将这些特征点的位置精确到亚像素精度,同时去除任何不良特征。亚像素定位通过拟合泰勒展开来将 3D 二次表面(在 x、y 和σ上)拟合到局部区域以内插最大值或最小值来进行。忽略二次项以上的项,DoG 的展开式如下所示,其中导数在建议点 z0=[x0,y0,σ0]T 处计算,z=[δx,δy,δσ]T 是从该点的偏移。
然后,通过将 z 的导数设置为零来确定极值 z’的位置:
可以使用来自狗的相邻样本点的标准差分近似值来估计参数,从而得到可以有效求解的 3 × 3 线性系统。该过程可能需要迭代地执行,因为如果任何计算的偏移值移动超过半个像素,则有必要重新评估 z^,因为近似的适当邻域将会改变。不能快速收敛的点被认为不稳定而被丢弃。
可以对局部极值处的值进行插值,
并且任何具有低于某个阈值的值的点被拒绝作为低对比度点。
执行最终测试以移除位于图像边缘的任何特征,因为如果用于匹配目的,这些特征将遭受模糊。位于狗的脊上的峰(对应于图像中的边缘)将具有穿过脊的大的主曲率和沿着脊的低主曲率,而 轮廓分明的峰(斑点)将在两个方向上具有大的主曲率 。黑森中的 H 和 y 中的
对于特征点,再次使用局部差分近似,以及对应于主曲率的特征值λ1 和λ2 的比率,与阈值比率 r 进行比较,如
并且拒绝高比率点。
这个有点类似于 Harris,关心的是所选点周围区域的导数分布。(你可以从这个 pdf 中获得更多信息)
然而,海森 H 的特征值对应的是主曲率。那怎么做呢?
这个 pdf 给出了很好的解释。
让我们假设我们在 R 中有一个曲面 M,它由光滑函数 z = f(x,y)的图形给出。假设 M 穿过原点 p,并且它在那里的切面是{z = 0}平面(对于检测到的斑点几乎是正确的,想想向日葵)。设 N = (0,0,1),在 p 处垂直于 M 的单位。
设 v 是 TpM 中的单位向量,说 v = (v1,v2,0)。设 c 是通过在 v 和 N 所跨越的平面上切割 M 而得到的参数化曲线:
那就是:
现在我们可以计算 c 沿 v = (v1,v2,0)方向的曲率。κv 是 p 处密切圆半径到 c 的倒数。
κv = c ′′( t)| t = 0
所以,
**
曲面在 p 处的主曲率将是κv 的最大和最小可能值λ1、λ2(因为 v 在可能的单位切向量上的范围)。如果你不明白这个论点,可以看看关于 PCA 的优秀博客。
方向分配
当然,我们将使用梯度方向直方图(HOG)
从关键点周围区域内的采样点的梯度方向形成方向直方图。方向直方图有 36 个仓,覆盖 360 度方向范围。添加到直方图的每个样本通过其梯度幅度和高斯加权圆形窗口进行加权,该圆形窗口的σ是关键点尺度的 1.5 倍。
特征描述符生成
SIFT 算法的最后阶段是生成由归一化的 128 维向量组成的描述符。在算法的这个阶段,我们得到了一个特征点列表,这些特征点是按照位置、比例和方向来描述的。这允许我们围绕特征点构建局部坐标系,该坐标系在同一特征的不同视图中应该是相似的。
描述符本身是由灰度图像的梯度形成的直方图。使用梯度角度直方图的 4×4 空间网格。网格的尺寸取决于特征点的比例,并且网格以特征点为中心并旋转到为关键点确定的方向。每个空间仓包含分成 8 个部分的角度直方图。(128=4×4×8).图像梯度幅度和角度再次从尺度空间产生。
然后,将每个像素处的梯度角度添加到网格的适当空间仓中的相应角度仓。每个像素的权重由梯度的大小以及以特征点为中心的比例相关高斯(σ等于描述符窗口宽度的一半)给出,如蓝色圆圈所示。该高斯窗口的目的是避免窗口位置发生微小变化时描述符的突然变化,并减少对远离描述符中心的梯度的强调,因为这些梯度受重合失调误差的影响最大。
在直方图形成期间,使用三线性插值来添加每个值,即 x、y 和θ的插值。这包括基于到面元中心的距离对相邻空间面元上的像素权重进行插值,以及对相邻角度面元进行插值。下图展示了插值的效果。
它用于避免当样本从一个直方图平滑地移动到另一个直方图或从一个方向移动到另一个方向时描述符突然改变的所有边界效应。因此,使用三线性插值将每个梯度样本的值分布到相邻的直方图仓中。换句话说,每个面元的每个条目都乘以 1d 的权重,其中 d 是样本与面元中心值的距离,以直方图面元间距为单位进行测量。
最后,修改特征向量以减少光照变化的影响。首先,向量被标准化为单位长度。图像对比度的变化(其中每个像素值乘以一个常数)将梯度乘以相同的常数,因此这种对比度变化将被向量归一化抵消。向每个图像像素添加常数的亮度变化不会影响梯度值,因为它们是根据像素差异计算的。因此,该描述符对于光照的仿射变化是不变的。然而,由于相机饱和或者由于以不同的量影响具有不同方向的 3D 表面的照明变化,也可能发生非线性照明变化。这些效应会导致某些梯度的相对幅度发生较大变化,但不太可能影响梯度方向。因此,我们通过将单位特征向量中的值阈值化为每个不大于 0.2,然后再归一化为单位长度,来减少大梯度幅度的影响。这意味着匹配大梯度的幅度不再那么重要,方向的分布更加重要。0.2 的值是使用包含相同 3D 对象的不同照明的图像通过实验确定的。
就这些,我真的希望这篇文章能帮助你理解 SIFT 算法。因为我还是一个计算机视觉的学习者,如果你有什么问题或者建议,随时联系我。如果你能指出我的错误,我会非常高兴。🤪
Sigmoid 激活和二元交叉熵——不太完美的匹配?
调查对数值不精确的关注
Really cross, and full of entropy…
在以二进制分类、最后(输出)层的 sigmoid 激活和作为损失函数的二进制交叉熵(BCE) 为任务的神经元网络中,这是标准配置。然而,偶尔有人会无意中发现这样的说法,即最后一层激活和损失的这种特定组合可能会导致数值不精确甚至不稳定 。我想确保我得到了论点,精确到数字,特别是在我目前使用的框架中。听起来很有趣?意识到这可能也与一些图像分割任务相关,或者多类、多标记问题,而不仅仅是猫和狗的问题?那么,请跟我来。如果你喜欢提前复习一下 BCE,我想指出丹尼尔·戈多伊对 BCE 的精彩而深入的解释。
1.问题的定义
让我们从剖析 Keras 对 BCE 的实现开始:
因此,输入参数output
首先被裁剪,然后被转换成 logits,然后被送入 TensorFlow 函数tf.nn.sigmoid_cross_entropy_with_logits
。好吧…什么是逻辑来着?在数学中,logit 函数是 sigmoid 函数的逆,所以理论上 logit(sigmoid(x)) = x。
Figure 1: Curves you’ve likely seen before
在深度学习中,logits 通常和不幸的是意味着分类网络最后一层的‘原始’输出,即在之前的层的输出,它被传递到激活/标准化函数,例如 sigmoid。原始输出可以取任何值。这是 Keras 的binary_crossentropy
的核心sigmoid_cross_entropy_with_logits
所期待的。相比之下,在 Keras 中,期望变量output
中的值代表概率,因此受限于[0 1]——这就是为什么from_logits
默认设置为 False。因此,在输入sigmoid_cross_entropy_with_logits
之前,它们需要被转换回原始值。重复一遍,我们首先通过一个函数(sigmoid)运行数字,然后使用反函数(logit)** 将它们转换回来。这似乎有些迂回。然而,真正的潜在问题是这种来回可能导致的数值不稳定,在极端情况下会导致溢出。看看当 x 的类型是 float32 时 y = logit(sigmoid(x))的输出,这是 Keras 中的默认值,据我所知,在大多数其他框架中也是如此:**
Figure 2: Numerical imprecisions with float32
从大约 x=14.6 开始,误差达到 1%的范围,在大约 x=16.6 以上,由于被零除,游戏结束。当 sigmoid 中的分母恰好等于 1,而 logit 中的分母等于 0 时,就会被零除。我们可以通过np.log(np.finfo(np.float32).eps)
估计 x 的极限,但是我发现数字的曲折变化很有趣,值得展示。不管怎样,这就是为什么 Keras 函数中的输入变量output
的值需要并且实际上被剪裁了。所以,从一开始就打消一个想法:
Keras 的 binary_crossentropy,当输入由 sigmoid 激活产生时,不会产生数字上溢或下溢。
然而,剪切的结果是损失函数在边界处变平。为了形象化,让我们
- 复制设置最小网络的巧妙技巧,手动设置权重,以及
- 通过网络运行单一输入(样品,批量为 1)。
因此,我们能够比较从 Keras 中的 sigmoid 激活计算的 BCE 值和从 TensorFlow 中的原始输出计算的值。这是第一个模型,使用了 sigmoid 激活和 Keras 的标准 BCE:
没有 sigmoid 激活的模型,使用定制的损失函数,将值直接插入sigmoid_cross_entropy_with_logits
:
因此,如果我们在标量输入 x 的扫描范围内评估模型,将标签(y)设置为 1,我们可以将模型生成的 BCE 相互比较,还可以与通过高精度浮点计算的 BCE 的简单实现产生的值进行比较。请再次注意,我们在这里是从单个样本计算 BCE,以便提取两种方法之间的差异。
Figure 3: Binary crossentropy computed for single samples in three ways. Note logarithmic y axis in the left plot, and linear y axes in the others.
有意思!使用 TensorFlow 的sigmoid_cross_entropy_with_logits
从原始值计算的曲线在测试的 x 值范围内是平滑的,而使用 Keras 的binary_crossentropy
从 sigmoid 变换值计算的曲线在两个方向上都变平(如预测的)。在大的正 x 值下,在达到限幅引起的极限之前,sigmoid 导出的曲线显示出阶梯状外观。最值得注意的可能是左边界上发生的情况,这在线性标度上是最好的理解(图 3,中心):原始值越负,由于削波对其 BCE 值的低估越严重。最后,即使使用 float128,如果我们从经过 sigmoid 变换的输入中获得 BCE 值,我们也不会走得太远(最左边的图中的灰色曲线)。
由于损失函数是学习的核心,这意味着采用最后一层 sigmoid + BCE 的模型无法区分预测类别与其标签极度一致或极度不一致的样本。所以,理论上使用 sigmoid + BCE 确实有缺点。但是,在实践中有关系吗?毕竟我们说的是极端的边缘情况。在我们回答这个问题之前,一个更基本的问题是:原始的最后一层输出在实践中达到这样的极值吗?让我们看看。
2.在二元分类网络中检查单个样本的原始输出值
我训练了三个不同的网络来对狗和猫进行分类,使用了 2013 年 Kaggle 竞赛数据集的子集(2000 个训练图像,1000 个用于验证;效仿 F. Chollet ( 深度学习用 Python )。纽约谢尔特岛曼宁出版公司。2017.)).是的,又是猫和狗,为了轻松和专注于手头的问题。
下面的图形和数字来自一个简单的手工制作的 convnet:四对 2D 卷积/最大池层,然后是一个单一的下降和两个密集层,所有这些都具有 relu 激活。最后一个单元素输出层没有激活,作为损失函数,我为 TensorFlow 的sigmoid_cross_entropy_with_logits
使用了上面提到的 Keras 包装器。
首先,让我们看看个别图像是否真的会产生输出图层的极端原始值。训练后,我通过网络运行用于训练的相同图像,并从最后一层获得它们的原始输出。此外,我计算了 sigmoid 转换后的输出,以及从两个输出中导出的 BCE 值。这是我在八个纪元的训练后得到的,所以相对来说,我学到的东西很少:
Figure 4: Left and center, distribution of outputs of the last layer after training the network for eight epochs. Input for prediction consisted of the same 2000 images as used for training. Left, raw values; center, sigmoid-transformed values. Right, scatter plot of BCE values computed from sigmoid output vs. those computed from raw output. Batch size = 1.
显然,在训练的初始阶段,我们处于危险区之外;在这个例子中,原始最后层输出值由 ca [-3 8]限制,并且从原始和 sigmoid 输出计算的 BCE 值是相同的。同样令人高兴的是乙状结肠强烈的“挤压”效应(图 4,中间)。
当网络被充分训练(这里定义为在连续 15 个时期没有显示出减少的损失)时,情况是怎样的?
Figure 5: Same depiction as in Fig. 4, but after full training of the network (test accuracy of ca. 0.85). Same conventions as in Fig. 4 apply. Note clipping of BCE values computed from sigmoid outputs (right).
啊哈——正如我们所料,我们看到了更清晰的职业划分。并且少量的图像实际上导致了落入剪裁范围内的极端 logit 值。让我们把重点放在第一类(狗;图中的橙色);另一个类也有类似的论点。没有一个样本产生比 ca 更负的原始输出值。-4,所以这也没问题。然而,一定数量的样本——最小的狗——达到大于大约 16 的原始输出值。因此,通过 sigmoid + Keras 的 binary_crossentropy 计算的相关 BCE 在 ca 处被剪切。10⁻⁷(图 5,右;也参见图 3)。这是一个非常小的值。如果狗和猫的 BCE 值更小(并且个体差异更大),我们会期望学习以一种系统化的不同方式发生吗?**特别是如果我们使用合理的批量,具有中等或低原始产值的样品将在损失中占主导地位。**图 6 显示了上述相同数据的批次大小为 4 的情况,这仍然是偏低的。
Figure 6: scatter plot of BCE values computed from sigmoid output vs. those computed from raw output of the fully trained network with batch size = 4.
结果与基于 VGG16 和 Inception V3 的网络在 imagenet 数据集上进行预训练(训练时没有对卷积部分进行微调)。
3.结论
首先,让我们重申,由于最后一层中的 sigmoid 激活和作为损失函数的 BCE 的结合,对数字不足或溢出的担心是不合理的——在使用 TensorFlow 后端的 Keras 中。我还不熟悉其他框架,但是如果它们没有类似的预防措施,我会感到非常惊讶。
基于上面对古老的 cats_vs_dogs 数据集的“实验”,似乎 sigmoid +BCE 在精度方面也很好。特别是如果您使用合理的批量和适当的数据,那么 BCE 的计算方式并不重要。然而,这只是一个数据集,很少有模型在上面测试。
所以,我的试探性总结:如果
- 您知道或怀疑最后一层的许多样本的原始输出达到极值,并且
- 您的批量非常小,和/或
- 你想把数字不精确排除在麻烦的可能原因之外,
从原始输出计算 BCE 没有坏处。否则,就坚持乙状结肠+BCE。
其他框架的评论、建议和经验?很高兴听到这个消息。
Sigmoid 神经元——深度神经网络的构建模块
深层神经网络的构建模块被称为乙状结肠神经元。Sigmoid 神经元类似于感知器,但是它们稍有修改,使得 sigmoid 神经元的输出比感知器的阶跃函数输出平滑得多。在这篇文章中,我们将讨论创造乙状结肠神经元的动机和乙状结肠神经元模型的工作原理。
引用注:本文内容和结构基于四分之一实验室的深度学习讲座——pad hai。
这是讨论 sigmoid 神经元的工作及其学习算法的两部分系列的第一部分:
1 | Sigmoid 神经元——深度神经网络的构建模块
为什么是乙状结肠神经元
在我们进入 sigmoid 神经元的工作之前,让我们简单地讨论一下感知器模型及其局限性。
感知器模型接受几个实值输入,并给出一个二进制输出。在感知器模型中,每个输入xi
都有与之相关的权重wi
。权重表明决策过程中输入的重要性。模型输出由阈值 Wₒ 决定,如果输入的加权和大于阈值 Wₒ 输出将为 1,否则输出将为 0。换句话说,如果加权和大于阈值,模型将被触发。
Perceptron (Left) & Mathematical Representation (Right)
根据数学表示,我们可以说感知器使用的阈值逻辑非常苛刻。让我们用一个例子来看看苛刻的阈值逻辑。考虑一个人的决策过程,他/她是否愿意购买一辆汽车仅基于一个输入X1
—工资,并通过设置阈值 b ( Wₒ ) = -10 和权重 W ₁ = 0.2。感知器模型的输出如下图所示。
Data (Left) & Graphical Representation of Output(Right)
红点表示一个人不会买车,绿点表示这个人想买车。一个 50.1K 的人会买车而一个 49.9K 的人不会买车是不是有点奇怪?感知器输入的微小变化有时会导致输出完全翻转,比如从 0 到 1。这种行为并不是我们选择的具体问题或者我们选择的具体权重和阈值的特征。这是感知器神经元本身的特性,其行为类似于阶跃函数。我们可以通过引入一种叫做s 形神经元的新型人工神经元来克服这个问题。
要了解更多关于感知器的工作,请参考我以前关于感知器模型的帖子
乙状结肠神经元
我们能有一个更平滑(不那么苛刻)的函数吗?
引入 sigmoid 神经元,其输出函数比阶跃函数平滑得多。在乙状结肠神经元中,与阶跃输出相反,输入的小变化仅引起输出的小变化。有许多具有“S”形曲线特征的函数称为 sigmoid 函数。最常用的函数是逻辑函数。
Sigmoid Neuron Representation (logistic function)
我们不再看到临界点 b 的急剧转变。乙状结肠神经元的输出不是 0 或 1。相反,它是一个介于 0-1 之间的真实值,可以解释为一个概率。
数据和任务
回归和分类
与 MP 神经元中的布尔输入不同,sigmoid 神经元的输入可以是实数,输出也是 0-1 之间的实数。在乙状结肠神经元中,我们试图回归 X 和 Y 之间的概率关系。即使输出在 0-1 之间,我们仍然可以通过选择一些阈值来使用 sigmoid 函数进行二进制分类任务。
学习算法
在本节中,我们将讨论通过使用梯度下降算法来学习 sigmoid 神经元模型的参数 w 和 b 的算法。
Minimize the Squared Error Loss
学习算法的目标是确定参数的最佳可能值,使得模型的总损失(平方误差损失)尽可能最小。学习算法是这样的:
Sigmoid Learning Algorithm
我们随机初始化 w 和 b 。然后,我们迭代数据中的所有观察值,对于每个观察值,使用 sigmoid 函数找到相应的预测结果,并计算平方误差损失。基于损失值,我们将更新权重,使得在新参数下模型的总损失将小于模型的当前损失**。**
Loss Optimization
我们将继续进行更新操作,直到我们满意为止。直到满意可能意味着以下任何一种情况:
- 模型的总损失变为零。
- 模型的总损失变成接近于零的非常小的值。
- 基于计算能力迭代固定次数。
它能处理非线性数据吗?
感知器模型的局限性之一是,学习算法只有在数据是线性可分的情况下才有效。这意味着正的点在边界的一边,负的点在边界的另一边。sigmoid 神经元能处理非线性可分数据吗?。
让我们举一个例子,一个人是否会购买一辆汽车基于两个输入,x₁——年薪 10 万卢比(LPA)和 x₂——家庭规模。我假设在 X 和 Y 之间有一个关系,它是使用 sigmoid 函数近似得到的。
Input Data(Left) & Scatter Plot of Data(Right)
红点表示输出为 0,绿点表示输出为 1。从图中我们可以看到,没有一条线或者一条线性的边界可以有效的将红绿点分开。如果我们在这个数据上训练一个感知器,学习算法将永远不会收敛**,因为数据不是线性可分的。我将运行模型一定次数的迭代,以尽可能减少误差,而不是追求收敛。**
Perceptron Decision boundary for fixed iterations
从感知器决策边界,我们可以看到,由于苛刻的阈值逻辑,感知器无法区分靠近边界的点和位于内部的点。但是在现实世界的场景中,我们会期望一个站在边界围栏上的人可以选择任何一条路,而不像在决策边界内的人。
让我们看看 sigmoid neuron 将如何处理这些非线性可分离数据。一旦我使用 sigmoid 神经元拟合我们的二维数据,我将能够生成如下所示的 3D 等值线图,以表示所有观察的决策边界。
Sigmoid Neuron Decision Boundary (Left) & Top View of Decision Boundary (Right)
为了进行比较,让我们进行同样的两次观察,看看这些观察的乙状结肠神经元的预测结果是什么。如您所见,在图的最左侧出现的观察的预测值为零(出现在暗红色区域),而另一个观察的预测值约为 0.35,即该人有 35%的机会购买汽车。与感知器的刚性输出不同,现在我们有一个介于 0-1 之间的平滑连续的输出,可以解释为一个概率。
仍然不能完全解决非线性数据的问题。
尽管我们已经引入了非线性 sigmoid 神经元函数,但是它仍然不能够有效地将红点与绿点分开。重要的一点是,从感知器中的刚性决策边界开始,我们已经朝着创建适用于非线性可分离数据的决策边界的方向迈出了第一步。因此,乙状结肠神经元是深层神经网络的构建模块,最终我们不得不使用神经元网络来帮助我们创建一个“完美的决策边界。
继续学习
如果你有兴趣了解更多关于人工神经网络的知识,请查看来自 Starttechacademy 的 Abhishek 和 Pukhraj 的人工神经网络。还有,课程是用最新版本的 Tensorflow 2.0 (Keras 后端)讲授的。他们也有一个非常好的关于 Python 和 R 语言的机器学习(基础+高级)的包。
结论
在这篇文章中,我们看到了导致乙状结肠神经元产生的感知机的局限性。我们还看到了乙状结肠神经元的工作示例,以及它如何克服一些限制。我们已经看到感知器和 sigmoid 神经元模型是如何处理非线性可分离数据的。
在下一篇文章中,我们将利用 math 详细讨论 sigmoid 神经元学习算法,并直观地了解为什么特定的更新规则有效。
推荐阅读:
在本帖中,我们将详细讨论 sigmoid 神经元学习算法背后的数学直觉。
towardsdatascience.com](/sigmoid-neuron-learning-algorithm-explained-with-math-eb9280e53f07) [## 感知器——深度学习基础
麦卡洛克-皮茨神经元的升级。
hackernoon.com](https://hackernoon.com/perceptron-deep-learning-basics-3a938c5f84b6)
联系我
GitHub:https://github.com/Niranjankumar-c LinkedIn:https://www.linkedin.com/in/niranjankumar-c/
免责声明 —这篇文章中可能有一些相关资源的附属链接。你可以以尽可能低的价格购买捆绑包。如果你购买这门课程,我会收到一小笔佣金。**
用数学解释的 Sigmoid 神经元学习算法
Photo by Antoine Dautry on Unsplash
这是讨论 sigmoid 神经元的工作及其学习算法的两部分系列的第二部分:
2 |用数学解释的 Sigmoid 神经元学习算法(当前故事)
在本帖中,我们将详细讨论 sigmoid 神经元学习算法背后的数学直觉。
引用注:本文内容和结构基于四分之一实验室的深度学习讲座——pad hai。
乙状结肠神经元概述
sigmoid 神经元类似于感知器神经元,对于每个输入xi
,它都具有与该输入相关联的权重wi
。权重表明决策过程中输入的重要性。与感知器模型不同,sigmoid 的输出不是 0 或 1,而是 0-1 之间的真实值,可以解释为概率。最常用的 sigmoid 函数是逻辑函数,它具有“ S 形曲线的特征。
Sigmoid Neuron Representation
学习算法
学习算法的目标是确定参数( w 和 b )的最佳可能值,使得模型的总损失(平方误差损失)尽可能最小。
Learning Algorithm
我们随机初始化 w 和 b 。然后,我们迭代数据中的所有观察值,对于每个观察值,使用 sigmoid 函数找到相应的预测结果,并计算平方误差损失。基于损失值,我们将更新权重,使得模型在新参数下的总损失将比模型的当前损失小**。**
学习算法:数学部分
我们看到权重是如何根据损失值更新的。在本节中,我们将了解为什么这个特定的更新规则会减少模型的丢失。为了理解为什么更新工作规则有效,我们需要理解它背后的数学原理。
让我们从学习算法的数学部分开始。
在 sigmoid 神经元函数中,我们有两个参数 w 和**b。**I 将以向量θ的形式表示这些参数,θ是属于 R 的参数的向量。目标是找到使损失函数最小化的θ的最佳值。
Vector Notation of Parameters
我们达到目标的方法是用一些小的随机值来更新θ,即δθδθ,它是 w 的变化和 b 的变化的集合。δθ也是一个属于 R 的向量,我们来看看θ和δθ的几何表示,
Geometric Representation
我们有一个向量θ,我们要给它加上另一个向量δθ。从向量平行四边形定律我们会得到我们的合成向量θnew,它无非是平行四边形的对角线。从几何表示中,我们可以看到,在θ和θnew 之间,θ的值有很大的变化。与其在学习θ时迈大步,不如保守一点,只往同一个方向移动很小的量。
Geometric Representation with Learning Rate
记住δθ是一个向量,为了在同一个方向上迈小步,我需要让δθ有一个较小的幅度。为了得到一个小的量级,我将把δθ乘以学习率(一个很小的值)。现在,合成矢量是红色矢量,表示θnew。新的θ将是向量θ从初始位置的移动。
使用泰勒级数
但是我们如何决定δθ的值以及使用什么样的δθ才是正确的呢?。我们如何以主要方式获得正确的δθ,使得新θ的损耗(是 w 和 b 的函数)应该小于旧θ的损耗。这个问题的答案来自泰勒级数。
泰勒级数告诉我们的是,如果我们有一个函数 f 并且我们知道该函数在特定点 x 的值,那么函数 f 在一个非常接近 x 的新点的值由下面的公式给出:
Taylor Series General Representation
靠近 x 的小步长后的函数值等于 x 处的函数值和其他一些量(出现在红框中)。如果我们观察红框中的数量,它的值完全取决于δx。如果我能够找到 delta x 使得红框中表示的数量为负,那么我将知道新 x 处的新损失小于旧 x 处的损失。
用 sigmoid 神经元参数和损失函数表示泰勒级数。为便于记记,设δθ= u,则我们有,
Replaced x with Parameter theta
将其与一般的泰勒级数方程进行比较,新θ的损耗等于旧θ的损耗和其他一些量(显示在红框中)。盒子中存在的量的值取决于变化向量 uᵀ.所以我们需要找到变化向量 uᵀ,使得红框中的量变成负数。如果为负,那么我们将知道θnew 处的损耗小于θold 处的损耗。
为了找到最佳变化向量 uᵀ,为了简单起见,让我们去掉泰勒级数中的一些项。我们知道学习率η非常小,那么η,η等…将非常接近于零。通过使用此逻辑,泰勒级数可以简化为以下形式:
Truncated Taylor Series
只有当新θ处的损耗小于旧θ时,变化矢量 uᵀ才是最佳的,
Optimal change vector
通过比较上述两个方程(变化向量 uᵀ优化方程和截断泰勒级数方程),
为了解决上面的方程,让我们回到一点线性代数,特别是两个向量之间的余弦角。我们知道 cos(θ)的范围从-1 到 1。
Cosine Angle between Vectors
由于余弦角公式的分母是一个数值,并且它总是正的,我们可以将余弦公式乘以 k (分母)而不影响不等式的符号。我们希望不等式之间的量(标在蓝框中)为负,这只有在 uᵀ和∇之间的余弦角等于-1 时才有可能。如果余弦角等于-1,那么我们知道向量之间的角度等于 180⁰.
如果角度等于 180⁰,这意味着我们选择的变化向量 uᵀ的方向,应该与梯度向量相反。我们可以将梯度下降规则总结如下:
类似地,我们可以如下编写参数更新规则,
计算偏导数
到目前为止,在前面的章节中,我们已经看到了如何使用泰勒级数和向量之间的余弦角来达到参数更新规则。但是我们如何计算对 w 和 b 的偏导数呢?。
为了简单起见,我们假设只有一个点适合于乙状结肠神经元。所以一个点的损失函数可以写成,
Loss function for one point
我们需要计算 w 和 b 对损失函数的偏导数。让我们推导这些导数,
Derivation for partial derivatives of w
首先,我们将偏导数推到括号内,接下来,我们有 y,它是常数,它的偏导数为零。在 f(x)的地方,我们用逻辑函数代替,求逻辑函数 w.r .对 w 的偏导数。上图的右边部分解释了逻辑函数的偏导数。上述最终表达式(用红色标记)仅对一次观察有效,对于两次观察,表达式变为:
类似地,我们可以计算 b 对损失的偏导数,
梯度下降规则
现在我们有了使用梯度下降实现参数更新规则所需的一切。让我们举一个例子,看看我们如何使用我们刚刚导出的参数更新规则来实现梯度下降,以最小化模型的损失。
我已经获取了一些玩具数据,并将参数初始化为 w = 0, b = -8,并将学习率设置为 1.0,然后迭代 1000 个时期的所有观察值,并计算不同值的 w (-2 到 6)和 b (-10 到 2) 的损失。O 一旦我获得了 w 和 b 所有可能组合的损失值,我就能够生成下面的 3D 等高线图来显示损失值的变化。
Loss Value for different w and b
以上代码片段显示了在 2D 玩具数据的情况下,参数 w 和 b 的梯度下降更新规则的实现。我们可以随机初始化参数值,但在这种情况下,我选择这些特定值只是为了更好地说明。
图表中较深的红色阴影表示损失值较高的区域,而山谷中较深的蓝色阴影表示损失的最低点。下面的动画显示了固定迭代的梯度下降规则,底部的点表示 w & b 的不同组合,轮廓上的点表示相应参数值的损失值。
Animation of loss variation
我们已经成功地推导出梯度下降更新规则,该规则保证找到对于 w 和 b 的最佳参数值,其中只要我们在与梯度相反的方向上移动,函数的损失最小。
Photo by JESHOOTS.COM on Unsplash
继续学习
如果你有兴趣了解更多关于人工神经网络的知识,请查看来自 Starttechacademy 的 Abhishek 和 Pukhraj 的人工神经网络。还有,课程是用最新版本的 Tensorflow 2.0 (Keras 后端)讲授的。他们还有一个非常好的包,关于 Python 和 R 语言的机器学习(基础+高级)。
结论
在这篇文章中,我们简要地看了一下乙状结肠神经元。然后,我们看到了学习算法的 sigmoid neuron 数学自由版本,然后我们继续使用泰勒级数、线性代数和偏微分来详细了解学习算法背后的数学直觉。最后,我们证明了我们使用梯度下降导出的更新规则保证通过使用玩具数据找到最佳参数。
这是一个有点冗长&数学很重的帖子,即使你第一次阅读没有完全理解,也要再浏览一遍。如果你有任何问题或建议,请在回复部分发表。
推荐阅读
深层神经网络的构建模块被称为乙状结肠神经元。
towardsdatascience.com](/sigmoid-neuron-deep-neural-networks-a4cd35b629d7)
在以后的文章中,我们将讨论如何用 python 实现 sigmoid 神经元模型,还将讨论其他一些非线性函数,如 RELU、ELU。
Niranjan Kumar 在汇丰银行数据分析部门实习。他对深度学习和人工智能充满热情。他是 Medium 在人工智能的顶尖作家之一。在 LinkedIn 上与我联系,或者在 twitter 上关注我,了解关于深度学习和人工智能的最新文章。
免责声明 —这篇文章中可能有一些相关资源的附属链接。你可以以尽可能低的价格购买捆绑包。如果你购买这门课程,我会收到一小笔佣金。
信号:噪声(毫升)
处理结果的变化
科学很难
最近,我在工作中和 Kaggle 上运行了许多机器学习实验。有一点已经很清楚了:真的很难自信地说 A 型比 B 型好。通常在速度和对结果的信心之间有一个明显的平衡。在像 Kaggle 这样的设置中,您的成功很大程度上取决于您可以评估多少想法,而这反过来又取决于您的测试平台的设计。
例如,您可以训练模型 A 和 B,测量性能,并选择最佳的一个。又快又简单。但是如果你改变随机种子并重复,也许你会得到相反的结果。然后,您可能会决定进行 5 重交叉验证以获得误差线,但这需要大约 5 倍的时间,并且会产生更多关于如何从数据中取样以形成折叠的问题(例如,组 k 折叠、分层 k 折叠等)。然后,您可能决定通过提高学习率或对训练集进行缩减采样来缩短每次运行的持续时间,但这将为您的结果增加额外的方差,使其更难在噪声中找到信号。
那么超参数调整呢?您是对模型 A 和模型 B 分别进行测试,以确保您为该数据/模型组合选择了最佳参数,还是锁定了参数,并接受了它们偏爱一个模型而非另一个模型的可能性?如果您正在为每一个参数进行调优,那么如何评估参数集 1 和参数集 2 呢?这实质上是回到比较两种不同的模型,并提出了所有相同的信号和噪声问题。
答案是:没有简单的答案。最终,时间和计算资源的限制将决定您的比较能力,这将限制您区分越来越小的性能差异的能力。然后,好的工程需要在了解噪声和变化如何与您的设计相互作用的背景下深思熟虑地做出决策。忽视它会导致武断的决定、死胡同和浪费时间。
旁注/咆哮:值得指出的是,这些课程并不是机器学习所独有的。作为半导体行业的工艺工程师,我经历了完全相同的挑战。在这个世界中,目标是减少晶片上的粒子数量。我清楚地记得有一天,我试图通过在 100 个晶片上进行实验来倡导工艺改变,这些晶片被分成实验/控制条件。当我考虑到颗粒数量的变化来计算所需的样本量时,我发现我实际上需要> 100,000 个晶片,这是一个完全荒谬的提议。作为科学家,我们经常面对这些不方便的事实,而且太常见了,反应是忽略它。我认为,这部分解释了许多科学领域文献中的复制危机,特别是在深度学习中,重复进行数百次实验的成本高得不可思议。
秘诀
以下是一个可能帮助你驯服随机性的过程的概要:
1。知道你想要衡量多大的变化。
你是想找到 0.001 AUC 的改进,还是 0.01 AUC 的改进?这个答案将极大地影响你的实验测试床。小心选择你的度量标准,因为有些比其他的更敏感,你想给自己最好的机会去发现你真正关心的事情的变化。
2。理解你随机性的来源。
如果你想对数据进行下采样,这个采样过程会产生变异——样本越小,变异越大。形成验证和测试集的行样本也会引入随机性,因为它们用于早期停止和/或评估。
3。测量基线模型的变化。
您将通过为步骤 2 中概述的每个随机过程随机选择一个值来做到这一点。例如,您将随机抽样一个训练集,引导抽样一个验证集,引导抽样一个测试集。然后,使用采样的验证和测试集构建模型,进行早期停止和性能评估。现在,重复 N 次(10-50 次?)并将结果用于统计分析。如果您的变化是 0.01 AUC,并且您希望观察 0.001 AUC 的变化,那么您要么需要运行每个实验的许多实例,要么需要以减少变化的方式重新定义您的过程,例如增加训练数据大小。
4。计算所需的样本量
一旦您知道了基线的变化和您想要测量的变化量,您就可以使用标准方法来计算在给定的置信水平下所需的样本量。如果这个数字远远大于可行的,你就需要设计一个不同的过程或者调整你的期望。
我是亚马逊网络服务的研究科学家。我有 ML-focused YouTube 频道 。您可以通过 邮件列表 订阅我所有的内容更新。
文章最初发表于https://blog.zakjost.com。
ACF 图和 PACF 图在时间序列分析中的意义
这篇文章是为那些想知道使用 ACF 和 PACF 图确定自回归(AR)和移动平均(MA)序列的顺序背后的直觉的人写的。我们大多数人都知道如何使用 ACF 和 PACF 图来获得 p 和 q 的值,以馈入 AR-I-MA 模型,但我们缺乏背后的直觉,为什么我们使用 PACF 和 ACF 来分别获得 p 和 q,而不是相反。
让我们先了解一下我们所说的 ACF 和 PACF 是什么意思,
ACF 是一个(完全)自相关函数,它给出任何序列与其滞后值的自相关值。我们将这些值与置信带和 tada 一起绘制出来!我们有一个 ACF 图。简而言之,它描述了序列的当前值与其过去值的关联程度。时间序列可以包含趋势、季节性、周期性和残差等成分。ACF 在寻找相关性时考虑了所有这些成分,因此这是一个“完整的自相关图”。
PACF 是一个偏自相关函数。基本上,不是像 ACF 那样寻找当前与滞后的相关性,而是寻找残差(其在移除已经由早期滞后解释的效应之后剩余)与下一个滞后值的相关性,因此是“部分的”而不是“完整的”,因为我们在找到下一个相关性之前移除了已经找到的变化。因此,如果残差中有任何隐藏信息,可以通过下一个滞后进行建模,我们可能会获得良好的相关性,并且我们会在建模时将下一个滞后作为一个特征。请记住,在建模时,我们不希望保留太多相关的要素,因为这会产生多重共线性问题。因此,我们只需要保留相关的特性。
现在让我们看看什么是 AR 和 MA 时间序列过程,
自回归(AR)过程,当时间序列的当前值可以使用同一时间序列的先前值获得时,即当前值是其过去值的加权平均值,则称该时间序列为 AR。股票价格和全球气温上升可以被认为是一个 AR 过程。
订单 p 的 AR 流程可以写成:
ϵt 是白噪声,y’t-₁和 y’t-₂是滞后。阶 p 是滞后值,在此之后,PACF 图第一次越过置信区间上限。在预测 AR 时间序列时,这些 p 滞后将作为我们的特征。我们不能在这里使用 ACF 图,因为即使对于过去很久的滞后,它也会显示良好的相关性。如果我们考虑这些特征,我们将会有多重共线性问题。这对于 PACF 图来说不是问题,因为它去除了已经由早期滞后解释的成分,所以我们只得到与残差相关的滞后,即没有由早期滞后解释的成分。
在下面的代码中,我定义了一个简单的 AR 过程,并使用 PACF 图找到了它的顺序。我们应该期待我们的 AR 过程在 ACF 图中显示逐渐减少,因为作为 AR 过程,它的现在与过去的滞后有很好的相关性。我们预计 PACF 在接近滞后之后会大幅下跌,因为这些接近当前的滞后可以很好地捕捉变化,以至于我们不需要过去的滞后来预测当前。
现在让我们讨论第二种类型的过程,
**移动平均(MA)过程,**序列的现值被定义为过去误差的线性组合的过程。我们假设误差独立地服从正态分布。q 阶 MA 过程定义为:
在这里,ϵt 是一个白噪音。为了直观地了解 MA 过程,让我们考虑一下 1 阶 MA 过程,
让我们把 y t 看作原油价格,ϵt 是由于飓风引起的油价变化。假设 c=10(没有飓风时原油价格的平均值)和θ₁=0.5.假设今天有一场飓风,而昨天没有,那么 y 将是 15,假设由于飓风ϵt=5.,石油价格发生了变化明天没有飓风,所以ϵt=0 和ϵt-₁=5 不会有 12.5 度。假设后天没有飓风。在这种情况下,石油价格将是 10 美元,这意味着它在受到飓风的影响后稳定下来。所以在我们的例子中,飓风的影响只停留在一个滞后值上。在这种情况下,飓风是一个独立的现象。
MA 过程的 q 阶从 ACF 图中获得,这是 ACF 第一次越过置信区间上限后的滞后。正如我们所知,PACF 捕捉残差和时间序列滞后的相关性,我们可能会获得最近滞后以及过去滞后的良好相关性。为什么会这样?由于我们的序列是残差的线性组合,没有一个时间序列本身的滞后可以直接解释它的现在(因为它不是 ar),这是 PACF 图的本质,因为它减去了早期滞后已经解释的变化,它的 PACF 在这里失去了它的力量!另一方面,作为一个 MA 过程,它没有季节或趋势成分,因此 ACF 图将只捕捉残差成分的相关性。你也可以把它看作 ACF,它是一个完整的图(捕捉趋势、季节性、循环和残差相关性),作为一个部分图,因为我们没有趋势、季节等。
在下面的代码中,我定义了一个简单的 MA 过程,并使用 ACF 图找到了它的顺序。我们可以预期 ACF 图显示与最近滞后的良好相关性,然后急剧下降,因为它不是与过去滞后具有良好相关性的 AR 过程。此外,我们预计 PACF 图会逐渐减少,因为这是一个 MA 过程,与 AR 过程不同,时间序列的最近滞后值不能真正预测其现值。因此,我们将得到残差与进一步滞后的良好相关性,因此逐渐减少。
总而言之,
在建立机器学习模型时,我们应该避免多重共线特征。这同样适用于时间序列模型。
我们使用 PACF 图找到 AR 过程的最佳特征或顺序,因为它消除了由早期滞后解释的变化,所以我们只得到相关的特征。
我们使用 ACF 图找到 MA 过程的最佳特征或顺序,因为作为 MA 过程,它没有季节和趋势分量,所以我们在 ACF 图中仅获得与时间序列滞后的残差关系。ACF 充当部分情节。
我希望你喜欢这篇文章,我已经尽量让它简单。由于这是我的第一篇关于媒体的文章,我将非常感谢反馈和建议,以便在以后的文章中提高自己。
感谢阅读,快乐学习!再见!
硅谷的大脑干预:科技设备的新领域
哈佛大学分子和细胞生物学教授杰夫·李奇曼在向他的学生介绍人类大脑的研究时曾问道:“如果理解你需要了解的关于大脑的一切是一英里,那么我们已经走了多远?”。他得到的回答是“四分之三英里”、“半英里”和“四分之一英里”。
教授的回应?:我想大概三寸。
上个月,李奇曼的妙语被皇家学会纳入了一份新的报告,该报告调查了神经(或“脑-机”)接口的前景,这是一个热门的研究领域,在过去的几年里,已经有数十亿美元的资金投入其中,这不是没有原因的。预计到 2022 年,神经科技产品的全球市场——定义为“电子和工程在人类神经系统中的应用”— 将达到 133 亿美元。
因此,尽管我们承认缺乏理解,但对于寻求重新发明——或许是不可逆转地影响——我们与世界互动的方式的技术先锋来说,大脑似乎是一个新的重要前沿。
皇家学会的报告推测:
精神健康状况可以通过使用针对大脑相关部分的界面来治疗,从而缓解全球数亿抑郁症患者的痛苦。即使是已经证明对传统疗法有抵抗力的阿尔茨海默病,也可能被阻止或逆转。
医疗用途之外:
人们可以接受“全脑诊断”,以确定他们独特的才能和挑战。今天的“大脑训练”电脑游戏,其影响是有争议的,可能会让位于明显有效的“大脑清洁”或“大脑健身房”课程,以保持思维敏捷和创造力。
神经接口为增强日常生活提供了无数的可能性。我们可以用我们的思维开门、开灯、玩游戏、操作设备或在电脑上打字。
那么就有机会增强或增压大脑本身。植入物、头盔、头带或其他设备可以帮助我们记忆更多,学习更快,更快地做出更好的决定,解决问题,不受偏见的影响…
心情、知识和记忆可以安全保密地备份或上传到数字云中。
我知道,太多了。我还省略了对心灵感应的提及,人类与人工智能的潜在融合,以及将你的神经接口连接到另一种动物(如鸟)的选项。
对于一个科幻迷来说,这一切听起来一定像来自天堂的甘露。对我们其他人来说,这可能有点令人困惑(至少可以这么说)。那么,这是一个真实的命题吗?或者只是一些野心勃勃的硅谷书呆子的(相当令人毛骨悚然的)愿望清单?
事实是,很难说脑机接口的长期轨迹会是怎样的,但在某种程度上,它们已经是了。虽然仍然相当初级,但我们目前有可以只用大脑控制的无人机和假肢,以及提高注意力和记忆力的耳机。这些技术中有些是侵入性的,但许多不是。有些记录大脑活动并对其做出反应,有些刺激大脑活动,有些两者兼而有之。
令人放心的是,非侵入性技术有望走向商业销售。其中大部分是对脑电图(EEG)的重新想象,EEG 是一种监测和记录大脑中电脉冲的系统。商业领域的领导者之一, CTRL-Labs ,特别专注于它所谓的“意图捕捉”。他们的产品是一种基于肌电图的腕带,当电信号在用户手臂肌肉中激活时,它可以做出反应。目前,该公司的演示中有一个玩家只使用这种脉冲检测而没有物理移动来控制一个简单的游戏(看一下)。
如果你怀疑这件事能走多远,你应该知道脸书上个月收购了 CTRL-Labs,就在几周前泄露了马克·扎克伯格内部会议的记录增强了该公司对脑机接口的浓厚兴趣。
在谈及埃隆·马斯克的 Neuralink 项目时,扎克说:
我对非侵入性的脑机接口感到非常兴奋。我们希望能够做到的是能够获得哪怕是一点点。所以你可以做一些事情,比如,你在 AR 里看一些东西,你可以用你的大脑点击。那太令人兴奋了…或者一个对话出现了,你不必用手,你可以只说是或不是。那是一点输入。如果你有两位,你可以开始控制一个菜单,对吧,基本上你可以滚动菜单并点击。你得到更多的比特,你可以开始用你的大脑打字,而不需要用你的手或眼睛或任何类似的东西。我认为这很令人兴奋。所以我认为作为 AR 和 VR 的一部分,我们将最终拥有手动界面,我们将最终拥有语音,我认为我们将拥有一点点直接大脑。
如果一点点“直接大脑”不会困扰你,那就值得期待超越基本系统基本控制的可能性。
例如,我们已经有了能够解读情绪和情感的神经系统。去年,《南华早报》 报道中国公司已经部署了这种技术,希望利用头饰和帽子内置的设备监测员工的愤怒、焦虑或抑郁迹象。也许更令人印象深刻(或令人不安)的是,日本京都大学的研究人员已经能够使用深度神经网络将来自 fMRI 扫描(用于绘制神经活动)的大脑信号转换成图像,该图像包含扫描对象看到的许多形状和颜色特征。
这只是说,一旦这些类型的系统提供了在马克·扎克伯格的 AR hellscape 中点击或滚动的能力,它们就不太可能停止开发。
英国皇家学会的报告肯定会提出一些早期的担忧。大多数理性思考的人不会落后他们太多:如果一家外部公司或政府能够获得我们的情绪,甚至我们的想法,这将意味着什么?如果这些技术变得无处不在,人类的隐私——甚至自主权——将如何得到保护?我们如何确保它们不会被坏人或政府武器化以影响和控制整个人口?(如果他们只是想下意识地哄我们吃得更健康,或者尊重规则,这样可以吗……?)
不难想象,政府将会密切关注这项技术的发展。
尽管在急切敲响警钟之前权衡风险和收益是公平的,但即使在这里也存在模糊之处。这项技术商业化的好处似乎极其有限,至少从表面上看是这样。游戏玩法?健身?增强或虚拟现实环境的免提导航?这些都不像是出售大脑使用权的有力论据。
但是,那些可以提高记忆力或注意力,让我们在生活和工作中变得超级高效的神经接口呢?据推测,人们可以证明这是一笔值得的交易?顺便说一句,在皇家学会的报告发布后,完全独立的研究应该敦促人们对增强这种功能的尝试保持谨慎。
一份新的期刊在科学上发表的发现似乎证实了长期持有的理论,即存在一种活跃的“遗忘机制,它在我们睡觉时启动。研究发现,当研究人员抑制小鼠体内产生自然产生的下丘脑黑色素浓缩激素(MCH)的神经元时,它们的记忆性能实际上有所提高。换句话说,如果没有这种非自然的抑制,这些激素就会非常故意地损害——或“调节”——我们的记忆。
这是生物学上的附加*,而不是某种我们必须用技术来补偿的“缺失”。我们可以有把握地假设它服务于某种有价值的进化目的。*
事实上,有很好的理由相信,如果我们不忘记,我们将生活在一个永久的混乱状态中,我们的大脑充斥着令人困惑的多余信息。一个有趣的故事讲述了记忆混乱的大脑,这个人被称为主体的;1929 年,一位年轻的驻莫斯科记者(后来被确认为所罗门·舍雷舍夫斯基)带着一个非常特殊的问题找到神经心理学家亚历山大·卢里亚博士:他无法忘记。
根据 Luria 的报告,受试者 s .能够记住外国诗歌、科学公式和一大串单词和数字,而这些都是在他被告知几十年之后。每次卢里亚测验他时,他都把它们背得滚瓜烂熟。
伟大的资产,是吧?在鸡尾酒会上永远不会忘记一个名字,不会错过一个生日,不会在一个你已经知道的事实或公式的测试中失败?用水晶般的清晰来回忆你自己的人生,而不是用模糊的薄雾来冲刷我们最珍贵的记忆?
并非如此。据《纽约时报》报道:
南记忆能力也是日常生活中的一个障碍。他很难理解抽象的概念或比喻性的语言,他在识别面孔方面很糟糕,因为他已经记住了他们在一个确切的时间点,有特定的面部表情和特征。科学家们最终意识到,遗忘的能力和记忆的能力一样重要。
谁知道使用脑机接口来优化进化方面最终会带来什么心理或神经混乱…
但是我们可能还不应该尖叫着跑向山丘。这些系统还处于起步阶段,研究中已经取得了令人难以置信的突破,应该会给精神和身体障碍的人带来巨大的好处。尽管如此,英国皇家学会在伦理和道德困境面前走在前面是正确的,这种伦理和道德困境将伴随着这类技术的商业化。这是一个陌生的领域,允许一个系统干预我们的身体和精神能力是一种前所未有的侵犯,很容易变坏。当然,如果我们从迄今为止科技情报和监控的使用方式来判断的话。
现在,我们应该密切关注这项技术如何发展,以及对其使用的所有建议。有一件事似乎是真的,如果我们认为社会已经达到了它的技术饱和点,那么我们“还没有看到任何东西”。
使用 FastAi 和 airy 的相似图片推荐
基于图像相似性的推荐,如上所示,是我们将要考虑的,给定一个基础图像,推荐视觉上相似的图像。基于图像的推荐在许多情况下非常方便,特别是在涉及用户视觉品味的情况下——服装、珠宝、配饰等。我们将使用 DeepFashion 数据集,其中有 289,222 张服装图片分布在 42 个类别。让我们快速看一下这个项目的工具箱。
FastAi ,【PyTorch 上的一个包装器,它使深度学习任务惊人地简单,并附带了所有最佳实践。
PyTorch **,**深度学习库由脸书提供,我们将在我们的项目中使用 PyTorch 的一些功能。
****、近似最近邻由 Spotify 开源实现,能够高效地索引和搜索特征向量。
这个项目的代码可以在这个 jupyter 笔记本中找到。
嵌入或特征向量
嵌入或特征向量可以被认为是对象上的简洁的 n 维向量形式,其目的是捕获包含在对象中的大部分信息。在其 n 维特征空间中,当比较不同的对象时,相似的对象彼此更接近。
对于一幅图像,嵌入可以从卷积神经网络** (CNN)中获得。CNN 能够理解/学习图像中包含的信息,在其每一层的不同细节层次上。初始卷积层理解诸如角、边等低级形状。而末端层理解图像中的复杂结构,人脸,建筑物等。基于任务。CNN 的末端层通常是完全连接的线性层。这些完全连接的层的输出被用作图像嵌入。**
Image Embedding. CNN image source-en.wikipedia.org/wiki/Convolutional_neural_network
使用 FastAI 微调预训练的 Resnet152 模型
我们使用的 CNN 模型是在 Imagenet 数据集上训练的预训练 Resnet152 用于图像分类。虽然这个模型可以直接用于获得嵌入,但使用 FastAi 对模型进行微调以适应深度时尚数据集将有助于模型更好地理解我们数据集的细微差别。这个过程叫做 迁移学习 。
在 DeepFashion 类别预测任务上训练模型,取得了 88.4% 的前 3 名准确率和 93.98%** 的**前 5 名准确率,优于 DeepFashion 白皮书【1】中公布的基准分数。****
Results of training resnet152 for 10 epochs
从这个微调的模型中提取特征向量。
使用 PyTorch 钩子从模型中提取特征向量
根据 resnet152 架构,我们使用倒数第二个全连接层的输出作为嵌入,它们是维数为(512,1)的向量。
为了从 PyTorch 中的模型获得中间层的输出,我们使用了一个名为 Hook 的功能。可以添加钩子来从正向传递或反向传递中提取模型的中间值。
使用 PyTorch 钩子的最佳方法可以改编自 FastAi 库代码本身。
使用 Pytorch 钩子,我们为训练和有效数据集中的所有图像生成特征向量。
使用特征向量推荐相似图像
既然我们有了所有图像的特征向量,我们将不得不在给定一个基础图像的情况下得到相似的图像。最初,尝试一种简单的方法,给定一个基础图像,让计算它与数据集中所有其他图像的相似性得分,并获得前 n 个图像。
这种方法不可扩展,每个查询的复杂度为 O(N ),对于 249,222 张图像,大约需要 10 秒的时间。为了将这种复杂性降低到亚线性时间,我们将使用近似最近邻算法。近似最近邻算法可以看作是精度和性能之间的权衡。《烦人》的作者 Eric Bernhardsson 在的博客上发表了各种人工神经网络算法的基准比较。
使用骚扰获得相似的图像
angry(AapproximateNearestNeighborOhYeah)是基于二叉树的 ANN 实现。对其工作原理的最佳解释可以在埃里克的文章中找到。
Annoy — binary tree traversal for a query, source-erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces.html
精度-性能的权衡由我们构建的二叉树的数量来控制,越多的树意味着越好的精度。我们将使用与数据集中的类数量相同的树。下面的代码用于构建索引。
现在让我们尝试查询恼人的指数。
使用 Annoy 的近似查询时间减少到了 2ms ,比简单的方法少了几个数量级。
相似图片推荐
下面再来几个通过查询骚扰指数得到的推荐。
Bridal Dresses
Hoodies
Girls tees
Men’s pants
资源
[1] 刘,罗,邱,王,唐。Deepfashion:通过丰富的注释支持强大的服装识别和检索。2016 年在 CVPR。
希望这篇文章对你有所帮助,请在下面留下你的评论和想法。😊
相似性度量—对文本文章评分
许多现实世界的应用程序利用相似性度量来查看两个对象是如何联系在一起的。例如,我们可以在涉及计算机视觉和自然语言处理的应用程序中使用这些度量来查找和映射相似的文档。对于企业来说,一个重要的用例是将简历与职位描述相匹配,从而为招聘人员节省大量时间。另一个重要的用例是使用 K 均值聚类算法(也使用相似性度量)为营销活动细分不同的客户。
相似性通常是介于 0(无相似性)和 1(完全相似性)之间的正值。我们将具体讨论两个重要的相似性度量,即欧几里德和余弦,以及处理维基百科文章的编码示例。
欧几里得度量
你还记得毕达哥拉斯定理吗??毕达哥拉斯定理用于计算两点之间的距离,如下图所示。
http://rosalind.info/glossary/euclidean-distance/
在图中,我们有两个数据点(x1,y1)和(x2,y2 ),我们感兴趣的是计算这两个点之间的距离或接近程度。为了计算距离,我们需要先从 x1 到 x2 水平移动,然后从 y1 到 y2 垂直向上移动。这就组成了一个直角三角形。我们对计算斜边 d 感兴趣,使用毕达哥拉斯定理可以很容易地计算出斜边 d。
其中 b 是直角三角形的底边,p 是直角三角形的垂线。
这就完成了我们二维空间中两点的欧氏距离公式。
这定义了一维、二维、三维或更高维空间中两点之间的欧几里德距离,其中 n 是维数,x_k 和 y_k 分别是 x 和 y 的分量。
定义欧氏距离的 Python 函数
def euclidean_distance(x, y):
return np.sqrt(np.sum((x - y) ** 2))
这里 x 和 y 是两个向量。
也可以使用 sklearn 库来计算欧氏距离。这个函数在计算上更有效。
from sklearn.metrics.pairwise import euclidean_distances
距离越大,两个对象之间的相似性越低;距离越小,两个对象之间的相似度越高。要将这个距离度量转换为相似性度量,我们可以用最大距离除以对象的距离,然后减去 1,以得到 0 和 1 之间的相似性得分。在讨论了余弦度量之后,我们将看看这个例子。
余弦公制
这是专门为文档寻找相似性的另一个度量。如图所示,此指标用于测量 x 和 y 之间的角度,当矢量的大小无关紧要时使用。
https://en.wikipedia.org/wiki/Cosine_similarity
如果 v 和 w 之间的角度是 0 度,那么余弦相似度=1(完全相似)。
点积余弦公式:
‖⋅‖表示矢量长度
𝐯和𝐰.之间的𝜃:角这里我们感兴趣的是测量 v 和 w 之间的相似性。
如果你想知道如何推导点积的余弦公式,请参考本页:https://proofwiki.org/wiki/Cosine_Formula_for_Dot_Product.这个点积公式是从你们在学校学过的余弦定律推导出来的。
让我们用符号 x 和 y 代替 v 和 w。
示例:
这两个向量具有低相似性,由 0.11 的值来解释。该值接近 0,这意味着 x 和 y 之间的角度接近 90 度。如果该值接近 1,那么这将是角度接近 0 度的非常相似的对象。
将 x 和 y 除以它们的长度,将其长度归一化为 1,这就是所谓的单位向量。这表明余弦相似性不考虑 x 和 y 的大小。当我们需要考虑大小时,欧几里得可能是更好的选择。
如果我们已经有了长度为 1 的向量,余弦相似性可以很容易地使用简单的点积来计算。因此,建议首先归一化矢量,使其具有单位长度,以减少计算时间。
Python 函数定义余弦相似度
def cosine_similarity(x, y):
return np.dot(x, y) / (np.sqrt(np.dot(x, x)) * np.sqrt(np.dot(y, y)))
我应该使用哪个指标**?**
该图总结了欧几里德度量和余弦度量。
余弦着眼于两个向量之间的角度,忽略大小,而欧几里得着眼于直线距离,考虑向量的大小。
文本挖掘是我们可以利用余弦相似性来映射相似文档的领域之一。我们还可以使用它来根据给定的单词向量对文档进行排序,简历入围就是我们可以利用余弦相似度的用例之一。
让我们看一下我们需要匹配相似文档的问题,我们首先创建文档术语矩阵,它包含术语在文档集合中出现的频率。我们通常有不均匀长度的文档,例如维基百科的文章。假设单词 math 在文档 1 中比在文档 2 中出现得更多,在这种情况下,余弦相似度将是一个完美的选择,因为我们不关心文档的长度,而是它包含的内容。如果我们要考虑长度,那么欧几里得可能是一个完美的选择。
现在我们将使用 Python 编写简短的代码来映射类似的维基百科文章。
import wikipediaarticles=['Data Mining','Machine Learning','Cricket','Swimming','Tennis']
wiki_lst=[]for article in articles:
print(article)
wiki_lst.append(wikipedia.page(article).content)
在这里,我们刚刚从 5 篇维基百科文章中提取了内容。
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X=cv.fit_transform(wiki_lst)
计数矢量器只是将文档集合转换成字数矩阵。
现在让我们使用欧几里德度量来找出我们的文章是相似的。这里,我们将这些欧几里得距离归一化为 0 到 1,然后减去 1,使其范围在 0 到 1 之间。因此,它越接近 1,相似性越高。
from sklearn.metrics.pairwise import euclidean_distances
print("Data Mining and Machine Learning",1-euclidean_distances(X[0],X[1])/np.max((euclidean_distances(X))))
print("Data Mining and Cricket",1-euclidean_distances(X[0],X[2])/np.max((euclidean_distances(X))))
print("Data Mining and Swimming",1-euclidean_distances(X[0],X[3])/np.max((euclidean_distances(X))))
print("Data Mining and Tennis",1-euclidean_distances(X[0],X[4])/np.max((euclidean_distances(X))))
这两篇文章(数据挖掘游泳)怎么最像?这没有任何意义。现在让我们试试余弦相似度。
from sklearn.metrics.pairwise import cosine_similarity
print("Data Mining and Machine Learning",cosine_similarity(X[0],X[1]))
print("Data Mining and Cricket",cosine_similarity(X[0],X[2]))
print("Data Mining and Swimming",cosine_similarity(X[0],X[3]))
print("Data Mining and Tennis",cosine_similarity(X[0],X[4]))
这对我们来说是有意义的。数据挖掘非常接近机器学习。
结论
欧几里得度量在这里似乎集中于长度而不是内容,而余弦集中于内容而忽略了幅度。
参考文献
【https://proofwiki.org/wiki/Cosine_Formula_for_Dot_Product?】[1]T4source = post _ page-E3 DBD 4 e 58660-
【2】https://cmry.github.io/notes/euclidean-v-cosine?source = post _ page-E3 DBD 4 e 58660-
随机游走文档的相似性
Python 代码和解释,用于计算带有重启的随机行走的图中节点的相似性
考虑具有 5 个节点的无向图,其中节点的连接如下。
Document-topic assignment graph
我们看到有两种类型的节点。一类是文档另一类是题目。在这篇博客文章中,我将解释如何使用重启随机漫步来计算基于主题的文档之间的相似性。您还可以想到一个更大的图,它的节点类型是单词而不是主题,其连接告诉我们哪个单词出现在哪个文档中。为了简单起见,我将选择主题。
随机行走
现在想象我们站在文档 1 的节点上,随机(统一)决定走哪条边到达另一个节点。因为我们只有两条边,所以我们去主题 1 的概率是 0.5,就像我们去主题 2 的概率一样。我们总共有 1 英镑。
如果我们对所有的节点进行这样的想象,我们最终会得到一个矩阵 M,它的起点是列,概率在相应的行中。这个矩阵可以用 python 创建,代码如下:
**import** numpy **as** np
M = np.array([
[0, 0, 0, 1./3., 0.5],
[0, 0, 0, 1./3., 0],
[0, 0, 0, 1./3., 0.5],
[0.5, 1, 0.5, 0, 0],
[0.5, 0, 0.5, 0, 0]
])
通常的随机漫步不会只有一步,而是两步。因此,两步后,您从文档 1 到达节点文档 3 的概率就是这些概率的组合。为了计算一个步行者在两步后到达的概率,下面的脚本会有所帮助。
v = np.array([1., .0, .0, .0, .0]) # starting point
**for** step **in** range(n):
v = np.dot(M, v)
变量 v 告诉我们当前节点的概率。因为我们从文档 1 开始,所以在该节点的概率是 100%。点乘取这个概率,并与下一个可能节点的概率执行向量乘法。因此,我们得到一个向量,它告诉我们,基于我们之前去过的地方的概率,我们可能到达的地方的概率。对于第一步,这只是 m 的第一列。从那里开始,我们可以在主题 1 或主题 2 处,并且必须将这个概率乘以下一个路径的概率。
重新启动
带重启的随机行走算法包括重启的概念。在这里,一个步行者有β的概率继续行走而不需要重新开始,因此 1-β再次传送到它的起点并从那里开始行走。这有助于探索更多样化的道路。
实现相当容易。我们不只是用转移矩阵 M 乘以我们现在可能在哪里的概率,而是包括我们在开始节点结束的概率。
start = np.array([1., .0, .0, .0, .0]) # starting point
v = start
**for** step **in** range(n):
v = beta*np.dot(M, v) + (1-beta)*start
因此,我们将通常的步行乘以β,并加上到达起点的剩余机会(1-β)。
实验
如果我们进行 n 步随机行走,我们得到以下概率:
array([0.34461028, 0.06633499, 0.14461028, 0.24875622, 0.19568823])
它们会告诉我们可能会到达哪个节点。有 34%的概率我们会再次回到起点,7%的概率我们会在文档 2 、处,14%的概率我们会在文档 3* 处,依此类推。因此,出现在文档 3 的概率是文档 2 的两倍,因此我们可以说文档 1 (我们的起点)与文档 3 的相似度是文档 2 的两倍。*
结论
由于事先的题目分配,已经清楚文件 3 与文件 1 相似。无论如何,这个简单的例子可以推广到更复杂的图形和实体之间的关系。结合简单的实现,这是一种计算相似性的好方法。
使用 Python 进行简单和多元线性回归
线性回归是对单个因变量(目标变量)和一个(简单回归)或多个(多元回归)自变量之间的关系进行建模的方法。线性回归模型假设输入和输出变量之间存在线性关系。如果存在这种关系,我们就可以估计模型对新数据进行预测所需的系数。
在本文中,您将学习如何使用多个库,如 Pandas 、 Numpy 、 Scikit-Learn 、、和 Scipy ,从零开始在 Python 中可视化和实现线性回归算法。此外,我们将使用皮尔森 相关系数来衡量两个变量之间线性关系的方向和强度,以及使用均方差等评估指标来衡量线性回归模型的预测精度。
现在!我们开始吧💜
数据集的分析
本文使用的数据集是在 Kaggle 中获取的。 Kaggle 是一个数据科学家和机器学习者的在线社区,在这里可以找到各种各样的数据集。所选的数据集包含 5000 名男性和 5000 名女性的身高和体重,可通过以下链接下载:
[## 你的数据科学之家
编辑描述
www.kaggle.com](https://www.kaggle.com/mustafaali96/weight-height/downloads/weight-height.zip/1)
第一步是使用 熊猫 导入数据集。 Pandas 是一个用于数据科学的 Python 开源库,允许我们轻松处理结构化数据,如 csv 文件、 SQL 表或 Excel 电子表格。导入 csv 文件后,我们可以打印数据集的前五行、每列的数据类型以及空值的数量。
正如我们可以很容易地观察到的那样,数据帧包含三列:性别、身高和体重。性别列包含 object 类型的两个唯一值:男性或女性。高度和重量列中使用了浮点数据类型。由于数据帧不包含空值,并且数据类型是预期的类型,因此没有必要清理数据。
为了更好地理解身高和体重这两个变量的分布,我们可以简单地用直方图来描述这两个变量。直方图是显示数字变量分布的图表,将数据分组到多个条块中。条形的高度代表每个箱的观察数量。
前面的图表显示,身高和体重这两个变量呈现出正态分布。作为我们探索性分析的一部分,在单独的直方图中绘制男性和女性的分布也是很有趣的。
前面的图显示,男性和女性的身高和体重都呈现出正态分布。虽然两种分布的平均值对于男性来说更大,但是两种性别的分布范围是相似的。 Pandas 提供了一个名为 describe 的方法,用于生成数据集的描述性统计数据(集中趋势、分散和形状)。
探索性数据分析包括分析数据集的主要特征,通常采用可视化方法和汇总统计。目标是理解数据,发现模式和异常,并在我们执行进一步评估之前检查假设。经过探索性分析,我们可以得出结论:身高和体重是正态分布。男性分布呈现出较大的平均值,但是与女性分布相比,分布的扩散确实是相似的。
但也许此时你会问自己:身高和体重有关系吗?我可以用一个人的身高来预测他的体重吗?
两个问题的答案都是肯定的!😃 💪让我们继续▶️ ▶️
使用 Matplotlib 的散点图和使用 Numpy 的线性回归
散点图是一种二维数据可视化,显示两个数值变量之间的关系——一个沿 x 轴绘制,另一个沿 y 轴绘制。 Matplotlib 是一个 Python 2D 绘图库,包含一个内置函数来创建散点图**Matplotlib . py plot . scatter()**函数。
下图显示了男性和女性的身高和体重之间的关系。可视化包含 10000 个观察结果,这就是为什么我们观察到过度绘制。当数据在可视化中重叠时,会出现过度绘制,使得难以可视化单个数据点。在这种情况下,原因是大量的数据点(5000 个男性和 5000 个女性)。另一个原因可能是少量的唯一值;例如,当散点图的一个变量是离散变量时。
在下面的图中,我们随机选取了 500 名女性的身高和体重。该图没有过度绘制,我们可以更好地区分各个数据点。正如我们在前面的图中所观察到的,雄性和雌性的体重随着身高的增加而增加,在两种情况下都显示出线性关系。
简单线性回归是一种对因变量和自变量之间的关系进行建模的线性方法,可获得最符合数据的直线。
y =a+bx
其中 x 为自变量(身高) y 为因变量(体重) b 为斜率, a 为截距。****截距表示 x 为 0 时 y 的值,而斜率表示直线的陡度。目标是获得最符合我们数据的线(最小化误差平方和的线)。误差是实际值 y 和预测值 y_hat 之间的差值,预测值是使用计算的线性方程得到的值。
误差= y(真实)-y(预测)= y(真实)-(a+bx)
使用 Numpy 我们很容易得到这条线。 Numpy 是一个用于科学计算的 python 包,它提供了高性能的多维数组对象。numpy 函数 polyfit numpy.polyfit(x,y,deg) 将一个次数为 deg 的多项式拟合到点 *(x,y),*返回最小化平方误差的多项式系数。在下面几行代码中,我们获得了预测女性和男性体重的多项式。
下图描述了散点图以及之前的回归线。
带有 seaborn 的散点图和线性回归线
Seaborn 是基于 matplotlib 的 Python 数据可视化库。我们可以使用seaborn . reg plot函数轻松地用 seaborn 创建回归图。与之前的方法相比,所需的线路数量要少得多。
前面的图显示了绘制 10000 个样本时的过度绘制。该图显示了男性和女性的身高和体重之间的正线性关系。为了更直观,下图显示了 300 个随机选择的样本的回归图。
使用 sklearn 拟合简单的线性模型
Scikit-learn 是一个免费的 python 机器学习库。我们可以使用 linear regression 类通过 Scikit-learn 轻松实现线性回归。创建线性回归对象后,我们可以通过调用 fit 方法来获得最适合我们的数据的直线。
使用 Sklearn 线性回归获得的值与之前使用 Numpy polyfit 函数获得的值相匹配,因为两种方法都计算使平方误差最小的直线。如前所述,误差是因变量的实际值与模型预测值之间的差异。最小平方误差通过最小化平方误差的总和 S 找到最佳参数值。
一旦我们拟合了模型,我们就可以使用预测方法进行预测。我们还可以通过使用 polyval 函数,使用 Numpy 中计算的多项式进行预测。使用 Scikit Learn 和 Numpy 获得的预测是相同的,因为这两种方法使用相同的方法来计算拟合线。
皮尔逊相关系数
相关性衡量两个变量相关的程度。皮尔逊相关系数用于衡量两个变量之间线性关系的强度和方向。该系数的计算方法是将变量的 协方差 除以其 标准差的乘积,其值介于+1 和-1 之间,其中 1 表示完全正线性相关,0 表示没有线性相关,1 表示完全负线性相关。
我们可以通过使用 获得一个数据帧的变量的相关系数**。**corr()法。默认情况下,计算皮尔逊相关系数;然而,也可以计算其他相关系数,例如 Kendall 或 Spearman 相关系数。
****
解释相关系数大小的经验法则如下:
- 1–0.8→非常强
- 0.799–0.6→强
- 0.599–0.4→中等
- 0.399–0.2→弱
- 0.199–0→非常弱
在之前的计算中,我们已经获得了大于 0.8 的皮尔逊** 相关系数,这意味着身高和体重对于男性和女性来说都是高度相关的。**
我们也可以使用 Scipy 的 stats 包计算皮尔逊相关系数**。函数scipy . stats . Pearson r(x, y ) 返回两个值 Pearson 相关系数和 p 值。**
可以看出,使用熊猫和 Scipy 的相关系数是相同的:
- 雌性相关系数:0.849608
- 男性相关系数:0.8629788
残差图
我们可以使用数值,如皮尔逊相关系数或可视化工具,如散点图来评估线性回归是否适合预测数据。进行这种评估的另一种方法是使用残差图。残差图显示实际值和预测值之间的差异。如果残差图中的点随机分布在水平轴周围,则线性回归模型适用于该数据;否则,非线性模型更合适。
我们可以使用 Seaborn 创建残差图**,如下所示:**
****
正如我们所见,这些点随机分布在 0 附近,这意味着线性回归是预测我们数据的合适模型。如果残差图呈现曲率,则线性假设是不正确的。在这种情况下,非线性函数将更适合预测数据。
多元线性回归
****简单线性回归使用线性函数来预测目标变量 y 的值,该函数只包含一个自变量 x₁ 。
y =b ₀+b ₁x ₁
在将线性方程拟合到观测数据后,我们可以获得最符合数据的参数 b₀ 和 b₁ 的值,最小化平方误差**。**
之前,我们已经计算了两个线性模型,一个用于男性,另一个用于女性,以根据人的身高预测体重,获得了以下结果:
- *男性→体重=-224.50+5.96 身高
- *女性→体重=-246.01+5.99 身高
到目前为止,我们已经采用了一个独立变量来预测人的体重 【体重= f(身高) ,创建了两个不同的模型。也许你在想💭❓:我们可以用身高和性别作为独立变量建立一个预测体重的模型吗?答案是肯定的!😄⭐️,这就是多元线性回归发挥作用的地方!
****多元线性回归使用线性函数预测目标变量 y 的值,包含函数 n 自变量x=[x₁,x₂,x₃,…,xₙ】。
y = b ₀+b ₁x ₁+b₂x₂+b₃x₃+…+bₙxₙ****
我们使用与简单线性回归相同的技术(最小平方误差)获得参数 bᵢ 的值。拟合模型后,我们可以用方程预测目标变量 y 的值。在我们的例子中,我们用身高和性别来预测一个人的体重 体重= f(身高,性别)。
多元线性回归中的分类变量
统计学中使用的变量有两种:数值型和分类变量**。**
- 数字变量代表可以测量并按升序和降序排序的值,如人的身高。
- 分类变量是可以分组或分类的值,例如一个人的性别。
多元线性回归不仅接受数值变量,还接受分类变量。要将分类变量包含在回归模型中,变量必须编码为二进制变量(虚拟变量)。在 Pandas 中,我们可以使用Pandas . get _ dummies函数轻松地将分类变量转换为哑变量。该函数返回一个伪编码数据,其中 1 表示分类变量存在,0 表示不存在。
为了避免多重共线性,我们必须删除其中一个虚拟列。
然后,我们可以使用这个数据框架,使用 Scikit-learn 获得一个多元线性回归模型。
在拟合线性方程后,我们得到以下多元线性回归模型:
- **体重=-244.9235+5.9769 身高+19.3777 性别
如果我们想预测一个男性的体重,性别值是 1,得到下面的等式:
- **男→体重=-244.9235+5.9769 身高+19.3777 * 1 =-225.5458+5.9769 身高
对于女性,性别值为 0。
- **女→体重=-244.9235+5.9769 身高+19.3777 * 0 =-244.9235+5.9769 身高
如果我们比较简单线性模型和多元线性模型,我们可以观察到类似的预测结果。多元线性回归模型的性别变量只改变直线的截距。🙌
关键要点
- ****简单线性回归是对一个因变量和一个自变量之间的关系进行建模的线性方法。
- ****多元线性回归使用线性函数来预测包含函数 n 自变量的因变量的值。
- 探索性数据分析包括分析数据集的主要特征,通常采用可视化方法和汇总统计。
- ****直方图是显示数值变量分布的图表,将数据分组到箱中。
- Pandas 提供探索性数据分析的方法和函数,如 Dataframe.describe()、Dataframe.info()、Dataframe.dtypes 和 Dataframe.shape.
- ****散点图是二维数据可视化,显示两个数值变量之间的关系——一个沿 x 轴绘制,另一个沿 y 轴绘制。 Matplotlib 和 Seaborn 提供了绘制散点图的内置函数。
- 我们可以使用诸如 Numpy 或 Scikit-learn 之类的库来拟合一个简单线性回归模型。
- ****相关性衡量两个变量相关的程度。皮尔逊相关系数用于衡量强度和方向两个变量之间的线性关系。
- ****残差图可用于分析线性回归模型是否适用于数据。
- ****分类变量必须转换成虚拟变量才能在多元线性回归模型中使用。
感谢阅读🙌 😍 😉 🍀