文本识别的未来是人工智能
Google 的 Tesseract-OCR 引擎简介
库尔特·卡吉尔的照片
21 世纪是数字化连接的时代。我们不再发送手写信件,也很少使用印刷文本,原因很简单,我们变得过于依赖电脑来处理数据,让生活变得更轻松。这些原因使我们需要找到一种方法来数字化纸质文件,使其能够被电子编辑、操作、搜索、管理、存储,特别是由机器来解释。
光学字符识别使得将打印、手写或印刷文本图像中捕获的文本转换成数字化和可用的机器编码文本成为可能。
光学字符识别是人工智能和计算机视觉的研究领域,包括从图像中提取文本。
今天,由于使用了人工智能工具,OCR 正在经历一场前所未有的革命。OCR 不仅成为传统的图像到文本的转换过程,而且成为人为错误的检查器。
OCR 工具可以将图像中捕获的文本转换成计算机可用的文本。
我们将在本文中讨论的工具是宇宙魔方。
宇宙魔方的标志
宇宙魔方:改变我们认知光学字符识别方式的研究项目
Tesseract 是一个用 C 和 C++编写的开源 OCR 引擎,最初是在 1984 年到 1994 年间由 HP 开发的。Tesseract 最初是布里斯托尔惠普实验室的一个博士研究项目,是惠普扫描仪的一个可能的软件/硬件附件。当时的商业 OCR 引擎很弱,无法达到令人满意的准确度。1995 年,就字符准确性而言,Tesseract 是 OCR 引擎的前三名。该引擎随后被送往 UNLV 进行 1995 年的 OCR 准确性年度测试,在测试中,它证明了自己与当时的商用引擎相比的价值。2005 年末,惠普发布了开源的宇宙魔方。现在在 http://code.google.com/p/tesseract-ocr 的可以买到。
2006 年,Google 开始赞助和维护这个工具,并发布了具有不同架构和 100 多种语言支持的 Tesseract 更新版本。
宇宙魔方的 4.0 版本使用了基于 LSTMs 的神经网络系统,然后惊人地提高了它的准确性。它接受了 123 种语言的训练,这使得宇宙魔方成为一个伟大的工具,也是人工智能如何从事文本识别研究的一个很好的例子。
现在让我们进行一些练习,学习如何使用 Python 中的 Tesseract 系统来执行光学字符识别!
为了通过 Python 编程语言访问 Tesseract,我们使用 Python-tesseract 包。Python-tesseract 是 Google 的 Tesseract-OCR 引擎的包装器,并提供了 tesseract 系统二进制文件的接口。
让我们从导入 Python-tesseract 包开始。
import pytesseract
我们导入 Python 图像库 ( PIL )来处理我们想要应用 OCR 的图像。
图像模块是必需的,以便我们可以加载我们的 PIL 格式的图像。Pytesseract 需要这种格式。
import PIL
from PIL import Image
我们使用 PIL 加载我们的图像。Image.open 函数
image=Image.open(‘tesseract.JPG’)
让我们展示我们的形象
display(image)
谷歌搜索宇宙魔方的截图
现在我们可以使用 pytesseract.image _ to _ string 函数对我们的图像应用 OCR。该函数将图像上运行的 Tesseract OCR 的结果返回到 string。
text=pytesseract.image_to_string(image)
让我们打印文本变量以查看 OCR 的结果
print(text)
使用 Tesseract 从图像中提取文本的结果
我们可以看到我们获得了完美的结果。pytesseract.image_to_string 函数准确提取图像中捕获的文本。
我们应用 OCR 的图像很清晰,但不幸的是,现实生活中的情况远非完美,图像通常有噪声,这使得前景文本与背景的清晰分离成为一个真正的挑战。
让我们试着在嘈杂的图像上运行宇宙魔方。
我们将提取此图像中捕获的文本作为示例:
我们以同样的方式处理。我们加载我们的图像作为一个 PIL。Image 对象并将其传递给 pytesseract.image_to_string 函数以从中提取文本。
您可以看到该函数返回了一个空字符串,因为它没有成功地从图像中提取文本。
然后我们需要预处理我们的图像!
在这里,我将建议 3 种方法,你可以用来改善有噪声的图像的镶嵌性能。这些技巧并不简单,它们高度依赖于图像中的内容。
第一种方法:将图像转换为灰度
在灰度图像中,每个像素的值是仅代表光量的单个样本。灰度图像可以是测量每个像素的光强度的结果。
灰度图像中的像素可以是 0 到 255 之间的任何值。然后图像由 256 个灰度组成。
要将 PIL 图像转换为灰度图像,我们使用:
gray= image.convert(‘L’)
PIL。Image.convert 方法返回图像的转换副本。
让我们保存这个副本:
gray.save(‘gray.jpg’)
现在让我们加载并显示它,看看灰度图像是什么样的:
grayscale_image=Image.open(‘gray.jpg’)
display(grayscale_image)
灰度图像看起来像黑白图像,但它们是不同的。一位双色调黑白图像是只有两种颜色的图像:黑色和白色。灰度图像之间有许多灰色阴影。
现在让我们在图像的灰度版本上运行 Tesseract。
text=pytesseract.image_to_string(grayscale_image)
print(text)
我们得到的结果是:
我们可以看到,对图像进行灰度化可以提高镶嵌的性能。
第二种方法:图像二值化
在这种方法中,我们将通过二值化从图像中提取文本。
图像二值化是拍摄图像并将其转换为黑白图像的过程,然后将图像的灰度版本中包含的信息从 256 种灰度减少到 2 种:黑白,即 二值 图像。
我们可以使用以下方法将图像二值化:
binary= image2.convert(‘1’)
这将制作图像的二进制副本,并将其存储在二进制 PIL 中。图像对象。
我们保存副本,加载并显示它:
binary.save('binary.jpg')
binary_image=Image.open(‘binary.jpg’)
display(binary_image)
输出图像
现在,让我们运行它的宇宙魔方:
哼,结果看起来不像我们预期的那样。为什么以及如何改进我们的二值化?
二值化过程通过选择一个 阈值 来进行。在图像的灰度版本中,小于所选阈值的像素被设置为 0(黑色),大于阈值的像素被设置为 255(白色)。
我们获得的结果可能是由于阈值的错误值,因为我们使用了默认的二值化函数。让我们构建我们自己的函数,一个传递图像和阈值的函数,它使用选择的阈值返回二值化的结果。
def binarize(image,threshold):
binary_image=image.convert(“L”)
for x in range(binary_image.width):
for y in range(binary_image.height):
if obinary_image.getpixel((x,y))< threshold:
binary_image.putpixel( (x,y), 0 )
else:
binary_image.putpixel( (x,y), 255 )
return output_image
该功能:
1.将图像转换为灰度
2.遍历图像的像素,
3.将像素值与阈值进行比较:如果像素值小于阈值,则将其值更改为 0(黑色),否则更改为 255(白色)。
现在,让我们用不同的阈值运行我们的函数,看看它如何影响 Tesseract 的性能:
Threshold= 0: 我们获得了白色图像,因为灰度图像中的所有像素都包含在 0 到 255 之间。宇宙魔方然后无法检测任何文本。
Threshold= 64: 我们获得了一个只有文字可见的清晰图像。我们的函数从图像中移除了噪声背景,这使得 Tesseract 更容易从图像中提取文本。
Threshold= 192: 我们的函数覆盖了文本的一部分,对图像运行的 OCR 返回了一个空字符串。
Threshold= 256: 我们获得了黑色图像,因为灰度图像中的所有像素都包含在 0 到 255 之间。宇宙魔方然后无法检测任何文本。
第三种方法:调整图像大小
有时,一个糟糕的宇宙魔方的性能可能是由于图像的大小。检测大图像或小图像中的文本有时会很困难。PIL 有一个特殊的功能,可以通过多种选项和滤镜来帮助您调整图像的大小:
PIL.Image.resize
这个函数返回这个图像的一个调整过大小的副本。
它需要两个参数:
- size :以像素为单位的请求大小,作为一个二元组:(宽度,高度)。
- **重采样:**一个可选的重采样过滤器。这可以是
**PIL.Image.NEAREST**
(使用最近邻)、**PIL.Image.BILINEAR**
(线性插值)、**PIL.Image.BICUBIC**
(三次样条插值)或**PIL.Image.LANCZOS**
(高质量下采样过滤器)之一。如果省略,或者如果图像具有模式“1”或“P”,则设置**PIL.Image.NEAREST**
。
总结
在本文中,您了解了 Google 的 Tesseract-OCR 引擎,它是如何开始的,以及它如何使文本识别比以往更加准确。您还学习了如何使用 Python-tesseract 包通过 Python 访问 Tesseract。您还了解了如何对图像应用 OCR,以及如何提高 Tesseract 在有噪声的图像上的性能。既然你已经掌握了所有的基本技能,为什么不构建一个扫描仪移动应用程序,它将图像作为输入,对其运行 OCR,并将结果写入文本文件。这将是你学习宇宙魔方的最大一步!
查看我为教程 做的 Github 库这里 !
视觉推荐系统的未来:四种实用的最新技术
现代 RecSys
visual RecSys 的未来令人振奋。让我们探索一些最前沿的技术和想法,我们可以纳入我们的推荐。
style 2 vec(2017)——结合多个卷积神经网络
Lee,h .,Seol,j .,,Lee,S. (2017 年)。Style2Vec:从风格集中学习时尚物品的表征。从https://arxiv.org/abs/1708.04014开放访问
作者“提出了时尚物品的向量表示模型 Style2Vec。基于单词嵌入中使用的分布语义的直觉,Style2Vec 使用匹配服装中的其他项目作为上下文来学习时尚项目的表示。训练两个不同的卷积神经网络,以最大化项目共现的概率”(Lee et al .,2017)。
论文很短,但想法很吸引人。使用两个 CNN 模型,其中一个为目标图像生成嵌入**,而另一个为相似上下文项目生成嵌入,这是从 Word2Vec 派生的技术对图像的新颖应用。如果我们看看上面的图片,例如(a)我们有粉色裙子 — 黑色裙子+ 黑色夹克 = 粉色夹克。值得注意的是,我们添加/减去了通常不表示为产品属性的特征,例如示例©中的漏洞。因此,Style2Vec 允许我们以不同的方式组合/选择样式。**
David Nepož itek 实施了 Style2Vec 论文中提出的想法,并在 Github 上开源了代码。从他的报告中得到的结果令人印象深刻,正如你从上图中看到的,他成功地将颜色、图案和形状相似的物品分组。我们可以利用这样的结果,根据用户的喜好生成整套服装和系列。
带 GAN 的生成式图像模型(2017)
康维成,方志成,王志忠,麦考利(2017)。视觉感知的时尚推荐和生成图像模型设计。从https://arxiv.org/abs/1711.02231|代码打开访问
作者使用了生成对抗网络(GAN) ,“一种无监督的学习框架,其中两个组件‘竞争’以生成看起来真实的输出…一个组件(生成器)被训练来生成图像,而另一个组件(鉴别器)被训练来区分真实图像和生成的图像。因此,生成的图像经过训练,在某种意义上看起来“逼真”,与数据集中的图像无法区分”(Kang et al .,2017)。
GAN 允许我们为我们的用户生成理想的产品,即使它不存在于产品目录中。上面的图像是输出。左边是真实的图像,右边是生成的图像,我们可以看到右边的图像通常有更高的偏好得分。有两种生成理想产品的用例。
首先,甘帮助我们建立了对用户喜好的认知并用图像具体地表现了这种认知。我们可以利用类似 CNN +最近邻居的技术来选择视觉上最接近理想状态的物品。
此外,甘协助产品采购和设计。如果我们知道带有紫色条纹的绿色衬衫是理想产品中的一种增长趋势,我们可以在客户向我们提出之前引入/创造这样的产品来满足市场需求。即使绿色带紫色条纹的衬衫并不完全是客户现在想要的,但甘让我们能够对市场需求和变化采取主动,而不是被动。
带评论生成的可解释服装推荐(2019)
林,杨,任,陈,任,马,李,等(2019)。具有联合服装匹配和评论生成的可解释服装推荐。从https://arxiv.org/abs/1806.08977v3|代码打开访问
作者“提出了一种新的神经网络框架,神经装备推荐(NOR),它同时提供装备推荐和生成抽象评论。NOR 由两部分组成:服装搭配和评论生成。对于服装匹配,我们提出了一种具有相互注意机制的卷积神经网络来提取视觉特征……对于抽象评论生成,我们提出了一种具有跨通道注意机制的门控递归神经网络,来将视觉特征转换为简洁的句子”。
基于 CNN 的 RecSys 功能强大,但是很难解释输出。已经有单独的尝试,由乌特库·奥兹布拉克可视化 CNN 渐变, 生成多纳休、j .等人的图像评论。然而,将这两种技术结合起来并将其应用到 RecSys 的环境中并不容易。如果我们看看上面的合成图,我们会发现这是理解这些建议的第一步,其中**“很棒的牛仔装”、“喜欢红白相间”是解释为什么推荐这些服装的好例子。但在最后一排的反面案例中,我们可以看到评论生成本身并不完美**;有时它描述的东西在图像中找不到,或者完全脱离了上下文。请注意,作者使用社区驱动的社交商务网站Polyvore 的数据构建了评论生成模型。
**尽管如此,可解释的人工智能(XAI)是理解、评估和在生产中部署深度学习解决方案的关键部分。**为了获得更多关于 XAI 的信息,菲菲收集了令人印象深刻的 XAI 资料。
私人个性化 RecSys (2020)
越来越多的 RecSys 被部署在隐私敏感领域,如医疗、教育和金融。我们想要个性化医疗保健/教育/金融计划的好处,但同时,对放弃我们的数据,然后将它们丢失给黑客的恐惧是真实的。这似乎有些矛盾— 我们如何在维护用户隐私的同时构建个性化的 RecSys?
早在 2009 年,微软研究院的 McSherry & Mironov 在他们的论文中用一个简单的想法探索了这个问题。本质上,我们可以按照ε-差分隐私 (这背后的实际数学是非平凡的)给条目评分和条目-条目协方差矩阵添加噪声。换句话说:
- 我们屏蔽掉任何特定用户的识别特征(用户 A 在每个月的第一个星期一购买粉色衬衫)。
- 获取大趋势(用户的 X 部分喜欢购买粉色衬衫)
- 隐私损失在数学上被证明受因子ε的限制。
- 虽然在设计 RecSys 时,差分隐私是一种用于衡量内部风险的有用指标,但向用户解释起来并不直观,也不能保证数据是安全的。
Ribero 等人(2020 年)的一篇新论文扩展了这个想法,使用不同的私有原型联合推荐。联合学习是分布式机器学习的一种现代方法。
- 我们不是在中央服务器上训练大规模的模型,而是将小的(兆字节大小的)模型发送到用户的设备上。
- 在设备空闲期间,模型通过其数据在用户设备上进行训练。
- 我们只把 的训练结果发回到一个集中的服务器。
你可以看到谷歌漫画对这一过程的图解。通过结合差分隐私和联合学习,Ribero 等人提出了一种新的方法来解决私有、个性化 RecSys 的问题。
“大多数联合学习方法需要实体和中央服务器之间的多轮通信,这给不同的隐私要求带来了问题。具体来说,我们可以将从实体到服务器的每一轮通信视为发送到各个实体的查询,这有可能会泄漏信息……(因此)我们将通信限制为来回两轮(Ribero 等人,2020)。
当然,这是一个具有挑战性的问题。为了将轮次减少到只有两轮,该团队需要想出一种新颖的方法来压缩数据,然后以可访问的形式保存。他们将这些数据结构命名为“原型”:
这些原型被设计成:a)包含与 Xh 相似的信息,从而允许构建精确的项目表示;b)相对于 Xh 是低维度的,因此最小化通信负载;以及 c)相对于单个用户保持不同的隐私。
这份文件是一个具有挑战性的阅读一个迅速发展和重要的主题。如果你有兴趣了解更多关于联邦学习和差异策略的知识, lee-man 正在他们的 Github 帖子上收集一系列阅读材料、工具和代码。
进一步阅读
Visual RecSys 是一个令人兴奋的领域,希望您喜欢我们今天讨论的各种技术。有关 RecSys 的更多前沿内容,您可以探索
- ACM RecSys 上的收藏和他们的 YouTube 频道是 RecSys 世界里最大的事件。
- Spotify 的工程博客令人印象深刻。查看他们最近关于个性化的帖子。
- 网飞的科技博客当然是另一个很好的读物,它涵盖了许多现实世界的部署和可伸缩性挑战。
- Zalando 是一家拥有强大研究团队的电子商务公司。他们的出版物值得一读。
- Recombee 提供推荐即服务,有一个很好的媒体博客,报道他们公司使用的技术。
银河岛假说
新的研究为费米悖论提供了一个定量的解决方案
模拟的定居轨迹,展示了文明如何在银河系中传播
与银河系的年龄相比,我们 20 万岁的人类物种只存在了一眨眼的时间。银河系至少有 100 亿年的历史,可能包含超过 2000 亿颗恒星。2013 年,开普勒太空望远镜(Kepler space telescope)的数据显示,大约五分之一的类太阳恒星包含一颗可居住的行星,既不太热也不太冷,不适合生命存在。如果 10%的恒星是类太阳的,这意味着在我们的银河系中可能有大约40 亿颗类地行星。如果生命起源于地球,那么它肯定也起源于那 40 亿个世界中的一些:
“你就没想过大家都去哪儿了吗?”
这是恩利克·费密在 1950 年与科学家们共进午餐时提出的著名问题。费米悖论意识到我们的星系应该充满生命,然而迄今为止我们遇到的唯一文明是我们自己。
费米悖论的解决方案
自从它首次提出以来,人们已经提出了许多解决这一悖论的方法。
这是一个技术上的争论:也许,这个争论是这样的,文明只是不知道如何进行星际旅行。以比邻星为例,它是我们最近的恒星邻居,目前距离我们 4.24 光年。即使以旅行者 1 号的速度,我们迄今为止最快的太空飞船,我们仍然需要大约 80,000 年才能到达那里。如果由于物理或经济的原因,文明不能发展出比这更快的技术,星际旅行可能根本不可行。
其他人认为外星文明存在,但只是对星际探索不感兴趣,或者他们已经发现了我们,但决定离开我们,这样不会破坏我们的生态系统。然后是“大过滤器”的想法:在一个文明从单细胞生物进化到多星球物种的过程中,也许有一个进化步骤极其难以实现,因此起到了过滤器的作用。例如,过滤器可能会自毁。所有的文明都有可能在达到星际旅行的技术水平之前最终自毁。郁闷。
请注意,这两个都不是量化的陈述,这使得很难得出任何结论。如果我们想对费米悖论做一个量化的陈述,也许计算机模拟是一个更好的方法。
银河岛假说
智能文明将如何在银河系中传播?为了回答这个问题,首先我们需要考虑恒星运动。我们银河系中的恒星由于引力而不断运动。这种运动非常复杂,看起来几乎是随机的。这是欧空局对此效果的模拟:
星系中恒星运动的模拟(欧空局)
由于恒星的运动,我们的恒星邻居不断变化。如前所述,我们最近的恒星邻居是比邻星,距离我们超过 4 光年。然而,一万年后它将离我们只有 3.5 光年。再过 3 万年,我们将有一个新的最近的邻居:罗斯 248,一颗红矮星,距离我们只有 3 光年。在不同的时期,不同的文明可能会建立不同的星系。
这就是研究者 Jonathan Carroll-Nellenback 及其合作者基于代理的模拟的用武之地。他们从有人居住的行星的初始“种子”分布开始,然后模拟了随后 1000 万年间“定居前沿”的轨迹:如果包含可居住行星的邻近恒星系统在现有文明的 10 光年范围内,那么该文明将向新的恒星系统发送探测器,并对其进行殖民。上面显示的封面图像是模拟结果的可视化,其中点代表可居住的恒星系统,线代表定居轨迹。
研究人员从模拟中学到了什么?嗯,这取决于参数。在一个极端,通过减少可居住行星的数量,将文明的寿命缩短到 10 万年以下,很容易产生一个“空”星系。在另一个极端,有可能调整参数,使整个星系充满了定居点。即使使用他们认为最慢的星际探测器,移动速度大约是旅行者 1 号的两倍,这样的“完全”殖民也将在不到 10 亿年的时间内实现。
但更有趣的问题是,这个星系究竟会被“填满”到什么程度。这让我们想到了“银河岛”的假设:银河系中会不会有一些孤独的岛屿,只是因为太过孤立而无法遇到任何访客?
是的,绝对的。例如,如果文明持续了 100 万年,并且如果 3%的恒星系统包含可居住的行星,那么数据显示,至少在过去的 100 万年中,像地球这样的单一行星有大约 10%的概率没有看到任何其他文明的证据。所以,最终,费米悖论可能并不是一个悖论。星系内完全有可能存在孤立的世界,而其他的则被频繁造访。或者,正如研究人员 Caleb Scharf 所说,
“换句话说,我们很有可能会发现自己处于等式的孤独一边。”
这个故事的灵感来自《科学美国人》的一篇文章,作者是 Caleb Scharf。如果你喜欢阅读,你可能也会喜欢这些:
用有限数据预测未来的贝叶斯指南
towardsdatascience.com](/how-to-be-less-wrong-5d6632a08f) [## 智能行为的起源
为什么真正的人工智能需要的不仅仅是模式识别
towardsdatascience.com](/the-origin-of-intelligent-behavior-3d3f2f659dc2)
生命的游戏,约翰·康威的遗产
人生的游戏是什么?人生的游戏有什么意义?已故约翰·康威的遗产。
最近我得知约翰·康威因为新冠肺炎去世了。这是一个非常不幸的情况,让我感到难过的是,我没有机会与一个对数学和从最基本的规则进化而来的复杂性思想做出如此大贡献的人交谈。约翰·康威主要是一名数学家(普林斯顿大学的数学教授),但计算机科学家和人工智能爱好者将永远记住他的生命游戏,即细胞自动机。
为什么《生命的游戏》作为一部细胞自动机如此相关?从一个更哲学的角度来看,生命的游戏向我们展示了复杂性是如何从简单中产生的。我们人类经常会对自己的存在提出疑问。有人可能会说,像我们这样复杂的有机体是某种神圣计划的产物。事实上,一个主宰宇宙的神圣实体的基本论点之一是,一个支持生命并因此支持我们的存在的行星被创造出来是完全不可能的(特别是当考虑智能时)。
因此,我们的存在不能用宇宙中简单的随机过程来解释。如果我们可以证明非常复杂甚至智能的系统可以从基本过程中产生,这就给关于神的计划的整个想法打上了一个问号,不是吗?的确,生活的游戏引发了我们对这些事情的思考。
[1]
事不宜迟,让我们跳进生活的游戏的定义。这很简单。在细胞自动机中,每个细胞最多有 8 个相邻细胞(对角线、垂直和水平)。自动机(像任何其他的一样)从填充的“活”细胞的初始状态开始。因此,自动机的状态由网格上的“活”和“死”单元组成。在每次迭代中,我们选择哪些单元保持“存活”,或者换句话说,填充,以及哪些单元基于某些规则“死亡”。此外,在下一次迭代中,可以产生(“出生”)其他单元。管理此行为的简单规则如下:
- 每一个有 2 或 3 个相邻单元的“活”单元存活到下一次迭代。
- 每个有 4 个邻居的“死”细胞变成“活”细胞,或者换句话说复活(在某种意义上)。
- 其余的都死了。
这些规则与现实生活有着有趣的相似之处。以规则 1 为例。一个细胞能够存活的唯一方式是它有同伴细胞(2 或 3)。少是不够的,这或许与人类的想法非常相似。科学研究表明,社交被认为是幸福生活和长寿的原因。但是,过多的社交可能会杀了你(就像细胞自动机一样)。你可以把它看作是对资源的过度使用。这就是为什么有 3 个以上相邻的“活”细胞太多的原因。不幸的是,我还没有想到一个好的寓言。规则,死细胞复活给定 4 个邻居。
生命的游戏是图灵完全的。意思是任何可以用算法计算的东西(用图灵机计算)都可以用它来计算。你能想象到的任何可能的程序都可以用它来编写。
现在有趣的部分来了,这些简单的规则导致了一些古怪的行为,比如下面的棍子旋转(一个非常简单的例子):
如果我们让模拟变得更复杂一点,在初始状态下增加一些活细胞,那么我们会得到更多的回报:
令人难以置信的是,这三个简单的规则决定了这些有趣形状的形成。通过改变初始化网格的随机种子,可以获得大量不同的行为。
当然,进一步扩展,相互作用变得更加复杂。这让你想知道他们能走多远,有多“复杂”。这些细胞自动机在某种程度上是智能的吗,还是有一些神奇的初始化会让它们按照我们对时间的定义变得“智能”?智力的定义到底是什么?人类级智能的来源是什么,仅仅是智能初始化和应用简单的规则吗?假设细胞自动机是图灵完备的,那么可能性是无限的。
我们需要再次感谢约翰·康威杰出的一生工作和遗产。他可能影响了不同领域的几代科学家(不仅仅是计算机科学和数学)。就在过去的一年里,我有过无数次关于人生游戏的讨论。不是因为我在这个领域进行深入研究,而是因为它在科学界无处不在。它一次又一次地找到了我,将来还会继续找到我。
最后,这里有一些我编写的实现的例子,请欣赏。
参考文献
[1]照片取自 Pixabay
[2] Python 实现:【https://github.com/jimimvp/game-of-life】T4
艾赢的比赛
以及它们所代表的进步
AI 做的一些任务,其实并不令人印象深刻。想象一下你的相机对照片中的人脸进行识别和自动对焦。这项技术从 2001 年就已经存在了,它并没有让人们感到兴奋。为什么不呢?因为你也可以这么做,所以你可以很容易地把目光集中在某人的脸上。事实上,它太简单了,你甚至不知道你是怎么做到的。如果人工智能也能做到,那么谁会在乎它是如何工作的呢?虽然我们可能无法明确理解这个人工智能是如何工作的,但它的底层机制不会做任何我们不能做的事情。至少,这是我认为大多数人的想法。
游戏正好相反。与其说游戏是我们与生俱来的能力(比如聚焦你的视觉),不如说你理解如何以及为什么在游戏中做出决定。因此,当人工智能决定如何玩游戏时,它们会更有趣,因为你可能处于与人工智能相同的情况下,做出完全相同的决定。人工智能被普遍认为是取代人类工作的东西。当人工智能玩游戏时,它感觉最接近我们在世界中的位置,因为游戏是我们必须有意识地思考的事情。人工智能玩的游戏因此引起了新闻的兴趣,这里是它赢得的最重要的胜利。
1996-1997 年卡斯帕罗夫诉深蓝
1996 年 2 月 10 日,IBM 的“深蓝”与加里·卡斯帕罗夫(Gary Kasparov)对决,成为第一个在正常情况下(即有时钟的情况下)击败当前国际象棋世界冠军的计算机程序。不幸的是,在剩下的五场比赛中,深蓝输了三局,平了两局。
第二场比赛定于明年举行,深蓝的团队对他们的软件进行了升级。5 月 3 日,深蓝以亏损开盘。在第二场比赛中,深蓝很难计算该做什么,为了防止自己浪费太多时间,它采取了随机移动。这一举动很糟糕,但这让卡斯帕罗夫感到困惑,他认为深蓝能比他更好地预见游戏的未来。为了不让自己在数百万人面前输掉比赛,他放弃了第二局(这在国际象棋中很常见)。事实上,如果卡斯帕罗夫打完第二场比赛,他本可以赢得第二场比赛,这对他来说是一个小小的尴尬,这导致他在接下来的比赛中更加肆无忌惮,最终深蓝赢了 2 局,卡斯帕罗夫赢了 1 局,平了 3 局。
正如 ESPN 记者 Jeremy Schaap 所说,“全世界的人都在关注这件事,有些人对国际象棋不感兴趣,有些人只对人机大战感兴趣。”卡斯帕罗夫在第二场比赛结束时声称 IBM 作弊,这引发了人们对这场比赛的兴趣,他的依据是深蓝在第一场和第二场比赛中的比赛质量差异。自 6 世纪发明以来,国际象棋一直是智力的晴雨表。认为人类会被计算机打败会令人沮丧,因为计算机在许多方面不如人类。当然,IBM 没有作弊,深蓝的质量变化归因于它的随机行动。
IBM 的公共关系团队为这一事件推波助澜,该公司的股票大幅上涨。胜券在握之际,IBM 拒绝了复赛,随后解散了深蓝,并把它的最后安息地定在了山景城的计算机历史博物馆。
卡斯帕罗夫不再相信“深蓝”在作弊,并且认识到不仅“深蓝”打败了他,甚至“深蓝”本身也能被运行在较小计算机上的新程序打败。这个游戏是人工智能对人类智能的叙述中的一大步,它将游戏确立为一种比较的方法。
2011 年 IBM 沃森赢得了危险!
在一起吃午餐时,两位 IBM 高管开始在*的《危险边缘》节目中评论肯·詹宁斯的成功!*谁仍然保持着连续最多比赛获胜的记录。也许是因为渴望在深蓝获胜后获得成功,他们创造了沃森,一个旨在击败肯·詹宁斯的问答系统。
沃森以 IBM 创始人托马斯·J·沃森的名字命名,创建于 2005 年,但直到 2011 年才开始其著名的亮相。沃森和肯·詹宁斯一起对抗布拉德·鲁特,他们被认为是两个最好的【T4 危险边缘】!当时的玩家。肯是一个上过一些人工智能课的程序员,他接受了挑战,部分原因是他认为人工智能系统不可能打败他。
肯·詹宁斯、沃森和布拉德·鲁特
沃森赢得了与布拉德和肯的两场比赛,分别赢得了 77,147 美元和 24,000 美元和 21,600 美元。沃森接着击败了两名国会议员,小拉什·d·霍尔德(前危险边缘!(参赛者)和比尔卡西迪,又一次两党的失败。
与深蓝不同,沃森被 IBM 分拆成许多商业产品,包括沃森文本到语音、沃森语音到文本、沃森自然语言分类器、沃森自然语言理解、沃森助手和沃森健康等。
2013 年 DeepMind 击败雅达利
虽然沃森是为特定目的而设计的,但 DeepMind Technologies 希望创建一个不需要在狭窄领域进行训练的人工智能系统,让我们更接近通用人工智能的定义。他们开始追求的目标是用一个没有为任何特定游戏重新设计的模型击败许多雅达利游戏。
DeepMind 学习突围的最佳策略
仅使用屏幕上的输入内容,并被告知最大化分数,DeepMind 能够击败每一场游戏,并获得甚至比最优秀的人类玩家更好的分数。在 2013 年的论文中,用深度强化学习玩雅达利导致谷歌在 2014 年收购了他们。
2016 AlphaGo v. Lee Sedol
深蓝的优势在于它有能力一次处理大量的移动,并有一个聪明的方法来评估哪一个是最好的。对于亚洲围棋来说,这是不可能的。游戏的规则很简单,但是游戏在任何时候都有大约 2 * 10 个⁷⁰和 T3 个状态。作为参考,这个数字大于宇宙中的原子数量。因此,围棋博弈中的策略很难定义,因为对于每个状态,都有许多决策需要评估,每个决策都会导致更多的状态需要评估。由于没有蛮力方法起作用,DeepMind 的 AlphaGo 学会了给未来几个时期赋予价值,然后学会了基于该价值做出决策。
在击败欧洲围棋冠军范辉后,AlphaGo 的任务是与有史以来排名最高的棋手之一 Lee Sedol 对弈。击败李促使他退休,说即使我成为第一,也有一个实体不能被打败
2017 AlphaZero 大师赛国际象棋、围棋和松木
AlphaZero 是 AlphaGo 的一般化版本,旨在赢得国际象棋、围棋和 Shogi(日本版国际象棋)。AlphaZero 不仅打败了 AlphaGo,而且是通过与自己进行模拟游戏来完成的,没有专家游戏的例子可以看。在这些模拟开始时,它什么都不知道。经过 9 个小时的训练,它掌握了国际象棋,2 小时后掌握了日本象棋,34 小时后掌握了围棋。
虽然这对于谷歌吸引人才非常重要,但人工智能教授乔安娜·布赖森(Joanna Bryson)指出,谷歌因这些成就而获得的荣誉可以在与寻求监管人工智能的政府的谈判中获得巨大优势。
2019 AlphaStar
AlphaZero 随后被转变为 AlphaStar,意在击败即时战略游戏《星际争霸》。2019 年,AlphaStar 在人类玩家中排名前 0.2%。这是人工智能首次超过电子竞技。AlphaStar 在星际争霸中并不完美,但它仍被视为人工智能的一个巨大里程碑,因为它在复杂的规则下,利用部分信息实时工作。尽管围棋面临的决策数量相对复杂,但与围棋相比,围棋的规则却非常简单。AlphaStar 所处的这种更复杂的环境是一个很好的指标,表明人工智能已经准备好用于更广泛的商业用途,如自动驾驶汽车、机器人和供应链。
高斯模型
信封背面关于新冠肺炎感染的草图。
作者照片
首先声明:我不是流行病学家。这些都不是专业的预测;这些是 粗略计算 。我是一个物理学家,你知道我们有多喜欢我们的“ 数量级 ”、“ 球形牛近似法 ”和“ 封底计算 ”。
《纽约时报》上周刊登了一篇关于 哪些国家正在“拉平曲线” 的文章,所以让我们探索一下这些“曲线”的一个简单模型。
选定国家的每日新冠肺炎感染率
感染率数据的一个封底模型
我们将使用最简单的模型:正态或高斯曲线。
正态或高斯曲线
感染开始时呈指数增长,然后无论东道国采取何种应对措施,一段时间后,新感染人数会回到接近零的水平。至少这是信封背面的理论。当然有更好的模型,但我们将使用高斯模型作为第一枪。
高斯模型仅由三个参数定义: N 、 μ 和 σ ,看起来如下:
- N 是感染率的高峰期,疫情的中点。
- μ 是感染率达到峰值的日期,并且
- ∑控制宽度,即国家经历疫情的时间段。
高斯模型参数
在该模型中,在感染高峰前的 2 σ 天,在第μ-2σ天(第 20 天),大约总人数的 2%已经被感染。到高峰前 1 天(第 35 天),大约 16%的最终感染人群已经呈阳性。在第 μ 天,总病例的 50%被感染。
在某一天,曲线下的面积分数=累计病例数除以疫情结束时的总病例数。
使用模型
让我们首先在那些似乎已经度过感染高峰并正在复苏的国家尝试这个模型:中国和韩国。
我们可以从欧洲疾病预防和控制中心得到我们需要的格式的数据,欧洲疾病预防和控制中心相当于 T2 的美国疾病预防和控制中心。 Kaggle 也有不错的数据。
从 2020 年 1 月 1 日开始,绘制来自中国的每日感染率,显示了在第 43 天(2 月 12 日)左右病例的大幅增加,当时医疗团队开始使用更简单和更快速的诊断方法而不是早期的 DNA 匹配测试。即便如此,高斯模型提供了一个体面的拟合。
对韩国来说,fit 可能看起来更好。但它没有很好地捕捉右侧停滞的衰减。甚至有可能这种超出代表了一个单独的区域高斯事件。
为了使模型符合这些数据,我使用了 python scipy.optimize 模块中的 curve_fit() 函数,我的 Jupyter 笔记本在这里是。
对这些模型的一个简单检查是,模型曲线下的总面积是否接近该国的实际感染总数。信封背面计算的标准程序是频繁的健全性检查。
给定 N 和 σ ,模型曲线下的总面积为:
以下是对比数据(截至 2020 年 3 月 24 日)
中国
- 实际案例总数: 81748
- 型号总面积: 79315
令人惊讶的是,只有 3 折左右。
韩国
- 实际案例总数: 9037
- 型号总面积: 8145
∾10%的折扣,主要是因为该模型遗漏了最近在韩国案例下降中出现的停滞。但是,对于一个粗略的估计来说,10%还不算太糟糕。
预测建模
这里是信封背面模型失败的地方,或者说失去了它的 10%的优点。
以下是高斯模型对一些国家截至 2020 年 3 月 24 日数据的拟合。
通过将当前累计感染人数与模型中的预期总病例数进行比较,我们可以了解到国家目前的状况。这个比率是到目前为止模型下的面积除以模型的总面积。**
该百分比如下图所示(面积分数可能大于 100%,因为实际病例总数可能不同于模型预测的总数,例如韩国)。请记住,面积分数 是来自模型的 估计值 ,因此会受到下面将提出的模型的统计怀疑。
高斯模型适合不同国家新的每日感染率和世界数据(不包括中国)。每张图的下方是“面积分数”,这是一个对该国“陷入其中”程度的估计。
这个简单模型的问题
这种模式太简单的方式太多了!
真正的流行病学模型融合了像马尔可夫链蒙特卡罗(MCMC)耦合微分方程、实时交通数据和社会图分析这样的东西。通过在你的手机上体验像瘟疫公司这样的游戏,你可以看到,这种流行病可以以多种方式呈现自己的生命,并偏离简单的模式。真的— 高斯模型唯一支持的是中心极限定理,而且它很简单。**
该模型相当好地捕捉了事件发生后国家的总体特征,这些国家似乎现在已经控制住了感染,如中国和韩国(如上所述,一些非高斯现象似乎正在韩国发生)。但是模型的拟合参数 μ 、 N 和 σ 在很大程度上取决于你在曲线上的位置,即你的面积分数。**
当你爬上数据的一边时,有许多局部的波峰和波谷。但是,如果你的国家已经接近感染曲线的一半,你可以使用高斯模型对未来做一个很好的猜测。从最高点的角度来看,当面积分数= 50%时,未来看起来,嗯,有点像反过来的过去。感染应该开始减少,并最终减少到零。
问题是,你不确定你什么时候在那里。
如果你只有 10%的感染指数上升,那么使用高斯模型得到的参数的误差棒对最新数据太敏感了。下面是一些不同的可能模型,我们从疫情沿途 10%、20%和 30%的数据统计波动中得到(面积分数)。你可以看到,当我们只有中心峰左侧很远的数据时,模型波动很大,面积分数很小。
拟合不同面积分数时的模型参数方差
事实上,高斯模型的 σ 参数的方差,如在不同点“进入事件”(由该点曲线下的面积分数表示)所估计的,随着我们更早地向左移动而放大。
因此,我们不能真正使用这个简单的近似值作为预测模型,至少在我们深入了解它之前,可能有 30%的总感染已经已知。再说一次,直到后来我们才真正知道那是什么时候。
例如,根据美国数据,当前面积分数估计为 15%。这意味着我们使用迄今为止(2020 年 3 月 24 日)的数据得到的可能模型存在很大差异。下面是一些例子,包括“最佳”拟合: N =21178,μ= 91(3 月 31 日!),并且 σ =6,由 curve_fit() 函数返回。尽管许多领导人都呼吁让“T22”恢复工作,但这似乎过于乐观了。但是此时(第 85 天)与美国数据相似的其他模型参数就不那么令人鼓舞了,看起来像这样。
一些可能的感染率高斯模型,符合当前美国数据(2020 年 3 月 24 日)。在这个面积分数(15%)下,可能模型的差异非常大。
从这些模型的长期角度来看,我们目前所知甚少。请注意,即使是“面积分数” 估计值(美国为 15%)也有非常大的建模误差,如下所示。虽然我们似乎已经完成了乐观(蓝色)模型的 15%,但是我们还不到其他“合理”模型(红色、绿色和橙色)的 1%。现在下结论还为时过早。
使用当前(2020 年 3 月 24 日)美国数据的可能模型的长期视图。
尽管如此,这个的封底模型还是很有指导意义的。很简单,每周都会有更多的数据进来,让我们沿着曲线走得更远,这样高斯模型就有了更多的预测能力。有趣的是,伊朗和意大利似乎已经接近或接近顶峰。
该模型还指出,在疫情的这一阶段,简单的预测是多么糟糕,而且似乎表明,在我们达到舒适的 90%面积分数之前,我们可能还有一段路要走。请注意,韩国有 111% 的面积比例,他们的感染仍然没有减少,所以不要误认为这是真正的流行病学建模。
这只是某个容易获得数据、突然有很多时间呆在家里、一堆信封堆积如山的人的想法。
阿基米德的天才
他是如何利用基础物理学推导出球体的体积的
苏格兰出生的数学家埃里克·坦贝尔 在《数学界人士 】、 中写道,他的数学史著作 :
所有历史上三位“最伟大”数学家的任何名单都会包括阿基米德的名字。另外两个通常和他联系在一起的是牛顿和高斯。一些人考虑到这些巨人所处时代数学和物理科学的相对富裕或贫困,并根据他们所处的时代背景来评估他们的成就,会把阿基米德放在第一位。”
— E. T .贝尔
图 1:意大利巴洛克画家多梅尼科·费蒂的阿基米德图(来源)。
阿基米德是谁?
阿基米德(公元前 287-212)是希腊数学家、物理学家、工程师、发明家和天文学家。他被广泛认为是历史上最有影响力的数学家之一。在他的众多成就中,以下几项尤为重要:他预见了现代分析和 T21 微积分的技术,推导出π的近似值,描述了阿基米德螺线,创立了流体静力学和静力学(包括杠杆原理),是第一批应用数学研究物理现象的思想家之一。
图 2:阿基米德螺旋(来源)。
德谟克里特斯
希腊苏格拉底之前的哲学家德谟克里特斯因他的宇宙原子理论而闻名,他也是一位杰出的数学家。他写了几本书(超过 75 本,至少),包括关于数字、几何、切线、映射的*、关于无理数的和但不幸的是,这些著作无一幸存。他第一个注意到底面和高度相同的圆锥体和金字塔的体积分别是圆柱体或棱柱体的三分之一( Wiki )。*
图 3:德谟克里特斯荷兰画家亨德里克·特尔·布鲁根。
希腊人和解析几何
用我们现在的符号表示的解析几何是在 17 世纪由法国哲学家、数学家和科学家勒内·笛卡尔(1596-1650)发明的。这是作为他著名的《La géométrie》的附录提出的在这部开创性的著作中,笛卡尔首次提出了将几何对象转化为代数方程,从而将代数和几何结合为一门学科的概念。
图 4:勒内·笛卡尔(1596–1650)的开创性作品“La géométrie”(来源)。
然而,希腊人已经有了解析几何中一些基本概念的概念(尽管仍然是原始的)。一个例子是,在一个平面上,轨迹可以用移动点到两条垂直线的距离来分析(如果这些距离的平方和是固定的,它们就是一个圆)(见西蒙斯)。
阿基米德和球体的体积
阿基米德是最早将数学技术应用于物理学的人之一。众所周知,他创立了流体静力学和静力学,并因解释了杠杆而闻名。事实上,他最著名的名言是:
“给我一个支点,我可以撬动整个地球”
—阿基米德
*图 5:出自“*力学杂志”的一幅版画,取材于阿基米德的名言(来源)。
使用现代符号,考虑图 6 所示的下列圆。
等式 1:用现代符号书写的圆。
为了我们目前的目的,我们将把这个等式表示如下
等式 2:等式。1 以不同的形式表达。
现在考虑以下程序的及其相应的解释,全部基于图 6:
- 首先,围绕圆的直径旋转它。这将给我们一个球体。
- π x 等于在x∈【0,2a】的直线 y = x 下面的三角形绕 de x 轴旋转一周所产生的圆锥体的横截面面积
- π(2 a )等于绕边为 2a 的正方形的轴 x 旋转一周所产生的圆柱体横截面的面积
- πy 等于球体横截面的面积
图 6:在 y = x 直线的下方为x∈【0,2a】(源)做一个三角形的旋转锥,得到面积为π x 的横截面。
现在我们用等式乘以等式。2 乘以 2π得到:
等式 3:等式。2 乘以 2π。
右手边是我们刚刚描述的围绕 de x 轴的旋转圆柱的区域(上面列表中的倒数第二个项目)。
现在阿基米德的天才开始发挥作用了。他重新排列了几何图形,如图 7 所示。在这种构形中,球体和圆锥体由一根细绳悬挂着(可以假定是无重量的),水平轴被当作一根杠杆,以原点为其固定铰链(支点)。根据所谓的杠杆定律,“输出力与输入力之比由支点到这些力的施加点的距离之比给出”(维基)。
图 7:两个旋转的图形(圆锥体和圆柱体)和球体,重新排列(来源)。
现在,利用德谟克里特斯的结果,即圆锥体的体积是圆柱体的三分之一,杠杆定律意味着和:
方程式 4:阿基米德利用杠杆定律得出的球体体积。
这是我们追求的结果。这一计算的独创性令人震惊。正如美国数学家乔治·f·西蒙斯所观察到的:
[在这个推导中]讨论的想法是由一个人创造的,他被描述为“古代世界最伟大的天才”,这是有充分理由的。“的确,没有什么地方能比这更能展示智力与最高境界的想象相结合了。”
乔治·f·西蒙斯
感谢您的阅读,再见!一如既往,我们随时欢迎建设性的批评和反馈!
我的 Github 和个人网站 www.marcotavora.me 有一些关于数学和其他主题的有趣资料,如物理、数据科学和金融。看看他们!
鬼魂,机器和它们之间的东西
形而上学中的二元论是相信有两种现实:物质的(物理的)和非物质的(精神的)。在心灵哲学中,身心二元论认为,心灵和身体在某种程度上是绝对分离的,精神现象在许多方面是非物质的。
精神和身体问题关注的是精神和身体在多大程度上是分离的,或者是同一件事,以及人类思想中思想和意识之间的关系。已经提出了许多理论来解释我们所谓的心灵(定义为意识)和大脑(定义为肉体的一部分)之间的关系,其中一些我想在本文中讨论,但首先让我们看看这个争论的漫长而多样的历史。
鬼魂:“我思故我在”
“我是否如此依赖身体和感官,以至于没有它们我就无法生存?”
二元论可以追溯到柏拉图和亚里士多德。柏拉图首先提出了“形式理论”,认为我们在世界上感知的物体和其他现象只不过是影子。他认为,要让智力接触到概念或想法,头脑必须是非物质实体。亚里士多德认为,既然智力能够接收和反映所有形式的数据,那么它一定不是一个物理器官,因此一定是非物质的。
然而,二元论在 17 世纪由法国哲学家勒内·笛卡尔最精确地阐述,他为“笛卡尔二元论”的开端奠定了基础,特别是他的论点是,身体和心灵是完全分离的物质,彼此独立,我们称之为二元论。
机器
“一切自然的事物都可以归结为一个原则,这就是自然;所有自愿的事情都可以归结为一个原则,即人类的理性或意志。”【圣托马斯·阿奎那】(T11)
相比之下,托马斯·霍布斯和约翰·洛克是英国哲学家,他们不同意二元论的概念,支持唯物主义。
他们认为,所有人类的经历都是发生在大脑和神经系统中的物理过程。由于这种观点认为精神和身体是同一个,它后来被称为一元论。
霍布斯不相信灵魂,也不相信有别于肉体的心灵,或者任何其他非实体的和形而上学的实体。相反,他认为人类本质上是机器,甚至他们的思想和情感都按照物理规律和因果、行动和反应的链条运行。人类作为机器,无情地追求自己的私利,机械地回避痛苦,追求快感。
霍布斯认为,在人类的自然状态下,道德观念是不存在的。因此,在谈到人性时,他简单地将善定义为人们所渴望的,将恶定义为人们所避免的,至少在自然状态下是这样。霍布斯使用这些定义作为解释各种情绪和行为的基础。例如,希望是获得某种明显的好处的前景,而恐惧是意识到某种明显的好处可能得不到。
机器里的幽灵
英国哲学家 Gilbert Ryle 也在牛津大学讲课,通过引入短语“机器中的幽灵”作为对笛卡尔和其他人的观点的批评,对“心灵哲学”做出了重要贡献,笛卡尔和其他人认为精神和身体活动同时发生,但却是分开的。
“机器中的幽灵”是指物理实体中携带的意识或思想。赖尔认为,人类的意识和思维非常依赖于人脑。术语“机器中的幽灵”也用来描述设备中的假定意识,它的行为就好像它具有独立于人类操作员想要设备做什么的意志。
计算机程序员用“机器中的幽灵”这个术语来解释程序运行与他们的预期相反的时候。
1967 年亚瑟·库斯勒*,一位匈牙利裔英国作家兼记者写了《机器中的幽灵》。标题使用了赖尔创造的短语。科斯勒的书本质上是对人类大脑可以被视为一台机器,一种化学计算机的假设的批判。他继续考虑,如果它是一台计算机,那么形而上的呢?五十年后,反过来才是问题,许多人质疑人工智能(AI)是否是机器获得意识的第一步。*
但承认关于人工智能的两件事非常重要:首先,现代人工智能的成功与其说是因为新技术的突破,不如说是因为可用的大量数据和计算能力。然而,重要的是,即使无限量的数据也不会赋予人工智能类似人类的智能——我们需要首先在开发人工“一般智能”技术方面取得重大进展。一些方法包括建立人脑的计算机模型——这一点我们还没有接近实现。第二件要承认的事情是,没有人类的输入,人工智能无法发挥作用。人类是人工智能,在你考虑一些邪恶的评论之前,让我解释一下:玛丽·l·格雷,哈佛大学伯克曼·克莱恩中心的研究员和微软研究院的高级研究员在她的新书《幽灵工作》中透露了人工智能的秘密:“人类工作者不仅仅是标记让人工智能工作的数据。有时候人类工作者就是人工智能。”
人工智能系统不是在我们中间进化的外星大脑,很快就会成为我们的主人。他们是我们通过将我们的人性嵌入到他们的程序中来建造和训练的机器。
机器学习算法通常被认为是黑盒,在精确定位我们的算法找到的解决方案的细节方面付出的努力较少。这是一个重要但经常被忽视的方面,因为我们经常沉迷于性能而不是理解。理解这些系统发现的解决方案非常重要,因为我们还可以评估它们是否是正确的或理想的解决方案。
哲学僵尸 有人可能会说 AI 是一个“哲学僵尸”,这个词与大卫·查尔莫斯和哲学家罗伯特·柯克联系在一起,用来描述一个走路和说话都像人类的精确的物理克隆。但是,尽管如此,它缺乏任何内在的精神体验、思想或情感。它只是为了复制而复制人类行为。机器可能有某种意识,但没有人类的意识。
哲学家托马斯·内格尔在他的文章中提出,“做一只蝙蝠是什么感觉?”意识有一个主观方面,对于那些无法体验其他精神状态的人来说,理解这些精神状态是困难的或者不可能的。他选择蝙蝠是因为它们是与人类关系相对密切的哺乳动物,(有人可能会说,这就是我们如何得到新冠肺炎病毒的传播?—让我们暂时就这样吧!)——但是,即使我们知道所有关于它们的客观事实,我们也永远无法真正知道作为一只蝙蝠会是什么样子。我们也许能够想象倒挂、夜间飞行或使用回声定位追踪猎物会是什么样子,但纳格尔也认为,我们真的无法知道蝙蝠的经历是什么样子,就像我们无法知道蝙蝠是什么样子一样。
我们无法知道计算机或某种人工智能会是什么样子。我们只能说,除非给某个人工智能一个真正的人脑,否则只有人类才能知道作为人类是什么样子。但另一方面,剩下来要回答的问题是:我们可能不知道作为一台机器是什么样子,一台机器不可能有人类的意识,但我们是机器里的幽灵吗?
为了回答这个问题,我们首先必须了解人类决策的一些基本理念。
鬼魂还是机器?
“两只狼”的故事是我最喜欢的故事之一。即使你已经听过了,这也是一个很好的提醒。事情是这样的:
一位年长的切罗基族祖父正在教导他的孙子关于生活的知识:“我体内正在进行一场战斗,”他对这个男孩说。“这是一场可怕的战斗,是两只狼之间的战斗。一个是邪恶的——他是愤怒、嫉妒、悲伤、后悔、贪婪、傲慢、自怜、内疚、怨恨、自卑、谎言、虚假的骄傲、优越感和自我。”他继续说,“另一个是善——他是快乐、和平、爱、希望、宁静、谦逊、善良、仁慈、同情、慷慨、真理、同情和信仰。你内心也在进行着同样的斗争——每个人的内心也是如此。”孙子想了想,然后问爷爷:“哪只狼会赢?”老切诺基人简单地回答:“你喂养的那只。”
这个故事可以有很多不同的解释,但对我来说,它是一个重要的提醒,提醒我们每个人内心都有双重力量。好的和坏的,或“肩膀天使”——一种在小说、动画书和电影中常用的情节设计。
来说说我们肩上的天使还是魔鬼。很明显,你可以想象,这种想法的根源可以追溯到哲学家西格蒙德·弗洛伊德,精神分析的创始人,他提出了“自我和本我”的概念(发音像“愚蠢”,没有“愚蠢”),作为对人类心理的分析研究。
肩膀上的天使或魔鬼的概念基本上是弗洛伊德关于本我、自我和超我的理论。
本我是想象中的魔鬼,弗洛伊德将其描述为“努力带来本能需求的满足……”本我是心灵中寻求快乐的部分,它忽略了可能的后果。它缺乏道德,自私自利。肩膀上想象的天使是超我。它也被称为有意识的。它代表了我们的理想,我们的是非观。它试图控制 id。
最后一块是自我,以我们的头卡在肩膀上的天使和魔鬼之间为代表。自我基本上是法官,它在本我和超我之间进行调解,以便采取适当的行动。它很好地权衡了本我和超我想要的东西之间的利弊。
弗洛伊德理论的问题在于没有办法支持。我们无法证明本我或超我的存在。我们所知道的是,当我们不得不做出决定时,我们会听到内心的冲突。
事实上,如果我们要从心理学中寻找决策的解释,我们可能会找到一种补救方法。
根据我们之前关于意识的讨论,以及机器无法拥有意识的潜在结论,我们是否可以说只有人类有能力以天使般的方式行事,而机器从定义上来说就是魔鬼?我认为这是一个更复杂的问题,可能介于哲学、科学和人类进步之间。但有一点我可以保证,人类的决策过程远比深度神经网络或决策树复杂。
做决定可能是艰难的,我们的自我对话可能会引导我们走向许多结果。这些决定中的一些会导致对我们有利的结果,而一些决定确实对我们不利。但是是什么引导我们做决定呢?嗯,我们都有良知——当我们做决定时,内心的声音会告诉我们“对与错”。
今天早上的早餐,我不得不在一个羊角面包(确切地说是巧克力味的)和一碗燕麦片(羊角面包很好吃)之间做出选择。一整天,我都不得不克制住查看推特、不去健身房、看《改变的碳》直到深夜的冲动。每时每刻,诱惑都在召唤。心理学家用这种冲突来解释自我控制:我们短期冲动的情绪系统和我们长期深思熟虑的逻辑系统之间的推拉。但是,心理学家认为这两个系统不一定同时起作用。人们一致认为,当我们看到羊角面包时,我们的冲动系统首先行动,迅速引发自动冲动。从这个角度来看,魔鬼一有麻烦就来,天使在游戏中姗姗来迟,试图征服魔鬼。
这意味着自我控制在很大程度上取决于我们的意识,即天使。事实上,现代社会崇尚意志的力量——控制和超越动物欲望的想法,以便理性能够占上风。这为个人失败提出了非常明确的补救措施:更强的意志力和更坚韧的精神。
你可能会把它看作是两只狼,天使和魔鬼栖息在你的肩膀上,自我和本我或者我更喜欢这样看——作为一个内在的幽灵和一台机器。我让你来决定谁会赢,是鬼魂还是机器?
鬼魂和机器
“我们必须热爱我们的技术,才能准确地描述它。我们必须足够爱自己,去面对科技对我们的真实影响”(特克尔)
人工智能接管是一种假设的场景,其中人工智能(AI)成为地球上的主导智能形式,计算机或机器人有效地从人类物种手中夺走了地球的控制权。人们在谈论 AI 接管并超越人类智能。
我个人更关心人类如何使用 AI。机器学习算法通常被认为是黑盒,在检查算法找到的解决方案的细节方面付出的努力较少。这是一个重要而又经常被忽视的方面,因为我们经常过度沉迷于性能而不是理解。理解这些系统发现的解决方案非常重要,因为我们还可以评估它们是否是正确或理想的解决方案。
就像人类一样,机器学习和人工智能都是工具。像其他事物一样,它们可以被正确或错误地使用。我们应该关心的是使用它们的方式,而不是方法本身。人类的贪婪和人类的自满比人工智能更让我害怕。
机器人会在某些工作中取代人类吗?答案是明确的,是的。然而,随着每一项工作都被机器取代,新的工作将有同等数量的机会由人来做。其中一些将是创造性的,其他的将需要人类磨练他们超人的推理能力。但是 AI 会完全取代人类吗?我认为答案是否定的。人工智能系统不是在我们中间进化的外星大脑,很快就会成为我们的主人。他们是我们通过将我们的人性嵌入到他们的程序中来建造和训练的机器。
人们担心人工智能会接管世界,担心未来会出现失业、机器控制的噩梦。为了实现这一点,我们首先必须了解人工智能发展出“超级智能”的可能性有多大,这种智能行为将超过人类。
人类往往会害怕自己不了解的东西。因此,难怪这也适用于新技术——新技术通常被某种神秘所包围。一些技术成就看起来几乎是超现实的,明显超出了对它们的预期,在某些情况下,还超出了人类的表现。
未来,人和机器可以而且将会一起工作,他们会发现自己处于共生关系中,互相帮助做他们最擅长的事情。这不是一个或的问题,而是和的问题。所以,让我们停止,或者至少忽略人工智能优越性的空洞鼓点。人类是惊人的,没有他们人工智能将会迷失,但有一件事人工智能可以肯定——它可能会帮助我们专注于我们不可替代的东西,并使人类再次成为人类。
原载于 2020 年 4 月 6 日https://iron woman . ai*。*
Git 备忘单
背景图像由 Yancy Min 在 Unsplash 上拍摄。由作者编辑。
Git 是最流行的版本控制系统之一,你可以把它看作是在特定的状态和时间拍摄代码快照的一种方式(Git 术语中的提交),以防你以后把事情搞砸了,想回到代码的稳定版本。如果你把它和 GitHub 结合起来,这也是一种很好的合作方式。
Git 是免费和开源的。你可以从官网下载。一旦安装完毕,你应该能够在你的终端上运行 Git 命令。
在开始使用 Git 之前,您应该知道一些事情:
- 当你想跟踪项目中的文件时,你把它们放在一个仓库中。存储库基本上是一个目录,在其中启用了版本控制,并且总是对您放入的内容保持警惕。它会知道这些文件的任何变化,并帮助你跟踪它们。
- 每个提交都有一个标识符,以防你以后需要引用它,这个 ID 叫做 SHA ,它是一个字符串。
- 工作目录包含你在项目目录中看到的所有文件。
- staging index 是 Git 目录中的一个文件,它存储了下一次提交中将要包含的信息。
创建或克隆存储库
在当前目录下创建或克隆一个存储库。
- 从头开始创建存储库:
git init
- 克隆现有存储库:
git clone <https://github.com/>...
- 克隆存储库并使用不同的名称:
git clone <https://github.com/>... new_name
显示信息
- 确定回购状态:
git status
- 显示回购的提交:
git log
- 紧凑显示回购的提交:
git log --oneline
- 查看修改的文件:
git log --stat
- 查看文件更改:
git log -p
- 查看文件更改,忽略空白更改:
git log -p -w
- 查看最近提交:
git show
- 查看特定提交:
git show <SHA of commit>
增加
“暂存”是指将文件从工作目录移动到暂存索引。
- 暂存文件:
git add <file1> <file2> … <fileN>
- 卸载文件:
git rm --cached <file>...
- 登台所有文件:
git add .
犯罪
从暂存索引中取出文件,并将其保存在存储库中。
- 提交暂存文件:
git commit
该命令将打开代码编辑器。在代码编辑器中,您必须提供一条提交消息,保存文件并关闭编辑器。
- 不打开代码编辑器提交文件:
git commit -m "Commit message"
Git 差异
- 查看已经完成但尚未提交的更改:
git diff
磨尖
标记被用作特定提交的标记。这些对于给代码分配一个版本非常有用。
- 将标签添加到最近提交:
git tag -a <tag(v1.0)>
- 向特定提交添加标记:
git tag -a <tag(v1.0)> <SHA of commit>
*-a*
用于创建一个带注释的标签,其中包括额外的信息,如创建日期和创建者。添加此标志通常被认为是一种好的做法。
- 显示存储库中的所有标签:
git tag
- 删除标签:
git tag -d <tag-name>
分支
当在存储库中提交时,它会被添加到您当前所在的分支。默认情况下,存储库有一个名为 master 的分支。特别是在你的代码上试验新特性的时候,创建一个单独的分支,作为一个与你上次提交安全隔离的环境,通常是很有用的。您可以在分支之间切换,提交将只添加到您当前所在的分支。
- 列出所有分支:
git branch
- 创建新分支:
git branch <branch-name>
- 删除分支:
git branch -d <branch-name>
您不能删除当前所在的分支。
如果一个分支包含不在任何其他分支上的任何提交,则不能删除该分支。
- 强制删除:
git branch -D <branch-name>
- 分支切换:
git checkout <branch-name>
- 在特定提交上添加分支:
git branch <branch-name> <SHA of commit>
- 在与主分支相同的位置开始分支:
git branch <branch-name> master
- 一次查看所有银行:
git log --oneline --decorate --graph --all
合并
当执行合并时,另一个分支的更改会被带到当前签出的分支中。
- 执行合并:
git merge <branch to merge in>
批改作业
- 修改上次提交的消息:
git commit --amend
还原提交
这将创建一个新的提交,恢复或撤消以前的提交。
- 撤消提交中所做的更改:
git revert <SHA of commit>
重置提交
这将清除提交。
- 重置提交:
git reset <reference to commit>
根据您添加的标志,您将获得不同的结果:
--hard
清除提交的标志--soft
将提交的更改移动到暂存索引的标志--mixed
取消已提交变更的标志
如果你想了解更多关于 Git 的知识,Udacity 提供了这门很棒的课程,它涵盖了所有基础知识和更多深入的概念(免费!).我自己上过这门课,它启发我总结了我学到的一些主要概念,并在我的项目中使用。
希望你从这篇文章中得到一些价值😊下一集再见!
GitHub 备忘单
GitHub 是使用 Git 托管软件开发版本控制的最受欢迎的服务之一。如果你对版本控制和 Git 还不熟悉,你可以看看我之前的文章,Git 备忘单,在那里我解释了基础知识。
为什么要使用 GitHub 呢?
作为一名开发人员,您可能会觉得使用版本控制在自己的本地存储库上工作很舒服。然而,协作是至关重要的,因为大多数时候,你不会独自在一个项目中工作。你将和你公司的一个团队一起工作,或者可能和你在世界各地都不认识的人一起工作。无论您想从事较小的项目,还是大型开源项目,协作都是开发人员必须具备的重要技能。
GitHub 使版本控制项目的协作变得容易。因此,在这篇文章中,我们将学习如何使用 GitHub 进行协作的基础知识。
添加远程存储库
当您希望本地存储库与 GitHub 中的远程存储库进行通信时,请使用此命令。基本上,通过这个命令,您可以告诉您的计算机在您的本地 repo 和指定的远程 repo 之间创建一个连接,这将被称为origin
(这是一个简称)。
$ git remote add origin https://github.com/username/repository.git
当您将远程存储库克隆到本地设备时,此连接会自动完成。
发送提交
我的远程回购的简称是origin
,我想要推送的提交在master
分支上。所以我将使用下面的命令将我的提交发送到 GitHub 上的远程存储库:$ git push origin master
从远程存储库中提取更改
为了将本地存储库与远程存储库同步,我们需要使用 git pull。与git push
类似,您提供远程存储库的简称,然后提供您希望提交的分支的名称。
$ git pull origin master
取得
如果你不想自动合并本地分支和远程跟踪分支,那么你就不要使用git pull
,而是使用git fetch
。如果远程存储库上有您没有的提交,但是本地存储库上也有远程存储库也没有的提交,您可能想要这样做。在这种情况下,您希望获取远程更改,以便在本地分支中获得它们,然后手动执行合并。然后,您可以将新合并提交推回到远程。
等等,那么拉和取的区别是什么?
您可以认为git pull
命令做两件事:
- 获取远程更改(这将提交添加到本地存储库中,并移动跟踪分支以指向它们)。
- 将本地分支与跟踪分支合并。
git fetch
命令只是第一步。它只是检索提交并移动跟踪分支。它不将本地分支与跟踪分支合并。
叉
当您派生一个存储库时,您正在创建该存储库的一个相同副本,并将其存储在您的配置文件中。修改分叉回购不会影响原回购。
短日志
当在一个项目中与其他开发人员合作时,知道谁做了什么是很有用的。git shortlog
将显示提交的作者分组。
您可以添加标志-s
来查看提交的数量,添加标志-n
来对它们进行数字排序:$ git shortlog -s -n
重定…的基准
在协作项目中进行变更时,我们需要尽可能清晰。这将有助于其他开发者理解我们所做的事情。
假设您连续提交了三次都是小的打字错误,这里最好的办法是将这三次提交合并成一次。
对于这个例子,您可以使用:$ git rebase -i HEAD~3
git rebase
将提交转移到新的基础。在本例中,HEAD~3
表示头前三位(头是你当前的位置)。
看起来你已经准备好在 GitHub 上合作了!🎉我知道学习曲线有时会很陡,但绝对值得坚持下去。希望这是对你有帮助的介绍😊
金发区:你能设计出恰到好处的神经网络吗?
了解如何在实践中设计基于特定应用的神经网络。
深度学习很难,退一步说。用于创建神经网络体系结构的多种结构和方法几乎专用于非常选择性的问题。在大多数情况下,样板模型是行不通的,那么你如何着手设计最好的神经网络呢?
credit->Xu:对信号(在通信中)的一种借鉴,其中神经网络以与 SEFDM 信号相似的方式构建,在 SEFDM 信号中,带宽被分割并分出多个其他流用于通信。
现实是没有正确的答案 ,但是从稀疏性、记忆、剪枝等领域的研究来看,有一些通用的规则可以遵循,以有效地测试和产生一个可行的模型。
从不同的角度看神经网络架构(NNA)
本质上,神经网络只是信息流经的结构。通过各层及其各自的神经元,以指定的多种方式对这些信息进行某些操作。一种思考方式是通过不同的层传递信息。
想到一条河;数据的河流。这条河不是以固定的速度流动,而是转弯、变窄、分开、回来、循环……你明白了吧。河流流经不同的关口,变窄溪流,斜坡,甚至汇集成湖泊!
我已经告诉你的分别是,从纯数学的角度来看神经网络架构的本质,以及它如何控制信息以对新数据进行准确预测。从迁移学习到瓶颈方法,甚至 LTSM 网络,在设计神经网络和你要寻找的输出时,记住这些概念是很重要的。
这就是为什么找到这个适居区比你想象的要难:你在与无数的变量打交道,你的数据必须适合所需的神经网络架构。
本质上:
嗯,设计神经网络可能有一些重要的规则需要理解。然而,在此基础上,内化任何神经网络的目标是学习任意的输入输出函数。
Credit -> ZipTech:网络中带有标记神经元的几个神经网络;利用不同的卷积和记忆单元以及在多个神经网络中发现的基本神经元
每个权重和连接都有一个用途,将特定的恒定权重应用于之前的输入,以便在数据中找到特定的模式。
许多这些想法都是功能性的,每个独立的神经元都服务于神经网络的一个深层目的,无论是深度学习的架构,还是结合机器学习子集的不同方法。
现在,这些层和神经元不寻找眼睛颜色或肤色之类的东西:这些特征通过浮点运算来量化,这些浮点运算共同构建了给定输出的某个概率。
例如,CNN 不是什么特别的东西。它仍然是一个神经网络,但由不同的线性核组成,以发现数据中的特征,而不是使用传统的输入输出结构。CNN 由记忆细胞、池细胞、核细胞、过滤细胞和其他更一般问题所必需的隐藏数学运算组成。此外,重要的是要认识到信息正在经历一个瓶颈,所有这些不同的神经元都在消除噪音和提取数据中的共同模式方面发挥作用!
最基本的卷积神经网络的功能分解,以及每一层如何构造以确保分类准确发生
为什么这很重要?了解某些神经元如何工作可以让你创建定制的架构,并更准确地将问题与模型相匹配。某些模式和层数会影响信息流,以便更好地解决问题。
- CNN 使用池层来识别图像的特征,并简化所需参数的数量。它对数据集进行线性扫描,只获取最重要的信息。
- **rnn 将输出反馈到同一层,以获得记忆感,从而分析非常具体的趋势。**通过循环输出作为输入,你允许某些记忆神经元过早地在数据中寻找特定的模式。
- 块-稀疏 GPU 集成使用带有 0 的稀疏层来降低神经网络层所需的 GPU 功耗,并识别输入数据之间最相关的连接。
- 内核算法是神经网络中的一个附加层使用非线性问题的线性运算提取特征。
这里发生了一些有趣的事情:所有这些结构都在对给定的输入数据进行线性或非线性运算,以将其映射回一般的输出。我们唯一不关注的是我们如何做到这一点,以及最好的方法是什么。我们是在寻找更好的不变性,回忆,还是效率?
归功于 3blue1brown:基于手写数字分类算法的输入 7 的激活神经元的可视化,请注意,虽然这是一个图像问题,但没有使用 CNN,而是数据能够有效地格式化为传统的人工神经网络(或基本神经网络)
结论:我们可以从一些抽象的需求或特性中,将层及其指定的线性操作组织成数据流的数学参考。
我现在如何使用这个?
许多高级机器学习问题需要从数据中做出直观的决策,但你不能只是盲目地挑选 10 层和 10 个神经元,然后就此结束。你必须是有意的,研究源于这个想法,并产生了一些最流行的抽象问题集模型。随着时间的推移,它会变得更加复杂,但在设计神经网络的架构时,您可以记住一些提示。
- 了解问题和你的需求,确定相关因素和功能。
你想解决什么?是高维问题吗?我需要某些注意机制吗?看看你的问题是什么,确定你需要解决什么。通常,您可以将您的数据映射到不同的模型,并应用类似的方法来添加您自己的特定设计变更。
例如,当试图为患有罕见遗传疾病的患者寻找某些非同义遗传序列时,高通量测序是一种分析你的基因组大块的流行方法。
鸣谢:谷歌大脑
该团队后来设计了一种新的测序方法,称为 DeepVariant,而不是使用 LSTMs(一种识别致病序列的传统方法)将问题转变为 CNN 问题,以更好地可视化和绘制出某些序列的流行及其与体内其他基因的相互作用。
2。避免网络碎片和不必要的神经元,防止过度拟合。
在实践中,许多深度学习研究人员利用仪表板(y 轴上的误差和 x 轴上的训练规模)来跟踪你的偏差和方差,但通常在神经网络中,更难看到应该如何减少方差和增加偏差来获得它,再次,恰到好处。
一般来说,最好的方法是减少模型的维数,以防止高阶函数以几乎 100%的精度映射训练集。辍学率是一个有用的解决方案,您可以识别并重新评估您的层中神经元的需求。好的辍学率范围从 0.1 到 0.5 (训练一个神经元的概率)。
Credit -> Analytics Vidhya:辍学率,表示给定层中神经元被训练的概率
在神经网络中,您可以改变权重的数量,以避免碎片或使用更大的运算(常数超过特定的权重值)。
3。使用已经开发的不同机制
这看似矛盾,但让我解释一下。瓶颈、全局平均值和修剪算法等机制是某些工具,可以添加到您的基本样板神经网络架构中,以根据您的需求增强其可行性。
Credit -> FloyHub:注意力机制视觉直觉的一个例子。
你本质上是在一个简单的模型上增加了另一层复杂性,以便简单地达到一个复杂的结果,无论是更好的 GPU 优化还是在你的模型预测中达到更高的偏差。
这些机制特别有助于确定您可以做些什么来更好地改进您的模型,以及您需要关注什么。 **PCA(主成分分析)**是另一种机制,可以帮助你降低维度,以确定哪些神经元和输入对最终输出有影响。
其他机制包括通过简单的神经网络格式化数据,并将概率作为输入输入其他深度学习算法。最终,你的目标是降低复杂性,并为你给定的问题找到最有效的方法。
4。更多的层和更少的神经元并保持操作简单
为什么这是真的?好吧,让我们回到信息流的概念。深度学习起作用的原因是因为它的各个层利用非常特定的神经元和功能来提取特征。您拥有的层越多,您就可以更好地对您的体系结构进行建模,以匹配数据中的特定信息。
你不想要一个有 3 层和 1000 个神经元的网络来识别一只狗的所有特征。这些层和应用在它们上面的操作没有什么意义,对模型中的其他东西没有任何贡献。
您拥有的图层越多,您的图层就越能更好地提取某些要素并将结果传递到下一个图层。这是通过非常特殊的神经元功能逐步积累知识。最好把它想成是一起工作的整体的一部分,而不是一个人的军队。
然而,同样重要的是要认识到,在没有明确目的的情况下添加更多层会导致初级层的学习速度发生增量变化,因此您的网络可能会遇到消失梯度问题。然而,这也可以通过证明归因于在模型学习时随着时间推移具有显著变化的层中缺少神经元。
功劳-> 胡:消失渐变问题表现出不同的准确性
尽管如此,具有高维数和小输出的神经网络中的某些问题需要足够的神经元来包含尽可能多的信息。另一方面,有些问题使用 RNNs,在这种情况下,输入很少,输出很多,因此需要更多的层来提取更多的信息。
好吧,现在怎么办?作为一名开发人员,你不仅要理解你试图解决的问题,还要将它与两个概念联系起来,即信息丢失和信息复杂性。
在信息丢失中,瓶颈效应发生在整个网络中,在网络中,您使用更多的内核和卷积池层来概括数据中的模式。这是 CNN 用来对各种类型、大小和形状的图片进行分类的工具。问题是,回到消失梯度,你的主要层学习速度较慢,因为需要更多的神经元来获得足够的信息。在 CNN 的情况下,这不是一个问题,但当你遇到深度感知或语义分割等问题时,这并不理想。
随着信息的复杂化,你要从一个小的特性集中识别出许多不同的关系。研究发现,网络中的前几个隐藏层会产生其他层所依赖的推断信息。rnn 将它们的输出作为输入进行反馈,以找到集合关系,而不会在整个网络中引起连锁反应。复杂性也会导致渐变消失的问题,因为前几层只使用一组参数库,所以学习速度较慢,精度会降低。
那你是做什么的?**实验在这种情况下进行。理解你的问题。**但总的来说,使用适量的层和足够的神经元来平衡您的数据复杂性将有助于您获得可行的结果。
信用-> RM 出版物:简单问题的经验法则;用直觉解决更复杂的问题
总之,有哪些要点?
首先,没有确切的“金发女孩地带”,可悲的是,可能永远也不会有一个恰好合适的模型。然而,当制定或构建您自己的神经网络架构时,您需要了解您做出的每个决定的基本原理。
在深度学习中,与其花时间收集更多的数据,进行更多的研究,或制定更好的数据,不如专注于模型本身。
专注于如何设计和改进你的神经网络,而不是第一次就把它做对,因为事实是,你永远不会把它做对。
迭代、毅力和对基本原理的深刻理解将帮助你建立你的知识,并根据问题定制你的架构,我希望这个总结有助于引导你朝着正确的方向去实现它。
T2 感谢你花时间阅读这篇文章,我希望你从中有所收获。如果你想获得更多的技术或者干脆联系我,你可以在LinkedIn邮箱 ,或者GitHub上找到我。
分析的黄金地带
iStock.com/伊利亚布洛托夫
现实太真实了。数据太抽象了。可视化恰到好处。
我们地球人过得很好。如果地球的轨道稍微靠近太阳一点,就会太热;再走远一点就太冷了。地球所处的位置恰到好处,一个被称为“适居带”的区域。
如果分析是太阳系,那么数据可视化就是它的金发区。一方面是现实,它太详细和复杂,无法完全理解。另一边是原始数据,也因为太抽象而难以理解。为了让分析有用,它必须位于中间——不要太真实,也不要太抽象。视觉化是让它恰到好处的关键。
分析学的三脚凳
人们知道他们能触摸、看到、听到、闻到和尝到什么。他们无法用抽象的概念做到这一点。人们在与他们生活的物质世界相关的想法中找到意义。
这是分析的一个问题,因为抽象是它的一个基本方面。要对某事进行分析并做出有把握的结论,通常需要大量的信息。然后,这些信息必须被抽象成原始数据。
一旦设置了数据,下一步就是对其进行分组、汇总和应用统计方法,目标是找到有意义的模式,这些模式可以转化为通用原则和预测。这也是分析的一个基本方面。每一个分析过程都是从数据和分析开始的,但不能止于此。还是太抽象了。为了使分析有用,它必须回到五种感官。
如果分析是一个三条腿的凳子,第一条腿使信息易于管理(原始数据),第二条腿使信息变得有意义(数据科学),那么就需要第三条腿使信息变得有关联。这就是视觉化的作用。要使分析站得住脚,所有三个方面必须协调一致。很多时候,可视化被认为是一个附加物,但是有几个原因为什么它应该被看作是每个分析项目的一个基本部分。
眼见为实
描述某事,它可能被理解。展示一些东西,不仅会被理解,而且会立刻被理解。这方面的经典例子是 Anscombe 的四重奏,它采用了 4 个具有完全相同的汇总统计数据的数据集…
安斯康贝的四重奏:数据和统计摘要
…并将它们绘制成图,展示视觉观察时图案的显著差异。
作者图片
当然,有更复杂的方法来描述模式,但是没有一个模型,无论多么优雅,能够比上面的图片更快更有效地解释这些模式。分析正确是不够的;它还必须帮助他人理解什么是正确的。一个深思熟虑的分析与正确的可视化相结合,可以很好地做到这一点。
可视化是一种隐喻
比喻用容易理解的东西来描述其他难以理解的东西。我最喜欢的一个例子是当爱因斯坦描述相对论时:“把你的手放在热炉子上一分钟,感觉像一个小时。和一个漂亮女孩坐一个小时,感觉就像一分钟。”在短短的几句话中,他用任何人都能理解的生动形象描述了一个抽象的概念 e=mc2。这就是可视化对分析的作用。
图表将数据组织成一种格式,这种格式代表现实世界中易于识别的事物。换句话说,它们是隐喻。就像一个【KC1】的嫌疑人阵容,酒吧比较相对高度。像一个便当盒,树状图显示了每个部分如何对整体作出贡献。像一块土地一样,散点图显示 2D 的相对位置。诸如此类。
在上面的每个例子中,无论数据素养如何,所有人都能立即理解图表的含义,因为它用的是他们已经理解的术语。这就是可视化的要点:不要过度简化,而是将不透明、抽象的概念转化为更容易理解的形式。
第六感
分析的肮脏小秘密是,如果人们不喜欢你的数字,他们会找到新的。
仅仅依靠五种感觉是不够的,因为还有一种更强大的第六感。它的正式名称是确认偏差,但更普遍的说法是“直觉”。这是一种根深蒂固的信念,即不管有没有证据,某事都是真实的。有时候,是基于经验的健康本能;其他时候,它是一种顽固的拒绝,拒绝放弃一个错误的信念。不管怎样,这是人们如何做决定的重要部分,包括本文的读者和作者。
在你的分析方法中忽略这一事实将是一个错误。仅仅以符合逻辑的方式陈述事实是不够的。你还必须向直觉提出一个论点,而直觉只对一件事做出反应:情绪。
现在,这个词对大多数分析师来说是一个亵渎的词,因为我们最不想做的事情就是情绪操纵。然而,情感在可视化中的作用不是操纵,而是展示真实的事情和它们为什么重要。分析的目标是发现洞察力和从而让人们采取不同的行动。为了让他们采取行动,他们必须觉得这样做很重要。视觉化可以让他们感觉到。
关于如何将这些想法付诸实践,有很多话要说,但为了节省时间,让我们简要地谈一谈这样做的三种方法。
1。为了让大家知道,我们展示了
如果你是一名数据分析师,并且你还没有在你的可视化技能上做一点点投资,那么你有一个扩大你的受众和影响力的好机会。在你的个人发展计划中把形象化放在首位。你不必成为一名艺术家——只要遵循一些基本原则,任何人都可以胜任。挑一两本书开始读。如果你需要推荐信,爱德华·塔夫特或斯蒂芬·诺的任何一本书都是不错的起点。
2。不要本末倒置
为所回答的问题使用正确的视觉隐喻。一个常见的错误是在理解要解决的问题之前就开始构建图表。某些类型的问题最好用某些类型的视觉隐喻来回答。所以,从问题开始,密切注意正在使用的单词,并将其与适当的隐喻相匹配。
例如,如果问题是“多少…?”或者“最大的是什么…?”,然后用一个大小和排名的比喻,比如条形图。像嫌疑犯队列一样并排比较多个物体的长度或高度对人们来说很容易做到,特别是当等级排序时。
如果问题是“什么是趋势?”,然后用一个时间的比喻,比如折线图。人们倾向于认为时间在水平面上从左向右移动。当看到 x 轴上有日期的连续折线图时,他们会直观而迅速地理解他们正在看一条时间线。
如果问题是“在哪里…?”或者“之间的路径是什么?”,然后用一个位置的比喻。在这里,2D 地图是显而易见的选择。但是,一个常见的错误是,仅仅因为题目涉及地理,就认为问题本身就是地理问题。问题,“哪个地区的销量最多?”这看起来像是一个地理问题,但实际上是一个规模和排名问题。虽然地图擅长显示事物与其他事物之间的关系,但它们却不擅长显示相对大小和等级。在这种情况下,最好使用条形图或其他与尺寸相关的图表。
当然,还有许多其他类型的问题和视觉隐喻可以探索,但这几个例子应该可以让你知道如何选择人们可以直观理解的图表。
3。加一点剧情
可视化的一个关键优势是,它可以显示什么是重要的,这在处理“直觉”时至关重要。如果它很重要,它应该跳出页面,这样做的方法是创造视觉对比。
一种方法是用色。真正明亮的东西会引起注意,尤其是当周围的颜色变得柔和时。不同的颜色也能唤起不同的情感。红色、橙色和黄色等暖色倾向于表示更强烈的情绪,如兴奋、活力和恐惧。像蓝色和绿色这样的冷色调往往意味着积极和冷静。因此,在你的视觉效果中使用颜色向用户表明在哪里看和如何感受。
作者图片
另一种增加戏剧性的方法是用的尺寸。比周围物体大得多的物体最先被注意到。当视觉中的某个东西很大时,观众不仅首先看到它,而且他们还会直观地理解它的重要性。同样,目标是对比度,所以做稍微大一点的东西是不够的。如果它很重要,它需要大得多。
作者图片
如果你是一名数据分析师,你可能会花很多时间观察数字,识别模式,并得出结论。你习惯于密集的表格和统计模型,但是你的观众可能不习惯。你需要一种方法让你的作品更容易理解。可视化会有所帮助。
如果你是一名可视化实践者,你已经购买了可视化的能力,将分析带入生活,但你可能会与创建比满桌子数字更有洞察力的可视化的持续挑战作斗争。努力把你的视觉效果和你的观众直观得到的东西更好地联系起来。
分析很重要,但如果人们不理解或不关心它,它就没有多大用处。要构建出色的分析,就要让它清晰、有意义,并通过可视化让它恰到好处。
Dan 是 Aspirent Consulting 视觉分析的实践主管。他在金融、商业分析和可视化方面拥有超过 15 年的经验,曾在家得宝、可口可乐和 Mattel 等财富 500 强公司工作。
我在 2019 年进行的好的、坏的和丑陋的幻想足球交易
另外,你应该做那个交易吗?用我的工具找出答案。
我们能握握手吗?在第三周用阿伦罗杰斯换拉塞尔威尔逊将会是一笔非常好的交易。尽管罗杰斯在整个赛季都有一些重要的比赛,但威尔逊在本赛季剩下的比赛中总得分为 273 分,而罗杰斯为 235 分,每周净增加 2.7 分。
随着 2019 年梦幻足球赛季的到来,是时候回顾一下我们本赛季所做的好的、坏的和丑陋的交易了。
为了帮助这个练习,我建立了一个工具,根据参与交易的每个球员在赛季剩余时间里的表现,对每笔交易进行数学评分。
复制一份我的交易评估表,输入你在整个赛季中的所有交易,从数学上看,这些交易的结果,包括你的“交易等级”A+到 f。
使用交易评估员在第 3 周用 Aaron Rodgers 换 Russell Wilson 的交易中获得 A 级。
如何使用交易评估工具
- 复制一份交易评估员电子表格。(需要谷歌账号;没有谷歌账户?在此处查看电子表格并下载文件>以在 Excel 或您选择的电子表格程序中查看。注意:格式化可能会有点不稳定。)
- 在单元格 B1 中,选择赛季的最后一周,16 或 17,取决于您的联盟何时举行锦标赛。这将确保该工具不会在你的冠军周之后计算任何积分。
- 在单元格 B2,选择您的联赛的得分格式:PPR,半 PPR,或标准。
- 在单元格 B3 中,选择您的联盟中的球队数量。
- 在单元格 B5-B7 和 F5-F7 中,输入每个位置的首发球员人数。
- 在单元格 F8 中,输入 flex+板凳球员的人数。在最后三个步骤中输入的数据用于确定替补级别的球员价值,以更好地评估不同位置之间的交易。
- 从第 20 行开始,在 A 列中输入您交易的球员,在 b 列中输入交易后的一周。该工具将自动计算该球员在交易后的一周与赛季结束之间累积的梦幻点数,以及该周该位置的平均替补级别球员的相同点数,并为被交易的球员生成每周替换值(VOR) 。这一步对于准确评估不同头寸的交易很重要,例如,交易一个你可以更容易找到替代玩家的 QB,交易一个好的替代玩家可能更稀缺的 RB。
- 在 I 列中,输入您在交易中收到的球员,并在 j 列中输入交易后的一周。该工具将计算与上一步相同的统计数据,并为每次一对一交易提供一个等级。
- 继续前面的两个步骤,直到你整个赛季的所有交易都被输入。
- 在单元格 A9 和 A10 中查看您的总体交易等级和汇总。
案例研究:评估我的 2019 年交易
在我的 2019 年主场联赛中,我对 6 名球员进行了 3 次交易:
- 从第四周开始,T3,我用亚伦罗杰斯换来了马特·莱恩**。**
- 从第四周开始,我用乔·米克森换了亚伦·琼斯,用菲利普·林赛换了达米恩·威廉姆斯,用维京人 D/ST 换了爱国者 D/ST 。
- 从第五周开始,我用梅森·克罗斯比和 T21 换来了格雷格·祖莱因,用小奥德尔·贝克汉姆换来了阿马里·库珀。
交易#1:亚伦·罗杰斯换马特·莱恩
贸易等级:C
亚伦罗杰斯挣扎着走出大门,平均每场比赛得到 13.5 分。一些人质疑他是否秘密受伤,或者仅仅是他的比赛生涯结束了。与此同时,马特·莱恩的表现要好得多,场均 22.1 分。鉴于罗杰斯的季前赛排名和名字的价值,我提出用他来交换瑞安,我的对手接受了。
交易看起来很好,直到第 7 周,当瑞安受伤离开比赛,只有 3.6 分。雪上加霜的是,罗杰斯在第七周打出了今年最大的表现,以 43.8 分排名第一。
瑞安在第 8 周缺阵,从未真正恢复状态,在赛季的最后 6 周只有一次得分超过 20 分。罗杰斯有时在比赛中挣扎,但在第七周之后仍然打出了两场 25 分以上的比赛。
交易#2a:乔·米克森换阿伦·琼斯
贸易等级:A+
这将是我本赛季最好的交易。我甚至不想交易琼斯,但在赛季糟糕的开局后,我想摆脱米森。当我的对手提出琼斯时,我认为这是一笔好交易;琼斯在赛季的前几周表现得更好。
这种不平衡将持续到赛季的大部分时间,琼斯给出了五个(!!)25+ PPR 积分游戏,平均每周 21.1 分,而 Mixon 在第 14 周仅有 25+积分游戏,平均每周 14 分。
这笔交易将在整个赛季中给我带来每周 7.1 分的巨大优势。
交易#2b:菲利普林赛换达米恩威廉姆斯
贸易级:D
在同一个交易组,我也经历了本赛季最糟糕的交易。虽然林赛在 2019 年没有占据主导地位(只有一场 20+分的比赛,在第 5 周),但坏运气将在第 11 周因肋骨受伤而袭击威廉姆斯,他将仅以 2.3 分的成绩离开比赛,直到第 16 周才回来,此时我已经把他从我的阵容中删除了。
这个交易会让我每周损失 5 个点。
交易#2c:维京人 D/ST 换爱国者 D/ST
贸易等级:A
爱国者队的防守最终将成为历史上伟大的防守,尽管他们的前三周令人难以置信,但我想我的对手怀疑回归到均值,并愿意为维京人队在季前赛中排名很高的防守让路。
对我来说幸运的是,爱国者队将继续他们的统治地位,在第 4 周和第 8 周之间的未来 5 场比赛中的 4 场比赛中获得 20+分。他们在赛季的后半段确实回归到了平均水平,从第 9 周开始到赛季的剩余时间,他们与维京人的交易都很糟糕,但在赛季前半段的那些可怕的几周却是一笔很好的交易。
交易#3a:梅森·克罗斯比换格雷格·祖莱因
贸易等级:C+
作为我今年最后一次交易的一部分,在第五周,我交易了排名第一的踢球者。这笔交易没有做太多,因为格雷格腿最终得到 74 分,而克罗斯比在赛季剩余时间里得到 76 分,这基本上使这笔交易变得无用,尽管鉴于我在赛季剩余时间里的踢球方式,这没有多大关系。
交易#3b:小奥德尔·贝克汉姆换阿马里·库珀
贸易等级:A
我几乎没有提出这个交易,但我很高兴我提出了,我的对手接受了。OBJ 在赛季初的表现远远低于预期,但由于其名字的价值,我想我可以进行交易。库珀似乎是一个合理的风险回报选择,幸运的是,对我来说,这是一个正确的决定。尽管在赛季的后半段出现了一些严重的不一致,库珀在本赛季的剩余时间里继续为 PPR 贡献 159.1 分,为 OBJ 的 126.4 分,每周净得+3 分。
总体贸易评估
贸易等级:A-
总的来说,我做了一些很好的交易,因为我的交易,每周理论上赚了 8.5 个点。当然,我没有每周都和我交易的每一个球员比赛,但是这确实证实了我今年表现不错的感觉。
我的总交易等级 : A-
交易评估员限制
虽然交易评估器是一个很好的工具来判断你是否应该进行交易,但请记住以下几点:
- 交易评估员在赛季期间每周分析一名球员在交易后的表现,但你不太可能每周开始这名球员,甚至不太可能将这名球员留在你的名册上。也就是说,可以合理地假设,当你进行交易时,你是在赌你得到的球员比你在赛季剩余时间里交易走的球员平均水平更高。
- 交易评估员不考虑交易如何改善你的团队和/或你对手的团队。例如,如果你在某个位置很深,这可能比交易评估员建议的用那个位置的一个玩家换一个你弱的位置的玩家更有利。
- 交易评估员根据 FantasyPros 的 PPR、半 PPR 和标准评分格式的幻想领袖指标计算业绩。因此,该工具不包括您的联盟可能使用的非标准得分和/或奖励积分,但它仍然应该是对赛季过程中交易价值的相当准确的评估。
- 交易评估者计算每周获得/失去的点数,不考虑玩的游戏或周数,所以统计是准确的,但可能与考虑玩的游戏或周数的其他来源不同。
- 交易评估员对 K 列中的每笔交易进行一对一的比较,不考虑非偶数的交易(例如,用一名球员交换两名球员),但总体分数和评估仍然是准确的。请注意,非偶数交易通常用于释放席位或购买彩票,因此最终的计算可能不代表这些策略的无形收益。
- 交易评估工具是一个面向后的工具,用来回顾性地评估交易。对于季节内交易分析,可以考虑使用 FantasyPro 的免费或高级交易工具,或者考虑阅读 Reddit 上提到的方法,点击这里或点击这里。我可能会探索创建自己的季节性交易分析工具;关注我以获得新帖子的通知!
在你走之前
2019 梦幻足球赛季,你有哪些好的、坏的、难看的交易?下面评论让我知道!
如果你喜欢这篇文章,你可能也会喜欢我的其他关于体育和数据的文章——给我一个关注,当我发布更多的文章时会通知我!:
- 我如何战胜了一个 538 预测算法
- 我如何利用 200 名专家和 Reddit 的评论排名算法赢得我的 Office NFL Pick’em Pool
- 我如何正确预测比利亚诺瓦赢得 2018 年 NCAA 男篮锦标赛
传统的梯度推进
梯度助推器
梯度推进的数学入门
2001 年,杰罗姆·h·弗里德曼写了一篇开创性的论文——贪婪函数逼近:梯度推进机。他一点也不知道这将演变成一类方法,威胁到表格世界中沃伯特的没有免费的午餐定理。Gradient Boosting 及其同类产品(XGBoost 和 LightGBM)在分类和表格数据领域的回归问题上表现出色,已经征服了世界。
不尽然!(来源:我自己古怪的大脑)
让我们从理解弗里德曼提出的经典梯度推进方法开始。尽管这是一个数学难题,但也没那么难。只要有可能,我都试图对正在发生的事情提供直觉。
问题设置
假设有一个数据集 D 有 n 个样本。每个样本在向量 x 和实值目标 y 中具有 m 组特征。形式上,它被写成
现在,梯度推进算法是一种采用加法形式的集成方法。直觉告诉我们,我们试图估算的复杂函数可以由更小更简单的函数相加而成。
假设我们试图逼近的函数是
我们可以把这个函数分解为:
这是我们在选择加性集成模型时采用的假设,并且我们在讨论梯度增强时通常谈到的树集成可以写成如下:
其中 M 是基础学习器的数量,F 是回归树的空间。
损失函数
其中 l 为可微凸损失函数 f(x)。
因为我们在寻找 f(x)的加法函数形式,我们可以用以下等式代替 yᵢ
所以,损失函数将变成:
算法
- 通过最小化损失函数,用常数值初始化模型
- b₀是在第 0 次迭代时最小化损失函数的模型的预测
- 对于平方误差损失,它是所有训练样本的平均值
- 对于最小绝对偏差损失,它是所有训练样本的中间值
2.对于 m=1 至 M:
2.1 计算
- rᵢₘ 只不过是损失函数(在真实值和来自最后一次迭代的输出之间)的导数 w.r.t. F(x) 来自最后一次迭代
- 对于平方误差损失,这就是残差*(观察值—预测值)*
- 它也被称为伪残差,因为它的行为类似于残差,并且它是平方误差损失函数的残差
- 我们为所有的 n 个样本计算 rᵢₘ
2.2 使用基尼系数或熵(通常的方法)将回归树拟合到 rᵢₘ 值
- 对于 j = 1……Jₘ,树的每片叶子由 Rⱼₘ表示,其中 jₘ是在迭代 m 中创建的树的叶子数量
2.3 对于 j = 1 … Jₘ,计算
- bⱼₘ是基函数或最小平方系数。这可以方便地计算出任何叶中所有样本的平均误差损失和最小绝对偏差损失的中值
- ρₘ是叶重的比例因子。
- 由于回归树的不相交性质,可以忽略 b 上的内部求和。一个特殊的样本只会出现在其中一片叶子上。因此,等式简化为:
- 因此,对于每片叶子,Rⱼₘ,我们计算最佳值ρ,当加入到最后一次迭代的预测中时,最小化驻留在叶子中的样本的损失
- 对于已知的损失函数,如平方误差损失和最小绝对偏差损失,比例因子为 1。正因为如此,标准 GBM 实施忽略了比例因子。
- 对于一些损耗,如 Huber 损耗,使用线搜索找到最小损耗来估算ρ。
2.4 更新
- 现在,我们将最新的优化树添加到上一次迭代的结果中。
- η是收缩率或学习率
- 等式中的求和仅在特定样本出现在多个节点的极小概率情况下有用。否则只是优化后的回归树得分 b 。
正规化
在标准实现(Sci-kit Learn)中,没有实现目标函数中的正则化项。在那里实施的唯一正规化如下:
- 收缩正则化 —在加法公式中,每个新的弱学习器被“收缩”一个因子η。在某些实现中,这种收缩也被称为学习速率,因为它类似于神经网络中的学习速率。
- 行子采样 —集合中的每个候选树使用样本子集。这具有规则化的效果。
- 列子采样 —集合中的每个候选树使用一个特征子集。这也有一个正则化的效果,通常更有效。这也有助于并行化。
梯度推进和梯度下降
相似之处
我们知道梯度推进是一个加法模型,可以表示如下:
其中 F 是集成模型, f 是弱学习器, η 是学习率, X 是输入向量。
用 y^代替 f,我们得到熟悉的等式,
现在,由于 fₘ(X) 是通过最小化损失函数在每次迭代中获得的,损失函数是一阶和二阶梯度(导数)的函数,我们可以直观地将其视为指向最陡下降的方向向量。让我们称这个方向向量为 rₘ₋₁.下标是 m-1,因为向量已经在迭代的阶段 m-1 被训练。或者,直觉上的剩余
。所以等式现在变成了:
翻转标志,我们得到:
现在让我们看看标准的梯度下降方程:
我们可以清楚地看到相似之处。这个结果使我们能够使用任何可微损失函数。
差别
当我们使用梯度下降来训练神经网络时,它试图找到最佳参数(权重和偏差),,这使得损失函数最小化。这是利用损耗相对于参数的梯度来完成的。
但是在梯度提升中,梯度仅调整创建集成的方式,而不调整底层基本学习器的参数。
而在神经网络中,梯度直接给出了损失函数的方向向量,在 Boosting 中,我们只能从弱学习器中得到该方向向量的近似。因此,GBM 的损耗只可能单调减少。随着迭代的进行,损耗完全有可能跳跃一点。
履行
Sci-kit Learn 中的GradientBoostingClassifier和GradientBoostingRegressor是 python 生态系统中最早的实现之一。这是一个直截了当的实现,忠实于原始文档。我很清楚我们之前的讨论。它已经实现了多种损失函数,其中贪婪函数近似:Friedman 的梯度推进机*【1】已经导出了算法。*
回归损失
- ls’→最小二乘法
- lad’→最小绝对偏差
- “胡伯”→胡伯损失
- 分位数→分位数损失
分类损失
- “偏差”→逻辑回归损失
- “指数”→指数损失
参考
- 贪婪函数近似:一种梯度推进机器。安。统计学家。29 (2001 年),第 5 号,1189-1232。
原载于 2020 年 2 月 2 日 http://deep-and-shallow.com。**
好的、坏的和丑陋的:监督的、非监督的和强化学习
机器学习三巨头的应用、实践和商业见解
图片来自 Unsplash
亲爱的读者你好!在你将要阅读的文章中,我将以一种非常简单的方式讲述机器学习中的三种主要学习类型:监督学习、非监督学习和强化学习。
由于有数以百万计的帖子讨论这三者之间的差异、它们可以在哪里使用以及所有典型的主题,我将尝试更进一步,以一种新颖的方式探索它们,从行业和商业的角度给出我的观点,并加入一点幽默,同时也巧妙地解释它们各自的内容。
我们走吧!
好处:监督学习
监督学习。自制图像。来自 FlatIcon 和 DLpng 的图标。
大家都喜欢的家伙。多亏了他,你的语音助手可以给你打电话,让优步在晚上来接你。他可以对你网站的访问者进行排名,这样你就可以很容易地看出谁更有可能购买你出售的漂亮太阳镜,并针对他们开展营销活动。他让你可以通过按 tab 键和自动补全句子来轻松回复邮件。他预测房价,以便真正的国有企业可以调整报价,获取最大利润。
监督学习是根据数据进行预测。从他能完成的令人敬畏的任务来看,他可能看起来非常聪明,然而,如果他能做到这一切,那是因为他学会了使用数据,这些数据有一条宝贵的,有时很难得到的信息:标签。
不,不是你衣服上的标签。这些标签更有价值。它们是告诉监督学习算法它们稍后将试图预测的确切变量的信息片段。
例如,如果我们希望监督学习来预测房价,我们需要使用这些房屋的特征(平方米、房间、楼层、浴室等)以及最重要的变量(我们希望稍后预测的变量:房价)来训练它。
我们伟大的监督学习被用来进行预测,比如:
- 使用我们上面提到的房屋特征来预测房价。
- 使用诸如时间戳、供应商、花费的钱和以前的交易等特征来预测交易是否是欺诈性的。
- 使用我们感兴趣的时间段的先前销售、趋势和特征来预测未来销售。
- 使用您之前键入的单词预测您将要键入的下一个单词。
- 还有很多很多…
然而,只有在训练阶段向监督学习提供与它稍后将尝试预测的信息相同的信息时,这些预测才会发生,在前面的四个示例中,这些信息是:房价、识别的欺诈性和非欺诈性交易、在前面的时间段中测量的销售注册表,以及在自动完成示例中的大文本单词集。
这种信息有时是昂贵的、不可用的或不可能获得的,这是监督学习的主要缺点。
目前,机器学习模型提供的大部分经济价值都来自于这个学习家族。Garnet states 高级主任分析师 Saniye Alabeyi:
“到 2022 年,监督学习仍将是企业 IT 领导者使用最多的 ML 类型”
之所以如此,是因为它在许多相关的商业场景中提供了价值,从欺诈检测到销售预测或库存优化。
然而,监督学习可能并不总是最适合某些问题。这就是它的坏弟弟出现的地方:无监督学习。
坏处:无人监督的学习
还记得监督学习的主要问题吗?昂贵而有价值的标签?嗯,无监督学习在某种程度上解决了这个问题。
他的主要技能是他可以对数据进行分段、分组和聚类而完全不需要这些烦人的标签。他知道如何根据顾客的购买行为对他们进行分组,根据他们的特征区分不同的房子,或者在一组数据中发现异常。他还能够降低我们数据的维度。
主要的好处是,它可以通过找到不同组共有的模式来对数据进行分组和分段,而不需要这些数据有特定的标签。
在我们的住房例子中,我们将在无监督的情况下学习我们的整个数据集(没有房价),它会告诉我们类似这样的事情:“嘿,这里有 5 组主要的房子”:
- 有花园和小水池的房子,可容纳 5 人以上,通常位于良好的社区。
- 小公寓,有一对夫妇的空间,一个美式厨房和一个小阳台。
- 宽阔的底层空间,非常小的房间看起来像商店。
- 超过 500 平方米的公寓,有许多房间,4 个以上的浴室,一个餐厅和一个烟囱。
- 没有电梯的楼房里一对夫妇的最后一层公寓:不要给爷爷奶奶买这个!
这看起来很酷也很简单,但并不像看起来那么简单。
无监督算法的输出或响应实际上不是一系列类似于前面的文本,而是具有其特征和 5 个不同组的数据。这取决于我们去观察不同的群体,并为他们提取出房屋的共同特征,这些特征使得我们能够创作出之前的文本。
我们必须自己分析结果,并从中提取有价值的见解。目前,与监督学习相比,无监督学习在工业和商业应用中的影响范围更小,但它仍然能够提供不错的商业价值,并且越来越受欢迎。
最后,我们有承诺,丑陋的表弟,已经取得了一些惊人的成就,但仍然被许多人视为害群之马:强化学习。
丑陋:强化学习
强化学习是一种不同的家伙。他在几乎没有以前数据的情况下工作,但仍然成功地创造了一些惊人的记录,比如在国际象棋和电子游戏中击败人类专家,或者教机器人如何在不同的环境中移动。
他通过使用惩罚-奖励系统、最终目标和政策学会了做这一切。知道了自己想要达到的目标,他就按照自己所学的政策去行动,并得到积极或消极的奖励。然后,根据该奖励更新策略。
以国际象棋为例。国际象棋强化学习模型从一个非常基本的策略开始,目标是让对手的国王进行对弈,并在对弈中保护自己的国王。这个大的最终目标,可以分成更小的更短期的目标,比如不要抓住他的棋子,尽可能多地抓住对手的棋子,或者控制棋盘的中心。
随着算法玩的次数越来越多,并因某些行为而受到惩罚和奖励,它将强化那些导致它获得奖励的行为(因此得名强化学习)。
在游戏领域,这类算法已经出类拔萃。让我们试着找出原因。
据说,要成为某个主题的专家,你必须投入大约 1000 个小时。擅长电子游戏、国际象棋或其他类似任务的人,除了有天生的能力外,还会为了达到精通而投入大量的时间。一局接一局的下棋,日复一日,必然会让你变得更好。
然而,你一天可以下的棋数是有限的。每天只有 24 小时,你只能以一定的速度玩:首先,你必须在玩的时候思考,然后你必须吃饭,睡觉,照顾好自己。
一个使用强化学习的软件,不用睡觉,不用吃饭,玩得多,比一个人快得多。通过这样做,并让强化学习系统与自己比赛,他们可以达到出色的表现,这使他们能够在许多游戏中击败最好的人类玩家。
虽然强化学习看起来很酷,但它仍然有有限的实际应用:因为我们之前讨论过,强化学习最好用在可以完全模拟的领域,比如游戏,这使得它在商业领域的影响力非常有限。然而,这是一个研究快速增长的学习家族,对于机器人或自动驾驶汽车等任务来说,这是非常有前途的。
结论
在这篇文章中,我们已经看到了机器学习家族的三个主要成员中的每一个都可以做得最好。这个家族中还有其他成员,比如半监督学习,或自我监督学习,但我们将在未来谈论这些。
监督学习、非监督学习和强化学习可以而且应该用来完成不同种类的任务。没有解决所有问题的灵丹妙药,不同性质的问题需要使用不同的工具来解决。
尽管它们在商业和工业用途上存在差异,但所有这三个分支都与构建高效和高价值的人工智能应用非常相关,并且它们越来越多地同时用于解决极其复杂的任务和应对新的挑战。
就是它!一如既往,我希望你 **喜欢这个职位。关于机器学习的更多资源, 看看这个牛逼的博客 !
谷歌商业分析师访谈
图片来自 Unsplash
介绍
谷歌,美国科技巨头,拥有从操作系统(Android,Chrome OS)到移动和桌面应用(Google Chrome,Google Adwords 等)的互联网相关产品和服务。)以及从硬件(Google Nexus line)到类似 Google Cloud、Youtube TV 等服务。
该公司成立于 1998 年,总部位于加州山景城。谷歌的企业使命是“组织世界上的信息,并使其普遍可用和有用”,而这只有通过数据才有可能实现。
数据对谷歌很重要,这也是他们在全球拥有和运营 20 多个数据中心的原因。谷歌每天处理超过 35.5 亿个搜索查询,每天观看 50 亿个 Youtube 视频,是“世界上数据最丰富的公司”之一,也是数据分析师、数据科学家和业务分析师发展职业生涯的最佳场所。
谷歌的商业分析师角色
图片来自 Pixabay
谷歌的商业分析师分析数据,得出不同的见解,推动产品的商业决策,回答诸如“我们如何让产品更好?”以及“用户喜欢产品的什么?”。
谷歌拥有强大的数据文化,业务分析师利用这些数据来指导和推动业务决策。根据分析师被分配到的团队,角色可能略有不同,但在谷歌的总体角色范围从确定解决方案和新的业务见解,到广泛的数据分析和预测建模,再到需求管理和向相关利益相关方传达见解。
对亚马逊等类似公司的业务分析师职位感兴趣? 在面试查询上查看“亚马逊商业分析师面试”!
所需技能
谷歌商业分析师的角色需要专业领域和丰富的行业经验。因此,谷歌只雇用在定量分析、咨询或任何相关数据驱动的业务职位方面至少有 4 年(高级职位 7 年以上)行业经验的最合格的申请人。
其他基本资格包括:
- 数学、统计学、计算机科学、物理学、工程学、运筹学、经济学、工程学学士(MBA、硕士或博士优先)或同等的实践经验。
- 熟悉关系数据库,包括 SQL、MySQL、MapReduce 查询、数据库定义、模式设计和商业智能工具。
- 对脚本语言(如 PHP、Python、R、Perl、Java 等)有基本的了解。)以及 R、SAS、Matlab、Numpy/Pandas 等统计软件。
- 具有从各种结构化和非结构化数据源中提取、采样和可视化大型数据集,以及编写和维护提取、转换、加载(ETL)的经验。
- 具有与工程和业务团队跨职能合作的经验。
谷歌的商业分析师团队
“谷歌现在是,将来也永远是一家工程公司”,因此,数据驱动着谷歌的业务决策。数据科学是谷歌文化的核心,应用于公司的各个方面。
为了强调数据科学对谷歌的重要性,他们创建了一个“人员分析部门”,以协助公司的人力资源决策过程,包括根据对绩效评估数据的分析,决定经理或团队成员是否对团队的绩效产生影响。数据和合理的商业决策之间的差距是由商业分析师弥合的,他们深入挖掘谷歌的数据以提供合理的见解。
根据所分配的团队,谷歌业务分析师的角色可能包括:
- **谷歌云:**这个团队帮助谷歌的客户,比如学校、政府机构、公司等。,通过使用谷歌的全球数据中心和软件资产来转变和发展他们的业务,使他们更具生产力、移动性和协作性。该团队中的业务分析师与高级销售领导合作,提供可操作的见解,提高决策能力,并通过数据驱动的方法加深对谷歌快速增长的业务的理解。
- YouTube Trust & Safety: 这个团队致力于让 YouTube 成为一个安全的地方,让世界各地的用户、观众和内容创作者能够创作和表达自己。担任此角色的业务分析师利用高级数据分析和预测模型来确定提高运营效率的关键影响因素,并与各种利益团队进行跨职能协作,以实施可扩展的解决方案,从而进一步优化运营指标。
- **YouTube Insights,Impact &工具:**该团队支持 YouTube 业务和运营团队以及其他内部合作伙伴,为严格的数据洞察提供数据基础设施、工具和分析支持,构建改变 YouTube 业务团队工作方式的解决方案和服务。分析师还与业务利益相关者合作,以了解他们的业务领域并构建业务需求,与数据基础设施连接以构建满足这些需求所需的管道、数据集和工作流。
- **业务系统集成:**这个团队识别谷歌内部合作伙伴内部耗时的内部流程,然后构建可靠的解决方案,这些解决方案具有足够的可扩展性,能够与公司的规模和范围相适应。他们还从头开始设计和开发创新的推荐系统,以促进业务增长,将科学应用于销售,并提高销售团队的生产力。
- **gTech 的用户和产品(gUP)😗*gUP 团队构建了创新的解决方案,将谷歌的用户体验和参与度提升到一个全新的水平,支持不同产品、国家、文化、收入和身份的用户。guP 通过数据建模、指标开发、数据原型和使用统计技术对谷歌用户的复杂数据进行洞察,帮助用户充分利用谷歌。
- **销售和销售运营:**该团队利用高级数据分析,持续管理关键数据指标的审核,以指导决策制定,并提高可扩展性和效率。分析师与销售、营销、财务、法律和运营团队进行跨职能协作,积极交付标准流程,促进和支持销售模型并简化服务。
- Google Pay: 该团队通过与银行/支付生态系统的各个方面(包括网络、发行商、网关和金融技术)合作和互动,为 Google 用户开发和实施安全便捷的支付系统。其他职责包括通过启动项目来收集和分析端到端流程,以开发全面的、以数据为基础的战略问题评估,从而推动谷歌所有货币化产品的增长。
面试过程
来自 Pixabay 的 Googleplex office 图片
谷歌商业分析师面试就像其他谷歌面试流程一样。首先是对招聘人员的在线电话面试,然后是对经理的技术筛选面试。技术面试后,招聘人员将安排现场面试,包括三到四轮一对一的面试,中间有午餐休息时间。
要更熟悉谷歌的面试流程,请在面试查询中阅读“谷歌数据科学家面试”!
初始屏幕
这是招聘人员或人力资源的第一步面试,主要是试探性的。在这个长达 45 分钟的面试中,招聘人员会问一些关于你相关的过去经历和项目的问题,尤其是那些涉及 SQL 的问题。招聘人员还将提供对公司、工作角色和公司工作文化的见解。
注意:在这次面试中,你应该用一个故事或经历来回答每个问题,用真实的例子和数据来证明你适合这个角色。
样题:
- 描述一个你做过的数据项目。
- 说说你自己吧。
- 描述一个你引以为豪的涉及统计学实践的项目。
技术屏幕
谷歌的商业分析师技术屏幕遵循与大多数谷歌技术面试几乎相同的协议。标准的基于案例的 SQL 问题被问到,候选人被要求在一个共享的谷歌文档上写 SQL 查询。
问题是标准化的,所以解决来自面试查询的 SQL 问题可以更好地为这次面试做准备。
要了解类似角色所提 SQL 问题类型的更多信息, 请查看关于面试查询的“产品分析师面试问答”文章!
现场面试
业务分析师现场访谈包括与经理、产品专家和业务分析师的三轮访谈,持续时间在 30 到 45 分钟之间。
谷歌面试候选人的评估基于四个一般属性:“一般认知能力、领导力、角色相关知识和谷歌度”。每一个面试问题都围绕着这四个基本属性,候选人应该相应地设计他们的答案。
谷歌商业分析师现场面试的时间表如下:
1.技术面试
这是对一位经理的采访,问题是基于案例的标准 SQL 问题。
2.产品感访谈
3.领导力/行为面试
4.谷歌面试
注意事项和提示
谷歌的业务分析师面试评估候选人利用数据分析来识别关键业务见解、提供解决方案以及帮助做出合理的战略性商业决策的能力。面试问题主要涵盖概念层面的数据科学知识、预测建模、指标和战略定义,以及与利益相关方交流见解的能力。重温你的描述性分析、统计和概率、时间序列、回归和预测模型的知识。
谷歌商业分析师面试问题:
- 在改进现有产品方面,你会给管理层什么建议?依据是什么?
- 你如何衡量一个用户的价值?
- 如果你是一家花店的老板,你会如何在网上锁定你的顾客?(谁?什么时候?在哪里?怎么会?)
- 您熟悉哪种类型的 SQL 连接?
- 你的 ETL 和 OLAP 经验是什么?
- 你用过哪些 DB 和可视化工具?
- 列出几个 SQL 分析函数。
- 给我一个你领导过的项目的例子。结果如何?你遇到了哪些困难?
- 如果你正在建立一个新的电子商务企业,你会关注什么?
- 你将如何建立一个专利系统?
- 说出一个你使用的谷歌产品,你会对它做什么改变?你会如何改进它?
- 用三句话向孩子描述 AdWords。
感谢阅读
- 如果你想为面试做准备,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多面试准备资源,如 谷歌数据分析师面试 和 亚马逊商业分析师面试 。
原载于 2020 年 8 月 1 日https://www.interviewquery.com。
谷歌数据分析师访谈
谷歌数据分析师面试问题
图片来自 Unsplash
介绍
谷歌公司。是一家美国科技巨头,提供基于行业的解决方案。作为一家以“一键访问世界信息”而自豪的公司,谷歌提供了一长串的产品和服务,包括庞大的硬件组合、互联网搜索引擎、网络电子邮件服务、软件解决方案、网络分析和人工智能。
正如他们在数据和数据基础设施方面的大量投资所证明的那样,谷歌明白数据对于了解客户需求和推动业务增长的重要性。
谷歌的数据分析师角色
图片来自 Pixabay
一般来说,数据分析师角色需要从各种数据源中检索、收集和组织数据,此外还要使用这些信息为业务决策提供有意义的见解。该角色根据收集的数据类型以及项目类型而有所不同。
在谷歌,数据分析师包括所有这些职责,甚至更多。该职位要求分析师不仅要了解数据分析的定量方面,还要了解业务影响以及每个指标如何影响谷歌的底线。因此,谷歌的分析师也将与营销团队密切合作,分析和报告谷歌产品和服务的绩效指数,与工程团队合作,根据谷歌的内部数据创建高性能的量化商业模型,并将相关的商业发现传达给各级管理层。
有兴趣在一家与谷歌规模相似的公司成为数据分析师吗? 在面试查询上查看“亚马逊数据分析师面试”!
所需技能
谷歌的数据分析师角色需要高水平的领域资格和丰富的行业经验,这为招聘设定了非常高的标准。他们只接受在数据分析或相关定量领域至少有三年行业经验的合格候选人。
其他相关标准包括:
- 计算机科学、数学、工程、经济、金融或同等实际经验的学士/硕士学位。
- 对时序分析、SQL、数据仓库、数据建模、ETL、仪表板自动化和报告有深刻的理解。
- 有使用 Python、R 和 Tableau 等数据可视化工具的经验。
- 具有脚本语言(Javascript、Python 等)的经验,对更高级的数据科学技术和方法(机器学习、R 等)有深刻的理解。
- 有将分析结果转化为业务建议和将业务问题转化为分析框架的经验。
谷歌的数据分析团队
图片来自 Unsplash
与商业分析师不同,谷歌的数据分析师通常更关注数据——特别是其收集、分析、可视化和呈现——为明智的商业决策提供可操作的见解和解决方案。
该职位的一般技能要求包括数学、统计、编程(SQL、Python 等)方面的背景知识,以及数据处理和分析方面的行业经验。
不管分配给哪个团队,角色都是分析的重点。具体职位取决于分配的团队和分配的项目类型。然而,谷歌的一般数据分析师角色范围从基本分析、建模、可视化和数据呈现,到轻型机器学习技术。
团队中特定角色的一些示例包括:
Waze: 分析师开发并自动化报告,为业务建议执行广泛的数据分析,并向多个层次的利益相关者提供有效的结果演示。他们还与谷歌的内部客户进行跨职能合作,以了解他们的业务需求,并制定端到端的分析,包括数据收集、分析、现有的可交付成果和演示。
**谷歌云:**该团队的数据分析师致力于利用谷歌的大数据,通过对复杂数据的全面扫描,推动对业务增长基准和趋势的可扩展分析。他们还为“区域和职能销售团队”提供来自这些数据的可扩展的洞察力和仪表板。
**人员分析:**该团队的分析师帮助推动数据治理,以确保不同数据库之间的数据完整性。他们致力于数据建模、开发和定义指标、执行原型制作,并通过高级商业智能技术生成商业见解。他们还管理数据可视化,并以清晰而有说服力的方式为多层次的利益相关者提供见解。
信任和安全:角色包括执行大规模分析和建模以确定改进机会,构建仪表板报告和高价值的自动化商业智能解决方案,以及开发关键绩效指标以监控增长。
**EMEA 销售分析团队:**该团队的数据分析师利用谷歌的大数据推动大规模分析以促进业务增长,执行复杂的分析以转化为可操作的见解,并与销售管理层合作构建可扩展的数据集、系统、仪表盘和分析,从而系统地支持销售组织。
你在寻找另一个数据分析师的职位吗?这个职位在许多不同的团队工作,而且是跨职能的? 阅读《脸书数据分析师访谈!
面试过程
图片来自 Unsplash
谷歌数据分析师面试流程遵循谷歌的标准技术面试程序。它始于与人力资源或招聘经理的第一次电话面试。然后,候选人进行现场面试,包括三轮一对一的面试,中间有午休时间。
像所有的谷歌招聘程序一样,面试将由高质量的问题组成,这些问题是专门为该职位和著名的谷歌四大特征量身定制的。
为了更好地熟悉谷歌的面试流程,我们建议回顾关于面试查询的“谷歌商业分析师面试”文章!
初始电话
谷歌数据分析师面试的第一个电话与谷歌所有标准的人力资源面试相似。在这里,面试官会问一些探索性的问题,旨在更多地了解你、你的兴趣、你过去与该职位相关的项目经验,以及你与团队中的工作角色相关的技能。面试官还会告诉你谷歌,谷歌的文化,你申请的团队,以及工作角色在预期能力方面的范围。
现场面试
谷歌的数据分析师现场面试由三到四次面试组成,每次持续约 45 分钟,面试人员包括招聘经理、团队经理和开发人员(以确定你的 SQL 和数据分析技能)。在这几轮面试之间有一个午休时间,应聘者可以与一位现任谷歌员工进行非正式交谈。
一般来说,谷歌数据分析师现场访谈是技术(标准 SQL 和统计)、产品感觉(关键指标定义)和文化契合度/行为评估的混合。
注意事项和提示
谷歌在所有的招聘面试中都使用标准化的问题。对于数据分析师的角色,候选人可能会遇到关于统计(尤其是中心极限定理、贝叶斯定理、条件和联合概率,以及指数、几何和二项式分布等基本分布)实验设计,以及大量 SQL (基本 SQL 查询、优先级、连接、聚合、过滤等)和 Python 问题。
记得复习你的统计和概率概念知识,包括回归、假设检验、最大似然估计和抽样。
对于 SQL 和 Python 部分,请访问访谈查询并练习大量 Google data analyst SQL 和 Python 问题。
谷歌数据分析师面试问题
- 你如何比较两个搜索引擎的性能?
- 你最喜欢的谷歌产品是什么?
- 你在以前的单位工作怎么样?
- 说说你自己吧。
- 如何设计一个遵循所有社区准则的在线社交网络平台?
- 描述一个非常困难的项目,告诉我你是如何解决的。
- 描述您使用过的任何数据清理技术。
感谢阅读
- 想要更多数据分析师面试资源?退房 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多数据分析师面试指南,如 亚马逊数据分析师面试 和 脸书数据分析师面试 。
原载于 2020 年 8 月 25 日 https://www.interviewquery.com。
谷歌数据科学家访谈
图片来自 Unsplash
谷歌是一家美国科技巨头,专注于互联网相关服务和产品,包括在线广告、搜索引擎、云计算、软件和硬件。该公司成立于 1998 年,总部设在加州山景城[1]。
自 2002 年成立以来,谷歌发展迅速,开发了广泛的产品,收购了许多公司,通过其在搜索领域的主导地位进入了主流文化。现在,谷歌已经扩展到大量的产品和服务,如办公套件应用程序、电子邮件客户端、云计算、视频聊天、android 等等。
鉴于谷歌提供的产品和服务过多,用户数量惊人,有人可能会问*谷歌到底处理了多少数据?*根据 2019 年的统计数据,谷歌平均每秒处理超过 40,000 次搜索查询,相当于全球每天超过 35 亿次搜索,每年 1.2 万亿次搜索[2]。对于谷歌来说,这提供了帮助其客户增长和扩展的无限机会,而对于数据科学家来说,这提供了一个用于分析和解释的信息宝库,以帮助谷歌及其客户识别机会,并塑造谷歌的业务和技术战略。
如果你对面试中的问题感兴趣,可以查看一下 谷歌数据科学面试问题 !
数据科学在谷歌的角色
谷歌的数据科学家在团队、产品和功能的广泛层面上工作,从增强广告效果到网络基础设施优化。
谷歌数据科学的角色主要是一个专注于指标和实验的分析角色。这与机器学习和产品分析师角色截然不同,后者也存在于谷歌,分别更侧重于工程和产品方面。在转向数据科学以吸引更多人才之前,谷歌的数据科学职位曾被称为定量分析师。
其他相关资格包括:
- 统计学、计算机科学、生物信息学、计算生物学、工程学、物理学、应用数学、经济学、运筹学或相关定量学科的硕士或博士学位,或同等的实践经验。
- 在统计软件方面有丰富的经验(如 MATLAB、Panda、Colab、S-Plus、SAS 等)。)、Python、R、C++和/或 Java 等编程语言,以及数据库语言(如 SQL)和管理系统方面的高级经验。
- 拥有大数据和云平台部署大规模数据科学解决方案的经验。
- 数据科学方面的经验,侧重于业务分析、设计和构建统计模型、可视化、机器学习、数字属性、预测、优化和预测分析
- 高级统计概念的知识和在大型数据集上机器学习的应用经验。
- 展示问题框架、问题解决、项目管理和人员管理技能。
所需技能
谷歌通常只雇佣在分析或相关领域有至少两到三年行业经验的有经验的人。谷歌确实为数据科学领域的实习和大学毕业生提供了计划,特别是为新的博士毕业生提供了更高级的职位。
谷歌的数据科学团队
从营销部门到谷歌研究的研究团队,数据科学家利用高级分析、机器学习理论以及统计概念和方法来确定产品开发和改善客户体验的机会。
Google land 的数据科学家最常见的团队是:
- **工程和设计:**应用高级分析并反复构建分析管道,以提供大规模洞察,同时与各种团队进行跨职能协作,以提供业务影响建议。
- **gTech 专业服务:**利用技术实施、优化和关键解决方案,帮助客户实现其广告业务目标。
- **谷歌地图核心指标:**开发核心指标和实验实践,定义如何衡量和测试谷歌地图的参与度、采用度和保留度。
- **地理:**在大型地理数据集上应用高级分析工具,构建分析管道并建立原型,研究和开发分析、预测和优化方法,并在各个级别提出业务建议。
- **运营和支持:**与工程师合作,分析、解释数据,开发衡量结果的指标,并将新工具集成到客户支持和运营中。
- **广告:**通过利用统计研究和机器学习概念,建立和扩展谷歌的广告能力。
- **搜索广告:**设计和分析复杂的实验,了解变化对系统的影响,并提供改进建议。与分析师和软件工程师(SWE)就核心算法进行合作,以改善客户体验。
- **业务战略:**通过与跨职能团队合作,了解他们的业务需求,提供有意义的战略建议。
谷歌面试流程
谷歌的面试流程始于招聘人员在你提交申请后,首先通过电子邮件向你发送一份预筛选问卷。然后你会接到招聘人员的电话,讨论你的兴趣和经历。面试结束后,招聘人员将安排一次与数据科学家或招聘经理的电话面试,时间通常为 45 至 60 分钟。完成这一部分后,将安排一次现场面试,包括五轮单独的面试。
初始屏幕
最初的屏幕通常是与招聘人员进行 30 分钟的电话面试,他们描述了工作职位、职责,然后是谷歌不同团队的例子,然后询问你是否愿意追求数据科学职位。在这次面试中,你可以和招聘人员交谈,招聘人员会更多地了解你的技能。
招聘人员主要是想弄清楚你的职业目标,看看这些目标如何与谷歌的文化和价值观以及他们能把你安排到的不同团队保持一致。
- 描述一个过去基于数据科学的项目。
- 你遇到了什么问题?如果数据不同,您会使用什么方法?
- 统计问题(计算统计)或因果推理问题
- 共享代码编辑器上的编码问题
技术屏幕
谷歌的数据科学家技术筛选是通过与数据科学家的视频会议(Google Hangouts)完成的。这次采访围绕着实验设计、统计学和一个概率编码问题。它还涉及更多的技术讨论,集中在过去的研究和工作经验,深入到你所面临的问题和你解决这些问题的技术方法。试着在面试提问上练习中等水平的问题。
谷歌现场采访
现场面试是谷歌数据科学家面试流程的最后一个阶段。它包括与数据科学家的 5 轮一对一访谈,涵盖计算统计学、概率、产品解释、指标和实验、建模和行为问题。每次面试持续大约 45 分钟,中间有一次午餐休息。
点击此处,阅读更多关于谷歌数据科学问题的示例。
感谢阅读!
参考
[1]谷歌维基百科页面[2]谷歌搜索统计
原载于 2020 年 4 月 21 日 https://www.interviewquery.com。
谷歌产品分析师访谈
图片来自 Pixabay
介绍
2008 年,谷歌推出了云解决方案“谷歌云平台”(GCP),这是一套云计算服务,提供出色的基础设施即服务(IaaS)解决方案,帮助企业扩大规模。
如今,GCP 几乎应用于每个行业,包括制造、零售、金融、医疗保健和生命科学、游戏、教育、电信和政府。谷歌云平台还提供“ML 模型开发、搜索、自然语言、语音、翻译、视觉和视频智能”的大数据(大查询大规模数据仓库、数据流、云数据实验室、云数据实验室、数据工作室等)和 AI/机器学习解决方案。
多年来,谷歌花费了大量资金开发分析和基于云的架构工具,以帮助企业发展。数据和数据分析是公司核心愿景不可或缺的一部分,因此,谷歌为新加入的数据科学家、数据分析师、数据工程师和业务分析师提供了前所未有的工作规模。
谷歌的产品分析师角色
图片来自 Pixabay
一般来说,产品分析师是利用市场研究、数据分析和商业智能技能成功将新产品推向市场的人。这个角色在谷歌是专门的。谷歌的产品分析师利用数据分析寻找不同的见解推动业务影响。他们为“谷歌的内部客户和整个组织的合作伙伴提供定量分析、市场专业知识和战略视角”。
谷歌的产品分析师通常会监督产品的整个过程,包括设计阶段、发布前和发布后。围绕产品旅程(从设计到市场)有很多问题,产品分析师帮助回答真正的问题,比如“我们试图让什么发生?”、“怎么才能定量证明?”,以及“我们对此有信心吗?”。
产品分析师还与内部团队进行跨职能合作,在产品方向、实验和分析方面指导他们,并与开发人员合作,帮助他们在项目中取得成功。
所需技能
像谷歌的每个职位一样,产品分析师的角色需要企业级的分析技能和至少三年的定量分析行业经验。
其他相关技能包括:
- 统计学、计算机科学、数学、工程、数据科学或其他定量领域的学士/硕士学位。
- 丰富的统计软件包经验,包括 R,SAS,Stata,MATLAB 等。
- 在编写 SQL 查询、提取大数据和设计 ETL 流程方面有丰富的经验。
- 具有开发模型、方法/途径(包括时间序列预测、计量经济学、因果推断和分类方法)的经验,以及将分析结果转化为业务建议的能力。
- 三年与工程师和产品经理合作的经验,尤其是在提供以产品为中心的见解方面。
谷歌的产品分析师团队
图片来自 Unsplash
虽然产品分析师的角色有时与业务分析师的角色重叠,但产品分析师严重依赖于定量分析,而不是专注于产品设计的业务影响。他们在团队中工作,并与其他人进行跨职能合作,以实现业务目标。
作为一家大公司,有许多团队围绕许多不同的产品和功能进行产品开发和设计,谷歌提供了一个非常全球化的独特规模,即使你最微小的努力也会产生重大影响。根据所分配的团队,具体角色可能会有所不同。以下是谷歌的一些产品分析师团队及其具体角色:
- **数据科学团队:**这个团队的产品分析师为业务建议进行分析,开发和自动化报告,并迭代地构建和原型化仪表板,以提供大规模的洞察力。他们还向多层次的利益相关者提交调查结果,并与利益相关者进行跨职能合作,以制定和完成全周期分析。
- **开发人员控制台:**角色包括与开发人员控制台中的工程和产品管理团队合作,通过端到端分析了解他们的业务需求,包括收集和分析数据以及正在进行的可交付成果,并向多个领导层提供有效的演示和建议。该职位还包括开发和自动化报告,原型仪表板,以提供可操作的大规模见解。
- **Youtube 数据科学团队:**角色包括通过严格的实验和分析来指导团队的产品方向,并与工程团队密切合作,以实现成功的产品开发之旅。
面试过程
图片来自 Unsplash
产品分析师面试流程遵循谷歌的标准招聘流程。面试过程始于招聘人员通过电子邮件联系你,评估你的兴趣。下一步是完成一个关于你过去的项目和与角色相关的技能的十个问题的调查。在此之后,将通过电话或 Google Hangouts 安排与产品分析师的初次面谈。最后一个阶段是现场采访,包括同一个团队的产品分析师的四轮采访。
初始屏幕
谷歌产品分析师的初始屏幕是探索性的。这是一次与产品分析师(PA)的 45 分钟电话或 Google Hangouts 访谈;问题的范围可以从过去的项目经验型问题到简单的技术型问题。
样题: 你会如何向一个非技术人员解释一个 95%的置信区间?
现场面试
这是谷歌产品分析师面试步骤的最后一个阶段。这个面试由与产品分析师(团队内部或团队外部)的四轮连续面试以及中间的午餐休息组成。
标准的谷歌产品分析师现场访谈问题可以包括建模、指标定义、SQL 和标准统计问题。问题的范围也可以从假设到基于案例和现实生活的场景。在这些面试中还有行为、产品意识和文化契合问题。你可能会遇到这样的问题:“你会怎么做?”,以及“告诉我一次你…”
注意:在面试中详细讲述你的解决方案是很重要的,使用你过去参与的项目来解释你的答案和选择也是很有帮助的。
注意事项和提示
谷歌是一家基于产品的科技公司,谷歌的产品分析师预计会利用数据和高级分析方法来推动产品增长。谷歌产品分析师面试旨在评估候选人履行工作职责的能力,以推动谷歌产品的成功。
谷歌在所有面试过程中使用专门针对职位定制的标准化问题。 解决谷歌产品分析师关于面试查询的 SQL 和 Python 问题 对你面试成功大有帮助。
请记住,谷歌产品分析师面试还将测试统计和数据分析概念的组合,以及产品感知和商业分析概念。复习基本的统计和概率、预测模型、指标定义和 SQL(包括等级、连接等)知识。
同样值得注意的是,不管你申请的是什么职位和部门,谷歌对所有面试流程都有四个主要标准。第一个是“一般认知能力,第二个是“角色相关知识,第三个是“领导技能,最后一个是你的“粘性”。
谷歌采用严格的面试后招聘流程,包括团队匹配和整合报价。这是由一个高素质的、不带偏见的谷歌团队“招聘委员会”来完成的,他们是这些角色/工作的专家,以前从未见过任何申请人。在招聘委员会做出裁决后,他们会向高级管理层提交一份建议书,供最终审核,然后才会发出聘用通知。
谷歌产品分析师面试问题
- 给定一个假设的情况,你将如何创建一个模型来预测这个指标?
- 你会如何处理阶级不平衡等。?你将如何在商业环境中使用这个模型?
- 如何使用 rank()来获得具有最高值的 id?
- 对一列排序还是对该列的多个部分同时排序更快?
- 你会如何测试一个新产品?
- 你会如何向一位老奶奶解释 AdSense?
查看 SQL、产品指标、a/b 测试等方面的更多产品分析师面试问题!
感谢阅读
- 如果你有兴趣提高你的数据科学技能,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
原载于 2020 年 8 月 21 日 https://www.interviewquery.com**的 。
谷歌机器学习实践的 7 个步骤:结构化数据的 TensorFlow 示例
一步一步的教程,把 7 个步骤付诸实践,并从头开始建立一个机器学习模型。
谷歌机器学习实践的 7 个步骤
网上有很多很棒的机器学习教程。然而,它们中的大多数集中在机器学习的特定部分,例如,探索数据、建立模型、训练和评估。他们中很少有人介绍建立机器学习模型的完整步骤。
最受欢迎的概述机器学习过程步骤的文章之一是国玉峰的机器学习的 7 个步骤,由谷歌云平台推出。
https://www.youtube.com/watch?v=nKW8Ndu7Mjw
郭列出了如下 7 个步骤:
- 收集数据
- 准备数据(和探索数据)
- 选择模型
- 培养
- 估价
- 超参数调谐
- 预测(和保存模型)
在本文中,我们将把上述步骤付诸实践,并从头构建一个机器学习模型。
定义问题和环境设置
在我们进入细节之前,我们需要为任何机器学习项目做的第一件事是为我们的机器学习模型定义问题。
在本教程中,我们将处理来自 Kaggle 的泰坦尼克号数据集。这是一个非常著名的数据集,通常是学生学习机器的第一步。
假设我们被要求创建一个系统来预测泰坦尼克号上的幸存者。
环境设置
为了运行本教程,您需要安装
TensorFlow 2,TensorBoard 2,numpy,pandas,matplotlib,seaborn
它们都可以通过 PyPI 直接安装,我强烈建议创建一个新的虚拟环境。最好避免使用 base(root) ,因为这可能会破坏您的系统。
您可以查看以下文章,了解如何创建 Python 虚拟环境:
[## 使用“virtualenv”创建虚拟环境,并将其添加到 Jupyter 笔记本中
你是机器学习工程师,正在使用 Python 和 Jupyter Notebook 吗?在这篇文章中,你会看到为什么…
towardsdatascience.com](/create-virtual-environment-using-virtualenv-and-add-it-to-jupyter-notebook-6e1bf4e03415) [## 使用“conda”创建虚拟环境,并将其添加到 Jupyter 笔记本中
你正在使用 anaconda 和使用 Jupyter Notebook 和 Python 吗?在这篇文章中,你将看到如何创建虚拟的…
medium.com](https://medium.com/analytics-vidhya/create-virtual-environment-using-conda-and-add-it-to-jupyter-notebook-d319a81dfd1)
源代码
所有的说明都在这篇文章里,我已经把笔记本开源了,源代码请查看下面的 Github 项目
Google 的 7 步机器学习实践,在 Github 中是免费的。更多教程可从 Github Repo 获得。
1.收集数据
一旦我们定义了我们的问题,就到了机器学习的第一步:收集数据。这一步最重要,因为您收集的数据的质量和数量将直接决定您的预测模型有多好。
在本教程中,数据将来自 Kaggle。让我们导入一些库并加载数据来开始吧
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
让我们将 train.csv 和 test.csv 文件加载到 pandas DataFrame 中。
df_train_raw = pd.**read_csv**('data/titanic/train.csv')
df_test_raw = pd.**read_csv**('data/titanic/test.csv')df_train_raw.head()
泰坦尼克号数据预览
来自 Kaggle 的数据字典
2.准备数据
先说一些探索性的数据分析 (EDA)。我们将从检查缺失值开始。
2.1 缺失值
我们可以使用 seaborn 创建一个简单的热图来查看哪里缺少值
sns.heatmap(**df_train_raw.isnull()**,
yticklabels=False,
cbar=False,
cmap='viridis')
缺失值的 seaborn 热图输出
小屋有缺失值。 年龄 缺失的比例很可能小到足以用某种形式的插补进行合理替换。查看 舱 列,看起来那些数据缺少太多的值,无法做一些有用的事情。我们以后很可能会去掉 舱 ,或者改成另一个类似“已知舱:1 或 0”的特性。上船失踪的比例很小,这个教程还是留着吧。**
2.2 可视化更多的数据
让我们继续将更多的数据可视化
**sns.countplot(**x='Survived'**, data=df_train_raw, palette='RdBu_r')**
幸存的情节
**sns.countplot(**x='Survived',**
**hue='Sex',**
data=df_train_raw,
palette='RdBu_r')**
**sns.countplot(**x='Survived',**
**hue='Pclass',**
data=df_train_raw,
palette='rainbow')**
**sns.distplot(**df_train_raw['Age'].dropna(),**
**kde=True,**
color='darkred',
bins=30)**
**sns.countplot(x='SibSp',data=df_train_raw)**
**df_train_raw['Fare'].hist(color='green',
bins=40,
figsize=(8,4))**
2.3 数据清理
我们想用某种形式的插补来代替缺失的年龄。一种方法是填写所有乘客的平均年龄。然而,我们可以更聪明地处理这个问题,按乘客级别检查平均年龄。例如:
**sns.boxplot(**x='Pclass',**
**y='Age',**
data=df_train_raw,
palette='winter')**
我们可以看到,在较高的阶层中,较富裕的乘客往往年龄较大,这是有道理的。我们将根据年龄的 Pclass 使用这些平均年龄值进行估算。
**def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
**if Pclass == 1:**
return 37
**elif Pclass == 2:**
return 29
**else:**
return 24
else:
return Age**
现在让我们应用这个函数并检查它是否工作
**# Make a copy for test only
train_copy = df_train_raw.copy()
train_copy['Age'] = train_copy[['Age','Pclass']]
**.apply(impute_age, axis=1)**# check that heat map again
sns.heatmap(**train_copy.isnull(),**
yticklabels=False,
cbar=False,
cmap='viridis')**
太好了!impute_age()
作品。让我们继续转换分类特征并删除 小屋 列。
2.4 转换分类特征
我们需要将分类特征转换成一次性编码。否则,我们的机器学习算法将无法直接将这些特征作为输入。
让我们用info()
检查列数据类型
**df_train_raw.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 712 entries, 0 to 711
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 712 non-null int64
1 Survived 712 non-null int64
2 Pclass 712 non-null int64
3 Name 712 non-null **object**
4 Sex 712 non-null **object**
5 Age 566 non-null float64
6 SibSp 712 non-null int64
7 Parch 712 non-null int64
8 Ticket 712 non-null **object**
9 Fare 712 non-null float64
10 Cabin 168 non-null **object**
11 Embarked 710 non-null **object**
dtypes: float64(2), int64(5), **object(5)**
memory usage: 66.9+ KB**
有 5 列的数据类型为 object。其中 姓名 、 车票 、 客舱 不需要。另外,我们注意到 Pclass 根据我们上面看到的数据字典是一个分类数据。让我们制作一个函数preprocessing()
来保留这些有用的数字特征,并将 Pclass , Sex, 和apolled转换成一键编码。
让我们应用该函数,并为构建我们的机器学习模型创建训练和测试数据集。
**x_train = **preprocessing(df_train_raw)**
y_train = **df_train_raw['Survived'].values**x_test = **preprocessing(df_test_raw)**
y_test = **df_test_raw['Survived'].values**print("x_train.shape =", x_train.shape )
print("x_test.shape =", x_test.shape )**
通过上面的运行,您应该得到如下所示的训练和测试数据集的形状:
**x_train.shape = (712, 13)
x_test.shape = (179, 13)**
让我们看看x_train.head()
的数据
我们的数据经过preprocessing()
太好了!我们的数据已经可以建模了
3.选择型号
在 TensorFlow 2.0 中有三种方法实现神经网络架构:
- 顺序模型:是使用 Keras 最简单的方法。
- 功能 API :针对更复杂的模型。
- 模型子类:完全可定制,使您能够实现自己定制的模型前向传递。
为简单起见,我们用最简单的方法:带Sequential()
的时序模型。让我们继续建立一个具有 3 个密集层的神经网络。每层中的所有参数都已硬编码,如下所示:
**import tensorflow as tf
from tensorflow.keras import models, layerstf.keras.backend.clear_session()model = **models.Sequential()**
model.add(**layers.Dense(10, activation='relu', input_shape=(13,)**))
model.add(**layers.Dense(20, activation='relu' )**)
model.add(**layers.Dense(1, activation='sigmoid')**)model.summary()**
下面是model.summary()
的输出
model.summary()
的输出
4.培养
首先,让我们使用model.compile()
来配置我们的模型
- 使用优化器随机梯度下降**(缩写为
sgd
)** - 使用二元交叉熵损失函数(
binary_crossentropy
)用于我们的二元分类 - 为简单起见,使用
'accuracy'
作为我们在训练和测试期间评估模型的评估指标
对于训练,有三种方法可以训练 Keras 模型:
- 将
model.fit()
用于固定历元数的模型 - 使用
model.train_on_batch()
只进行一次单批次训练。 - 创建自定义训练循环。
在本教程中,让我们用最简单的方法model.fit()
继续。
**# Convert DataFrame into np array
x_train = np.asarray(x_train)
y_train = np.asarray(y_train)# Get around with KMP duplicate issue
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'# Use binary cross entropy loss function for binary classification
model.compile(**optimizer='sgd'**,
**loss='binary_crossentropy'**,
**metrics=['accuracy']**)history = **model.fit**(x_train,y_train,
batch_size= 64,
epochs= 30,
validation_split=0.2
)**
如果一切顺利,我们应该得到如下输出。
**Train on 569 samples, validate on 143 samples
Epoch 1/30
569/569 [==============================] - 1s 2ms/sample - loss: 0.5568 - accuracy: 0.7206 - val_loss: 0.6139 - val_accuracy: 0.6713
Epoch 2/30
569/569 [==============================] - 0s 91us/sample - loss: 0.5639 - accuracy: 0.7047 - val_loss: 0.6212 - val_accuracy: 0.6643
Epoch 3/30
569/569 [==============================] - 0s 112us/sample - loss: 0.5705 - accuracy: 0.6907 - val_loss: 0.6379 - val_accuracy: 0.6573
Epoch 4/30
569/569 [==============================] - 0s 109us/sample - loss: 0.5538 - accuracy: 0.7065 - val_loss: 0.6212 - val_accuracy: 0.6713
......
......
Epoch 30/30
569/569 [==============================] - 0s 102us/sample - loss: 0.5597 - accuracy: 0.7065 - val_loss: 0.6056 - val_accuracy: 0.7203**
5.模型评估
一旦训练完成,就该看看模型是否适合模型评估了。模型评估通常包括
- 绘制损失和准确性指标的进度
- 用从未用于训练的数据来测试我们的模型。这就是我们之前搁置的测试数据集
df_test
发挥作用的地方。
让我们创建一个函数plot_metric()
来绘制指标。
**%matplotlib inline
%config InlineBackend.figure_format = 'svg'def plot_metric(history, metric):
train_metrics = history.history[metric]
val_metrics = history.history['val_'+metric]
epochs = range(1, len(train_metrics) + 1)
plt.plot(epochs, train_metrics, 'bo--')
plt.plot(epochs, val_metrics, 'ro-')
plt.title('Training and validation '+ metric)
plt.xlabel("Epochs")
plt.ylabel(metric)
plt.legend(["train_"+metric, 'val_'+metric])
plt.show()**
通过运行plot_metric(history, 'loss')
来绘制损失进度。
损失图
通过运行plot_metric(history, 'accuracy')
绘制精度进度。
根据测试数据集测试我们的模型
**# Convert DataFrame into np array
x_test = np.asarray(x_test)
y_test = np.asarray(y_test)**model.evaluate(x = x_test,y = y_test)****
我们应该得到一个具有损耗和精度的输出,如下所示:
**179/1 [====] - 0s 43us/sample - **loss: 0.5910** - **accuracy: 0.6760**[0.5850795357586951, 0.67597765]**
6.超参数调谐
酷,我们已经对我们的第一个机器学习模型进行了评估。现在是时候看看我们是否能以任何方式进一步改善这种情况了。我们可以通过转动超参数来做到这一点。在我们进行第一次培训时,我们隐含地假设了一些参数,现在是时候回去测试这些假设并尝试其他值了。
对于本教程,我们只关注模型中以下三个超参数的实验:
- 第一密集层中的单元数
- 第二密集层中的单元数
- 【计算机】优化程序
6.1 实验设置
首先,从加载 TensorBoard 笔记本扩展开始
**# Load the TensorBoard notebook extension
**%load_ext tensorboard****
然后,添加一条语句来清除上一次运行的所有日志。如果你不清理它们,它会把你的仪表板搞乱。
**# Clear any logs from previous runs
**!rm -rf ./logs/****
导入 TensorBoard HParams 插件:
****from tensorboard.plugins.hparams import api as hp****
列出要尝试的值,并将实验配置记录到 TensorBoard。
5
、10
、20
为第一层单元数10
、20
、40
为第二层单元数- 优化器的
adam
和sgd
超参数调谐的实验设置
6.2 调整 TensorFlow 运行以记录超参数和指标
我们的模型很简单:3 个密集层。代码看起来很熟悉,尽管超参数不再是硬编码的。相反,超参数在hyparams
字典中提供,并在整个训练功能中使用:
调整 tensorflow 运行以记录超参数和指标
对于每次运行,记录一份hparams
摘要,包括超参数和最终精度
**def run(run_dir, hparams):
with tf.summary.create_file_writer(run_dir).as_default():
hp.hparams(hparams) # record the values used in this trial
accuracy = **train_test_model(hparams)**
tf.summary.scalar(METRIC_ACCURACY, accuracy, step=1)**
6.3 开始运行并记录它们
我们现在可以尝试多个实验,用一套不同的超短波来训练每个实验。为了简单起见,让我们使用一个 网格搜索 来尝试离散参数的所有组合,并且只尝试实值参数的上下界。
**session_num = 0for num_units_one in HP_NUM_UNITS_ONE.domain.values:
for num_units_two in HP_NUM_UNITS_TWO.domain.values:
for optimizer in HP_OPTIMIZER.domain.values:
**hparams = {
HP_NUM_UNITS_ONE: num_units_one,
HP_NUM_UNITS_TWO: num_units_two,
HP_OPTIMIZER: optimizer,
}**
run_name = "run-%d" % session_num
print('>> Starting trial: %s' % run_name)
print({h.name: hparams[h] for h in hparams})
**run('logs/hparam_tuning/' + run_name, hparams)**
session_num += 1**
如果一切顺利,我们应该得到如下输出:
6.4 在 TensorBoard 的 HParams 插件中可视化结果
一旦运行完成,打开你的终端和cd
进入项目目录。然后,现在可以通过在终端中运行以下命令来打开 HParams 仪表板
**admin@Mac:~/Code/WorkSpace/machine-learning/tf2
⇒ **tensorboard --logdir logs/hparam_tuning**Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_allTensorBoard 2.0.0 at [http://localhost:6006/](http://localhost:6006/) (Press CTRL+C to quit)**
在浏览器中打开仪表板,直接进入 HPARAMS - > 平行坐标视图
通过查看平行坐标视图**,点击并拖动精度轴,可以选择精度最高的运行。**
表现最好的那个
当这些运行通过不同的超参数时,我们可以得出结论
**5**
单位在第一层、**10**
单位在第二层,- 和同
**'adam'**
优化器
在这些实验中表现最好。
7.预测(和保存模型)
现在,我们已经得到了精确度最好的机器学习模型。最后一步是使用这个模型进行预测或推断。这是所有这些工作的重点,也是机器学习的价值得以实现的地方。我们终于可以用我们的模型来预测乘客是否幸存。
使用模型进行预测
****model.predict**(x_test[0:10])array([[0.56895125],
[0.37735564],
[0.5005745 ],
[0.60003537],
[0.5371451 ],
[0.36402294],
[0.49169463],
[0.49049523],
[0.4984674 ],
[0.1470165 ]], dtype=float32)**
使用模型为输入样本生成分类预测。
****model.predict_classes**(x_test[0:10])array([[1],
[0],
[1],
[1],
[1],
[0],
[0],
[0],
[0],
[0]], dtype=int32)**
最后,我们可以将整个模型保存到一个 HDF5 文件中:
**model.**save**('data/keras_model.h5')**
并加载通过save()
保存的模型
**model = **models.load_model**('data/keras_model.h5')# Predict class
model.predict_classes(x_test[0:10])**
就这样,接下来呢?
本文是一个快速教程,主要是向大家展示如何将 Google 的机器学习 7 步付诸实践。我试图避免许多机器学习概念,并尽可能使本教程简单。
请在我的 Github 上查看 笔记本获取源代码。
在实际应用中,需要考虑的因素要多得多。例如,选择评估度量、特征缩放、选择有意义的特征、分割数据集、处理过拟合和欠拟合等。此外,本教程仅针对结构化数据,现实世界中的数据并不总是结构化数据,所有像图像、音频或文本这样的东西都是非结构化数据。
下一次,我们将构建一个 Keras 机器学习模型,它有三种不同的方式:顺序、函数和模型子类化。
如果你对机器学习的实用方面感兴趣,请继续关注。