脸书·艾发明新语言背后的真相
关于脸书在机器人开发出自己的语言后关闭机器人的文章已经见诸报端。媒体就是喜欢这些点击诱饵标题。这些文章中的一些会让你相信这是一次非常危险的呼叫——脸书的科学家在人工智能接管世界之前勉强关闭了它。幸运的是,仍然有理智的人存在,所以已经有相当多的文章解释为什么所有关于世界末日的言论完全是胡说八道(就像 Snopes 或美国消费者新闻与商业频道发表的文章)。甚至一些媒体最初提供了这个事件的非常可耻的版本,最终编辑了内容以减少戏剧性(例如独立报)。
问题是虚假但吸引人的新闻比其他任何东西都更容易传播。我还觉得奇怪的是,没有一篇文章真正用人们能理解的术语解释发生了什么。我试图向我的一些朋友解释这种情况,最终决定值得写下来。也许它会帮助人们不去想天网而入睡。然而,我的目标是教育——展示所谓的人工智能是如何工作的——而不是偏袒任何一方。
脸书人工智能研究(博览会)
那么脸书实际上在做什么呢?而机器人是如何“几乎变得有知觉”的?整个项目都有详细的记录,并向公众公开。任何人都可以下载并运行这个人工智能,也可以自己观察这种新语言。只是请小心,像脸书工程师那样及时关闭它。
系统尝试模拟对话和协商。所谓的机器人被给予一组物品(由书、帽子和球组成)和一些它比其他人更想要哪些物品的偏好。然后,它应该与它的对手,不管是人还是另一个机器人,就如何在他们之间分割宝藏进行谈判。
这项研究于 6 月发表,包括实验中使用的所有代码和训练数据。如果你对更多细节感兴趣,请阅读官方文章或从 github 获取代码。
那么简单来说,它是如何工作的呢?
机器学习
我不会用所有的技术细节来打扰你,但是理解一些关于这项技术如何工作的基本原理是很重要的。
当开发这样的机器人时,你从一个叫做“训练数据集”的东西开始。这包括机器人试图模拟的行为的良好描述的例子。在脸书谈判聊天机器人的特殊情况下,你给它谈判对话的例子,并适当地注释整个情况——初始状态是什么,谈判者的偏好,说了什么,结果是什么,等等。该程序分析所有这些例子,提取每个对话的一些特征,并为这些特征分配一个数字,代表具有该特征的对话以谈判者的积极结果结束的频率。为了更好地想象“特征”是什么,想想单词、短语和句子。实际上要比这复杂得多,但这足以说明原理。
更具体地说,如果机器人想要帽子,“你可以拥有所有的帽子”这句话的分数会非常低,因为这句话在训练数据的每个场景中都以糟糕的结果结束——谈判者没有得到他想要的东西。
Diagram representing a sample dialog evaluation (Deal or No Deal? End-to-End Learning for Negotiation Dialogues, 2017)
这将基本上让你的人工智能版本为零。它现在知道哪些句子更有可能从谈判中获得好的结果。你可以用它来开始一个对话。它将根据训练阶段收集的数据,尽量提高积极成果的可能性。人工智能这个术语在这里感觉有点奇怪——它非常人工,但不是非常智能。它不明白它所说的意思。它只有非常有限的一组对话可以联系,它只是根据从那些历史对话中计算出的概率来挑选一些单词或短语。它不能做任何其他事情。它只是计算得到期望数量的帽子、球或书的概率,并基于此在屏幕上写些东西。
下一步是使用一种叫做强化学习的技术。由于我们提供良好标注的训练数据的能力相当有限,我们需要另一种方式让这个人工智能学习。一种常见的方法是让人工智能运行模拟,并从自己的结果中学习。在我解释这对谈判机器人的情况意味着什么之前,让我回避一个不同的人工智能。
AlphaGo
谷歌 Deepmind AlphaGo 是一个你去年可能听说过的程序。它是第一个打败职业围棋手的人工智能。这是强化学习的一个很好的例子。
AlphaGo 开始从真人玩的真实游戏中学习。它根据这一知识对每一个可能的动作进行分析和评分。光是这一点就让 AlphaGo 有能力下棋,尽管很差——它不懂游戏,但它有办法根据之前分析的游戏给棋步打分。
但是,围棋很容易模拟。我们有一套精确的规则,我们为人工智能设定了一个非常好的目标——赢得比赛。所以我们可以创建这样一个人工智能的两个实例,并让它与自己对抗。由于我们有大量的计算能力,它可以轻松地进行数百万次游戏训练,比任何人都要多。然后,它会根据所有这些模拟结果更新每一步棋的获胜概率,从而越来越好地为每一步棋打分。
The famous match of AlphaGo vs Lee Se-dol. The long reinforcement learning period is paying off.
我再次简化了这个概念。如果你想进一步了解 AlphaGo,我可以推荐克里斯托弗·伯格的这篇文章。我只想让你们从这个例子中吸取一个教训。如果我们能够满足三个条件,强化学习会非常非常有效(AlphaGo 和许多其他人已经证明了这一点):
- 一个定义明确的人工智能选择空间。在 AlphaGo 的情况下,它只能下有效的围棋。
- 给结果打分的好方法。就 AlphaGo 而言,赢了是好事,输了就是坏事。
- 一个很好的方法来模拟情况,让人工智能学习。在这种情况下,我们可以让人工智能对抗它自己(最好是对抗它自己的不同版本,因为如果你的对手和你玩的不一样,就更容易学到新东西)。
回到脸书
所以让我们回头看看原来的题目。脸书试图创造一个可以谈判的机器人。它符合以上三个条件的程度如何?有一个很好的方法来给结果打分,因为谈判中的每一项都有一个值。我们有一个很好的方法来模拟这种情况,让人工智能学习。这正是脸书所做的——让机器人的两个实例相互协商。但是最后一点有点问题。
与围棋不同,英语没有简单的定义。原始训练数据集是英文的,但提取的特征只是单词和短语,机器人只是根据它们有多大可能帮助获得预期结果的数字表示将它们放在一起。
两个实际上不懂英语的机器人最终互相交谈,互相学习。衡量他们成功的唯一标准是他们如何分发书籍、帽子和舞会。唯一要遵循的规则是把单词放在屏幕上。他们开始或多或少地用英语交谈,但他们从自己的错误中学习,却不知道它们实际上是错误——以帽子、书和球的形式导致了想要的结果。一些单词被遗忘了,因为根据数字,它们对谈判结果没有贡献。一些得到了繁殖。如果说“我想要”能提高得到某样东西的几率,那么我们为什么不应该说多次呢,对吗?一旦成功,人工智能会认为这是一个好策略。
如果是和人类对抗训练,这可能不是什么大问题,因为对方会使用恰当的语言。但是会有一个不同的问题。很难运行足够多的模拟来训练人工智能。
正如脸书的工程师所指出的,如果评分功能也包括语言检查,而不仅仅是谈判后收到的物品的总价值,效果可能会更好。但事实并非如此。语言退化的事实无论如何既不令人惊讶也不有趣。每一个研究这类问题的科学家都会遇到这种情况,我确信脸书的工程师们确实预料到了这种结果。他们只是在模拟退化太严重时,在多次迭代后,在它不再提供有用的结果后,关闭模拟。
顺便说一句,如果你读了报告或发表的论文,除了在互联网上到处流传的胡言乱语,实际上也有很多好的结果。实验按预期进行,我可以说总体上是相当成功的。
This is not a new “more efficient” language that only AI understands as some journalists would lead you to believe. It is just a degenerate form of English after too many rounds of reinforcement learning.
最后,这没什么好奇怪的
没有什么可怕、令人震惊甚至值得注意的事情发生。只是普通的一天和普通的科学实验。然后,当想要成为记者的人一篇接一篇地发布关于世界末日的文章时,一切都乱套了。当聊天机器人不再显示合理的结果时,关闭它就像更换有故障的灯泡一样不吉利。
获得数据科学家工作的两个方面
你是找工作的数据科学家吗?你是在找数据科学家的招聘人员吗?如果你对这个问题的回答是或否,你需要阅读这个。
Edit: So happy that the post got so much attention, both here and KDNuggets 😃.
你好!这是一篇我等了很久才写的博客。主要是因为我需要做研究,听听其他人对此的看法。
我认为自己是一名数据科学家,而不是招聘人员,但由于我与 Amanda Voss 和更多数据科学和 IT 领域的招聘人员进行了一次令人惊叹的对话,我现在对故事的双方都有了一个想法:DS 在找工作,招聘人员在为一个职位寻找最好的 DS。
在开始之前,如果你想了解更多关于我寻找数据科学家工作的个人经历,请阅读我的博客:“如何获得数据科学家的工作?”
大家好。这篇博客文章来自我最近在 LinkedIn 发表的三篇文章。这是第一部分、第二部分和第三部分。
towardsdatascience.com](/how-to-get-a-job-as-a-data-scientist-f417078fe13e)
数据科学家方面
所以你是一名数据科学家,或者你认为你离数据科学家越来越近了,你开始在这个领域找工作。我的第一个建议:耐心点!这不是一件容易的事,也许你会申请上百份工作才能得到一份。
当然,这可能是一个非常简单快速的过程,但根据我的经验,这至少需要(大约)100 份申请和几个月的时间。
从每一次申请,每一次拒绝中学习。当我开始申请工作时,我不得不面对许多拒绝。一些我实际上没准备好的事情。我想没有人让你做好被拒绝的准备,但是如果你从这件事中得到了什么,那也没关系!很正常,不针对个人!
每一次拒绝都是你走向成功的一步。适应雇主可能想要的每一个特征,或者有合适的经历,或者仅仅是文化适应,都不容易。
如果你足够幸运的话,你将会得到一个令人惊讶的招聘人员,他会让你知道发生了什么,以及如何在未来的面试或过程中改进。认识到自己的缺陷和弱点是变得更好的开始。你现在感受到的挫败感,或者你可能每次都用它来提高和变得更好。
关于该流程,需要记住三个要点
- 有些人不知道什么是数据科学。所以研究你申请的公司,看看他们的员工在做什么,寻找他们的交流方式,他们的脸书、LinkedIn、Twitter、会谈和网络研讨会。看看他们是否在做你感兴趣的事情。
- 招聘人员是你面试时最好的朋友,他们想帮你进入面试。所以信任他们,让他们帮助你提问!
- 比起你的技术知识,人们通常更感兴趣的是你如何解决问题和你如何处理一些特殊情况。当然,写出高质量的代码并充分理解你正在做的事情是很重要的,但是还有更多。
获得数据科学家工作的一些建议
- 要有耐心。在找到一份工作之前,你可能会申请数百份工作(但愿不会)。
- 准备。很多。不仅要学习重要的概念、编程和回答商业问题,还要记住你将是组织中的重要一员,你将与不同的人和情况打交道,准备好回答关于你在不同工作情况下如何表现的问题。
- 有作品集。如果你正在寻找一份严肃的数据科学的有偿工作,做一些有真实数据的项目。如果你能把它们发布在 GitHub 上。除了 Kaggle 比赛,找一些你喜欢的事情或者你想解决的问题,用你的知识去做。
- 招聘人员是你的朋友。面试你的人也是。他们希望你进入公司,这是我每天都记得的一个强有力的建议。
- 询问人们做什么。我建议您关注 Matthew Mayo 关于“数据科学家的一天”的帖子,以便更好地了解我们的工作。
- 如果你想要一份实习工作,就要准备好你的学术技能。
创建简历和生活(什么?)得到那份工作
马克·梅龙的建议:
如果你有什么想让读者或听众(采访者)知道的,你最好把它放在你的信息的前面。对于简历来说,这意味着你要用你最强的方面来引导。也许这就是你的教育。可能是你的工作经历吧。不要觉得你必须遵循你下载的简历模板中的顺序。
当面试官问“说说你自己吧”,你不需要给他们按时间顺序讲述你的生活故事。首先告诉他们你最大的优势是什么。
马克的更多信息:
你想表达你对这个领域的热情吗?做一些个人项目。贡献开源。开个博客。见鬼,在 LinkedIn 上活跃[……]。
文字廉价;行动才是最重要的。
在我们这个竞争激烈的领域,你希望避免做任何会导致人们不把你当回事的事情。
来自凯尔·麦基乌的建议:
把简历上的每一个要点都变成一个小故事。你可能已经有了一整页的文本,而且可能充斥着“我做了这个”或“我们做了那个”的一句话去吧,删掉一半。
现在你已经腾出了一些空间,开始扩展剩余的成就。
使用星形格式给出每个要点的上下文,并将其转化为一个有分辨率的详细迷你故事。
在简历上写一些突出的故事和成就比写一大堆“东西”要好
凯尔的更多信息:
[与招聘人员沟通时]将你的沟通总结为 3-5 句话,解释:
-你为什么对这份工作和公司感兴趣
-为什么你的技能和背景使你非常适合。
还有,要兴奋,要有激情。
战胜竞争对手。
来自埃里克·韦伯的建议:
想作为数据科学家有所作为吗?不要只看正在做什么,也要看没有做什么。写下你能为公司做的最重要的 5 件事。然后提出你的想法。
为什么?
1.自我批评是很难的。检查没有做的事情很难,但可以让你走出“让事情保持原样”的舒适区。
2.业务发展迅速。当事情似乎着火时,很难摆脱“把事情做完”的心态。但是远离这种心态提供了一个真正创新的机会。
3.你对数据真的很了解。很少有人知道。理解数据的潜力是一项数据科学工作,并不总是管理层能够做到的事情。
4.写一份清单迫使你随着时间的推移追踪你的想法。你把它写在纸上,它会一直跟着你。相比之下,只是思考一些事情并不总是能让它坚持下来。
5.你必须推销你的想法。简单地写下它们是可以的,但是如果你不把你的想法传达给管理层,它们就不会成功。选择你最喜欢的一个,并开始确定它对公司的影响和投资回报率。
思考、写作和销售。定期督促自己这样做,你会发现各种各样的新想法可以分享。
博沃克的建议:
在过去的十年里,我在 LinkedIn 上申请了 898 份工作。我知道这一点,因为 LinkedIn 一直在跟踪。(感谢 LinkedIn 的提醒!)
这个数字还不包括我在其他平台或直接在雇主网站上申请的职位。这还不包括我收到的大量招聘邮件、电子邮件和电话。
想知道这些活动让我实际上获得了多少份工作吗?
零。一无所获。塞罗。нуль.是真的。
我是 0–898 找 LinkedIn 的工作!我从来没有真正接受过通过求职板或招聘人员找到的工作。
我被问了很多关于如何找工作的问题。我和那些对申请过程感到沮丧的人谈了很多。
我的建议?考虑其他找工作的方法。10 年来,我接的每一份工作都是来自于人脉。最好的工作往往如此。
来自 Vin Vashinta 的建议:
[……]当你处于回答问题的模式时,很难开始问问题。当你想给人留下深刻印象时,很难期待同样的回报。记住,招聘是双向的。
带着更多的期望离开面试,但也要带着同样的期望离开面试。你印象深刻吗?他们做了什么让你觉得受欢迎?你努力工作才取得现在的成就。被那些提升你的事业所吸引,而不是削弱你已经取得的成就。
伟大的公司会努力让每一个应聘者都大吃一惊,即使是那些他们没有聘用的人。亚马逊是一个很好的例子,它的招聘流程给我留下了深刻的印象。我和他们的招聘人员有过多次接触;始终专业,反应迅速,并带来适合我能力的角色。
来自JT·科斯特曼博士的建议:
这个问题很可能与你如何看待自己的简历有关。
问:简历的作用是什么?
答:错了。它不是给你一份工作,甚至不是一次面试,也不是给招聘经理。简历的工作就是让它通过碎纸机。句号。句号。
大多数收到你简历的人根本不知道我们到底是做什么的;他们只是有一个清单要检查。他们在寻找关键词,而不是概念。他们中的大多数人不会为淘金而烦恼。他们会给出不到一分钟的时间(字面上的意思),然后继续处理他们的下一个问题。
实话实说:你的简历简单到连人力资源/招聘部门的一些笨蛋都能看出你是一个近乎完美的人选吗?是关于你的吗?或者你是否清楚地展示了(而不是告诉)你将如何让招聘经理和公司受益——包括确保她每天可以少吃点药?你是在为 HR 把点连起来,给他们画地图吗?
大概不会。
阅读所有建议,并寻找更多建议。他们很棒。有些有点难以理解,但它们是真实的。
那么,我要告诉你什么来改善你作为 DS 的生活和你的简历呢?以下是我的清单:
- 要诚实。不要在简历中低估或高估自己。
- **联系并活跃在数据科学社区。**创建博客,分享您的知识,参与开源项目。
- 说清楚。阅读你的简历,问自己:这是我希望看到的样子吗?,确保你把你认为对你和你申请的公司最重要的东西放在了开头。
- 不要给每家公司都投相同的简历。这非常接近最后一点,是一项艰苦的工作。但是相信我,你会很快看到结果。分析公司,为那个职位准备一份简历。
- 保持简短。他们每天都会收到数千份简历,所以他们只会花 30-60 秒阅读你的简历。所以一定要确保你把他们想看的东西放在那里。不要放与公司无关的东西。
- 保持一致。这意味着在任何地方都使用相同的字体和风格。
- **说出你的故事。**你在简历里看到的那些子弹就是你。所以,用你和他们都会喜欢的方式讲述你的生活故事。如果你更擅长学术技能,一定要把它放在经验部分之前,反之亦然。
- 在发送简历之前,征求招聘人员的意见。
更多建议:
我从许多有抱负的数据科学家那里听到一个熟悉的故事:“我已经向 25 家公司发出了简历,我…
will-stanton.com](http://will-stanton.com/creating-a-great-data-science-resume/) [## Creddle
Creddle 帮助你制作漂亮、现代、纸质友好的网络简历。
creddle.io](http://creddle.io) [## GitHub 是你现在的简历
如果你是一名程序员,当你申请工作时发送简历的日子很快就要结束了,如果他们还没有…
anti-pattern.com](https://anti-pattern.com/github-is-your-resume-now)
一般面试技巧
在为面试提供一些建议之前,这里列出了申请数据科学职位的“常见”流程:
- 他们会打电话询问你和你的经历。这是第一个手机屏幕。
- 如果一切顺利,你会接到第二个电话,这次可能是公司的某个数据科学家打来的。这是第二次电话筛选。他们会问你更多关于你的情况、你的经历以及一些技术问题。这个更有可能看你简历里说的东西是不是真的。
- (可选)数据科学任务。他们会给你发一个数据集,问你几个问题,看看你作为数据科学家的能力。这里要说清楚。编写高质量的代码。
来自 Kyle Mckiou 的建议:作为一名数据科学家,要写出高质量的代码:
编写高质量的代码对于数据科学家来说至关重要,尤其是在 2018 年及以后。
随着数据科学实践的成熟,更多的公司将要求数据科学项目的自动化、可再现性、可伸缩性、可移植性和可扩展性。为了实现这一点,你最好准备好编写高质量的代码。
以下是让你开始成为数据科学家的 10 个技巧:
1.积极重构。当你应该重构的时候,不要在脚本末尾添加新代码
2.遵循样式标准,例如 Python 的 PEP-8
3.防御性地编写代码——始终考虑可能出错的地方!
4.避免全局变量并最小化变量的范围
5.把这些脚本转化成程序——创建有组织的系统
6.总是单元和集成测试
7.自动化您的测试
8.创建严格的审核流程
9.遵循严格的审核流程,即使你不愿意!
10.作为评审者提供诚实的、批判性的反馈,当你的代码被评审时,对反馈持开放态度
4.白板编程。这可能是任何过程中最艰难、最令人生畏的部分。在空白空间编程。只有你和一张纸。多练习这个。你不需要在这里完美地写代码,他们想看到你思考并进入解决方案。谈论和描述你的思考过程,不要太过投入。
5.(可选)公司中编码的日期。这是最后一项任务,并不常见,但它邀请他们的公司在那里呆一整天,看看他们在做什么,并解决一些编程任务。
面试建议?以下是我能找到的,它们很棒:
布兰登·罗尔:【https://brohrer.github.io/how_to_interview.html】T2(读这个!!!)
世界各地的顶级数据科学团队正在对一些最有趣的数据集进行令人难以置信的研究…
www.springboard.com](https://www.springboard.com/blog/data-science-interviews-lessons/) [## 30 分钟指南让你在下一次编码面试中摇摆不定
我是如何在编码面试中提高的,以及如何收到大型科技公司的邀请。
medium.freecodecamp.org](https://medium.freecodecamp.org/coding-interviews-for-dummies-5e048933b82b) [## 如何赢得数据科学面试:SQL
数据科学面试可能很难驾驭。事实上,这是一个多学科领域意味着…
towardsdatascience.com](/how-to-ace-data-science-interviews-sql-b71de212e433) [## 准备数据科学家的面试
《福布斯》撰稿人发表的观点仅代表其个人观点。我该如何准备数据科学家面试?原来…
www.forbes.com](https://www.forbes.com/sites/quora/2017/04/05/preparing-for-a-job-interview-as-a-data-scientist/#443263b81ff8) [## 编程面试问题+帮助获得工作机会|面试蛋糕
自由练习编程面试问题。面试蛋糕帮助你准备面试,获得公司的录用通知…
www.interviewcake.com](https://www.interviewcake.com) [## 解决教程代码挑战
加入 200 多万开发人员的行列,在 HackerRank 上解决代码挑战,这是为…
www.hackerrank.com](https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interview)
招聘方
如果你是数据科学岗位的招聘人员,先看看谁是数据科学家。这不是一个简单的问题,但我有一个简短的回答:
数据科学家是负责分析业务问题并给出结构化解决方案的人,首先由将这个问题转化为有效和完整问题,然后使用编程和计算工具开发代码使清理、准备和分析数据然后
数据科学不是什么:
We are much more than this.
数据科学为什么重要?
数据科学和分析之所以存在,是因为数据中隐藏着等待发掘的宝藏。
数据科学家为企业增加价值的方式:
这是阿凡提卡·蒙纳帕的一篇精彩文章的摘录
如果没有将尖端技术转化为可操作见解的专业知识,大数据就什么都不是…
www.simplilearn.com](https://www.simplilearn.com/why-and-how-data-science-matters-to-business-article)
From simplilearn.
1.授权管理层和官员做出更好的决策
2.根据趋势指导行动,这反过来有助于确定目标
3.激励员工采用最佳实践并关注重要问题。
4.发现机会
5.利用可量化的数据驱动的证据进行决策。
6.测试这些决定
7.目标受众的识别和提炼
8.为组织招募合适的人才
你总是需要一个数据科学家吗?
实际上没有。我建议你阅读这些相关的文章,
比拉尔马哈茂德,螺栓。数据科学正在发展。它被称为“21 世纪最性感的工作”,并且…
www.kdnuggets.com](https://www.kdnuggets.com/2016/04/your-company-need-data-scientist.html) [## 炒作之外:你真的需要一个数据科学家吗?-的确是博客
2012 年,《哈佛商业评论》将数据科学家评为“21 世纪最性感的工作”,理由很充分…
blog.indeed.com](http://blog.indeed.com/2016/08/16/do-you-need-a-data-scientist/)
从这些话中,我可以引用一句重要的话:
…适当利用数据科学团队需要一定的数据成熟度和基础架构。数据科学团队需要一些基本的事件量和历史数据来提供对未来有意义的见解。理想情况下,您的业务运行在信号延迟低、信噪比高的模式上。
没有这些元素,你将拥有一辆没有燃料的跑车。问问自己,像数据分析师和商业智能这样的传统角色是否足够。
记住这句话:一个糟糕的数据科学家比根本没有数据科学家更糟糕。
有很多人想要一份数据科学方面的工作,他们中的大多数都是非常聪明的人,希望在这一领域提供帮助并有所作为,但在雇佣之前要小心。我建议您在最好的公司中搜索数据科学描述,了解他们的流程,并向他们学习。
同样,他们不需要博士学位就能成为最好的数据科学家。他们需要处理数据和使用数据科学解决业务问题的经验。在申请博士学位之前,询问知识,他们参与过的项目,他们建立或合作的开源项目,他们创建的 Kaggle 内核,相关的工作经验,他们如何解决一个特定的问题。
数据科学不仅仅是一个 IT 领域,是 IT+业务,你需要确保你雇佣的数据科学家能够适应公司,了解业务,与利益相关者开会,并以创造性和简单的方式展示他们的发现。
阅读这篇博文了解更多信息:
每天,人类共同创造了相当于 530,000,000 亿首数字歌曲或 250,000 个图书馆…
blog.entelo.com](https://blog.entelo.com/a-field-guide-to-recruiting-data-scientists)
并由此得出一些招募数据科学家的重要技巧:
- 招聘人员与招聘经理紧密合作,构建出准确的职位描述。
- 消除细微差别,以区分哪些类型的数据科学家将是最适合企业需求的**。专注于你正在寻找的数据科学家类型的技能和经验。**
- 想长远。了解组织计划如何在产品路线图中利用这一角色。
- 为可用的候选人才库设定现实的期望。角色比候选人多,要相应招聘。
- 建立一份理想候选人名单,并与招聘经理一起校准,以衡量是否符合人才市场的现实。
Vin Vashinta 在招聘过程中的一句名言:
有抱负的数据科学家想从没有雇佣他们的公司那里得到一样东西:一个解释。在许多情况下,他们唯一的反应是沉默。如果公司不告诉他们,一个有抱负的数据科学家怎么知道该做什么?
有抱负的数据科学家不是灵媒,但他们很努力&愿意学习。如果公司开始告诉他们酒吧在哪里,他们就会接受挑战。
剥开大多数公司的招聘流程&你会发现他们无法客观地回答这个问题:“你为什么不面试或聘用这个人?”我告诉客户,通过像审视他们雇佣的人一样仔细地审视他们拒绝的候选人,他们能学到多少东西。
这个问题的答案对应聘者和雇主都有价值。公司有机会改善他们的招聘流程。候选人有机会为下一次申请公司做更好的准备。
除了价值,对于花时间申请的人来说,这是一件体面的事情。招聘就是要建立联系。沉默表明公司不够关心如何正确对待员工。这是候选人需要记住的。
希望这篇帖子能帮助到数据科学界的每一个人。让我们携起手来,互相帮助,把世界变得更加美好。记住要开心,生活中除了工作还有很多,我喜欢我的工作,但是要花时间和你的家人和朋友在一起,开心点,善待他人。
如需了解更多信息或有任何疑问,请添加我,我们将在此聊天:
[## Favio Vázquez -数据科学家/工具经理 MX - BBVA 数据&分析| LinkedIn
查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 13 个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/faviovazquez/)
Udacity 无人驾驶汽车 Nanodegree —术语 1
我做到了!我完成了 Udacity 自动驾驶汽车 nano degree(www . uda city . com/drive)的第一学期。这是我对第一学期的回顾和路线图。
After finishing the projects of Term 1, I received this “certificate”
三个术语
首先要注意的是,这门课分为三个学期。每个学期花费 800 美元,为期三个月。
- 学期 1:计算机视觉和深度学习
- 术语 2:传感器融合、定位和控制
- 学期 3:路径规划、浓度和系统
我完成了第一学期。第二学期这几天才开始(2017 年 3 月)。而 term 3 还不可用。
第一学期是关于计算机视觉和深度神经网络。自动驾驶汽车必须看到环境中的关键元素(车道、其他车辆)。汽车必须根据这些信息行驶。
每学期 800 美元?
这个课程很贵。在我看来,这是一件好事,因为课程成为一门好课程是有成本的(课程视频、IT 基础设施、软件、讲师、评审员)。
这门课程并不容易。在注册之前,请证明您拥有该技能。 Udacity 第一学期课程。
事后看来,鉴于我所能学到的东西,我会很乐意为支付双倍的费用。
课程和练习
这些课程基于自动驾驶汽车领域的重要主题:车道线识别、深度学习、计算机视觉。毫无疑问,这些地区的选择是基于巴斯蒂安·特龙(Udacity 联合创始人、谷歌自动驾驶汽车和 Stanley, Darpa 大挑战的获胜者)以及梅赛德斯-奔驰、英伟达、优步等合作伙伴的奇妙经历。
它有一个非常实际的重点:理论足以理解核心概念,然后,实际应用。这就是为什么它需要很多背景知识的原因。这不是一门关于基本 python 或基本神经网络的课程,而是如何在实际案例中应用它。
我们可以随意访问在线课程和练习、论坛(在乌达城、斯莱克和脸书),一个通过聊天来帮助我们的“伙伴”。
工作时间
我花了大约 20 小时/周或更多的时间来做这个课程。在课程开始时,Udacity 估计每周 10 小时。但是这个估计是非常错误的,不仅对我,而且对大多数在论坛上发表评论的人。
有一点要说的是,第一批也是豚鼠。不仅我们在学习,而且 Udacity 也在校准课程和班级。
例如,项目 3 只有很少的说明。最好的教学指南是由第一批学生 Paul Heraty 编写的,他在这门课程最困难的项目上花费了大量的时间。最好的建议也来自论坛上的学生。
因为这不是一个真实的课堂,我们使用了论坛,用媒体写的漂亮的报告(像https://chatbotslife.com/@vivek.yadav、https://medium.com/@jeremyeshannon)和 Github。
不好的一面是沟通不如面对面。好的一面是,我们和世界上一些最聪明的人有联系。
这些项目
归根结底,重要的是项目。共有 5 个项目。
- 寻找车道线
- 交通标志分类
- 行为克隆
- 高级车道线
- 车辆检测
有趣的是,今天的焦点在电子和计算机科学。没有一节力学课。这是有意义的,因为机制已经掌握了。我们想取代方向盘后面的人类!
项目 1 —寻找车道线:
在本课程的第一周,有一个小挑战:使用基本的计算机视觉在视频中找到车道线。
难:容易
技能 : Python、计算机视觉(opencv)、numpy、Jupyter 笔记本
这是第一个项目的视频。我没有在媒体上写报告。
我在巴西圣保罗制作的一个视频中应用了同样的方法。
项目 2——交通标志分类:
这里的挑战是训练一个深度神经网络(LeNet 架构)来识别和分类交通标志。
难度:中等难度
技能 : Python、张量流、基础微积分、numpy、Jupyter 笔记本
详细报道此处。
项目 3:行为克隆
这里的目标是在模拟器中教会自动驾驶汽车预测转向角度和速度。
难:异常难,非常非常难。
技能 : Python,张量流,Keras,OpenCV,基础微积分,numpy,GPU,运气。
正如我之前所说,Udacity 正在基于这些第一批人改进课程——增加课程,纠正问题。也许在下一批中,这个项目会更容易。我花了 5 到 6 周的时间在晚上和周末做这个。在尝试之前,值得读一读我的报告,其中有许多大大小小的错误。
详细报道此处。
当你花了无数个夜晚来修理这辆车,而你却不知道哪里出了问题,却发现它偏离了道路,这是非常令人沮丧的:
The car fell in water: a self-driving submarine?
但是,当我最终能够通过这个挑战时,我感到非常满意。
Finally, the car drives!
项目 4:高级车道线
在项目 1 中,我们仅使用直线来投影车道线。在这个项目中,我们校正镜头的失真,做一个鸟瞰图,并使用二阶多项式。
难:中硬。
技能 : Python,OpenCV,numpy
在 P3 之后,我学到了很多关于 python 和 numpy 的知识,其他项目也变得简单了。
详细报道这里。
项目 5——车辆检测和跟踪
这个挑战是使用计算机视觉和支持向量分类器来检测视频中的车辆。一个问题是视频的误报。
难:中硬。
技能 : Python、OpenCV、Sci-kit learn、numpy
操作系统
我在 Linux Ubuntu 16.04 运行了所有的东西。我以前没有用过 Linux,但我认为 TensorFlow 和其他东西在 Linux 中运行得更好。现在我是 Ubuntu 的粉丝。今天我只在工作中运行 Windows。
我错过了什么
nanodegree,如描述所说,是关于自动驾驶汽车的工程。这不是关于历史、管理或自动驾驶汽车的一般概述。
然后,它没有显示谁是自动驾驶汽车公司,他们正在使用哪种技术,等等。我相信这是不可能的,因为这些技术大部分都是工业机密。
承运人服务
Udacity 为合作伙伴公司提供一些建议和链接。
我在这里的重点只是学习,尽我所能去学习。我不是在找新工作。然后我连这些服务都没关注,所以写不出来。
结论
在每一个热门领域,开始都是一片繁荣:无人驾驶汽车将主宰世界,没有工作。一段时间后,热情达到顶峰后,幻灭:它不会取代每一份工作,它有很多问题,有人投资数十亿美元却没有成功,等等。
整合:它将有一些非常非常好的利基应用,新类型的工作将被创造,新的想法将改变我们现在的每一个概念。
其他模式。在一个刚起步的行业,十几家公司试图赢得这场竞赛。不同的想法,技术,方法。一两个会赢。
100 年前,电力公司也是如此。只有通用电气和威斯汀豪斯幸存下来,他们赢得了比赛。后来,电气公司开始在利基市场行动,但最大的是这两个。
在个人电脑时代的开始,有数百家公司和无数的技术。我们只知道赢家:苹果、微软、IBM。
谁会赢得自动驾驶汽车比赛?没人知道。让我们看看接下来的章节。
我要感谢 Udacity 提供了这么棒的课程。我做了我甚至无法想象的事情。
我学到了很多,但我觉得还不够。一句古老的中国谚语说:
“伟大的旅程始于第一步”。
还有那么多知识要掌握。让我们挑战术语 2!
第一学期项目:
其他著作:https://medium.com/@arnaldogunzi
主要博客:https://ideiasesquecidas.com/
链接:
来自 Oliver Cameron 的 transmission—脸书集团
Udacity 公开挑战赛:这些不是课程,而是任何人都可以参加的挑战赛
英国迫切需要一个放射学人工智能孵化器
说 NHS 的放射科淹没在工作量中是一种保守的说法。2016 年 5 月,皇家放射科医师学会强调了一项全国劳动力调查的结果,包括每月有 230,000 项研究积压超过 31 天,减少这些积压的支出增加了 57%。苏格兰的情况也是如此,苏格兰每年花费在外包上的费用超过 525 万英镑(T2)。似乎没有人知道这场危机的答案,而且鉴于目前 NHS 资金不足的状况,短期内也不太可能出现答案。
然而,在池塘的另一边,有一股巨大的力量在推动解决放射学的问题——而英国正被抛在后面。
人工智能(AI)被吹捧为放射学等分析医学科学的下一件大事,不仅有可能降低报告成本,还可能减轻不堪重负的放射科医生的负担,同时为标准报告添加定量数据。
这种驱动力大部分来自美国,主要是由于私人支付系统的资本基础设施。在过去的几年里,美国国内进行了大规模的资本投资和机构合作来推进这一愿景。一些例子:
- 2016 年 5 月,马萨诸塞州总医院宣布与 NVDIA(运行大规模人工智能所需的 GPU 处理单元的制造商)建立合作关系,旨在“改善检测、诊断、治疗和疾病管理”。
- 随后在 2017 年 5 月,麻省总医院还宣布与通用电气医疗集团进一步合作,开展一项为期 10 年的计划,将“深度学习”整合到临床实践中。
- 众所周知,IBM Watson 与纽约的斯隆-凯特林癌症纪念中心和梅奥诊所(也与 NVDIA 有合作关系)都有合作。
比这些个人合作更有希望的是美国放射学家学院宣布成立一个新的数据科学研究所。DSI 计划与政府、工业和其他部门一起开发和实施人工智能。这是 ACR 临床信息学推动标准化 DICOM、使用适当性和工作流程增强项目的一个受欢迎的分支,应该有助于研究人员和行业在标准的监管和道德框架中验证人工智能。
带头的不仅仅是美国。事实证明,以色列是放射人工智能公司的绝佳孵化地。例如,斑马医疗公司与弗吉尼亚大学、卡尔加里大学、Carestream 和戴尔合作,现在已经扩展到澳洲。总部位于特拉维夫的 AIDoc 最近为其公司筹集了 700 万美元,而 MedyMatch 筹集了 200 万美元。
那么,为什么我们在英国没有看到同样的投资呢?
在英国,我们缺乏的是吸引这些知名合作伙伴的能力,以及随之而来的资金和资源。NHS 被认为太难嵌入、太复杂、太慢,这或许是相当正确的。为了让人工智能在放射学领域取得成果,它需要庞大的匿名、带标签的成像数据数据库,并与电子健康记录相链接,研究人员和科技初创企业或衍生公司可以在这些数据库上训练和验证算法。然而,NHS 没有资金支持这种工作。(说实话,它甚至没有资金来支持它当前的工作负载!).因此,这种大数据仓库根本不存在于我们的海岸。我觉得这很令人震惊,尤其是因为这个想法并不新鲜——例如,rad bank 早在 2008 年就在斯坦福大学设计和建造,而 RSNA已经宣布使用联邦基金全力支持量化成像数据仓库 T11。
RCR 已经在考虑人工智能方面迈出了一些尝试性的步伐,在 2016 年举办了一个论坛,有消息称,《临床放射学杂志》已经委托撰写了一篇关于放射学人工智能的思考文章,但总体进展缓慢。在英国学术界,有几十名医学成像研究人员在小数据集上构建算法,但他们缺乏在数百万张图像上测试这些算法的资源,更不用说将他们的产品推向市场了。这个瓶颈正在扼杀英国的创新。
我们需要的是大型技术公司、RCR 和 NHS 管理机构的联合,以推动放射学人工智能领域的全面合作愿景。我们应该利用 NHS 作为一个国家系统,通过汇集成像数据,建立一个国有化的成像仓库和技术孵化器(我想把这个大脑称为英国放射学人工智能网络)。这将在人工智能领域创建一个国家放射学研究所,能够吸引行业合作伙伴,为研究人员和设备提供资金。然后,我们将为放射科医生设立奖学金,建立公司和分支机构,并与 PACS 和硬件提供商合作,在技术出现时实施这些技术。相反,我们英国人却在苦苦挣扎,分散的、没有联系的研究人员试图在孤岛中制造产品,看着世界其他地方在我们前面跑了。
想象一个孵化器环境,可以访问数十亿 NHS 成像记录,研究人员可以在其中建立、启动和发展技术初创企业和风险投资。想象一下,如果我们可以在庞大的国家数据集上构建算法,而不是仅仅在一个本地数据集上训练算法,会取得什么样的成就。想象一下,如果资金和资源到位,允许实验、验证、增长和扩展。想象一下,如果人工智能的监管审批流程被固定在孵化环境中,那么新产品就可以直接推向市场。
无论你是否相信人工智能的承诺,全球范围内的投资规模和发展速度无疑表明许多其他人相信。如果英国在采用真正推动创新的集中化模式方面动作太慢,我们最终将只是一个客户;从国外购买软件是建立在我们无法提供的孵化环境的确切类型上。
如果你和我一样对人工智能在放射学中的未来感到兴奋,并想讨论这些想法,请联系我们。我在推特@drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,以及人工智能初创公司的顾问,包括 Kheiron Medical。
Tableau 图表的终极备忘单
Tableau Desktop 是一款非常棒的数据分析和数据可视化工具。它允许您立即看到您的数据(通过几次拖放)。“演示”功能非常有用,尤其是对于那些刚刚开始使用 Tableau 的人。拖动或双击分析中所需的维度和度量后,您可以使用演示功能查看可用的图表,只需单击图表类型即可创建这些图表。
你会注意到的一件事是,一些图表会被突出显示,而一些会显得更加暗淡。突出显示的图表可供您使用。这是由度量、维度、箱等的数量决定的。你把它放在你的视野里。每个图表都有最小指定数量的维度、度量、箱或构建该图表所需的其他项目。当您将鼠标悬停在每种视图类型上时,底部的描述会显示最低要求。
图表类型
Tableau 的“演示”功能中有 24 个可用图表。让我们讨论一下何时应该使用这些图表,以及在度量和维度方面的最低要求是什么——继续向下滚动:)
文本表格(Crosstab)
- 何时使用:类似于 Excel 表格,文本表格允许你查看行和列中的数据。这不是一个很好的视觉图表,但是,有时它有助于看到你在拉什么数据。您可以通过使用颜色来修饰文本表格。如果您希望在没有任何额外视觉提示的情况下以行和列的形式查看数据,请使用此选项。
- 最低要求:1 个或多个维度,1 个或多个度量
热图
- 何时使用:类似于文本表格,但使用大小和颜色作为描述数据的视觉提示。让我们可以轻松地讲述一个关于数据的故事。使用颜色和大小来比较类别是一种有效的方法。
- 最低要求:1 或多个维度,1 或 2 个度量
高亮显示表
- 何时使用:用颜色突出数据讲故事。也类似于 Excel 表格,但单元格是彩色的(类似于 Excel 中的条件格式)。可用于跨行和列比较值。如果需要,您可以更改配色方案(不同的颜色)并反转连续的颜色。
- 最低要求:1 个或更多维度,1 个度量
符号图
- 何时使用:使用酷炫的地图视图讲述包含地理数据的故事。可以突出你在哪里有最多的销售,或者确定一个位置的客户集中程度。使用尺寸和颜色使视觉流行。此外,您可以将标记更改为不同的形状,甚至使用自定义形状。您还可以使用地图图层来创建其他视觉效果(移除海岸线等)。需要确保您有地理维度(如州)。您可以做的另一件事是使用地图作为其他类型的图表、图形和表格的过滤器。将地图与其他相关数据结合起来,然后将其用作过滤器,以深入分析您的数据。
- 最低要求:1 个地理维度,0 个或更多维度,0 到 2 个度量
填充地图
- 何时使用:与上面讨论的符号地图类似,但是,为了讲述故事,您使用颜色来填充地理区域,而不是符号。你可以用颜色透明度和边框来增强视觉效果。同样,地理维度是必需的。当你在处理地理数据时,一个填充的地图是一个很好的视觉效果。
- 最低要求:1 个地理维度,0 个或更多维度,0 到 2 个度量
饼状图
- 什么时候用:不要用饼状图!开个玩笑,如果你真的需要,你可以使用它们,但是要注意,它们在描述数据时并不总是非常准确。例如,如果在上面的饼图中没有实际的数据点,我们就无法判断西部和中部哪个地区的销售额更高;因为馅饼的大小非常相似。它们最适合显示比例或百分比关系。如果使用得当,饼图可以快速显示度量中其他数据点的相对值。Tableau 建议用户将饼图扇区限制为六个。如果你有六个以上的比例需要沟通,可以考虑条形图。当楔形区的数量过多时,很难有意义地解释饼图。
- 最低要求:1 个或多个维度,1 或 2 个度量
水平条形图
- 何时使用:这可能是最常用的图表,并且有充分的理由。它让数据变得很容易理解,并讲述了一个好故事。我们可以很容易地看到哪些类别比其他类别有更高的数字。在 Tableau 中,您可以使用颜色、标签和排序来讲述一个故事。一个水平条形图是一种简单而有效的交流特定类型数据的方式,这也是它们如此受欢迎的原因。
- 最低要求:0 或更多维,1 或更多度量
堆积条形图
- 何时使用:类似于上面讨论的水平条形图,您可以使用堆积条形图来显示类别中的数据,这些类别也分为子类别。在上面的示例中,我们有按产品类型划分的销售总额,并进一步划分为区域。它能让我们看到比常规条形图更多的细节。
- 最低要求:1 个或多个维度,1 个或多个度量
并排条形图
- 何时使用:类似于条形图,您可以使用此图表显示并排的数据比较。在本例中,我们将查看产品的地区和类型(无咖啡因与普通)。颜色的使用使我们更容易比较每个地区不同产品类型的销售总额。并排条形图类似于堆叠条形图,只是我们取消了条形图的堆叠,将条形图并排放置在水平轴上。
- 最低要求:1 个或多个维度,1 个或多个度量
树形图
- 何时使用:您可以使用树形图来显示分层(树形结构)数据和部分到整体的关系。Treemapping 非常适合在一个可视化界面中同时显示大量项目。该视图非常类似于热图,但是框是按照层次结构中接近的项目分组的。
- 最低要求:1 个或多个维度,1 个或 2 个度量
圆形视图
- 何时使用:圆视图可用于对比分析。您可以通过将形状更改为三角形、圆形、正方形等来自定义您的视图。您还可以更改所选标记的颜色和大小。它显示了所描述的类别中的不同值。
- 最低要求:1 个或多个维度,1 个或多个度量
并排圆形视图
- 何时使用:类似于圆形视图。在这里,我们可以在特定类别中使用圆形(或其他形状)来比较利润和销售额等指标。
- 最低要求:1 个或多个维度、1 个或多个度量(至少需要 3 个字段)
折线图(连续)
- 何时使用:要使用折线图,必须有日期(年、季度、月、日等)。当你试图讲述一段时间内事情是如何变化的时候,这是非常有用的。您可以在视图中使用多行来显示连续的数据流。
- 最低要求:1 个日期、0 个或多个维度、1 个或多个度量
折线图(离散)
- 何时使用:类似于连续折线图,您必须有一个日期字段才能使用此图表。这两者的区别在于你所显示的数据类型,是离散的还是连续的。正如您在两个示例图表图片中所看到的,连续图在所选的时间段内平滑流动。与每个季度(3 个月)后中断的离散图表相反。这允许您对图形进行切片和切块,以便进一步分析。
- 最低要求:1 个日期、0 个或多个维度、1 个或多个度量
双线图
- 何时使用:在一段时间内比较两个度量时使用。此视图产生不同步的轴,但是您可以右键单击轴并选择同步轴(如果它对数据有意义)。双线图(也称为双轴图)是折线图的扩展,但有一个明显的例外:它允许用两个不同的轴范围来表示多个度量。这是通过给垂直轴的右侧和左侧分配不同的度量来实现的。这样,你就可以比较两种不同的度量。
- 最低要求:1 个日期、0 个或更多维、2 个度量
面积图(连续)
- 何时使用:面积图是折线图和堆积条形图的组合。它显示总数的相对比例或百分比关系。如果使用多个维度,图表会将体积堆叠在线条下方,图表会显示字段的总数以及它们彼此之间的相对大小。与折线图类似,您必须有一个数据字段才能创建一个随时间变化的视图。此图表用于连续日期。
- 最低要求:1 个日期、0 个或多个维度、1 个或多个度量
面积图(离散)
- 何时使用:另一个面积图,显示与连续面积图相同的数据,但这个处理离散值。它允许您了解数据切片的情况(按您选择的时间段,例如季度、年等)。日期字段在这里是一个明确的要求。
- 最低要求:1 个日期、0 个或多个维度、1 个或多个度量
双重组合
- 何时使用:允许您创建一个视图,在一个图表中显示两个不同的度量(例如利润和销售额)。如果对数据集有意义,可以同步轴。
- 最低要求:1 个日期、0 个或更多维、2 个度量
散点图
- 何时使用:散点图对于比较两种不同的度量和识别模式非常有用。与圆形视图和并排圆形图一样,散点图也使用符号来可视化数据(您可以将符号自定义为各种形状)。在散点图中,图表中的两个轴都是度量而不是维度(一个度量在列架上,另一个度量在行架上)。您可以在散点图中添加趋势线;这将清楚地定义您的数据之间的相关性。此外,考虑添加一些有用的过滤器,允许用户与数据交互并识别数据中的各种趋势/模式。
- 最低要求:0 或更多维,2–4 个度量
直方图
- 何时使用:直方图是数据分布的直观表示。Tableau 将您的测量划分为离散的间隔或箱。当您想要分析数据是如何分布的时,这非常有用。
- 最低要求:1 个度量(bin 字段)
盒须图
- 何时使用:这是 Tableau 提供的一个更复杂的图表。它还处理数据的分布。如果你观察视觉效果,它看起来是一个两端都有胡须伸出的盒子。方框表示第一个和第三个四分位数之间的值,触须表示最低值到第一个四分位数和第四个四分位数到最高值之间的距离。首先确定数据集的中位数。这是盒子从灰色变成浅灰色的地方。然后,确定上下四分位数。这些只是上半部分数据的中位数和下半部分数据的中位数。这就形成了“盒子”数据集的最大值是上限,而数据集的最小值是下限。这就形成了情节的“脉络”。
- 最低要求:0 或更多维,1 或更多度量
甘特图
- 何时使用:这是项目管理中常用的,用来查看各种任务是否按计划进行。甘特图是一个很好的可视化工具,可以用来描述与时间相关的信息,无论是用于计划还是其他需要。
- 最低要求:1 个日期、1 个或多个维度、0–2 个度量值
子弹图
- 何时使用:使用此图表比较目标数据和实际数据。例如,查看实际销货成本(COGS)与预算 COGS。它显示你在哪里达到了目标,错过了目标,或者超过了目标。与目标销售额相比,这对于分析实际销售额非常有用。你可以在这张图表上玩玩大小和颜色来帮助讲述一个故事。
- 最低要求:0 或更多维,2 个度量
包装好的气泡
- 何时使用:这是一个有趣的视觉创造和观看!它说明了与轴无关的关系值。气泡被尽可能紧密地包装起来,以有效地利用空间。你可以改变泡泡的大小。正如我在地图视图中提到的,我还建议使用这个气泡图视图作为过滤器来深入查看其他数据。
- 最低要求:1 个或多个维度,1 个或 2 个度量
资源链接:
http://www . tableau . com/sites/default/files/media/which _ chart _ V6 _ final _ 0 . pdf
https://www . interworks . com/blog/ccapitula/2014/08/04/tableau-essentials-chart-types-text-table
提高模型性能的终极指南
Picture by RawPixel via Pixabay — CC0
你有没有遇到过这样的情况:你需要一个更好的 ML 模型,但是它不起作用?这是提高性能的终极指南。
1.避免验证
获得更好性能的最简单方法可能是避免所有这些疯狂的验证。引用我一个好朋友的话:
验证只会让结果变得更糟
因此,让我们将我们的模型应用于它被训练的数据,并报告性能。如果真的有人声称这是不正确的,那就开始谈正规化。当然,你的辍学,L1 和 L2 的正规化等等。处理过度拟合!
专家提示:如果你不能这样做,使用 K-最近邻分类器并减少 K!
2.使用分割验证并努力尝试
比方说,有人强迫你验证你的模型。在这种情况下,第一个方法应该是分割验证。如果有人认为 k-fold 可能是一个更好的主意:只要把计算时间俱乐部从你的衣柜里拿出来!谁会为了又一次验证而牺牲 10 倍的 CPU 能力呢?
Split Validation set up in RapidMiner. You can get very good results if you optimize the seed of your split.
为了得到好的结果,你应该首先选择一个合理的测试规模。我建议 95%用于培训,5%用于测试。这增加了你获得更好结果的可能性。
诀窍是优化分裂的随机种子。相信我,足够努力,你会得到更好的结果!
一些人可能会认为随机种子往往会给出更好的结果是不合理的:他们显然不理解简单的统计学。如果你想避免这些讨厌的讨论,就优化那些完全无用的选项。这也有同样的效果。
3.只验证你分析的一部分
如果这个技巧没有足够的帮助,显然是时候进行更复杂的分析了。数据科学家的最佳工具之一是特征生成和特征选择。所以让我们开始创造一些新的功能吧!初学者的错误在于将特征生成和选择视为建模步骤的一部分。谁会这样想呢?即使是一个 excel-jerk 也可以自己生成新功能。因此,您现在应该不顾一切地停止将特性选择和生成放到您的验证中。
Another quick way for better performance. Just select the “right features” before your validation starts! Picture of a process in RapidMiner
当然,你现在应该生成许多新的特性:越多越好!之后,你可以用复杂的特征选择技术来选择“正确的”。
专业提示:将这两件事完全分成两个独立的脚本总是一个好主意。不要让任何人产生这样的想法,即特征选择是模型拟合过程的一部分!
4.手动特征生成
一个好的实践当然不仅仅是使用通用特性,而是使用领域知识来生成正确的特性。一个非常成功的方法是整合领域知识。实现这一点的一个好方法是查看测试集中错误分类的例子。你当然可以建立定制的特征,让你的算法更好地分类这些东西,对不对?
专业提示:如果你碰巧不知道你的数据是关于什么的——谁还需要商业理解呢?—让企业参与进来!有大量的文章围绕如何让这些愚蠢的白痴!只需在他们的 BI 解决方案中公开您的测试集的结果!让他们向你推荐新的规则,说明为什么事情是错的,并把这些纳入其中。这样你可以一石二鸟:更好的模型和接受!
5.保持时调整超参数
可能会发生这样的情况,一些讨厌的评论家强迫你使用一个单独的维持集。去他的!他对正规化的理解肯定比训练错误的家伙还要少。
拒绝可能非常棘手,会妨碍你获得良好的业绩。一个显而易见的解决方案是再次选择右参数。读数:适用于所有数据集的参数。谁会报告不工作的东西呢?
这种方法在学术论文中非常有效,因为您可以访问完整的数据集。不要让自己在这里止步于道德暗示!每个人都在四处移动一些棋子。
**专业提示:**你当然可以将这种方法与第四种方法结合起来,为坚持创造正确的特征。
6.改变问题
这可能是最先进的技术。如果上面的招数都不行,你还可以重新解读问题。这是计算机科学家的老把戏,专注于你能解决的事情。
稍微调整一下天平就能提高你的准确度。对不确定的预测稍加忽略可以提高你的精确度。你想预测客户流失?只在下周做,而不是下个季度。你的 AUC 当然会提高!
这方面的专家不仅改变了这个问题,还改变了如何定义成功的方式。在开始一个项目之前,不要把自己放在一个位置上,定义成功。只需将您的绩效评估与可能的情况保持一致。
专业提示:避免使用可以理解的绩效衡量标准。这会让用户对你评头论足!永远保持你的自信。好的衡量标准当然是 AUC、AUPRC、LogLoss 和 RMSE。
结论
不遵循本指南是成为更好的数据科学家的第一步。
人工智能入门终极指南
如何开始您的项目的逐步概述
许多团队试图通过在计算出期望的输出和目标之前钻研算法和数据来启动一个应用人工智能项目。不幸的是,这就像在纽约市的公寓里养了几年小狗,然后惊讶于它不能为你放羊。
你不能指望在没有你首先做出一些努力的情况下,让巫师在你的业务上洒下机器学习魔法,从而获得任何有用的东西。
相反,第一步是给的主人——也就是你!—形成一个清晰的愿景,你想从你的狗(或 ML/AI 系统)那里得到什么,以及你如何知道你已经成功地训练了它。
我的上一篇文章讨论了 为什么 ,现在是时候深入如何为 ML/AI 做这第一步,及其所有血淋淋的小步骤。
这份参考指南篇幅很长,所以在两分钟的速成课程中,请随意使用大字体和大标题,或者直接阅读概要清单版本。这是目录:
- 搞清楚谁是负责人
- 确定用例
- 做一些现实检查
- 明智地制定绩效指标
- 设定测试标准,克服人为偏见
**角色阵容:**决策者、伦理学家、ML/AI 工程师、分析师、定性专家、经济学家、心理学家、可靠性工程师、AI 研究员、领域专家、UX 专家、统计学家、AI 控制理论家。
Make sure the right person is tasked with the first step in machine learning and AI. More info here and here.
弄清楚谁是负责人
我们将要处理的任务是项目负责人的责任。那是谁说了算。如果博士研究员被选中担任这个角色,应该是因为那个人的决策能力和对你的业务的深刻理解。如果你打算让他们扮演这个角色,然后事后再去猜测他们,那你就选错了人。我们称之为决策者的实体(可能是一个人或一个委员会)应该拥有最终发言权。明智地选出你仁慈的独裁者。
如果决策者是你打算事后批评的人,那你就做错了。
如果决策者不精通决策的艺术和科学,有一个解决办法:让他们与定性专家配对。但如果负责人不了解你的业务,你还不如现在就把这些现金冲走。
识别用例
关注输出
关键是 ML/AI 不是魔法,也不能解决所有问题。这是一个的东西标签,它取决于你找出你需要什么标签。
事物标签不仅仅意味着分类——“这是不是一只猫的照片?”—这是不够大的想法。我说的标签是指输出。可能是一个类别、一个数字、一个句子、一个波形、一个组 ID 、一个单一动作、一个操纵杆移动、一系列动作、关于某个事物是否异常的 Y/N…如此多的可能性!
在你确定你需要他们之前,不要雇佣那个博士导师。首先关注输出。
如果你读了我最近写的关于算法如何工作的文章,你会注意到,这篇文章理所当然地认为,给几杯茶贴上卡西喜欢或不喜欢的标签是值得的。谁同意用那个愚蠢的用例浪费大家的时间?!它对业务有何帮助?这个分类器应该存在吗?假设它能工作,它值得建造吗?
这就是你现在正在做的工作,我的朋友。这是第一份工作。
仅仅因为你能做某事,并不意味着它是对任何人的时间的很好的利用。
想象一下你的 ML/AI 系统正在运行,问问你自己,你是否乐意投入公司的资源来制造它。没有吗?继续头脑风暴。最好在几个博士在你的应用上浪费生命之前发现没人需要你的应用。
这项任务可能会很难,因为有太多的选择,所以坐在舒适的沙发上冥想吧。如果你需要一些头脑风暴的帮助,试试我的醉酒岛练习。
A video with my trick for brainstorming AI use cases.
现在不是输入的时候
你们中的一些决策者对数据非常熟悉。你可以同时谈论输入和输出……你会明白其中的区别。我的建议可能会让你大吃一惊:抵制诱惑!先别说投入。说真的。我知道你可以,但是不要。这里有许多原因中的两个。
原因一:错过机会
这是显而易见的。你的一些利益相关者没有你流利,他们很容易混淆。在早期,你可能向他们推销你的想法,希望为你的项目获得资源,你真的不想让他们误解为什么你的系统值得拥有。不要混淆他们!保持专注。告诉他们它是做什么的,而不是怎么做的。
问问自己,“这是目的还是手段?”如果是手段的话,暂时不谈。
许多流利的人的问题是,你认为每个人都和你一样流利。一些科技领域的绝顶聪明的人不具备这种技能让我感到惊讶,所以我现在知道不要想当然。
对某些人来说,数据就是数据。都一样。(亲爱的读者,如果你不确定自己在这方面是否流利,真的要强迫自己放慢速度。不断问自己“这是目的还是手段?”确保你现在把注意力集中在末端。)利益相关者可能无法跟上你的论点,这意味着你的推销会失败,你会错过用人工智能让世界变得更美好的机会。
Some folks have trouble figuring out which variable is the input and which one is the output… it all looks like one big confusing lump to them and they need your focus to appreciate why the outputs are worth having.
原因二:默契
作为一名在工程师身边工作了很长时间的工程师,我注意到我们这类人喜欢抓住细节。去他妈的大局观吧,从每一个细节中剔除填料是如此有趣,尤其是当有人在某件事上犯了错误的时候!我们喜欢技术上的正确性。
I, for one, have to be on my guard against getting caught up in the technical correctness of minutiae. Joke: Technically correct is the best kind of correct. Tautologically correct is a kind of correct.
这是一出悲喜剧:当你花了 6 个小时和你的朋友争论变量 x (原始的,标准化的,还是规范化的?)是一个很好的输入,具有预测输出 y 的合适日志,你已经,咳咳,规范化了 y 值得追求的想法。你首先停止质疑工作的意义,并最终构建了不需要构建的东西。
这是关于拥挤的人群
让我们想象一下,自动给茶贴 Y/N 标签是你想要的用例。确保你不是在考虑只给一两个杯子贴标签。 ML/AI 对于自动化许多重复的决策是有意义的。这不是一次性的。
ML/AI 不是一次性的,所以确保你的企业需要大量的标签。
你在想象给至少几千个贴上标签?当这东西是活的,你确定你不能只是查找答案而不是预测它们?很好。我们继续。
拿起笔,写下你会接受的标签(本练习中的二进制 Y/N 很容易写下来,但如果你需要创意,你可以选择让它们更有异国情调)。写下你如何知道其中一个答案是否正确。写下错误的样子。期待机器学习中的错误!如果你期待完美无缺,最好在失望击垮你的灵魂之前安静地后退。
你可能还没有准备好机器学习
还在苦苦寻找用例?考虑暂停 ML/AI ,支持分析一段时间。分析的目标是为决策者产生灵感。一旦你有了灵感,你可以回到 ML/AI 重新开始。分析(又名数据挖掘)对每个项目来说都是一个好主意,而 ML/AI 只适用于那些目标是使用数据来自动标记事物的项目。尽管基本的数学原理通常是相同的,但是过程是非常不同的。数据挖掘是关于最大化发现速度,而 ML/AI 是关于自动化的性能。在数据挖掘中,你的团队只会犯一个错误,而 ML/AI 有一个令人印象深刻的潜在错误列表。只有当你有一个值得麻烦的用例时,才注册那些令人头疼的问题。
是给谁的?想想你的用户!
你耀眼的发明是给谁看的?谁受益?这是一个咨询 UX(用户体验)专家和规划应用程序目标用户的好时机。
构思新技术通常从“是什么”开始,但在着手“如何”之前,先了解“是谁”是很重要的。
通过与 UX 设计师相处,我学到了一些东西,那就是我下意识地描述我的用户是谁……通常是相当天真的。我是否考虑过对间接受益者的可用性,对整个社会的可用性,对其他企业的可用性,对使用输出作为输入的机器系统的可用性,对从事调试的工程师的可用性等等?为了避免粗制滥造的 UX 设计,在你继续之前,请花点时间考虑一下你所有的用户类别。用户不仅仅指最明显意义上的客户或最终用户。
继续下去合乎道德吗?
如果你的想法并不是对每个人都有好处呢?在规划您的理想用例时,考虑那些可能因为您的系统的存在而受到伤害的人。我不仅仅是指你所在行业的竞争对手。你的应用会伤害到任何人吗?如果你的技术发展到数百万或数十亿,这一点尤其重要。
想想你的创造所影响的人类!谁受益,谁可能受损?
如果你关心以道德和负责任的方式开发技术,你有责任考虑你的创造可能影响的所有人。在建成后再去想它们是不负责任的。现在是的时间*!伦理学家可以帮你分担一些负担。如果你的项目有可能对人类福祉产生重大影响,让他们成为你的顾问是个好主意。与你的 UX 专家一起,他们对这个项目的参与将帮助你确保受你的创作影响的群体有发言权。*
做一些现实检查
一旦你能清楚地说出你想要的标签,是时候做一个快速的现实检查了:你有关于这个商业问题的数据吗?
无法访问数据意味着没有任何意义。不过,你或许可以在网上找到你需要的东西——免费获取数据的趋势正在上升(例如这里的)。
尽管如此,它仍然是相关的。你知道你不能用我的 Marmite 消费模式(定义:大数据)来预测你的血糖水平。明明没用的数据不算。你还不需要分析数据(这将在项目的后期进行),但是你应该检查到时候你是否真的有东西可以分析。没有数据意味着没有 ML/AI 。
无法访问相关数据或没有计算机来处理这些数据?没有什么好的方式来说这个…
This is your dream of ML/AI if you have no data.
你还需要证明你有处理数据的计算能力。(听说过我的雇主吗?他们有很多,而且他们喜欢分享 T21。只是说说而已。)
现实清单
请确保您对所有这些问题的回答都是肯定的。这些中的每一个都可能在以后得到自己的指南,敬请关注。这只是一个快速概述的问题,以确定一个不成功的人。
- 合适的任务: 你是否自动化了很多决策/标签?你不能每次都完美地找到答案。
- 合理期望: 你是否明白你的系统可能很优秀,但它不会完美无瑕?你能忍受偶尔的错误吗?
- 生产中可能: 不管那些决策/标签来自哪里,你能在生产中为它们服务吗?你能聚集工程资源以你预期的规模来做吗?当你和工程师们坐下来的时候,你会更详细地研究这个问题,但是现在,一丝理智检查就足够了。
- 要学习的数据: 是否存在潜在有用的输入?你能接近他们吗?(如果数据还不存在也没关系,但是你有一个很快就会得到它们的计划。)
- 足够多的例子: 当你和你的统计学家或机器学习工程师哥们一起喝饮料时,你不经意地提到了可用的例子数量以及你想要的输出类型,他们的表情是不是没有一丝不悦?(我会在以后的文章里教你如何自己培养这种直觉。)
- 计算机: 您有足够的处理能力来处理您的数据集吗?(云技术使得这对于任何愿意考虑使用它们的人来说都是一个自动的肯定。)
- 团队: 你有信心组建一个拥有必备技能的团队吗?
- 地面真相: 除非你是在无监督学习之后,你有权限输出吗?如果没有,你能付钱让人类通过执行任务为你制造它们吗?
- 日志健全性: 可以区分哪个输入与哪个输出,对吗?
- (学习榜样,需要好的榜样来学习。)
集合你的队伍
一旦你清除了现实清单,是时候开始招聘了,你可以在阅读本指南其余部分的同时进行招聘。我对你正在寻找的角色的建议是这里。
明智地制定绩效指标
拥有权衡
如果你是新手,接下来的部分可能会有点棘手。你负责决定每种结果的价值。得到 Y 的那杯恶心的茶是我们错过的那杯美味的两倍吗?3.4823 倍?由你决定!
挣扎?找一个喜欢数字的人,让他们帮你集思广益。定性专家接受过这方面的专门训练,但必要时你的标准计算器也能胜任。如果你想要最好的帮手,大声说出它的正式行话(引出无差异曲线)来召唤一个经济学家。
经济学家是人工智能项目令人惊讶的有用顾问。
既然你已经知道了如何在一个单个输出上权衡各种结果,是时候考虑一下你想如何一次获得几千个结果了。用平均是平均的选择,但你不必平均。再说一遍,决策者是这里的老板。正确的评分方法取决于什么适合您的企业。
(可选)专家模式侧重于模拟
棘手、复杂的项目从模拟中受益匪浅。这就是专门生成虚假但可信数据的分析师可以帮助你看到你在这篇文章中所做选择的潜在后果的地方。
彩排有助于开幕夜的顺利进行。
模拟给你一次彩排,帮助你在真正开始你的项目之前解决一些问题。像分析一样,它减轻了决策者努力沉思和考虑一切的任务负担。
制作您的度量标准
有许多不同的方法来制定指标。在我们的茶的例子中,你可以选择非常简单的一个:准确性又名*“不要出错。”每一个错误都同样糟糕(0),每一个正确的回答都同样好(1),然后你取一个平均值(这是你一直渴望得到的——有人需要对人们发现平均值的吸引力设定一个中心限制)。*
等等,也许当谈到好茶时,你有 FOMO,而且你很高兴一路上都有次品?这是一个不同的指标,叫做召回。或者也许你不想浪费时间,你需要确定当系统说美味时,它真的值得喝,但是你可以接受错过美味的茶。这是一个完全不同的指标,叫做精度。我们将在另一篇文章中放慢速度,深入探讨度量标准。现在,不要管它们叫什么,只要想出一个适合你业务的就行了。
需要帮助吗?你的经济学家已经迷路了吗?没问题!也许你有一个喜欢设计游戏的朋友?游戏极客们在不知不觉中已经为这个训练了一生!如果你不和那群人混在一起,你可以打电话给你的定性专家,因为他们的工作是帮助决策者澄清他们对这类事情的想法。
请求专家评审
在人类福祉受到严重威胁的应用中,寻求专家小组的咨询,以验证不可能以某种反常和有害的方式在您的指标上获得高分。
哪些专家?你听说过这样一个故事吗,一个决策者、一个伦理学家、一个人工智能控制理论家、一个统计学家、一个用户体验研究员、一个行为经济学家、一个领域专家和一个可靠性工程师走进一个酒吧……
当然,这对于良性的商业应用程序来说可能有些过头了,所以你的定性专家对这些学科的入门水平的熟悉已经涵盖了你,你的游戏设计师朋友的直觉也在利用类似的脉络。
你好,业务绩效指标!
当你完成后,你会听到天使的合唱。您已经创建了您的业务绩效指标!
这和一个损失函数不是一回事(后面会讲到那些)。当谈到指标时,可能性是无限的,这取决于决策者来找出什么是真正重要的。如果您对解决这个问题感到焦虑,我正在酝酿更多的文章来帮助您掌握度量开发。
(行话触发警告)你的人工智能专家应该知道的事情
这里有一个微妙的东西,你可以跳过,直到我们在后面的帖子中深入探讨,但如果你知道什么是损失函数,那么你就会意识到我们将有两个指标在发挥作用。如果这对你来说毫无意义,我们现在不必担心,你在这里的工作只是确保你的 ML/AI 专家阅读下一段。他们中的许多人在学校错过了这一课。 警告: 很多决策者会发现,它读起来就像一个行话——胡言乱语的噩梦——我很抱歉!—那就转发吧。
损失函数是为了优化,而不是为了测试。
“在应用 ML/AI 中,损失函数用于优化,而非统计测试。统计测试应该问,“它的性能是否足以构建/发布?在哪里执行应该由业务问题及其所有者定义。你不应该改变业务问题陈述来满足你的凸优化野心。为了方便起见,您可以使用标准损失函数进行优化,该函数与您的领导者的想象刚刚产生的函数方向相同(通过分析或模拟执行相关性检查),但请使用测试他们的函数。**您是否在所有评估中都使用了损失?别担心,这是一个常见的错误,可能与软件默认设置、大学课程格式以及人工智能中的决策者缺勤有关。”
**如果没有标准损失函数与性能指标适当相关,请提醒您的决策者,他们的要求非常困难,可能需要投资优化研究人员。
**持异议的 AI 专家,看这个。尽管这与职能无关,但与决策者合作的一般理念是适用的。
设置测试标准
定义您感兴趣的人群
谈论你的系统“工作”是没有意义的,除非你指定你打算让它在哪个实例上工作。所有美国夏季投入?全球所有输入?(这些不一样!)
在您继续之前,您需要定义您感兴趣的统计群体,您的系统在您给它开绿灯之前需要展示良好性能的实例的广泛集合。我为你准备了一份由两部分组成的指南,以防你需要复习一下。
承诺粉碎它!
现在,您已经准备好了性能指标和人口,在您可以开始工作之前,您还有一项工作要做。因为到达这里需要几个月的时间,你可怜的脚一定很疼。
这是最后一项任务:决定你愿意签字同意的最低表现,因为我要让你承诺,除非它足够好,否则你不会让这个系统替你标记东西。
Setting a bar for testing the system is a responsibility the decision-maker should take very seriously. (Image: Maria Fernanda Murillo winning a high jump competition, credit: Diego Sinisterra)
“足够好”是什么意思?你应该设定多高的标准?由你决定,但是你现在必须做出承诺。
预先设定标准是你如何让自己(和我)免受可怕的机器学习和人工智能伤害的一部分。
这个标准不是一个指导星。你也可以告诉你的团队要达到的绩效水平。),但这不是你将要测试的。测试最低限度。
你对物种有偏见
你为什么在组建这个项目的团队之前,现在就提出这个截止日期?事实证明,作为人类物种的一员,我们受到一些可爱的认知偏见的困扰(不要说沉没成本或禀赋效应或确认偏见除非你希望那个经济学家再次凭空出现,这次是带着一个心理学家),这些偏见可以归结为:当人类在某件事情上投入时间和精力时,我们会爱上我们所做的事情……即使它是一堆有毒的垃圾。然后我们发现自己在讨价还价:“Awww 但是性能也没那么差。我为 12%的准确率感到自豪。或许我们可以发射它?为什么我不针对 10%进行测试?看到了吗?它过去了。真是够好了”
如果你想再跟我在这个悲伤的话题上纠缠 6 分钟,我有什么资格阻止你?
我们人类爱上了自己倾注心血的东西……哪怕是一堆有毒的垃圾。
趁我们还清醒(!)在我们投入大量精力之前,我们会冷静、认真地审视一下业务问题,然后说:“如果它不满足* 这个最低 要求,我保证*它会死掉。”**
比人类好?
我希望你现在能明白,为什么当人们问我“人工智能在某些方面比人类强吗?”时,我不得不忍俊不禁
比人类好?同义反复是同义反复。
如果它的制造者要求它比人类更好,并且做了适当的测试,那么如果它不比人类更好,他们就碾碎它。如果存在,那么是的。除非他们不要求它比人类更好,在这种情况下,它可能不是。为什么有人问我*?询问那些决策者他们是如何建立标准和测试的。(说到种群,它应该比哪个人类强?那个志愿者吗?)*
此外,我们不要太在意机器在某些方面是否比我们更好。我的电脑总是比我更擅长…做乘法。这一点也不困扰我。我的水桶比我更会盛水。如果一个工具不能减少你的努力或者增加你所能达到的成就,那它还有什么意义呢?
而是关注它是否好到有用。
不要要求太高
总是要求比人类更好的表现可能会让你失去利润。这有点像说你只会雇一个奥运金牌选手给你砌砖。也许一名奥运选手比你的普通人乔更强壮,但是如此严格的招聘标准可能会让你没有工人。把你的标准降低到对商业有益的程度,但不要更低。经济学家可能会说,将测试标准设定在最低水平是与激励相容的,T21。(如果你刚从商学院毕业,想对机制设计感兴趣,我们实际上正在为我们的假设检验程序建立一个 BDM 拍卖。)
不要因为测试门槛过高而错过有利可图的解决方案。
有时自动化生产的产品单位质量比手工生产的低,但是机器的规模和速度使它在商业上是值得的。为了你的事业值得吗?嘿,你说了算,不是我。祝你好运!
有关该长文本的简短总结,请参见清单版本。
这就是 ML/AI 完成的第一步!第二步涉及数据和硬件(以及工程师!)所以你可能想温习一些词汇以期待即将到来的景点。
如果你觉得本指南中的任何想法都有价值,请告诉你网络中最有可能发现自己处于决策角色的人。让我们为一个光明的人工智能未来建立一批有技能和负责任的人工智能领导者!
感谢阅读!YouTube 课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
致命争吵的(不变的)统计数字
致命争吵的统计数据由刘易斯·弗莱·理查森撰写,于 1960 年出版。这本书因其发现和作为应用于国际关系领域的定量方法的第一个例子而闻名。作为一名职业气象学家,理查森将他革命性的、现在广泛使用的天气预报方法用于州际冲突的爆发,希望通过分析 1809 年至 1950 年间的数据来找到预测变量。虽然理查森在这方面失败了,但他有一个相对令人震惊的发现:战争的爆发反映了流星撞击和地震等罕见事件的发生率,或被称为“不可抗力”的事件类别。
这些事件和其他事件的发生,如基因突变和客户到达,可以用泊松分布进行统计建模。泊松分布的基本要求是事件的发生相互独立,并且发生率在所研究的时间段内是固定的。战争的爆发将遵循符合这些假设的分布,这提出了有待解决的有趣的数学和哲学问题,同时也肯定和否定了这一领域内预测尝试的价值。
An illustration of Richardson’s vision of human computers performing calculations within a forecast factory. NOAA / L. Bengtsson.
我第一次知道 Richardson 的工作是在飞机上阅读六月版的哈珀杂志时。这篇文章的作者加里·格林伯格(Gary Greenberg)继续描述理查森是一个幻想家,他想象着装满“计算机”(在这里是人)的大房间,这些计算机将对输入的数据进行实时计算。作为理查森远见卓识的恰当证明,我碰巧在去华盛顿的途中*,在那里我将作为一名定量地缘政治分析师实习一个夏天。大数据时代已经到来,2000 亿美元的产业现在反映了一种信念的普及,即任何问题都可以通过足够的观察和计算能力来回答。*
出于好奇,我决定从理查森停止的地方开始,对至今的州际冲突进行同样的分析。具体来说,我想比较每年发生的 n 次的频率与泊松分布中的预期频率。谢天谢地,今天的任务比 50 年前容易多了。对我来说,不再有单调的翻阅百科全书或冗长的手工计算。在相对简单的谷歌搜索之后,我能够从 UCDP/PRIO 武装冲突数据集获得我需要的数据,这为我提供了从 1946 年到 2009 年的良好编码的观察。(为了避免重叠和由此产生的偏见,我只研究了 1952 年以后的年份。)和 60 行代码之后,结果如下:
总的来说,有 30 年没有爆发新的冲突,21 年爆发了一场冲突,5 年爆发了两场冲突,两年爆发了三场冲突。通过比较预期列和观察列的值可以看出,实际冲突爆发的分布反映了泊松分布。使用 Yate 的校正卡方拟合优度测试在 95%的置信水平下验证了这一点。从结果来看,理查森的发现似乎在我们进入新的千年时仍然具有相关性。
在 GitHub 上查看我的代码。
来源:
- 《空洞的统计》作者约翰·沃斯
- 计算科学:致命争吵的统计数据
- 基本商业统计:概念和应用(第 10 版)作者:大卫·勒文和马克·贝伦森
- 亚特修正卡方检验
- 《数字安全》作者加里·格林伯格
一个神经元不合理的有效性
从https://rakeshchada.github.io/Sentiment-Neuron.html交叉发布
(我所有的实验和可视化都可以在 这个 jupyter 笔记本中查看)。
我最近看到一篇研究论文( 拉德福德等人, )让我很着迷。作者发现一个单个神经元捕捉了整篇文章的情感。他们甚至更进一步,表明即使在没有监督的情况下,它在情感分类任务上表现得非常好。什么不是!他们甚至通过固定神经元的值来生成连贯的文本。
尽管这不是第一次有人发现这种可解释的神经元。 Karpathy et al. 举例来说,发现了在引号内激活的神经元, if 语句中的代码块等。这在这篇伟大的博文中有详细解释。事实上,那篇文章启发了我这篇文章的名字:)然而,感情是一种高级的表达。它更多的是对文本语义的深入理解,而不仅仅是它的句法结构。单个神经元捕捉到整个情绪的事实令人难以置信。这意味着单个浮点数是对一个段落的情感进行分类所需要的全部。多迷人啊。!
我个人想更详细地探索这一点。谢天谢地,作者已经开源了他们训练了大约一个月的模型。)以及他们的一些代码库。我添加了情绪神经元热图可视化,并做了一些其他的修改。我选择了张等人在、中介绍的 Yelp 评论二进制数据集进行分析。总共有大约 60 万条评论。
语言模型
这一切都是从字符级语言建模任务开始的。目标是在一段文本中一次预测一个字符。与单词级建模相比,字符级建模的一个优势是它固有的捕获词汇表外单词的能力。作者训练了具有 4096 个单元的乘法 LSTM 模型。每个字符被编码成一个 64 维向量,LSTM 一次处理 64 个字符。他们使用的亚马逊评论数据集有大约 8200 万条产品评论。
情感神经元发现
引起我兴趣的第一个问题是——作者最初是如何发现这种情绪神经元的?我的意思是,在输出层大约有 4096 个神经元。他们是否想象每个人都在试图寻找某种模式?也许不是。但如果你仔细阅读这篇论文,你会发现他们使用 L1 正则化在这 4096 个神经元的基础上训练了线性模型。假设有一个具有 4096 个特征的模型,那么发现这个特定的特征将归结为特征贡献(权重)的问题。如果单个神经元解决了几乎整个分类任务,那么它的贡献应该是非常高和显著的。
让我们看看情绪神经元是否也是如此。这是我通过在 Yelp 数据集上进行情感分类训练得出的特征贡献图。
Feature importances with L1 regularization
哇!事实上,有一个特征具有很大的权重。一定是情绪神经元。事实上,我们甚至可以在 4096 个神经元的列表中得到它的索引。如果你看一下笔记本,你会看到它的索引是 2388。还有少数其他神经元的贡献相对较高。我们最终会看到它们。
无监督学习
既然我们已经发现情绪神经元对最终情绪有很大影响,那么看看训练数据大小对其学习能力的影响将会很有趣。作者做了这个实验。他们从零训练数据开始,逐渐增加,直到性能达到极限。这导致了一个有趣的发现。即使有了零标记数据,情绪神经元也能够非常准确地预测情绪!*无监督学习效果极佳!*在不使用任何人工标注数据的情况下,在语言建模任务上训练该模型。然后,在没有任何监督训练的情况下,该模型中的一个特征被用于对另一项任务(情感分类)进行预测。这也类似于典型的迁移学习设置,这是计算机视觉任务中的常见技术。
此外,性能很快就会达到上限(10–100 个示例,具体取决于任务)。这意味着 拥有 100 万个手动标记的示例与拥有 100 个示例 对模型性能的影响是一样的。如果以前发现了这种模式,可以节省大量的标记工作和成本!
对于我们的 Yelp 分类任务,我通过使用情感神经元值的阈值来尝试对数据集进行无监督分类。当输出通过一个双曲正切门时,如果输出是正的,我预测正类,如果输出是负的,我预测负类。在没有任何训练的情况下,这给了我一个 ~93.67% 的任务准确率。这是相当惊人的!
情感神经元的可视化
获得对正在发生的事情的直觉的一个好方法是将事情视觉化。可视化对于 LSTMs 来说可能是一个挑战,但幸运的是,在这种情况下,我们只需要跟踪一个神经元。卡帕西在可视化 RNNs 方面做了一些奇妙的工作。遵循类似的想法,我构建了一些方便的 python 函数来帮助可视化情绪神经元。由于这是一个字符级模型,我们可以在情绪神经元处理每个字符时跟踪它的值。然后,这些值可以表示为情绪热图。下面可以看到一个这样的热图:
Sentiment Heat map for a review
你可以观察到情绪神经元准确地跟踪状态,没有受到一次性负面词汇的影响,如昂贵或失望。
下面是另一个负面评论:
看到像“不好”、“慢”、“**大声”**等短语时,神经元如何在负方向上改变其状态,这真的很好。此外,尽管短语“**有一些好馅饼的城镇”**听起来很积极,但整体情绪没有受到影响。( 注意 机制有人吗?)
太好了!它在较大的文本上表现如何?
太棒了!尽管文本篇幅很长,但它还是相当准确地捕捉到了情感的所有变化。冗长的文本是递归神经网络通常努力解决的问题!
好了,我们现在对情感神经元如何成功处理文本有了一些直觉。理解失败案例中发生的事情也同样有趣。
这里有一个例子:
嗯有意思!这里发生了几件事。首先,在评论的开始有讽刺。神经元无法捕捉到这一点,并将其视为积极情绪。然后神经元成功捕捉到了清晰的负面评论。最后,评论继续称赞的另一家餐厅。从技术上来说,这部分的情绪是积极的,但它只是与另一家餐厅相关联。总的来说,我有点理解这对于情绪神经元来说是一个多么艰难的案例。
虽然在一些情况下,神经元发生了什么还不清楚。让我们看看下面的例子。
这种情绪不知何故总是停留在积极的区域,尽管明显存在消极的短语!
句子更新结束
如果你看所有的图,你会发现一个共同的模式。情感神经元的值在句子的结尾得到重大更新(通常在看到一个“”之后)。”)。这意味着神经元会将整个段落分成一系列句子,并在处理每个句子后更新情感值。对于一个角色级别的模型来说,这是一个非常有趣的结果!
情绪变化
看看情感值在文本范围内如何变化可能会有所帮助。下图就是分析这一点的一种方式。
Sentiment value shifts for a review
我在寻找一些与句子中相对位置相关的移位模式。但是在这些情节中没有明显的模式。
评论长度的影响
我们之前已经看到神经元能够很好地处理大型评论。现在让我们试着想象情绪神经元成功和失败的情况下长度的分布。如果长度影响了性能,这个图应该清楚地表明。
Review Length Distribution for Success, Failure and All reviews
所有的分布(成功和失败)看起来都和真实的分布一样。这意味着回顾长度与神经元的表现没有相关性。那是相当大的新闻!
其他重要的神经元
当我们可视化特征贡献时,我们注意到一些具有更高贡献的其他神经元。我试着在评论中追踪他们的状态,就像我对情感神经元所做的那样。下面是一个这样的可视化。
Visualization of other important neurons
不过,我看不出任何明显的模式。你可以参考笔记本了解更多这样的可视化。随意玩,如果你发现任何有趣的模式,请发帖。
监督培训
我们已经看到了情绪神经元在零监督下的表现。我还尝试在整个 yelp 数据集上训练模型。最佳线性模型(具有 l2 正则化和 0.001 学习率的逻辑回归)给出了 me ~ 94.86% 的准确度。这仅比仅使用情感神经元的无监督训练提高了约 1%。这与作者的主张是一致的,即额外的监督只在一定程度上有帮助,并且性能很快就达到极限。
文本生成
我们一直在谈论的神经网络被训练来预测下一个字符。所以如果我们不从中生成一些样本,那就不公平了:)!
当被要求以“嗯”开始时,下面是它生成的内容。
Hmm what a waste of film not to mention a Marilyn movie for nothing.
嗯,那还不错!
有趣的部分是通过固定情感神经元的值来生成样本。下面是一些生成的样本。
- 情绪 = 1.0 和起始短语 =“这是”= >
This is a great album with a quality history of the group.
- 感悟 = -1.0 和起始短语 = “可能” = >
It might have been good but I found myself skipping pages to get to the end.
我试着用“我不能”这样的短语作为开头语来欺骗它,但是把情绪固定为积极的。但它仍然做得很好,如下图所示。
- 情绪= 1.0 = >
I can't wait to try the other flavors - and I have a ton of them on hand just in case one should have gone out for a trip or need a "big new place" and they are delicious.
- 人气= -1.0 = >
I can't believe I bought this book.
令人高兴的是,生成的短语是连贯的,像人类一样,也符合预期的情绪。
也就是说,有时生成的文本并不完全符合情感。
- 情绪= -1.0 和起始短语 =【伟大】=>=
Great DVD with the original production leaving good video and audio quality.
关于生成的有趣之处在于,它也可以被视为获得单个神经元直觉的一种方式。为此,我尝试通过固定其他重要神经元的值来生成文本。例如,将神经元 801 的值固定为-1.0 会生成此文本。
This is the greatest movie ever! Ever since my parents had watched it back in the 80s, I always watched it.
它(神经元 801)似乎与情绪有某种关联。
修复不同的值(甚至多个值一起)并查看生成的文本是一个有趣的练习。这样生成的样本可以看笔记本。
接下来呢?
我们看到了一些有趣的事情。这些结果应该是一个巨大的激励因素,投入更多的研究语言建模和前训练/迁移学习的自然语言处理。单词向量( word2vec 、 GloVe 等)通常是目前深度学习 NLP 任务中使用的唯一一种预训练输出。我还对扩大/缩小数据集范围并进行类似分析的结果感到兴奋。例如,对于情感神经元的这种离散存在的假设之一(由作者提出)是,情感是评论的语言建模的强预测特征。那么,我们能否通过手动控制训练数据集的分布来发现这种离散的&可解释神经元呢?作为一个例子,我们是否可以通过将我们的训练数据作为不同主题的新闻语料库来发现主题神经元?总的来说,这里的想法是使训练数据非常领域/任务特定,看看我们是否可以通过语言建模恢复任何可解释的神经元。这可以在多个域/任务上完成。
另一种方法是扩大域。这意味着你要在你的训练集中包含尽可能多的数据(来自几个领域),做类似的分析,看看你是否能发现任何可以解释的东西。有许多公开可用的数据集来做这样的分析。
对于这项任务,将单词级语言建模与字符级语言建模进行比较也是很有趣的。
有无限的可能性,我对任何与此相关的未来工作感到兴奋!
PS:我一直在努力增加我的神经网络知识,我认为实现东西是一种很好的学习方式。我正在做的是一系列不同的任务。如果你也有兴趣,可以跟着 这个 资源库!
无味卡尔曼滤波器:EKF 能做的任何事,我都能做得更好!
我刚刚完成了 Udacity 自动驾驶汽车纳米学位的第二学期。我写过关于卡尔曼滤波器和扩展卡尔曼滤波器。今天我们将看看卡尔曼滤波器家族的另一个成员:无味卡尔曼滤波器。所以,如果你看了我的前两篇文章,你现在应该已经认识我的同事拉里了。
总结:
卡尔曼滤波器 : 它是一种在假设我们的数据是高斯分布的形式,并且我们将线性方程应用于那个高斯分布的情况下,使用一堆数学方程来预测值的工具。
扩展卡尔曼滤波器 : 在现实世界中,我们有非线性方程,因为我们可能在一个方向进行预测,而我们的传感器在另一个方向进行读取,所以它涉及非线性的角度和正弦余弦函数。因此,EKF 利用泰勒级数(以及进一步的雅可比矩阵)来线性逼近高斯平均值附近的非线性函数,然后预测数值。
无味卡尔曼滤波器
拉里:我知道卡尔曼滤波器和扩展卡尔曼滤波器,现在怎么办?我知道卡尔曼滤波在现实生活中失败的原因和扩展卡尔曼滤波的需要。为什么要用无味卡尔曼滤波器呢?
我:性能。
拉里:性能?怎么会这样我:在 EKF 我们用了多少个点来从非线性函数逼近一个新的线性函数?
拉里:1 点,这是高斯分布的平均值。
我:正确,那么有没有更好的线性化方法?
拉里:你是什么意思?
我来看看下面在 EKF 发生的事情:
Figure 1. Scenario of Gaussian Approximation in EKF around the mean
我们只有一个点来近似高斯函数。那么,有没有更好的线性化方法呢?
拉里:如果我早知道,我就不会和你说话了。告诉我!
我:你觉得会给我们一个更好的近似?假设我们有两个场景来从源高斯到达近似高斯-:
场景 1:我们有一个点(比如说均值)并且我们在一个点附近近似。
场景 2:我们有一堆点,包括平均值,我们围绕这些多个点进行近似。
拉里:我的直觉告诉我,如果我们像场景 2 那样有多个点,我们会有一个更好的近似值!
我:恭喜!你现在知道了无迹卡尔曼滤波器。
拉里:既然如此,为什么不考虑高斯源中的所有点,然后进行变换和近似呢?
我:那会耗费大量的计算能力和资源,所以可能是最琐碎的解决方案但不是最优的。
适马点
拉里:哦!!那么我们如何选择正确的点数呢?
我:所以在无迹卡尔曼滤波中我们有一个适马点的概念。我们在源高斯上取一些点,将这些点通过一些非线性函数后映射到目标高斯上,然后计算变换后高斯的新均值和方差。
通过非线性函数来转换整个状态分布可能非常困难,但是转换状态分布的一些单独的点是非常容易的,这些单独的点是 sigma 点。这些西格玛点是整个分布的代表。
EKF 和 UKF 的基本区别
这里与 EKF 的主要区别在于,在 EKF 我们只取一个点,即平均值和近似值,但在 UKF 我们取一堆称为 sigma 点的点,近似值的事实是,点的数量越多,我们的近似值就越精确!
Figure 2. Scenario of Gaussian Approximation around the Mean and other sigma points
拉里:太好了!明白了!这很简单。
我:嗯,不是这样的,除了 sigma 点,这些点也是有权重的,所以这些就是加权 sigma 点。
无味变换
拉里:那么,在这种情况下,我们或多或少会偏向某些点,以使我们的近似更好?我:是的,没错。
当一个高斯函数通过一个非线性函数时,它就不再是一个高斯函数,而是我们从结果图中逼近高斯函数,所以在 UKF,一个叫做无味变换的过程帮助我们完成这个任务。下面总结一下 unscented 变换执行的步骤。计算适马点集
2。给每个西格玛点分配权重
3。通过非线性函数
4 变换点。从加权和变换的点计算高斯分布
5。计算新高斯的均值和方差。
计算适马点
*拉里:但是我们如何选择适马点呢?我:西格玛点的数量取决于系统的维数。通式为 **2N + 1,*其中 N 表示尺寸。
Figure 3. Choosing Sigma Points Equations
χ(Caligraphic X) ->适马点矩阵
μ - >高斯均值
n- >系统维数
λ- >比例因子
σ->协方差矩阵
χ(校准 X)
χ表示适马点矩阵。这里需要注意的一点是,χ的每一列都表示一组 sigma 点。因此,如果我们在二维空间中工作,那么χ矩阵的大小将是 2×5。因为每个维度有 5 个 sigma 点。
λ
λ是比例因子,它告诉我们应该选择离均值多远的 sigma 点。一项良好的数学研究表明λ的最佳值为 3-n。
显然,其中一个西格玛点是平均值,其余的我们根据上面的等式计算。
拉里:等一下,矩阵的平方根?我从来没听说过!
我:嗯。如果我们有一个满足下列条件的矩阵 S,则定义矩阵的平方:
σ= S . S 或σ= S . S _ transpose
如果我们能够找到 S,那么我们可以说 S =√√
计算适马点的权重
拉里:哦!这是一个需要了解的新事物,那么分配给这些计算出的 sigma 点的权重呢?
我:哦,权数太有方程式了:
Figure 4. Calculating Weights of the Sigma Points
计算平均值的权重有一个不同于其余 sigma 点的等式。λ是扩展参数,n 是维数。这里需要注意的一点是,所有权重的总和等于 1。
计算近似高斯的均值和协方差
拉里:哦,天哪!这么多方程式!现在我们有了 sigma 点,权重,那么我们如何在高斯通过非线性函数 g 之后恢复它呢?
我:又一堆方程式:D
Figure 5. Calculating New Mean and Covariance
μ′->预测均值
σ′->预测协方差
w->sigma 点的权重
g - >非线性函数
χ(Caligraphic X) - >适马点矩阵
n - >维数
这就是关于无味变换及其工作原理的全部内容。
预测步骤
拉里:嗯,那么如何在卡尔曼滤波器的一般预测-更新模型中使用无迹变换呢?我:所以预测步骤基本上非常接近我们刚才讨论的,即无迹变换。
- 使用图 3 中的等式计算适马点- 。
- 使用图 4 中的等式计算适马点数- 的权重。
- 变换适马点并计算新的均值和协方差- 它非常接近图 5 中提到的方程。每当我们预测会发生什么?我们的不确定性增加了一些,因为我们变得有点不确定,所以我们必须考虑过程噪声。
Figure 6. Predicted mean and covariance after accounting in Noise R
更新步骤
拉里:现在我们有了预测的均值和协方差。在更新步骤中,假设我们有一个来自传感器的测量值,那么我们如何计算预测的均值和协方差值与实际均值和协方差值之间的差异呢?我:这个过程和卡尔曼滤波器的过程很相似。所以我们在这里做的是,把我们的预测状态带到测量状态。
现在,我们有一个选项,我们可以再次生成西格玛点,因为预测的均值和方差发生了变化,西格玛点在某种程度上依赖于它们,或者我们只是继续使用之前生成的相同的西格玛点集合。暂时让我们只考虑我们之前生成的 sigma 点。
我们把我们的状态从我们的状态空间带到测量状态空间。
Figure 7. Update Step considering the measurement spacce
Z ->在测量空间中转换的西格玛点
χ(Caligraphic X) - >西格玛点矩阵
测量空间中的 ẑ - >均值
测量空间中的协方差
Q- >噪声
h- >是将我们的西格玛点映射到测量空间的函数
重要提示:Z 是我们的测量空间,即来自传感器的测量值。所以我们需要一个函数 h,它可以把我们的状态空间转换到测量空间,这样我们就可以用相同的单位把它们等同起来。
拉里:太好了!我们如何计算卡尔曼增益呢?我看到这里不再有雅可比矩阵了,因为我们没有线性化这个函数!我:这是一个非常重要的概念,我们不再将函数线性化了!关于卡尔曼增益,这里有一点变化。
计算预测中的误差:我们需要计算状态空间中 sigma 点和测量空间中 sigma 点之间的互相关性。
Figure 8. Calculating Kalman Gain
T ->状态空间和预测空间之间的交叉相关矩阵
S- >预测协方差矩阵
K- >卡尔曼增益
拉里:哦,天哪!方程式改了很多!
我:如果你仔细观察就不是了!请看下面:
Figure 9. Comparison of Calculating Kalman Gain in EKF and UKF
赖瑞:是的,相似之处是一样的!甚至计算最终状态的方程也是一样的?我:是的,几乎一样。
Figure 10. Predicting Final State after calculating Kalman Gain
μ ->均值
σ->协方差
μ′->预测均值
σ′->预测协方差
K - >卡尔曼增益
z- >来自传感器的实际测量均值
ẑ - >均值在测量空间
T - >与卡尔曼滤波中的 h 和 EKF 中的 Hⱼ 相同。这是交叉关联矩阵
拉里:最后一个问题。为什么叫无迹卡尔曼滤波器?我:嗯,发明 UKF 的人认为 EKF 很糟糕,因为在一个点上线性化一个非线性函数是一个非常糟糕的主意。因此,他们认为,如果他们对数据进行采样并选取一些点,那么将会得到更好的结果。然而,他们的教授是 EKF 的超级粉丝,他不赞成 UKF 的想法。所以那些家伙发表了研究论文,并故意称之为无味的,这样他们就可以告诉世界,EKF 很臭!!
拉里:太好了!感谢您的宝贵时间!
好了,大家都到齐了。我试图用一种非常简单的方式来解释卡尔曼滤波器家族。希望你看完帖子后有所收获。我将在接下来的帖子中尝试提供卡尔曼滤波器家族的代码。
如果你发现任何错误,你可以联系我@LinkedIn 这里。
在命令行中探索美国大学排名 2017(第三部分——剪切、排序和 uniq)
Image adopted and modified from the unsplash.com
各位编码员好!欢迎回到我的系列课程数据科学@ Bash Shell 。在这一课中,我们要计算美国各州在数据集中有多少机构被排名。
您应该从下面的网页下载数据,因为我们已经稍微简化了数据,让我们将数据保存为:unirank.csv
wget https://www.scientificprogramming.io/datasets/unirank.csv
查找每个州的学院数量
让我们从提取每一行中与我们相关的部分开始。在我们的例子中,注意我们对列#1
和3
(分别是university
和state
的名称)感兴趣。为了提取这些列,我们可以使用名为cut
的命令,如下所示:
$ cat unirank.csv | cut -f1,3 -d,
这里,命令行选项-f
指定从文件中提取哪个字段(列)或cut
(提取),选项(d,
)告诉我们要用逗号(,
)分隔切割。当您运行该命令时,您应该看到输出只包含诸如 university names
和states
这样行。注意,尽管名称如此,cut
命令并不修改它所作用的原始文件。现在到最后一部分。我们想数一下每个州有多少警察。然而,这是一个复杂的过程,没有一个命令可以做到这一切;我们将不得不使用两个命令。这里我们需要命令uniq -c
来计算(因此使用-c
)每个状态有多少个独特的外观。但是,uniq -c
需要对输入进行排序,所以第一步是sort
大学和州的列表。我们可以很容易地用一个叫做sort
的命令来做到这一点:
$ cat unirank.csv | cut -f1,3 -d, | sort -k 2 -t”,”
sort
选项:k 2
告诉排序函数选择列2
作为键,t”,”
选项告诉分隔符是逗号(,
)。
Output: Institutes sorted by states
注意,作为我们的列表被排序的结果,所有具有相同状态的行都紧挨着彼此。现在,正如我们在上面的计划中提到的,我们将使用uniq -c
来“浓缩”相同的相邻行,在这个过程中,计算每一行有多少被看到:
$ cat unirank.csv | cut -f3 -d, | sort | uniq -c
Output: Institutes in the CA (California) state.
我们现在有一个列表,列出了每个州有多少大学,很明显,绝大多数排名机构来自加利福尼亚州!
找到排名和学费的相关性?
我们已经知道排名和每所大学的学费(在数据中给出)。一个有趣的问题是研究大学排名和学费之间的关系。
为了实现这一点,我们首先将cat
和cut
数据中的学杂费(列4
)和排名(列6
)放入名为udata.csv
的新数据集中:
cat unirank.csv | cut -f4,6 -d, > udata.csv
注意重定向符号(>
),帮助我们保存输出。现在,可以使用名为scatter
(安装:sudo pip install bashplotlib
)的散点图工具简单地绘制这些数据。
cat udata.csv| tail -n +2 | scatter
注意tail -n +2
在将输出一直传递到结束scatter
之前,不包括第一行,即列标题。然而,这个工具的输出没有多大意义,因为它没有显示任何x,y
- axes 图例。因此,我们将数据(udata.csv
)上传到一个名为 plot.ly 的在线工具上,产生了下面这张漂亮的散点图:
Output: Ranks vs. tuition: a scatterplot via plot.ly
从上面的情节不难理解,排名高的大学学费更高!然而,散点图也描述了一所大学(杨百翰大学-Provo)排名更高(排名=68),学费极低( $5300 美元/年)。这是数据集中的异常(异常值)吗?我们把这个问题留给你进一步调查!
摘要
在这个项目中,我们已经学会使用一些重要的 bash 命令,如head
、tail
、sort
、uniq
、cut
等。在上下文中挖掘由美国学术机构排名组成的 csv 格式的玩具数据集。
[该项目是’学习在 Bash Shell 和 Linux 中分析数据课程的一部分。]
相关作品
[## 学习在 Bash Shell 和 Linux 中分析数据——学习科学编程
一个简单的课程演示了 Bash shell 在处理真实数据集时的使用
www . scientific 编程. io](https://www.scientificprogramming.io/learn-bash/)
高级回归技术在房屋价值预测中的应用
从竞争激烈的卡格尔比赛中获得的见解
简介
以下文档重点介绍了用于解决上述问题的各种技术,以及在创建一个机器学习模型时从这些结果中得出的推论,该模型将在六个时间段内准确估计美国近 300 万套住房的价值。换句话说,我们将预测 Zillow(赞助商)的估计哪里会差,哪里会好。我们用两种方法解决了这个问题。一种方法是将这个问题视为时间序列预测,另一种方法是对特定时期进行预测,并假设这种趋势在未来/过去是遵循的。我们还评估了各种实施方案,以选择最佳方案。本文档将讨论所有技术以及从它们得出的结果和结论。
评价标准:
评估标准将是平均绝对误差。因此,我们的目标是准确预测误差。预测误差越接近 Zillow 的误差,我们的预测就越准确。
数据集描述
可以在“参考资料”下找到相关链接。
设计
The Overall process execution in a nutshell
接近
正如我们在开始时提到的,我们使用了两种方法来执行这项任务。一种是基于时间序列的预测,另一种是基于趋势延续的预测。
时间序列预测
由于我们正在处理的问题有多个要预测的时间段,使用相同的静态特征来预测未来的属性误差只会给我们每个时间段相同的结果,因为不存在有助于实际估计的时变特征。因此,在这种情况下,我们应该有一些时变特征(对时间敏感的特征),以便对未来数据做出可靠的预测。因此,我们考虑了滑动窗口方法,该方法依赖于根据期望的窗口长度计算的特征。我们数据集中的可变时间窗口大小如下:3 个月、2 个月和 1 个月。之后,我们对目标月之前几个月的时间窗口中的要素进行工程化,以用作目标月数据集中的工程化要素。工程时变特征是,简单移动平均数/均值、标准差、中位数、最小值、最大值和第三个四分位数。只有 4 月、5 月和 6 月的数据包含在我们的最终数据集中。这是这种方法的一个局限性,因为它会导致数据集的显著减少。一种解决方案是考虑具有小宽度的小窗口,但是由于我们不知道哪个窗口给出最佳结果,并且执行交叉验证以确定最佳窗口将是一项繁琐的任务,所以我们选择了具有不同长度和小宽度的窗口,以减少数据集小的不利影响。但是具有更小宽度的窗口的问题在于,如果关于类似资产的销售发生的频率更低,则设计特征的预测能力将更低,因为相同的设计特征在大多数窗口中是多余的。在这种方法中,我们使用了不同的方法来处理类别值,即将一个类别替换为该类别的目标平均值。
恒定趋势法
在这种方法中,我们使用 2016 年 1 月至 9 月的数据作为每日可用的数据集来预测 10 月 1 日的误差。假设这种趋势持续到 11 月 1 日和 12 月,因为物业销售很少发生,这也是通过数据集确定的。
了解数据
properties_2016.csv 有 58 个列,其中 57 列可用作静态特征,而“*parce lid”*列是每个地块的唯一标识符,因此不会用作特征。 train_2016.csv 保存的目标是 2016 年售出的包裹的 logerrors 。通过基于 parcelid 合并这两个文件,可以将特性和目标合并成一个文件。了解数据集数据的性质为我们提供了一个很好的机会来预先执行必要的预处理操作,以便模型的准确性不会因数据集中的任何偏差效应而受到影响。在本文中,我们将只关注 2016 年 10 月、2016 年 11 月和 2016 年 12 月的预测。
我们正在建模的这个问题是一个回归问题。具体是利用多个变量/特征来确定输出的多元线性回归问题。此外,这个问题利用监督学习方法进行训练。
数据类型
合并后的两个文件 properties_2016.csv 和 train_2016.csv 。在此过程中删除了以下列。帕切里德和交易日期因为他们已经没用了。
Data type count
分类值
在识别的非数字特征中,两个是分类的,而另外三个是布尔类型的。
这两个分类列是:
地产分区描述-描述地产允许使用的土地面积(区域)
propertycountylandusecode-县(地理区划)土地使用代码
包含布尔类型值的列有 :
hashottuborspa-酒店是否有热水浴缸或水疗中心
壁炉标志——公司是否有壁炉
taxdelinquecyflag-该房产的房产税是否到期
缺失值百分比
具有以下列名的要素的缺失值占记录总数的 90%以上。有 20 个变量的缺失值百分比超过 90%。
唯一值计数
我们这里的目标是消除有大量重复的列(或者换句话说,不太唯一的值)。由于列表非常全面,我们将只添加前三列信息。完整的列表可以在参考文献中找到。
Count of unique values for the first few columns
统计信息
获得的每个特征的统计信息如下。为此,我们在熊猫中使用了 describe 方法。缺失的值由虚拟常数 404 填充。第一个特征的结果说明如下,
列名:空调类型 id
计数 90275.000000,平均值 275.675262,标准值 187.414780,最小值 1.000000,
Q1 1.000000,Q2 404.000000,Q3 404.000000,最高 404.000000。
探索数据集
频率分布特征
Frequency distribution of a selected feature
因为有大量的特征,所以绘制每个特征是不实际的。因此,为了说明的目的,上面已经示出了其中一个特征。
目标变量的分布
Frequency distribution of target
很明显,目标变量的形状接近正态分布。即使对称形状已经从图的左侧丢失,这可能是由于 Kaggle 为了测试的目的从该区域保留了更多的数据。对数误差大致在-5 到+5 之间变化。此外,y 轴已按对数标度进行了缩放。
对照目标变化特征
Change in a sample feature against the target
上图显示了所选特性相对于目标的散点图。这显示了特性值相对于目标值的变化。
聚类结果
The clustered data point into four clusters
上述结果是在执行聚类数为 4 的 k 均值聚类之后获得的。执行进一步的聚类,将聚类的数量改变为十个和三个。但是最好的分离是通过使用 4 个簇给出的。
方框图
这些是用于发现分布异常值的图表类型。每个特征都被构造成一个箱线图。这种箱形图的示例如下:
Box plot
时间序列相关可视化
其中一些可视化应用于检查特定问题是否可以建模为时间序列问题。
滞后情节
用于检查分布是否是随机的。如果分布显示分布中的模式,如季节性、正相关或负相关,则该分布可以建模为时间序列分析。最需要检查的是分布是否随机。因为分布是随机的,所以它不能被建模为时间序列分析问题。在该图中,y 轴显示 t+1 时间戳处的误差,而 x 轴显示 t 时间戳处的误差,该误差相对于 t+1 滞后 1。我们分布的滞后图如下:
Lag plot
从上面的图中,可以非常清楚地看到,分布在 x 和 y 轴上扩展,而一些点聚集在中心。我仔细观察了一下,如果我们认为分布是十字形的,我们甚至可以发现 4 个异常值。因此这个图表明我们的分布有随机性。但是,我们不应该完全抛弃这种方法,我们应该从不同的角度分析数据,收集证据来验证我们的观点。
自相关图
这是检查分布是否随机的另一种方法,通过分析自相关(滞后变量之间的相关性)随滞后数量增加的变化。相关性可以在-1 和+1 之间。如果相关性为-1,则有很强的负相关性。如果相关性是正的,那么就有很强的正相关性。如果相关性为零,就没有相关性。所以为了分析我们的分布是否是随机的,我们应该考虑它是接近零还是正/负。因为分布接近于零,所以分布是随机的。从而支持了我们之前的观点。
Autocorrelation plot
时间序列数据由 3 个元素组成。这些问题如下
观察到的表示原始曲线。趋势显示曲线的趋势部分,季节显示分布中的季节效应,最后残差显示从原始曲线中移除趋势和季节属性后的剩余部分。
房产的变化是指通过不同的窗口
Time-series decomposition
Variation of property means over different time periods
上图描绘了一个月、两个月和三个月时间窗口内属性平均误差的变化。
数据预处理
缺失值的插补
为了输入缺失值,我们使用了一些技术,例如用列的平均值、列的中值和列的标准偏差来替换列中的缺失值。
标准化
当我们使用神经网络实现时,这种技术是必需的。归一化意味着对数据集进行缩放,使其均值为零,标准差为一。
处理分类值
我们有两个分类变量。首先,我们必须应用一个标签编码器将分类值转换成数值,因为所有的转换只能在数值数据上执行。sklearn 包中的 LabelEncoder 给出从 0 到 number_of_labels-1 的值给分类值。但是我们在这之后发现,这产生了大量的类,导致在应用诸如一键编码之类的方法时出现资源限制。因此,我们必须找到用最少数量的类来表示类别的方法。所以我们看了下面两种方法,
一种方法是使用分层聚类,在这种情况下,我们将使用一种算法,通过确定要使用的最佳聚类数来执行聚类。为此,我们使用了均值漂移算法,该算法需要密集的计算能力,每次运行只能处理 10,000 个样本,但我们有 80,000 多个样本。一种解决方案是分批进行训练,但是聚类算法将聚类标签随机分配给聚类。因此,我们不能确保在后面的迭代中遵循与初始迭代中相同的分配标准。所以我们决定按照 k-means 的平面聚类算法进行聚类,这需要声明我们需要的聚类数作为算法的参数。因为我们需要检查增加或减少集群数量是否会对评估指标产生影响。我们使用不同的值来表示聚类数,例如 3、5 和 10。但是,在我们执行聚类之后,仍然存在一个问题,我们将聚类标签分配给与该聚类相关的分类变量中的值。然后,我们对每个分配的标签执行一键编码。在一次热编码完成后,编码的二进制值将被分成单独的列,这意味着将聚类的数量增加到一个大的数字,如 10,将导致 20 个新列被添加到当前数据集中。由于每个要素都表示为输入空间中的一个维度,因此增加一个维度会导致时间复杂度呈指数级增长。因此,引入 20 个额外的列将导致非常高的复杂性。
另一种方法涉及基于频率的标记。这里,我们给出现频率低于 50%的类标上 0,给出现频率高于 50%的类标上 1。可以更改阈值来检查它是否对所关注的度量有任何显著的改进。采用这些方法并没有带来任何显著的改善。
其他预处理
我们还删除了该列中缺失值超过 90%的列。此外,我们还删除了只包含一个唯一值的列。我们还从目标分布中排除了小于-2 的值和大于+2 的值。
特色工程
在这里,我们设计了一些新特性,并利用了 Kaggle 内核中建议的一些特性。一些工程特征如下。完整的列表可以在我的 GitHub repo 上找到,它的链接在 references 下面。
- 税款多长时间到期
- 每个 zip 中的属性数量
- 每个县的房产数量,
- 每个城市的房产数量
- 属性值多项式
建立模型和参数整定
在本节中,我们将只讨论叠加概念,因为它是最小化平均绝对误差(评估指标)的最有用技术。所有的实现都可以在我的 git hub 账户上找到。
堆叠
这是一种特殊的方法,我们首先将数据集分割为训练和测试部分。然后,我们使用训练集来训练多个回归变量(基础学习者),并获得它们在测试集上做出的预测。然后,我们将预测的列垂直堆叠,我们将其视为特征,同时将最后一列中这些样本的实际值作为目标。现在,我们已经创建了一个新的数据集,并将其交给另一个回归变量(元学习者)来识别预测值和实际值之间的模式/关系。
当考虑参数时,有网络参数(超参数)、树参数和其他参数。为简单起见,我将只讨论神经网络方面的参数调整,即使基于树的参数也被调整为最佳结果。
Network parameter tuning
Other parameter tunings
结果和讨论
Performance of each implementation
根据我们上面使用的四种技术,很明显,堆叠提供了令人印象深刻的结果。CatBoost 等其他实现也很有前途。另一个有趣的观察是时间序列预测方法无助于改进模型,尽管它也是一个有效的解决方案。时间序列分析帮助最小的原因是,与所有在短时间内售出的房产相比,相似房产的销售发生的频率较低。这导致我们设计的时变特性已经过时,实际上扮演了离群值的角色来抵消任何改进,而不是帮助提高性能。还进行了交叉验证,以确保模型不会过度拟合数据集。
注意:关于竞赛、源代码和可视化的更多信息可以通过参考资料部分下的链接找到。
参考文献
使用数据绑定中的数据
www.kaggle.com](https://www.kaggle.com/tharindraparanagama/eda-py) [## TharindraParanagama/使用高级回归技术进行家庭价值预测
通过创建一个关于…的账户,为使用高级回归技术进行家庭价值预测的发展做出贡献
github.com](https://github.com/TharindraParanagama/Use-of-advanced-regression-techniques-for-home-value-prediction) [## 创建附加功能
使用 Zillow Prize 的数据:Zillow 的房屋价值预测
www.kaggle.com](https://www.kaggle.com/nikunjm88/creating-additional-features) [## 通过我的推荐链接加入灵媒
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
tharindrapara.medium.com](https://tharindrapara.medium.com/membership)
对缺失值使用 KNN
更新
代码的主要更新,以提高计算加权汉明距离的性能。该方法从逐点距离计算改为矩阵计算,从而节省了多个数量级的时间。
访问代码:
问题:
在处理真实世界的数据时,您经常会在数据集中遇到缺失值。你如何处理它们对你的分析和你将得出的结论至关重要。
缺失值有三种常见类型:
- 完全随机缺失(MCAR): 当缺失数据为 MCAR 时,数据的有/无完全独立于感兴趣的可观测变量和参数。在这种情况下,对数据进行的分析是无偏的。实际上,这是极不可能的。
- 随机缺失(MAR): 当缺失数据为非随机,但可以与一个变量完全相关,且有完整信息时。一个例子是,男性不太可能填写抑郁调查,但在考虑男性因素后,这与他们的抑郁水平无关。这种缺失数据会导致您的分析出现偏差,尤其是当您的数据因为某个类别中的许多缺失值而不平衡时。
- 非随机缺失(MNAR): 当缺失值既不是 MCAR 也不是马尔时。在前面的示例中,如果人们倾向于根据自己的抑郁水平不回答调查,就会出现这种情况。
在本教程中,我们将使用一种称为 k-最近邻(KNN)的非参数算法来替换丢失的值。该算法适用于前面三种情况中的任何一种,只要具有缺失值的变量与其他变量之间存在关系。
为什么用 KNN?
KNN 是一种算法,用于在多维空间中将一个点与其最近的 k 个邻居进行匹配。它可以用于连续、离散、有序和分类的数据,这使得它在处理各种缺失数据时特别有用。
对缺失值使用 KNN 背后的假设是,基于其他变量,点的值可以由与其最接近的点的值来近似。
让我们保留之前的例子,并添加另一个变量,人的收入。现在,我们有三个变量,性别(T0)、收入(T2)、抑郁程度(T4)和缺失值(T5)。然后,我们假设收入相似、性别相同的人往往会有相同程度的抑郁。对于给定的缺失值,我们将查看该人的性别、收入,寻找其最近的 k 个邻居,并获得他们的抑郁水平。然后我们可以估计出我们想要的人的抑郁程度。
KNN 参数校准
使用 KNN 时,您必须考虑许多参数。您将在下面找到本文提供的函数所允许的内容:
-
要寻找的邻居数量。采用低 k 值会增加噪声的影响,并且结果不太具有普遍性。另一方面,采用高 k 值会模糊局部效果,而这正是我们想要的。也建议二进制类取一个奇 k** 避免平局。**
-
聚合方法使用。在这里,我们允许数字变量的算术平均值、中值和众数以及分类变量的众数。
-
归一化数据是一种方法,当计算某种类型的距离时,如欧几里德距离,该方法允许在识别邻居时给予每个属性相同的影响。当比例没有意义和/或比例不一致(如厘米和米)时,应该对数据进行规范化。它意味着对数据的先验知识,以知道哪一个更重要。当同时提供了数字变量和分类变量时,该算法会自动对数据进行规范化。
-
**数字属性距离:**在各种可用的距离度量中,我们将关注主要的度量,欧几里德和曼哈顿。如果输入变量的类型相似(例如,所有测量的宽度和高度),欧氏距离是一种很好的距离测量方法。如果输入变量的类型不相似(如年龄、身高等),曼哈顿距离是一种很好的度量方法。
-
**分类属性距离:**没有先验变换,适用距离与频率和相似度有关。这里我们允许使用两种距离:汉明距离和加权汉明距离。
-
**汉明距离:**取所有的分类属性,对于每个属性,如果两点之间的值不相同,则计 1。那么汉明距离就是值不同的属性的数量。
-
加权海明距离:如果值不同也返回 1,但如果匹配则返回属性中值的频率,值越频繁则增加距离。当多个属性是分类属性时,应用调和平均值。结果保持在 0 和 1 之间,但是与算术平均值相比,平均值向较低值移动。
-
-
**二元属性距离:**这些属性通常是通过转换成虚拟变量的分类变量获得的。如前所述,对于连续变量,欧几里德距离也可应用于此。然而,也可以使用另一个基于相异度的度量,即 Jaccard 距离。
为了确定用于您的数据的最佳距离度量,您可以使用上面给出的提示,但最重要的是,您必须进行实验,以找到最佳改进您的模型的方法。
在大型数据集上的测试
目标:预测哪位乘客在泰坦尼克号上幸存。你可以在 Kaggle 上下载数据。为了能够快速进行多项测试,我还下载了完整的数据集,包括每位乘客的名单以及他们是否幸存。
程序:
- 为了构建一个简单的模型,我删除了“姓名”、“客舱”和“机票”这三列。
- 然后,我发现两列缺少值,“年龄”和“上船”。第一个有很多缺失值,而第二个只有几个。对于这两列,我应用了两种方法:
1-对数字列使用全局平均值,对分类列使用全局模式。
2-应用 knn_impute 函数。 - 构建一个简单的随机森林模型
简单逼近结果: 灵敏度= 66%;特异性= 79%;精度= 63%
KNN 用最佳模型插补结果: 灵敏度= 69%;特异性= 80%;精度= 66%
代码示例:
对于这个数据集来说,这两种方法之间的结果差异不是很大,但是在 Kaggle 比赛中,人们可以花很多时间来获得这几个额外的百分比。
如果你在其他数据集上测试这个函数,我期待着听到你的反馈,关于这个函数在帮助你改善结果方面有多大的帮助!
资源:
- https://en.wikipedia.org/wiki/Missing_data
- 【http://citeseerx.ist.psu.edu/viewdoc/download? doi = 10 . 1 . 1 . 140 . 8831&rep = re P1&type = pdf
- http://machine learning mastery . com/k-nearest-neighbors-for-machine-learning/
- http://jamesxli . blogspot . co . il/2013/03/on-weighted-hamming-distance . html
数据的价值
世界各地的企业正迅速意识到,他们最大的商品在于他们收集和存储的数据。世界上最有价值的五家上市公司:Alphabet、亚马逊、苹果、脸书和微软受益于这一领域的垄断,科技行业内对利用和分享现有财富的担忧也在增加。然而,正如经济学家所强调的,“规模本身并不是犯罪。巨头的成功让消费者受益。很少有人愿意离开谷歌的搜索引擎、亚马逊的一日送达或脸书的新闻推送。当应用标准的反托拉斯测试时,这些公司也没有发出警报”。此外,应用程序和线下竞争对手形式的新进入者仍然能够产生重大影响,因此,数据的价值可能会继续飙升,但访问和受益的潜力也会如此。
数据的增长和价值增加
微软首席执行官塞特亚·纳德拉在接受爱尔兰时报采访时解释说,“当我在 1992 年加入公司时,互联网流量总量达到每天 100 千兆字节,”纳德拉说。“今天每秒钟产生 1750 万倍于此的流量。有史以来创建的所有数据中,有 90%是在过去两年中生成的。”随着科技行业多个领域的快速发展,数据生成和价值的增长速度预计将是广泛的,经济学家报告称,“有人估计无人驾驶汽车每秒将产生 100 千兆字节”。这种巨大的商业潜力几乎是不可估量的,有机会扩展到新的领域和整体价值大幅增加的基础上访问数据的公司。
一家公司滚雪球般增长潜力的想法在经济学家的报告中得到了进一步的证明:“如此丰富的数据改变了竞争的本质。科技巨头总是受益于网络效应:脸书注册的用户越多,对其他人来说注册就越有吸引力。有了数据就有了额外的网络效应。通过收集更多的数据,一个公司有更多的空间来改进它的产品,从而吸引更多的用户,产生更多的数据,等等。特斯拉从其自动驾驶汽车上收集的数据越多,就越能让它们更好地自动驾驶——这是该公司第一季度仅售出 25,000 辆汽车,现在比售出 230 万辆汽车的通用汽车更有价值的部分原因。大量的数据因此可以作为保护性的护城河。”
这对企业意味着什么?
1。 需要熟练的数据专家才能解锁数据值
数据科学家能够识别企业中最有价值的数据,访问这些数据,并通过有效利用这些信息来满足企业的需求。根据 Vcloud News 的数据,存储数据的增长速度比世界经济增长速度快四倍,随着从价格比较网站到健康跟踪应用程序的激增,消费者继续向市场提供更多数据,为企业收获和利用这些数据做好准备。
Vcloud News 报道称,每天有大量行业产生 2.5 万亿字节的数据。许多公司尚未充分利用他们所拥有的数据的价值,而发掘这些丰富的信息可能是确保长寿、财政安全和业务扩张的关键。投资于技术娴熟、才华横溢的数据科学家来挖掘你的记录,可能是公司在数字时代采取的最有回报的步骤之一。通过利用数据科学家和统计学家的技能,可以根据您的业务需求以特定和定制的方式提取和使用相关的高价值数据。
2。数据安全性和合规性的处理
数据的价值如此之高,保护您的资产势在必行。通过为您的公司安排有效的安全和隐私计划,您将保护您的数据记录、客户的信任和您的工作效率。此外,数据泄露可能会对您的企业造成罚款,并可能会影响您吸引新客户的能力。
在国际上,数据的价值得到了广泛认可,政府和权威机构热衷于确保数据尽可能安全。通用数据保护条例(GDPR)是由欧洲议会、欧盟理事会和欧盟委员会制定的监管信息。GDPR 的建立是为了加强数据安全,并为欧盟国家提供统一的数据保护系统。GDPR 旨在通过“协调整个欧盟的数据保护法规,从而使非欧洲公司更容易遵守这些法规,将这种安全性扩展到非欧盟国家;然而,这是以严格的数据保护合规制度为代价的,严厉的处罚高达全球营业额的 4%。”这些法律将在未来一年内实施,企业必须被告知并准备好应对这些变化,以尽可能保持合规和安全。
接下来呢?
数据是 21 世纪的石油。最大的几家公司的市值超过了石油公司——前五大公司在 2017 年第一季度的净利润超过 250 亿美元。数据价值(和数量)的激增意味着所有企业都需要确保他们的数据治理完全合规,并且为了最大化这些数据的价值,他们需要合适的人来挖掘数据。那些从他们收集的数据中提取最大价值的人不仅证明了巨大的回报(亚马逊获得了美国在线支出的一半),还证明了巨大的竞争优势。
如果您想了解更多有关如何管理、挖掘和保护您的数据的信息,请与我们联系:【info@pivigo.com】T2
作为双人游戏的可变自动编码器(上)
爱丽丝和鲍勃在自动编码奥运会上
Illustrations by KITTYZILLA
**【免责声明:**本系列文章的目的是使可变自动编码器和自然语言编码背后的基本思想尽可能容易理解,并鼓励已经熟悉它们的人从新的角度来看待它们。为了做到这一点,为了更好的叙述,我使用了一些艺术自由,有时可能会牺牲一点技术准确性。我奉劝没有任何技术背景的读者,凡事要半信半疑。]
认识一下爱丽丝和鲍勃(还有查理)
人工智能领域,特别是深度学习的子领域,在过去几年里随着进步一直在爆炸式增长。一种特殊的方法,【生成模型】对这一进步贡献良多。
为什么生成模型在通往真正的人工智能的道路上有用,一个直观的论点是,可以生成现实数据的系统必须至少对现实世界有一些了解。
生成模型有多种风格。其中之一是所谓的 变分自动编码器(VAE) ,由 Diederik Kingma 和 Max Welling 于 2013 年首次推出。
VAEs 有许多实际应用,而且还有更多的应用在不断被发现。
它们可以用来压缩数据,或重建噪声或损坏的数据。它们允许我们在真实数据之间进行平滑插值,例如,拍摄一张人脸的照片,然后逐渐将其变形为另一张人脸。它们允许复杂的数据操作,例如逼真地改变人的图像上的头发长度,或者在不改变任何其他声音特征的情况下平滑地将录音从男性变为女性。
更微妙的是,但在实践中最令人感兴趣的是,它们可以揭示大量未标记数据中隐藏的概念和关系。这将它们归入无监督学习算法的类别(与需要标记数据的监督算法相反)。
还有一组相关模型遵循与 VAE 非常相似的原则。例如,用于谷歌翻译的模型就是其中之一。如果你理解了这一系列的文章,你基本上也准备好理解谷歌翻译是如何工作的。
有许多很棒的博客文章用技术细节和代码解释了 VAEs 是如何工作的(例如这个和那个),学术文献充满了对原始想法的无数解释、应用和扩展。
我在这里的目标既不是给你实际实现 VAE 的技术理解,也不是评论该领域的任何特定的最新发展。
相反,我想提供一种新的方式来观察 VAE 到底在做什么。我希望这种方式足够简单,你可以向你的祖母或小学生解释,同时不要遗漏太多的细节或过于松散。
即使你是该领域有经验的从业者或研究人员,我也希望这种略带古怪的解释能够激发一些新的创造性见解。
在这个由三部分组成的系列中,我们将首先探索第一部分中自动编码器的基础。在第二部分中,我们将看看为什么让它们变得有意义(以及这意味着什么)。最后,在第三部分中,我们将发现为什么编码文本特别具有挑战性。第一部分和第二部分实际上只是第三部分的基础。
(变化的)自动编码器的基本概念已经有了广泛的报道,从简单的介绍一直到学术论文。然而,对于第三部分中的概念,我到目前为止还没有遇到任何好的非学术讨论。我希望这个系列能够填补这个空白,并且在这个过程中教会你很多其他的东西。
我自己的背景是量子信息论。量子物理学家和信息理论家都喜欢通过将复杂的场景浓缩成简单的游戏来理解和解释世界。
例如,许多密码问题可以表述为发送者和接收者之间的游戏,其中恶意的玩家充当窃听者。或者看看我的前博士导师特里·鲁道夫的小书《Q 代表量子》,里面有很多简单易懂的量子游戏的例子。
在将我自己的研究重点从物理转移到人工智能之后,我花了很多时间思考和研究 VAEs。鉴于我的量子背景,把 VAE 看成一个游戏的想法很自然地产生了。
特别是,我把 VAE 看作是一个两人合作的游戏。**
不过在进入游戏细节之前,我们先介绍一下玩家。遇见爱丽丝编码器****
还有解码者鲍勃**(不要和建造者鲍勃混淆)。**
爱丽丝和鲍勃非常有抱负。他们的目标是参加新成立的自动编码奥林匹克竞赛,世界上最好的编码器-解码器组合在这里展示他们的技能。
为了准备比赛,爱丽丝和鲍勃邀请了他们的朋友评论家查理**,他将评判我们两位选手的表现,并担任他们的教练。**
现在我们来看看游戏规则。
自动编码游戏
正如我们将看到的,游戏有各种风格和规则,每一种都有自己的规则和目标。
我们将首先考虑游戏最简单的版本,所有后来的版本都将建立在这个基础上。在深度学习中,这个简单的版本对应于一个普通的(即非变分的) 自动编码器 。
基本思想是这样的:爱丽丝得到某种数据,例如图像、文本、音频剪辑等。然后,她必须将这一点传达给 Bob,Bob 没有看到数据,这样他就可以重建 Alice 看到或听到的内容。
Charlie(他确切知道 Alice 看到了什么)然后评估 Bob 的重建有多准确,并根据他的表现给他打分。
目标是让 Alice 和 Bob 获得尽可能高的分数,即 Bob 完美再现 Alice 获得的数据。
问题是爱丽丝和鲍勃彼此分离,只能通过一套特殊的设备以非常有限的方式进行交流。
特别是,爱丽丝不能直接解释她所看到的。她能传递给鲍勃的唯一信息是一串数字,一个“代码”*。*
爱丽丝需要对数据进行编码。
允许她发送多少个号码被称为“码尺寸”或“码尺寸”*。在真实的 VAEs 中,代码维数通常可以达到数百。但是为了简单和易于可视化,让我们假设只有两个。这不仅仅是为了这个游戏而简化,而且在实践中当人们想要可视化代码时也是这样做的。*
如果代码大小为 2,我们可以直接将代码解释为二维坐标系中的(x,y)坐标。
对于这个游戏的初始版本,我们还将假设 Alice 显示的数据是猫和狗的照片。有很多这样的数据,我们称之为训练数据。同样为了简单起见,让我们假设我们有一百万个训练图像。对于真实的数据集来说,这是一个相当低的平均数。
一些有代表性的例子可能是
因此,给定这些图像中的一个,Alice 必须向她的机器输入两个数字,比如说(2.846,-5.049),并将这个代码发送给 Bob。
鲍勃现在必须试着画出他认为爱丽丝看到的东西,除了这两个数字之外什么都没有。
听起来很难?
事实是,情况要糟糕得多!
我们都有一个概念,狗和猫是什么,它们长什么样,它们的行为如何,我们通常在什么环境中看到它们,等等。但是人工智能必须从零开始,没有对现实世界的先入之见,也没有什么图像是可能的或不可能的。
这就好像鲍勃和爱丽丝都是在一个封闭的房间里长大的,他们闭着眼睛,现在通过他们看到的照片第一次看到了真实的世界。他们完全没有“狗”或“猫”的概念,在游戏开始时,一张猫的照片对他们来说就像随机噪音或抽象画一样可能和真实。
他们甚至没有被告知这些照片主要包含了我们称之为“猫”和“狗”的东西。
而且困难还不止于此。虽然 Alice 实际上看到了真实的照片,但是 Bob 从来没有看到过真实的照片。他所看到的只是来自爱丽丝的代码。他只能根据这些神秘的数字随机作画。
但这正是我们的教练查理的重要性所在。每次 Bob 根据 Alice 的一个代码完成一幅画,Charlie 都会将其与原作进行比较,并为其分配一个分数(这个分数的专业术语是“损失函数】*)。越准确,分数越高。*
Charlie 不仅仅提供一个分数来告诉 Bob 他有多好(或多坏),他还告诉 Bob 他的哪些决定促成了这个分数,以及如何促成的。用专业术语来说,他为鲍勃提供了【渐变】*。基于这些信息,Bob 可以调整他的过程,以便下次获得更高的分数。*
因为 Bob 知道 Alice 的代码如何影响他的过程和最终输出,所以他也可以告诉 Alice 如何改进她的编码。在这种特殊情况下,为了得到更高的分数,他希望得到什么样的代码。例如,他可能认为“数字 1 应该小 0.043,数字 2 应该大 4.956”。
这是鲍勃和爱丽丝之间唯一允许的通信。我们称这个过程为【反向传播】*,因为我们从最终得分开始,然后根据反馈调整导致得分的过程。*
这种反向传播方法目前形成了训练大多数深度神经网络的基础,而不仅仅是 VAEs 或生成模型。
在调整他们的流程时,Alice 和 Bob 需要小心,不要因为一张照片而调整太多。如果他们这样做了,他们只会在之前给他们的图像上变得更好,然后通过过度调整到下一个图像来“覆盖”这一进步。
相反,他们需要根据每个反馈对他们的流程进行小的更新,并希望随着时间的推移,这些小的调整将积累成一个独特的流程,使他们在所有图像上获得良好的分数,而不仅仅是当前的图像。
他们根据每个单独图像的反馈调整过程的程度取决于所谓的学习速率。学习率越高,他们调整过程就越快。但是如果学习率太高,他们就有对每个新图像进行过度补偿的风险。
最初,由于 Alice 从未见过真实的照片,也不知道 Bob 想要什么代码,她所能做的就是给 Bob 发送随机数。
此外,鲍勃不知道这些数字意味着什么,也不知道他应该画出什么样的画。实际上,任何一幅画对他来说都和其他画一样有可能。从头到尾都是随机的。
但是在创作了许多都被查理打了糟糕分数的随机画作后,鲍勃开始注意到一些事情。
当他在画的中心使用某些颜色,而在边缘使用其他颜色时,他会得到稍高的分数。特别是当他在中间画一个灰色或棕色的有两个圆形的斑点时,他通常会得到比完全随机画更高的平均分。
Bob 对“毛皮”或“眼睛”没有概念,他只是发现大多数图片都包含有毛皮的动物,通常有两只眼睛。
以后记住这一点。在这里看似巨大的初步进展实际上会在稍后的第三部中困扰爱丽丝和鲍勃,当他们试图编码文本时。
此外,这种完全忽略爱丽丝的输入,只画两个圆圈的棕色斑点的方法只能让他到此为止。他卡住了,不能增加分数。他需要开始尝试使用 Alice 的代码,因为 Alice 没有从 Bob 那里得到任何有用的反馈,所以此时 Alice 的代码仍然是随机的。他需要开始将代码整合到他的创作过程中,并给爱丽丝一些线索,将她的编码引向正确的方向。
接下来的过程是爱丽丝和鲍勃的共同努力。Bob 首先学习哪些图像是真实的或可能的,然后 Alice 在 Bob 的反馈的帮助下,可以针对给定的输入将他引导到正确的方向。在 Bob 不了解这个世界的情况下,就像在游戏开始时一样,她将不得不为他指定图像的每一个像素。后来她可以带着少得多的信息(猫还是狗?棕色还是灰色?坐着、站着还是跑着?等等。)
作为对数据压缩的简短补充,让我们考虑一个普通版本的游戏。在这个版本中,代码维数与图像的像素数完全相同。
如果机器的输入槽与图像的像素一样多,Alice 可以简单地通过机器传输精确的图像。(假设是黑白的。对于一张彩色照片,我们实际上需要三倍的像素数,来编码每个像素的红色、绿色和蓝色值。)
Bob 只需要按照 Alice 的指示精确地绘制每个像素,就可以得到一个绝对完美的复制品,100%的几率。
一个稍微不那么琐碎的版本是代码大小是像素数的一半。
Alice 现在可以学习指定每隔一个像素,这是照片的缩减采样版本。Bob 只需要填充剩余的像素。假设他对真实世界有一个很好的概念,这就变成了一个相当琐碎的任务。这些图像不会 100%准确,但足够接近了。
但是爱丽丝和鲍勃不会永远摆脱这种“像素编码”。随着代码变得越来越小,比如在我们最初的游戏中减少到两个,如果他们想有任何成功的希望,他们必须改变他们的策略。
他们需要想出一种更智能、更“信息密集”的代码,而不是对像素进行编码。捕捉更抽象概念的代码,比如什么动物,什么姿势,什么拍摄角度,等等。
这是数据压缩的基础。我们越想压缩一段数据,我们需要设计的代码就越有效(我们就越有可能无法完全忠实地重建它)。
诀窍是将复杂的信息分解成几个尽可能简单和通用的概念,但仍然允许相当忠实的重建。
回到我们最初的游戏,Alice 和 Bob 已经玩了一段时间(我真的是指很长一段时间),并且已经用训练数据集中的每张照片玩了大约十次。鲍勃已经成为一名多产的画家,画了数百万幅画,爱丽丝已经成为一名专家信息编码器,并学会了向鲍勃提供代码,帮助他找出她看到了什么照片。
与最初的随机性相比,鲍勃对现实世界的想法有了显著的改善。
但是,请注意,Alice 和 Bob 只知道他们在训练图像中遇到的事情。对他们来说,另一种动物就像随机噪音一样不太可能出现(尽管他们可能会从以猫/狗为中心的世界观中发现眼睛、腿和皮毛等熟悉的概念)。
爱丽丝和鲍勃已经变得很擅长这个游戏,并开始获得相当高的分数。
学习到的代码
让我们简单地看一下 Alice 在训练中可能发现的那种代码。
由于代码由两个数字组成,我们可以很容易地将它们想象成平面上的 x 坐标和 y 坐标。
在一个可能的代码中,Alice 可能决定对猫使用负的 x 值,对狗使用正的 x 值。y 轴可以用于毛发颜色。正值较暗,负值较亮。
有了这个代码,如果 Alice 得到一张极其“狗样”的黑狗的照片,她会给 Bob 发送两个大的正数。如果她看到一只非常“猫”的白猫,她会发送两个大负数。对于一张照片,她几乎不能确定它是一只狗还是一只猫,皮毛颜色是中等黑暗,她发送两个接近零的值。诸如此类。
如果鲍勃已经知道这是爱丽丝正在使用的代码,这将允许他对他的画做出更好的猜测。
然而,尽管与完全随机的绘画相比,这是一个巨大的进步,但他的新绘画仍然包含许多随机性和猜测。他知道这是一只猫还是一只狗,也知道皮毛有多黑,但这种特殊的编码方式无法传递很多信息。
例如,Bob 不知道毛皮长度和图案是什么,动物处于什么姿势以及在图像的哪个部分,背景是什么,场景的照明是什么,…
他需要更多的信息来详细说明问题。这就是为什么真正的神经网络通常倾向于学习非常复杂的代码,在大多数情况下,这些代码没有简单的人类解释轴。这样他们就可以在这两个数字里塞进更多的信息。
如果你仔细想想,在一个简单的图像中确实有很多信息。如果你被要求寻找猫或狗,你会以一种特殊的方式看待图像,非常二元。猫还是狗?
另一方面,如果你被问及猫或狗是在城市还是在自然环境中,你会认为这些图片非常不同。爱丽丝和鲍勃没有被要求寻找任何特定的东西。他们没有这样的人文背景。他们只知道重建整个图像的任务。
然而,随着他们的学习,他们可能会自然地理解“狗”和“猫”这样的概念。但也有很大的可能性,人工智能会提出对我们人类完全没有意义的概念。更抽象和“有效”的概念。
因此,如果爱丽丝和鲍勃玩的时间够长,他们最终会同意使用这些更复杂的代码来捕捉高度抽象和有效的概念。
似乎他们掌握了游戏,对吗?
如果爱丽丝和鲍勃变得太“聪明”会怎么样
嗯,没那么快。他们需要小心。有变成“太优秀”的风险。
在查理的帮助下,爱丽丝和鲍勃目前正在为自动编码奥林匹克进行训练。在训练过程中,他们用同一套照片反复练习。
但是将在奥运会上使用的照片是一个严格保密的秘密。他们不会看到它们,直到他们在比赛时间真正开始做它们。
那时,他们可能会意识到他们有麻烦了。
他们没有理解“狗和猫照片的一般世界”,而是学会了完美地记住他们训练集中的所有照片。
事实证明,他们实际上没有发现我们在上一节中讨论的任何概念。他们基本上只是想出了一种作弊的方法来在他们的训练图像上获得满分,而实际上没有任何真正的理解。
这个问题在深度学习中非常普遍,被称为 过拟合 。
就像一个学生偷了一个测试的答案,然后记住这些答案,而不是真正学习这个主题,一旦过度适应,爱丽丝和鲍勃对他们遇到的例子有 100%的信心,但对其他任何事情都没有任何线索。
将这一点发挥到极致,如果 Alice 和 Bob 非常“聪明”,有很大的记忆力,并被允许训练很长时间,他们实际上可以学习将他们训练数据集中的任何图像完美地编码成甚至只是一个数字,不管有多少图像。
他们怎么能这样做?
有无限多的代码允许它们这样做,但让我们考虑一个特别简单的。
我们先前假设正好有一百万个训练图像。有了这些知识,他们可以同意从第一个 0.000001 开始编码,第二个 0.000002,以此类推,直到第一百万个 1.000000。对于每张图片,他们只需确定一个唯一的编码。
在这段代码中,连续编号的图像在代码上非常接近,但是图像之间没有任何相似之处。图像 156 可以是一只在客厅玩球的黑狗,而图像 157 可以是一只在草丛中追逐老鼠的白猫。
每当爱丽丝看到图像 156,她只是发送 0.000156。鲍勃已经确切地知道了他需要画什么才能得到满分。类似地,当他看到 0.000157 在他的机器上闪烁时,他已经知道该画什么了。
他们 100%的时候都得了满分。
但是如果鲍勃看到 0.0001565 呢?还是-0.000001?还是 1.000001?
完全不知道。
类似地,如果 Alice 突然看到一个她以前从未遇到过的新图像,她会如何将它放入现有的代码中,以便 Bob 可以立即做出明智的猜测?
同样,完全不知道。
这不是学习,也不是理解。纯粹是死记硬背。
每一个小小的变化,每一个微小的陌生,都会让他们完全不知所措。
我们需要阻止他们达到这个阶段,而不是加强理解。
如果做得正确,他们可能在某种程度上仍然记得他们以前遇到的例子,但也学会了一般原则,允许他们对他们以前没有见过的事情进行推理。
这被称为 泛化 ,几乎是任何深度学习算法的核心标准之一。
防止这个问题的一个方法是,在基本理解让位于记忆之前,尽早停止训练,这是人们长期以来一直采用的方法(并且仍然与更复杂的方法一起使用)。
但是在自动编码器的情况下,有一个更好的方法来确保实际的理解和有意义的代码。
在第二部分中,我们将看看 Alice 和 Bob 如何应对他们的失败,并看看一种新的训练方法,即使用所谓的变分机器,如何帮助他们提高性能,并提出有意义的代码,以推广到以前从未见过的数据。
作为双人游戏的可变自动编码器(下)
变奏回归自动编码奥运会
Illustrations by KITTYZILLA
欢迎阅读这个关于可变自动编码器及其在文本编码中的应用的三部分系列的第二部分。
在第一部分中,我们跟踪了两位选手爱丽丝和鲍勃,他们正在为自动编码奥运会进行训练。我们学习了自动编码器的基础知识,以及一般的深度学习,以及 Alice 和 Bob 可能学习的代码类型。
我们还看到,传统的自动编码器存在记忆的风险,而不是真正的学习。这最终导致爱丽丝和鲍勃在奥运会上遇到了他们从未见过的数据,搞砸了他们的表现。
引入变分自动编码器(VAE)
由于在自动编码奥运会上的灾难性表现,Alice 和 Bob 沮丧地回到家中,重新组织起来,思考如何在下一届奥运会上改变他们的方法。
因为他们的经历是如此的灾难性和尴尬,没有得到哪怕是一点点正确的测试图像,他们决定完全从头开始。
因此,爱丽丝和鲍勃扔掉了他们想出的代码,开始了一场史诗般的饮酒狂欢,彻底抹去了他们迄今为止从头脑中所学到的一切。
白板。
他们的头脑又完全空白了。就像我们第一次见到他们时一样。
在从同样史诗般的宿醉中恢复过来后,他们决定将他们的自动编码设备升级到他们最近听说的更新型号。一个 变型 。
变分模型仅推荐用于专家编码器/解码器对。这只是为了训练。这实际上增加了这个过程的难度。但是爱丽丝和鲍勃毕竟想在他们的游戏中处于领先地位。
没有痛苦就没有收获。
最初的设备实际上只是一对分别用于代码和反馈的发送器和接收器。新设备略有不同。让我们看看它们是如何工作的。
爱丽丝仍然输入她认为最有可能的代码。但是除此之外,她还要进入一个不确定性!
基于这一点,机器不会直接将 Alice 最有可能输入的值转移给 Bob。相反,它根据她输入的分布选择一个随机数。
它随机采样爱丽丝的代码分布。
所以 Bob 仍然只能得到每个代码维度的一个数字。但是在从爱丽丝的机器转移到鲍勃的机器的过程中,这个数字现在已经获得了一点随机性。
事实上,原始论文介绍 VAE 的主要贡献之一是一个技巧(称为*“重新参数化技巧”*),它允许 Bob 向 Alice 提供有用的反馈,尽管不知道 Alice 选择的确切值,但只知道机器传递给他的随机值。
原则上,Alice 仍然可以选择输入非常低的不确定性,这样 Bob 几乎肯定会得到她想要传输的确切值。
但问题是查理变得更严格了。
他现在也从他们的得分中减去了一个点球。爱丽丝选择的不确定性越小,查理施加的惩罚就越大。
如果 Alice 确信,即使一个值与她期望的值很接近,也能传达所有的信息,她可以选择更高的不确定性,牺牲更少的分数。
另一方面,如果代码需要非常精确地将图像传达给 Bob,Alice 需要选择低不确定性。这样,即使 Bob 完美地重建了图像并为他们赢得了满分,他们也会因为不确定性惩罚而失去很多。
这迫使 Alice 和 Bob 对他们选择的代码更加明智。面对微小的变化,它需要更加健壮。即使代码在传输过程中被扭曲了一点,Bob 仍然应该画出一幅相当相似的画。
理顺代码
让我们再来看看只用一个数字编码的极端例子。
我们在第一部分中看到,没有不确定性,Alice 和 Bob 可以学习将唯一的代码编号与他们的每个训练图像相关联,基本上记住了他们的整个训练数据集。
在一个特定的代码中,Alice 可以用 0.000001 分隔的代码对连续编号的图像进行编码。图像 156 对应于代码 0.000156,图像 157 对应于 0.000157,依此类推。不管这些图像实际包含什么。
如果鲍勃得到了准确的数字,他已经通过多次反复试验和错误,准确地了解了他要画的相应图像。
问题是这会在代码中产生“漏洞”。Alice 从不在例如 0.000156 和 0.000157 之间的空间中编码任何东西。因此,这些间隙中的任何数字,比如 0.0001561 或 0.0001568,对鲍勃来说都是毫无意义的。
当然,他可以向上或向下舍入到与图像相关的最接近的数字,但这将意味着他们的代码在 0.0001565 这样的地方有一个急剧的转变。代码中最微小的变化可能意味着鲍勃不得不描绘一个完全不同的形象。
他们的代码并不流畅。
如果没有进一步的训练和修改,它也不能用于编码不熟悉的图像。这就是导致他们在第一部中失败的原因。他们的代码没有通用。他们过度适应训练数据。
然而,随着 Alice 开始使用少量的不确定性,她开始“填补漏洞”,稍微平滑他们的代码。
如果她想发送图像 156 并输入 0.000156,有一点不确定性,Bob 将得到一个与之接近的数字,但很可能不完全相同。
当他们用同一个图像玩同一个游戏很多次时,即使 Alice 的代码没有改变,Bob 仍然会看到与每个图像相关的几个略有不同的数字。
这已经帮助他们减少了对精确数字的依赖。
但是如此小的不确定性仍然伴随着高额的罚款!
如果他们真的想成功,并从 Charlie 那里得到一个好的总分,他们需要想出一个对更高的不确定性健壮的代码。
如果 Alice 仍然想以 0.000156 编码图像 156,以 0.000157 编码图像 157,她最好确保这两幅图像几乎相同,除非他们想通过选择微小的不确定性来牺牲大量的分数。
因此,除非这两个图像实际上非常相似,否则这段代码非常浪费,应该避免使用。
如果不确定性不是明显小于 0.000001,则有相当大的可能性,即使 Alice 想要编码图像 157,机器实际上也将她为图像 156 选择的代码发送给 Bob。或者更不同的东西。
那么,即使鲍勃理解了爱丽丝的理想代码,他仍然会画出错误的图像。如果他们想获得高分,同时保持较低的惩罚,他们必须学会用相似的代码对相似的图像进行编码。
走向有意义的代码
回到二维码的完整游戏,我们也可以用稍微不同的方式来思考这个问题。Alice 不再将每张图片编码成二维平面上的一个点,而是将它们编码成小污点。污迹越小,惩罚越高。
你可以在一个很小的空间里塞进无限多的点。
另一方面,污迹将很快开始重叠,所以你最好确保重叠有点意义。
使用这种新机器和查理更严格的评分可以防止他们只是记住训练数据。他们需要给他们的代码赋予实际意义。
这迫使他们想出一个平滑的代码,或者说连续的,所以*“代码空间”(也叫“潜在空间”* ) 中的相邻区域对*“数据空间”*中非常相似的图像进行编码。这样,他们就不会牺牲太多的分数,因为他们必须非常准确地指定分数,而且不确定性很低。
这自然会导致在代码空间聚类。
他们学到的改进代码包含了更多的意义。代码实际上包含了更多抽象的想法,而不是直接编码图像,这既浪费又脆弱,就像我们在第一部分中讨论的那样。
在一个区域,我们可能会在照片的右下角发现白色吉娃娃的图像,在另一个区域,在照片的中心是所有黑猫玩球的图像,等等。所有过渡都尽可能平滑,以便相邻图像尽可能相似。
暂时离开爱丽丝和鲍勃的世界,劳伦斯·范·德·马腾和杰弗里·辛顿为著名的 MNIST 数据集制作了这种聚类的可视化效果(尽管使用了一种非常不同的技术,称为 t-SNE ),该数据集包含许多不同的数字 0 到 9 的图像。
我们看到相似的数字聚集在一起,例如左下方的零。但更重要的是,在每个数字群中,我们看到相似的风格(如倾斜、笔画宽度等)聚集在一起。
回到爱丽丝和鲍勃。
带着从变化训练中获得的新经验,他们回到了下一届自动编码奥运会。在这里,他们简单地回到他们的老策略,Alice 直接传递代码,没有任何不确定性。
但至关重要的是,他们使用通过变分训练学到的新代码。
训练得到了回报!
有了这个代码,他们在训练中从未遇到过的王牌图像,并彻底摧毁他们的竞争对手。
游戏时间
为了庆祝他们的胜利,他们把学到的代码玩了一会儿。他们发现了一些现在可以表演的非常有趣的把戏。
第一个允许他们在真实照片之间平滑地插值。
他们可以对两幅真实图像进行编码,分别得到一个代码,然后通过中间代码让 Bob 解码,从一幅图像平稳地转换到另一幅图像。
举个简单的例子,让我们假设他们用人的图像重复训练,然后对他们自己的照片进行编码,一张是爱丽丝的,一张是鲍勃的。为了便于举例,我们假设这些代码恰好是 Alice 的(0.0,3.0)和 Bob 的(6.0,0.0)。
他们现在可以不断地在它们之间转换。
假设他们解码了两幅等距的中间图像。这些中间图像将位于(2.0,2.0)和(4.0,1.0)。
当鲍勃解码它们时,他们看到在(2.0,2.0)处的照片基本上是 66.6%的爱丽丝和 33.3%的鲍勃,而在(4.0,1.0)处的照片具有相反的比例,33.3%的爱丽丝和 66.6%的鲍勃。
但重要的是,它不仅仅是原始照片的叠加,就像你可以在 Photoshop 中轻松完成的那样。这真的是一张“三分之一是爱丽丝,三分之二是鲍勃”的人的照片。
通过这种方式,VAEs 允许创建真实世界中不存在的绝对逼真的数据。例如,我们可以对自己和伴侣的照片进行编码,并在它们之间进行插值,以猜测我们的孩子可能长什么样(假设他们也是某种性别混血儿)。
对于照片插值的真实例子,请查看这个名人面孔间插值的极度迷幻视频。
而且这不仅限于图像。正如我们将在下一部分看到的,我们也可以对其他类型的数据进行编码。我们可以想象对我们喜欢的两首歌进行编码,然后听听这两首歌之间的各种插值听起来会是什么样子。或者像 Magenta 团队在他们的 NSynth 项目中展示的那样,我们可以在不同的乐器之间进行插值。
所有这些也打开了巨大的艺术机会。对于一些很棒的例子,看看哈德曼鲁在人造草图之间的插值以及他的许多其他作品。他的 Instagram 账户是人工智能生成艺术的一个很好的来源,使用的技术与爱丽丝和鲍勃正在使用的非常相似。
他们发现的另一个有趣的技巧是,通过稍微修改他们的训练过程,他们实际上可以给他们的一个或多个代码维度赋予特定的含义。这类似于我们在第一部分中讨论的简单的狗/猫和黑/白代码,其中两个维度都有明确的人类可解释的含义。
例如,他们可以用一维编码胡须长度的特殊属性。
让我们假设他们使用第一维度来表示胡子长度,0 表示没有胡子,数字越大,胡子越长。
爱丽丝再次对自己的图像进行编码。自然,爱丽丝不是一个有胡子的女士,这是第一个代码值 0.0。
让我们假设它恰好在这个新代码中以(0.0,4.0)编码。鲍勃现在可以做一些有趣的事情了。他可以画出与(X,4.0)处的代码相关联的图像。X 越大,胡须越长,而保持其他代码维度固定将保持图像的“生动性”。所以他基本上可以现实地预测出爱丽丝留着各种长度的胡子会是什么样子。
关于这方面的真实例子,看看陈曦和他的合作者提出的 InfoGAN 产生的数据。本文使用不同的生成模型,即所谓的生成对抗网络(GAN ),但基本思想是相同的。艺术水平有了巨大的提高,可以生成的图像变得更加详细和真实,但这是开拓这一想法的早期论文之一。
那很有趣!但是玩够了。爱丽丝和鲍勃需要再次集中注意力。他们心中已经有了新的目标!
在这个系列的最后部分,我们将跟随他们的旅程回到自动编码奥运会。这次是在一个新的领域:文本编码。