计算机图形学中人工智能的 3 个挑战
缩小虚拟世界和现实世界之间的差距
计算机图形不仅仅是惊人的视觉效果。它为我们提供了为不同目的重建物理世界的工具,例如工业或医疗应用。
这个领域的图形图灵测试很久以前就通过了,正如当前的摄影和电影技术状态所证明的。现实和幻想几乎无法区分,动画师可以在几天内创造出逼真的世界。
图形图灵测试: 受试者观察并与真实或计算机生成的场景互动。如果受试者不能比随机猜测更好地从模拟现实中确定现实,则测试通过。
在这个话题上,人工智能的最新进展提供了相当大的帮助。Ian Goodfellow 几年前推出了一种新型的神经网络架构,称为生成对抗网络(GAN) ,能够推动计算机图形学中可能出现的边界。应用是无穷无尽的,但正如斯坦·李教导我们的那样,强大的力量伴随着巨大的责任。事实上,如果没有适当的控制,生成与现实难以区分的图像和视频可能会对我们的社会构成真正的威胁。看看这段人工智能生成的假奥巴马的视频,就明白我的意思了。
用于流体模拟的人工智能新兴领域
模拟流体的动力学一直是一个巨大的数学挑战。最先进的技术需要巨大的计算能力,对于实时模拟更是如此。首先,需要提醒的是,术语流体包括液体、气体和等离子体。烟、风、水、火是流体的一些例子。
如果你熟悉计算流体动力学(CFD) ,你在你的道路上已经多次遇到纳维尔-斯托克斯方程。这些偏微分方程将运动流体的速度、压力、温度和密度联系起来,扩展了之前引入粘度效应的更简单的模型。我们不打算描述它们,因为它们非常复杂,没有适当的流体力学背景不适合,但如果你对它们感兴趣,你可以查看文章末尾的链接。寻找这些方程的解是不合适的,原因有两个:它们依赖于数据,因此方法被截断以适合计算预算,并且可能表现出非常慢的渐近收敛。
为了解决这些问题,机器学习最近引入了一种新的方法,将流体动力学环境建模为监督回归问题。神经网络和回归森林给出了很好的结果,但是它们需要由精确解算器提供的解的数据集。这在模拟测试期间是不可能的,因为初始帧是由模型本身生成的(它不是一个精确的解算器)。结果是不完善的,这一模型的应用受到限制。
描述物理世界的一种新的令人兴奋的方法涉及到无创或天真物理学的概念。人工智能的这一新领域涉及基于经验预测涉及宏观对象的物理交互结果的能力。让我们看一个例子:婴儿不知道什么是重力,但是通过经验,他们拥有重力的概念。这个想法是创造能够模拟直觉物理的人工神经模型。Tompson 等人的工作属于这一阵营,他们开发了一种新颖的定制 ConvNet 架构来取代现有的基于欧拉的求解器,并引入了一种新的训练损失来保证更快的收敛。
非线性软组织动力学:皮肤建模
获得逼真的人体模型是计算机图形学的主要目标之一。身体的表面需要自然变形。在实时应用中,身体由骨骼运动控制。由于这个原因,表面被链接到它的骨骼姿态,并且皮肤的动画是它的一个功能。这是如何实现的?
最常见的算法是线性混合蒙皮(LBS) ,也被 Unity 和 Unreal 使用。它计算量不大,并且在大多数情况下都能给出好的结果。尽管如此,还是有一些缺点。主要问题是在关节旋转过程中,强烈的弯曲或不真实的效果会导致体积的过度损失。
第二个重要的策略是数据驱动的身体模型。该模型划分了姿势和形状的参数,并允许对身体进行更深入的控制。这里的主要问题是缺乏对非线性动力学的控制。我说的非线性动力学是什么意思?软组织,像人的腹部,对力的反应不是线性的。它弹跳,旋转,抖动。这些运动不能用非线性模型来恰当地描述。
为了解决这个问题,引入了数据驱动的动力学模型。这些算法通常用于面部运动或布料动态。Casas 和 Otaduy 最近应用了最后一个类别的一个非常有趣的应用(本文最后的链接)。他们成功开发了一个数据驱动的模型,以模拟用公开可用的骨骼运动数据训练的非线性软组织动力学。与每个机器学习模型一样,这种新方法也不能正确描述远离训练集的变形。必要时,克服这一限制的唯一方法是采用基于物理学的人体模型。这些模型非常精确,但要复杂得多。
计算机图形学中的布料和材料理解
第三个巨大的挑战是布料的模拟。布料材料回收方法需要复杂的实验装置来获得物理特性。再现织物的正确行为可能极其复杂,研究人员正在应用机器学习方法来重现它的动态。了解布料的特性不仅在动画中有应用,在完全不同的领域也有应用。让我们考虑一个服装虚拟试穿系统:捕捉这种材料的动态可以打开电子商务中提供的一系列新服务。如果我们考虑虚拟现实的进步,这一点尤其正确,它将允许更真实的虚拟购物,给我们提供虚拟试穿衣服的可能性。
目前,反演动力系统的物理性质有多种方法。最直接的方法是通过测量、物理量采样和估计相关属性。第二个重要策略是模拟、优化和迭代动态系统,逐渐提取更接近真实值的特征。
结论
我们刚刚看到了人工智能在计算机图形学中的三个挑战。在物理世界的再现中,这三个范畴是融合在一起的:想想一面被风吹动的旗帜。在这种情况下,所有三个概念都出现在一个事件中。
当然,还有一系列未解决的问题,我将在下面的文章中分析它们。如果你喜欢这篇文章,我会喜欢你点击鼓掌按钮👏所以其他人可能会偶然发现它。对于任何意见或建议,不要犹豫留下评论!
要查看更多我的故事:
人工智能是种族歧视吗?(及其他关注点)
我是一名数据科学专业的学生,热爱机器学习及其无尽的应用。你可以在 maurocomi.com找到更多关于我和我的项目的信息。你也可以在 Linkedin 、 Twitter 上找到我,或者直接发邮件给我。我总是乐于聊天,或者合作新的令人惊奇的项目。
参考
https://www.grc.nasa.gov/www/k-12/airplane/nseqs.html
杨,s,梁,j,&林,M. C. (2017 年 10 月)。基于学习的视频布料恢复。IEEE 计算机视觉和模式识别会议论文集(第 4383–4393 页)。
卡萨斯博士&奥塔杜伊硕士(2018)。为交互式化身学习非线性软组织动力学。
汤姆普森,j .,施拉克特,k .,斯普雷赫曼,p .,&柏林,K. (2016)。用卷积网络加速欧拉流体模拟。arXiv 预印本 arXiv:1607.03597。
3 种常见的数据科学职业转变,以及如何实现这些转变
当我学习物理的时候,我经常需要在谷歌上查找听起来很奇怪的技术术语。当我这样做的时候,第一个点击往往是维基百科的一篇文章。
但是,尽管维基百科的条目很棒,但它们似乎从来没有达到我的水平。它们几乎总是让我摸不着头脑,或者对我的用例来说太简单了。这种情况如此频繁地发生,以至于我忍不住称之为互联网定律:“没有一个技术性的维基百科条目能够同时具有可理解性和知识性”。
我认为许多数据科学职业建议(或求职/面试准备建议)都遵循类似的规律:有针对完全初学者的帖子,有针对资深软件工程师的帖子,还有旨在帮助初级数据科学家磨练技能的帖子。所有这些噪音使得许多有抱负的数据科学家很难知道在他们寻求过渡到该领域时应该在哪里投资时间。
这是我在与学员一起研究敏锐思维时关注的主要问题之一。虽然没有适合所有人的万能解决方案,但我发现我总是给大约 3 类不同的人相同的建议。
第一类:完全初学者
如果你刚刚进入数据科学领域,请记住这一点:这个领域发展非常快,所以我在这里给出的任何建议几乎肯定会在你准备好工作时过时。让人们在 2017 年被聘用的东西在今天已经不起作用了,今天的数据科学招聘标准与一两年后适用的标准之间的差距可能会更大。
现在,如果你想进入数据科学领域,并且还没有编码/STEM 背景,这里有一些建议:
- 首先,保持开放的心态。如果你是一个完全的初学者,那么根据定义,你实际上并不知道什么是数据科学*,所以这完全有可能根本不是你想要的工作。联系 LinkedIn 上的一些数据科学家,请他们喝杯咖啡&聊聊天。关注数据科学播客。成为一名数据科学家需要投入大量的时间和精力,所以仅仅因为你认为无人驾驶汽车很酷就一头扎进去并不是一个冒险的好理由。确保您了解数据科学不太光彩的方面,如数据争论和构建数据管道,这些占据了数据科学家日常工作的大部分。*
- 如果你决定前进,那太好了!你需要做的第一件事是学习 Python。拿个 MOOC,尽快,建个基础项目。当您对 Python 技能驾轻就熟时,可以学习如何使用 Jupyter 笔记本,并参加一些数据科学 MOOCs。如果你正在寻找更具体的指导,这篇博文展示了一条很好的学习之路。
- 如果你真的是从零开始,瞄准一个全职的数据科学职位不一定是最好的主意。相反,瞄准更容易实现的目标:数据可视化或数据分析角色需求很大,是更容易进入市场的方式。它们通常涉及与数据科学家一起工作,并且一旦你获得了一些经验,就有可能在那个方向上横向移动。
***如何打造自己的品牌:*如果你已经准备好申请工作,你可能会惊讶地发现,打造个人品牌在数据科学领域异常重要。你可能会担心,因为你没有任何专业经验,或者没有计算机科学的研究生学位,品牌可能会成为一个问题。但这实际上可能是你最大的品牌优势:你是自学成才的开发人员/数据科学家,公司可以指望你快速学习并努力工作。问题是,你有责任去实现这个形象:这是一座陡峭的山,但回报绝对值得。
第二类:软件工程师
我遇到的有抱负的数据科学家中,可能有 20%是软件工程师。一方面,拥有将代码部署到产品中的经验,以及与开发团队合作的经验是一项巨大的财富。另一方面,对 fullstack 开发人员的需求如此之高,以至于公司有时最终会将软件工程师推向那个方向,即使他们受雇的角色在理论上涉及“数据科学”。所以你应该避免被归类为软件工程师而不是数据科学家。
其他一些想法:
- 如果你还没有,考虑先把你目前的职位转移到一个更侧重于后端/数据库的方向。更加熟悉数据管道是一个良好的开端,可以帮助您构建核心数据操作技能。它还能让你重塑形象,把自己塑造成一个经验丰富的数据辩论家。
- 机器学习工程可能是最接近数据科学相关的角色,这使得它更容易过渡到工作中。强调部署模型或将其集成到现有应用程序中的目标角色,因为这些将最有效地利用您现有的技能。你可以在以后的模型开发中加倍努力,但是这是一个很好的入门方式。
- 你很可能不得不建立机器学习或数据科学项目来打动雇主。利用你的软件工程技能,将这些整合到你可以向招聘人员和技术领导炫耀的应用程序中。这可能特别有效,因为它没有留下任何想象空间,并且强调了你作为全栈数据科学家的潜力。
- 需要记住的是:在你的转变过程中,你几乎肯定会减薪。即使是高级软件工程师,当他们转向数据科学时,通常也必须过渡到初级职位,但令人惊讶的是,他们中的许多人没有立即将这一点纳入他们的决定,并且在工作机会开始出现时感到失望。
如何打造自己的品牌:打造自己品牌最简单的方法之一就是利用你在软件开发方面的经验。你已经知道如何编写干净的、有良好文档记录的代码,以及如何与其他人合作,这是大多数初级职位申请者所不具备的优势。但是,为了有效地融入您的“清洁生产代码”品牌,您还必须了解数据科学中类似的最佳实践,因此,如果可以的话,请务必勾选这个框。
第三类:新计算机、数学或物理毕业生
如果你是刚毕业的本科生、硕士或博士,你可能在统计学和数学方面有很好的基础。但是你可能从来没有申请过科技行业的工作,你也不知道如何准备面试。此外,假设你在攻读学位期间一直从事编程工作,你很可能无法写出干净、组织良好的代码。
有几件事要记住:
- 不,你在学位期间学到的 R 是不够的。不,如果你是一个物理学家,你赌你的 MATLAB 或 Mathematica 技能能让你在工业界找到一份工作,那也不会成功。学 Python 就好。
- 你可能不知道但需要尽快学会的事情:协作版本控制(学习如何使用 GitHub 与其他人合作)、容器化(学习如何使用 Docker)和 devops(学习如何使用 AWS 或一些类似的服务在云上部署模型)。SQL 也是必须的。
- 学习 Python 中的测试驱动开发。了解如何使用文档字符串。了解如何模块化您的代码。如果您还没有,请学习如何使用 Jupyter 笔记本。
- 如果你在一个特别面向数学的领域,深度学习可能是一个很好的探索方向。但是您可能会发现,从更传统的“scikit-learn”类型的数据科学角色开始,然后迁移到深度学习会更容易。对你来说,最重要的是进入行业,尽快开始生产代码。
如何塑造自己的形象:尤其是如果你是数学或物理专业的学生,你最好的策略就是把自己塑造成一个拥有深厚理论知识的人。要做到这一点,你需要能够自信地解释各种模型是如何工作的,并且最好熟悉文献中最新的“热门”结果(如果你的目标是深度学习角色,尤其如此)。
***警告:*我提供的建议不会完美地适用于所有情况。一些软件工程师比其他人走得更远,一些完全初学者有数学天赋,可能最适合成为深度学习研究人员。但是它应该为你的技能发展提供一个良好的起点。
在一天结束的时候,无论你是软件工程师、刚毕业的学生还是完全的初学者,问自己的一个关键问题是在参数空间中什么职业轨迹最接近你。如果作为一名数据分析师或数据可视化专家的一段时间是你入门的必要条件,那通常是让你走上正确的长期轨道的最佳方式。
吸引读者注意力的 3 个专家数据可视化技巧
你看这个帖子的那一刻,你就在评判它。在你意识到它之前,你已经在判断它看起来有多长,在页面和图像中什么颜色是可见的,视觉效果是否会引起任何情绪反应,等等。
不管你是谁,也不管你是否意识到了这一点,每当你看到一个视觉场景——无论是看网页、走进房间还是打开电视,你都会在十分之一秒内开始理解这个视觉体验。这被称为“前注意处理”——在你注意视觉之前,你确实在处理它们。
Combine text and images just like this using Visme. It’s free and easy.
最有效的数据可视化利用了人类是前注意力视觉动物的概念——在我们意识到我们被呈现的东西之前,我们已经开始理解事物,判断大小、形状、颜色、对比度等。
考虑到这一点,你应该仔细考虑你正在做的设计选择,以及你的视觉效果是否在注意力集中之前带来了清晰或者引起了混乱。你给预先注意大脑带来的清晰度越高,你就越有可能激励和引导用户继续探索你的内容,从而向他们展示更多的信息和知识。
这里有 3 个专家数据可视化技巧,我建议你在每个项目中仔细考虑,以最成功地抓住你预先注意的观众的注意力和兴趣。
专家数据可视化技巧
1 千瓦特
对于任何交流任务来说,你能做的最重要的事情就是知道你真正想说什么。这是我的“最差”缩写 KWYRWTS(发音为“k-whir-wits”)。它又长又难打,也不可能记住。但是,这是你能做的最重要的事情。在你能与任何人交流任何事情之前,你必须知道你的信息。这适用于生活的方方面面,不仅仅是工作。
例如,如果我去麦当劳,走到柜台前,开始谈论天气、政治,或者即使我半正题地谈论意大利面条和肉丸,我也是在浪费每个人的时间(更不用说惹恼排在我后面的人了)。我需要做我该做的事,那就是点一些汉堡和薯条。
那么 KWYRWTS 如何应用于数据可视化呢?我不能只决定数据在说什么——这不是用你的数字撒谎。关键是你需要理解你试图用你的视觉化来完成什么。
我们为什么要可视化数据?唯一的原因是揭示模式、异常值、趋势、相关性,并进行比较,这些在查看数字表时不容易(或根本不容易)发现。但是魔鬼就在这里的细节中。
例如,假设你的老板交给你公司 12 个季度的财务表现数据,并让你为你的 CEO 写一份报告。你是做什么的?您的第一反应可能是创建一个包含 12 个数据点的销售总额、利润和股价的折线图。但是这允许你用手头的数据来决定使用什么图表,共享什么数据等等。这不是一种战略方法。
正确的做法是首先弄清楚报告的目的是什么。问问你自己:
- 正在调查哪些业务状况?
- CEO 需要根据这份报告做出什么决定?
- 你还能获得哪些数据来帮助她做决定?
- 想象一下,答案是小配件部门在 12 个季度中有 6 个季度都在亏损,她需要考虑是关闭它、投资它还是不管它?
- 现在你会怎么做?
好吧,也许你需要做一份季度报告,但要按部门分列……也许这不是关于总销售额,而是关于利润……或者也许这完全是关于这样一个事实,即世界对小部件的需求已经下降,因为当汽油价格低时,它总是这样,但即将到来的汽油价格高峰肯定会导致小部件销售的反弹,所以燃料价格预测数据显示以及对小部件销售的预测将是最合适的。
KWYRWTS 是任何项目中最重要的第一步。知道你的首席执行官的注意力持续时间很短,她必须在午餐前做出 20 个艰难的决定,所以她的预先注意力可能比大多数人都更精细,这意味着你必须非常清楚图表在第一个十分之一秒对她说了什么,以及对数字进行更深入的调查可能会揭示什么。如果她看到倾斜线,但它们是错误的倾斜线,她在 1/10 秒内的判断可能会不正确。
2 设计简单
Combine text, icons and images just like this using Visme. It’s free and easy.
设计师凭直觉知道少即是多。拥抱空白。眼睛需要在所有内容之间寻找一个位置。不要压倒你的观众。
这种更简单的视觉美感有很多论据。没有什么比你预先注意的听众更重要了。正如我所说的,当有人浏览你的数据可视化时,他们正在对它进行评判。在那一瞬间(潜意识里)他们在对自己说什么?
- “什么最重要?”
- “我应该在这里看什么?”
- “我应该忽略什么?”
- “这对我来说是不是太复杂了?”
- “这是不是太长了,不值得我浪费时间?”
- “这看起来可信吗?”
- 还有更多…
研究表明信息图设计中最重要的因素之一是理解受众的周边视觉——用户一眼看到的东西将决定他们下一步看哪里。换句话说,以一种预先注意的方式,你不仅需要把他们吸引到你的视觉化图像上的一个特定点,而且要意识到你需要给他们一些下一步要看的东西!
我能想到的解释这个想法的最好的例子是地图界面。您正在绘制餐馆的位置和排名。所以你在地图上有一些点,但是你也想指出它们有多好,这样一看,你的观众就可以确定最好的餐馆。
想象一下,在这张地图上有 100 家餐馆,每家餐馆的图标旁边都有多达 5 颗星。那会分散你的视觉注意力,并且会让你的用户不知所措——尤其是在注意力集中之前。你最好不要考虑排名,或者只使用颜色或对比来表示相对得分,而不是试图在界面上挤进那么多视觉信息。
3 标签
Combine text and shapes to create visuals using Visme. It’s free and easy.
正如上一篇数据可视化技巧文章中提到的,标签越少越好。出于类似的原因,但它不仅仅是留下空白,用更少的元素减少视觉混乱。你应该始终认为你的标签是“最好拥有的”,需要在图形中进行讨论。假设没有标签,除非绝对需要。
对我来说,完美的图表除了上面的一些形状之外什么也没有。一切都是相对的。即使我没有实际值,我也能知道一个东西比另一个东西大多少。现在你的老板和你的数据人员会强烈反对这种哲学。他们会说,没有数字的图表完全是浪费时间,绝对是荒谬的。好吧,那么,你会问他们,需要贴什么标签?(默认什么都没有,现在说服我必须包括什么。)
在这一点上,他们会说一切都需要标记,轴线需要 20 个刻度线,我们需要背景中的网格,这样我就可以看到每个点在图表中的位置,这样我就可以在 10%的精度内确定每个点的实际值。
猪食。如果什么都重要,那么什么都不重要。
只标注必须标注的内容。在图表上标出四个重要的点。每个轴可能只需要两个刻度线(0 和最大值),轴可能是浅灰色的,而不是像其他标签一样的粗体黑色,您可能会删除数据后面的网格线。
事实上,所有的标签都可以是浅灰色或更小的,除了一个点代表这个图表的全部目的。(还记得 KWYRWTS 吗?这个列表中的第一个数据可视化技巧是什么?这将有助于指导什么被贴上标签,以及如何在视觉上强调它。)哦,当我们在做的时候,让我们把那个键放在角落里,用内嵌标签来解释图表上的任何颜色和形状。
你的预先注意的观众现在有更少的事情要判断,并且更有可能在宝贵的 1/10 秒内找到正确的事情来看,这将帮助他们停留和看得更久,并专注于你需要他们专注的地方。
把你的下一个项目看作是测试你 1/10 秒设计技巧的机会。试着快速看一下你自己的图表。瞥一眼它,试着预先注意地判断它。这很难做到,但是在设计的时候考虑你的快速浏览的观众和你的深度研究的观众是非常有效的。因为,别忘了,每个人都是前者,而只有部分人是后者。
关于时间序列预测的 3 个事实让有经验的机器学习从业者感到惊讶。
ime 序列预测是数据科学领域中的一匹黑马:它是商业中应用最广泛的数据科学技术之一,广泛用于金融、供应链管理以及生产和库存规划,并且在统计学和动态系统理论中有着良好的理论基础。然而,与图像识别和自然语言处理等更近、更受欢迎的机器学习主题相比,它仍然处于局外人的地位,在数据科学和机器学习的入门课程中,它很少或根本没有受到任何对待。
我最初接受的培训是神经网络和其他机器学习方法,但在我的职业生涯让我成为需求预测专家后,我倾向于时间序列方法。
最近几周,作为我的团队努力扩展传统时间序列预测能力并进入基于 borader ML 的业务方法的一部分,我发现自己与经验丰富的 ML 工程师进行了几次讨论,他们通常非常擅长 ML,但对时间序列方法没有太多经验。
从这些讨论中,我意识到时间序列预测有几件事是预测界认为理所当然的,但对其他 ML 实践者和数据科学家来说是非常令人惊讶的,尤其是与处理标准 ML 问题的方式相比。
这种脱节的症结在于,时间序列预测可以被视为一个监督学习问题,因此整个 ML 方法——回归、神经网络、支持向量机、随机森林、XGBoost 等……—可以扔向它。但同时,时间序列预测问题有几个独特的怪癖和特质,使它们不同于监督学习问题的典型方法,这需要 ML 工程师重新思考他们建立和评估模型的方法。
根据我最近的讨论,以下是 ML 从业者在应对预测挑战时遇到的 3 个最大的惊喜:
每次想要生成新的预测时,都需要重新训练模型:
对于大多数 ML 模型,你训练一个模型,测试它,必要时重新训练它,直到你得到满意的结果,然后在一个保留的数据集上评估它。在您对模型的性能感到满意之后,您就可以将它部署到生产中了。一旦投入生产,您就可以在新数据到来时对其进行评分。几个月后,如果有大量新的训练数据,您可能需要更新模型。模型训练是一次性的活动,或者最多是定期进行,以保持模型的性能,从而考虑新的信息。
对于时间序列模型,情况并非如此。相反,每当我们想要生成新的预测时,我们都必须重新训练我们的模型。为了理解为什么会发生这种情况,请考虑下面的例子:
我们将使用 ARIMA 模型来预测澳大利亚的季度啤酒销量(数据集取自 Hyndman 的预测包 R)。首先,我们将根据 1956 年至 1970 年的数据训练一个模型,然后根据 1970 年至 1973 年的数据进行测试。使用季节性 ARIMA(1,1,1)(0,1,1)模型,我们可以得到一个相当不错的预测(MAPE =1.94%)(图 1)。
接下来,我们将使用相同的模型预测一直到 1993 年的销售情况。从图 2 中可以看出,预测不再那么好:预测继续遵循 1970~1973 年的模式,但实际模式已经改变——我们从 1956 年到 1974 年看到的持续趋势在 1974 年后开始减弱,季节性变化的幅度也开始变化。如果你用同样的 ARIMA(1,1,1)(0,1,1)来预测 1990 年到 1993 年的销售额,你会得到更差的精度(MAPE = 44.92%)。
相反,我们将不得不重新设计第二个模型,考虑新的数据和销售模式的变化。这一次,我们将根据 1956 年至 1990 年的数据训练一个 ARIMA(1,1,1)(1,1,2)模型,并使用它来预测 1990 年至 1993 年的值,然后我们会得到一个更合理的 MAPE 值,与我们第一次实验中获得的值更接近(MAPE=5.22%)。
为了直观地理解为什么会发生这种情况,首先考虑一个经典的 ML 任务:对猫图像进行分类。猫的视觉属性随着时间的推移是稳定的(除非我们开始考虑进化的时间尺度),所以当我们训练神经网络来识别猫的图片时,一个隐含的假设是,定义猫的特征在可预见的未来将保持不变。我们不期望猫在下周、明年、甚至十年后会有所不同。给定足够的数据,我们本周训练的模型在可预见的未来也足够好。
用统计学的说法,我们说猫图片特征的分布是一个平稳分布,这意味着它的属性,如均值和标准差,随着时间的推移保持不变。
现在回想一下,当开发数据集的分布和生产数据集的分布不同时,ML 项目中的一个常见陷阱就会发生,导致模型在生产中失败。对于时间序列,开发数据集和生产数据集几乎总是来自不同的分布,因为真实世界的商业时间序列(如澳大利亚啤酒销售)数据不是稳定的,并且分布的统计属性会随着新的实际数据的出现而不断变化。
解决这个问题的唯一方法是在每次获得新数据时重新训练模型。请注意,这与持续学习不同,在持续学习中,已经训练好的模型会随着新数据的到来而更新。每次您想要生成一个新的预测时,您实际上是在从头开始重新训练一个新的模型(尽管这将是一个有趣的研究课题,看看连续学习是否可以应用于时间序列预测)。
从实践的角度来看,这意味着将预测算法部署到生产中与部署其他 ML 模型是非常不同的。你不能只是部署一个静态模型并对其评分,模型服务的概念对时间序列预测没有意义。相反,您需要确保训练和模型选择可以在生产中即时完成,并且您必须确保您的整个训练集可以在生产中存储和处理。这让我想到了这篇博文的第二点:
有时,您必须取消培训/测试拆分:
让我们回到寻找 ML 模型的基本方法:通常你使用训练集建立一个模型,然后在测试集上评估它。这要求您有足够的数据来留出一个测试集,并且仍然有数据来构建模型。但是与图像处理或 NLP 中使用的数据集相比,时间序列数据通常非常小。某一产品在某一给定地点的两年周销售数据只有 104 个数据点(几乎不足以捕捉任何季节性)。一个季度的经济指标数据,10 年来只有 40 个数据点。对于如此小的数据集,我们没有足够的时间留出 20%或 30%的数据用于测试。交叉验证也没有多大帮助,因为根据您想要使用的算法,CV 在最好的情况下很难为时间序列模型建立,在最坏的情况下根本不适用(想想看:试图使用 1 月和 3 月的训练数据预测 2 月的值是没有意义的,这相当于泄漏)。
因此,我们转而采用 AIC、AICc 或 BIC 等信息标准。这些是模型选择度量,本质上是试图通过分析来近似测试步骤。这个想法是,我们没有一个经验的方法来确定一个模型的泛化误差,但我们可以通过使用信息理论的考虑来估计这个误差。
在实践中,我们训练一组预先确定的模型,然后选择具有最低 AIC 或 BIC 的模型。除了允许用有限的数据训练模型之外,当我们想要自动生成预测时,使用这样的模型选择标准是非常方便的。例如,在零售业中,我们必须对数百万个单独的时间序列进行预测是很常见的——一个大型的再培训者将在数百个地点运送 2 万~ 3 万件产品,从而产生数百万个单独的时间序列(每个产品/地点组合一个时间序列)。
在这种情况下,每个单独的数据集都很小,但您必须处理数百万个数据集,因此分析师或工程师不可能对每个系列的测试集进行评估,自动模型选择就变得至关重要。
许多预测工具都使用这种方法:Rob Hyndman 在 R (1)中流行的预测包在其 auto.arima() 和 ets() 函数中使用 AIC 进行模型选择,许多商业需求预测应用程序(如 Oracle 的 RDF)使用 BIC 进行模型选择。参见 Hastie 和 Tibshirani (2)关于使用 AIC 和 BIC 进行模型选择的介绍。
预测的不确定性与预测本身一样重要,甚至更重要:
将预测与其他监督学习任务区分开来的另一点是,你的预测几乎总是会出错。在给定足够的训练数据的情况下,处理图像分类问题或 NLP 问题的人可以合理地期望最终准确地分类所有新的输入样本。您所要做的就是确保您的训练数据和真实世界的数据是从同一个分布中采样的。正如我在第一点和第二点中提到的,在商业预测应用程序中通常不是这样,你的预测几乎总是错的。您准确预测下周将售出多少件 M 号阿迪达斯红色衬衫的可能性有多大?所以你需要的不仅仅是一个点的预测,还有对预测不确定性的衡量。
在需求预测和库存应用程序中,预测的不确定性对于使用预测的应用程序至关重要。预测的不确定性(由预测间隔或预测分位数表示)是您将用来计算安全库存的因素,也就是您希望保持的额外库存数量,以确保您不会失去任何客户。
他们在金融时间序列建模中进一步发展了这一思想,他们实际上有专门为时间序列的不确定性建模而建立的模型类别,而不是时间序列本身,如 ARCH 和 GARCH 模型。
马里达吉斯等人 (3)谈到地铁的不确定性和椰子的不确定性。椰子不确定性,暗指当某人在海滩上时,一个椰子意外地落在他的头上,是“未知的未知”的不确定性,无论我们如何努力,都无法预测的事件。
更一般地,一些时间序列表现出不良的不确定性,这是不可预测的。预测误差的分布不遵循任何已知的分布。此类信息对于做出判断性决策很有用,但不能建模和用于预测。
另一方面,地铁的不确定性(暗指乘坐地铁从 A 到 B 需要多长时间的不确定性)遵循一个已知的分布,比如正态分布或泊松分布,并且可以被建模和用于将预测限制在一定的范围内,即使无法预测精确的值。
那些习惯于在其他 ML 领域中可实现的非常高的准确度的人,更重要的是,被当前的机器学习炒作所吸引的决策者和商业领袖,需要明白,通常时间序列模型所能达到的最好的结果就是地铁不确定性。坚持认为如果我们能找到正确的算法和正确的数据,足够深的神经网络或足够丰富的非结构化数据集,我们将能够实现更好的预测,这是危险的误导。有时,我们能得到的最好结果是可管理的不确定性,我们应该相应地构建我们的数据管道和决策支持系统。
参考:
(1)https://cran . r-project . org/web/packages/forecast/forecast . pdf
(2) Hastie,Tibshirani,Friedman,统计学习的要素,第 7 章(第 228-229 页)
(3) Makridakis,s .,Hogarth,R.M. & Gaba,A. (2009)经济和商业世界中的预测和不确定性。国际预测杂志
现实中自举 B2B 创业的 3 个严酷教训
My first lesson in entrepreneurship.
如果你想了解更多关于我的创业公司实际上是做什么的,可以查看我的 LinkedIn 简介 或者阅读一些我的 其他文章 。我不会在这里讨论这个问题。
自从我们创立了我们的 B2B 软件创业公司,已经四年了,终于,终于!成功的未来看起来已经成熟。
我写这篇文章主要是为我自己,作为我希望早点知道的重要事情的宣言。我下面描述的大部分内容已经被其他人说过了。但是谁知道呢,也许这些来自我自己经历的想法会在某个时候,以某种方式帮助你们中的一个读者。
第一课——努力工作和混乱的工作/生活平衡
我一直喜欢努力工作,但从来没有这么努力,这么长时间,压力这么大,回报这么少。
你可能已经知道了这一点,但首先也是最重要的一点是,创业与有足够资金/收入让你顺其自然的日常工作是完全不同的。如果你停止划船,你会沉下去——而且你会激怒仍在向前推进的队友。
这并不意味着你应该持续工作,相反,找出你和你的团队表现最佳的时间,加倍努力。用你的非最佳时间充电回到最佳状态。那些充满渴望的文章建议你“不要再这么辛苦地工作了,多看点书”,只有在阅读能帮助你恢复最佳效率的情况下,这些文章才会有帮助。如果你在高效的精神状态下看书或听播客,你是在浪费时间。
在不同的交叉状态(一天中的时间、锻炼、阳光、食物、睡意、人际交往、咖啡因…其他物质)下监控你的心智能力和能量。对我来说,睡眠、锻炼和咖啡因是提高表现的关键因素,在我喝了第一杯啤酒后,我不再费事去尝试编码了(现在啤酒点在晚上很晚才开始)。
争取每周至少 60 小时的有效工作时间。让你的队友每天交流进展情况——努力工作会传染,你需要在团队中建立信任,每个人都在努力。
做好让你的朋友和家人偶尔失望的准备。让他们为即将到来的失望做好准备。想办法让人们知道你仍然关心他们,但是你不能参加所有的晚宴/社交活动。
然后,创造一个你和你的朋友/家人仍然可以享受的新常态。创业本来就是自私的——承认吧。向自己承认,向自己在乎的人真诚道歉。和他们一起寻找与你疯狂的时间表相适应的新的互动方式。
例如,我现在出差时一定要飞经芝加哥,这样我每次都可以和家人呆几天。这对于出席重要活动/节日特别有用。
从让你沮丧的想法和人际交往中抽身。你必须能够接受并消化对你的产品市场适应性或商业模式的严厉但必要的批评——这是另一回事。相反,我指的是来自他人(以及你自己)的负面压力所带来的慢性压力。做一个绝地大师,让那些感觉过去吧。说起来容易做起来难。
Hate, haters gonna.
第二课——永久的失望,被短暂的成功打断
对于一个 B2B 创业公司来说,寒假期间是最糟糕的。在销售、合作和概念验证方面取得的所有进展都将立即陷入停滞(看似无限)。
在那些挫折的时候——或者当所有的进步都停滞不前的时候——反思一下。想想你已经完成的更大规模的轨迹。如果你有付费客户,花点时间感谢你的幸运星。
然后… 戳戳你失败的伤口,从每个角度,尽你和你的团队所能容忍的。从错误中学习通常需要从不同的角度详细探索历史。
是你的产品吗?你的推销?没有冠军?你的营销存在?秘密竞争对手?意想不到的观众?
你的早期团队必须能够建设性地处理持续的失望和痛苦的失败事后调查。在早期阶段,提供 Kool-Aid 一点用都没有——也许以后当你有一两轮资金和足够的专家来解决问题时。
Afterwards, laugh it off.
为了战胜长期的失望,不断为未来创造希望。下一个有希望的领导者,你当前的具有新的杀手级功能的概念验证项目,即将到来的黑客马拉松,协同加速器计划,或者一篇关于你的目标市场即将扩张的文章。无论以何种形式出现,希望能让你和你的团队继续前进,度过这段痛苦的时光。
第三课——对于一个 B2B 创业公司,每个团队成员都有两个简单的目标
- 寻找/结束新的机会。
- 让现有客户满意。
我是初创公司的技术联合创始人,本质上是一名数据科学家。四年前,我认为我可以简单地在产品上编码——也许我会做一些会议演讲,但是销售产品会由其他人来处理。
呀。
这是我现在所知道的——你的公司成功的唯一途径是你销售你的产品/服务。没有东西会自己卖出去——你必须投入工作。创业公司的每个人,从董事会/首席执行官到每一个工程师,都必须专注于上面的 1 和/或 2。不要把时间浪费在无法实现这些目标的人身上。
He’s got a point there.
*你会遇到很多想要帮助你的人——尤其是在业务发展和产品/市场匹配方面。我再重复一遍——**不要在那些不致力于为你寻找新客户的顾问/投资者/加速器身上浪费时间。*这需要他们个人投入专业资本——但如果他们不能主动向他们关系网中的其他人担保你的公司/产品,他们就不是真的相信你(或者他们有利益冲突)。
这并不意味着每个人都要做直销/客服。显然,技术工程师是来设计/制造产品的,但是如果他们把目标 1/2 记在心里,他们会做得更好。他们会更乐意进入自己的网络来帮助创造新的机会。
还有很多要讨论的
我希望我有时间和耐心写更多,但至少我已经到这一步了。现在是时候充电了,重新开始工作。
致我的 Tag.bio 队友、家人和朋友——谢谢你们。
如何在 RStudio 上更新 R 的 3 种方法(适用于 Windows 和 Mac)
你上次更新 R 和 RStudio 是什么时候?
一年前安装了 RStudio 和 R,之后再也没有更新过。今天我刚刚注意到我不能安装新的 R 包,因为我的旧 R 版本。因此,我探索了一些更新 R 的方法,并希望与也希望在 RStudio 上更新 R 的人分享。
问题是
RStudio 和 R 不能自行更新,因为一些包在切换到新版本后可能无法工作(如果出现问题,您仍然可以在 RStudio 中降级 R 版本)。安装新版本后,以前安装的软件包将不会进入下一个版本。因此需要额外的程序来移动包装。
这里有 3 种方法可以在 RStudio 中更新 R 版本。注意,我们需要移动 install R 包,我将在最后展示如何移动。
在 RStudio 上更新 R 的 3 种解决方案
解决方案 1)手动安装
第一种方法是从 R 网站> CRAN 下载新版 R。然后重启 RStudio。新的 R 版本会自动加载。
The new R version appear right after I install R and restart RStudio — (Image by author)
解决方案 2)仅 Windows 使用 installr
installer是帮助安装和更新软件的 R 包。
更新 R 所需的 R 代码是:(代码归功于 Cara Wogsland
install.packages("installr")
library(installr)
updateR()
你可以在 R-Statistics 网站上找到如何使用 installr 更新 RStudio 的教程。
解决方案 3)仅 Mac 使用更新程序
与 installr 类似, updateR 是帮助在 Mac OS 上更新 R 的包。
你需要的 R 代码是这 5 行:(代码归功于jroberayals
install.packages('devtools') #assuming it is not already installed
library(devtools)
install_github('andreacirilloac/updateR')
library(updateR)
updateR(admin_password = 'Admin user password')
你可以在这个博客上找到关于如何使用更新包的深入教程。
如何移动先前安装的 R 包
这是 Mac OS 用户(使用上述解决方案 1 或 3)的说明。对于 Windows 用户,installer包将为您完成这项工作
(功劳归于 RyanStochastic 和 micstr ):
1。将所有文件夹从旧的 R 版本移动到新的 R 版本。
/Library/Frameworks/R.framework/Versions/x.xx/Resources/library
一次用新旧 R 版本替换 x.xx。
注意,您必须只移动当前不在目标文件夹中的包(因为那些是基础包,您不想破坏它们)。但是如果您已经替换了所有内容,下一步将为您解决这个问题。
如果找不到正确的路径,可以运行这个命令来检查:installed.packages()
2。更新被移动的包
在 r 中运行以下命令,对弹出的每个问题键入“y”。
update.packages(checkBuilt=TRUE)
3.在 R 中键入以下命令,检查是否一切顺利
version
packageStatus()
就是这样!希望你们成功更新 r。如果没有,请查看下面的参考链接。
注意:如果您在 Jupyter Notebook 中使用了 R 和 IRKernel,升级 R 将导致 Jupyter Notebook 中的 R 不可用。按照以下步骤重新安装 IRKernel,它将再次工作。
参考资料:https://stack overflow . com/questions/13656699/update-r-using-r studio
最初发表于 沃拉特纳珀斯 。
交互式数据可视化的 3 条规则
一个展示 R 和 Highcharts 的橱窗
为什么你应该让可视化互动。
交互式数据可视化更好的原因有两个:
- **更多信息。**通过使用工具提示、点击事件、过滤能力等,交互性允许你嵌入比静态可视化更多的信息。
- **更容易感知更复杂的数据。**只在需要时显示某些信息并在不需要时隐藏的可能性将使用户只关注他们正在寻找的细节。因此,可视化可能包含更多的信息,可以快速抓住关键点。
- 促进探索。每个人都喜欢与他们调查的对象互动。响应性数据鼓励人们探索更多,从而获得更多见解。
- 更好玩。嗯,事实就是这样:厌倦了几十个静态的 PowerPoint 演示文稿或枯燥的图表互动给我们的(企业)生活带来了一点多样性:)。
完美互动可视化的 3 条规则。
具有交互式数据可视化的良好 UX 依赖于 3 个主要规则:
- 先概述一下,
- 缩放和过滤,
- 然后是细节点播。
这个神圣的三位一体也被称为 Shneiderman 的可视化咒语,他在 1996 年制定了这个咒语。
为了展示咒语的真正力量,让我们用不太标准的图表来探索一些关系。我查看了主要厂商 2017 年智能手机、个人电脑和平板电脑的出货量。我很想在桑基图上尝试一下,在我看来,桑基图非常强大,不仅可以显示流量,还可以显示关系。
首先,一些数据争论。最初的文件可能有所有 xls 格式讨厌的主要问题:多个标签,标题,缩进和非常不整洁的格式。在将文件限制为 1 个选项卡并将它们转换为。csv,对于所有随后的数据争论,我使用 R,这最终是我的最爱。
对于 Sankey chart,我将使用由 Joshua Kunst 制作的 R 中的high chart库作为 Highcharts javascript 库的 R 包装器。您实际上不需要任何 Javascript 知识,但只需一点 JS 就可以对其进行显著扩展。
第一个简单的默认图表如下所示:
highchart() %>%
hc_add_series(data = sales, type = "sankey",
hcaes(from = product, to = company, weight = units))
看起来不坏,但只要遵循 3 步咒语,它会变得更好,所以让我们继续吧!
先概述一下
我们的原始图表有点太详细,彩色流显示了每个依赖关系,这比“先概述”要多一点。此外,它不会让您轻松地第一时间了解正在发生的事情。为了解决这个问题,让我们到目前为止使用一种颜色,不要被细节分散注意力,按降序排列产品和公司,这样人们可以立即看到排名。
除此之外,我改变了“弯曲度”,使流动更加透明,覆盖了默认值:
hc_plotOptions(sankey = list(
colorByPoint = FALSE,
curveFactor = 0.5,
linkOpacity = 0.33
))
缩放和过滤
有时候,咒语的一部分并不适用于特定的图表或特定的数据。我们的桑基图表没有那么大,过滤值会对公司比较产生负面影响。
另一方面,突出感兴趣的对象服务于相同的目的。默认情况下,每个流都会高亮显示。我希望能够突出显示每个产品或公司,以了解未来的流入/流出。
在这一部分,我们需要 R 中的纯 JavaScript 来配置鼠标悬停在节点上的事件:
hc_plotOptions(sankey = list(
point = list(
events = list(
mouseOver = JS(
"function () { if (this.isNode) {
this.linksFrom.forEach(function(l) {
l.setState('hover');
});
this.linksTo.forEach(function(l) {
l.setState('hover');
});
}
} "
),
mouseOut = JS(
"function () { if (this.isNode) {
this.linksFrom.forEach(function(l) {
l.setState('');
});
this.linksTo.forEach(function(l) {
l.setState('');
});
}
} "
)
)
)
)
但是,如果我们使用另一种图表类型,例如,堆积条形图,那么过滤效果会很好:
highchart() %>%
hc_add_series(data = sales_stacked,
type = "column",
hcaes(x = product, y = units, group = company)) %>%
hc_plotOptions(column = list(stacking = "normal")) %>%
hc_xAxis(categories = unique(sales_stacked$product))
通过点击(不点击)图例,你可以过滤公司,这是 Highcharter 中条形图的默认行为。因此可以对图表进行过滤,只显示感兴趣的公司。
详情点播
在这里,我们将充分利用互动的力量,让视觉化变得完美。用户可能对哪些细节感兴趣?它可以是:
- 按供应商和产品列出的出货量。
- 特定公司装运的特定产品的单位数量。
- 产品在公司出货量中所占的份额,以及公司在特定产品销售中所占的份额。
前两个是由工具提示中的高图表的默认行为提供的。后者应该由我们来写:
hc_plotOptions(sankey = list(
tooltip = list(
pointFormat = "{point.fromNode.name} → {point.toNode.name}: <b>{point.weight}</b> Mio units<br/>
{point.product} contribute <b>{point.product_share} %</b> in {point.company} sales: <br/>
{point.company} contributes <b>{point.company_share} %</b> in {point.product} sales "
)
)
)
如果利益相关者需要静态格式的图表,我还会添加一个选项来下载图像形式的图表:
hc_exporting(enabled = TRUE,
buttons = list(
contextButton = list(
y = -30
)
))%>%
hc_chart(spacingTop = 30)
最后的结果是:
你可以在整篇文章中看到应用咒语是如何显著改善图表的,现在它看起来很好。
此外,你可能注意到了最后一个图表,它是响应性的,更能吸引你的注意力,与之前的普通 gif 相比,你可能更渴望探索它。这显示了互动的力量。
你可以在 GitHub 上找到所有代码。
最后一个图表完全是用 JavaScript 编写的,但只是为了嵌入到介质中。你几乎可以完全用 R 编写代码,只需为事件添加一点 JS,如我的 GitHub repo 所示。很多时候,你可以在 Google 和 stackoverflow 的帮助下找到需要的代码,而不需要深入研究 JS。
自然语言处理中单词嵌入的三大法宝
Credit: https://pixabay.com/en/books-stack-book-store-1163695/
单词嵌入是解决许多自然语言处理问题的银弹。现代的 NLP 架构大多采用了单词嵌入和放弃单词包(BoW) 、潜在狄利克雷分配(LDA)、潜在语义分析(LSA) 等。
看完这篇文章,你会知道:
- 单词嵌入的历史
- 文字嵌入设计
- 应用现成的单词嵌入模型
- 嵌入可视化
- 拿走
单词嵌入的历史
传统上,我们使用词袋来表示特征(例如 TF-IDF 或计数矢量化)。除了 BoW,我们可以在单词特征上应用 LDA 或 LSA。然而,它们也有一些局限性,如高维向量、稀疏特征等。单词嵌入是低维向量中的一个稠密特征。在大多数自然语言处理问题中,单词嵌入提供了更好的向量特征。
2013 年,Mikolov 等人使单词嵌入流行起来。最终,单词嵌入是 NLP 中最先进的技术。他发布了 word2vec 工具包,并允许我们享受美妙的预训练模型。后来,gensim 提供了一个惊人的包装器,以便我们可以采用不同的预训练的单词嵌入模型,包括 Word2Vec(由谷歌),GloVe(由斯坦福),fastText(由脸书)。
在 Tomas 等人推出 Word2Vec 的 12 年前,Bengio 等人发表了一篇论文[1]来处理语言建模,这是单词嵌入的最初想法。当时,他们把这个过程命名为“学习单词的分布式表示”。
Capture from A Neural Probabilistic Language Model [2] (Benigo et al, 2003)
2008 年,Ronan 和 Jason [3]引入了预训练嵌入的概念,并表明这是一种解决 NLP 问题的惊人方法。直到 2013 年,Tomas 发布了预训练模型(word 2 vec ), word embedding 才开始出名。
Capture from A Unified Architecture for Natural Language Processing [3] (Collobert & Weston, 2008)
时间线:
- 2001 年:Bengio 等人提出了单词嵌入的概念
- 2008 年:罗南和杰森引入了预训练模型的概念
- 2013 年:Mikolov 等人发布了预训练模型 Word2Vec
文字嵌入设计
低维
Photo Credit: https://www.foodnetwork.com/recipes/food-network-kitchen/four-layer-birthday-cake-3363221
为了解决高维问题,单词嵌入使用预定义的向量空间如 300 来表示每个单词。出于演示的目的,我使用三维来表示以下单词:
- 苹果:[1.11,2.24,7.88]
- 橙色:[1.01,2.04,7.22]
- 汽车:[8.41,2.34,-1.28]
- 表格:[-1.41,7.34,3.01]
如预定义的向量空间(即,在上面的演示中为 3),维度(或特征)的数量是固定的,无论语料库有多大。与 BoW 相比,当唯一字增加时,维数会增加。假设我们的文档中有 10k 个唯一的单词,BoW 中的特征数量是 10k(没有过滤高/低频单词),而在我们的演示中维度可以保持为 3。
语义关系
Photo Credit: https://gointothestory.blcklst.com/similar-but-different-c722f39d923d
通常,单词向量编码单词之间的语义关系。这是单词嵌入的一个非常重要的概念,因为它有利于处理自然语言处理问题。词向量如果有相似的意思就会闭合。比如买和买会更近。与 BoW 不同,它只代表 0 或 1(表示有一个词或没有接近),它不能代表两个词是否有相似的意思。
在上面的例子中,你可能会注意到苹果的向量和橘子的向量比其他的更接近,而苹果的向量相对远离汽车的向量。
【连续词袋】&
Mikolov 等人提出了两种新的架构[4],这两种架构降低了计算复杂度并包含了额外的上下文。
CBOW 就是在目标词( w )前后同时使用 n 个词。例如,“词向量编码词之间的语义关系”。如果窗口(n)是 3,这里是预测列表的子集:
- 情况 1,单词前:{Empty},单词后:(单词,向量,编码),预测单词:“the”
- 案例 2,词前:(the),词后:(向量,编码语义),预测词:“词”
Skip-gram 使用相反的方法,使用目标单词来预测目标单词前后的 n 个单词。例如,“词向量编码词之间的语义关系”。如果窗口(n)是 3,这里是预测列表的子集:
- 案例 1,预测单词:“the”,单词:(单词,向量,编码)
- 案例 2,预测单词:“单词”,单词:(向量,编码,语义)
Capture from Efficient Estimation of Word Representations in Vector Space (Tomas et al., 2013)
阴性采样
而不是利用所有其他单词作为负面标签训练记录。Mikolov 等人提出使用合适的少量负训练记录来训练模型。从而使整个操作变得更快。
如果你不熟悉负抽样,你可以查看这篇文章了解更多信息。
应用现成的单词嵌入模型
介绍了历史和模型结构,我们如何使用单词嵌入来解决自然语言处理问题?
有两种处理单词嵌入的方法:
- 利用现成的模型
- 构建特定领域的模型。
本文将采用第一种方法。选择 3 个知名的预训练模型,并利用 gensim 加载这些模型。著名的 NLP 库 Gensim 已经实现了处理这 3 种模型的接口。为了简单起见,你可以用我的包装器来加载这三个模型。
Word2Vec
这个单词向量是在谷歌新闻上训练的,由谷歌提供。基于来自谷歌新闻数据的 1000 亿个单词,他们训练了 300 个维度的模型。
Mikolov 等人使用 skip-gram 和负采样建立了这个模型,该模型于 2013 年发布。
word_embedding = WordEmbedding()
word_embedding.load(source='word2vec', file_path=word2vec_file_path)print(word_embedding.get_vector(source='word2vec', word='apple'))
输出
[-0.06445312 -0.16015625 -0.01208496 0.13476562 -0.22949219 0.16210938
0.3046875 -0.1796875 -0.12109375 0.25390625 -0.01428223 -0.06396484
...]
手套
斯坦福大学 NLP 团队提供了单词表示的全局向量( GloVe )。斯坦福大学基于 2,6,42,840 亿个令牌提供了从 25,50,100,200 到 300 个维度的各种模型。
斯坦福大学自然语言处理小组应用词-词共现概率来构建嵌入。换句话说,如果两个词同时出现很多次,这两个词可能有相似的意思,所以矩阵会更接近。
word_embedding = WordEmbedding()
word_embedding.load(source='glove', file_path=glove_file_path)print(word_embedding.get_vector(source='glove', word='apple'))
输出
[ 0.52042001 -0.83139998 0.49961001 1.28929996 0.1151 0.057521
-1.37530005 -0.97312999 0.18346 0.47672001 -0.15112001 0.35532001
...]
快速文本
fastText 由脸书发布,提供 3 款 300 尺寸。用子词训练预训练模型中的一个。比如“差”,它会被“di”、“dif”、“diff”等等训练。
word_embedding = WordEmbedding()
word_embedding.load(source='fasttext', file_path=fasttext_file_path)print(word_embedding.get_vector(source='fasttext', word='apple'))
输出
[ 0.26407328 0.30484504 0.04900438 -0.44377801 0.16519009 -0.09473443
-0.01351437 -0.17237368 0.0374852 0.34962645 0.14334701 -0.11134619
...]
嵌入可视化
最先进的自然语言处理技术之一是单词嵌入,它实际上是什么?这是一个矩阵,最简单的方法是 x 和 y 坐标,但我们有 300 维,而不是 2 维。
我们可以通过使用主成分分析(PCA)或 T-分布随机邻居嵌入(t-SNE)来可视化它。通过利用 TensorBoard,可以轻松呈现可视化。
word_embedding.build_visual_metadata(embedding=embedding, words=words, file_dir='./word_embedding')
拿走
要访问所有代码,可以访问我的 github repo。
- 应该使用哪种现成模型?根据您的数据,有可能所有这些数据对您的领域特定数据都没有用。
- 我们应该根据你的数据训练单词嵌入层吗?根据我的经验,如果您处理领域特定的文本,并且您的大部分单词不能从现成的模型中找到,您可以考虑构建定制的单词嵌入层。
- 由于浏览器资源问题,Tensorboard 选择了前 100000 个向量。推荐给自己挑一小部分矢量。
- GloVe、Word2Vec 和 fasttext 的最大型号大小分别为5.5GB、3.5GB 和~8.2GB。GloVe、Word2Vec、fasttext 分别需要 9、1、9 分钟左右。在资源有限的情况下,It 可能不容易部署到生产。
参考
[1] Yoshua Bengio,Ducharme Rejean 和 Vincent Pascal。一种神经概率语言模型。2001.https://papers . nips . cc/paper/1839-a-neural-probability-language-model . pdf
[2] Yoshua Bengio,Ducharme Rejean,Vincent Pascal 和 Janvin Christian。一种神经概率语言模型。2003 年 3 月。http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
[3]科洛伯特·罗南和韦斯顿·杰森。自然语言处理的统一架构:具有多任务学习的深度神经网络。2008.【https://ronan.collobert.com/pub/matos/2008_nlp_icml.pdf
[4]托马斯·米科洛夫、格雷戈·科拉多、程凯和杰弗里·迪恩。向量空间中单词表示的有效估计。2013 年 9 月。https://arxiv.org/pdf/1301.3781.pdf
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。你可以通过媒体博客、 LinkedIn 或 Github 联系我。
纵向扩展数据治理功能的 3 种简单方法
尽管数据治理的概念已经存在多年,但只有某些组织将数据治理作为交付商业价值的战略支柱。有许多公司的数据治理还没有达到相关的成熟度,因此不能将其视为一种值得考虑的力量。
我在下面概述了 3 种在组织中扩展数据治理功能的简单方法
1)确定非正式数据冠军
在每个业务功能中,至少有一个人感受到了糟糕的数据质量的痛苦,他通常会执行许多手动调整来纠正糟糕的数据质量。当上游数据质量问题没有解决时,这是最沮丧的人。您需要确定这些人,并解释数据治理如何帮助其他业务功能的成功故事,以便他们能够体会到数据治理如何改善了他们的生活。将一个业务部门的成功数据冠军与另一个受挫的人配对,这一点很重要。
2)识别公司中发生的与数据相关的事件
即使有无数的系统和控制措施,没有一个组织能够在没有导致经济处罚或声誉风险的运营事件或事故的情况下运行。确定所有这些事件,并列出是否有任何事件是由于数据质量差或缺乏治理而发生的。该事件目录应作为一个触发器,以确定如果存在数据治理,此类事件是否可以避免。例如,可能有一个事件,一个数字被错误地报告给公司的客户,导致客户寻求经济赔偿。如果客户报告团队不是数据治理框架的一部分,则此类事件应强调扩大数据治理职能的必要性。
3)成为组织变革计划的一部分
对现有流程、系统和人员实施数据治理是一件困难的事情。然而,向一个新的 IT 系统或一个刚刚创建的新部门引入数据治理相对容易,因为您正在从头开始创建一切。在这种情况下,个人并不认为数据治理是他们需要适应的新事物,而是被视为设计的一部分。例如,一个组织可能正在实施新的 CRM 系统;如果 CRM 系统和相关的过程被设计成包含数据治理,而不是事后才想到,那么事情就会容易得多。
其中一些“简单”的方法可能需要几个星期到几个月才能在一个组织中实现。然而,这些指针将为扩展数据治理功能提供一个起点。
关注我在https://www.linkedin.com/in/suriyansubramanian的链接
3 个小而强大的卷积网络
为了在 ImageNet 上获得最佳精度,已经开发了许多 CNN 架构。计算能力不限这个比赛,何苦呢?
然而,您可能希望在旧的笔记本电脑上运行您的模型,可能没有 GPU,甚至在您的移动电话上。让我们看看三种 CNN 架构,它们效率很高,但精度性能却很低。
MobileNet
Arxiv 链接:(霍华德等人,2017)
MobileNet 使用深度方向可分离T4 卷积。这个卷积块最初由异常引入。深度方向可分离卷积由两种运算组成:深度方向卷积和点方向卷积。
标准卷积作用于特征图的空间维度以及输入和输出通道。它的计算成本为Df * M * N * Dk;Df 表示输入特征映射的维数,M 和 N 表示输入和输出通道的数量,Dk 表示内核大小。
深度方向卷积分别在每个输入通道上映射一个卷积。因此它的输出通道数与输入通道数相同。It 计算成本为 Df * M * Dk 。
最后一个操作是逐点卷积。这是一个核大小为 1×1 的卷积,它简单地组合了由深度方向卷积创建的特征。It 计算成本为 M * N * Df 。
深度方向可分离卷积的计算成本是深度方向和点方向操作的成本之和。与普通卷积相比,它提供了 1/N + 1/Dk 的计算减少。内核大小为 3x3 时,操作次数减少了 8 倍!
MobileNet 还提供了两个参数,允许进一步减少其操作数量:宽度乘数(在 0 和 1 之间)减少通道数量。在每一层,不是产生 N 个通道,而是产生 alpha * N。该乘数可用于处理所需延迟和性能之间的权衡。另一个乘数存在:分辨率乘数**。它缩放图像的输入大小,在 224 到 128 之间。因为 MobileNet 使用全局平均池而不是 flatten,所以您可以在 224x224 图像上训练您的 MobileNet,然后在 128x128 图像上使用它!事实上,对于全局池,网络末端的全连接分类器仅取决于通道的数量,而不是特征映射的空间维度。**
沙狐球网
Arxiv 链接:(张等,2017)
ShuffleNet 引入了三种不同的随机单元。由组卷积和信道洗牌组成。
一个组卷积就是几个卷积,每个卷积取输入通道的一部分。在下图中,您可以看到一个组卷积,有 3 个组,每个组取 3 个输入通道中的一个。
AlexNet (Krizhevsky et al,2012) 首先提出将一个网络分成两个 GPU。
这大大减少了计算成本。让我们举一个可行的例子:如果有 4 个输入通道和 8 个输出通道,我们选择两组,每组有 2 个输入通道和 4 个输出通道。
对于一个组,计算成本将是 Df * Dk * 4 * 8 ,而对于两个组,成本是(Df * Dk * 2 * 4) * 2 或 Df * Dk * 4 * 4 。一半的手术!作者用 8 组达到了最好的结果,因此减少甚至更重要。
最后,作者添加了一个通道混洗**,随机混合组卷积的输出通道。产生这种随机性的诀窍可以在这里看到。**
EffNet
Arxiv 链接: (Freeman 等,2018)
EffNet 使用空间可分离卷积**。它非常类似于 MobileNet 的深度方向可分卷积。**
可分离的深度方向卷积是 EffNet 块的蓝色矩形。它由与行核(1x3)的深度方向卷积组成,随后是可分离池,最后是与列核(3x1)的深度方向卷积。
让我们看看计算增益。使用 3x3 内核的正常深度方向的成本为 3 * Df * M。使用 1x3 内核的第一个深度方向的计算成本为 3 * Df * M。可分离池将特征映射高度减半,具有边际成本。具有 3×1 内核的第二深度方向的成本为 3 * Df /2 * M。因此,总成本为 1.5 * (3 * Df * M) 。比正常深度少一半!
EffNet 相对于 MobileNet 和 ShuffleNet 所做的另一项优化是在开始时没有“正常卷积”:
引用作者的话:
MobileNet 和 ShuffleNet 都避免替换第一层,声称这一层已经相当便宜了。我们恭敬地不同意这种说法,并认为每一次优化都是有价值的。在优化了网络中的其余层之后,第一层成比例地变大。在我们的实验中,用我们的 EffNet 块替换第一层为相应的层节省了 30%的计算。
TL;速度三角形定位法(dead reckoning)
MobileNet、ShuffleNet 和 EffNet 是 CNN 架构,旨在优化操作数量。每个人都用自己的版本取代了经典卷积。
MobileNet ( github )深度方向可分离卷积使用深度方向卷积,后跟点方向卷积。此外,它还引入了两个超参数:减少通道数量的宽度乘数和减少特征映射空间维度的分辨率乘数。
shuffle net(github)分组使用逐点卷积。为了组合每个组产生的特征,还引入了洗牌层。
最后,EffNet(github)使用空间可分离卷积,它只是沿 x 和 y 轴分离的深度方向卷积,它们之间有一个可分离池。
Benchmark on CIFAR 10
这篇文章已经被翻译成中文了!此处。
在 TensorFlow 对象检测 API 中更新更快的 R-CNN/SSD 模型参数的 3 个步骤
我写过一篇关于配置 TensorFlow 对象检测 API 的文章。请参考这个故事这里来配置 API。那个故事是这篇文章的先决条件。
在这个故事中,我将讨论如何改变预训练模型的配置。这篇文章的目的是你可以根据你的应用程序配置 TensorFlow/models ,API 将不再是一个黑盒!
文章概述:
- 了解协议缓冲区和
proto
文件。 - 利用
proto
文件的知识,我们如何理解模型的配置文件 - 更新模型参数需要遵循的 3 个步骤
- 杂项示例:
- 更改权重初始值设定项
- 更改权重优化器
- 评估预训练模型。
协议缓冲区
为了修改这个模型,我们需要了解它的内部机制。 TensorFlow 对象检测 API 使用协议缓冲区,这是一种独立于语言、独立于平台且可扩展的机制,用于序列化结构化数据。它就像规模较小的 XML,但是更快更简单。API 使用协议缓冲语言的 proto2 版本。我将尝试解释更新预配置模型所需的这种语言。有关协议缓冲语言的更多详细信息,请参考本文档和 Python 教程。
协议缓冲区的工作可以用以下 3 个步骤来解释:
- 在
.proto
文件中定义消息格式。这个文件就像所有消息的蓝图,它显示了消息接受的所有参数,参数的数据类型应该是什么,参数是必需的还是可选的,参数的标签号是什么,参数的默认值是什么等等。API 的 protos 文件可以在这里找到。为了便于理解,我使用的是grid _ anchor _ generator . proto文件。
从第 30-33 行可以清楚地看到,参数scales
和aspect_ratios
对于消息GridAnchorGenerator
是强制的,而其余的参数是可选的,如果没有通过,将采用默认值。
- 定义消息格式后,我们需要编译协议缓冲区。这个编译器将从
.proto
文件生成类文件。在安装 API 的过程中,我们运行了以下命令,该命令将编译协议缓冲区:
# From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.
- 在定义并编译好协议缓冲区之后,我们需要使用 Python 协议缓冲区 API 来写入和读取消息。在我们的例子中,我们可以将配置文件视为协议缓冲 API,它可以写入和读取消息,而忽略 TensorFlow API 的内部机制。换句话说,我们可以通过适当地更改配置文件来更新预训练模型的参数。
了解配置文件
很明显,配置文件可以帮助我们根据需要改变模型的参数。下一个问题是我们如何改变模型的参数?本节和下一节将回答这个问题,在这里proto
文件的知识将会派上用场。出于演示的目的,我使用了fast _ rcnn _ resnet 50 _ pets . config文件。
第 7–10 行暗示num_classes
是faster_rcnn
消息的参数之一,而后者又是消息model
的参数。同样,optimizer
是父train_config
消息的子消息,而batch_size
是train_config
消息的另一个参数。我们可以通过检查相应的 protos 文件来验证这一点。
Snippet of faster_rcnn.proto
从第 20 行和第 26 行可以清楚地看出num_classes
是消息faster_rcnn
的optional
参数之一。我希望到目前为止的讨论有助于理解配置文件的组织。现在,是正确更新模型的一个参数的时候了。
步骤 1:决定要更新的参数
假设我们需要更新faster _ rcnn _ resnet 50 _ pets . config文件第 10 行提到的image_resizer
参数。
步骤 2:在存储库中搜索给定的参数
目标是定位参数的proto
文件。为此,我们需要在存储库中进行搜索。
Search in the repository
我们需要搜索以下代码:
parameter_name path:research/object_detection/protos#in our case parameter_name="image_resizer" thus,
image_resizer path:research/object_detection/protos
这里path:research/object_detection/protos
限定了搜索域。更多关于如何在 GitHub 上搜索的信息可以在这里找到。搜索image_resizer path:research/object_detection/protos
的输出如下所示:
Search result of image_resizer path:research/object_detection/proros
从输出中可以清楚地看到,要更新image_resizer
参数,我们需要分析image_resizer.proto
文件。
第三步:分析
proto
文件
image_resizer.proto file.
从第 8-10 行可以清楚地看出,我们可以使用keep_aspect_ratio_resizer
或fixed_shape_resizer
来调整图像的大小。在分析第 23-44 行时,我们可以看到消息keep_aspect_ratio_resizer
有参数:min_dimension
、max_dimension
、resize_method
、pad_to_max_dimension
、convert_to_grayscale
和per_channel_pad_value
。而且,fixed_shape_resizer
有参数:height
、width
、resize_method
、convert_to_grayscale
。所有参数的数据类型都在proto
文件中提及。因此,要更改image_resizer
类型,我们可以在配置文件中更改以下几行。
#before
image_resizer {
keep_aspect_ratio_resizer {
min_dimension: 600
max_dimension: 1024
}
}#after
image_resizer {
fixed_shape_resizer {
height: 600
width: 500
resize_method: AREA
}
}
上面的代码使用 AREA resize 方法将图像的大小调整为 500 * 600。TensorFlow 中可用的各种调整大小的方法可以在这里找到。
杂项示例
我们可以使用上一节中讨论的步骤来更新/添加任何参数。我将在这里演示一些常用的示例,但是上面讨论的步骤可能有助于更新/添加模型的任何参数。
改变重量初始化器
- 决定更改文件 faster _ rcnn _ resnet 50 _ pets . config第 35 行的参数
initializer
。 - 在存储库中搜索
initializer path:research/object_detection/protos
。从搜索结果来看,很明显我们需要分析hyperparams.proto
文件。
Search result of initializer path:research/object_detection/proros
- hyperparams.proto 文件中的第 68–74 行解释了
initializer
配置。
message Initializer {
oneof initializer_oneof {
TruncatedNormalInitializer truncated_normal_initializer = 1;
VarianceScalingInitializer variance_scaling_initializer = 2;
RandomNormalInitializer random_normal_initializer = 3;
}
}
我们可以使用random_normal_intializer
代替truncated_normal_initializer
,因为我们需要分析 hyperparams.proto 文件中的第 99–102 行。
message RandomNormalInitializer {
optional float mean = 1 [default = 0.0];
optional float stddev = 2 [default = 1.0];
}
很明显random_normal_intializer
有两个参数mean
和stddev
。我们可以更改配置文件中的以下行来使用random_normal_intializer
。
#before
initializer {
truncated_normal_initializer {
stddev: 0.01
}
}#after
initializer {
random_normal_intializer{
mean: 1
stddev: 0.5
}
}
更改权重优化器
- 决定更改fast _ rcnn _ resnet 50 _ pets . config文件第 87 行父消息
optimizer
的参数momentum_optimizer
。 - 在存储库中搜索
optimizer path:research/object_detection/protos
。从搜索结果来看,很明显我们需要分析optimizer.proto
文件。
Search result of optimizer path:research/object_detection/proros
- optimizer.proto 文件中的第 9–14 行,expain
optimizer
配置。
message Optimizer {
oneof optimizer {
RMSPropOptimizer rms_prop_optimizer = 1;
MomentumOptimizer momentum_optimizer = 2;
AdamOptimizer adam_optimizer = 3;
}
很明显,我们可以使用已经被证明是很好的优化器的adam_optimizer
来代替momentum_optimizer
。为此,我们需要对 faster _ rcnn _ resnet 50 _ pets . config文件进行以下更改。
#before
optimizer {
momentum_optimizer: {
learning_rate: {
manual_step_learning_rate {
initial_learning_rate: 0.0003
schedule {
step: 900000
learning_rate: .00003
}
schedule {
step: 1200000
learning_rate: .000003
}
}
}
momentum_optimizer_value: 0.9
}#after
optimizer {
adam_optimizer: {
learning_rate: {
manual_step_learning_rate {
initial_learning_rate: 0.0003
schedule {
step: 900000
learning_rate: .00003
}
schedule {
step: 1200000
learning_rate: .000003
}
}
}
}
评估预训练模型
Eval 等待 300 秒检查训练模型是否更新!如果你的 GPU 很好,你可以同时训练和评估这两者!一般情况下,资源会被耗尽。为了克服这一点,我们可以首先训练模型,将其保存在目录中,然后评估模型。为了以后进行评估,我们需要在配置文件中进行以下更改:
#Before
eval_config: {
num_examples: 2000
# Note: The below line limits the evaluation process to 10 evaluations.
# Remove the below line to evaluate indefinitely.
max_evals: 10
}#after
eval_config: {
num_examples: 10
num_visualizations: 10
eval_interval_secs: 0
}
num_visualizations
应该等于待评估的数量!可视化的数量越多,评估所需的时间就越长。如果你的 GPU 有足够的能力同时训练和评估,你可以保留eval_interval_secs: 300
。此参数用于决定运行评估的频率。我按照上面讨论的 3 个步骤得出了这个结论。
简单地说,协议缓冲区的知识帮助我们理解了模型的参数是以消息的形式传递的,要更新参数我们可以参考.proto
文件。讨论了找到正确的.proto
文件以更新参数的 3 个简单步骤。最近在 neptune.ai 上偶然看到这篇文章,对进一步参考有用。
请在评论中提及您想要在配置文件中更新/添加的任何参数。
希望这篇文章有所帮助。
索达
关于简单线性回归你不知道的 3 件事
线性回归将输入线性映射到输出。假设作为观测数据基础的数据生成过程是 y = X𝛽 + 𝜖,其中
- y 是长度为 n (数据点数)的响应向量
- x 是一个由( p +1)个独立变量组成的 n 矩阵
- 𝛽是回归系数的( p +1)向量
- 𝜖也是每个元素 iid ~ N(0,𝜎的( p +1)个扰动向量
x 中的每一行有 p 个元素加上常数 1,常数 1 方便地包括系数向量𝛽.中的截距项在没有使用截距项的问题中,1 被省略(通常是特定于应用的决定)。𝜖是不可知的,所以我们基于 x 对 y 建模所能做的最好的事情就是用 b 来估计𝛽,即 ŷ = X b ,其中 ŷ 是对 y 的估计。
为了拟合训练数据,我们最小化残差平方和,其中残差被定义为 y - ŷ 。由于 ŷ = X b ,平方和可以写成(y-xb)ᵀ(y-xb)。对 b 的每个元素进行微分(y-xb)ᵀ(y-xb)给出了著名的正规方程:Xᵀ( y -X b ) = 0。假设 XᵀX 是可逆的, b = (XᵀX)- Xᵀ y 。
线性回归的几何解释也许更直观。X 的列向量跨越一个子空间,最小化残差相当于将 y 正交投影到这个子空间上,如下图所示。通过正交性,可以立即得到正规方程。
Elements of Statistical Learning, p46
有了这些事实,我们就可以得出带有截距和斜率系数的简单线性回归的某些性质。我们将引用 R 中的一个线性回归示例来仔细检查这些属性。
> set.seed(13)
> n = 20; x = 1:n; y = 2*x + rnorm(n, sd = 1)
> model = lm(y~x)
> summary(model)Call:
lm(formula = y ~ x)Residuals:
Min 1Q Median 3Q Max
-1.89019 -0.47625 0.01282 0.77558 1.48740Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.61809 0.43205 1.431 0.17
x 1.95829 0.03607 54.296 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 0.9301 on 18 degrees of freedom
Multiple R-squared: 0.9939, Adjusted R-squared: 0.9936
F-statistic: 2948 on 1 and 18 DF, p-value: < 2.2e-16
- 残差之和为零。由正规方程 xᵀ(y-xb)= xᵀ(y-ŷ)= 0。由于 x 有一列 1,1ᵀ( y - ŷ ) = 0。我们可以用
sum(model$residuals)
在 R 中进行健全性检查。再者,X 中任意一列与残差的点积为 0,可以用sum(x*model$residuals)
来查。 - 斜率项的 t 检验与 F 检验等效,因为它们都有相同的零假设:斜率为 0。这就是为什么它们的 p 值在上面的总结中是匹配的,2e-16 和 2.2e-16。来自具有 k 自由度的 t 分布的随机变量 T 等于z/sqrt(𝜒_ {k}/k,其中𝜒 { k }是具有 k 自由度的卡方随机变量。平方 *T* ( k )给出 F (1 ,k )随机变量:t_ {k} =z/(𝜒_ {k}/k)=(𝜒_{1}/1)/(𝜒_ {k}/k我们可以确认,对汇总中 x 项的 t 值(54.296)求平方,得到报告的 F 统计量(2948)。**
- 决定系数 R 等于 x 和 y 之间相关性的平方。 R 测量由 x 解释的 y 的变化比例。一个证明 y 与 ŷ 的相关性的平方等于 R 这里是这里是,对于简单线性回归来说 y 与 ŷ 的相关性与 y 与 x 的相关性相同。请注意
cor(x,y)^2
给出的值与“多 R 平方”旁边报告的值相同:0.9939。
关于语义搜索技术你必须知道的 3 件事
当受雇于机器时,“聪明”的巧妙表达不仅仅是一两道眉毛。当有报道称设备具有理解内容意义的能力时,讨论就开始了。然而,举例来说,当一个人迫切需要找到最近的药店或加快一个研究项目时,他会立刻得到补贴。毫不奇怪,在这种情况下,我们会很高兴地利用一个复杂的计算过程来筛选信息,并尽快决定对我们最相关的结果。
语义搜索技术是一种查询数据的方法,它试图理解问题的目的和上下文,以恢复与特定数据请求关联的最相关的资源。
为什么要想到实现 语义搜索技术 ?
如果您还在为布尔搜索查询而挣扎,那么您应该开始考虑实现语义技术。让我给出三个最有说服力的理由来说明为什么你必须拥有这种超强的创新。
1.因为…
它提供了灵活的集成方法
与传统的 IT 系统相比,语义技术提供了不同信息资产的更好的集成和互操作性,并且可以容易地适应变化,而不需要重做模式。使用语义建模添加、更改和执行新的连接很简单,因为与标准技术不同,在设计时,重要性和关系没有被分类并“硬连线”到数据格式和软件程序代码中。因此,一旦世界的本质发生变化,传统的关系数据库就会变得僵化和脆弱,因此在面对新知识或新连接时需要不断地重新构建。
2.因为…
它可以轻松连接流程+数据+内容
语义搜索技术通过在你现有的数据集合中添加额外的上下文数据来实现这一点。一个很好的例子是将天气和交通信息整合到街道地图中,如路况、天气信息、事故几率、建筑物的站立状态和步道。这些额外的数据可能会被“智能汽车”用来做出减少事故危险的决策。
另一个很好的例子是人力资源(招聘)行业,许多 申请人跟踪系统 (ATS)内置了由布尔搜索支持的简历解析功能,主要是使用运算符(OR、AND)进行查询。然而,这种十年之久的解析技术可能会像 Textkernel (CV 解析软件)一样,被 语义补充技术 取代。它解析简历的准确率超过 80%。这意味着招聘人员需要花费更少的时间来填补空缺职位,因为他们可以很容易地从现有的简历库中找到合适的人选。
3.因为…
可以开发更智能的解决方案
本体是它们之间的关系和领域中的术语的显而易见的正式术语,并且最适合展示支持更智能的解决方案所需的信息模型。现在,这些更加智能的解决方案旨在解决业务困难,并且必须利用数据分析的力量来实现其承诺。
人工智能影响航天工业的三种方式
ML + Rocket Science
我开始从事数据科学行业已经一年了。作为一名航空航天工程背景的人,我很自然地会寻找应用人工智能的方法,更具体地说,是将机器学习应用于空间技术。
历史上,机器学习算法已经用于航天器的健康监测、自主导航、智能控制系统和用于路径导航的智能物体检测。
在本帖中,将讨论两种有助于预测分析的方法。第一种是模型驱动方法,包括航天器每个子系统的数学模型,以校正系统,使其始终符合该模型的规范。
第二种方法是收集关于环境和航天器内部的数据,以便使用最佳猜测情况的机器学习模型来主动优化功能。这是数据驱动的方法,它被证明更具适应性。
1.航天器的健康监测
在宇宙飞船中,可能有 1000 多个被监控的遥测变量,地球上的工程师分析这些变量以诊断异常情况。 Takehisa Yairi 及其合作者(Yairi 等人)提出了一种替代的数据驱动方法用于异常检测。该过程考虑了遥测数据的五个特征:高维度、多模态、异质性、时间相关性、缺失数据和微小异常值。遥测变量标准化后,用于创建一个综合模型,称为概率主成分分析仪可分类分布的混合物(MPPCACD)。Yairi 等人在 JAXA 使用的演示卫星 SDS-4 的遥测数据上测试了该模型。总共模拟了 89 个连续变量和 365 个状态变量。MPPCACD 的性能与现有的异常检测算法进行了比较,如单类支持向量机(OCSVM)和支持向量数据描述(SVDD)。这三种算法通过产生异常分数图来发挥作用,其中异常由图尖峰来表示。在 MPPCACD 的图表中,注意到在正常系统中,异常分数通常较低(0-10),而异常分数在 100-200 之间时很容易识别。由于 OCSVM 和 SVDD 是通用方法,即使在正常的系统运行中,异常分数也是不稳定的,因此很难区分异常。
2.自主导航
由一组工程师单独控制的火星漫游车只能每 20 分钟收到一次移动指令。这是地球和火星之间的通讯延迟。假设每 20 分钟只能发送 5 条移动命令,那么一天总共有 360 条命令。配备自主导航功能的漫游车每分钟可以做出≥ 5 个决策,如果不是每秒的话。它现在受到其计算机速度的限制,而不是通信延迟。
Mathew C. Wilkinson 和 Andrew J. Meade 提出了一种受人工神经网络(ANN)启发的卫星导航模型。序列函数逼近(SFA)用于开发一种人工神经网络,该网络通过发动机燃烧在航天器飞行路径上的大小和方向的变化来学习发动机燃烧的影响。将结果与期望状态进行比较,随后的误差参数用于不断调整神经元参数。SFA 通过观察神经元参数变化对误差参数的影响的迭代过程来有效地训练它自己的神经元排列。这种方法被证明比计算动力学方程或立即创建神经图在计算上更有效。
3.用于行星探测的特征检测
行星表面的地理特征告诉我们它的地质构成和历史意义。对附近行星的地理分析是通过地面漫游车向地球发回图像来实现的。这可能会构成大量冗余数据。如果漫游者有一个机载机制来分析特征并按照重要性的顺序对图像进行分类,然后决定下一步的最佳行动,这一过程将会更加有效。
Burl,M. C .,& Wetzler,P. G .评估了一些监督机器学习算法的性能,如支持向量机(SVM)和连续缩放模板模型(CSTM)来检测陨石坑。训练好的算法用海盗号火星轨道飞行器的图像进行了测试。SVM 方法被认为是最有效的,就像人类对照片进行分类一样准确。作者提出了一种使用快速傅立叶变换和重叠相加技术的 SVM 的新颖实现,其将存储器使用减少到图像大小的 5%。这使得算法可以在内存受限的系统上运行,例如航天器。
5 Uses of AI in Space!
参考资料:
Yairi,t .等人,一种基于概率聚类和降维的数据驱动的卫星管家数据健康监测方法,IEEE 航空航天与电子系统汇刊,第 53 卷,№3,2017。
Wilkinson,m .和 Meade,a .,自主月球目标定位的神经网络启发的机器学习,《航空航天信息系统杂志》,第 11 卷第 7 期,2014 年
伯尔、M. C .、韦茨勒、P. G. 用于行星探索的机载物体识别。机器学习,84(3),341–367,2011。doi:10.1007/10994–011–5239–6
数据质量影响预测分析的三种方式
大数据时代产生了一个主要的误解——认为数据量本身就可以为营销人员提供一个人的清晰图像。那是完全错误的。拥有更多数据非常好。但这不是一切。当你使用数据来改进你的营销策略时,这里有另外三个你需要考虑的因素。
1.详细程度:
每当你在分析一个事件时,你需要所有的细节,以及相关个人的历史记录。你拥有的数据点越多,你的反应就越好,你的下一个行动计划就越聪明。
一个律师掌握了关于他/她的委托人案件的全部细节会更有效率。一个了解他/她病人的病史、习惯和现有行为的医生将会更好地帮助病人。你的顾客也一样。您对客户旅程了解得越多,就越容易设想每个场景并定义成功案例。
全面的数据采集对每一个营销策略都很重要,因为它直接影响每一个预测的准确性。机器只能通过我们提供的细节来学习。它是上下文不可知的,永远不会要求更多的细节。这意味着我们营销人员、数据科学家和分析师有责任确保所有数据以正确的方式呈现。
2.数据内的连接:
将第一方客户数据存放在多个仓库中对企业没有任何好处。您跟踪的任何关于客户接触点或其数字踪迹的信息都会成为一个关键数据点,值得分析其与预测结果的相关性,因此您可以回答以下问题:
- 如果我对该产品进行促销,哪个客户会购买?
- 我的哪些客户是最好的,值得额外的折扣?
- 这种产品会畅销吗?
- 我可以为这款新产品设定的价位是多少,以满足需求,同时不浪费资金?
- 该产品类别可能在哪里销售最好?
使用预测分析,您可以提出和解决的问题是无限的。但是你如何决定哪些变量值得考虑呢?
这个问题有两个部分。 首先是 ,我们作为人类决定什么被认为是相关的,要在一个非常高的层次上考虑。数据科学家的职责是研究该行业所需的结果,并确保纳入正确的因素。 其次 ,一旦相关的、全面的数据被输入到机器学习模型中,它就可以突出那些特征中的哪些与所讨论的结果有很强的相关性。
连接所有系统的数据对任何企业来说都是一个关键的过程。例如,如果理想的等式应该是[a + b + c + d = outcome],然而你只考虑一个变量,预测结果将会是扭曲的和误导的。这些变量{a,b,c,d}可能是一组信号,是位于多个不同数据系统中的数据点。
如果没有将数据点之间的点连接起来,你预测的结果肯定是不准确的。
3.数据的完整性:
让我们假设您向客户发送了多个目录。有些导致销售。如果您只分析销售交易,您如何更深入地了解发送该目录的影响?
一个数据点提供了转换您所选配置文件的客户所需的平均目录数量,这不仅有助于您确定需要发送的目录数量,还有助于您确定发送目的地。预测分析不仅仅是根据客户的 LTV 或购买历史来决定他们是否会购买,它还包括了解你的营销策略对销售结果的作用。
在 VectorScient ,我们对数据质量有强烈的感受:“垃圾进,垃圾出。”如果你输入机器的数据不好,那么由此产生的预测将毫无用处。这意味着营销人员必须关注的不仅仅是数据数量,他们还需要在为自己的业务寻找合适的产品时考虑数据质量。
总之,虽然将所有不同数据系统的所有相关数据连接起来并不容易,但重要的是要认识到,它形成了直接影响预测结果准确性的坚实基础。
感谢您的时间和关注。您是否研究过您企业的所有 3 种全面数据覆盖方式?我很想听听你对此的看法。
关于作者: 韦达·孔杜鲁是 VectorScient 的创始人兼 CEO。在她目前的职位上,Veda 负责制定和执行 VectorScient 的战略。Veda 还担任 VectorScient 预测营销云的首席产品架构师。在推出 VectorScient 之前,Veda 在企业界工作了 10 多年,为销售、需求预测和供应链设计和构建软件应用程序,在产品质量、客户关注和参与方面享有盛誉。Veda 将她的统计学背景与机器学习和数据科学相结合,创造出真正世界级的预测分析产品。她拥有计算机科学硕士学位。
非营利组织利用新兴技术增加捐款的三种方式——你也可以这样做
一个总部设在美国的非营利组织想给危地马拉农村的户主送去清洁炉灶。这个想法是让接受者用这些炉子开始小生意来支持他们的家庭。但是如果其中一个炉子坏了怎么办?
Ixo 帮助非营利组织收集、测量、评估、估价和标记可验证的影响。他们对物联网(IoT)传感器、智能合同和区块链的应用帮助非营利组织实时服务于那些需要帮助的人,无论他们在哪里。例如,通过物联网传感器,发送品牌可以在数千英里之外监控产品性能,甚至在问题出现之前就进行故障排除,然后提供修复指令。
此外,ixo 将区块链和智能合同与物联网传感器配对,以收集有关碳排放的数据,然后实时发放碳令牌——在新兴技术出现之前,这可能需要一年的时间来处理。此外,为了提高透明度,区块链对物联网传感器进行了身份验证,因此没有数据篡改会被忽视。
“由于这些技术,各方之间有了更大的信任,同时降低了评估成本,”ixo 基金会的合作伙伴和监管负责人 Fennie Wang 说,ixo 基金会是一个利用技术创造社会影响的非营利组织。
通过一次将一项技术与一个用例相匹配,进一步增加捐赠资金
尽管 ixo 将无数新兴技术与非营利问题相匹配,但这种方法对于许多组织来说可能是势不可挡的。因此,其他公司正在采取一对一的技术方法,以更少的资源提供更多的服务。了解非营利组织的 3 个新兴技术使用案例,以更少的捐赠服务更多的人:
1。 机器学习 (ML)让品牌安全削减 IT 基础设施成本。
每天有 22 个人因为等待器官而死去。一个成为器官、组织和眼睛捐献者的决定有可能拯救 8 条生命,并增强 75 个生命。
因此,“捐赠生命月”挽救了数千人的生命,因为人们使用社交媒体和其他平台来提高意识并提供关于器官捐赠者登记的信息。反过来,支持组织聚集在宣传者周围,新闻组织(T2)讲述受影响者的故事。
这是慈善、同情和拯救生命的一个月。但是,仅仅一个技术故障就可能使提供注册和捐赠机会的网站瘫痪。这将意味着生命的损失和影响较小的捐赠,因为与公益相关的组织正在努力弥补失去的用户创造的推广机会。
FogLogic 增长营销主管迪伦·马克斯说:“因为非营利部门非常依赖季节性,它对它们的影响甚至超过大多数行业。“为了保护自己免受需求波动的影响,许多大型非营利组织过度配置了其 it 基础架构。这保证了它们的安全,但效率很低,成本也很高。”
他说曼梯·里就是答案。在监控系统交互和变化的同时,它会精确定位潜在的问题,然后发出危险信号以防止问题发生。最终,组织削减了顶层基础架构的成本,并可以放心及时采取预防和纠正措施。
- 【虚拟现实(VR) 让投资者沉浸在没有旅行成本的非营利项目中。
性别、位置、冲突、家庭社会经济、残疾以及地方和国家冲突意味着全球有6100 万小学生没有受教育的机会。承诺的铅笔(PoP)是一个非盈利组织,它筹集资金在危地马拉、加纳、尼加拉瓜和老挝的农村地区修建公立学校。
虽然许多非营利组织依靠长途旅行向投资者展示捐款去向,但铅笔承诺转向了虚拟现实。利用虚拟现实,投资者可以体验来自全球各地的项目。这样一来,用于支付旅行费用的钱将直接用于为人们服务。
“没有其他媒介能像虚拟现实一样提供身临其境的个人体验,”承诺铅笔的首席执行官迈克尔·道赫蒂说。“我们的(虚拟现实)电影带着支持者走进加纳的一个农村社区,体验教育的变革性影响。”
尽管虚拟现实技术很昂贵,但通过仔细匹配它们的使用案例,组织可以获得更大的支持,从而抵消生产和提供沉浸式体验的成本。通过一部 90 秒的虚拟现实电影,承诺的铅笔为学校建设筹集了总计 190 万美元。
3。 区块链 通过增加信任来促进捐赠,同时消除中间商成本。
当南非德班野生动物康复中心(CROW)临床团队发现一只黑长尾猴 Opal 时,它只有 6 天大。队员们发现她仍然紧紧抱住被汽车撞死的母亲。今天,乌鸦临床团队寻找一个赞助商,以支付猫眼石的食物,住宿,医疗和康复费用。
而 Opal 未来的赞助商可以放心,CROW 专注于高效的捐赠使用。一年前,CROW 成为 Sun Exchange 的客户,Sun Exchange 是一家区块链公司,帮助 CROW 降低了 10-40%的电力成本。当被问及区块链如何削减 CROW 的电力成本时,Sun Exchange 的创始人兼首席执行官 Abe Cambridge 解释道:
“不发达市场中的非政府组织正在使用昂贵而肮脏的化石燃料发电,在这些情况下,使用太阳能要便宜得多,但实施起来也要昂贵得多。因此,我们可以进来,实施一个资金充足、全面运行的太阳能系统,满足所有非政府组织的要求,他们不必预先支付一分钱。”
使用区块链,世界各地的任何人都可以加入太阳交换平台,集体购买目标数量的太阳能电池板,通过太阳交换租赁给非政府组织,太阳交换将它们安装在非政府组织的屋顶上。从那里,非政府组织向太阳能电池板所有者支付租金,然后使用加密货币区块链支付快速安全地收集并发送回太阳能电池板所有者。
亚伯拉罕说:“使用基于新区块链的数字货币(如比特币)直接向项目支付款项是一种更高效、更优雅的方式,因为汇款人知道这笔钱的具体去向,而且只需几分钟,而不是几天。”
由于没有中间人,非政府组织不需要支付额外的国际交易费用,而且使用区块链的加密货币,资金也不需要支付货币兑换费。此外,投资者有信心参与跨国项目,因为他们可以在 CROW 的太阳能网上查看他们的钱去了哪里区块链纪事报。
谈到复杂的新兴技术,不要想太多。
当今 VR、ML、区块链、智能合约和物联网技术的巨大能力可能会让一些组织不知所措。但是,通过将技术与其最昂贵的用例之一相匹配,非营利组织可以削减成本,让捐助者的资金发挥更大作用。
受季节性影响的非营利组织通过 ML 保护他们最有利可图的捐赠时间。一些人通过虚拟现实体验削减旅行成本。还有一些人通过区块链削减了电费。
Sun Exchange 使它变得更加简单。他们提供非盈利的技术即服务,而不是实施内部技术。这样做可以让组织在提高效率的过程中削减成本。
为了用更少的资源提供更多的服务,起点很明确:将一个用例与一种技术相匹配。与科技公司合作降低实施成本。此外,如果您不知道从哪里开始确定您的组织的用例,请寻求技术公司的专业知识来确定最有可能削减间接成本的用例。你的捐助者和你服务的人会感谢你的!
3 种无需更多数据就能改善机器学习结果的方法
这些将是你值得信赖的 ML 助推器
想获得灵感?快来加入我的 超级行情快讯 。😎
你的 ML 模型总是可以在精确度上有所提高。它从来没有伤害,在大多数实际情况下,你真的需要它!但和往常一样,得到你想要的东西说起来容易做起来难。
大多数人会接受默认的建议:获取更多的数据…但是如果不能呢?
也许你需要的数据类型非常昂贵。也许这很难获得。如果你得到数据,重新训练你的模型,发现你的模型并没有变得更好,会发生什么?
你需要一个替代方案来提高你的 ML 模型的准确性。
让我给你三个!
超参数调谐
机器学习中的超参数是你的 ML 模型的用户控制的“设置”。它们会影响模型参数在训练过程中的更新和学习方式。当然,你的模型的输出取决于它的学习参数,它的学习参数在训练阶段是不断更新和确定的。该更新由模型的训练控制,而模型的训练又受超参数的影响!因此,如果您可以设置正确的超参数,您的模型将会学习到在给定训练算法和数据的情况下可能获得的最佳权重。
寻找最佳超参数通常是手动完成的。这是一个简单的试错任务,带有一些智能猜测。只要有时间,您就可以尝试尽可能多的超参数设置,看看哪一个效果最好。您可以通过粗略地了解什么是好的参数来缩小搜索范围。这是领域知识、对数据的洞察力和 ML 经验的问题。
找到你能找到的最好的超参数,你可能会把你的模型的性能提高几个百分点!
Scikit learn 有一个不错的超参数搜索模块。
集成方法
集成是一种将多个模型的预测一次结合起来的 ML 技术。这个想法是,这些模型的综合知识将比其中任何一个模型的知识给出更准确的最终结果。这是一种非常直观的技术,在 Kaggle 比赛中非常常用。
要构建集成,只需针对相同的任务,在相同的数据上训练多个不同的 ML 模型。在推理时,您将把所有的模型分别应用到您的输入中。如果您的任务是分类,您可以使用简单的每类投票方案来组合结果,或者以最高的置信度进行预测。对于回归,只需平均结果。集成是一种经过广泛实地测试和现实世界验证的技术,可以提高预测的准确性。给他们一个尝试!
Scikit learn 有一个不错的组装模块。
特征工程
要素工程涉及对数据要素的仔细选择和可能的操作。这样做的目的是为了给你的模型提供最佳的输入形式。如果你能始终如一地只给你的模型提供精确预测所需的部分数据,那么它就不必处理来自其余数据的任何额外噪声。
如果应用主成分分析并发现某个要素与输出的相关性很低,则可能不需要对其进行处理。有些功能直觉上是没用的,比如 ID 或者录制日期。或者,您可能只想首先考虑某些功能。
为了让您的模型获得数据所能提供的最佳效果,请进行一些数据探索,以找出预测实际上需要哪些信息和要素。通常,您会发现数据集附带了一些多余的或对预测毫无帮助的额外要素。
喜欢学习?
在推特上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!
向管理层和客户解释 NLP 模型的 3 种方法
Photo: https://cdn.pixabay.com/photo/2017/02/22/20/02/landscape-2090495_960_720.jpg
机器学习(ML)和人工智能(AI)改变了做生意的格局。许多公司雇佣数据科学家(我就是其中之一:)来交付数据产品。
交付具有“高”精度的引擎是绝对容易的(这是我用双引号引起来的原因)。如果有人问原因,我们可以说这个模型是黑箱或者是几年前的统计计算,但是现在我们不能这么说了。我们还需要说服产品团队和管理层相信我们的模型,但我们不能简单地说引擎从数据中“学习”了什么,或者它是一个无法解释的黑盒。
当然,在某些特殊的场景中,我们可能不需要解释模型。例如,您不想向公众解释欺诈检测模型。否则,公众可以找到“黑”系统的方法。
看完这篇文章,你会明白:
- 什么是模型解释?
- 为什么我们需要解释模型?
- 解读自然语言处理模型
- 拿走
- 参考
什么是模型解释?
模型解释意味着提供原因和背后的逻辑,以实现模型的可问责性和透明性。有许多类型的模型解释,包括:
- 在 探索性数据分析 (EDA)中,我们可能会应用主成分分析(PCA)或 t-分布随机邻居嵌入(t-SNE)来了解特征
- 建成模型 后,我们将使用各种度量来度量分类和回归模型。准确度、精确度和召回率用于分类,而均方误差(MSE)用于回归。这种度量帮助我们理解模型性能
- 除了 性能 之外,还可以从模型中检索静态特征汇总,如特征重要性。然而,它只存在于基于决策树算法中,如随机森林算法和 XGBoost 算法。
- 当 评估模型 时,我们想知道为什么预测错了。我们可以利用图书馆来解释它,这样我们就可以修复它。
Photo: https://pixabay.com/en/whiteboard-man-presentation-write-849812/
在解释模型之前,我们可以先了解模型解释的标准:
可解释性
- 内在:我们不需要训练另一个模型来解释目标。例如,它使用决策树或线性模型
- 事后:该模型属于黑箱模型,我们需要使用另一个模型来解释它。在接下来的部分中,我们将重点关注这一领域
接近
- 特定于模型:一些工具仅限于特定的模型,如线性模型和神经网络模型。
- 模型不可知:另一方面,一些工具能够通过构建写盒模型来解释任何模型。
级
- 全局:说明特征权重等整体模型。这给了你一个通用的模型行为
- 局部:说明具体预测结果。
为什么我们需要解释模型?
如前所述,我们应该在大部分场景中进行解释,因为:
- 问责 。模型应该有责任为消费者提供一个正确(相对)的答案。作为模型作者,我们应该验证模型特性,以保证它有助于做出正确的决策,但不要尽可能多地包含特性。
- 透明度 。机器学习不是一个黑匣子,我们应该向客户和管理层提供透明的模型。这样他们就知道你为什么这么做了。就像开源一样,人们更愿意使用开源,因为他们知道你在做什么。
- 信任度 。如果消费者想要使用分类或预测结果,这是基本要求。大多数时候,用户有一些领域的知识,如交易者需要了解为什么你提供购买/出售特定股票的决定。
解读自然语言处理模型
如你所知,我主要关注 NLP。因此,我只演示解释 NLP 模型的能力,尽管下面的库也可以解释其他问题,如回归和图像。
对于下面的演示,为了便于理解,我没有做任何预处理。在现实生活中的商业问题,我们应该做预处理的所有时间。否则,垃圾进垃圾出。
几个库帮助解释模型,包括解释像我五岁( ELI5 )、本地可解释的模型不可知解释(LIME)【1】和溜冰者。
- 库: 我将演示我们如何使用 ELI5 和石灰。滑冰者怎么样?请继续关注,将解释我为什么不在 NLP 中使用它的原因。
- 算法: 在下面的演示中,会包括线性模型(scikit-learn 中的 Logistic 回归)、集成模型(scikit-learn 中的随机森林,XGBoost)和深度学习模型(keras 中的自建词嵌入)。关于文字嵌入,可以查看我之前的帖子了解详情。
ELI5
Photo: http://explain-like-i-am-five.tumblr.com/post/158611418472/eli5-the-concept-of-bankruptcy
ELI5 提供了全局模型解释和局部模型解释。你可能简单地认为全局模型解释是一个重要的特性,但它不仅支持决策树算法,如 Radom Forest 和 XGBoost,还支持所有 sci-kit 学习估计器。
ELI5 作者将其称为排列重要性用于全局解释。为了计算得分,特征(一个词)将被其他词(噪音)代替并预测它。其思想是,当没有提供特定单词时,可以通过获得分数降低多少来推断特征重要性[2]。比如“我喜欢苹果”。它可能会更改为“我喜欢橙色”,然后它会对新创建的记录进行分类,以了解“苹果”的重要性。当然,我们需要假设被替换的单词(例如橙色)是噪声,并且它不应该在分数上提供大的变化。
for pipeline in pipelines:
print('Estimator: %s' % (pipeline['name']))
labels = pipeline['pipeline'].classes_.tolist()
if pipeline['name'] in ['Logistic Regression', 'Random Forest']:
estimator = pipeline['pipeline']
elif pipeline['name'] == 'XGBoost Classifier':
estimator = pipeline['pipeline'].steps[1][1].get_booster()
# Not support Keras
# elif pipeline['name'] == 'keras':
# estimator = pipeline['pipeline']
else:
continue
IPython.display.display(
eli5.show_weights(estimator=estimator, top=10,
target_names=labels, vec=vec))
上图意味着,如果输入包括“keith ”,则 y=0 的得分增加 2.138。另一种情况是“the”,它将在 y=1 和 y=2 时分别降低分数-0.731 和-1.387。
对于局部模型解释,ELI5 使用 LIME 算法。显示格式不同于石灰,但使用相同的想法。
number_of_sample = 1
sample_ids = [random.randint(0, len(x_test) -1 ) for p in range(0, number_of_sample)]for idx in sample_ids:
print('Index: %d' % (idx))
# print('Index: %d, Feature: %s' % (idx, x_test[idx]))
for pipeline in pipelines:
if pipeline['name'] in ['Logistic Regression', 'Random Forest']:
estimator = pipeline['pipeline'].steps[1][1]
elif pipeline['name'] == 'XGBoost Classifier':
estimator = pipeline['pipeline'].steps[1][1].get_booster()
# Not support Keras
# elif pipeline['name'] == 'Keras':
# estimator = pipeline['pipeline'].model
else:
continueIPython.display.display(
eli5.show_prediction(estimator, x_test[idx], top=10, vec=vec, target_names=labels))
ELI5 解释了测试数据,判定可能是 y=0,概率为 0.031。它还突出显示了一些高正面得分和负面得分单词。
石灰
Photo: https://www.weightlossresources.co.uk/recipes/calorie-counted/drinks/lime-soda-1-pint-309537.htm
顾名思义,LIME 只关注本地模型可解释和模型不可知的部分。
将训练好的模型和目标记录传递到石灰库。将创建线性词袋模型,并为训练白盒模型提供大量生成的记录。while box 模型作为一个二元分类器工作,指示单词存在的影响。比如“我喜欢苹果”。它可能会更改为“我喜欢”,然后它会对新创建的记录进行分类,以了解“苹果”有多重要。
所以不管提供的模型是什么,它也可以通过生成记录来解释模型。无论是 scikit-learn 库、XGBoost 甚至是 Keras 单词嵌入模型。在我的示例代码中,我在 sci-kit learn API 接口中实现了 Keras,这样我也可以使用 LIME 来解释 Keras 的单词嵌入模型。
number_of_sample = 1
sample_ids = [random.randint(0, len(x_test) -1 ) for p in range(0, number_of_sample)]for idx in sample_ids:
print('Index: %d' % (idx))
# print('Index: %d, Feature: %s' % (idx, x_test[idx]))
for pipeline in pipelines:
print('-' * 50)
print('Estimator: %s' % (pipeline['name']))
print('True Label: %s, Predicted Label: %s' % (y_test[idx], pipeline['pipeline'].predict([x_test[idx]])[0]))
labels = pipeline['pipeline'].classes_.tolist()
explainer = LimeTextExplainer(class_names=labels)
exp = explainer.explain_instance(x_test[idx], pipeline['pipeline'].predict_proba, num_features=6, top_labels=5)
IPython.display.display(exp.show_in_notebook(text=True))
# break
# break
LIME 构建了二进制分类器,因此我们可以看到,它用权重来表示它是否是 0、9、15 类,并突出显示高正负得分单词。
滑手
Photo: https://pixabay.com/en/skateboard-youth-skater-boy-skater-1869727/
对于全局解释,Skater 提供了特征重要性和部分相关方法。
尝试了几次,无法找到提供 sci-kit 学习管道包的方法。必须将原始文本转换为 numpy 格式并单独传递模型。第二件事是,当有大约 800 个独特的单词时,需要大约 2 分钟来准备特征重要性。
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as pltfrom skater.model import InMemoryModel
from skater.core.explanations import Interpretationtransfromed_x_test = vec.transform(x_test[:2]).toarray()interpreter = Interpretation(transfromed_x_test, feature_names=vec.get_feature_names())for pipeline in pipelines:
print('-' * 50)
print('Estimator: %s' % (pipeline['name']))
if pipeline['name'] in ['Logistic Regression', 'Random Forest']:
estimator = pipeline['pipeline'].steps[1][1]
else:
continue
print(estimator)
pyint_model = InMemoryModel(estimator.predict_proba, examples=transfromed_x_test)
f, axes = plt.subplots(1, 1, figsize = (26, 18))
ax = axes
interpreter.feature_importance.plot_feature_importance(pyint_model, ascending=False, ax=ax)
plt.show()
Skater 提供了每个单词的特征重要性。
部分依赖【3】是一串数字,用来一一表示目标与特征之间的关系(线性、单调或复杂)。通过提供可视化,我们可以可视化一个特征和目标之间的影响。但是,如果有 NLP,我们可能不会使用部分依赖。
用于本地解释。滑手包装 LIME 模块进行本地文本解释。所以我会更喜欢用原生石灰,而不是纯粹的包装纸。
Photo: https://github.com/datascienceinc/Skater/tree/master/skater/core/local_interpretation/lime
拿走
你可以通过我的 github repo 访问代码
- 当你阅读 Christoph 的博客 时,你可以参考上面代码中的局部代理模型(LIME) 部分。
- 作为一名数据科学家,我们必须解释模型行为,以便产品团队和管理层信任可交付成果和**调试您的模型。**否则你可能不知道你造的是什么。
- 对于 NLP 问题,特征重要性或置换特征重要性要求太多特征 (word)。不太有用/推荐用在 NLP 方面。
- LIME 在某些场景下无法正确解释模型。例如,分数可以每次都不同,因为它随机生成样本。会有另一篇文章介绍如何解决。
- 对于 ELI5,在 ELI5 中的 show_weight(全局解释)中支持 sci-kit 学习管道,但在 show_prediction (局部解释)中不支持。原因在这里提到的是。要克服它,你可以简单地直接使用石灰。
- 分类器为 XGBoost 分类器使用 ELI5(版本:0.8)时有 bug 。如果使用 XGBoost 分类器,由于 Eli 5 bug(xgb _ classifier . get _ booster()),必须执行一些变通方法
- 对于 Keras 模型,实现了 sci-kit learn API 接口,但仍无法使用 ELI5。ELI5 将检查对象类型以防止意外的库。
- 特别感谢迪潘詹(DJ)萨卡补充对溜冰部分。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。
从http://medium.com/@makcedward/访问我的博客
从 https://www.linkedin.com/in/edwardma1026获得连接
探索我来自 https://github.com/makcedward的代码
从 https://www.kaggle.com/makcedward查我的内核
参考
- [1]马尔科·图利奥·里贝罗、萨梅尔·辛格、卡洛斯·盖斯特林。“我为什么要相信你?”解释任何分类器的预测。2016 年 9 月。https://arxiv.org/pdf/1602.04938.pdf
- [2]布雷曼·利奥。《随机森林》。2001 年 1 月https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf
- [3]杰罗姆·弗里德曼,2001 年。"贪婪函数逼近:梯度推进机."2001 年 4 月https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
入门:将 CSV 文件加载到 Colab 的 3 种方法
没有数据,数据科学就什么都不是。是的,那是明显的。不太明显的是将数据转换成允许您浏览数据的格式所涉及的一系列步骤。您可能拥有 CSV 格式的数据集(逗号分隔值的缩写),但不知道下一步该做什么。这篇文章将通过允许您将 CSV 文件加载到 Colab 来帮助您开始学习数据科学。
Colab(co laboratory 的缩写)是谷歌的一个免费平台,允许用户用 Python 编码。Colab 本质上是 Jupyter 笔记本的谷歌套件版本。与 Jupyter 相比,Colab 的一些优势包括更容易安装软件包和共享文档。然而,当加载像 CSV 文件这样的文件时,它需要一些额外的编码。我将向您展示三种将 CSV 文件加载到 Colab 并将其插入 Pandas 数据帧的方法。
(注意:Python 包中包含了常见的数据集。我不会在本文中讨论加载这些数据集。)
首先,请登录您的 Google 帐户,进入 Google Drive。点击左侧的新按钮,如果安装了协同实验室(如果没有,点击连接更多应用,搜索协同实验室并安装)。从那里,如下所示导入熊猫(Colab 已经安装了它)。
import pandas as pd
1)从 Github(文件< 25MB)
The easiest way to upload a CSV file is from your GitHub repository. Click on the dataset in your repository, then click on 查看 Raw 。将链接复制到原始数据集,并在 Colab 中将它存储为一个名为 url 的字符串变量,如下所示(一个更简洁的方法,但不是必需的)。最后一步是将 url 加载到 Pandas read_csv 中以获得 dataframe。
url = 'copied_raw_GH_link'df1 = pd.read_csv(url)# Dataset is now stored in a Pandas Dataframe
2)从本地驱动器
要从本地驱动器上传,请从以下代码开始:
from google.colab import files
uploaded = files.upload()
它会提示您选择一个文件。点击选择文件,然后选择并上传文件。等待文件 100%上传。一旦 Colab 上传了文件,您应该会看到它的名称。
最后,键入以下代码,将其导入到 dataframe 中(确保文件名与上传文件的名称相匹配)。
import iodf2 = pd.read_csv(io.BytesIO(uploaded['Filename.csv']))# Dataset is now stored in a Pandas Dataframe
3)通过 PyDrive 从 Google Drive
这是三种方法中最复杂的一种。我将展示给那些将 CSV 文件上传到 Google Drive 进行工作流控制的人。首先,键入以下代码:
# Code to read csv file into Colaboratory:!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials# Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
出现提示时,点击链接获得认证,以允许谷歌访问您的驱动器。您应该会看到一个屏幕,顶部显示“ Google Cloud SDK 想要访问您的 Google 帐户”。在您允许权限后,复制给定的验证码并将其粘贴到 Colab 中的框中。
完成验证后,转到 Google Drive 中的 CSV 文件,右键单击并选择“获取可共享链接”。该链接将被复制到您的剪贴板中。将这个链接粘贴到 Colab 中的一个字符串变量中。
link = '[https://drive.google.com/open?id=**1DPZZQ43w8brRhbEMolgLqOWKbZbE-IQu**'](https://drive.google.com/open?id=1DPWWI61v2brRhbEMolgLqOWKbZbE-IQu') # The shareable link
你想要的是等号后面的 id 部分*。要获得这一部分,请键入以下代码:*
fluff, id = link.split('=')print (id) # Verify that you have everything after '='
最后,键入以下代码,将该文件放入数据帧中
downloaded = drive.CreateFile({'id':id})
downloaded.GetContentFile('Filename.csv')
df3 = pd.read_csv('Filename.csv')# Dataset is now stored in a Pandas Dataframe
最后的想法
这是将 CSV 文件上传到 Colab 的三种方法。根据文件的大小和组织工作流的方式,每种方法都有其优点。一旦数据有了更好的格式,比如熊猫数据帧,就可以开始工作了。
奖励方式——我的动力
非常感谢你的支持。为了纪念这篇文章达到 50k 的浏览量和 25k 的阅读量,我提供了一个将 CSV 文件导入 Colab 的额外方法。这个很简单干净。在你的 Google Drive (" My Drive ")中,在你选择的位置创建一个名为 data 的文件夹。这是您上传数据的地方。
从 Colab 笔记本中,键入以下内容:
from google.colab import drive
drive.mount('/content/drive')
就像第三种方法一样,命令会将您带到 Google 身份验证步骤。您应该会看到一个屏幕,上面显示 **Google Drive 文件流想要访问您的 Google 帐户。**得到允许后,复制给定的验证码,粘贴到 Colab 中的框内。
在笔记本中,点击笔记本左上角的炭笔 > ,点击文件。找到您之前创建的数据文件夹并找到您的数据。右击您的数据并选择复制路径。将这个复制的路径存储到一个变量中,就可以开始了。
path = "*copied path*"
df_bonus = pd.read_csv(path)# Dataset is now stored in a Pandas Dataframe
这种方法的伟大之处在于,你可以从你自己的 Google Drive 中创建的单独的数据集文件夹中访问数据集,而无需第三种方法中涉及的额外步骤。
我在 2017 MLHC 学到的 30 件事
在过去的这个周末,我在 MLHC 2017 展会上了解了很多关于机器学习和医疗保健的知识。这里有 30 个想法和发现,我可以压缩成要点。
请原谅(并联系我)在总结或归因的任何错误。
Lots of healthy snacks at Machine Learning for Healthcare 2017, held at Northeastern University.
医疗保健有什么特别之处?
- 数据很多但很难访问!贝丝以色列女执事医疗中心处理 7pb 的患者数据。然而,由于数据可用性挑战或针对罕见疾病,许多论文处理了数千甚至数十名患者的数据集。📎
- FDA 的批准很难,但很重要。虽然最初的过程是艰巨的,但较小的更新(例如,重新训练深度学习模型)只需要通知,但新模型需要重新批准。说服 FDA 的一个方法是展示模型的准确性符合人类专家的变化。📎
- 可自由访问的海量数据集加速了医疗保健领域的机器学习研究,许多被接受的论文使用了模拟数据。📎 📎
- 有效性和可再现性是这个成长领域的当务之急。研究人员使用模拟数据复制了 38 个实验的数据集,发现一半的实验列出了群组大小,复制的群组大小差异超过 25%。📎
可解释性很重要
- “基本原理”是简短、连贯和预测性的短语,可以解释啤酒评论和病理学报告。尽管啤酒评论有助于获得大量带注释的数据,但医疗保健专业人员尤其关心理解为什么将黑盒方法应用于病理学报告。📎
- 你可以把可解释性看得更远,并认为可解释的模型“应该适合 Powerpoint 幻灯片,并且可以不用计算器来计算。”扩展罗生门效应,多个模型可以具有相似的性能,但可解释性水平不同。为什么不找一个高性能和高解释性的模型?📎
医疗保健包括医院运营
- 用深度传感器监测手部卫生可以预防医院获得性感染——每 25 名患者中就有 1 人受到感染。匿名的深度感知人类在进入和离开病房之前和之后被评估是否正确遵循手部卫生协议。📎
- 更好地预测手术持续时间有助于提高医院效率和平衡成本:额外的停机时间没有调度冲突那么糟糕。📎
- 即使看似简单的机器学习方法也可以极大地改善医院流程,比如在收到的同意书上使用 OCR 将它们导入正确的患者档案。📎
- 一小时未经治疗的中风会使大脑老化 3.6 年,这凸显了治疗住院中风患者的重要性。📎
强化学习行动
- 在移动医疗的应用中,人们必须在及时干预和烦人的通知之间取得平衡。强化学习(RL)方法可以适应用户的偏好,并推荐活动建议和激励消息。在许多统计学上的微妙之处中,RL 必须平衡治疗的负面即时效应和潜在的巨大延迟收益。我们可以通过比例反馈控制减少治疗的后验均值来解决这个问题。📎
- 由于后勤、批准和伦理方面的原因,很难进行对照试验。从观察数据中学习连续状态空间上的治疗策略以模拟 RL 的重复实验是可能的。📎
- 在一项随机试验中,接受雷诺嗪治疗的患者死亡率没有差异;然而,对高危患者使用专门的治疗策略,结果显示出巨大的差异。RL 在构建最佳治疗策略方面取得了成功。📎
计算机视觉的胜利
- 视频记录可以使用基于神经网络的姿势估计来加速和标准化对运动障碍的诊断,例如帕金森病和共济失调。📎
- 姿势估计的另一个有用的应用是使用沙漏网络评估外科医生的技术技能,来自机械土耳其人的工人通过集合投票提供注释数据。📎
- 使用 CNN 分割心脏超声波图可以让心脏病专家节省时间和精力。📎
创造性的方法
- 社交媒体帖子历史嵌入可以捕捉用户之间的心理健康和同性恋关系的属性。📎
- 一篇病毒式的博客文章和激进的搜索引擎优化让一名研究人员找到了与他的幼子患有相同遗传疾病的其他患者。📎
- 科学文章的众包注释可以帮助创建基因突变和治疗的知识图表。大约 6 个外行人能够用 1 个专家的能力进行注释。📎
- 在说服临床医生采用系统时,使用心理学尤其重要:反复的积极反馈有助于缓解对新系统或增加的日志记录机制的抵制。📎
杂项 ML 方法
- 为了处理部分丢失的数据标签,仅从被注释的片段子集反向传播丢失。📎
- 异方差指一个变量的可变性在预测它的第二个变量的值的范围内不相等的现象。手术持续时间永远不会为负,所以我们不会期望误差的可变性遵循类似高斯的东西。使用多层感知器,我们可以估计每个预测点的方差和均值。📎
零碎东西
- 特别感谢 Andreas Stuhlmuller 用他对 2016 年 NIPS 的总结启发了这篇文章
- AWS 因其易用性和 HIPAA 合规性安全性获得了大量欢呼。📎 📎
- 和大多数会议一样,MLHC 在推特上很活跃,这也是我如何认识扎卡里·利普顿的原因。
- 面粉面包店继续供应美味的三明治和美味的饼干。
- 我很好奇 2017 年的 MLHC 将何去何从。我喜欢每份报纸每半天都有大人物主持的形式。会议已经从几年前的 11 人增长到 270 人,观众组合倾向于机器学习研究人员。向前!
*评论?有问题吗?我忘记什么了吗?
给我“鼓掌”,给我发电子邮件到iychen@mit.edu,或者在下面评论!*
TensorSpace.js 实现神经网络图层的三维可视化
介绍
你有没有想过:“CNN 内部到底发生了什么?”,“我的模型学习了哪些功能?”,“如何正确地可视化我的深层网络的中间层,而无需编写大量代码和安装几十个库?”。
如果你的答案是肯定的——tensor space . js 是你梦寐以求的图书馆!
TLDR:
tensor space . js——是一个神奇的框架,可以在您的浏览器中实现神经网络层的 3D 可视化!它的第一个版本刚刚在一周前发布(如果你正在 2018 年 11 月阅读这篇文章),可以与 Tensorflow、Tensorflow.js 和 Keras 模型配合使用。
在本文中,我将向您介绍可视化张量流模型的基本步骤。我将解释您应该如何训练和导出您的模型以与 TensorSpace.js 兼容,以及我将解释如何在您的浏览器中可视化保存的模型。
先决条件
我假设您已经安装了 Tensorflow。
另外,为了保持简短,我不会详细介绍 TensorSpace.js 的安装。这相当简单,你可以使用我的 GitHub 代码模板,并安装所有 TensorSpace.js 依赖项。
模特培训
为了简单起见,这里我们将使用 Tensorflow 训练一个简单的 CNN 模型来识别 MNIST 数字。
首先,让我们创建一个 DataHandler 类来处理我们的数据:
该类从 csv 文件中加载 MNIST 数据,将其分成训练集和测试集,并提供训练批次。
接下来,我们将创建一个模型类来创建、训练和保存我们的模型。这里我们将使用具有 3 个卷积层和 2 个全连接层的简单 CNN。
现在,在训练您的模型时,您应该记住一些重要的注意事项:
- 为您想要可视化的所有层定义“名称”(因为您将在模型转换和网络可视化阶段使用这些名称)。注意,这里我们使用的是纯 tensorflow 方法,还有像
tf.layers.conv2d
这样的包装器,实际上是在后台创建多个变量。 - 使用
tf.saved_model
方法导出你的模型,而不是tf.train.
在这里,我们希望可视化 3 个卷积层、相应的最大池层、密集层和 softmax 函数后的模型输出。
此外,我们输出图形变量列表只是为了确保我们知道想要显示的变量的正确名称。我们将使用以下变量:
- l1/Relu
- l1max
- l2/Relu
- l2max
- l3/Relu
- l3max
- l4/Relu
- l5/BiasAdd
- 输出
最后,我们还将输出。验证图像的 json 文件,我们将使用它进行流可视化。
模型导出
训练完我们的模型后,您应该会得到包含以下内容的模型文件夹:
- 变量
- ——variables . data-00000/00001
- — —变量.索引
- 已保存 _ 模型. pb
现在我们需要将我们的模型转换为 Tensorflow.js 模型。如果您之前没有安装,只需在终端中键入:
pip install tensorflowjs
现在,让我们用要可视化的张量流变量的名称创建一个变量:
vs='l1/Relu,l1max,l2/Relu,l2max,l3/Relu,l3max,l4/Relu,l5/BiasAdd,output'
注意:在所有阶段,遵循与初始化时相同的命名顺序。
现在我们把它转换成 Tensorflow.js 模型!
tensorflowjs_converter --input_format=tf_saved_mode --output_node_names=$vs --saved_model_tags=serve Model TensorSpace/mnist/model
这里 Model 是包含保存模型的文件夹,TensorSpace/mnist/model 是转换输出的目标。因此,在您的 TensorSpace/mnist/model 文件夹中,您应该会获得以下文件:
- 第 1 组-第 1 部分,共 1 部分
- tensorflowjs_model.pb
- 权重 _ 清单. json
现在我们可以开始可视化部分!
TensorSpace.js 可视化
最后,我们需要创造。将输出结果的 html 文件。
不要把时间花在设置 TensorFlow.js 和 JQuery 上,我鼓励你只使用我在 TensorSpace 文件夹中的模板。文件夹结构如下所示:
- index.html—输出 html 文件以运行可视化
- lib/-存储所有依赖项的文件夹
- data/ —包含的文件夹。带有网络输入的 json 文件
- model/-包含导出模型的文件夹
对于我们的 html 文件,我们需要首先导入依赖项并编写一个 TensorSpace 脚本。
在脚本中,我们需要定义所有要可视化的图层(带参数)。可能的层的完整列表可以在这里找到。接下来,我们在model.load
方法中加载转换后的模型,指明生成的模型文件的路径和要可视化的变量的名称。最后,我们运行model.init
来处理输入文件(我们在模型训练结束时生成的文件)。
瞧,现在你可以在任何兼容的浏览器中运行你的 html 文件,并从内部探索你的模型!
您的结果应该类似于:
3D Network visualization with TensorSpace.js
现在,您可以开始探索您的网络工作流程了!
结论
在本教程中,我们接触了 TensorSpace.js 功能的一小部分。我鼓励你使用代码并在你自己的模型上试用它!
如果你有问题或者你想探索 TensorSpace.js 的其他功能或者它在其他模型上的应用(Keras,Tensorflow.js ),请在下面留下评论!
4.0 行业技术和供应链
新行业的典范
在现代社会,需求越来越复杂和个性化。在行业中,这意味着为了满足人们和公司的需求,必须采用更高效、更智能的生产方式,最大限度地提高所有相关流程的利润,从根本上降低成本,缩短生产时间。简而言之,优化生产。目前,供应链不再仅仅是沿着供应链跟踪产品的系统,而是成为获得竞争优势甚至建立自己品牌的一种方式。
因此,第四次工业革命的特征是智能工厂的创建,这些工厂实施并集成了最先进的技术,如网络物理系统(将有形资产与数字双胞胎相结合)、IIoT(工业物联网)、数据分析、增材制造、3D 打印和人工智能。应用这些技术可以实现必要的优化和自动化,从而降低成本和缩短制造时间。这将允许我们生产数千种不同的产品配置,并以非常低的成本生产非常小批量的产品。
供应链是这些技术的使用能够引起流程优化和自动化革命的主要领域之一。供应链目前面临的主要问题是缺乏透明度和难以追踪通过供应链的货物。
Figure by the author
众所周知,Maersk 是一家国际集装箱货物运输公司,在该行业拥有最大的市场份额(约 20%)。管理集装箱运输的成本目前高于集装箱本身的实际运输成本,这是由于必须在所涉国家和有关当局进行授权和办理手续。简而言之,因为缺乏信息的透明度和资产的可追溯性,这减慢了整个过程,并大大提高了成本。
这就是为什么物联网、区块链和大数据技术的应用和集成,参考第四次工业革命,将标志着生产流程的转折点,这也是我们将在整篇文章中探讨的内容。
特别是,物联网技术在这场革命中具有特殊的意义,以至于人们创造了一个新的特定术语来指代这些技术在 4.0 行业背景下的应用:工业物联网(或 IIoT)。作为这些可扩展和可集成生态系统的一部分的设备必须受到极其有效的管理,因为不同网络物理系统之间的认证和通信是这些技术中的关键,所生成数据的收集、处理或存储中的故障可能会在整个生产链中产生灾难性的后果,甚至对人员损失产生影响。
这就是为什么数据的分散、不可变和集成管理至关重要,正是在这种背景下,区块链技术可以提供不同的价值。由于这项技术的应用,每个集成设备的活动和身份都可以记录在生产系统中,而没有操纵数据及其后果的风险。
此外,区块链可以通过机器之间的通信协议进行集成,允许在设备本身之间创造新的经济,在这种经济中,它们可以通过智能合同就原材料、能源、零件、维护甚至物流的供应达成协议,一旦满足之前建立的条件,智能合同的支付将自动执行。已经有通过区块链进行微支付的例子,或者与出售数据的传感器发生纠纷的例子,以及在自己和充电点之间进行电力交易的电动汽车的例子。
这种整合涉及数百个流程的精简和自动化,这些流程目前需要大量的中间步骤,这些步骤阻碍并增加了当前的生产流程。此外,对监管(和人类)第三方干预的需求显著减少,这将极大地降低随之而来的相关费用。这样,可以实现满足个性化和单一化生产需求所必需的边际成本的降低。关键是生产过程的非中介化,这样公司就可以接收到对一个分散的门户网站的请求,这个门户网站是廉洁的,所有相关方都可以轻松访问。
一旦存储在安全和透明网络中的这些数据可用,涉及数据科学背景的技术(如数据分析、机器学习和大数据)就可以处理数据。这使我们能够提取重要信息,并对需求、零件价格和维护进行准确高效的预测分析,以确保供应链和生产系统的正常运行
供应链目标和当前的低效率
从基于产品和客户的供应链系统的角度来看,这需要不同代理之间的合作,如买方、供应商、分销商……有许多目标需要强调:
1)数据共享和处理的效率:
像库存或资源运输这样的资产管理需要通过协作来提高效率。在这些方之间有效地共享信息可以在正确的时间将货物交付到正确的地方,最大限度地降低成本并满足客户的需求,或者相反,混乱。因此,如何在整个行动中共享和处理信息是极其重要的。
2)优化运输和物流:
参与运输、订购和装运货物的每个代理依赖于避免高成本和不良同步的活动的优化。在这种情况下,自动交易非常有用,但是必须特别小心,并且必须有人定期检查系统的正常运行。
3)质量改进反馈:
知道系统的问题或缺陷在哪里,将允许代理专注于指出漏洞或错误的可信信息。这是基于有效管理的原则“不能测量的就不能改进”。
4)建立长期稳定性:
在供应链生态系统中建立信任关系可以创造运营的稳定性,并加强共同业务计划的合作计划、协调和分配,从而提高商品交换的协调性,并由此建立更好的客户-制造商关系。
与供应链相关的物联网特性:
物联网被理解为集成了电子设备、软件、传感器和致动器的设备、车辆和家庭应用的网络,这些设备、车辆和家庭应用相互连接,目的是收集、存储和共享信息,并有可能执行与信息相关的特定操作。
众所周知,微处理器、控制器和传感器的价格下降使得物联网系统激增,这些系统可以收集、传输和存储大量数据。
目前,该概念远远超出了机器对机器(M2M)通信,并描述了一种用于设备、系统和服务的高级连接网络,其符合各种各样的协议、域和应用。
物联网,更具体地说是它的工业版本 IIoT,被称为在运营效率、商业机会和制造商收入方面彻底改革供应链。将通过以下方式实现这一目标:
1)资产可追溯性:
过去,跟踪数字和条形码是为了管理供应链上的货物。目前,RFID 方法和 GPS 传感器可以监控产品从生产到到达最终客户的状态和位置。能够及时获得对交付管理和质量的控制,以及对需求的预测,这使它成为某种游戏规则的改变者。
2)与供应商的关系:
据 IBM 称,公司产品价值的 65%来自供应商。通过跟踪资产获得的数据使制造商能够优化生产计划和与供应商的关系模式识别,从而揭示重要的商业机会。因此,特别关注与他们有关的整个过程是至关重要的,因为更高质量的服务和产品会促进与客户更好的关系。
3)股票和预测:
物联网传感器可以跟踪库存和库存供应,只需点击一下鼠标,就可以进行未来制造,还可以将信息存储在云中的共享空间,所有相关方都可以轻松访问。所有这些使得生产计划更加高效。
4)联网运输:
无论是纵向还是横向,供应链都不会停止增长,确保所有集装箱和船队都连接在一起,从而在整个供应链中实现完整有效的信息传输,这一点变得越来越重要。
与供应链相关的区块链特性:
简而言之,区块链是一个信息存储系统,安全,匿名,去中心化,并且由于它使用的加密技术,免于操纵。
区块链可以理解为一系列包含我们想要保存的信息的文本文件,形成了一个区块链,其中每个区块都包含前一个区块的信息,这个包含前一个区块的信息,以此类推。
因此,区块链是一个计算机网络,其中作为网络一部分的所有设备都保留了网络的副本。这不同于传统的数据库服务器,在传统的数据库服务器中,信息只有一个副本,它集中在一台服务器上,每个用户都在这台服务器上搜索信息。
相比之下,区块链可以在组成网络的所有设备中找到,它是一个去中心化和分布式的数据库,相对于传统数据库,这一特征使记录的信息更加安全,难以被操纵或丢失,这就是区块链成功的关键。
共识和智能合同允许区块链自动处理供应链流程中发生的交易。因此,当前的区块链应用程序利用了这一特性,如 Hyperledger 和 IBM 基于其技术的解决方案。
与供应链相关的数据科学特性
预测分析被定位为能够革新供应链的最强大的工具。以至于到 2020 年,这个行业的市场价值预计将超过 9 万亿美元。数据科学以及不仅能够从中提取相关信息,而且能够做出准确预测的能力,使得能够捕捉实时决策,从而显著改善该领域的战略和绩效行动。
机器学习是近年来发展迅猛的数据科学子领域之一。它可以定义为:
“机器学习是一门让计算机像人类一样学习和行动的科学,通过以观察和现实世界互动的形式向它们提供数据和信息,以自主的方式随着时间的推移改善它们的学习。”
与深度学习携手,这门科学使我们能够建立具有人工智能的系统,这种系统可以利用计算机每秒进行数百万次计算的能力,并在决策过程和重复任务的自动化方面提供巨大帮助。
目前,这些都是无处不在的技术(它们是我们生态系统的一部分,也是我们日常生活的一部分),我们在任何地方都能发现它们:从图像识别(能够比 T4 医生更准确地检测癌症),到游戏引擎(能够击败世界上最伟大的围棋选手)、聊天机器人和欺诈检测器。
Figure by the author
这些技术的引擎是我们今天可以获得的数量惊人的数据。由于技术和传感器价格的大幅下降,我们现在可以创建、存储和发送比历史上任何时候都多的数据。仅在过去的两年里,全球就有高达 90%的数据被创建。按照我们目前的速度,每天会产生 25 万亿字节的数据,而且这一速度还会继续增长。这些数据为机器学习模型提供了信息,也是这门科学近年来蓬勃发展的主要驱动力。
具体而言,数据分析和机器学习模型的应用将影响供应链的三个主要领域:
1)需求预测:
根据过去的事件和趋势对产品和商品的未来需求进行有效预测是在不增加成本的情况下改善售后服务的一个关键组成部分。
这些技术的应用可以消除库存积压,并允许仓库在它们之间工作,增加供应链的完整性和流动性,主要目标是实现服务零件的高可用性、产品的运行时间和最小的风险以及更好的客户服务。
2)预测定价:
这方面的经典处理方法是通过电子表格,根据过去的价格来评估服务零件的价格。问题是零件和产品在不同的地点以不同的价格出售,这转化为糟糕的客户体验和制造商获得利益的机会的丧失。
通过使用预测算法来估计零件的价格,制造商必须考虑影响销售的不同因素,包括零件的位置、季节性、天气和需求。机器学习模型允许考虑所有这些因素,从而对价格进行更加精确的调整。
3)预见性维护:
中断修复服务是被动和低效的。高达 55%的服务失败是因为服务零件在需要时不可用,这转化为产品停机时间的增加、库存故障、产品所有者的收入损失和客户不满。
通过物联网和预测分析的协同集成,不同方将能够在服务零件接近故障时进行检测和通信,因此,制造商可以确定何时需要新零件,主动将它们引导到经销商或维修中心,而不是存储它们,占用库存空间。所有这些都有助于减少库存过剩和与之相关的额外成本。此外,提高零件填充率,避免计划外停机的成本和腐败,并最终改善客户体验。
结论
物联网技术与区块链和大数据的融合可以解决供应链面临的许多问题。应用工业 4.0 技术使我们能够利用物联网实时监控供应链流程的每个部分,验证数据的完整性和透明度,通过区块链智能合同建立设备之间的经济,并利用数据科学对服务部分的需求、价格和维护进行精确预测。
所有这些都转化为生产过程功效和效率的根本改善,并带来必要的优化,以满足公众的新需求,提供最佳的客户体验,并最终改善行业生态系统。这为制造商节省了成本,从而为客户提供了更好的服务,并最终提高了人们的生活质量。这使我们走上了可持续发展的道路。
我写这篇文章的目的是帮助你理解当前的技术范式及其在行业中的应用,具体来说就是在供应链中的应用。为了鼓励你不断学习这些技术,探索它们的无限可能。未来是光明的,在每个人的合作下,我们将能够更快地实现我们的目标。
零售业中的 4 个人工智能案例
我们已经走过了很长一段路,以前所有的购物都是在实体场所进行,有镜子和销售助理来帮你。由于过去 25 年的数字革命,现在你可以在网上购买任何东西,这也开始影响人们在实体店购物的方式。人工智能(AI)是商业世界现代技术的基石,因为所有行业的公司都受益于自动化、定制和推荐引擎的好处,这些引擎将更多的消费者带到了他们的业务场所。
这在零售业务中尤其如此,人工智能开始在购物体验中发挥作用,因为消费者可以根据自己的兴趣找到合适的商品。此外,虚拟现实(VR)正在让顾客不用实际穿上就能更容易地试用物品。其中许多企业使用机器人流程自动化(RPA)技术将正确的产品推给正确的人,而 WorkFusion 为寻求改善客户购物体验的公司提供了一个平台。
下面是 AI 在零售业的四个案例。
1)浏览数字目录
人工智能为我们带来了先进的推荐引擎,使消费者能够在通常所需时间的一小部分内找到合适的商品。消费者可以浏览数字目录,询问他们关于偏好和他们正在寻找的商品类型的问题,而不是浏览数百种实体商品。根据他们的尺寸、个人信息、颜色偏好和其他因素,目录可以向他们展示适合他们的商品。销售书籍、配饰或其他任何东西的非服装零售商也是如此。
2)高级手势识别
除了拥有这些数字目录,零售商还可以通过监控购物者的面部和手势来监控商品在购物者中的成功程度。购物者对某种商品的反应告诉这些机器人销售助理,该商品是否是潜在的热门商品或无用商品。此外,通过更多地了解商品如何影响用户,推荐引擎可以更有效地找到适合特定用户的商品。
3)在虚拟镜像上检查自己
除了试穿衣服,你还可以用虚拟镜子来看看一件衣服穿在你身上是什么样子。公司一直在开发人工智能平台,允许用户在短时间内尝试许多不同的项目。如果你正在寻找合适的服装,你可以使用这项技术来确定哪件衣服最适合你,以及哪件衣服或配件与那件衣服相配,从而提供无限数量的服装选择。
4)视频分析在客户互动中的应用
自然,零售商在他们的商店里有摄像头,这些摄像头被用来提高这些商店的安全性,以及客户服务和合规性。计算机视觉技术的进步为消费者带来更舒适的体验和更有利可图的购物体验铺平了道路。这种零售监控可以帮助零售商了解其客户的产品暴露水平、参与度和整个商店的导航路线,这对于决定不同商品的摆放位置至关重要。
总之,好赌
随着一些零售商在商店中实施人工智能的成功,这项技术似乎很快就会成为该行业的一个重要组成部分。与一家软件公司合作,帮助零售商的创意团队找到销售产品的创新方法,可以在竞争日益激烈的美国经济中大有作为。人工智能可以通过便利性和定制化改善消费者体验,从长远来看,这将导致满意的客户和更高的利润率。
有抱负的数据科学家的 4 个招聘技巧
一家 600,000,000 美元的科技公司的首席数据科学家在招聘时会寻找什么?
You can watch a video version of this article on YouTube.
所以你想在数据科学领域找份工作?
你已经完成了所有的课程,并且你已经做了一些非常可爱的观想,但是现在呢?
最近我在墨尔本,有幸被带领参观澳洲最大的科技公司之一,REA 集团。
他们的主网站realestate.com.au每月有 700 万次独立访问——记住这是澳大利亚,我们的人口是 2200 万。所以每个月有三分之一的人访问这个网站。我们热爱房地产。
从每月 700 万次不同的访问中,收集、分析和试验了 3 亿个数据点,以提供更好的体验。
当 REA 集团的首席发明家奈杰尔·道尔顿和我讨论 REA 集团的时间线时,他说他们正在从搜索空间转移到匹配空间。
这意味着什么呢?
REA 希望利用他们的数据来帮助你找到最合适的酒店,而不是去寻找最合适的酒店。本质上,利用你过去的偏好向你展示你更可能感兴趣的地方。
如果你认为这是新的东西,它不是。网络上到处都在发生这种事。网飞的推荐引擎和脸书的 newsfeed 就是这样做的。我和我的兄弟们已经很少搜索 YouTube 视频了,因为他们的推荐太好了。
这一切怎么可能?
模式。模式无处不在。你头骨顶部的 3 英寸是一个专家模式识别器。这就是一个 20 年经验丰富的房地产经纪人如何在当地郊区寻找一所房子,并在小数位数内猜测其价值。但是现在,我们用机器复制这种模式识别的能力正在赶上,在某些情况下,超过了我们的灰质。
你我都无法接受 3 亿个数据点,想象如何改善 700 万人的体验。也许我可以拿 10 块钱给一个人,你拿 20 块。那么,如何根据一个人以前的搜索来匹配他的房产呢?数据科学。
我在找什么?
当我与 REA 最资深的数据科学家交谈时,我想知道如何才能加入他的团队。
为了清楚起见,REA 有一个 12 人的数据科学团队,数据在 REA 的几乎每一个商业决策中都发挥着作用。一个相对较小的团队使用正确的工具可以产生多大的影响,这是一件美妙的事情。
“当你打算雇佣新员工时,你会期待什么?”
我把我们的讨论浓缩成以下几点。
1.技能
技能是必须的。这是毫无疑问的。
但是到底是什么技能呢?
Python 或者 R 才是你想去的地方。
多少蟒蛇?多少钱?
这里没有确切的答案。能够操作数据帧是一个很好的起点。如果你不确定数据框架是什么,不要烦恼。找出并了解它们,然后继续阅读。
你可以毫不费力地在网上找到一门数据科学或机器学习课程,以及一两本与之配套的书。我是这样学的,而且我会继续这样学下去。如果你想开始,我推荐你在 Coursera 或 Udacity 上的任何东西。是的,他们得到了报酬,但是你得到了你所付出的。
没有完美的技能或完美的课程/书籍。跳进来试一试。一旦你学会了一些东西,就开始思考如何将它们应用到你感兴趣的事情上。这可能需要一段时间,可能需要一天。无论哪种方式,记住,学习一项新技能是很难的。预计有些时候会很难。
2.适应性
“我们的大多数问题不需要同样的技能,基础是需要的,但不是一切都是一样的。”
所以你一直在努力学习,现在你已经掌握了一些技能。太好了!现在可能是时候申请一些角色了。但是你读了工作列表,很快就对这些要求感到沮丧。
在 T4 有 X 年经验,在数据可视化方面有 X 年经验。
X 年 PowerPoint 经验(什么?).
你一直在学 Python。该死的。那个角色看起来真的很好。
等等!不要害怕。每个招聘启事都会有这样的内容。这是常态。
无论你学到了什么技能,都不太可能与招聘启事中列出的完全相符。还是申请吧。
这些技能的美妙之处在于它们的适应性。这就是你要做好的准备。问题不会总是出现在同一个整洁的小包裹里。
这是你可以展示你在学习过程中所做的事情的地方。
3.展示你的作品
好的,你已经学习了一些技巧,并且已经在一些数据上进行了测试。一切都没有按计划进行。
现在你读到了一个你真正喜欢的角色,但你又一次被“46 年的数据忍者经验”抛到了一边。
这是另一种说法,“我们需要你能够自己骑自行车,这样我们就不用再教你如何骑带辅助轮的自行车了。”
你猜怎么着?你已经扔掉了你的辅助轮。你可能有点摇摇晃晃,但你还在骑自行车。
但是像我刚才那样进行类比可能在面试或求职信中没有用。如果是这样,那就和你的雇主(和你)击掌吧。
哪里可以展示你的作品?
互联网给了我们一大堆工具来展示我们的创造力。我们的讨论中出现了几个问题。
你自己的网站
曾经想要一个完全属于你自己的互联网角落吗?这是可能发生的地方。
当我第一次推出我的博客时,我很害怕。几年后,它成了我的一部分,我喜欢有自己的空间来分享我的想法和我一直在做的任何事情。
你可以编写自己的代码,但是我们也有很多选择,比如 Medium、GitHub Pages、SquareSpace 和 WordPress。写一篇关于你最近从事的项目的文章。分享一个关于如何深入了解开源数据集的想法。
如果一个帖子的浏览量为 0,不要担心。这都增加了你的工作证明。所以如果有人问:“你有过 X 的经历吗?”你可以说,“嗯,不完全是,但我确实写了一篇关于我如何处理 Y 和我如何从中学习 Z 的文章。”
开源代码库
你知道我在说什么。代码生存的地方。
如果你正在编写代码,并希望它被看到或分享,GitHub 是一个合适的地方。
美好的事物?你可以在 GitHub 上免费编写一个完整的数据科学管道,写下你的思维过程,并分享一个循序渐进的教程。
使用您的 readme.md 文件为您和他人带来好处。不要只贴代码,描述它做什么,为什么重要。这是我仍然可以努力的事情。
商务化人际关系网
LinkedIn 是新的简历。如果你花了 8 个小时制作一份漂亮的简历,你至少应该在你的 LinkedIn 个人资料上做同样的事情。
至少,填写必填字段,写一段关于你自己的描述,并附上一个标题。
一个好的标题应该告诉别人你是做什么的,或者至少用 10 个字引起他们的兴趣。
你希望别人第一次看到你的个人资料时会想到什么?
I’m a fan of: I [VERB][WHAT YOU DO].
与 GitHub 不同,你不能直接在 LinkedIn 上分享代码,但你可以分享文本、照片、视频,甚至在你的个人资料上写文章。发帖没有秘方。我开始了为期 30 天的 LinkedIn 挑战。一个月来,我每天都发布一些东西,这是开始在平台上建立势头的一个很好的方式。
LinkedIn 的美妙之处在于到处都是像你这样的人。每个人都在某种程度上寻求提高自己和帮助他人。不要害怕接触你想进入的行业中的人,向他们寻求建议。如果你给 47 个人发了信息,却只得到 2 条回复,不要把它当成一件坏事。每个人都有和你一样复杂有趣的生活。
LinkedIn 是人们寻找雇员时最先去的地方之一。如果你想要一个角色,准备好你的角色。
其他选项
写作不是你的事?上镜更好?制作一个分享你最新项目的视频,在 LinkedIn 上分享。
学到了一个你认为对别人知道会有帮助的新东西?为他人创建 YouTube 教程。
互联网给了我们很多展示自己作品的方式。找到最适合你的唯一方法就是尝试几个,看看哪些能坚持下来。
4.渴望学习
这与适应性密切相关。如果你不渴望学习,你就无法适应。
技术每天都在进步。上个月最先进的技术下个月就不会是最先进的了。
“你对实习生有什么要求?”我问。
“他们多么快地抛弃旧方法,去学习新的更好的东西。”
你曾经尝试过和一个无论如何都是对的人对话吗?
一点都不好玩。
不断学习意味着最终你会错。错了也没什么不好。唯一错误的时候是当你不接受自己的错误并继续前进的时候。相反,你陷入了旧的做事方式。
我刚开始的时候很难接受这一点。我以为我什么都能做。我觉得应该很容易。不对。
学习新东西很难。接受总会有新的东西要学并不会让它变得更容易,这意味着没有惊喜。
下一步是什么?
你有技能,你能像嗜热生物一样适应,你比大多数美术馆更好地展示了你的作品,你比拥有第一台 iPad 的 8 岁孩子更渴望学习。
很好,但是你现在做什么?
申请。工作。等等。重复一遍。
展示你的工作可能会带来机会,但很可能你自己也要做很多拓展工作。通过职业页面的传统申请是一个很好的起点。在这里之后,如果你真的想脱颖而出,试着写一篇关于这个角色的文章。把它和你的申请一起寄出去。或者做个网站。
whycompanyXshouldhireyourname.com
要有创意。你不仅仅是一页简历。
你已经申请好了。没人在看你的文章。你没有收到任何回复。已经三周了。所有的希望都破灭了。
没那么快。
该工作了。是时候搞清楚自己哪里出了问题了。评估一下你从哪里来。什么有用,什么没用?
也许你缺少的是耐心。找角色很难。你应该像开始一段新的感情一样小心对待它。
不是每个你邀请的人都会乐意和你约会,申请角色也是一样。
继续申请。不断学习。
这些真的有用吗?
作为一名崭露头角的数据科学家,您正在寻找利用自己的技能来帮助理解世界的方法。你开始了一个新项目,但你只有一个样本大小。你做的第一件事是什么?
“寻找更多的样本。”
答对了。
你刚刚读了这篇文章。它给了你一些东西去思考。他们是最好的吗?
我无法回答这个问题。但我可以给你其他地方看看。昨天我发现了一篇文章,它与这篇文章中的一半内容相矛盾。
互联网给了我们获取大量信息的途径,你可以将所有这些信息与你自己的意识形态混合到你自己独特的系统中。
我在这里收集的建议来自 realestate.com.au 的首席数据科学家。他们的目标是为对房产感兴趣的人找到最好的房产和代理。你申请的公司可能有不同的目标,因此对如何招聘有不同的看法。
有一点是肯定的,找角色很难。没有固定的路径。
我们在讨论中没有提到它,但是我想用我自己的观点来结束。
5.信心
不管你想扮演什么角色,努力去做吧。申请再申请。如果没有适合你的角色,那就自己创造。
你比你想象的更有能力。
如果你像我一样更喜欢视觉学习,我的 YouTube 频道上有这篇文章的视频版本。还有更多记录我进入数据世界的视频。
最初发表于mrdbourke.com**。**
需要警惕的 4 种机器学习趋势
IT 界对机器学习(ML)及其改变后代与世界互动方式的潜力怎么看都不够。有了这项技术,自动驾驶汽车已经从理论变成了现实,距离在开放的道路上被广泛接受还不到十年。ML 还有其他有价值的应用,如通过研究和应对一些最常见的欺诈活动来实现先进的欺诈检测技术,以及通过网络安全软件帮助阻止网络钓鱼欺诈的电子邮件过滤能力。
对于这项技术来说,天空是无限的,这项技术可能很快会以更先进的认知学习应用和推荐引擎的个性化功能的形式让我们的生活变得更轻松。WorkFusion 提供了一系列智能自动化软件,帮助公司监控即将到来的威胁,自动化琐碎的任务并节省管理费用。
这里有四种机器学习趋势,可能在不久的将来成为现实:
1)云上的智能
算法可以帮助公司挖掘对其业务的洞察力,但这种主张可能成本高昂,不能保证底线的增加。公司经常不得不收集数据,雇用数据科学家,并培训他们处理不断变化的数据库。现在更多的数据指标变得可用,存储数据的成本正在下降,这要归功于云。不再需要管理基础设施,因为随着运营规模的增加,云系统可以生成新的模型,同时提供更准确的结果。越来越多的开源 ML 框架加入进来,获得预先训练的平台,可以标记图像,推荐产品和执行自然语言处理任务。
2)量子计算能力
ML 可以帮助公司处理的一些任务是对高维空间中的大量向量进行操纵和分类。目前的算法需要大量的时间来解决这些问题,使公司花费更多的时间来完成他们的业务流程。量子计算机很快就会风靡一时,因为它们可以在很短的时间内处理高维向量。与传统算法相比,这些算法能够在更短的时间内增加处理的向量和维数。
3)改进的个性化
零售商已经在开发推荐引擎方面掀起了波澜,这些引擎能够更准确地触及他们的目标受众。更进一步,ML 将能够以更精确的方式改进这些引擎的个性化技术。这项技术将提供更具体的数据,然后他们可以在广告上使用这些数据来改善消费者的购物体验。
4)数据上的数据
随着可用数据量的增加,存储这些数据的成本也以大致相同的速度下降。ML 在生成最高质量的数据方面具有巨大的潜力,这将导致更好的模型、改进的用户体验和更多的数据,这些数据有助于重复但改进这个循环。特斯拉等公司每小时都会添加一百万英里的驾驶数据,以增强其自动驾驶能力。随着该公司收集更多关于自动驾驶技术可能存在的缺陷的数据,其自动驾驶功能会从这些数据中学习并改进推动这些自动驾驶车辆前进的软件。
WorkFusion 有一个机器人流程自动化(RPA) 套件,可以帮助公司积累更多关于其业务流程的数据,产生支持解决方案的方法。
4 个月的机器和深度学习
这不是火箭科学。是线性代数。
(2017 年 8 月更新) 我不干了。我学习了。我是一名数据工程师。
“数据工程师”这个头衔很奇怪,就像所有数据科学头衔一样,因为它非常依赖于公司、公司规模、行业等。更重要的是你的角色/工作描述。
在Format.com,我将是他们的第一个“正式”数据工程师,我的角色无所不包。我将接管公司所有与数据相关的事务。这包括数据分析基础设施/管道(ETL/ELT、数据完整性、分析工具),创建一个更加自助的报告、数据驱动的公司,并应用机器和深度学习来增强我们的洞察力,为我们的客户构建出色的新功能。
我还有很多更深层次的东西要学,但坐在教室里不学无术不是我的风格。别担心,我会让你了解我的教育历程,同时,继续阅读下面的内容…
(我做了什么)和(我是如何做的)
我不会用太多的细节来烦你,我会把你发送到我最初的中型帖子这里和我的后续 LinkedIn 帖子这里。
TLDR:我辞职了。我学习了。现在我需要一份工作。
现在你对事情了如指掌,让我告诉你剩下的。我没有完全按照我原来的学习计划,这是一个 4 个月的旅程,现在充满了额外的学习被挤了进来。由于我即将完成这个职业生活项目,我想更新一下。
让我首先与你分享我的“最终”时间表,然后我将讨论它背后的变化和推理,最后是一点初学者的建议。
BTW:副标题——这不是火箭科学。是线性代数。—绝不意味着机器或深度学习是容易的。
我的时间表
在这一点上,我现在是全职学习,每天大概学习 10-14 个小时。我保持了一个像工作一样的日程安排,安排健身房和午休时间。大部分时间是在工作日,有时会在凌晨 1 点或 2 点睡觉,但也有几天我什么也没做。有时候是因为我太懒了(夏天来了!)其他时候是因为倦怠。
提醒一下,我的背景是这样的——教育方面——我有一个软件工程学位和一个 Udacity 数据分析师纳米学位 。以及作为开发人员和分析师的工作经验。
第一个月
第二个月
- 深度学习—第一部分(已完成)
- 从零开始构建深度学习盒子(阅读我的经验)
- MNIST 对抗性挑战(使用 500px 面试项目作为练习)
- 使用 Python 的数据科学家,职业轨迹:数据营(已开始)
- 分享经验:中等
- 参加当地研讨会(人工智能讲座和小组讨论)
第三个月
- 深度学习—第 2 部分(开始+暂停)
- 使用 Python 的数据科学家,职业轨迹:数据营(已完成)
- 吴恩达的机器学习:Coursera(已完成)
- 分享经验:中等
- 更多的本地工作室(deeplearning .:tensor flow 和 Kubernetes)
第 4 个月
- 深度学习,第 2 部分(已开始)
- 顶点:构建和部署端到端深度学习产品(已开始)
- 分享经验:中等
杂项
- 需要注意的是,每个课程或项目都有大量的阅读材料——博客文章、斯坦福大学在线 CNN 课程、学术论文等——和往常一样,你会收获你所投入的。我已经做了大量的“额外”阅读,但当然也有我略读或个人没有兴趣了解更多的领域。
- 我现在在读 4 个月左右(7 月中旬实际上是 3.5 个月,我提前了),但这不会是整整一个月的学习,因为我计划很快开始找工作。
细节
我对我最初的计划做了三个主要的改变:
- 使用 Python 的数据科学家(数据营)
- 吴恩达的机器学习 (Coursera)
- 顶点项目(端到端深度学习项目)
在最初开始深度学习第二部分后,我决定参加 DataCamp 的数据科学家与 Python。稍微思考一下事情的实际方面,当前的角色并没有被划分为只有深度学习和只有“经典”机器学习。因此,尽管拥有实际的深度学习经验很棒,但在采访中说我不知道 kNN 和 k-means 算法之间的区别会令人尴尬。
此外,虽然快速人工智能项目是用 Python 教授的,但它不是在教授 Python,而 DataCamp 职业生涯跟踪课程有许多 Python 特定的课程以及数据挖掘和操作。
鉴于我已经完成了 Udacity 的数据分析师课程,我发现 DataCamp 项目基本上是一种复习(有一些新的技巧和诀窍),但这正是我所需要的。
一个好的总结应该是这样的:
- data camp 项目深度潜水较少,但涵盖的主题广泛。您可以亲自动手编写 Python 代码,这非常棒!
- uda city 计划给出了每个机器学习算法的更多细节,如何使用它们,并有优秀的大规模项目。
斯坦福大学的机器学习(Machine Learning)由吴恩达在 Coursera 上讲授,这可能是互联网上最著名的机器学习课程。这也是我想尝试一下的主要原因。还有,听朋友说这是个很棒的课程。
我参加这个课程的目的是在自己身上练习一些强化学习。尽管在我开始学习时,我已经参加了 Udacity 和 DataCamp 课程,这两个课程都涉及机器学习——从不同的角度来看,我认为向该领域最优秀的人学习肯定不会有什么坏处。
这门课程非常有趣,寓教于乐,富有挑战性。像其他事情一样,有些部分我完全理解,而其他部分我仍然不是 100%清楚。
我不认为八度音阶对我来说在任何新的角色中都是非常有用的,但是对于一些任务来说并不难。虽然这门课程是一次很好的经历,但我相信 Udacity 的数据分析师 nanodegree 更有实际用途。
我想,帮助我圆满完成旅程的最后一件事是顶点端到端深度学习项目。数据科学或机器/深度学习不仅仅是理论、算法、研究和发表论文!对我来说,我一直想做产品,做实施者,做东西。
在我的顶点项目中,我将定义一个问题,潜在的解决方案,源数据,建立和测试模型,生产模型,实现一个 API,UI 前端,并部署到“生产”。本质上,我要建立一个端到端的深度学习管道,从而产生一个活的产品
…或者至少,这是我的计划。
我对初学者的建议
开始学习。你也没有好的借口。哪怕是转行。
上几门数学课,但也就那么几门。
补充说明:据我所知,实际的机器和深度学习不涉及手动计算/编码 std、导数、反向传播、kNN 等,甚至不涉及没有库的 Python 尽管我敢肯定一些面试官不这么认为(也就是说不使用 str.split() func 拆分这个字符串,因为在生产中我们不使用库,这将向我们展示如何处理该业务案例。)
但是我跑题了…这并不是说你不需要数学,你当然需要理解术语的含义,如何解释它们,以及如何根据它们的信息来修正模型(或参数)。但是在机器和深度学习的实际实现中,博士并不是必需的:
这不是火箭科学。是线性代数。
但是它建议而不是去做的一件大事是用学习来充实你的时间。做一些实际的动手工作,用真实的数据练习,你会需要它来获得经验和面试,但更重要的是,一旦你开始新的职业生涯,你会需要它来解决现实世界中的问题。
我觉得我已经把我的脸塞满了机器和深度学习的“东西”,总是有新的论文可以阅读或发表的中等文章。调整自己的速度!我很确定我没有。
如果你想知道我会建议你按照什么顺序学习上述所有课程,请参考以下内容:
- 使用 Python 的数据科学家(数据营)
- 数据分析师纳米度(Udacity)
- 吴恩达的机器学习(Coursera)
- 深度学习(快速人工智能)
- 从事个人项目或 Kaggle(在步骤 1-4 期间)
又及:我有一个小小的“阅读清单”,我一直在更新它,试图记录我在学习期间做过的更重要的事情。你可以在我的博客上看到:http://jasonicarter.github.io/deep-learning-reading-list
我的下一步计划
找份工作。我的最后一项当然是回去工作。我会尽可能有选择地做这件事,并不是说我以前没有这样做过,但我认为考虑到这是一次职业转变,回顾一下过程的每个方面会有好处。
到目前为止,我一直在被动地审查公司,调查他们在机器和深度学习领域到底做些什么。一些角色“机器学习工程师”很少进行深度学习,而其他名为“数据工程师”的角色则需要相当多的 CNN 或 NLP 知识,以及像 Docker 和 Apache Spark 这样的东西。
我学到的两件事(或者那是学来的?)到目前为止有:
- 实际上并没有什么“深度学习工程师”的角色,它只是被限制在 ML 的描述中,所以请仔细阅读工作职责部分。
- 数据科学家、数据工程师甚至数据分析师的角色会因公司和工作职责的不同而有很大差异。这可能是企业和初创公司需求的子集。
对我个人来说,基于我的兴趣,我将寻找一个角色,允许我扩展我在深度学习(这本身是一个很大的领域)方面的专业知识,同时仍然使用一些“经典”的机器学习技术。如果他们加入一些 UI 开发工作(概念验证),那就更好了……全栈 ML 工程师有人吗???