使用 Azure 笔记本进行轻松的机器学习实验
使用 Microsoft Azure 笔记本电脑和 Microsoft 帐户,轻松快速地开始构建自己的机器学习实验。
Jupyter 笔记本是上帝给那些数据工作者的礼物。他们允许我们用 Julia、Python、R 和更多的(因此 JuPytR)做快速实验。它还混合了实时代码和文档,格式都很漂亮,带有 Markdown 和语法高亮——就像在一篇文章中运行代码一样。它们还允许我们在笔记本内部进行数据可视化。笔记本电脑也是可导出的,因此实验代码和结果可以与感兴趣的各方共享。最后但同样重要的是,它们非常容易使用。
问题是,即使它很容易使用,设置可能是一个痛苦。您还需要在笔记本中安装需要使用的库。这可能是一个持续几分钟到几小时的过程。
幸运的是,微软支持我们。进入微软 Azure 笔记本。它们基本上是托管在云上的 Jupyter 笔记本。您不需要再进行设置,并且处理数据所需的大多数库都在那里。目前支持创建 Python、R 和 F#笔记本。你唯一需要的是一个微软账户。
让我们开始吧。
打开 Azure 笔记本网站
Microsoft Azure Notebooks landing page
若要开始,请前往https://notebooks.azure.com/。您将会看到上面的登录页面。点击登录按钮登录。为此,您需要有一个 Microsoft 帐户。
创建一个库
I have a cloned TensorFlow library and an my own Experiments library.
登录后,您将被重定向到此处。该页面是您的仪表板,将包含您的库,其中包含您的笔记本和相关文件。我已经创建了两个库。要创建一个新的库,点击查看所有按钮之一,转到库页面。
All my libraries in list form in the Libraries page.
如果您选择其中一个,大多数禁用的按钮都会亮起,您现在可以运行、删除、克隆某个库。
现在,让我们通过点击新建库按钮来创建一个库。
Create New Library modal with some values.
点击新建库按钮后会出现一个模态。我们将创建一个名为“测试库”的库。您可以选择将其公开并创建一个 README.md。完成后单击创建按钮。
The Test Library page showing the files we currently have.
点击创建按钮后,我们被重定向到该页面。这列出了我们在测试库中的所有文件,以及我们可以对库进行的所有当前操作。我们勾选了创建 README.md 按钮,这样我们就有了 README.md 文件。
创建笔记本
让我们试着做一个实验,但首先我们需要一个笔记本来做。点击新建按钮创建一个新笔记本。当您这样做时,此模式将会出现:
Creating a Python 3.5 notebook called Diabetes.ipynb
创建一个名为Diabetes.ipynb
的 Python 3.5 笔记本,点击新建按钮。这将创建一个新的 Python 笔记本,其中加载了大多数流行的 Python 数据科学库。您也可以使用相同的过程创建 R 或 F#笔记本。
创建笔记本后,单击其名称将其打开。
Our new Diabetes Python notebook
我们被重定向到空的糖尿病笔记本。在这里,我们将尝试使用来自 scikit-learn 的糖尿病数据集。让我们用 scikit-learn 提供的代码来试用一下数据集:http://scikit-learn . org/stable/auto _ examples/linear _ model/plot _ ols . html # sphx-glr-auto-examples-linear-model-plot-ols-py。我们不需要安装 scikit-learn,因为它已经安装在 Azure Python 笔记本中了。
生成的笔记本
访问此链接查看最终笔记本:https://notebooks . azure . com/n/z 8 xkjt 5 wdha/notebooks/diabetes . ipynb
Our experiment notebook.
结论
如果你想做快速的数据和机器学习实验,而没有安装太多库的麻烦,微软 Azure 笔记本值得一试。看看吧!😃
不,机器学习不仅仅是美化了的统计学
original comic by sandserif
随着对深度学习的大肆宣传开始消退,这个迷因最近在社交媒体上到处都是,在互联网上产生了赞赏的笑声。机器学习真的没什么好兴奋的,或者它只是古老的统计技术的修正,这种观点越来越普遍;问题是这不是真的。
我明白——成为深度学习传道者中过度热情、喝得醉醺醺的一员并不时尚。2013 年鼓吹从屋顶上进行深度学习的人工智能专家现在只是带着一丝懊恼使用这个术语,而是倾向于淡化现代神经网络的力量,以免它们与许多人联系在一起,这些人似乎仍然认为import keras
是跨越每个障碍的一步,他们知道这一点,就比他们的竞争对手有一些巨大的优势。
虽然深度学习确实已经不再是一个有用的流行语,正如 Yann LeCun 所说的,但这种过度修正的态度已经产生了对人工智能的进步、未来和有用性的不健康的怀疑。这一点从关于即将到来的人工智能冬天的讨论中可以清楚地看到,在这个冬天里,人工智能研究预计将像过去几十年一样停滞多年。
然而,这篇文章的目的不是反对人工智能冬天。这也不是说一个学术团体比另一个学术团体更值得深度学习的荣誉;更确切地说,是为了说明信用 是 的到期;我们看到的发展超越了大型计算机和更好的数据集;随着最近在深度神经网络和相关工作中的成功,机器学习代表了世界上最前沿的技术进步。
机器学习!=统计
“当你筹款时,它是人工智能。当你在招人的时候,就是 ML。当你实施时,这是逻辑回归。”
——推特上的每个人
要解决的主要问题,也是这篇文章的标题,是机器学习不仅仅是美化了的统计学——老一套的东西,只是有了更大的计算机和更花哨的名字。这个概念来自机器学习中流行的统计概念和术语,如回归、权重、偏差、模型、等。此外,许多模型近似于通常认为的统计函数:分类模型的 softmax 输出由逻辑组成,使得训练图像分类器的过程成为逻辑回归。
尽管这种思路在技术上是正确的,但将机器学习作为一个整体减少到仅仅是统计学的一个附属部分是相当牵强的。其实比较没有太大意义。统计学是数学的一个领域,处理对数据的理解和解释。机器学习只不过是一类计算算法(因此它从计算机科学中出现)。在许多情况下,这些算法在帮助理解数据方面完全没有用,只在某些类型的不可解释的预测建模方面有帮助。在某些情况下,例如在强化学习中,算法可能根本不使用预先存在的数据集。另外,在图像处理的情况下,将图像称为数据集的实例,将像素称为特征从一开始就有点牵强。
当然,重点不是计算机科学家应该得到所有的荣誉,或者统计学家不应该;像任何研究领域一样,导致今天的成功的贡献来自各种学术学科,其中首先是统计学和数学。然而,为了正确评估机器学习方法的强大影响和潜力,重要的是首先消除错误的观念,即人工智能的现代发展只不过是使用更大的计算机和更好的数据集的古老统计技术。
机器学习不需要统计学的高深知识
听我说完。当我正在学习机器学习的诀窍时,我很幸运地参加了一个致力于深度学习技术的精彩课程,该课程是我本科计算机科学计划的一部分。我们分配的项目之一是在 TensorFlow 中实施和培训 Wasserstein GAN。
在这一点上,我只上了一门统计学导论课,这是一门必修的普通选修课,然后很快就忘记了大部分内容。不用说,我的统计技能不是很强。然而,我能够阅读并理解一篇关于最先进的生成机器学习模型的论文,从头实现它,并通过在 MS Celebs 数据集上训练它,生成不存在的个人的非常令人信服的假图像。
在整个课堂上,我和我的同学们成功地训练了癌症组织图像分割、神经机器翻译、基于字符的文本生成和图像风格转换的模型,所有这些都采用了过去几年才发明的尖端机器学习技术。
然而,如果你问我,或者那堂课的大多数学生,如何计算总体的方差,或者定义边际概率,你可能会得到茫然的目光。
这似乎与人工智能只是古老的统计技术的重新命名的说法有点不一致。
的确,在深度学习课程中,一个 ML 专家可能比一个 CS 本科生有更强的统计学基础。一般来说,信息论需要对数据和概率有很强的理解,我当然会建议任何有兴趣成为数据科学家或机器学习工程师的人培养对统计概念的深刻直觉。但问题仍然是:如果机器学习是统计学的一个分支,那么一个几乎没有统计学背景的人怎么可能对最前沿的 ML 概念有深刻的理解?
还应该承认,许多机器学习算法比大多数神经网络技术需要更强的统计和概率背景,但即使是这些方法也经常被称为 统计机器学习 或统计学习 ,好像是为了将自己与常规的、较少统计的那种区分开来。此外,近年来机器学习领域的大多数炒作创新都是在神经网络领域,所以这一点无关紧要。
当然,机器学习并不是独自生活在一个世界里。同样,在现实世界中,任何希望做很酷的机器学习工作的人可能都在处理各种类型的数据问题,因此也需要对统计学有很强的理解。这并不是说 ML 从不使用或建立统计概念,但这并不意味着它们是一回事。
机器学习=表示+评估+优化
公平地说,对我自己和我的同学来说,我们在算法、计算复杂性、最优化方法、微积分、线性代数,甚至一些概率方面都有很强的基础。我认为,所有这些都比先进的统计学知识与我们正在解决的问题更相关。
机器学习是一类计算算法,它迭代地“学习”某个函数的近似值。华盛顿大学计算机科学教授 Pedro Domingos展示了组成机器学习算法的三个组成部分:表示、评估和优化。
表示包括将输入从一个空间转换到另一个更有用的空间,该空间更容易解释。在卷积神经网络的背景下考虑这一点。原始像素对于区分狗和猫是没有用的,所以我们将它们转换成更有用的表示(例如,来自 softmax 输出的 logits ),它可以被解释和评估。
评价本质上是损失函数。您的算法如何有效地将您的数据转换到更有用的空间?您的 softmax 输出与您的一次性编码标签(分类)有多相似?您是否正确预测了展开的文本序列中的下一个单词(文本 RNN)?你的潜在分布偏离单位高斯(VAE)有多远?这些问题告诉你你的表征功能工作得有多好;更重要的是,它们定义了将学会做什么。
优化是拼图的最后一块。一旦你有了评价组件,你可以 优化表示函数 以提高你的 评价指标 。在神经网络中,这通常意味着使用一些随机梯度下降的变体,根据一些定义的损失函数来更新网络的权重和偏差。瞧啊。你有世界上最好的图像分类器(至少,如果你是 2012 年的 Geoffrey Hinton,你有)。
当训练图像分类器时,除了定义适当的损失函数之外,学习的表示函数具有逻辑输出是完全不相关的。借用像逻辑回归这样的统计术语确实给了我们有用的词汇来讨论我们的模型空间,但是它们没有将它们从优化问题重新定义为数据理解问题。
先不说:人工智能这个词很蠢。 人工智能问题只是计算机还不擅长解决的问题。19 世纪, 机械计算器被认为是智能的(链接)。 既然这个术语与深度学习联系如此紧密,我们已经开始说人工通用智能(AGI)来指代任何比高级模式匹配机制更智能的东西。然而,我们甚至还没有对一般智力的一致定义或理解。人工智能这个术语唯一能做的就是激起人们对所谓的“奇点”或类似终结者的杀手机器人的恐惧。我希望我们可以停止使用这样一个空洞的,耸人听闻的术语来指真正的技术。
深度学习的技术
进一步挑战深度学习的据称统计性质的是,嗯,深度神经网络的几乎所有内部工作方式。当然,全连接节点由权重和偏差组成,但卷积层呢?整流器激活?批量正常化?残留层?退学?记忆和注意力机制?
这些创新是高性能深度网络发展的核心,但它们与传统的统计技术相去甚远(可能因为它们根本不是统计技术)。如果你不相信我,试着告诉一个统计学家你的模型过度拟合,并问他们是否认为随机丢弃你的模型的 1 亿个参数中的一半是个好主意。
我们甚至不要谈论模型的可解释性。
回归超过 1 亿个变量——没问题?
让我也从规模上指出深网和传统统计模型的区别。深度神经网络是巨大的。例如,VGG-16 通信网络架构有大约 1.38 亿个参数。你认为你的普通学术顾问会如何回应一个想要对超过 1 亿个变量进行多元回归的学生?这个想法很可笑。这是因为训练 VGG-16 不是多元回归——而是机器学习。
新领域
在过去的几年里,你可能已经在没完没了的论文、帖子和文章中宣扬机器学习现在可以做的很酷的事情,所以我不会在这上面花太多时间。然而,我要提醒你,深度学习不仅比以前的技术更好,它还使我们能够解决一种全新的问题**。**
在 2012 年之前,涉及非结构化和半结构化数据的问题充其量是一个挑战。可训练的 CNN 和 LSTMs 在这方面是一个巨大的飞跃。这在计算机视觉、自然语言处理、语音转录等领域取得了相当大的进展,并使人脸识别、自动驾驶汽车和对话式人工智能等技术取得了巨大进步。
诚然,大多数机器学习算法最终都涉及到将模型拟合到数据中——从这个角度来看,这是一个统计过程。同样真实的是,航天飞机最终只是一架带翅膀的飞行器,然而我们并没有看到模因嘲笑围绕美国宇航局 20 世纪太空探索的兴奋,将其作为飞机的过度宣传。
与太空探索一样,深度学习的出现并没有解决世界上所有的问题。在许多领域,尤其是在“人工智能”领域,仍有重大差距需要克服。也就是说,它对我们解决复杂的非结构化数据问题的能力做出了重大贡献。机器学习继续代表着世界技术进步和创新的前沿。它不仅仅是墙上的一个裂缝和一个闪亮的新框架。
编辑:
许多人将这篇文章解读为对统计学领域的 diss,或者是对我自己对机器学习的肤浅理解的背叛。回想起来,我后悔把这么多注意力放在 ML 和统计学的不同上,而不是放在我的中心观点上:机器学习不全是炒作。
让我说清楚:统计学和机器学习无论如何都不是不相关的。机器学习完全利用并建立在统计学的概念之上,统计学家在他们的工作中正确地利用机器学习技术。这两个领域之间的区别并不重要,这也是我不应该如此关注的。最近一直在关注贝叶斯神经网络的想法。 BNNs 涉及在给定一些先验信念的情况下逼近神经网络参数的概率分布。这些技术给出了不确定性量化的原则方法,并产生更好的正则化预测。
在研究这些问题时,如果我说我不是在“做统计”,那我就是个白痴,我也不会这么做。这两个领域并不相互排斥,但这并不意味着它们是相同的,当然也不意味着它们没有实质内容或价值。一位数学家可以指着一位研究量子场论的理论物理学家,正确地说她在做数学,但如果这位数学家断言她的物理领域实际上只不过是被过度炒作的数学,她可能会提出异议。
计算科学也是如此:你可能会指着手指说“他们在做统计”,而“他们”可能会同意。统计在机器学习研究中非常重要,许多统计学家处于这项工作的前沿。但是 ML 已经开发了 1 亿个参数的神经网络,具有残差连接和批量标准化、现代激活、退出和许多其他技术,这些技术导致了几个领域的进步,特别是在顺序决策和计算感知方面。它发现并利用了令人难以置信的高效优化算法,利用自动微分和并行运行在令人眼花缭乱的快速和廉价的 GPU 技术。多亏了高级的、优雅简单的张量操作软件,所有这些对任何有基本编程能力的人来说都是可及的。“哦,人工智能只是逻辑回归”有点低估了,你不觉得吗?
如果你像我一样,喜欢与机器学习爱好者们交流,请关注我的 Twitter 和/或LinkedIn。如果你想找 ML 咨询工作,直接联系josephddavison@gmail.com。
没人想要你的神经网络
没有人想要机器学习模型或统计模型。他们希望坏账损失更少,或者他们希望有更多的客户。也许他们想浪费更少的钱付钱给那些做无聊苦工的人。他们会接受你的模型,如果这意味着其中一件事会发生,但这并不意味着他们想要它。
在我成为一名数据科学家之前,我在一家制造电力电缆的公司工作——一束束(通常)包着绝缘材料的铜线,绝缘层上通常还有保护材料。没人想要那些电缆。它们很重,很难移动,所以弄清楚如何运输和储存它们是一件麻烦事。安装它们是一件麻烦事,让它们远离伤害也是一件麻烦事——它们不喜欢阳光,不喜欢水,不喜欢白蚁,这很可惜,因为它们通常被埋在有水和白蚁的地方。
人们不想要这些电缆——他们希望他们的矿井设备能够工作,他们的工厂能够有可靠的电力供应,万一发生火灾,灯光能够保持,这样他们就可以撤离大楼。令人难忘的是,我们被告知一位政治家想要结束他首都的停电,以避免被赶下台。对所有这些人来说,在他们的问题解决之前,电缆是没有用的。
电力电缆是有形的,易于理解,并且具有很高的报废价值,这些都不是数据科学产品的真实情况,它们的购买者仍然不真正想要它们。
你的客户不想要你的产品——他们想要你消除他们生活中的障碍,让他们与家人和朋友共度时光更加轻松愉快。没有人想要捕鼠器——他们只是讨厌在存放食物的橱柜里发现老鼠粪便。那么你的神经网络是如何做到的呢?
如果你的模型和他们真正的目标之间有很强的联系,它就能帮他们做到。你的神经网络可以帮助贷款人减少损失,如果这是对他们用来识别未来坏账的方法的改进。如果它比人类更快更准确地检测到问题,或者如果它可以在事故发生前预测事故,它就可以帮助提高安全性。
难就难在这些东西都不能用现有的评估方法来恰当地衡量。知道 AUC 或 RMSE 有所改善并不能告诉你是否会发现更多的坏账。
因此,数据科学的真正价值必须发生在模型停止和客户问题开始之间。一个糟糕的模型在被熟练使用时可以成功,而一个伟大的模型在不被熟练使用时可能会失败。
除了使用它的技巧之外,关键的决定因素是模型的目标与客户的目标有多匹配。这个因素比算法产生准确结果的能力更重要,是至关重要的因素。对数据科学家来说至关重要的一点是,在学习新算法的每一分钟里,你都应该花一个小时来研究客户的问题。
罗伯特德格拉夫的最后一个媒体故事是 用 SQL 汇总数据
他还是即将出版的《管理您的数据科学项目 》一书的作者
在推特上关注他:https://twitter.com/RobertdeGraaf2
没人理解我…但很快,人工智能可能会
H.A.L 9000,天网,还有来自瓦力的邪恶方向盘。
《2001:太空漫游》中的邪恶 ai、终结者以及深受喜爱的儿童电影瓦力无疑是我们这个时代对人工智能最可怕的描述。
事实上,人工智能正在推动世界发生一些巨大的积极变化;根据对话诊断疾病,预测疾病爆发,甚至写书。
然而,一个全能的有感知能力的人工智能消灭所有人类的想法实际上是世界上许多聪明人的担忧——像埃隆·马斯克这样的亿万富翁创新者已经投入了金钱和资源,以确保我们在未来通过 OpenAI 这样的项目拥有友好的人工智能。
当然,这一切都说明了一个潜在的问题:作为人类,我们害怕我们不了解的东西。结果,我们不信任它。人们不信任 AI,所以在情感上无法与之产生联系。更重要的是,如果 AI 不能识别我们的情绪,就会阻碍我们的交流和进步。这可能会有问题*😗
- 如果一个病人不舒服地告诉机器他们感觉到的症状,它就不能诊断她。
- 如果一个消费者对人工智能客户服务越来越失望,而系统没有相应地调整,企业可能会遭受损失。
- 如果一个客户端正在与一个人工智能讨论一个敏感问题,它拉着一个 Alexa 并开始随机大笑,这可能会造成一个问题。
底线是,人工智能将需要能够理解我们的意思,即使我们并不完全清楚,特别是在零售和医疗领域。
人类和人工智能共存的未来是不可避免的,因此改善与越来越智能的机器的通信是必要的,那么我们如何使这种转变更容易呢?
简单。我们教人工智能移情。
如果我们能学会换位思考,人工智能也能。
首先,理解几个定义很重要:
人工智能描述了能够适应新信息并执行人类能做的各种任务的计算机系统,建立在它已经知道的事情上。
**网飞和 Spotify 利用这样的算法,根据你的观看或收听习惯,筛选出你最喜欢的内容类型。来自麻省理工学院的科学家开发了人工智能,可以根据 MRI 扫描诊断肿瘤。
IBM 的沃森是一个著名的会下棋、分析网络攻击风险、甚至会驾驶汽车的人——沃森甚至在 2011 年的《危险边缘》中赢得了 100 万美元,这让 14 岁的沃森比我更令人印象深刻。
Watson at age 8 vs. Me at age 14. That’s a paper-mâché leg of lamb by the way.
然而,你并不会在对话中真正与这种 AI 互动:它只执行非常具体的任务,也被称为狭义 AI 。
通用人工智能就像是人工智能的最终目标,它构成了一个可以执行人类可以执行的相同任务的人工智能——我们还没有达到那一步,但像 DeepMind 和人脑项目这样的项目正在努力让我们更近一步。
像谷歌助手和 Siri 这样的人工助手非常有用,有一些非常酷的功能,但它们仍然不能真正告诉我们的感觉。为了真正与我们口袋里和我们周围的人工智能联系起来,我们必须从人工助理转移到人工伴侣。那么,我们该怎么教他们呢?
答案是机器学习。**
机器学习 (ML) 是人工智能的一个分支,涉及训练系统通过寻找和识别模式从大量数据中学习。人们相信,制造更智能机器的人工智能技术可能会带来真正的人工智能。为了更深入地了解机器学习,请查看这些文章这里和这里!
移情:好吧,这就是事情变得有点复杂的地方。移情可以分为两种不同的类型:
- 情感共鸣包括感受到与他人相同的情感、个人痛苦或对他人的同情。
- 认知同理心处理的是识别和理解他人情绪的能力,而不一定感觉到它。
如果我们想教会人工智能移情,我们还需要了解人类如何移情。有两种理论可以解释这一点:
- 模拟理论提出,我们试图重现我们在他人身上看到的情绪,以便理解他们,这一想法得到了“镜像神经元”的发现的支持,当我们观察和体验情绪时,镜像神经元会激活。(也许这就是为什么当其他人撞到我们时加拿大人会说对不起?)
- 心理理论认为我们的移情是基于我们通过经验了解到的东西来解释其他人可能的感受。
这是一场分裂科学界的辩论。然而,对于我们的目的来说,哪个是对的并不重要。人工神经网络受到大脑的启发;同样,通过使用机器学习来应用这些理论背后的主要思想来教会我们的人工智能移情,我们可能会弥合人类和人工智能之间的差距。**
我们的脸和声音可以被分析出情绪。
正如我提到的,仿生学,或者说在我们创造的事物中模仿自然设计,对于在人工智能中重现这种人类倾向是至关重要的。我们的最终目标是人工共情,它(至少目前)描述了机器识别和响应人类情感的能力。
与此相一致,让我们关注认知移情,那种涉及识别和理解情感的移情。大多数试图这样做的人工智能使用:
- 情感识别
- 色彩映射
- 声音模式分析
情感识别
遇见盖尔·加朵*。(她其实是神奇女侠,但是不要告诉任何人)。像大多数人一样,我们可以根据她的面部表情来猜测她的感受:*
😢 and 😃 and 😠
你用你的眼睛去看她的脸,然后你的大脑试着去理解她现在的情绪。但是如果更经验性地分析,你的眼睛只是接收视觉信息,在你的视觉皮层进行处理,并将其与你海马体中的记忆联系起来。
这是一个可以使用机器学习技术复制的过程,以创建计算机视觉*,具体来说就是**情感识别(*或面部编码)。
计算机视觉描述的是使用摄像头输入的视觉数据,并通过机器学习技术,学习以算法识别视觉模式的机器。(把摄像头想象成“眼睛”,把算法想象成“大脑”)。
这可以通过在照片的小“块”中找到像素 RGB 值和对比度的不同模式和排列来实现,这些小“块”由过滤它们的被称为 内核 的神经网络中的小函数或“神经元”来识别;该算法然后将这些组块编译成更大的模式。
Microsoft’s Face API determining with 100% certainty that Gal Gadot is happy.
*在**情绪识别的情况下,*这些模式可以是微笑、皱眉、皱起的眉头,甚至是你的鼻子,它们被编译成与情绪相关的面部表情。 Affectiva 是一家已经在使用深度学习算法通过计算机视觉绘制和识别情绪的公司。微软 Azure 的 Face API 可以识别和分类图像和视频中的情绪,为开发者打开了一个新的可能性世界。
颜色变换
这还没有结束:俄亥俄州立大学的研究人员今年进行了一项研究,表明人类可以根据血液流向不同部位引起的面部微妙颜色来确定他人的情绪。
他们通过根据人眼的视觉方式将图像分成两个不同的颜色通道,发现每种情绪都有自己独特的颜色模式,从而找到了这一点。
然后,他们开发了人工智能算法,可以根据这些颜色模式检测情绪,准确率高达 90%。他们已经将其技术推向市场,为企业提供有意义的解决方案。
声音模式分析
实现人工移情的最有希望的途径之一是通过声音模式分析。以类似于计算机视觉和理解现代艺术的方式(原则上),它涉及到把复杂的东西分解成简单的模式,然后找到趋势。说到声音模式,它们可以由以下部分组成:
- ***音高,*可以量化为以赫兹(Hz)为单位的频率,或每秒的声音周期。我们经常把它与音符联系在一起,但它也出现在言语中。
- 音量描述了我们如何感知声压从安静到大声。声压级以分贝(dB)为单位测量某种声音的压力(与大气标准的偏差)。
- 音色处理声音的质量,允许我们区分小号和萨克斯管的声音,即使它们以相同的音高和响度演奏。
- 语气描述了我们如何在语言中使用音高来赋予某些词语强调、* **情感、*等语义
节奏、速度和速率也是标识符,仅举几例。通过使用机器学习和语音记录数据,人工智能可以测量并找到这些品质的模式——例如每个单词之间的时间间隔、语调或讲话的音量——并将它们与特定的情绪联系起来。最棒的是,这些算法甚至不需要处理正在说的实际单词,只需要分析这个人的声音模式。
应用程序是无止境的;精神病学家正在使用声音模式分析软件来帮助他们诊断创伤后应激障碍、双相情感障碍和抑郁症。(与许多心理障碍相关的声音生物标记有时可能人耳听不到,但很容易被机器拾取,例如短声音裂缝或震动。)
人工移情会让生活变得更好。
人工智能正以前所未有的速度发展,它正进入我们生活的方方面面,从我们的通信到我们的医疗保健。但如果我们希望实现真正的人工智能,我们需要能够与它无缝互动;这需要人工智能能够识别我们的感受。实现人工共情为改善我们的生活打开了更好、更有用的工具之门:
- ***人工智能辅助的精神疾病诊断和治疗:*正如我前面提到的,麻省理工学院的研究人员开发了一种模型,利用声音模式分析来识别患者的抑郁症;它的准确率高达 77%。
- 未来可能包括手机应用程序,它可以从你的声音中检测出精神疾病的迹象; 每天记录语音日志可以让你知道自己是否处于危险之中。
- 2015 年,纽约大学的研究人员开发了一种 ML 模型,可以识别人们的 PTSD,准确率也达到 77%。他们目前正在收集更多的数据,以进一步提高识别与 PTSD 和创伤性脑损伤相关的声音模式的准确性。
- *梅奥诊所在 超越口头 **应用的帮助下,*使用 ML 来识别与高风险或冠状动脉疾病相关的声音生物标记,其中一些只能通过软件提取。
- Cogito 是一家公司,其软件可以检测呼叫中心代理人声音中的疲劳以及客户的情绪反应。它可以识别停顿……(尴尬的沉默)……和其他声音特征,帮助代理成为更具同理心的联系点。
- 假设有人被枪指着从自动取款机里取钱。如果自动取款机的摄像头和软件也能识别出那个人脸上的恐惧并通知当局会怎么样?情绪识别有可能极大地提高我们的安全性。
- ***使用 CV 情感识别可以提高营销效率。*通过分析客户对不同营销活动的情绪反应,公司可以专注于有效的策略,并相应地分配预算。
同理心是我们最常见也是最重要的互动和关系的基础。你的家庭医生,你的伴侣,甚至是令人愤怒的不可抗拒的 YouTube 广告——他们都在试图理解你的感受和你想要的,而同理心让这些联系更有价值。
未来将会看到人工智能无处不在,几乎在你的每一次日常互动中。通过教会它识别情绪并做出反应,我们为人类和人工智能能够无缝沟通的未来铺平了道路。这不仅会增加我们和机器之间的共鸣,也会增加彼此之间的共鸣。
关键要点
- 人工共情描述了人工智能系统识别和响应人类情感的能力。
- 这将是创造一个不可避免的未来的关键,在这个未来,人和人工智能必须无缝和直观地互动。
- *使用机器学习, AI 可以学习**识别面部表情、面部微妙的颜色变化以及声音中的生物标记,*这些都与不同的表情相关联。
- 这些过程分别称为 、情感识别、色彩映射、 和 、语音模式分析、 。
- 利用计算机视觉和声音模式分析的这种结合,研究人员正在为我们所有人的更有同情心的未来铺平道路。
感谢你坚持到最后,我希望你喜欢我的第一篇文章!
在做一些研究的时候,我发现了这个对 Danielle Krettek 的采访,她是谷歌移情实验室的创始人和负责人,在采访中,她说为了教会我们的人工智能移情:
“这些机器需要全面了解这个世界,这意味着让它们接触故事讲述者、哲学家、艺术家、诗人、设计师和电影制作人。”
我的问题是:
如果你只能选择一部电影或一本书展示给一个人工智能系统,而它所知道的关于人类和我们世界的一切都基于这一部媒体作品,你会选择哪一部?
我很想听听你的想法!请随时在 LinkedIn 上联系我,或者在 Medium 上关注我,我很乐意谈论人工智能的未来,创新和技术的世界,甚至可能是我们最喜欢的漫威电影。
node2vec:图形数据的嵌入
Hotlinks :
原文: node2vec:面向网络的可扩展特征学习,Aditya Grover 和 Jure Leskovec
算法实现—由我: Github repo — Python3
算法实现—由 algo 作者: Github repo(由 Aditya Grover)—python 2
Showcase 代码: https://github.com/eliorc
动机
嵌入…这个词每个数据科学家都听过,但大多是在 NLP 的上下文中。那么,我们为什么还要费心去嵌入东西呢?
在我看来,创建质量嵌入并将其输入模型,与那句名言“垃圾进,垃圾出”正好相反。
当你把低质量的数据输入到你的模型中时,你就把学习的全部负荷放在了你的模型上,因为它必须学习所有能从数据中得出的必要结论。
相反,当您使用质量嵌入时,您已经在数据中加入了一些知识,从而使模型学习问题的任务变得更加容易。
还有一点要思考的是信息 vs 领域知识。例如,让我们考虑单词嵌入(word2vec)和单词包表示。
虽然两者都可以拥有关于哪些单词在句子中的全部信息,但是单词嵌入还包括领域知识比如单词之间的关系等等。
在这篇文章中,我将谈论一种叫做 node2vec 的技术,它旨在为图中的节点创建嵌入(在 G(V,E,W)这个词的意义上)。
我将解释它是如何工作的,最后提供我自己的Python 3 的实现,还有一些额外的东西。
嵌入过程
那么是怎么做的呢?
嵌入本身的学习方式与 word2vec 的嵌入学习方式相同——使用 skip-gram 模型。
如果你熟悉 word2vec skip-gram 模型,很好,如果不熟悉,我推荐这篇很棒的文章,它详细解释了这个模型,从现在开始,我假设你对它很熟悉。
我能想到的解释 node2vec 的最自然的方式是解释 node2vec 如何生成“语料库”——如果我们理解 word2vec,我们就已经知道如何嵌入语料库。
那么我们如何从图中生成这个语料库呢?这正是 node2vec 的创新之处,它以一种智能的方式做到了这一点,这是使用采样策略完成的。
为了从输入图中生成我们的语料库,让我们把一个语料库看作一组有向无环图,最大出度为 1。如果我们考虑一下,这是一个文本句子的完美表现,句子中的每个单词都是一个节点,它指向句子中的下一个单词。
Sentence in a graph representation
通过这种方式,我们可以看到 word2vec 已经可以嵌入图形了,但是是非常特定类型的图形。
然而,大多数图形并没有那么简单,它们可以是(不)定向的,(不)加权的,(循环的)并且在结构上基本上比文本复杂得多。
为了解决这个问题,node2vec 使用一个可调整的(通过超参数)采样策略来采样这些有向无环子图。这是通过从图的每个节点生成随机行走来完成的。很简单,对吧?
在我们深入研究采样策略如何使用超参数来生成这些子图之前,让我们来看一下这个过程:
Node2vec embedding process
抽样策略
现在我们已经有了大致的了解,是时候深入了解了。
Node2vec 的采样策略,接受 4 个参数:
— 步数:从图中的每个节点生成的随机步数
— 步长:每次随机步中有多少个节点
— P :返回超参数
— Q : Inout 超参数
以及标准的 skip-gram 参数(上下文窗口大小、迭代次数等)。)
前两个超参数非常简单明了。
随机漫步生成算法将遍历图中的每个节点,并将生成< 漫步数量 >随机漫步,长度< 漫步长度 >。
Q 和 P ,用可视化更好解释。
假设你正在随机行走,刚刚从节点< t >过渡到下图中的节点<v>(摘自文章)。
从< v >过渡到他的任何一个邻居的概率是
< 边权重>*<α>(归一化),其中< α >取决于超参数。
P 控制访问< v >后回到< t >的概率。
Q 控制着探索图表中未被发现部分的概率。
直观地说,这有点像 tSNE 中的困惑参数,它允许你强调图形的局部/全局结构。
不要忘记重量也被考虑在内,所以最终的出行概率是:
1 的函数。行走中的上一个节点
2。p 和 Q
3。边缘重量****
理解这一部分很重要,因为它是 node2vec 的本质。如果你没有完全理解抽样策略背后的思想,我强烈建议你再读一遍这部分。
使用采样策略,node2vec 将生成“句子”(有向子图),这些句子将用于嵌入,就像 word2vec 中使用的文本句子一样。如果工作正常,为什么要改变呢?
代码(展示)
现在是将 node2vec 付诸行动的时候了。你可以在这里找到 node2vec 测试的完整代码。
我使用 node2vec 算法的实现作为例子,它增加了对分配节点特定参数(q,p,num_walks 和 walk length)的支持。
我们要做的是,利用欧洲足球队的形成,嵌入 7 个不同俱乐部的球队,球员和位置。
我将要使用的数据来自 Kaggle 上的 FIFA 17 数据集。
在 FIFA(eas sports)中,每支球队都可以用一个图形来表示,见下图。
Formation example from FIFA17, easily interpreted as a graph
正如我们所看到的,每个位置都与其他位置相连,并且在玩游戏时,每个位置都被分配了一个玩家。
这里有几十种不同的地层,它们之间的连通性各不相同。还有一些类型的位置在一些地层中存在,但在其他地层中不存在,例如“LM”位置在这个地层中不存在,但在其他地层中存在。
这就是我们将要做的事情。节点将是球员,球队名称和位置
2。对于每个团队,创建一个单独的图,其中每个球员节点连接到他的团队名称节点,连接到他的队友节点,并连接到他的队友位置节点。
3。将 node2vec 应用到结果图中
*注意:为了给团队内部和团队之间的每个位置创建单独的节点,我给相似的节点添加了后缀,并且在 walk 生成之后我已经删除了它们。这是一个技术问题,检查回购中的代码以便更好地理解
输入数据的第一行如下所示(经过一些排列):
Sample rows from the input data
然后,我们使用 FIFA17 格式构建图表。
使用我的 node2vec 包,图必须是networkx.Graph
的一个实例。
检查图边之后,我们将得到以下结果
**for edge in graph.edges:
print(edge)>>> ('james_rodriguez', 'real_madrid')
>>> ('james_rodriguez', 'cm_1_real_madrid')
>>> ('james_rodriguez', 'toni_kroos')
>>> ('james_rodriguez', 'cm_2_real_madrid')
>>> ('james_rodriguez', 'luka_modric')
>>> ('lw_real_madrid', 'cm_1_real_madrid')
>>> ('lw_real_madrid', 'lb_real_madrid')
>>> ('lw_real_madrid', 'toni_kroos')
>>> ('lw_real_madrid', 'marcelo')
...**
正如我们所看到的,每个球员都根据阵型与他的球队、位置和队友联系在一起。
所有附加在位置上的后缀将在走步计算后返回到它们原来的字符串(lw_real_madrid
→ lw
)。
现在我们有了图,我们执行 node2vec
**# pip install node2vecfrom node2vec import Node2Vec# Generate walks
node2vec = Node2Vec(graph, dimensions=20, walk_length=16, num_walks=100)# Reformat position nodes
fix_formatted_positions = lambda x: x.split('_')[0] if x in formatted_positions else xreformatted_walks = [list(map(fix_formatted_positions, walk)) for walk in node2vec.walks]node2vec.walks = reformatted_walks# Learn embeddings
model = node2vec.fit(window=10, min_count=1)**
我们给node2vec.Node2Vec
一个networkx.Graph
实例,在使用.fit()
(它接受任何我们得到的参数gensim.models.Word2Vec
)后,我们得到一个gensim.models.Word2Vec
实例。
首先,我们将检查不同节点之间的相似性。
我们期望与一个团队最相似的节点,会是它的队友:
**for node, _ in model.most_similar('real_madrid'):
print(node)>>> james_rodriguez
>>> luka_modric
>>> marcelo
>>> karim_benzema
>>> cristiano_ronaldo
>>> pepe
>>> gareth_bale
>>> sergio_ramos
>>> carvajal
>>> toni_kroos**
对于不熟悉欧洲足球的人来说,这些确实都是皇马的球员!
接下来,我们检查与特定位置的相似性。我们希望球员们踢那个位置,或者更糟糕的是接近那个位置
**# Right Wingers
for node, _ in model.most_similar('rw'):
# Show only players
if len(node) > 3:
print(node)>>> pedro
>>> jose_callejon
>>> raheem_sterling
>>> henrikh_mkhitaryan
>>> gareth_bale
>>> dries_mertens# Goal keepers
for node, _ in model.most_similar('gk'):
# Show only players
if len(node) > 3:
print(node)>>> thibaut_courtois
>>> gianluigi_buffon
>>> keylor_navas
>>> azpilicueta
>>> manuel_neuer**
在第一次尝试中(右边锋),我们确实从不同的俱乐部得到了不同的右边锋,再次完美的匹配。
然而在第二次尝试中,我们得到了除 Azpilicueta 之外的所有守门员,Azpilicueta 实际上是一名后卫——这可能是因为守门员与球队没有太多联系,通常只与中后卫有联系。
效果很好,对吧?在我们结束之前,让我们使用 tSNE 来降低维度并可视化玩家节点。
Visualization of player nodes (tSNE reduced dimensionality)
看看吧,我们根据不同的俱乐部得到了漂亮的聚类。
最后的话
图形数据几乎无处不在,如果没有,通常可以放在图形上,但 node2vec 算法还不太流行。
该算法还通过其超参数赋予了极大的灵活性,因此您可以决定您希望嵌入哪种信息,并且如果您可以选择自己构建图表(并且不是给定的),您的选择是无限的。
希望你会在这篇文章中找到用处,并为你的机器学习武器库增加一个新工具。
如果有人想为我的 node2vec 实现做贡献,请联系我。
噪音不是数据的敌人。噪音就是数据。
在分析数据时,有三个组成部分。
首先,这是现实——这是数据的来源。
第二,有数据,这是通过数据收集过程过滤的现实的点滴。数据是数据的子集,但不是全部。
第三,有一个模型,它可以从第一原理推导出,也可以从手头的数据归纳出。这就是我们认为现实看起来的样子,一般来说,这是不完整的。
模型偏离现实有两个阶段。我们称之为噪声的地方通常出现在第二阶段,即模型与数据相匹配的阶段。根据定义,噪声是指数据与模型不匹配的地方。一方面,大量的噪音确实意味着模型不能很好地与数据形式的现实相匹配,就我们所知,模型不是很好,不应该理所当然地认为是现实的反映。换句话说,你看到的价格并不是真实价值的真实反映,你可能要讨价还价,可以这么说。但是,与此同时,除了在统计学的便利假设中,噪声很少是真正随机的。它代表了你的模型可以改进的地方,即使是在数据这一小块现实中。虽然产生大量噪音的模型本身不一定是一件好事,尤其是如果你的目标是依靠模型来“商品化”信息(告诉你什么是合适的价格,而不是说你需要在某些事情上讨价还价),但有时没有明显的“合适的价格”,你必须讨价还价,如果是这样, 你不妨知道情况是怎样的——理解噪音中的模式,即使它们没有直接指向你想知道的东西,也只能有助于启发,即使是在你可能没有预料到的方向上。
这是在你处理理论可能偏离现实的第一阶段之前:数据生成和数据收集过程很少是一对一的过程。简单的、可预测的和常规的数据比复杂的、杂乱的和奇怪的数据更容易获得,如果仅仅从数据可用性的本质来看的话。不幸的是,在将模型与数据进行匹配时,针对噪声的偏差只会增加采样偏差。由于除了在极少数情况下,奇怪的数据很少对形成结果至关重要,所以评估样本选择中奇怪现象的影响并不容易,除非当它们发生时,会产生严重的后果(金融崩溃等)。在分析过程中,需要记住这一点。
噪声,被定义为数据,甚至现实,偏离模型的情况,不是浪费。这就是所有潜在的未来洞察力、成长和学习的机会所在。是的,从长远来看,你确实想减少噪音——因为这是你正在学习的标志,但是,你应该带着尊重和认真对待它。有时,您甚至可能想要放大噪声,故意对数据的杂乱部分进行过采样,以便您可以更深入地研究它,至少在中短期内是这样。
无人驾驶汽车转向的非人工智能方法
Udacity 无人驾驶汽车纳米学位项目第二学期的最后一个项目是使用控制理论的概念在模拟器中控制汽车。
目前有三种控制自动驾驶汽车转向的方法:
- 人工智能方法(看看我在之前写的基于行为克隆和深度神经网络的解决方案)
- 非人工智能方法(使用控制理论和数学计算转向角度)
- 以上两者的组合
在本帖中,我们将讨论第二个问题。在控制理论中,可以应用在自动驾驶汽车上进行转向的方法之一叫做 PID 控制器 ( P 比例 I 积分 D 微分控制器)。维基百科将 PID 控制器定义为:
工业控制系统中常用的一种控制回路反馈机制。PID 控制器连续计算误差值 e(t) 作为所需设定值和测量过程变量之间的差值,并进行校正。
在现实世界中,PID 控制器被用于从自主船舶驾驶到无人机自动驾驶。事实证明,在他们的 openpilot 项目中, comma.ai 实际上也使用了这种方法的变体。
但是 PID 到底是什么呢?
PID 控制器的工作原理其实很简单。在下面的框图中,我们可以将 r(t) 视为车道中的期望位置,该位置来自我们的定位和路径规划系统。使用传感器测量车道中的位置(地面实况),并用 y(t) 表示。误差值 e(t) 将是 r(t) 和 y(t) 之间的差值。
PID 控制器试图通过应用调整或控制变量 u(t) (在我们的例子中,这是转向角)来最小化误差率 e(t) 。
u(t) 的校正值由比例、积分和微分系数定义。
Source: Wikipedia
u(t) 的修正值可以正式表示为:
Source: Wikipedia
PID 反馈机制
让我们更详细地看看 PID 控制器的不同反馈元件。
- 比例反馈——我们需要做的调整的速率与错误率 e(t) 成比例。天真的想法会让你问我们是否还需要什么,对吗?我们需要做的就是将转向角设置成与计算误差成比例,我们就完成了!不幸的是,这并不容易。这个部件没有考虑质量和惯性。仅在我们的控制器中使用该组件将导致所谓的过冲。这里需要记住的重要一点是,该分量代表当前(当前)误码率对系统的增益(影响)。它不考虑误差值的过去和未来的变化。
- 积分反馈——随着时间的推移而增加,涵盖了误差值太小且比例反馈难以检测到的情况。它看过去,日积月累。如果它被用作 PID 控制器中的单个元件,它对减小误差值的作用也非常缓慢。
- 导数控制器——能够预测误差值,从而预测系统的未来状态。
有相当多的视频解释 PID 控制器,但我个人喜欢这个:
当谈到我的项目中的 PID 反馈系数时,我是手动选择的。有一种称为旋转的特殊方法,可以自动为 PID 控制器寻找正确的参数。
最后结局
该项目的源代码可以在我的 Github repo 中找到:
在 GitHub 上创建一个帐户,为 CarND-PID-Control 项目的开发做出贡献。
github.com](https://github.com/bdjukic/CarND-PID-Control-Project)
非标准、弱监督分类问题
传统的监督学习(又名。分类),假设分类问题的完全标记的训练集。
然而,在许多设置中,由于成本、专家的有限知识、传感器或数据收集器的有限灵敏度等等,我们可能没有完全监督的分类问题定义。在这些情况下,弱监督解决方案可能适用。
这意味着我们需要推广分类问题的定义。要考虑的第一个扩展是关于实例-标签关系:最简单的分类问题假设一对一的实例-标签分类。这意味着(训练集中的)每个实例都映射到一个标签。然而,一般的设置是 N 对 N 的情况:每个实例可以有许多标签,或者实例包可以共享同一个标签(多实例学习,参见 Dietterich 等人的工作)。
那么,一般来说,分类问题可能是多实例、多标签的。这为定义机器学习中的弱监督铺平了道路。弱点可以应用于两个级别:学习级别和预测级别。
学习监督不力
我们可以定义不同的弱监管模型,在例子中提供不同水平的信息。
- 半监督分类:这是最简单也是最常见的情况,数据集的一部分被标记,而另一部分没有被标记。
- 候选标签:我给每个实例分配更多的标签,标签是在一组标签中选择的。所以问题是要找到其中哪个才是正确的标签。
- 概率标签:每个标签以给定的概率分配给每个实例。
- 不完整的类别分配:每个候选人仅被分配了所有标签的部分列表。
- 人群注释:我有一套非专业人士给我贴的标签,我不能相信他们,因为他们太吵了。
- 标签约束:我知道一包实例属于同一个标签,但不知道那是哪一个。
- 标签比例:我知道一组实例中标签的比例,但是我们不知道每个标签具体给了哪些实例。这方面的一个例子是,您已经标记了关于部分已知医疗设置的数据。例如,在人工授精中,你知道有多少胚胎被植入女性子宫,以及它们成功的比例,但不知道具体是哪些。
预测监管不力
监管不力也适用于预测。这其实挺不常见的。通常你没有关于预测的监督数据,而在某些特殊情况下,它可能会发生。预测方面的情况包括:
- 无监督:这是最常见的情况,在预测中没有提供监督
- 多标签约束
- 标签比例:我知道要预测的数据比例,比如在垃圾邮件过滤问题上。
尽管没有从完全监管到弱监管的连续范围,但我们可以定义一个分类法:
- 对于个体分类:半监督包含在候选标签中,候选标签又包含在概率标签中。
- 对于分组分类:标签比例和相互标签包含在候选标签中。
从标签比例中学习
我们现在深入研究弱监管的一种情况,即从标签比例中学习。
训练集被分成多个存储桶。我们不知道具体实例的标签,除了一些我们知道详细标签的特殊实例。对于其他桶,我们只知道标签比例。
在下图中,我们有两个可能的标签,即红色和绿色。有些桶只有概率而没有标签,而其中两个桶(表中的第二个和第五个)有实际的单独标签样本。
这与聚合匿名化的设置基本相同。不幸的是,这是一个有问题的设置,因为很难分解。
一个可能的解决方案在于将问题转化为概率分类问题:我将桶的概率映射到每个实例的每个标签的概率。
然后,我们可以尝试完成数据,只考虑一致的完成。
然而,这仅适用于小包,因为复杂性是指数级的。当实例包的大小增加时,比方说每个包超过 20 个元素,您就不能使用完整的算法。在这种情况下,您可以使用基于马尔可夫链蒙特卡罗的近似法。它们可以导致与精确解的质量相当的结果质量,并且具有线性复杂度。
包扎
有趣的是,到目前为止,大多数弱监督学习配置还没有被任何研究成果触及。这里有一个表格,显示了所有现有的贡献和仍然需要填写的空白单元格。
那时仍有大量的研究机会。
警告:您可能还希望确保表格中所有缺失的单元格都映射到现实世界中的合理问题。
这个故事的灵感来自 Jose A. Lozano 在法国波城举行的 ACM SAC 2018 大会上的主题演讲。
金融市场的平稳性和记忆性
为什么不应该相信任何平稳性检验,为什么记忆与非平稳性无关。
Artistic impression of a multiverse. Credit: Jaime Salcido / EAGLE Collaboration
平稳性和时间序列的可预测性是时间序列记忆的一个特例,是量化投资过程的基本概念。然而,这些经常被从业者和研究人员误解,正如新书金融机器学习的进展的第五章所证明的。上周在耶鲁大学的会议结束后,我很高兴地与一些出席资产管理中机器学习的兴起的人阐明了这些误解,但我开始认为这个问题如此普遍,值得进行公开讨论。
在这篇文章中,我就金融市场的非平稳性和记忆性提出了一些缺乏文献证明的观点,有些观点违背了计量经济学的正统观点。所有的论点都有逻辑、数学、反例和/或最后用 python 代码做的实验作为支持。
这里提出的论点可以分为实用论点和技术论点:
技术要点:
- 不可能用在有限时间间隔内观察到的单一路径来检验一个时间序列是否是非平稳的——不管时间间隔有多长。平稳性的每一个统计测试都对潜在过程所属的扩散家族做了额外的假设。因此,零假设拒绝可以表示扩散假设不正确的经验证据,或者扩散假设是正确的但是零假设(例如,单位根的存在)是假的。统计测试本身并不能确定哪种情况成立。
- 与金融机器学习进展中声称的相反,不存在“平稳性与记忆困境”(一个与另一个无关),记忆并不意味着偏度或过度峰度。
- 时间序列的迭代微分并没有使时间序列更加平稳,而是使时间序列更加无记忆;时间序列可以是无记忆的,也可以是非平稳的。
- 至关重要的是,非平稳但无记忆的时间序列很容易欺骗(单位根)平稳性测试。
记忆的概念和时间序列的可预测性是紧密相关的,我们在我们的黄皮书中讨论了后者。我将借此机会分享我们在时间序列中量化记忆的方法。
实用外卖:
- 市场(尤其是金融时间序列)是非平稳的,这有着直观的意义,但任何试图从统计学上证明这一点的努力都注定是有缺陷的。
- 量化投资管理需要平稳性,但 不是 金融时间序列的平稳性、可交易模式的“平稳性”或持续性或者alpha在(足够长的)时间(地平线)上。
平稳性
简单来说,平稳性就是事物不随时间变化的属性。
量化投资经理需要平稳性
每一项量化投资管理努力的核心都是假设市场中存在过去盛行、将来也会盛行的模式,人们可以利用这些模式在金融市场中赚钱。
在部署资本之前,通常需要成功地寻找这些模式,通常被称为alpha*,并预期它们会随着时间的推移而持续存在。因此,平稳性是量化投资管理固有的一厢情愿的假设。*
金融市场的平稳性是自我毁灭的
然而,阿尔法往往是他们自己成功的受害者。阿尔法越好,随着时间的推移越有可能被竞争对手复制,因此也就越有可能随着时间的推移而消失。因此,每一个预测模式必然是一个暂时的或短暂的制度。该政权将持续多久取决于阿尔法搜索的严格程度,以及对其开发的保密程度。
阿尔法的短暂是有据可查的;例如,我强烈推荐 Igor Tulchinsky 的新书《Unrules: Man,Machines and The Quest to Master Markets》。
关于金融市场高度非平稳的普遍看法,非平稳性通常是指数学意义上的,通常是指金融时间序列。
时间序列平稳性不能用一个有限样本来证伪
在时间序列(又名随机过程)的情况下,平稳性有一个精确的含义(如预期的);事实上是两个。
当时间序列的所有属性不因时间原点的改变或时间平移而改变时,称该时间序列为强平稳*。当时间序列的均值和自协方差函数不随时间原点或时间平移的变化而变化时,称该时间序列为二阶平稳,或弱平稳。*
直观地说,平稳时间序列是其局部属性随时间保持不变的时间序列。因此,毫不奇怪,在过去几十年中,它一直是计量经济学中的一个关键假设,以至于人们经常认为,从业者应该在进行任何建模之前首先使时间序列平稳,至少在 Box-Jenkins 学派中是这样。
这是荒谬的,原因很简单,(二阶)平稳性,作为一个属性,不能从一个单一的有限样本路径被推翻。是的,你没看错!请继续阅读,了解原因。
但是在深入探讨一个近乎哲学的论点之前,我们先来举一个具体的例子。
Draw of a time series on a uniform grid of 1000 times between t=0 and t=1.
我们来考虑一下上面的情节。这是平稳时间序列的图吗?如果你简单地根据这个情节来回答,你可能会得出结论,它不是。但我相信你已经看出了其中的诀窍,所以你可能想要进行一个所谓的“平稳性测试”,这可能是最广泛使用的测试之一,即 Augmented-Dickey-Fuller 测试。如果你这样做,你会得到以下结果(最后是源代码):
*ADF Statistic: 4.264155
p-Value: 1.000000
Critical Values:
1%: -3.4370
5%: -2.8645
10%: -2.5683*
正如你所看到的,ADF 测试不能拒绝零假设,即时间序列是一个有单位根的 AR,这(某种程度上)证实了你最初的直觉。
现在,如果我告诉你,上面的图是从均值为 100 的高斯过程和自协方差函数中提取的
那么我肯定你会同意这确实是从(强)平稳时间序列中得出的结论。毕竟,它的均值和自协方差函数在时间平移下是不变的。
如果你仍然感到困惑,这里有一个更长时间范围内的相同结论:
Same draw as above but zoomed-out.
我敢肯定你一定在想,它看起来更像你对一个平稳时间序列的期望(例如,它在视觉上是均值回复的)。让我们通过 ADF 测试来确认这一点:
*ADF Statistic: -4.2702
p-Value: 0.0005
Critical Values:
1%: -3.4440
5%: -2.8676
10%: -2.5700*
事实上,我们可以拒绝零假设,即时间序列在 0.05%的 p 值是非平稳的,这给了我们很大的信心。
然而,这两个实验之间的过程并没有改变。事实上,即使使用的随机路径是相同的,两个实验都有足够的点数(至少一千)。那到底怎么了?
直觉上,尽管第一个实验有足够大的样本量*,但它没有跨越足够长的时间间隔来表征潜在的过程,并且我们不可能事先知道这一点!*
要点是,如果不做任何额外的假设,从有限时间间隔内观察到的单一路径来检验时间序列是否平稳是根本不可能的。
有两个假设经常被实践者和研究者忽略,以至于导致错误的结论;一个隐式假设和一个显式假设。
- 隐含的假设
平稳性是随机过程的特性,而不是路径的特性。试图从单一路径测试平稳性应该隐含地依赖于这样一个假设,即手边的路径对潜在过程的性质提供了足够的信息。正如我们在上面看到的,情况可能不是这样,更重要的是,我们没有办法排除这个假设。因为路径看起来不像均值回复并不意味着底层过程不是静止的。你可能没有观察到足够的数据来描述整个过程。
沿着这条思路,任何金融时间序列,无论是否通过 ADF 检验,总是可以扩展为通过 ADF 检验的时间序列(提示:存在平稳随机过程,其路径空间是普适的)。因为我们不知道未来会发生什么,严格地说,说金融时间序列是非平稳的有点滥用,至少和说金融时间序列是平稳的一样。
在缺乏平稳性证据的情况下,时间序列不应该被假设为非平稳的——我们不能简单地在统计上偏向一个属性而不是另一个。这类似于任何关于二元命题 A 的逻辑推理:没有 A 成立的证据永远不是 A 不成立的证据。
假设金融市场是非平稳的,作为一条 公理 可能比假设市场由于结构原因是平稳的更有 实际意义。例如,预期生产率、全球人口和全球产出(所有这些都与股票市场相关)会随着时间的推移而增长,这并不遥远。然而,这并不能使更多的具有统计意义,而且这是一个工作假设,我们根本无法根据数据(在日照下)使其无效。**
2.显式假设
平稳性的每一个统计检验都依赖于一个假设,即潜在过程的扩散必须位于扩散的类别中。没有这一点,我们就无法构建用于测试的统计数据。
常用的(单位根)检验通常假设真实的扩散是自回归或 AR 过程,并检验单位根的不存在作为平稳性的代理。
因此,导致拒绝零假设的经验证据可能指向一个事实,即潜在的过程不是 AR,或者它不是静态的,或者两者都是!单元根测试本身不足以排除底层流程可能不是 AR 流程的可能性。
这同样适用于对潜在扩散进行不同假设的其他平稳性测试。没有模型就没有统计假设检验,也没有统计假设检验能够验证它所基于的模型假设。
求平稳阿尔法,不求平稳时间序列
鉴于我们无法在不对时间序列的扩散进行假设的情况下测试时间序列是否平稳,我们面临两种选择:
- 假设扩散并测试平稳性
- 学习预测模型,假设或不假设平稳性
由于 Box-Jenkins 方法的影响,前一种方法是计量经济学文献中最常用的方法,而后一种方法更符合机器学习的精神,即从观察值灵活地学习数据生成分布。
为金融市场建模是困难的,非常困难,因为市场是复杂的,几乎是混沌的系统,信噪比非常低。任何正确描述市场动态的尝试——例如试图构建静态转换——作为构建阿尔法的要求,都是勇敢的、违反直觉的、低效的。
阿尔法是市场特征的函数,可以预测绝对或相对的市场变动。要被信任,alpha 应该被期望随着时间的推移而保持不变(即,在宽松的意义上是静止的)。然而,底层过程本身是否是静态的(在数学意义上)完全无关紧要。价值、规模、动量和套利是几十年来有据可查的交易理念的例子,与价格或收益序列的平稳性无关。
但是平稳性已经足够了,让我们继续讨论市场记忆的本质。
记忆
直观上,当一个时间序列的过去值与其未来值相关时,它应该被认为具有记忆性。
为了说明一个关于记忆的常见误解,让我们考虑一个简单但有代表性的例子。在金融机器学习的进展中,作者认为
“大多数经济分析遵循两种范式之一:
- Box-Jenkins:回报是固定的,但是没有记忆
- Engle-Ganger:对数价格具有记忆性,但是它们是非平稳的,协整是使回归在非平稳时间序列上起作用的技巧[…]”
为了充分利用这两个词,作者建议构建加权移动平均过程
其系数基于具有固定窗口的分数微分的概念来确定,作为对数收益的替代(对数价格的一阶微分)。笔者推荐选择分数微分度最小的 0 < d < 1 for which the moving average time series passes the ADF stationarity test (at a given p-Value).
The whole approach begs a few questions:
- Is there really a dilemma between stationarity and memory?
- How can we quantify memory in time series so as to confirm whether or not they are memoryless?
- Assuming we could find a stationary moving average transformation with a lot of memory, how would that help us generate better alphas?
量化记忆
直观上,很容易看出移动平均过程通过构造表现出记忆性(移动平均的连续观察值必然是相关的,因为它们部分是使用输入时间序列的相同观察值计算的)。然而,并不是每个有记忆的时间序列都是移动平均线。要确定平稳时间序列是否有记忆,应该有一个量化任何时间序列记忆的框架。我们已经在我们的黄皮书中解决了这个问题,下面是一个简要的总结。
指导任何测量时间序列记忆方法的定性问题如下。了解过去能让我们了解未来吗?换句话说,知道到现在为止的所有过去的值是否减少了我们对时间序列的下一个值的不确定性?
随机变量中不确定性的标准度量是它的熵,当它存在的时候。
The entropy of a probability distribution with density function p with respect to a base measure dμ. The entropy of a random variable is that of its probability distribution.
类似地,在观察另一个随机变量后,一个随机变量中留下的不确定性通常由条件熵来度量。
Conditional entropy of y given x.
因此,时间序列中记忆的一个候选度量是关于时间序列的未来值的不确定性减少,这可以通过观察所有过去的值来实现,在无限数量的这种过去的值的极限情况下。我们称之为时间序列自动可预测性的。**
Measure of memory or auto-predictability of a time series.
当它存在时,自动可预测性的度量总是非负的,并且当且仅当时间序列的所有样本在时间上相互独立时为零(即,过去与未来无关,或者时间序列是无记忆的)。
在平稳时间序列的情况下,PR({X})总是存在的,并且由任何观测的熵与时间序列的熵率之差给出。
Measure of auto-predictability of a stationary time series.
在我们的黄皮书中,我们提出了一种基于最大熵的方法来估计 PR({X})。下面这个图说明了股票、期货、货币的内存有多大。
Memory in daily returns of currencies, U.S. futures and U.S. stocks.
记忆与平稳性无关
上述讨论的一个直接结果是,时间序列既可以是静态的,也可以有大量的记忆。一个并不排除另一个,事实上,一个仅仅是与另一个相关的 而不是 。
事实上,在平稳高斯过程的情况下,可以表明自动可预测性的测量结果为
Measure of auto-predictability of a stationary Gaussian time series with power spectrum g.
值得注意的是,PR({X})=0 当且仅当功率谱为常数,即时间序列为平稳高斯白噪声,否则 PR({X}) > 0。平稳的白噪声不会因为它是平稳的而缺乏记忆,它缺乏记忆是因为它是,嗯……一个白噪声!
功率谱越不均匀,时间序列内存越多。自协方差函数越平坦,功率谱越陡峭,因此自可预测性的度量就越高,时间序列的记忆性就越强。这种平坦自协方差函数的一个例子是平方指数协方差函数
在输入长度标度参数 l 趋于无穷大的极限内。
Independent random draws from the same stochastic process, a mean-zero Gaussian process with Squared-Exponential covariance function, with output and input scale 1.
简而言之,不存在平稳性 vs .内存困境。正如 Box-Jenkins 方法所提倡的,实践者头脑中的混乱来自于对迭代微分过程中发生的事情的误解。下一节将详细介绍这一点。
记忆与偏度/峰度无关
关于记忆的另一个误解是“记忆会带来偏斜度和过度峰度”。这也是不对的。如前所述,有可能产生高斯型(因此既不是偏斜的也不是薄态的)、平稳的、具有任意长记忆的时间序列。
迭代微分、平稳性和记忆
迭代微分不会使时间序列更加平稳,它会使时间序列更加无记忆!
在后移运算符的意义上,(离散时间)时间序列的微分非常类似于高中所学的曲线微分。
我们对一条曲线微分得越多,这条曲线就越有可能经历不连续/突变(当然,除非它是无限可微的)。
直觉上,同样地,一个时间序列在后移算子意义上被区分得越多,该时间序列将经历越多的冲击(在随机意义上),因此其样本将越接近相互独立, 但不一定是同分布的 !
一旦一个时间序列被微分了足够多的次数,以至于它变得无记忆(即它有相互独立的样本),它本质上就是一个随机游走, ,尽管不一定是一个平稳的 。我们总是可以构造一个非平稳的时间序列,无论它被微分多少次,永远不会变成平稳的。这里有一个例子:
Example time series cannot be made stationary by iterative differentiation. {W} is the standard Wiener process.
它的一阶微分是完全无记忆的,因为 Wiener 过程的增量是独立的。
它的方差函数 g(t)是时变的,因此{y}是非平稳的。
类似地,对于每个 d>0,{y}的阶-(d+1)微分既是无记忆的,也是非平稳的。具体来说,后续的迭代微分读取
并且它们的时间相关方差函数读作
该表达式对于每个 d 都在 t 中展开,对于任何t都不会在 d 中收敛。换句话说,连续微分不会使方差函数均匀,因此不会使该时间序列更加平稳!
一个随机游走,不管是否平稳,通常都能通过大多数单位根测试!
从业者对迭代微分和平稳性的困惑源于这样一个事实,即大多数单位根检验会得出无记忆时间序列是平稳的结论,尽管事实不一定如此。
让我们以 ADF 测试为例。
Regression model underpinning the Augmented Dickey-Fuller test.
如果一个时间序列{ y }是无记忆的但不是平稳的,支持 ADF 检验的普通最小二乘(OLS)拟合不能产生完美的拟合。OLS 如何用足够大的样本来解释这种偏离?由于时间序列是无记忆的,OLS 通常会找到γ接近 1 的证据,因此 ADF 检验应该拒绝γ=0 的零假设,从而得出时间序列没有单位根(即,是一个平稳的 AR)的结论。{ y }的时变方差通常将通过平稳噪声项{ e }来观察。
为了说明这一点,我们在 0 和 1 之间均匀地随机产生 1000 个随机抽取,并且我们使用这些抽取作为 1000 个独立产生的零均值高斯分布的标准偏差。结果如下图所示。
A non-stationary memoryless time series (left) and its time-varying standard deviation (right).
对该样本进行的 ADF 测试清楚地拒绝了零假设,即该时间序列是从具有单位根的 AR 中提取的,这可以从下面的统计数据中看出。
**ADF Statistic: -34.0381
p-Value: 0.0000
Critical Values:
1%: -3.4369
5%: -2.8644
10%: -2.5683**
在这一点上,从业者经常得出结论,时间序列应该是平稳的,这是不正确的。
如前所述,不是非平稳 AR 的时间序列不一定是平稳的;要么根本不是 AR 时间序列,要么就是平稳的 AR。总的来说,ADF 测试本身并不能确定这两种说法哪一种成立。然而,在这个例子中,我们知道不正确的假设不是非平稳性,而是 AR 假设。
总结想法
媒体对人工智能可能对投资管理行业产生的影响给予了很多关注,一些文章大肆宣传人工智能,警告回溯测试过度拟合的风险,提出金融市场的信噪比排除了人工智能革命的可能性,甚至认为人工智能已经在该行业存在了几十年。
在这些媒体报道中,机器学习通常被认为是一个静态领域,是金融界的外源,是由他人开发的一套通用方法。然而,资产管理行业的特殊性保证了新的机器学习方法的出现,这种方法是从一开始就以金融第一的心态设计的,并对长期以来的教条提出了质疑。这种技术出现的最大障碍之一可能是对简单但基本的概念的广泛误解,如研究过程的核心平稳性和记忆。
附录:代码
渐变视点的规范化[TF 中的手动背景道具]
归一化图层对渐变有什么影响?
GIF from this website
归一化是一种预处理技术,它改变了给定分布的属性。尽管顾名思义,批量标准化执行标准化,并且已经表明标准化层加速了深度神经网络的训练。
但这是为什么呢?它是如何改变每个重量的梯度的?其他标准化方案有什么影响?例如层规范化以及实例规范化。
最后,如果归一化的目的是使分布更加对称(或正态),如果我们执行一个更简单的变换,如 box-cox 变换,会发生什么?
下面是我们将要比较的方法列表。
a)正常 CNN(基线)
b) 批量归一化 c)图层归一化 d)实例归一化
简介
总的来说,我把规范化理解为一种改变给定分布的属性的技术/过程。例如,标准化的最基本用法是将分布范围限制在某个范围内。在计算机视觉中,我们经常看到很多研究人员在 0 到 1 的范围内归一化像素强度。
然而,在深度学习中,这个术语的确切用法有所不同,具体来说,批处理规范化执行标准化,其中将分布居中为零,并将标准偏差更改为一。这个过程也被称为将不同的数据放入同一尺度的过程。
尽管它们被广泛使用,但我无法发现这些标准化对梯度有什么影响,所以我想修复它。
实验设置
蓝色矩形 →带 ReLU 激活的卷积层
黄色矩形 →归一化层,根据方案该层可以在批处理/层/实例和 box-cox 变换之间变化。在我们没有任何规范化方案的情况下,这一层不存在。
红色矩形 →最终输出矢量,应用 softmax 操作。
灰色球体 →输入图像尺寸(20,96,96,3)。
每个单个网络被训练 150 个历元,学习速率被设置为 0.0008,最小批量大小为 20。最后,我将使用 STL 10 图像数据集,没有任何数据扩充,请注意,这意味着我们有 5000 张训练图像,而测试精度是在 8000 张测试图像上测量的。
结果位移
在展示结果之前,我想介绍一下我是如何放置每个实验的结果的。每个图像包含六个图,并且每个图以连续的方式表示每个层。(按如下所示的顺序。).
所以从顶部开始,每个方框代表该层的值如何随时间变化。我将按照下面的顺序展示其中的四张图片。
左上 →表示相对于每一层权重的梯度
右上 →表示传递到前一层的梯度
左下 →表示每一层的权重
右下 →表示当前权重和计算的梯度之间的差
最后,在显示 gif 之后,我将显示最终迭代结果的静态图像。
无任何归一化
**
左上 →相对于每层权重的梯度
右上 →传递到上一层的梯度
左下 →每层权重
右下 →当前权重与计算的梯度相减
当我们把注意力集中到左上角的 gif 时,我们可以看到大部分的渐变都集中在零上。这表明大多数权重没有被更新。有很多零梯度的效果可以在位于左下方的 gif 中看到。简而言之,在几次迭代之后,权重变化不大,尤其是第二层、第三层和第四层。
**
批量归一化
**
左上 →相对于各层权重的梯度
右上 →传递到前几层的梯度
左下 →各层权重
右下 →当前权重与计算的梯度相减
我们可以立即看到没有任何归一化方案的网络之间的一个显著差异,每层的非零梯度数量*。***
这种增加非零梯度数量的批量标准化属性是深度神经网络训练加速的原因。当我们观察权重如何随时间变化时,我们可以看到直方图有更多的整体移动。
**
图层归一化
**
左上 →相对于每层权重的梯度
右上 →传递到上一层的梯度
左下 →每层权重
右下 →当前权重与计算的梯度相减
当我们在每层之间使用层标准化时,我们可以观察到类似的现象。随着非零梯度数量的增加,每层权重的更新变得更加频繁。
**
实例规范化
**
左上 →相对于每层权重的梯度
右上 →传递到上一层的梯度
左下 →每层权重
右下 →当前权重与计算的梯度相减
实例归一化标准化了每个图像或特征图,因此,我个人认为与其他归一化方案相比,非零梯度的数量是最大的。
**
Box-Cox 变换
**
左上 →相对于每层权重的梯度
右上 →传递到上一层的梯度
左下 →每层权重
右下 →当前权重与计算的梯度相减
当与不具有任何归一化方案的网络相比时,我们可以看到在关于每个权重的梯度中有更多的非零元素。然而,与任何其他归一化方案相比,我们可以看到我们的梯度中仍然有许多零。
**
讨论
需要记住的一件非常重要的事情是,这些网络(有/没有)归一化方案中的每一个都有完全相同数量的参数。
这意味着他们的学习能力完全相同。
这样做的原因是因为我没有向批处理/层/实例标准化添加任何 alpha 或 beta 参数,所以通过每一层传递的所有数据都必须标准化。了解了这一点,我们就可以看到精度图。
Accuracy for training images
橙色 →批量归一化
红色 →实例归一化
绿色 →图层归一化
紫色 → Box-Cox 变换
蓝色 →无归一化
当我们使用诸如批次/层/实例归一化的归一化方案时,我们可以在第 130 个时期之前在训练图像上实现+95%的准确度。同时,具有 box-cox 变换的网络以及没有任何归一化方案的网络甚至难以通过+60%的准确度。
Accuracy for Testing Images
橙色 →批量归一化
红色 →实例归一化
绿色 →图层归一化
紫色 → Box-Cox 变换
蓝色 →无归一化
从上面的图中我们可以得出结论,令人惊讶的是,没有任何归一化方案的网络做得最好。当考虑到我们有比训练图像多得多的测试图像时,这多少是一个令人印象深刻的结果。STL 10 数据集有 5000 个训练图像和 8000 个测试图像,因此 8000 个图像的 55%将意味着 4400 个图像。
此外,我们可以看到一种模式的出现,随着我们计算平均值和标准偏差的参数数量的减少,测试精度增加。更准确地说,当我们有一个维数为(20,96,96,16)的 4D 张量时,其中每个轴代表(批次大小、宽度、高度、通道),当我们执行批次归一化时,我们计算通道维数的平均值,即 16。同时,层和实例标准化分别计算批次大小以及批次大小和通道尺寸的平均值。
知道了上面所有的信息,我们可以看到相反的模式明显存在。随着参数数量的增加,我们计算的平均值和标准偏差增加,模型趋于过度拟合。
为什么?
好吧,我不是机器学习方面的专家,但清晰的推测是梯度。更准确地说,非零梯度。事后看来,这非常有意义,如果关于权重的梯度由许多零元素组成,那么权重在更新操作之后不会改变。
但我认为,还有另一个原因,更数学的原因。(注意我也不是数学专家 lol。).
限制分布特性的归一化方案通过减少问题维度空间来简化问题。
我的意思是,减少内部协变量变化本质上是一样的。在批次/层/实例标准化中,我们将平均值和标准偏差限制为 0 和 1。并且这些操作有一个硬结果,意味着平均值是零,和标准差是一。
这种变换的一个软化版本是 box-cox 变换,其运算目的是使某个分布更加“正常”或“对称”。
这两种操作都对特征图的分布施加了一定的限制,使得网络更容易在训练图像上做得很好。然而,这并不意味着它会在测试图像上表现良好。
这篇博文的结论和代码
归一化方案通过增加非零梯度的频率来加速训练,然而,在某些情况下,分布变化的这种限制导致网络失去泛化能力,从而导致过拟合。
要访问 google collab 中这篇博客文章的代码,请点击此处,要访问 GitHub 版本,请点击此处。
最后的话
一般来说,随着可训练参数数量的增加,模型越有可能过度拟合。(没有任何正规化,技巧。).该研究的未来方向可以进一步分为两个方向,1)当我们添加正则化参数时,网络将如何表现。2)诸如 box-cox 之类的变换方法对于对手攻击是否更健壮。
更多文章请访问我的网站。
参考
- 瓦尔马河(2018 年)。罗汉·瓦尔马—📋我的博客;通过机器学习教程、操作指南、论文评论等等。Rohanvarma.me 于 2018 年 12 月 16 日检索,来自http://rohanvarma.me/
- rohan-varma/nn-init-demo。(2018).GitHub。检索于 2018 年 12 月 16 日,来自https://github . com/rohan-varma/nn-init-demo/blob/master/batch norm-demo . py
- 在神经网络中实现 BatchNorm。(2018).Wiseodd.github.io .检索 2018 年 12 月 16 日,来自https://wiseodd.github.io/techblog/2016/07/04/batchnorm/
- (2018).Arxiv.org。检索于 2018 年 12 月 21 日,来自 https://arxiv.org/pdf/1502.03167.pdf
- Ba,j .,Kiros,j .,& Hinton,G. (2016)。图层规范化。arXiv.org。检索于 2018 年 12 月 21 日,来自 https://arxiv.org/abs/1607.06450
- (2018).Arxiv.org。检索于 2018 年 12 月 21 日,来自https://arxiv.org/pdf/1607.08022.pdf
- SciPy . special . boxcox 1p—SciPy v 1 . 2 . 0 参考指南。(2018).Docs.scipy.org。检索于 2018 年 12 月 21 日,来自https://docs . scipy . org/doc/scipy/reference/generated/scipy . special . boxcox 1p . html # scipy . special . boxcox 1p
- STL-10 数据集。(2018).Cs.stanford.edu。检索于 2018 年 12 月 22 日,来自https://cs.stanford.edu/~acoates/stl10/
语言建模的归一化中心损失
警告:一些递归神经网络的知识是假定的。
语言建模及其工作原理简介?
什么是语言建模?
在语言建模中,我们试图预测给定单词序列的下一个单词。机器学习模型计算下一个单词的可能值的概率。并且从生成的概率分布中对单词进行采样。
问:它是如何工作的?
你建立一个递归神经网络架构。该模型一次处理一个单词,并计算下一个单词的可能值的概率。网络的存储状态由零向量初始化,并在读取每个字后更新。
RNN 的输出依赖于任意远的输入,这使得反向传播很困难。为了使学习过程易于处理,我们将反向传播缩短到固定的步骤数(我们称之为num_steps
)。然后,根据 RNN 的有限近似值训练模型。这可以通过一次输入长度为num_steps
的输入,并在每个这样的输入块后执行反向传递来实现。
用于评估语言模型的度量是困惑度,其等于 exp(交叉熵)。
作为我之前博文的延续,我想看看增加一个中心损失是否会改善模型的困惑。
归一化中心损耗
我建议读者在阅读这篇文章之前,先阅读前一篇博文的第一部分。
当使用博客文章中定义的相同中心损失时,中心损失将呈指数增加(每 200 次迭代增加一倍),并最终爆炸。为了克服这个问题,我稍微修改了一下中心损耗,我把修改后的版本叫做归一化中心损耗。
在归一化中心损失中,我在更新它们之后归一化中心,使得每个嵌入的中心向量的范数是 1。这样做是为了防止损耗值爆炸。
为了计算损失,通过相应嵌入的大小来缩放单词向量的中心。这确保了嵌入得到将它们推向中心向量的梯度。
结果
我在 wikitext-2 和 penn treebank 数据集上尝试了这种新的损失方法。结果如下:
penn treebank 数据集上的结果
cross entropy loss and perplexity on training set
cross entropy loss and perplexity on validation set
从图中可以看出,在验证集上尝试的所有 lambda 值的复杂度都有所提高。
Values of cross entropy and perplexity values on the test set
在测试集上提高了 4,这实际上是非常显著的。
wikitext-2 数据集上的结果
cross entropy loss and perplexity on training set
cross entropy loss and perplexity on validation set
从图中可以再次看出,在验证集上尝试的所有λ值上,复杂度都有所提高。
Values of cross entropy and perplexity values on the test set
在测试集上提高了 2,这也是显著的。这里的结果不像宾州树木银行那样令人印象深刻。我认为这是因为归一化损失函数作为正则化函数。由于 wikitext-2 比 Penn Treebank 数据集大得多,添加正则化子的影响被最小化。
结论
由于在两个数据集上的实验中可以观察到复杂度的改善,因此可以预期的是,任何鼓励来自相同类别的特征彼此靠近地聚类的损失函数将导致精确度的改善和过拟合的减少。
本博客中使用的所有实验都可以使用本报告中给出的代码进行复制。
如果你喜欢这篇文章,请点击下面的小拍手图标帮助他人找到它。非常感谢!
标准化的保向 Adam,从 Adam 到 SGD 的切换,以及带有交互代码的内斯特罗夫动量 Adam
GIF from this website
最近,我对调整神经网络的不同方法感兴趣,正如所料,许多不同的研究人员已经研究了许多不同的方法。具体来说,今天,我想看看 Adam 优化器的差异。下面是所有不同方法的列表,我们将看看这篇文章。
案例 a: 随机梯度下降 案例 b: 随机梯度下降动量 案例 c: 随机梯度下降动量 案例 d: 亚当优化器 案例 e:
请注意,这篇文章是让我未来的自己回顾和回顾这些纸上的材料,而不是从头再看一遍。也请注意,一些实施工作仍在进行中。
Paper form this website
Paper from this website
Paper from this website
基础网络||数据集||不同方法背后的简单理论
Image from this website left right
红色矩形 →输入图像(32323)
黑色矩形 →与 ELU 卷积()有/无平均池
橙色矩形 → Softmax 进行分类
为了简单起见,我将使用我以前的帖子中的基本网络,“全卷积网络”。我们还将在 CIFAR 10 数据集上评估每种优化方法。
最后,我希望为每一种新方法背后的理论写一个简单的版本。(内斯特罗夫动量亚当、SWAT 和归一化方向保持亚当。)
通过从 Adam 切换到 SGD 来提高泛化性能 →在训练过程中简单地从 Adam 切换到 SGD。因此,我们可以在训练开始时利用 Adam 的快速收敛,但稍后我们可以通过 SGD 使模型更好地泛化。
归一化的方向保持 Adam →为什么 Adam 可能不擅长泛化的一个问题(或者说后退)是由于没有保持梯度方向。(与 SGD 不同)这篇论文的作者提出了一种方法来解决这个缺点。
将内斯特罗夫动量引入亚当 →关于这篇论文的一个简单解释就是将用于将动量扩展到内斯特罗夫动量的原理引入并应用于亚当。
结果:案例 a:随机梯度下降
左图 →测试集精度/时间成本
右图 →训练集精度/时间成本
正如所料,随机梯度下降表现非常好。在 CIFAR 10 数据集上的最终准确率为 85.3%,仅用了 20 个历元,对于普通梯度下降来说不算太差。
结果:情况 b:随机梯度下降动量
左图 →测试集精度/时间成本
右图 →训练集精度/时间成本
尽管 SGD 的表现很好,但具有动量的 SGD 能够以 85.7%的准确率略胜一筹。
结果:案例 c:具有内斯特洛夫动量的随机梯度下降
左图 →测试集精度/时间成本
右图 →训练集精度/时间成本
根据在线 stand-ford 课程的实施,具有 nesterov 动量的随机梯度下降给出了相当好的结果。然而,令人失望的是,这种方法优于常规动量法。
Image from this website
结果:案例 d: Adam 优化器
左图 →测试集精度/时间成本
右图 →训练集精度/时间成本
我已经预料到 Adam 会胜过大多数优化算法,然而,这也带来了模型泛化能力差的代价。训练准确率为 97 %,而测试准确率停留在 87%。(其在测试图像上具有最高的准确度,但是只有 3%的改进空间。)
结果:案例 e:内斯特罗夫动量亚当
左图 →测试集精度/成本随时间变化
右图 →训练集精度/成本随时间变化
对于那达慕,我 100 %相信我的实现还没有完全完成。因为我没有加入 u 的产品。因此这可能解释了为什么这个模型的性能如此之差。(甚至根本不训练。)
红框 →图片来自原始论文,我仍在研究的术语
结果:情况 f:从 Adam 切换到 SGD
左图 →测试集精度/时间成本
右图 →训练集精度/时间成本
我相信有了最佳的超参数,这种方法可以胜过其他任何方法。然而,没有最佳的超参数调整,我只能达到 67%的准确性。
这是我迄今为止遇到的最有趣的优化方法之一。我的实现是混乱的,因此不是最好的,但尝试训练这个模型真的很有趣,也很有挑战性。它如此有趣的原因之一是由于反向传播期间的所有 if 条件。
结果:案例 g:归一化方向保持 Adam
尽管我努力三次检查我的实现,并与作者的原始代码进行比较(在此处找到),但在使用 ND-Adam 时,我无法成功地训练这个模型。(我非常确信我在某些地方犯了错误,因为作者能够在 80000 年内达到 90%以上的准确率。)
互动码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!同样为了透明,我在 github 上上传了所有的训练日志。
要访问案例的代码,请点击此处,要查看日志,请点击此处。
访问案例 b 的代码点击此处,查看日志点击此处。
要访问案例 c 的代码,单击此处,要查看日志,单击此处。
要访问案例 d 的代码,单击此处,要查看日志,单击此处。
要访问案例 e 的代码,请点击此处,要查看日志,请点击此处。
要访问案例 f 的代码,请点击此处,要查看日志,请点击此处。
点击此处访问案例 g 的代码,点击此处访问日志的。
最后的话
我很兴奋开始这些关于泛化的系列。然而,我很难过,尽管我尽了最大的努力,我还是不能成功地训练具有内斯特罗夫动量亚当和归一化方向保持亚当的模型。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请点击这里查看我的网站。
同时,在我的推特这里关注我,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- 真,t. (2018)。tensorflow:检查标量布尔张量是否为真。堆栈溢出。检索于 2018 年 6 月 10 日,来自https://stack overflow . com/questions/43263933/tensor flow-check-if-a-scalar-boolean-tensor-is-true
- tf。打印?,H. (2018)。如何使用 tf 打印张量的一部分?打印?。堆栈溢出。检索于 2018 年 6 月 10 日,来自https://stack overflow . com/questions/47000828/how-to-print-part-of-a-tensor-using-TF-print
- 使用 tf。TensorFlow 中的 print()—走向数据科学。(2018).走向数据科学。检索于 2018 年 6 月 10 日,来自https://towards data science . com/using-TF-print-in-tensor flow-aa 26 E1 cf F11 e
- tf。打印| TensorFlow。(2018).张量流。检索于 2018 年 6 月 10 日,来自https://www.tensorflow.org/api_docs/python/tf/Print
- Tensorflow?,H. (2018)。如何在 Tensorflow 中给 tf.cond 内部的函数传递参数?。堆栈溢出。检索于 2018 年 6 月 10 日,来自https://stack overflow . com/questions/38697045/how-to-pass-parameters-to-functions-inside-TF-cond-in-tensor flow/39573566
- tf.cond(pred,fn1,fn2,name=None) | TensorFlow。(2018).张量流。检索于 2018 年 6 月 10 日,来自https://www . tensor flow . org/versions/r 1.0/API _ docs/python/TF/cond
- 培训,h. (2018)。如何在培训期间更改 tensorflow optimizer?堆栈溢出。检索于 2018 年 6 月 10 日,来自https://stack overflow . com/questions/48259650/how-can-I-change-tensor flow-optimizer-in-training
- 主成分分析池在 Tensorflow 与互动代码[PCAP]。(2018).中等。检索于 2018 年 6 月 10 日,来自https://medium . com/@ SeoJaeDuk/principal-component-analysis-pooling-in-tensor flow-with-interactive-code-pcap-43 aa2 CEE 9 bb
- tf.logical_and | TensorFlow。(2018).张量流。检索于 2018 年 6 月 10 日,来自https://www.tensorflow.org/api_docs/python/tf/logical_and
- 数学符号列表(+,-,x,/,=,,…)。(2018).Rapidtables.com。检索于 2018 年 6 月 10 日,来自https://www . rapid tables . com/Math/symbols/Basic _ Math _ symbols . html
- 通过从 Adam 切换到 SGD 提高泛化性能第 76 期 kweonwooj/papers。(2018).GitHub。检索于 2018 年 6 月 10 日,来自https://github.com/kweonwooj/papers/issues/76
- zj10/ND-Adam。(2018).GitHub。检索于 2018 年 6 月 10 日,来自https://github.com/zj10/ND-Adam/blob/master/ndadam.py
- 规范?,W. (2018)。超脚本 2 下标 2 在规范的语境下是什么意思?。交叉验证。检索于 2018 年 6 月 10 日,来自https://stats . stack exchange . com/questions/181620/what-is-the-meaning-of-super-script-2-subscript-2-in-the-context-of-norms
- 线性代数 27,向量的范数,例题。(2018).YouTube。检索于 2018 年 6 月 10 日,来自https://www.youtube.com/watch?v=mKfn23Ia7QA
- tf.float32?,H. (2018)。如何将 tf.int64 转换成 tf.float32?。堆栈溢出。检索于 2018 年 6 月 10 日,来自https://stack overflow . com/questions/35596629/how-to-convert-TF-int 64-to-TF-float 32
- tf.reduce_sum | TensorFlow。(2018).张量流。检索于 2018 年 6 月 10 日,来自 https://www.tensorflow.org/api_docs/python/tf/reduce_sum
- j . brown lee(2017 年)。深度学习的 Adam 优化算法简介。机器学习精通。检索于 2018 年 6 月 10 日,来自https://machine learning mastery . com/Adam-optimization-algorithm-for-deep-learning/
- 随机梯度下降。(2018).En.wikipedia.org。检索于 2018 年 6 月 10 日,来自https://en.wikipedia.org/wiki/Stochastic_gradient_descent
- 带动量的随机梯度下降——走向数据科学。(2017).走向数据科学。检索于 2018 年 6 月 10 日,来自https://towards data science . com/random-gradient-descent-with-momentum-a 84097641 a5d
- [ ICLR 2015 ]追求简单:具有交互码的全卷积网。(2018).走向数据科学。检索于 2018 年 6 月 11 日,来自https://towards data science . com/iclr-2015-forwards-for-simplicity-the-all-convolutional-net-with-interactive-code-manual-b 4976 e 206760
- CIFAR-10 和 CIFAR-100 数据集。(2018).Cs.toronto.edu。检索于 2018 年 6 月 11 日,来自https://www.cs.toronto.edu/~kriz/cifar.html
- 用于视觉识别的 CS231n 卷积神经网络。(2018).cs 231n . github . io . 2018 年 6 月 11 日检索,来自http://cs231n.github.io/neural-networks-3/
北印度菜还是南印度菜,深度学习都懂!!:第一部分
当你在印度旅行时,从克什米尔到 Kanyakumari,你会体验到不同的文化,不同的宗教,但对我来说最重要的是我的国家不同地区的各种食物,从北印度的 Samosa 或 T2 到南印度的 T4,这是你在印度可以品尝到的众多食物中的一部分。
South Indian and North Indian food
你一定想知道深度学习和印度食物有什么关系,那么让我回到过去给你解释现在。自从我开始学习深度学习以来,我学会的第一件事就是如何使用 TensorFlow 、 Keras 以及最后但并非最不重要的 Scikit-learn 制作图像分类器。我建立的图像分类器被用来分类狗和猫的图像,戴眼镜和不戴眼镜的人的图像,我甚至使用 fast.ai 库对 12 个可能的类别中的幼苗进行了分类,但我没有制作任何对食物进行分类的东西。
所以,我想这次为什么不为印度食物做一个快速简单的图像分类器。因此,在这篇文章中,我将带大家了解我如何使用 TensorFlow Codelab 制作一个食物分类器,对印度北部和南部食物的不同图像进行分类。
但是在进入执行部分之前,我需要分享一些我使用的软件信息,这些信息对于图像分类器来说非常重要。
软件(仔细查看版本)
- 蟒蛇与 Python 版本 3.6.3 。
- tensor flow1 . 6 . 0 版本。[确保您至少拥有 1.2 版]
- Bash on Ubuntu on Windows 【如果你的系统没有安装 Linux】。
步骤 1:创建数据集
在深度学习中,最重要的部分是数据集的创建。因此,为了创建 Samosa、Khaman Dhokla 等北印度食物和 Idli、Dosa 等南印度食物的数据集,我跟随了 OpenCV 大师 Adrian Rosebrock 的这篇精彩帖子"如何使用 Google Images 创建深度学习数据集",在这篇帖子中,他展示了如何通过几行代码从 Google 下载大量图像。
首先,我创建了一个名为“印度食物照片”的文件夹。在这个文件夹下,我开始创建不同类别的子文件夹,我试图为它们建立一个图像分类器,然后在上面提到的帖子之后,我开始下载 Idli,Samosa,Khaman Dhokla 和 Dosa 的图像。我从不限制自己在某个特定文件夹中与某个特定类别相关的图片数量,我尽可能多地收集每个食物类别的图片。
Feeling hungry,not more than me
你们一定都在想,为什么我没有把我为其构建分类器的每一类食物放入一个文件夹中,为什么我为每一类食物创建子文件夹,原因很简单,分类脚本使用文件夹名称作为标签名称,每个文件夹中的图像应该是对应于该标签的图片。
我的天啊。,这是一个很长的解释,但从这一点向前的解释和步骤将是清晰和简短的。
步骤 2:克隆 Git 存储库:
git clone [https://github.com/googlecodelabs/tensorflow-for-poets-2](https://github.com/googlecodelabs/tensorflow-for-poets-2)
cd tensorflow-for-poets-2
第三步:移动文件夹“印度食物照片”到“tf 文件”下
这一步对于像我一样在 Windows 上使用 Bash on Ubuntu 的人来说是有帮助的,这是一个 windows 10 操作系统的 Linux 子系统,而那些在他们的系统中安装了 Linux 的人我认为不是,他们需要任何关于将文件从一个目录移动到另一个目录的指导。
cp -r /mnt/c/Users/ADMIN/Documents/Indian_foods_photos tensorflow-for-poets-2/tf_files/
为了查看文件夹是否被正确复制,我给出了以下命令
cd tf_files/Indian_foods_photos/
ls
步骤 4:传递变量
这一步是所有步骤之母,在这一步中,我尝试用 MobileNet 架构来训练网络。MobileNet 被优化为小而高效,代价是一些准确性和需要更少的处理时间。
但在训练我的网络之前,我还设置了两件事,首先是“输入图像分辨率”为 224 像素。不出所料,输入更高分辨率的图像需要更多的处理时间,但会导致更好的分类精度。然后,我将模型的相对大小设为 0.75。这两个配置选项都可以在下面的命令中看到。
IMAGE_SIZE=224
ARCHITECTURE="mobilenet_0.75_${IMAGE_SIZE}"
知识第一节【未迈出一步】
因此,在 tensorflow-for-poets-2 目录下传递上述变量后。这是一个完美的时刻,我想和大家分享一个重要的信息。在构建这个分类器时,我使用了一个在 ImageNet 大型视觉识别挑战数据集上训练的模型,并使用了迁移学习,因为从头开始进行深度学习可能需要几天时间,但通过使用迁移学习,一切都可以在短时间内完成。
知识第二节【未迈出一步】
正如我在上面的知识部分 I 中提到的,我使用了 Imagenet 模型,该模型由具有数百万个参数的网络组成,这些参数可以区分大量的类别,除此之外,我只训练了该网络的最后一层,这就是为什么训练在合理的时间内结束。
ImageNet 不包括我在这里培训的任何印度食物。然而,使 ImageNet 能够在 1,000 个类别中进行区分的信息种类对于区分其他对象也是有用的。通过使用这个预先训练好的网络,我将这些信息作为最终分类层的输入,以区分我的印度食物类别。
步骤 5:运行培训网络
现在,我在声明 IMAGE_SIZE 和 ARCHITECTURE 变量之后传递了这些命令
python -m scripts.retrain \
--bottleneck_dir=tf_files/bottlenecks \
--model_dir=tf_files/models/"${ARCHITECTURE}" \
--summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
--output_graph=tf_files/retrained_graph.pb \
--output_labels=tf_files/retrained_labels.txt \
--architecture="${ARCHITECTURE}" \
--image_dir=tf_files/Indian_foods_photos
在我向您展示当我传递上述命令时发生了什么之前,让我告诉您在运行这几行代码之后我经历了什么
默认情况下,该脚本运行 4,000 个训练步骤。每一步从训练集中随机选择 10 幅图像,从缓存中找到它们的瓶颈【瓶颈是一个非正式术语,我们经常使用它来表示最终输出层之前的层,最终输出层实际上进行分类】,并将它们输入到最终层以获得预测。然后将这些预测与实际标签进行比较,通过反向传播过程更新最终图层的权重。
随着过程的继续,我看到报告的准确性有所提高。完成所有训练步骤后,脚本对一组与训练和验证图片分开保存的图片运行最终的测试准确性评估。这个测试评估为我提供了训练好的模型在分类任务中表现如何的最佳估计。
让我们只观察通过上面的文字描述的所有图像
Downloading the mobilenet Architecture
creating bottleneck layers and then determining various parameters
The Final Accuracy
我的模型最终的准确率是 88.1% 。
步骤 6:对图像进行分类
这是最后一步,通过给出下面提到的命令,我确定了我的食物分类器在不同的印度食物图像上的表现
python -m scripts.label_image \
--graph=tf_files/retrained_graph.pb \
--image=tf_files/Indian_foods_photos/samosa/00000422.jpg
因此,通过这些结果,我结束了我的文章。但是我的旅程还没有结束,这只是我旅程的第一部分,当我向你解释如何在我的自定义数据集上使用这些结果时,我的旅程就结束了。我继续使用 Android Studio 的自定义 TensorFlow 应用程序创建了一个食品分类器 Android 应用程序,因此为本文的第二部分做好准备,它将很快发布。
参考资料:
- 没有这个tensor flow for Poets code lab就不可能有上面的文章,请参考它以获得进一步的澄清。
- 为了了解更多关于深度学习的知识,你可以查看这里的。
- 为了了解更多关于迁移学习的信息,你可以查看这里。
最后一件事…
如果你喜欢这篇文章,请点击👏下面,并与他人分享,这样他们也可以享受它。
还有,想的话就跟我上 中 !我很乐意。
北印度菜还是南印度菜,深度学习都懂!!:第二部分
如果我们想让机器思考,我们需要教它们看。——费斯坦福 AI 实验室主任斯坦福视觉实验室**
在第 1 部分中,我展示了我如何使用 TensorFlow Codelab 制作了一个食物分类器来对印度北部和南部食物的不同图像进行分类(如果你还没有读过第 1 部分,现在就去读吧!).
我在第 1 部分的最后提出了一个想法,我将向您解释如何使用我的自定义数据集生成的结果,我继续使用 Android Studio 的自定义 TensorFlow 应用程序创建了一个 F ood 分类器 Android 应用程序。
所以,是时候实现我的承诺了,但在展开我的食物分类器 Android 应用程序、的步骤之前,让我向你展示它在现实世界中的表现。****
我知道如果你和我一样是美食家,你现在一定感觉饿了,但是控制你自己你仍然必须阅读我如何能够使用 TensorFlow 完成这个食物分类器应用程序的任务。
在继续之前,我先说说做这个项目背后的灵感。这一切都是从来自 fast.ai 课程的杰瑞米·霍华德告诉我们学生们在通过 fast.ai 课程发展深度学习技能后做了多么美妙和革命性的事情开始的,其中之一是著名的非热狗应用程序,用于 HBO 的硅谷,由蒂姆·安格雷德使用 Tensorflow 开发。所以,从我梦想构建这样东西的那一刻起,今天通过这篇文章,我与大家分享我构建食物分类器应用程序的经验。**
现在,情绪激动的时刻到此为止,让我们谈生意吧。构建食物分类器应用程序的步骤非常简短,我还在参考资料部分添加了链接,这将为您提供额外的支持,以防您继续重复我所做的事情。
让我先列出这个项目使用的软件和硬件。
软件(仔细看版本)
- 蟒蛇与 Python 版本 3.6.3 。
- TensorFlow 版本 1.6.0。[确保您至少拥有 1.2 版]
- Bash on Ubuntu on Windows 【如果你的系统没有安装 Linux】。
- 安卓工作室 3.0.1
硬件
- 一个带摄像头的安卓手机(当然)[因为我没用安卓模拟器]。
- A 树莓 pi 3 Model B 带 5 寸 HDMI 液晶(因为我附近酒店 Dosa 用光了:)。
目标:一个简单的相机应用程序,运行 TensorFlow 图像识别程序来识别不同的印度食物。
预防步骤:我确保 tensorflow-for-poets-2 与我在第 1 部分中使用的相同的 git 目录是我当前的工作目录,它由另外三个子目录[ android/tfmobile/、scripts/、tf_files/]组成。这对于应用的实现起到了至关重要的作用。
步骤 1:优化模型
由于移动设备有很大的局限性,所以这是我使用名为“ optimize_for_inference 的 TensorFlow 工具减少应用程序占用空间的预处理步骤,该工具删除了给定输入和输出集不需要的所有节点。
下面是我运行脚本的方式,它生成了一个新文件 TF _ files/optimized _ graph . Pb:
***python -m tensorflow.python.tools.optimize_for_inference \
--input=tf_files/retrained_graph.pb \
--output=tf_files/optimized_graph.pb \
--input_names="input" \
--output_names="final_result"***
步骤 2:验证优化的模型
为了检查optimize_for_inference
没有改变我的网络的输出,我比较了retrained_graph.pb(graph generated in part 1)
和optimized_graph.pb
的label_image
输出,幸运的是,输出概率没有变化,这意味着 optimized_graph.pb 将产生与 retrained _ graph.pb 相同的结果,每当我在我的自定义数据集上运行它时,请参见图 1 和图 2 了解更多细节。
***python -m scripts.label_image \
--graph=tf_files/retrained_graph.pb\
--image=tf_files/Indian_foods_photos/Samosa/00000082.jpg python -m scripts.label_image \
--graph=tf_files/optimized_graph.pb\
--image=tf_files/Indian_foods_photos/Samosa/00000082.jpg***
Image 1:
Image 2
步骤 3:量化网络权重
因为我的再培训模型是 84MB 大小,我知道两件事,每个移动应用程序分发系统在分发之前压缩包。第二,图(这里是 optimized_graph.pb)占用的大部分空间是权重,它们是大块浮点数。因此,我试图通过使用 tensorflow-for-poets-2 git 存储库中给出的quantize_graph
脚本来量化网络权重。
相同的代码和视觉效果如下所示:
***python -m scripts.quantize_graph \
--input=tf_files/optimized_graph.pb \
--output=tf_files/rounded_graph.pb \
--output_node_names=final_result \
--mode=weights_rounded***
现在尝试压缩这个量化模型:
***gzip -c tf_files/rounded_graph.pb > tf_files/rounded_graph.pb.gz
gzip -l tf_files/rounded_graph.pb.gzcompressed uncompressed ratio uncompressed_name
2922466 10495462 72.2% tf_files/rounded_graph.pb***
I got 72.1% compression
现在,是时候检查量化权重步骤是否对模型性能产生了负面影响,但幸运的是,这只是一个微小的变化,看看下面的图片。
samosa accuracy changed from 0.9999945 to 0.9992605
步骤 4:设置 Android Studio
- 加载 Android Studio 后,我打开了它。我从弹出菜单中选择了“打开一个现有的 Android Studio 项目”。
- 然后在文件选择器中,我从我的工作目录中选择
tensorflow-for-poets-2/android/tfmobile
。 - 然后我得到了一个“Gradle Sync”弹出窗口,我第一次打开这个项目,询问关于使用 gradle wrapper。我只是点击了“确定”。
注意,这一步会花很多时间,所以与此同时,去和你的女朋友或妈妈聊聊天,或者喝杯黑咖啡,做任何你想做的事情,但是要有耐心。
Setting up Android Studio
步骤 5:设置 Android 手机或 Android 模拟器
这款应用可以在安卓手机或安卓模拟器上运行
- 有关如何设置 Android 设备的说明,请单击此处的。
- 有关如何设置 Android 模拟器的说明,请单击此处的。
步骤 6:将模型添加到定制应用程序
因为默认的应用程序设置使用标准的 MobileNet 将图像分类到 1000 个 ImageNet 类中的一个。因此,我修改了应用程序,以便应用程序将使用我的自定义图像类别的重新培训模型。
TensorFlow 应用程序的演示项目被配置为在android/tfmobile/assets
目录中搜索一个graph.pb
和一个labels.txt
文件。所以,我用我的版本替换了那两个文件。以下命令帮助我完成了这项任务:
***cp tf_files/rounded_graph.pb android/tfmobile/assets/graph.pb
cp tf_files/retrained_labels.txt android/tfmobile/assets/labels.txt***
由于 app 使用的 TensorFlow 接口要求你通过名字来询问你的结果。该应用程序当前设置为读取基线 MobileNet 的输出,名为"MobilenetV1/Predictions/Softmax"
。我的模型的输出节点有一个不同的名字:"final_result"
。所以,我打开ClassifierActivity.java
,更新OUTPUT_NAME
变量如下:
***private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";***
第七步:运行应用程序(荣耀时刻)
在对上面提到的文件做了所有的更改并设置了我的 Android 移动设备后,我测试了我的应用程序,结果或最令人满意的图片如下所示。
Result 1: Screenshot of Mobile app classifying Indian foods
Another view of the network
所以,我所有的读者朋友们,通过这种方式,我成功地实现了用 TensorFlow 做一个食物分类器的梦想。我会用那些一直激励着我的诗句来结束我的文章。
“相信你的梦,它们是有原因的”
参考资料:
- 没有这个tensor flow for Poets 2 code lab就不可能有上面的文章,请参考它以获得进一步的澄清。
- 如果您在 Tensorflow 自定义 app 的执行过程中遇到任何问题,您可以在这里查看我提供的解决方案。
- 如果你想了解更多关于 TensorFlow 的信息,你可以查看这里。
- 最后但同样重要的是,你可以在这里查看 YouTube 视频。
感谢您的关注
你用你的时间来阅读我的作品对我来说意味着整个世界。我完全是这个意思。**
如果你喜欢这个故事,疯狂鼓掌吧👏 ) 按钮!这将有助于其他人找到我的工作。
还有,跟我上 中Linkedin如果你想!我很乐意。****
不仅仅是另一张 GAN 纸——SAGAN
今天我要讨论一篇最近的论文,这篇论文是我读的,并提交给了我的一些朋友。我发现这篇论文的想法非常简单,我觉得像我这样对生成性敌对网络知之甚少的人都能理解。
这是一篇由 GANfather,Ian Goodfellow 和其他几位伟大的研究人员最近发表的论文。论文题目为 自我关注生成对抗网络 或简称萨根。
GANs 生成的大部分好的图像结果都是利用了一个叫做卷积神经网络(CNN)的怪物。像所有的怪物一样,这一个也有一些弱点,我们将进一步讨论。我们见过的大多数 GAN 生成的好图像都是单个类或很少几个类。下图仅在名人面孔数据集上进行训练。
Source: (YouTube) Progressive growing of GANs
问题是
卷积 gan(以后简称为 CGANs)在学习 Imagenet 等多类数据集的图像分布时存在困难。研究人员观察到,当在多类数据集上训练时,这些 CGANs 在建模一些图像类时比其他图像类有困难。他们观察到,CGANs 可以很容易地生成像海洋、天空等更简单几何图形的图像。但是对于像狗、马等一些特殊几何形状的图像却失败了。CGAN 能够生成狗的毛皮纹理,但无法生成独特的腿。
为什么会出现这个问题?
这个问题的出现是因为卷积是一种局部运算,其感受野取决于核的空间大小。在卷积运算中,左上角的输出不可能与右下角的输出有任何关系。在下图中,我们可以看到输出" -8" 是由图像左上角的像素计算的,它与图像中的任何其他部分都没有关系。类似地,当计算卷积输出的任何部分时,除了图像中计算输出的小的局部区域之外,它与任何其他部分无关。
Source: Quora answer by Abhishek Shivkumar
你会问,难道我们不能把空间尺寸做得更大,这样它就能捕捉到更多的图像吗?是啊!当然我们可以,但这会降低较小过滤器的计算效率,并使操作变慢。那么你会再次问,难道我们不能用更小的滤光器制作更深的 CGAN,以便后面的层具有更大的感受野吗?是啊!我们可以,但是要有足够大的感受野需要太多的层,太多的层意味着太多的参数。因此,这将使 GAN 训练更加不稳定。
自我关注 GANs
保持计算效率并同时拥有大的感受域的解决方案是**自我关注。**它通过利用 NLP 中著名的“注意力”机制,帮助在效率和远程依赖性(=大感受野)之间建立平衡。
这是什么关注?
这是最容易理解的事情之一。假设有 3 个人,分别叫查询、键和值。注意是当查询和键决定值可以对外界说多少话。在深度学习中,每样东西都是一个向量,所以这三个人实际上是三个向量。查询和键以这样的方式相乘,使得它们创建了另一个概率向量,该向量决定向下一层公开多少值。是的,这就是注意力的全部。
Source: Attention is all you need paper
让我们用图表来理解它。这个图表是不言自明的。Q(查询)和 K(密钥)经过矩阵乘法,然后通过 softmax,soft max 将结果向量转换为概率分布,最后乘以 V(值)。
那这个自我关注是什么东西?在自我关注中,查询、键和值都是相同的。
模型
如果你理解了上面的部分,那么理解这是小菜一碟。这是本文提出的自我关注层。在下图的左边,我们得到了之前卷积层的特征图。假设它的维度为(512 x 7x 7),其中 512 是通道的数量,7 是空间维度。我们首先将特征图分别通过三个 1x1 卷积。我们将三个滤波器命名为 f,g 和 h.
Source: SAGAN paper
1x1 卷积的作用是减少图像中的通道数量。实际上,1×1 滤波器是一个维度(前一层中的通道数×1×1)。所以 f 和 g 有 64 个这样的滤波器,所以滤波器的维数变成(64 x 512 x 1 x1)。T4 h T5 有 512 个这样的过滤器。在图像通过之后,我们得到三个维度的特征图(64×7×7)、(64×7×7)和(512×7×7)。猜猜这三样东西是什么我们的查询,键和值对。为了对完整的图像进行自我关注,我们拉平了最后两个维度,维度变成了(64×49)、(64×49)和(512×49)。现在我们可以对它进行自我关注了。我们转置查询并将其与键相乘,然后对所有行取 softmax。于是我们得到了一个形状(49×49)的输出注意图。然后,我们将价值向量与注意力图进行矩阵相乘,输出的形状为(512 x 49)。论文提出的最后一点是,将最终输出乘以一个可学习的比例参数,并将输入作为残差连接添加回去。假设 x 是图像, o 是输出,我们将 O 乘以一个参数 y. 最后的输出 O 变成, O=yo+x* *。*最初,该论文建议将标度参数初始化为零,使得输出在开始时是简单的旧卷积。他们用零初始化 y ,因为他们希望他们的网络依赖于本地邻域中的线索——因为这样更容易,然后网络将逐渐学会给 y 参数赋值,并使用自我关注。
这一层有助于网络从图像的遥远部分捕捉细微的细节,记住,它不能代替卷积,而是卷积运算的补充。
Source: SAGAN paper
使用的损失函数只是对抗性损失的铰链版本。该论文没有解释任何关于这个特定损失函数的特定用途。
这里 z 是潜在向量,图像将从该潜在向量生成,并且 x 和 y 是来自数据的真实图像。发生器损耗说明了通过愚弄鉴别器来创建越来越真实的图像,而另一方面,鉴别器试图在区分真实和虚假图像方面变得更好。
报纸上的一些细节
他们在生成器和鉴别器中都使用了这种自我关注层
b) 他们对发生器和鉴别器中的权重进行了频谱归一化,而不像之前的论文只对鉴别器权重进行了归一化。他们将谱范数设置为 1,以限制权重的 Lipschitz 常数。这只是用来控制梯度。这个光谱归一化的想法是由宫藤等人首先提出的。艾尔。
他们使用了一个双时标更新规则(TTUR ),该规则简单地对鉴别器和生成器使用不同的学习速率。
d) 本文中使用的指标是初始得分(IS,越高越好)和 frech et-初始距离(FID,越低越好)。
结果
本文通过实验解释了谱归一化和 TTUR 如何帮助 GAN 更好地收敛。相同的图片如下所示。
Source: SAGAN Paper
我们可以看到,在所有三种情况下,评估指标都是 IS 和 FID。当谱范数仅在鉴别器权重上时,训练非常不稳定。即使我们对生成器和鉴别器都应用谱范数,分数也会在大约 200k 迭代时偏离。但是有了 TTUR 就不会这样了。
这篇论文最好的部分是它的结果,它远远超过了以前的最先进水平。
Source: SAGAN paper
最后让我们看看自我关注的 GANs 生成的图像。
Source: SAGAN Paper
非常感谢你读到这里。如果你喜欢这篇文章,请留下一些掌声。我希望它对你有用。请阅读这篇文章以了解更多的细节,相信我,这是一篇容易读懂的文章。
这是我的第二篇博客,所以请原谅我可能犯的任何错误。我很乐意接受对我任何错误的建设性批评。我会写更多,所以请订阅或关注我的推特。我展示的幻灯片的链接是这里的。想要了解类似的研究论文解释,请订阅 Youtube 上的 Crazymuse AI 频道。任何其他建议都可以通过 twitter 或电子邮件联系我。
不是位置,不是位置,不是位置
纽约人痴迷于几样东西:他们孩子的学校,新餐馆,但没有什么比房地产更重要的了。作为一个被收养的纽约人,我不禁惊叹于纽约市房地产市场的永恒娱乐奇观。
对于本周的项目,kaggle 在菜单上,特别是两个适马连接:租赁列表查询挑战。我最近试图建立一个关于纽约房地产销售的数据集;不幸的是,大多数房地产网站设置的验证码障碍使得这一努力毫无结果。
这项比赛由两家适马和 RentHop(两家适马风险投资公司的投资组合公司,是两家适马投资公司的子公司)共同主办,旨在鼓励利用现实世界数据解决日常问题的创造力。
目标
这些数据包括 2016 年 4 月至 6 月期间创建的纽约市及其周边的 49,000 行火车集和 74,000 行租赁房源测试集。目标是一个三级变量,“兴趣水平”:
- “低”:列车组的 69.5%,
- “中等”:22.7%
- “高”:7.8%
RentHop 没有定义分类的标准。挑战在于预测测试集中每个列表的每个兴趣水平的概率。竞赛的衡量标准是预测的多类对数损失。
Listing map (made on Tableau)
高利息的理由
除了建立一个模型的基本任务,这个模型将与竞赛紧密相关,但大多数读者对此不感兴趣,还可以确定是什么使一个列表吸引了很高的兴趣。如果我是一名房地产经纪人,我肯定会想知道哪些功能对找房子的人来说很重要,这样我就可以寻找满足这些需求的公寓或发布房源,并吸引客流量。
在我看来,纽约的租房者可以分为两大类:
- 家庭:他们主要是受好学校的需要和附近的驱动;
- 刚毕业的大学生:刚到纽约,他们主要受价格驱动。
我知道纽约有很多租房者不符合这两个类别中的任何一个(持有愤怒的笔记!),但考虑到数据集中的房源所涵盖的时间段(4 月至 6 月),我认为它们可能涵盖了一些潜在的租房者,并解释了我们的发现。
簇
在选择公寓时,大多数纽约市居民倾向于将他们的搜索限制在一个特定的社区,原因有很多:因为它很安静,或者有好学校或美食,或者方便上班通勤。由于猎人似乎专注于他们选择的区域,我开始根据纬度和经度对数据进行聚类。基于视力测试,我选择了 30 组。
正如你在下面看到的(很抱歉是第二张纽约市地图……),他们很好地识别了纽约市的自然社区,并强化了这样一个想法,即公寓搜索者将他们的搜索限制在他们感兴趣的城市部分。
RentHop listings in 30 NYC clusters
有三个数字与每个聚类相关联:它的数字(由聚类算法 KMeans 确定)、该聚类的平均兴趣水平分数(0 表示低兴趣水平,1 表示中兴趣水平,2 表示高兴趣水平-整个数据集的平均值为 0.38)以及该聚类中的列表数量。
有趣的是,离曼哈顿中心越远,分数越高,那里的上市密度越低。换句话说,当选择较少时,兴趣水平较高。
另一个有趣的观察结果是,两个较高的聚类分数是地图西北角的两个:通过选择,我决定在 40.85 纬度/-74.04 经度点周围随机分配位置异常值。我认为对纬度和经度坐标的不重视也会反映在列表的总体水平上,这就是我决定将它们放在一起的原因。看来我错了…
计算了一些聚类平均值(价格、每间房间的价格、每间卧室的价格等等),我在下面展示了这些平均值,以帮助可视化。在项目的模型构建部分,它们被用于将每个列表与其聚类平均值进行比较,以获得将列表定位在其聚类中的八个特征。
同样的特征然后被设计成与建筑平均值相关。毕竟,在找公寓的时候,你可能会想把一个房源和它最近的邻居进行比较(还有什么比上下两层楼更近呢?)
自然语言处理
我期待自然语言处理对描述和特性有所帮助。这是一个小小的挑战,因为没有一个通用的方法来命名一个特定的公寓功能,每个上市代理都有自己的命名风格。
经过几次尝试后,它是一个计数矢量器,列出了大多数与豪华公寓相关的功能,证明是该领域的最佳贡献者。这有点违背直觉,因为目标是确定利息水平,而不是高价。
情感分析
另一项功能工程任务是在列表描述中使用 NLTK Vader 情感分析器。以下是每个兴趣水平组的平均综合、负面、中性和正面情绪得分。
Sentiment Analysis averages per Interest Level
如上所述,一方是低兴趣,另一方是中兴趣和高兴趣,这两者之间有细微的差别,但总的来说,这三个群体在所有四个方面都非常接近。当谈到出售房地产时,这并不完全令人惊讶。
模型优化
随机森林分类器(针对网格搜索进行了优化)给出了以下十大特征重要性:
Feature Importance
正如我所料,经理得分排在第一位,考虑到该功能是如何构建的(基于每个经理的平均兴趣水平得分),这也不奇怪。)更有趣的是接下来的两个特性,“每间客房价格”和“价格”。在我提到社区(或集群)是家庭找房子的一个决定因素后,这凸显了涌向城市寻找第一份工作的大学毕业生(纽约市租房人口的另一大部分)对租房的要求:便宜…
形象化
下面的方框图有助于我们理解最后一点:
Price per Room vs. Interest Level (from Tableau)
箱线图之间的差异非常清楚地表明,当涉及到上市兴趣水平时,每个房间的价格非常重要。
现在,让我们检查每个集群的平均价格和每间客房的价格:
Price vs. Price per Room per Cluster (Dot size reflects average Interest Level)
不出所料,曼哈顿中城(集群 23)的房价较高,紧随其后的是 Soho-West Village 地区(集群 10)。在光谱的另一端,因伍德-河谷镇(集群 12)似乎提供了“最好的交易”,紧随其后的是日落公园、格林伍德和湾脊(集群 14)周围的布鲁克林集群。较大的点(较高的利息水平)也往往位于地块的左下角,这里的价格较低,公寓密度较低。大多数集群都在曼哈顿之外。
Bedrooms vs. Bathrooms per Cluster (Dot size reflects average Interest Level)
比较卧室与浴室,只有一个小的迹象表明,更多的卧室吸引更多的兴趣,地块右边部分的集群比左边部分的集群略大。另一个观察是,曼哈顿公寓往往有更多的浴室,因为 1.25 线以上的所有集群都在曼哈顿,但浴室的数量似乎对兴趣水平没有太大影响。
惊人的发现
在列举一个地方时,也许“少即是多”:在照片和文字中。
列表上的图片越多,人们的兴趣似乎就越少。如果有更多的照片,找房子的人会有更多的机会发现房子的缺陷吗?猎人会因为照片没有被管理而感到无聊和烦恼吗?
Box plot of Photos per Interest Level (made on Tableau)
下面的第二个也是同样的意思:更多的文字,更少的兴趣…也许公寓猎人认为需要更多的文字来掩盖更多关于公寓状况的问题?或者,也许找房子的人注意力持续时间短,很快就会被未经编辑的空话弄得烦躁不安。
结论
公寓猎人和房地产经纪人,振作起来!
根据这些数据,以下是一些引起租赁清单兴趣的事实:
- 首先也是最重要的,价格很重要:有很多指标可以显示它,但我的模型中的功能重要性是一个很好的指标,几个与价格相关的功能排在前 10 位。
- 租房市场上寻找公寓的人的行为与销售市场上的不同。毕竟,大多数租房者认为他们的情况是暂时的,所以“位置,位置,位置”的旧规则不太适用于那些想租房的人。
- 远离市中心和较低的公寓密度增加了人们的兴趣。
- 把注意力更多地放在拍好照片上,而不是拍很多照片。浏览它们的时候疲劳很快就来了。
- 简洁精确的描述比冗长罗嗦的描述更重要。
我希望你喜欢这篇文章,并且能够在你尝试你家附近最新的热门餐馆时分享这些见解!
虚拟人的非深度强化学习——第一部分
强化学习初学者指南
我是 Udacity 深度强化学习纳米学位第一批的学生。这一系列的博客文章对我来说更像是给自己的笔记。我希望,通过写这些帖子,我能理清我的概念,也许还能帮助别人理解它们。在这篇文章中,我们将讨论什么是强化学习,并概述一个基本的强化学习环境。
当我们思考学习的本质时——强化学习:导论——我们最先想到的可能是通过与环境互动来学习
上面这条线,就是强化学习的全部,从互动中学习;从经验来看。作为刚出生到这个世界的人类和动物,我们不知道我们周围的世界是如何运作的。只有在与世界互动多年后,我们才开始理解它如何回应我们的行为,只有那时我们才能采取具体行动来实现我们的目标。
Basic diagram of a Reinforcement Learning scenario
类似地,在强化学习中,我们有一个与环境交互的代理。在每个时间步,代理接收环境的当前状态,并且代理必须选择一个适当的动作作为响应。代理执行动作后,代理会收到一个奖励和一个新的状态。
Robot moving in a strainght line (Source: Udacity)
就拿上面的例子来说吧。在上述具有从 0 到 4 的状态的环境中,我们有一个代理(机器人)可以左右采取两个动作。机器人的目标是到达状态 3。如果代理在位置 0 时选择向左移动,或者在位置 4 时选择向右移动,代理就保持在原地。同样,每当代理采取行动时,环境给代理奖励-1,并在达到状态 3 时给+10。为了理解第一张图,让我们考虑一个时间步长。
代理的当前状态为 1,随机采取动作离开。因此,环境给它的奖励是-1,它的新状态也是 0。让我们考虑几个小插曲来理清事情。顺便说一下,一集是代理应用随机动作的一次迭代,直到它达到目标,然后终止。
在第一集里,代理从状态 1、 S(1) 开始,有一个奖励为 0、 R(0) 。然后它向左执行一个动作并接收一个-1 的奖励, R(-1) 并在下一个状态 2, S(2) 中结束…最终在几个动作之后,它到达 S(3)并终止。在这一集的最后,代理人得到的奖励是 0–1–1–1+10 = 7
Episode 1
R(0)|S(1) → Left → R(-1)|S(0) → Right → R(-1)|S(1) → Right → R(-1)|S(2) →Right → R(+10)|S(3) → Episode Ends
--------------------------------------------------------------------Episode 2
R(0)|S(1) → Right → R(-1)|S(2) →Right → R(+10)|S(3) → Episode Ends
类似地,代理完成了第二集。但是注意,这一次,代理人获得的奖励是 0–1+10 = 9,高于第一次行动。
因此,强化学习就是学习做什么;将特定行动与情况/状态对应起来,以最大化数字奖励。代理人必须探索环境,并通过尝试了解哪些行为会产生最大的回报。代理人采取的行动可能会影响即时奖励以及下一个状态,进而影响所有后续奖励。你可以把这想象成蝴蝶效应,一个小小的举动可能会在未来导致巨大的回报或者非常糟糕的回报。
我们研究的上面的例子是我们所说的片断任务,它有一个明确定义的终点。还有一种类型的任务叫做**持续任务,**永远持续下去。课程中提到的一个令人敬畏的连续任务的例子是股票交易机器人,它连续分析市场并做出相应的决策,而不是每次都停下来。稍后我们将学习用于连续任务的算法。
为什么不那么深?
深度学习是当你使用一个深度神经网络来预测一个代理的行为。在这个系列中,我们将讨论几十年前开发的传统算法,它构成了强化学习的基础。
在接下来的几个部分中,我们将讨论可用于强化学习的各种算法。一些例子是 SARSA、SARSA-Max、蒙特卡罗方法等。所以,敬请关注。
第二部分已经出来了。点击查看。
虚拟人的非深度强化学习——第二部分
马尔可夫决策过程——强化学习初学者指南
This image is meant to signify an agent trying to decide between two actions. Photo by Caleb Jones on Unsplash
在我之前的帖子中,我们讨论了什么是强化学习,关于代理、奖励、状态和环境。在这篇文章中,我们将讨论如何将现实世界的问题表述为马尔可夫决策过程 ( MDP),以便我们可以使用强化学习来解决它。在我们开始之前,让我引用《T2 强化学习:导论》一书中的一些例子和可能的应用。
出生几分钟后,一只小瞪羚挣扎着站起来。半小时后,它以每小时 20 英里的速度运行。
象棋大师走了一步棋。这种选择是由计划(预测可能的回复和反回复)和对特定位置和移动的愿望的即时、直觉判断两者提供的。
一个移动机器人决定它是否应该进入一个新的房间寻找更多的垃圾来收集,或者开始试图找到回到它的电池充电站的路。它根据电池的当前充电水平以及过去找到充电器的速度和难易程度来做出决定。
在这篇文章中,让我们试着把移动机器人的第三个例子公式化为 MDP。让我们看看机器人拥有和能够采取的状态和动作。
状态—{高,低} 。机器人可以处于高电量状态,不担心充电,专注于搜寻垃圾;或者,它可以有一个低电量,并优先充电超过搜索。
行动 —在每个状态中,代理可以决定去搜索垃圾,等待有人将垃圾带到那里,或者返回充电站充电。当电池电量很高时,充电就没有意义了。因此,我们有以下动作集: A(高)——{搜索、等待} 和 A(低)——{搜索、等待、充电}
A figure showing the states of the robot, and the transitional probabilities and respective rewards. (Source: Udacity)
转移概率&奖励——转移概率或者他们正式的称呼;单步动态,是给定一个动作,从一个状态转换到另一个状态的概率。假设奖励大部分时间是 0,代理每捡一个垃圾获得+1。参考上图,我们来看一些观察结果。
当机器人的状态为高时,它可以决定搜索或等待。
- 如果它决定搜索(消耗电池),有 30%的可能性(0.3 的概率)代理可能从高转换到低,有 70%的可能性(0.7 的概率)该状态将保持高。假设在这两种情况下,机器人设法找到了 4 个垃圾,因此环境给了它 4.0 的奖励。
- 当处于状态高的机器人决定等待时。我们 100%确定(1.0 概率)机器人会保持同样的状态。在等待的时候,假设有人过来给了机器人 1 个垃圾,机器人因此获得了 1 英镑的奖励。
类似地,对于状态低,机器人具有它可以采取的动作; A(低)——{搜索、等待、充电}。
- 如果电池低,并且代理决定搜索,则电池很有可能(0.8)会耗尽,我们必须进行干预,将代理带到充电站,稍后结束于高状态。在这种状态下成功完成搜索操作的概率非常低(0.2),此后代理仍将保持在低状态。在决定搜索时,假设电池耗尽,需要人工干预才能到达充电站。在这里,我们需要惩罚机器人即使在电池电量低的时候也决定搜索,并给它-3 的奖励,无论它是否能够找到任何垃圾。类似地,在决定搜索时,假设它设法找到了 4 个垃圾桶而没有耗尽电池,因此它获得了 4 的奖励。
- 如果在这种状态下,代理决定采取动作再充电,则有 100%的可能性(1.0 概率)代理在采取该动作后将处于高状态。在决定充值时,代理人只是去了充值站,没有发现任何垃圾,因此最终奖励为 0。
- 同样,如果它决定等待,代理将肯定(1.0 概率)处于相同的状态低电平。与上面类似,假设在等待的时候,有人过来给了机器人 1 个垃圾,机器人因此获得了 1 的奖励。
那么,什么是马尔可夫决策过程呢?
为了使用强化学习解决现实世界中的问题,我们需要指定环境的 MDP,这将清楚地定义我们希望代理解决的问题。我们上面讨论的例子是一个有限 MDP 的例子。形式上,有限 MDP 被定义为—
- 状态的有限集合。
- 一组有限的动作。
- 奖励的有限集合,r。
- 环境的单态动力学。
- 贴现率(我们稍后会讨论这个问题)
结论
总之,这是我们需要用来准备问题的框架,以便我们可以使用强化学习算法来解决它。这适用于间断任务和连续任务。
到目前为止,我们已经学习了什么是强化学习(第一部分),以及如何通过指定环境的 MDP 来正式准备环境。在下一章,我们将讨论如何解决它。敬请关注。
没那么快:分析、颠覆和组织变革
我们最近的一个客户发现自己陷入了困境。他们是一家历史悠久的制造商,拥有业内最大的市值之一。几十年来,在可靠性和质量至关重要的领域,他们一直是客户信赖的供应商。
但是最近,他们的环境发生了变化。“颠覆者”正在进入他们的市场,他们可以以更低的价格销售竞争产品,质量更低,功能更少。这些颠覆者似乎对数字技术掌握得更好,并且擅长使用数据。我们的客户拥有大量数据,但刚刚开始战略性地思考如何利用这些数据来推动未来的增长和市场机遇。随着利润开始下滑,销售转向更便宜、更新的进入者,客户必须应对这种数字破坏。
分析:一种颠覆性的力量
很少有商业理论像克莱顿·克里斯滕森的颠覆理论一样具有影响力和普遍性,正如在创新者的困境中所描述的那样。颠覆理论解释了产品昂贵复杂的老牌企业是如何被产品不复杂但更便宜的新进入者“颠覆”的。随着新进入者的产品被采用,他们的利润增长,他们进一步侵蚀领导者的统治地位。最终,新进入者取代领先者成为该市场的首选供应商。最近在 HBR 的文章(包括克里斯滕森合著的一篇)强调,尽管在后工业时代、后互联网泡沫经济时代,颠覆理论的许多原则仍然适用,但颠覆的性质和速度正在发生变化和加速。
作为这种不断变化的颠覆的一个例子, Wessel 指出,新的颠覆者往往是风险投资、面向软件的企业,它们能够(并经常)筹集大量资金。与老牌竞争对手相比,这些新进入者通常是轻资产的;他们靠股本借钱,而不是信贷。现有的参与者发现很难足够快地筹集资金并投资于他们需要开发的技术和战略,以有效地与颠覆者竞争。
尽管在筹集资金方面处于劣势,但占主导地位的、市场领先的公司确实比他们新的、经验不足的竞争对手有优势:丰富的 数据。老牌公司拥有关于其客户和产品供应的大量信息资源,当通过分析进行探索时,这些资源将揭示颠覆性进入者无法利用的商业价值。由于许多这些根深蒂固的参与者没有将他们的数据视为资产,分析提供了以新方式做新事情的承诺——其自身的一种颠覆。因此,公司正在向数据基础设施、数据科学人才和分析项目投入大量资金,以重振运营、提高效率并开发新产品和服务。根据国际数据公司的估计,数据分析市场将在 2020 年超过2000 亿美元,因为公司将更多的资源投入到这些活动中。
分析:像我们想象的那样具有破坏性?
麻烦在于,老牌公司将分析视为解决他们破坏性问题的*,而不仅仅是将可能的优势 凌驾于他们破坏性的竞争对手之上。这是一个微妙但重要的区别。在我们作为预测分析顾问的 20 多年中,我们看到了成功实施分析的许多障碍,这些障碍也是阻止公司有效应对中断的障碍。其中包括:*
- 数据不足,无法解决相关问题
- 遗留的组织结构和 IT 基础设施
- 不灵活的人员和流程
- 职能部门之间沟通不畅
Newvantage Partners 最近在进行的一项调查显示,数据计划刚刚开始解决公司在颠覆中面临的问题。如图 1 所示,44.3%的公司成功利用数据投资来确定创新的新途径。然而,35.5%的公司尚未开始以这种方式使用数据。更麻烦的是,48.8%的受访者表示他们尚未开始使用数据来转变未来的业务(只有 48.4%的人表示他们已经开始)。
Figure 1. Survey results of various data initiatives and their success rates (Credit: IDC)
因此,一家公司在分析方面的成功受到许多同样的障碍和限制,这些障碍和限制使这些公司容易受到干扰,很少有公司成功地利用分析来转变他们未来运营的业务。
使用分析作为对中断的响应
尽管分析本身并不是应对中断挑战的解决方案,但有一些经过验证的方法可以确保分析的成功,这些方法应该是任何应对中断的计划的一部分。
- 制定前瞻性分析策略:对于大多数企业来说,想象一种新的做事方式是非常困难的。然而,这正是颠覆所要求的回应。正如马丁和 Golsby-Smith 所写的,有必要打破“现状陷阱”认为事物只会保持原样的信念。分析提供了以新的方式做出决策的可能性,但它是基于历史证据的。改变不仅仅是把旧的事情做得更好。如果要从数据中提炼出新的见解,那么就应该构建一个分析策略,并以能够实现成功的方式执行。这意味着优先开发原型,收集或获取新的数据源,并重组人员和流程以应对这些挑战。
- 强调速赢:没有什么比成功更容易让人兴奋。虽然用分析“moonshot”来解决中断可能很有吸引力,但麦肯锡最近的一项研究显示,较小的计划“通常更容易、更快地执行:它们的规模较小,涉及的批准层和协调较少。”他们根据规模或项目价值将计划分为巨石(> 5%管道)、鹅卵石(0.5%-5%)和沙子(< 0.5%)。作者发现鹅卵石和沙子计划的重复影响平均占已实现价值的 50%(见图 2)。获得早期的胜利,并庆祝它们将会产生兴奋并推动变革。
Figure 2. Recurring impact of a project based on size (% of total value)
- 培养开放沟通和解决问题的文化:尝试新事物将不可避免地导致更频繁的错误或失误。如果你是你所在市场的既定领导者,那么你的流程和结构很可能会针对你当前的解决方案进行优化。从一种效率文化转移到一种敏捷性文化可能会很困难。然而,我们最成功的客户培养了开放沟通的文化,这种文化注重解决问题(而不是羞辱问题)。我们也是根据自己的经历来说的。在 Elder Research,我们在帮助客户时尝试的许多初始或中间假设都没有成功,但那些失败的首次尝试对于提炼和塑造我们有价值的最终交付品是必要的。
例如,我们与一家大型医院系统的持续合作不断取得成功,这要归功于从上到下贯穿整个组织的开放性和尊重。一线员工乐于向他们的领导表达自己的意见,而且表达时考虑周到,彬彬有礼。同样,管理层清楚地表达他们的决策,这产生了信心。
摘要
我们的客户对他们的干扰者有什么反应?他们首先构建了一个强大的数据收集管道和数据存储基础设施。数据治理和标准化很早就得到重视,因为分析模型依赖于高质量的数据。最后,他们确定了其产品组合中可以受益于预测建模的重要产品,并开始开发模型并将其部署到生产中。作为一个敏捷策略,这是一个不断发展的过程,修改正在考虑之中。当结果开始出现时,他们在自我破坏的同时快速学习和成长。
当面临破坏性竞争对手带来的新挑战时,明智的做法是求助于分析来寻找新的业务方式。然而,分析本身并不能解决中断带来的问题。事实上,许多使响应中断变得困难的挑战也是使分析项目脱轨并阻止它们完全成熟的挑战!然而,成熟的参与者可以很好地利用分析作为对中断的战略响应的一部分。他们必须制定前瞻性的分析战略,强调速赢以建立势头和利益相关方的支持,并培养开放沟通和解决问题的文化。然后,成熟的领导者可以获得他们需要的数据驱动的洞察力,以阻止他们所在领域的颠覆浪潮。
请求咨询 讨论前辈研究如何帮助你利用分析手段瓦解竞争对手。
有关系的
阅读博客领导成功的数据分析计划的三大关键
阅读博客制定有效的分析策略:成功路线图
阅读博客避免最致命的预测陷阱
原载于www.elderresearch.com。**
[注]统计推断:大局
罗伯特·e·卡斯,安德鲁·盖尔曼评论
这篇文章包含了我对这篇文章的笔记和相关评论:
- 卡斯,R. E. (2011 年)。统计推断:大图。统计科学,26(1),1–9。
- 盖尔曼(2011)。贝叶斯统计实用主义。统计推断的讨论。统计科学,26(1),10–11。
这是一篇高水平的论文,从题目就能看出来。它试图把我们从频繁主义者/贝叶斯的泥潭中拉到统计学领域更重要的方面,即模型和真实数据的不匹配。这让我想起了乔治·博克斯的名言:
所有的模型都是错误的,但有些是有用的。
在我看来,这是每个统计学家或数据科学家的好读物。(你可能至少需要一些基本的统计学背景才能读懂它。)论文的某些部分可能需要一些时间来消化,所以每隔一段时间回顾一下是值得的。
统计实用主义
在本文中,卡斯描述了"“占主导地位的当代统计哲学,并称之为"统计实用主义”,试图" 将理论假设与真实数据世界的匹配或不匹配置于我们逻辑框架的中心。“而不是教学生“正确背诵置信区间的长期解释”(重点是频率主义者/贝叶斯二分法。)
卡斯认为上面图 3 中描述的标准“大图”故事是“不是一个很好的统计推断的一般描述”,并提出了如图 1 所示的新观点(我认为图 1 更准确)
图 3 试图表达的概念是:
费希尔引入了从一个假设的无限总体中抽取随机样本的概念,而尼曼和皮尔森的工作鼓励了后来的数学统计学家放弃“假设”这个词,转而将统计推断描述为类似于从一个有限总体中简单的随机抽样。
虽然图 1 试图提醒我们:
…寻找重要的假设,询问它们是否合理准确地描述了数据的变化。
为了更加强调“假设”部分,Fishers 的“ 群体均值“ (相对于样本均值*)可以替换为“*”。**
统计思维有两个原则:
- “数据中的规律性和变异性的*统计模型,可以通过归纳推理,用来表达噪声存在下关于信号的知识和不确定性*。”(“… 将统计推断的来源确定为数据和统计模型之间的假设联系。”)**
- “可以对统计方法进行分析,以确定它们的表现有多好.”(“… 相同种类的统计模型可用于评估统计程序”)
比较使用概率来描述变化和表达知识:
- 侥幸概率:用公平骰子掷出 3 的概率是 1/6 ”
- 认知概率::我 90%确定怀俄明州的首府是夏延。
Bayesians 合并这些,应用概率法则从定量描述到量化的信念,但在每一种形式的统计推断中,偶然概率被用于,以某种方式,作出认知陈述。
现实世界与理论世界
FIG.4. A more elaborate big picture, reflecting in greater detail the process of statistical inference. As in Figure 1, there is a hypothetical link between data and statistical models but here the data are connected more specifically to their representation as random variables.
仔细考虑模型和数据之间的联系是统计实践艺术和统计方法科学的核心组成部分。
"让我们假设数据是正态分布的"是假设"数据的可变性与随机样本中发生的可变性充分一致的简写。
…数据不应与随机变量混淆。随机变量存在于理论世界中。
解释
常客:
- 频率主义者对置信区间的解释:如果我们从一个 N(,1)分布中抽取无限多个 随机样本,95%的对应置信区间(\ bar { X }—2/7,\bar{X}+ 2/7)将被覆盖。
- 置信区间的实用解释:如果我们根据上述假设抽取一个随机样本,得到的置信区间(\ bar { X }—2/7,\bar{X}+ 2/7)将有 覆盖 的概率 0.95。代入= 10.2,我们得到区间 I,只要我们的理论世界与产生数据的真实世界一致,我们就能得出有用的结论
贝叶斯:
- 后验区间的贝叶斯解释:在上述假设下,处于区间 I 的概率为 0.95。
- 后验区间的实用解释:如果数据是一个随机样本,其中 10.2 成立,并且如果上述假设成立,那么在区间 I 中的概率将是 0.95。这是指随机变量的一个假设值,因为 X 生活在理论世界中,所以这个陈述仍然是理论性的。
(注意在贝叶斯案例中,两种解释都有相同的陈述:“在区间 I 中的概率是/将是 0.95”)
在这里,虽然贝叶斯方法在理论世界中逃脱了间接的信任,但它在数据分析的世界中也逃脱不了,因为仍然存在用随机变量识别数据的附加层。
总之,
频率主义者和贝叶斯推理之间的共同点是理论假设的使用,以及虚拟陈述……该推理基于如果数据是按照统计模型分布的随机变量时会发生什么。如果模型是以准确描述数据的变化,则该建模假设是合理的。****
统计学家
…统计学家以谨慎的态度给出了推论。
“信念的飞跃”——跨越现实理论的桥梁,在没有明确的机会机制的情况下,使统计推理在绝大多数应用中成为可能。
…统计学的独特之处在于,每次应用一个模型时,它都不得不面对理论和现实世界之间的差距,在我看来,这是我们为科学合作者提供的很大一部分。统计实用主义认为,所有形式的统计推断都会做出假设,只能非常粗略地进行测试的假设(用拟合优度方法之类的东西)和几乎永远无法得到验证**。这不仅是统计推断的核心,也是我们领域的大智慧。**
置信区间和假设检验
在 ney man-Pearson 推理理论中,置信度和统计显著性是一枚硬币的两面,置信区间是一组不被显著性检验拒绝的参数值。
在现代贝叶斯方法中,置信区间/后验区间是以假设模型 为条件的关于参数的推断的 。假设检验/模型检查是“ 将观察到的数据与模型下的复制进行比较的过程,如果它是真的话 ”。
统计的不同流派
像卡斯一样,我相信哲学辩论可能是一件好事,如果它们激励我们仔细思考我们未经检验的假设。或许,即使是很少相互交流的子领域的存在,也是允许不同的研究分支在多元化环境中发展的进步源泉,如果统计交流被任何单一的不容忍团体所主导,这种方式可能不会如此容易。抽样、推断和模型检验的思想在许多不同的统计传统中都很重要,我们很幸运有这么多不同的思想来启发我们的应用和方法研究
作为一名数据科学家的采访笔记和技术问题:2021 年更新
在我目前的职位上工作了近三年后,我决定离开去追求一个不同的机会。这给了我采访和发现新公司的机会,同时锻炼了我的技术能力,了解了不同企业的内部运作及其对数据科学的利用。
总的来说,在面试过程中,我发现了一些趋势,我认为这些趋势对任何寻找数据科学家职位的人都有帮助。此外,我还收到了许多技术性的面试问题,这些问题概括了我多次遇到的问题。
确保“数据科学家”的角色是合适的
在官方数据科学家职位设立十年后,你认为行业应该已经正式确定了工作要求和职责。这不是真的。有些大公司想要荣耀的数据分析师。有些创业公司想要涉足 tensorflow 的软件工程师。还有一些公司想要一名数据科学家,因为他们的首席执行官喜欢保留一个奖杯。
你的实际技能包括什么,你对下一个职位的要求是什么,你应该在面试招聘人员的时候就已经明确了,因为他们会对这两个方面都有要求。你对下一个角色有什么期待?你现在的背景是什么?一般来说,有了这两个问题,你就可以判断出你是否适合一名基于工程的数据科学家(机器学习工程师),或者可能是一名产品数据科学家(业务驱动的),或者是天底下所有与数据相关的人。
在面试了前几次后,我想出了如何安抚招聘人员。重复工作要求通常会奏效。但是事后来看,如果我在学习了定义的角色后,实际上不想专注于数据科学领域,那么继续面试又有什么意义呢?它在两端都浪费时间。面试需要大量的时间以及精神和情感上的能量。这使我想到…
永远不要做带回家的作业
这个有争议。我会在一周的任何一天就编码任务进行技术视频或电话面试。我在这个问题上坚持自己的观点,原因有几个,人们可能同意也可能不同意我的观点。
但是如果一定要做带回家的挑战,看看这个就知道怎么过了。**
1。你让自己受制于完全模糊的要求。
在进行技术视频/电话采访时,你在解决问题的过程中获得了总体的增量反馈。每个面试官都知道自己想要什么,如果他们看到你走上了一条不同的/错误的/无用的道路,那么他们会(或者他们应该)用尽可能多的反馈来纠正它,告诉你实际的答案,或者只是一个不正确的答案。在编码任务中,你什么都得不到。你每次都在参加非标准化考试**,评分者很可能有偏见。你可以把全部精力花在分析数据上,去寻找评分者根本不在乎的东西。我接到一个任务,当我问招聘人员时,任务中的要求就像“分析一个数据集,并把它变成一个演示文稿”一样模棱两可,没有任何进一步的澄清。不用说,我不明白为什么我没有通过,也不明白我最终应该做什么。**
2。没有一个真正的时间表。
他们给出的估计是“这项任务通常需要 3 到 6 个小时”以及“大约 2 到 7 天就可以完成”。对我来说,这意味着其他候选人现在要花 6 到 12 个多小时完成带回家的作业。为什么不呢?带回家的作业旨在筛选出候选人,因为你通常会与之前布置作业的其他候选人进行比较。致力于在挑战中做好工作意味着找出问题的每个边缘情况,加上围绕评分者自身偏见的边缘情况。那么,为了超越所有竞争对手,你为什么不花 12 个多小时来完善它,然后告诉招聘人员你“真的只用了大概 3 个小时就完成了?”
3。你通常得不到任何反馈。
有什么比花了 12 个多小时完成一项任务却没有得到工作更糟糕的呢?无法找出自己做错了什么,并利用它迭代到下一个同样需要赋值的位置。
4。你在告诉他们,你的时间比公司的时间值钱。
想象一下,面试五份不同的工作,他们都想要编码任务。想象一下,你实际上只做了他们告诉你要花在这上面的分配数量。在你的全职工作之外,还有 15 到 25 个小时的带回家的枯燥工作,这构成了免费的无薪工作。再见了,周末。再见了,你的决心。也许就和想要编码任务的公司说再见吧。****
注意事项。它们有助于计算出你在工作中将要做的工作。很多时候,初创公司会从他们的数据中抽取一个样本,然后考虑周到地给出模拟实际作业的作业和问题。
这也是未经证实的候选人变得有竞争力的一个好方法。有抱负的数据科学家或研究生应该利用编码作业,并尽全力使其完美。有了无尽的资源和时间,它通常可以让候选人展示出努力工作和付出的精神。因此,虽然对一些人不利,但对另一些人可能是有利的。
我认为真实的面试问题概括了 DS 面试的许多方面
数据科学家技术访谈部分现在包含大约六个主题。
这些都是我被问到的非常真实的问题。
编辑:想要更多问题和解决方案?在这篇和其他博客帖子流行起来之后,我创建了 面试查询 ,一个练习数据科学面试问题的网站。
Python 脚本
- 嘶嘶作响
- 给定一个按顺序排列的时间戳列表,返回一个按周聚合分组的列表列表。
- 给定一个字符列表、每个字符的先验概率列表和每个字符组合的概率矩阵,返回概率最高的最佳序列。
- 给定一个日志文件,其中包含以日期、数字和名称字符串为特征的行,解析该日志文件并返回按月份聚合的唯一名称的计数。
阅读更多关于Python 数据科学面试题 这里 。
产品
- 假设 Google Docs 没有被跟踪的指标,一个产品经理找到你,问你会实施的前五个指标是什么?
- 此外,假设谷歌文档的参与度有所下降。你会调查什么?
- 假设我们想要实现一个通知系统,用于提醒护士让医院的病人出院。你将如何实现它?
- 假设在 LinkedIn,我们希望在新的消息平台上为“活跃用户”实现一个绿点。您将如何分析推广 it 的有效性?
以下是关于如何解决 产品数据科学面试问题 以及你将会遇到的五种不同类型的产品问题的深入指导!
SQL
- 给定一个付款交易表和一个客户表,返回客户的姓名和客户进行的第一笔交易。
- 给定一个付款交易表,返回每个客户付款次数的频率分布。(即 1 笔交易— 100 个客户,2 笔交易— 50 个客户,等等)
- 给定相同的付款表,返回累积分布。(至少一个交易,至少两个交易,等等……)
- 给定一个表—朋友 1 |朋友 2。返回两个好友之间共同好友的数量。
阅读更多关于 sql 中哪些 概念要了解要通过面试
AB 测试
- 给定 AB 测试漏斗统计数据,如样本大小、注册率、功能 1 使用率、功能 2 使用率,分析哪个变体胜出以及原因。
- 你将如何设计一个实验来改变注册页面上的一个按钮?
- 如何知道自己是否有足够的样本量?
- 如何对多个变量进行显著性测试?
- 如何减少 AB 测试中的方差和偏差?
- 向产品经理或非技术人员解释 P 值和置信区间。
机器学习
- 你会使用什么特征来预测餐馆从收到订单开始准备食物所花费的时间?
- 你能想出一个你宁愿低估而不是高估的场景吗?
- 分析一个模型的结果,你如何解释偏差和方差之间的权衡?
- 解释随机森林模型实际上是如何工作的。
- 你如何知道你的模型是否有足够的数据?
- 你如何评价一个模特?(F1 分数、ROC 曲线、交叉验证等…)
这里有一个关于如何解决 机器学习面试问题 以及你会遇到的六种不同类型的机器学习问题的深度指南!
可能性
- 给定均匀分布 X 和 Y,两者的均值为 0,标准差为 1,2X > Y 的概率是多少?
- 一部电梯四个人,一栋楼四层。每个人在不同楼层下车的概率是多少?
- 两个人在同一楼层下车的概率有多大?
- 给定一副从 1 到 100 的卡片,选择 1 < Pick2 < Pick3?
商业案例问题的概率是多少
- 我们知道,该产品每月成本为 100 美元,每月平均流失率为 10%,平均客户停留时间约为 3.5 个月。计算每个客户的平均寿命值。****
- 您如何确定网飞订阅的价格是否真的是消费者的决定因素?
- 假设你为 Lyft 工作。Lyft 正在测试三种不同的取消费用:1 美元、3 美元和 5 美元。你将如何决定哪种取消费用?
阅读我关于如何接近和利用 数据科学案例研究问题 框架的文章。
是的。数据科学面试很难。
提示:试着找出面试官或网上给你的每个问题的答案。因为如果你失败了,你很可能会在另一次面试中遇到这个问题的变体。还有,这种情况发生的概率有多大?;)
查看一些 模拟面试 这些问题应该如何回答。
最后,雇主正在疯狂雇佣数据科学家
数据科学家的市场仍然非常紧张,因为对于需要增长或赚钱的公司来说,一般角色变得越来越必要。即使我最终要求拒绝编码挑战,我仍然得到了许多公司愿意放弃,将面试过程转换为技术面试。2020 年的数据科学在市场上异常火爆,在这个市场上数据科学家有潜力为业务的许多不同部分做出贡献*。***
随着新冠肺炎导致许多公司裁员,疫情仍有生意兴隆,如door dash沃尔玛亚马逊网飞 。然而,最终,由于有这么多的申请人,这无疑增加了竞争相同职位的候选人的供应。********
我注意到的是,与几年前未经证实的经历相比,这次当我开始搜索时,简历上的一点经验有多重要。我鼓励那些希望在没有经验的情况下进入这一领域的人,先做几个项目,以展示在这一领域的整体激情。从根本上说,这份工作在我看来仍然是最酷的工作之一,因为数据科学家可以凭借他们的技能以及他们对不同业务目标的贡献而变得多才多艺。
什么时候一个人能成为任何新工作的第一人?十年真的不是那么长的时间。
感谢阅读
- 如果你对更多来自我的数据科学面试问题、技巧和诀窍以及指南感兴趣,请查看 面试查询 。
- 查看我的 Youtube 频道 了解更多数据科学面试技巧、技巧和模拟面试示例!
- 查看更多关于产品分析师、数据分析师和机器学习工程角色的指南。
JupyterCon 笔记 Jupyter 项目如何实现大规模数据科学
提高企业采用率,新工具/扩展,提高数据科学的新方法。
Credit: O’Reilly Flickr
在刚刚结束的 JupyterCon 2018 大会上,它真的是关于利用项目 Jupyter 的力量进行协作、可扩展、可扩展和可复制数据科学。我参加了为期 3 天的教程、讲座、主题演讲和海报会议(在会上,我介绍了我在自动化可视化方面的最新进展)。下面是 TLDR 对我感兴趣的一些亮点的总结:
- Jupyter 已经成为一种在学术和行业环境中轻松共享代码、分析和结果的方式。学校使用它来提供课程,而分析师、记者、研究人员、大型组织等使用它作为一种可扩展的方式来管理他们的数据分析工作流。
- 企业使用 Jupyter 笔记本正在改变。与临时使用(即员工个人使用笔记本电脑)相反,企业开始探索企业范围内的企业管理 Jupyter 部署。
- 企业正在扩展 Jupyter 来解决新的问题/用例,并且已经开始将他们的更新作为产品和开源软件(OSS)反馈回来。例子:IBM ( Watson Studio 、Jupyter Enterprise Gateway)、网飞(interact、papermill、commuter、titus)、谷歌(Colaboratory、Dataflow、Kaggle)、亚马逊(SageMaker)等。
- 访问和安全性正在成为一个重要的焦点领域(谁可以访问笔记本、笔记本的哪些部分、笔记本中的数据/结果)。随着企业(具有良好定义的资源访问策略)将 Jupyter 集成到他们的 datascience 工作流中,定义符合现有策略的模板和数据访问规则变得越来越重要。
- 需要一种更加谨慎的开源方法。维护一个像 Jupyter 这样的大型开源项目是很困难的,尤其是当负担落在少数人身上的时候。我们需要探索更多的方法来支持社区和维护过程(付费维护者,企业资助等)。
主题演讲—
以下是一些主题演讲和见解的摘要:
来自石溪大学物理和天文学系的威尔·法尔提到了他和超过 1000 名天体物理科学家组成的团队(在 LIGO )如何使用 Jupyter 笔记本分享引力波天文学的成果。
会议联合主席 Paco Nathan 强调了 Jupyter 社区的趋势和主题。他提到了 Jupyter 在大型企业中的采用如何实现快速进步(学生已经知道 Jupyter,不必花时间学习专有工具),Jupyter 如何在行业(硬件、软件、流程)快速变化的情况下帮助您的基础设施适应未来,以及它如何帮助解决隐私问题。
Jupyter 项目的领导者 Carol Willing 强调了 Jupyter 是如何让用户更容易编写代码并鼓励实验的。然而,她也警告说,挑战可能会限制 Jupyter 项目的成功——自私的用户,他们索取的比给予的多(以牺牲集体为代价最大化个人利益),维护者的倦怠,维护者的不认可,自满的旁观者等。她还讨论了整合商业模式和赠款作为解决这些问题的方法的想法。
哥伦比亚新闻学院的马克·汉森讲述了一个有趣的故事,讲述了 Jupyter 笔记本如何成为帮助记者将数据、代码和算法整合到数字新闻中的“工具”。他给出了一个学生项目的具体案例,在这个项目中,他们进行了实验,以确定虚假 twitter 账户对信息传播的影响。更有趣的是,实验结果导致了数百万 twitter 账户的大规模清理,以及《纽约时报》发表的数字/印刷文章。
来自 Carpentries 的 Tracy Teal 讨论了他们通过在世界各地举办数百个研讨会来帮助用户培养数据技能的工作。她认为,人是将数据转化为洞察力的关键,并推动了对扩大拥有数据技能的人数的关注。她分享了一段有趣的话
如果你想走得快,就一个人走;如果你想走得远,就一起走。
哥伦比亚大学地球与环境科学助理教授 Ryan Abernathey 解释了为什么我们应该将数据存储在云中。他提到,复杂的问题通常需要大型数据集(TB、PBs ),这些数据集有时会被锁定在缓慢的 FTP 门户或其他本地存储系统之后。然后,研究人员必须创建暗库(数据的本地副本),这可能是原始数据的子集,会限制他们探索不同研究问题的能力。他提倡使用云(和相关工具)包括- zero3jupyterhub+kubernetes、并行计算(DASK、Spark)、领域软件(xarray、astropy)、云优化数据。他提到,美国宇航局已经开始在这个方向取得进展,承诺在未来 5 年内通过云端点提供数十亿字节的数据。
网飞数据工程和基础设施主管 Michelle Ufford 强调了网飞在 Jupyter 笔记本电脑上下大赌注的原因。她提到笔记本是未来的发展方向,它们不仅仅是提供交互功能,更重要的是
笔记本弥合了技术和非技术团队成员之间的鸿沟。
她讨论了网飞如何在笔记本电脑上投下了巨大的赌注,将超过 10k 的工作流迁移到笔记本电脑。在网飞,他们围绕笔记本创造了多种用例(和工具),包括数据访问、不同任务的笔记本模板,甚至笔记本日程安排!更多信息请点击网飞科技博客。
会谈-
会议联合主席 Brian Granger 发表了关于“利用开源的商业案例和最佳实践”的演讲。他讨论了使用方面的变化(例如来自亚洲的高流量和兴趣)、开放源码软件的回报(免费 3-5 年研发,允许公司专注于核心业务,支持灵活定制)和开放源码软件的风险(破坏性影响、周转缓慢、缺乏企业支持)。他还为有兴趣参与 OSS 项目的企业提出了最佳做法——花时间了解 OSS 的真正需求,从帮助审查 PRs 开始(实际的代码编写构成 OSS 过程的一小部分)。要避免的事情——不要雇佣 OSS 项目维护人员,把他们的时间分配给其他项目;这损害了社区。
来自 NYU 城市科学与进步中心的教授 Julia Lane 讨论了 Jupyter 笔记本如何用于涉及公共政策所需敏感数据的项目。她描述了她在劳动经济学方面的工作如何需要来自多个机构的数据(例如,来自美国国税局等机构的企业数据,以及来自审查局的雇员数据)。这些包含机密的微数据(例如,ein、SSN 等),需要高安全标准。此外,很难实现一个“数据交换所”的等价物,在那里多个机构可以“共享数据”——他们可能没有共享这些数据的动机。她建议采用一种方法,取代信息交换所,围绕特定问题组织数据收集工作,建立完整的团队(数据分析、网络分析、机器学习、文本分析、用户行为等)。),并培训适当的机构工作人员。
专家组|当前环境——合规、道德、ML 模型解释,GDPR
小组成员探讨了几个问题,包括对 GDPR 的回应。Julia Lane 分享了一些关于 GDPR 如何基于两个有问题的概念的想法——知情同意(她提到这毫无意义)和数据匿名化(她提到数据可以去识别但不能匿名化)。她建议我们更多地走向“数据的道德使用”(也许是数据科学家的希波克拉底誓言)。来自网飞的米歇尔·乌福德也提到所有的数据都是有偏见的,我们不应该问“我的数据有偏见吗”,而是应该问“我的数据有什么偏见”。其他人也鼓励设计自动化偏差测试的工具,并引入模型测试者/破坏者的角色——质疑、测试和破坏模型的个人(相当于传统软件工程开发中的 QA 工程师)。
学习资源
- 来自彭博的 Chakri Cherukuri 做了一个关于机器学习算法可视化的有趣演讲。笔记本在此—https://github.com/ChakriCherukuri/jupytercon_2018
- 来自 NYU 的布鲁诺·冈萨尔维斯发表了一篇关于 Matplotlib 数据可视化的教程。https://github.com/bmtgoncalves/DataVisualization
有趣(也有点出乎意料)的是看到像两个适马、第一资本等金融公司在 OSS 中担当领导角色并贡献代码/项目。
结论
pronoun and expertise tags at JupyterCon 2018
会议的组织工作非常出色(我有没有提到午餐时供应的美味热餐?)用体贴的手势让与会者感到受欢迎和融入。从 pacman 规则(当你们聚在一起交谈时,多留一个人的空间)到有助于促进与会者之间交流和互动的标签(围绕兴趣/专长的标签——“雇用我”“我正在雇用”“ML/AI”,首选代词“他/她/他们”等)。).我离开这次会议时,感受到了所做的出色工作、Jupyter 项目社区成员的慷慨精神及其在不同领域的影响。展望未来,我计划用笔记本做更多的事情(分享演示、示例代码等)。
非常感谢会议共同主席帕科·内森、费尔南多·佩雷斯和布赖恩·格兰杰;出色的工作!感谢会议的主办方 Jupyter 项目、奥赖利媒体公司和 NumFOCUS 基金会。感谢第一资本慷慨的奖学金,让我参加这个非常有趣的会议!绝对期待 Jupytercon 2019!