到目前为止我对机器学习的理解
每当我想到机器学习或人工智能,我都会想起这句流行的名言——
“人类大脑有 1000 亿个神经元,每个神经元与 1 万个其他神经元相连。坐在你的肩膀上是已知宇宙中最复杂的物体。”
这句话简单地解释了人类大脑的复杂性,人类大脑由数十亿个被称为**神经元、**神经元的思维单元组成,大脑中的单个神经元通过被称为轴突的电线连接到其他几个神经元,这些轴突为电脉冲提供了在单个神经元之间移动的路径,因此知识在我们的大脑中以电脉冲的形式移动。
人脑是如何影响机器学习的?
正如你们许多人所知,人工智能是目前最热门的研究领域之一,它主要涉及人工智能系统的创造。我们人类是聪明的,因为我们有能力获取知识,这是智能的核心部分,实际上计算机很难获取知识,因为它们只是由沙子(硅)制成的,但它们如何学习和获取知识呢?他们如何变得聪明?在不久的将来,他们如何获得影响我们日常生活的潜力?答案很简单…因为机器学习才有可能!!
所以机器学习是让人类创造人工智能系统的东西。(就好像 AI 是名词,机器学习是动词一样)。有许多机器学习的方法,但由于这样或那样的原因,它们都失败了。为什么?因为他们没有提供一个通用的学习方法。当人类开始理解大脑实际上是如何学习的时候,真正的革命就开始了,我们称之为知识金字塔,它代表了不同层次的知识表达。
我们举个例子来了解一下这个知识金字塔。假设你正在看一张电影海报,每当你看到你周围的一些物体时,你眼睛的视网膜能够产生你所看到的电脉冲。这些脉冲被称为数据(知识金字塔的最底层),默认情况下,数据没有任何意义,大脑中第一级神经元的责任是从中形成一些有意义的形状。因此,第一级神经元将电脉冲视为像素,这些像素可以以多种方式一起摸索,形成许多内部表示。这些表示我们称之为信息。但是光有信息还不足以获得你所看到的完整画面。众所周知,电影海报是一个长方形,但有许多物体可以类似电影海报的形状(可以是电影屏幕、电脑屏幕或任何东西),所以你需要了解物体是电影海报。更高级别的神经元负责从现有知识中提取你所看到的意义。我们称之为机器学习中的推理。人脑内部将你看到的电影海报与你之前的经历进行匹配,以确定它到底是什么。
所以当你看这张图片的时候,你可以说这是《权力的游戏》,因为你以前就知道《权力的游戏》,而对于一个从未看过《权力的游戏》的人来说,这真的很难。这就是人脑识别物体的方式。同样的知识金字塔可以用来学习任何东西。这是主要影响机器学习的概念。
机器学习的类型:
有 3 种类型的学习:
1.监督学习:在监督学习中,我们通过展示 1000 个例子来训练一个 ML 模型。例如,为了让计算机识别猫,我们展示成千上万只猫的图像。这样它就能知道猫到底长什么样。
2.无监督学习:在无监督学习中,我们不需要展示例子。电脑可以自己学习,这就是我们大脑的工作方式。
3.强化学习:这可以简单地定义为“从错误中学习”,计算机执行数以千计的试错步骤,以学习实现目标的最佳技术。强化学习可以用来构建智能游戏机器人。
一个简单的神经网络:
因此,让我们建立一个简单的神经网络,在旅途中,我会向你解释它如何与人脑相关。
看一下上图。它被称为具有一个隐藏层的前馈神经网络。输入层是我们给出输入的地方,输出层是我们得到预测结果的地方。例如,如果我们在输入层输入一幅猫的图像,我们在输出层得到猫的预测。正如你在图中看到的,神经元之间的连接叫做边缘。一条边将当前层的一个神经元与下一层的所有神经元连接起来。因此,边类似于人脑中的轴突,网络中的每个节点类似于人脑中的一个神经元。神经网络可以有 n 层,称为隐藏层,如下所示:
学习只是一种数学优化:
上面的结构默认不学任何东西。所以我们应该有让神经网络学习的东西。图中的每条边都被赋予一个叫做权重的值。开始时,我们随机分配权重。在学习过程中,学习算法调整每条边的权重,以获得期望的输出。学习算法基本上使用诸如梯度下降的优化器来优化权重。
输入输出表示:
当我们训练神经网络时,我们以向量(X,Y)的形式定义输入和期望输出,其中 X 是所有输入值的集合,Y 是期望输出。X 可以表示为一组输入 X = {x1,x2,x3…xn}。应该有一个神经元接受 X 的每个输入值。例如,如果 X = { x1,x2},则应该有 2 个输入神经元。y 是输出向量,向量 W 表示分配给流出神经元的每个边缘的一组权重。W = {w1,w2,w3…}。在每次迭代中,X 向量与 W 向量相乘,并加上一个称为 Bias 的值。因此,表达式可以写成 W*X + b,然后将值传递给激活函数。
使用激活功能:
概率是一种重要的数学工具,可以用来确定一个事件是否可能发生。例如,如果我们向神经网络输入一幅猫的图像,那么猫出现的概率就很高。如果 yi Y 是代表猫的类,而 yj Y 是代表狗的类,那么如果输入是猫的图像,则 yi 具有更高的概率。必须有一种技术将 x*w+b 值转换为概率分布,这可以通过使用一个称为 sigmoid 的数学函数来完成, sigmoid 在数学上表示为
sigmoid 函数总是产生 0 到 1.0 范围内的值。x 值越高,sigmoid 将返回值≈ 1,因此我们可以说该特征更有可能存在。这里,X 值是通过将 X*W 与偏差相加得到的。因此权重对乙状结肠功能的结果有较大的影响。由于我们随机分配权重,我们不会得到适当的输出。因此我们计算误差并优化权重以最小化误差。这是通过梯度下降和反向传播实现的。
确定输出误差,并使用梯度下降法降低误差:
到目前为止,我们所学到的可以总结在下面的图片中
我们只是将输入向量 X 的每个值(X)与权重向量 W 的每个权重(W)相乘,并添加一个偏差(对所有输入值和权重都是如此),然后使用 sigmoid 将结果转换为概率分布。
在应用 sigmoid 之后,我们得到一个预测的输出概率,这个值与最后一层的权重相乘,一起产生一个预测的输出。为了计算误差,我们必须将预测输出与期望输出进行比较,这可以使用许多方法来完成,下面给出了其中一种方法…
该表达式根据预测输出和期望输出之间的欧几里德距离计算误差,然后对其进行平方,通过消除负号来获得平均误差。这个误差值也称为损失或成本,在开始时是最大值。随着训练的继续,损失会最小化。怎么会?
当我们仔细观察误差公式时,我们可以说,当 y ≈ y 时,误差 E 将最小或几乎为 0。这只有在我们优化权重时才会发生,这意味着我们必须回到神经网络并调整权重。梯度下降和反向传播帮助我们做到这一点。
梯度下降:
微积分几乎应用于所有的科学领域。梯度下降如果你微积分好的话可以很好理解。梯度下降有助于优化权重。w 值代表为了优化而必须应用的重量变化。w 可以是正数,也可以是负数。在训练过程的每一次迭代中,梯度下降确定 w 的值,然后 w 被加上与单个神经元相关联的权重。在此之前,我们必须确定需要优化的权重,这可以使用反向传播算法来完成,一旦我们确定了神经元,我们回到那里执行 w+∏w,我们可以从数学上认为∏w 是 w 的一个小变化,因此权重在每次迭代期间得到小范围的优化。
N 个输出类的误差函数可由下式给出:
我们得到损失函数的偏导数:
wij(k)可以通过反向传播算法来确定。
从上图可以清楚地看出,存在一个最佳权重,其误差约为 0。学习算法的目标是使用梯度下降来优化权重,或者在数学意义上,损失函数的偏导数的斜率导致 w,并且它总是向最优权重移动。我们不强调梯度下降的数学公式,因为它需要大量的微积分知识。
反向传播算法及其在神经网络中的应用;
我们知道梯度下降是一个数学函数,可用于优化权重,但我们假设权重 w 是已知的,因此 w 可以应用于它,梯度下降对神经网络的现有权重没有任何概念,因此反向传播用于确定可以应用优化的权重 w。
计算图中的反向传播:
如果对 X 和 y 的任何有限向量明确定义了每个神经元的操作,则神经网络 N 可以表示为计算图。将 nn 表示为计算图非常有用,因为它们可以像数学表达式一样进行评估,并且适用于计算图的所有规则也可以应用于神经网络。计算图和反向传播的细节可以在这个链接找到:【http://colah.github.io/posts/2015-08-Backprop/
通俗地说,反向传播可以用来确定每个神经元的权重对输出的影响,这很好地帮助我们反向传播网络,并获得该神经元的 w。一旦 w 已知,我们就可以应用 w+∏w。
总结:
给定数据集(X,Y ),其中 X 是输入向量 X={x1,x2…xn}和 Y ={ y1,y2…},其中 X 是输入训练样本,Y 是输出标签集,N 是执行函数 f:N(X)→Y 的神经网络,其中 Y 是包含一组预测输出的向量 Y = { y1,y2…yn }, W 被称为权重矩阵,并在开始时被随机分配,f:N(X)执行以下函数:
- 在每个神经元上对 xi 进行一些运算,然后乘以权重 wi (xi 和 wi 分别属于 X 和 W)。
- 将偏差 b 添加到产品中。
- 对输出 z= xw+b 应用一些激活函数,它可以是 sigmoid、softmax、ReLu、tanh 或任何其他函数。
- 这种操作在整个网络的每一层执行,这就是所谓的前向传播。
- 在输出层,为每个类产生 yi,(yi 属于 Y)。
- 计算误差函数 E(Y,Y)。
- 通过应用反向传播和梯度下降来调整权重矩阵 W 的值,从而最小化损失。
- 重复以上所有步骤,直到 E ≈ 0。
通过这种方式,可以训练网络执行一些智能动作。简单地说,我们可以将神经网络的基本操作定义为:
X "* "(?或 W) = Y
如果 X 是输入,Y 是输出,我们必须找到 W 或者?它必须和 X 一起使用才能产生 y。
这里代表 X 和 W 之间的一系列数学运算,“”一般是不存在逆的非线性运算。
这只是神经网络的理论介绍。将来会涵盖更多内容。
谢谢你,☺
我在硅谷学到的人工智能
上周,我在加州帕洛阿尔托的技术革命中心呆了一周。我去过机器人大会,AI 研讨会,深度学习讲座,虚拟助理演示。
我了解到人工智能无处不在,虽然它已经融入了我们的日常生活,但我们还没有看到任何东西…
为什么是现在?人工智能一词是由约翰·麦卡锡在 1956 年的达特茅斯会议上提出的,在过去的几十年里,它经历了两个“冬天”,一个在 70 年代,一个在 90 年代。软件和硬件的问题受到了冲击,留给了学者去解决。
“我们正在从移动优先的世界向人工智能优先的世界发展”,谷歌首席执行官桑德尔·皮帅
有三种不同类型的人工智能:
人工狭义智能——一匹只会一招的小马,它们可以下棋、识别人脸或翻译外语
AGI——人工通用智能——能够将智能应用于任何问题。
ASI——人工超级智能——比最好的人类大脑更聪明,能够将其应用于任何事情。(这是斯蒂芬·霍金和埃隆·马斯克这样的人害怕的人工智能)
由于以下三个因素,人工智能最终能够发挥其全部潜力:
- GPU 功耗和成本
- 大数据
- 算法复杂性和效率
GPU 功耗和成本
随着 NVIDIA 在 2007 年发明 CUDA,一种允许图形处理单元(GPU)用于计算和 3D 渲染的 API,一种更强大的处理方法被创建出来。最初用于视频和游戏软件,现在用于机器学习,这是人工智能的核心。
CPU 由几个针对顺序串行处理进行优化的内核组成,而 GPU 则具有大规模并行架构,由数千个更小、更高效的内核组成,旨在同时处理多项任务。
大数据
人类在过去两年中创造的数据比人类历史上的总和还要多。每分钟有 300 个小时的视频被上传到 YouTube,每秒钟有 40,000 次谷歌搜索,在脸书每分钟有 510,000 条评论被发布,293,000 条状态被更新,136,000 张照片被上传。
以及健康数据、银行业务、短信、电子邮件、照片等等,这些数据让计算机以惊人的速度进行学习。
算法复杂性和效率
计算机过去由程序员编程,有特定的输出设置。现在,随着处理器能力和大数据的可用,数据和所需的输出可以输入计算机,而计算机不需要编程。
例如,你可以将一百万张动物照片输入电脑,根据学习的类型,有监督的或无监督的,你可以将这些照片分类:猫、狗、马等等。到那时,你就可以停止贴标签,计算机将能够自己识别一只猫。
实际上,机器学习就像教孩子,孩子通过观察和经验学习,计算机使用数据而不是经验,并在失败时继续测试自己,重新测试,学习和理解。
应用程序
人工智能能够做一些不可思议的事情,其中一些我已经了解如下:
翻译
谷歌最近发布了 Pixel Buds,可以进行 40 种语言的实时语音翻译。他们使用谷歌助手语音识别和翻译服务。
娱乐
网飞推荐了你。
网飞将观众分成两千多个口味组。你在哪一个决定了你得到的建议。网飞的工作人员观看每一个节目的每一分钟,并标记发生的一切,例如打架、接吻、争吵等,然后网飞算法根据你“竖起大拇指”或在两个晚上狂看的节目显示建议
自动驾驶汽车
人工智能允许自动驾驶汽车根据交通、环境、路况、天气等做出数以千计的决定。你可以在这里阅读我关于自动驾驶汽车未来的文章。
卫生保健
斯坦福大学的研究人员创造了一种可以像专业医生一样识别皮肤癌的人工智能。该程序使用深度学习对近 13 万张痣、皮疹和病变的图像进行了训练。它的创造者说,它的表现与人类一样准确(“至少”91%一样好)。
数字助理
Just some of the digital assistants available today.
最近出现了一个完整的数字助理世界,Siri、Cortana、Alexa、谷歌助理,事实上到 2021 年,它们将超过世界人口。这已经开始了一个新的#noui 系统的状态,我将在我们的下一个寓言中谈到,在这里订票。
物联网(IOT)
人工智能可以通过 IOT 改善一切,它可以预测你什么时候回家并打开暖气,什么时候睡觉并调暗灯光,什么时候你将用完牛奶和鸡蛋……任何与互联网连接的东西都可以受益于数据、学习和最终的智能。
未来
The future of AI?
任何技术都可能是一把双刃剑…人工智能可以解决所有的人类问题:贫困、不平等和气候变化,或者它可能是人类的末日。
谷歌人工智能主管 Ray Kersell 认为奇点可能会在 2029 年到来。奇点理论认为,人工智能将超越人类智能,并将突然引发失控的技术增长,从而给人类文明带来不可估量的变化。
失业
人工智能和机器人肯定会失去工作,电话销售员、收银员、法律助理、出租车司机、快餐厨师都将受到威胁。但是我们以前见过这种情况,动物被引入农业,机器首次进入生产线。我们适应,我们调整,我们找到新的工作让我们去做,例如,33.8 万人为谷歌、脸书、苹果、思科和甲骨文工作。事实上,仅在美国,就有 670 万人受雇于科技行业。这些工作在 30 年前并不存在。
Robopocalypse?
一些非常聪明和见多识广的人害怕 AI 会把我们带到哪里,一些同样聪明和见多识广的人认为我们应该 100%接受它。
埃隆·马斯克(特斯拉和 SpaceX 的首席执行官)、雷德·霍夫曼(LinkedIN 的创始人)和一小群互联网企业家成立了 openAI ,一家负责研究和俯瞰人工智能发展的公司。
“一旦开发出来,致命的自主武器将允许武装冲突以前所未有的规模和人类无法理解的速度进行。”埃隆·马斯克
马克·扎克伯格(脸书首席执行官)不同意,他说人工智能末日理论是不负责任的。
马克·扎克伯格说:“在未来的 5 到 10 年里,人工智能将会极大地改善我们的生活质量。”
那么,在不远的将来,人工智能会给我们带来什么呢?硅谷的专家认为,它将改变我们日常生活的每一个元素,从我们与他人互动的方式,到我们的家,我们的汽车等等。我非常期待看到它将带我们走向何方…
我从分析和可视化交通事故数据中学到了什么
Source: Power BI
概观
美国国家公路交通安全管理局(NHTSA)向公众公开了一些非常有趣的数据。我下载了几个数据集,其中包含从 1994 年到 2015 年的致命机动车辆碰撞和死亡的信息。本分析的目的是探索并更好地理解影响车辆碰撞可能性的一些因素。
分析和可视化是用 R 语言完成的。r 是可怕的,因为你会发现。
数据
加载库
我将使用下面的库进行分析和可视化。为了保持文章简洁,我没有展示大部分数据清理和分析步骤的代码,但是和我所有的文章一样,代码可以在 Github 上找到。
library(XML)
library(RCurl)
library(rvest)
library(dplyr)
library(tidyr)
library(ggplot2)
library(ggthemes)
library(reshape)
library(treemap)
美国的交通死亡人数一直呈下降趋势。值得注意的是,2014 年的死亡人数(不到 33,000 人)远低于 2005 年的峰值(超过 43,000 人)。
ggplot(aes(x=Year, y=Val), data = df_long_total) + geom_line(size = 2.5, alpha = 0.7, color = "mediumseagreen", group=1) +
geom_point(size = 0.5) +
ggtitle('Total Number of Accidents and Fatalities in the US 1994 - 2015') +
ylab('count') +
xlab('Year') +
theme_economist_white()
Figure 1
而且上述数字还没有考虑到路上不断增加的汽车数量。美国人开车比以往任何时候都多。
ggplot(aes(x=Year, y=Val), data = df_long_travel) + geom_line(size = 2.5, alpha = 0.7, color = "mediumseagreen", group=1) +
geom_point(size = 0.5) +
ggtitle('Total Vehicle Miles Traveled 1994 - 2015') +
ylab('Billion Miles') +
xlab('Year') +
theme_economist_white()
Figure 2
2015 年各州交通死亡人数以及与 2014 年相比的百分比变化
state <- state[c('State', 2015, 2014, 'Percent.Change')]
newdata <- state[order(-state$`2015`),]
newdata
- 德克萨斯州在 2014 年和 2015 年都是美国交通死亡人数最多的州。
- 可以理解的是,交通死亡人数最少的州也是居民最少的州,包括哥伦比亚特区,其次是罗德岛州和佛蒙特州。
在全国范围内,每年男性的机动车事故死亡率高于女性(两倍以上)。
ggplot(aes(x = year, y=count, fill=killed), data=kill_full) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Year') +
ylab('Killed') +
ggtitle('Number of Persons Killed in Traffic Accidents by Gender 1994 - 2015') + theme_economist_white()
Figure 3
25 至 34 岁年龄组的死亡人数最多。
age_full$age <- ordered(age_full$age, levels = c('< 5', '5 -- 9', '10 -- 15', '16 -- 20', '21 -- 24', '25 -- 34', '35 -- 44', '45 -- 54', '55 -- 64', '65 -- 74', '> 74'))
ggplot(aes(x = age, y=count), data =age_full) + geom_bar(stat = 'identity') +
xlab('Age') +
ylab('Number of Killed') +
ggtitle('Fatalities Distribution by Age Group 1994 - 2015') + theme_economist_white()
Figure 4
从 2005 年到 2015 年,只有两个年龄组的死亡人数增加;55 比 64 和 65 比 74。16 至 20 岁和 35 至 44 岁年龄组的死亡率下降幅度最大。
ggplot(age_full, aes(x = year, y = count, colour = age)) +
geom_line() +
geom_point() +
facet_wrap(~age) + xlab('Year') +
ggtitle('Traffic Fatalities by Age 1994 - 2015') +
theme(legend.position="none")
Figure 5
从这张树形图中,我们看到下午 3 点到 5 点 59 分和下午 6 点到 8 点 59 分死亡人数最多。让我们深入了解一下。
treemap(kill_by_hour_group, index=c("hours","variable"), vSize="sum_hour", type="index", fontsize.labels=c(15,12), title='Fatalities by time of the day', fontcolor.labels=c("white","orange"), fontface.labels=c(2,1), bg.labels=c("transparent"), align.labels=list(
c("center", "center"), c("right", "bottom")), overlap.labels=0.5, inflate.labels=F,
)
Figure 6
大多数事故发生在周六和周日的午夜到凌晨 2:59 之间。让我们更深入地探究一下原因。
ggplot(aes(x = variable, y = sum_hour, fill = hours), data = kill_by_hour_group) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Hours') +
ylab('Total Fatalities') +
ggtitle('Fatalities Distribution by Time of the Day and Day of the week 1994-2015') + theme_economist_white()
Figure 7
星期六和星期天的午夜到凌晨 2 点 59 分是许多人离开酒吧的时间。我们还要说多少次,不要酒后驾车?
ggplot(aes(x = year, y = count, fill = hour), data = pair_all) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Year') +
ylab('Number of Fatalities') +
ggtitle('Fatal Crashes caused by Alcohol-Impaired Driving, by Time of Day 1994-2015') + theme_economist_white()
Figure 8
在过去 10 年里,酒精中毒驾驶致死的比例实际上是持平的。
ggplot(aes(x = year, y = mean, color = bac), data = al_all_by_bac) +
geom_jitter(alpha = 0.05) +
geom_smooth(method = 'loess') +
xlab('Year') +
ylab('Percentage of Killed') +
ggtitle('Fatalities and Blood Alcohol Concentration of Drivers 1994-2015') + theme_economist_white()
Figure 9
轮到你了
NHTSA 为交通死亡信息提供了丰富的数据源。有数百种方法来分析它们,最好的方法取决于数据和你试图回答的问题。我们的工作是讲述一个有数据支持的故事。哪种类型的车辆更有可能发生碰撞?车辆中最安全的座位在哪里?所以,拿出你自己的故事,让我知道你在数据中发现了什么!
数据不能激励人,故事可以。
我从查看大量仪表盘中学到了什么
每个人都遵循同样的准则?对吗?
在准备最近的一次演示时,我试图找到一些仪表板来展示我的一些想法。我不想只显示我创建的仪表板。这些是普遍原则;每个人都遵循同样的指导方针?对吗?
如果你搜索谷歌图片,你可以一次看到许多仪表板的例子。只需快速点击几下,您就可以浏览这些网站,对主题有所了解。我承认我没有对所有的 500+图片做这个练习,但是我确实有一些收获。
产品演示会变得…奇怪
这些仪表板中的大部分都在炫耀产品功能,而不是实用的设计。这是我看到如此多种多样的数据对象放在同一个页面上所能得出的唯一结论。
地图旁边的三维饼图旁边的气泡图?有人的照片上有一打仪表?带交通信号灯的思维导图?抱歉,伙计们,这实在是太荒谬了。
我查看的大多数仪表板都有一个通用主题,如销售、客户服务或医疗保健。但是仪表板中的措施从来没有多大意义。通常,您不会将团队评级、年度销售业绩和产品缺陷计数等指标放在一起。我夸张了点,但离事实也不算太远。我想设计师是在说——看,你可以把所有的信息放在一起。但是你应该——我问?
我担心一个没有经验的设计师可能会用这些被误导的仪表板作为例子。我想知道那个人如何在他们的组织中取得成功。这个工具或者这个人将会因为这个危险的想法而受到责备。
仅仅是缺乏 Dataviz 知识吗?
更仔细地查看仪表盘,可以发现样式选择不佳,而且总体上缺乏数据可视化知识。最大的问题是仪表板仪表的误用。
虽然许多仪表板设计者反对仪表,但他们可以成功地使用。它们的使用是有指导方针的——但是许多这样的仪表板甚至没有遵循简单的指导方针。
许多基本的数据可视化原则也被忽略了。
也许一个设计师如此迷恋汽车仪表板的想法,以至于忘记了让数据被理解。哪个组织在同一个页面上有 20 个 KPI?
许多仪表板都有明亮的调色板和奇怪的背景颜色选择。
我所知道的关于仪表板的一件事是:如果用户不需要显示的数据——你的仪表板仅仅根据它的美观程度来判断。
如果用户需要信息来完成工作任务,仪表板可能很糟糕,但仍然很受欢迎。
但是你不想要一个好看的仪表板吗?想到一些可怜的懒汉因为你卑鄙的设计选择而受苦,难道不可怕吗?或者其他人嘲笑令人不快的仪表板设计。数据可视化和网页设计是一门学科。这是可以学习的。
术语“性能仪表板”没有得到普遍理解
一些设计师使用 MS Excel 创建了一个仪表板。这种技术只是对工具的误用。仪表板是一种组织工具,应该放在一个中心位置。您如何与组织共享 Excel 电子表格?通过电子邮件?如何保持更新,如何控制变化?我不会反复强调这一点,但是停止做那件事。
在我看来,绩效仪表板是组织中使用的一种特殊工具。它允许组织设定目标并在一段时间内跟踪这些措施。这是一项投资。随着组织的成长,仪表板帮助组织成长。它侧重于数据的使用,显示数据的真正价值。
仪表板应该是什么?
对于上面的许多设计,你不得不怀疑仪表板是否有效,甚至是否可用。从这个角度来看,仪表盘对于局外人来说可能会很无聊。仪表板是组织定制的,包含他们想要关注的内容。一个组织可能需要专注于培训,而另一个组织需要专注于用更少的资源提高效率。这些问题将具有不同的 KPI,并使用不同的支持信息。
你的外卖
当仪表板有吸引力且有用时,它就是完美的。很多时候,可靠的条形图、折线图以及一些标尺才是正确的答案。一个干净、简单的设计,允许用户关注度量,最终会使组织有效。
我认为这些原则并不能销售许多仅仅显示这些东西的仪表板构建工具。毕竟,销售和营销过程也是一门艺术。
我从谷歌的 Udacity 的 A/B 测试课程中学到了什么
在网站和移动应用的发展阶段,A/B 测试仍然是最常用的技术之一,也是经理和决策者回答业务问题的首选。A/B 测试有助于量化用户对新产品或新功能的反应,方法是将其与原始版本进行比较,看哪个版本表现更好。
通过这篇文章,我希望传达我对谷歌 Udacity 的 A/B 测试课程的理解。我会向任何考虑从事数据科学职业的人推荐这门课程。但是在你开始学习这门课程之前,请确保你已经掌握了推断统计学的概念,因为这门课程非常强调 A/B 测试的商业应用。你可以使用任何 stats 101 书籍作为本课程的补充,或者如果有足够的时间,你可以学习另一门关于 Udacity 的非常好的课程推论统计学简介。没有别的事了,让我们开始吧。以下是整篇文章的结构。
1.什么是 A/B 测试?
2.为什么 A/B 测试很重要?
3.为什么要考 A/B?为什么不是对照实验?
4.顾名思义,A/B 测试是否仅限于检查两种变体?
5.A/B 测试有哪些阶段?
- 探险
- 剥削
6.什么是 A/B 测试,什么不是?
7.结构良好的 A/B 测试的步骤
- 研究
- 选择和表征指标
- 实验单位和人群的选择
- 实验持续时间
- 分析结果
8.结论
9.关键要点
10.摘要
11.资源
1.重要的事情先来!什么是 A/B 测试?
A/B 测试是用于测试新产品或新功能的可行性的实验。这种技术是基于网络的实验设计的应用,或者更常见的工程实验设计。实验单元(网页或用户的输入流量)被分成两组(A 和 B),其中一组暴露于原始版本,另一组暴露于新版本。最终目标是评估成功标准并决定是否发布新特性。
2.为什么 A/B 测试很重要?
A/B 测试很重要,原因有二:
- 它们是解决短期商业问题的好方法。
- A/B 测试有助于得出因果结论
3.为什么要进行 A/B 测试?为什么不是对照实验?
A/B 测试类似于受控实验或分割测试,包括假设、控制和处理组(或原始与您想要尝试的变化)以及统计计算结果。唯一的区别是,当一个实验在受控环境中进行时,它被称为受控实验,而 A/B 测试是在互联网上进行的实验。A/B 测试通常不被称为受控实验的原因是,当涉及到互联网流量时,存在许多相关的可变性,这可以在一定程度上得到缓解,但很难在完全受控的环境中操作。
4.顾名思义,A/B 测试是否仅限于检查两个变体?
不要!A/B 测试不仅限于两种变化,你可以尝试 n 种变化。但是随着 n 的增加,每组测试需要更多的流量。其他类型的在线实验包括:
- 多元测试
- Bandit 算法
我将简要地谈一下其中的每一项。
**A/B 测试或 A/B/C/D/n 测试:**测试,一个属性有多个变量。A/B 测试用于确定最佳布局。在下图中,彩色块(或 4 页中每一页的标题)是属性,4 种不同的颜色代表我们正在测试的变化。我们可以看到黄色的变化比其他颜色做得更好。
**多元测试:**测试多个属性,每个属性都有多个变量。*MVT 用于确定哪组属性变化或属性组合产生最佳结果。*下图中的第 1 项、第 2 项和第 3 项代表三个属性,每个属性都有三种变化,分别用蓝色、粉色和灰色块表示。使用多元测试来润色页面布局。
Bandit 算法: Bandit 算法是 A/B/n 测试,根据每个变体的性能实时更新。
5.A/B 测试有哪些阶段?
任何 A/B 测试都有两个重要阶段:
1.探索:这是在部署变更之前,在目标人群的一个小的但有代表性的样本上测试您想要启动的变更的阶段,同时给予仔细的考虑以避免 I 型错误(假阳性)和 II 型错误(假阴性)的风险。相当大的声明!让我们把它分解成小块,试着去理解。
- “目标人群的小而有代表性的样本”:有一个有代表性的样本对于你的结论被认为是有效的是很重要的。在向整个目标受众发布您的变更之前,您可能希望在一个小但有代表性的人群样本上尝试您的变更,这样您就可以观察小部分受众的反应,如果结果不错,可以将您的结果推广到整个目标受众。
- “避免第一类错误(假阳性)和第二类错误(假阴性)的风险”:第一类错误(假阳性)是指,断定某项改变或干预有效果,而实际上没有。第二类错误(假阴性)是未能发起重大的变革。下图显示了一个误报的示例。
2.开发:启动变更。不言自明,对吧?
6.什么是 A/B 测试,什么不是?
A/B 测试有利于回答“这个还是那个?”类似的问题。一些例子是:
- 页面加载时间的增加会影响收入吗?在这里,您可能对用户界面(UI)进行了一些更改,这可能会增加延迟。因此,您可能希望 A/B 测试原始用户界面与新用户界面,看看收入是否有差异。
- 另一个例子是,测试改变按钮的颜色是否能提高点击率?当你想测试按钮的可用性,看看按钮在当前的阴影和大小下是否明显时,可以使用这个选项。谷歌进行了一个类似的实验,当他们无法在两种蓝色之间做出决定时,他们最终测试了 41 种不同色调的蓝色,介于两种蓝色之间。
另一方面,A/B 测试可能不是检查网站完整性、新体验(如厌恶变化与新奇效果)和任何长期变化(如买车或租房)的好选择。
- 网站的完整性:A/B 测试不能回答这样的问题,我们的网站上是否有缺失的产品?它可以回答产品 A 是否应该在产品 B 之上,但它不能判断网站上是否缺少产品 C,以及我们是否应该包含它。
- 新体验:一些用户可能不喜欢新的变化(这是厌恶变化),而另一些用户可能对尝试变化感到兴奋(这被称为新奇效应)。所以,这将很难提出一个基线,因为你不会知道你的传入流量的百分之多少属于变化厌恶,百分之多少属于新奇效应。这使得提出一个可比较的控制/治疗分割变得更加困难。另一个问题是时间表,即用户适应变化所需的时间,这样你就可以做出可靠的结论。
- 长期变化:这些也很难衡量。假设您想要检查出租公寓推荐方案的有效性。现在人们不经常租公寓,这使得很难在短时间内收集足够的数据来做出有效的结论。因为你进行实验的时间越长,你所观察到的变化由某个因素引起的可能性就越大,这个因素是最近出现的,但在实验开始时没有包括在内。例如,假设你从五月到八月进行出租公寓的实验。现在八月,通常标志着一个学期的开始,这意味着你可能会观察到出租公寓数量的突然增加。所以,如果你没有考虑这个因素,你可能会有一个假阳性。
7.结构良好的 A/B 测试的步骤
a.研究
在你考虑做任何实验或优化之前,请花点时间思考一下
- 你对商业目标有清晰的概念吗?
- 你有明确的目标吗?
- 你知道你要用什么 KPI(关键绩效指标)吗?
- 你有目标衡量标准吗?
一旦你清楚了这些事情,你就可以继续做一些理智检查,比如:
- 网站有什么 bug 吗?bug 可能是潜在的转换杀手。
- 不同设备和浏览器之间有差异吗?这些差异可能是不同设备和浏览器之间的延迟问题。进行测试来检查不同平台之间的一致性,可能会消除混淆或隐藏变量破坏实验的风险。
b.选择和描述指标
指标的选择取决于您希望指标服务的目的。有两类指标:
- 用于评估的指标:这些指标包括帮助跟踪深入信息(如用户对产品的体验)的详细指标,还有用于跟踪业务目标的高级业务指标。
- 用于健全性检查的指标:这些指标用于检查控制组和实验组是否具有可比性。因此,您可以检查两个组中的用户数量是否相同。这些组在分布等方面有可比性吗?
得出指标的步骤
第一步:为指标提出一个高层次的概念
这通常是一个大家都认同的定义。这些指标可以简单到点击率、点击率、活跃用户数量
第二步:将高层指标转化为完全实现的定义
因此,我们在步骤 1 中看到——活动用户数量——是一个高级指标。它的一个完全实现的版本将是定义什么是主动。是 1 分钟主动吗?还是 1 小时主动?还是 1 周活跃?因此,在定义一个完全实现的指标时,要记住的一件事是决定时间戳。你可能要考虑的另一件事是不同浏览器之间的一致性。每个浏览器与您的网站交互的方式可能不同,因此获取数据的方式也可能不同。此外,不同浏览器之间的延迟可能不同,这可能会导致差异。
现在,这些指标的有效性,在很大程度上依赖于您用来计算它们的数据,因此,评估不同的技术和收集数据的来源,值得同等关注。
那么,用什么数据呢?
很明显,你会使用从你的网站产生的数据,如点击,在一个页面上花费的时间,页面浏览量,创建的帐户数量等来运行 A/B 测试。但是除了这些数据之外,你还可以使用专注于收集数据的公司生成的外部数据,通过调查来回答有趣的问题,或者你可以雇佣公司使用用户体验研究和焦点小组等技术来生成你自己的深度数据。从这些技术中收集的数据可以作为验证您的指标的良好来源。这可以通过绘制内部数据与外部数据的趋势和季节变化并检查它们是否一致来实现。第二,您还可以使用这些数据来产生关于使用简单的度量标准的想法,作为较难度量的度量标准的代理。一个更难测量的度量标准的例子是,测量用户满意度。在一项研究中,用户报告的满意度与在网站上花费的时间进行了比较,以建立两者之间的一般相关性。通过这种相关性——在网站上花费的持续时间或时间——这很容易测量,被转换成一种衡量用户满意度的指标。
第三步:将测量结果汇总成一个指标
到目前为止,我们只有直接的数据测量,如页面浏览量、点击量、延迟等。但是现在我们需要想出一个方法来总结这些。要总结一个指标,我们需要考虑最终总结指标的以下两个特征:
- 敏感性和稳健性: 我们希望我们的指标足够敏感,能够捕捉到我们关心的变化,但同时指标也应该足够稳健,不会捕捉到我们不关心的变化。敏感性和稳健性很重要,因为它们使我们免于第一类错误(发起我们不关心的变更)和第二类错误(未能发起我们关心的变更)。为了衡量灵敏度和稳健性,我们可以:
- 运行实验:如果我们可以访问实验数据,那么我们可以运行实验,看看度量标准是否随着变化而移动。这将是一个很好的灵敏度测试。
- A vs. A 测试(或 A/A 测试):我们也可以用实验数据做 A vs. A 测试。在 A/A 测试中,对照组和治疗组都暴露于完全相同的变化。如果我们的指标在两组之间移动,那么这将是一个很好的迹象,表明该指标不够稳健。
- 回顾性分析:现在,如果我们无法访问实验数据,那么我们可以取出一些我们存档的数据,这些数据在过去用于运行类似的实验,并查看我们感兴趣的指标是否以我们想要的方式做出响应。
2。指标的分布: 分布用于确定一个特定指标相对于其他指标的优先级。比方说,我们有一个像正态分布一样的良好分布,那么均值或中值将是一个不错的选择。如果分布是偏斜的,那么百分位数将是一个很好的选择。
c.实验单位和人群的选择
下一个要考虑的重要话题是实验单位(分流单位)和你希望锁定的人群。在确定实验规模和决定如何将事件分配给实验组或对照组时,这两者都变得越来越重要。
- 实验单位: 这是用于定义哪个用户或哪个事件被分配到控制和实验组的转移单位。转移的单位可以是唯一的标识符,如 user_ID 或 cookie,也可以是基于事件的转移,如页面视图。分流单位的选择取决于三个重要的考虑因素:
- 用户一致性:如果我们正在处理一个用户可见的变化,我们希望我们的用户始终有一致的体验。因此,user_ID 或 cookie 将是一个不错的选择,如果我们试图实现的更改对用户不可见,那么基于事件的转移(如页面视图)将更有意义。这一点很重要,因为如果我们使用页面浏览量作为用户可见变化的转移单位,那么每次用户重新加载页面时,他们可能会被分配到一个新的组,即如果用户最初在实验组,现在他们可能会在控制组结束。
- 伦理考虑:因为真实的人作为实验单位参与了实验,所以仔细考虑实验的伦理是非常重要的。一些伦理考虑是风险、利益和隐私。如果风险超过最低风险的阈值,即包括身体、心理、情感、社会或经济问题,那么获得知情同意就变得至关重要。如果用户在研究完成后会受益,那么说明益处是很重要的。如果收集新数据的内部流程到位,那么隐私就不会是一个大问题,但如果不是,就需要额外的安全措施。
- 指标的可变性:分流单位的选择会极大地影响指标的可变性。与分析单位相比,如果转移单位更宽,则指标的可变性更高。分析单位基本上是指标的分母。因此,对于点击率来说,点击率被定义为#点击量/#页面浏览量,#页面浏览量成为分析的单位,(其中’ #点击量’读作’点击次数’)。因此,如果我们使用 user_ID 作为我们的转移单位,使用点击率作为我们的分析单位,那么我们的指标点击率的可变性会高得多,因为一个 user_ID 可以对应多个页面视图。
- 人口: 人口的选择将极大地影响你正在努力实现的新变化或新特性的成功。当您计划发起一项变更时,您会希望向最相关的受众发起变更,即更有可能对变更做出积极响应的用户。尽管您可能出于各种原因想要提前做出这个决定:
- 避免不必要的媒体报道:当你不确定是否要发起变革时,这尤其有用。因此,您可能需要限制暴露的用户数量。
- 第二个原因是,如果你计划在国际上发布变更,你可能需要额外确保使用的语言是正确的。
- 接下来,如果你知道这个变化将会影响到属于某一特定人群的用户,那么向全体用户发布这个变化可能会蒙蔽实验的效果。
现在主要问题!
公制、分流单位和人口的选择如何影响实验的规模?
- 我们在上一节中看到,如果分析单位与转移单位相同,指标的可变性就会降低。现在,由于可变性降低,同样的最低可检测效果所需的页面浏览次数也减少了。
- 正确的目标人群也减少了实验所需的样本量,因为我们不考虑无关的观众,因为他们可能会欺骗我们。
d.实验持续时间
实验的持续时间与您希望通过实验发送的流量比例有关。如果您的实验总共需要 20K 个用户(每个控制组和实验组中的 10K 用户),每天每组发送 500 个用户,将需要您运行实验 10 天。现在,如果您将数量减少到每天每组 250 个用户,实验的持续时间将会增加到 20 天。
当谈到持续时间时,需要记住的下一件重要事情是,*统计意义并不意味着实际意义!*仅仅因为您的测试显示了统计上的显著结果并不意味着您应该发起变革。统计意义基于统计界限,但实际意义基于你所关心的最小可检测效应。
也就是说,让我们正式声明一些停止规则:
停止规则:
决定持续时间(通常为 2-4 个业务周期)。我们考虑完整商业周期的原因是为了避免扭曲的结果,并获得一个有代表性的样本,因为它将包括每一个外部因素:一周中的每一天,不同的流量来源,季节性和任何其他外部事件,两次。
确定每天每组的最小样本量(如每个治疗组和对照组 400 名用户)
可能出现的一个重要现象是回归均值。根据这种现象,您可能会在初始阶段观察到明显的获胜变化,但是随着测试的进行,转换率没有任何差异。下图显示了转化率,4 周后回归到平均值。因此,如果您在测试过程中观察到不同变化之间的差异在减少,那么这可能是您应该运行更长时间测试的一个指示。这也使我们免于推出与当前版本没有什么不同的变体。
e.分析结果
执行理智检查
分析任何实验的第一步是检查控制组和实验组是否具有可比性,基本上是使用我们在第 2 节讨论的不变指标(选择和描述指标)进行健全性检查。如果健全性检查失败,就没有必要继续进行实验的其余部分。现在两组可能没有完全相同的实验单位数量,但应该大致相当。
分析结果
如果您有一个评估指标,那么您可以直接为您观察到的差异构建一个置信区间。如果置信区间不包含 0,则对照组和治疗组之间观察到的差异具有统计学意义,但正如我们之前讨论的,统计学意义并不意味着实际意义,如果最小可检测差异低于置信区间,则我们可以说我们观察到了我们关心的显著差异。
我们可以将我们的结果与从非参数检验(如符号检验)中获得的结果进行比较,看看它们是否与我们观察到的假设结果一致。
如果我们不观察统计显著性呢?
不要走得太快。A/B 测试是一个迭代的过程。多尝试几次迭代。
第二,寻找辛普森悖论。仅仅因为你的总体测试没有显示出统计学意义,并不意味着你的干预(或改变)不值得发起。这种变化可能会提高特定受众的转化率。在这种情况下,您可以使新版本对该细分市场可用,而不是向更广泛的受众发布,尽管您可能希望确保您可以证明为什么这种变化会改善该细分市场的体验。所以,注意细分。
您可能会考虑以下部分:
- 新用户与经验丰富的用户
- 移动设备/平板电脑与台式机
- Chrome vs. IE vs. Safari vs. Firefox
- 人口统计(年龄组、性别、城市、州、国家)
- 登录/注销界限内的用户与界限外的用户
- 直接来自页面的流量与来自内部链接的流量
现在,如果您有多个评估指标,这些指标之间可能存在一些相关性,但您总是可以假设独立性并获得保守估计,因此您可以使用类似 Bonferroni 校正的方法
8.结论
最后一步是得出结论。要得出结论,你基本上需要回答整个实验过程中的三个关键问题:
- 我们有统计上和实际上有意义的结果吗?
- 我们对变化理解得足够好了吗?
- 改变值得发起吗?
9.关键要点
- 检查,两次检查,三次检查实验的设置
- 统计意义并不意味着实际意义
- 变异的辛普森悖论与回归均值
- 如果这是你的第一个实验,可能会有很大的影响,做几个实验,看看你对结果是否满意
10.摘要
- 遵循结构化方法
- 研究并定义您想要改进的业务目标或 KPI。
- 进行实验
- 分析、学习和迭代
11.资源
我从数据科学竞赛中学到了什么
2 个月前,我开始参加在 Kaggle.com 举行的数据科学竞赛,用桑坦德银行的数据集预测客户满意度。由于这将是我第一次单独参加非计算机视觉 Kaggle 挑战赛,我认为这将是一个很好的途径,可以将我从论文、论坛和非正式对话中收集的一些建议付诸实践。这篇文章详细介绍了我所采取的步骤,哪些有效,哪些无效,希望它能帮助你在决定采取行动时有所作为!
对于那些对代码感兴趣的人,你可以查看我的 github 库这里。
xgboost
我几乎是本能地从 xgboost 开始的,这是一个流行的梯度增强实现,具有 R 和 python 接口,既能有效地利用服务器 CPU 上的多线程计算,又具有良好的预测性能。xgboost 模型在过去的许多 Kaggle 比赛中表现良好,也是许多脚本的初始选择。这也有助于它不需要很长时间的培训,特别是当运行在我的 48 核服务器在办公室!
数据清理
数据非常稀疏,有许多二进制和数字变量。通过在论坛上的一些探索和阅读,我发现有一些相关和重复的专栏,我立即删除了它们。我最初也删除了重复的行,但结果是性能更好的公共脚本没有删除它们,所以我保留了重复的行。不太清楚为什么它表现得更好。
论坛上暴露的另一个问题是出现了奇怪的号码,如-999999、999999999。我将它们替换为 NA,这将允许 xgboost 自动确定给定数据的最佳估算值。
特征工程
最初,我尝试了使用分位数的宁滨列,但似乎没有多大帮助,尤其是在公共排行榜上。根据我对 xgboost 实现的理解,该算法按分位数对数据进行分类,并从那里确定最佳分割。因此,这一步似乎有些多余,除非你有令人信服的理由不使用分位数来绑定变量。
与此相反的例子是年龄变量,我以 10 年为间隔进行分类,同时将所有 20 岁以下的客户归为一类。虽然比赛没有提供太多关于年龄的背景信息,但不难想象不同的年龄组会有不同的态度或满意度标准。由于年龄差异很大,让 xgboost 解释默认的年龄分位数可能不是训练模型的最有用的方法。这确实稍微提高了本地和公共 LB 分数,使我的公共 LB 分数超过了 0.840。
最后,我探索了为前 10 个变量添加双向交互。我首先运行一个 xgboost 模型来对变量重要性进行评分(因为它比运行线性模型更快!),并挑选了计算乘除交互作用的前 10 名。我用两种方法计算了除法相互作用(A/B and B/A),但我怀疑两种方法都有帮助,因为单调排序(以及分位数和分裂)会简单地反转。具有双向交互的模型在公共 LB 上表现稍差。
参数调谐
我用 xgb.cv 进行了一个简单的 5 重交叉验证的网格搜索,保存了 2 个模型;一个有双向交互,另一个没有。我使用 ggplot 来帮助可视化 AUC 的方差和均值。巨大的差异是一个明显的迹象,表明我不太相信我当地的简历分数和公众的 LB 分数。回过头来看,我意识到技术比一个好的公共 LB 重要得多,因为过度适应公共 LB 是很危险的,并且欺骗自己认为你不是。
分叉公共脚本
比赛快结束时,我发现时间很紧,公共脚本提供了一个复制最佳实践和特色工程思想的好方法。然而,公共脚本很容易过度适应公共 LB。鉴于各种用户对脚本的积极分流和对结果的现成评估,这意味着只有“更好”的脚本才能获得投票和公众的关注。某些脚本仅发布优化的参数,而没有通过交叉验证进行调整,这导致人们怀疑通过这些脚本获得的公开 LB 分数的可靠性。以下是我更详细的意思:
过度拟合公共 LB
我自己已经制作了几个非常相似的模型,我觉得我需要选择最好的一个来提交。由于我在比赛期间没有充裕的时间来慢慢回顾我的提交列表并评估更好的,我决定只选择公共 LB(公开分叉)上表现最好的脚本并提交它。结果是,我提交的模型在公共 LB 上给出的 AUC 为 0.842(在超过 5000 个条目中排名 644),将下滑到 0.825(排名 1620/5123),而我的尽职调优但简单的模型只会从 0.840 下降到 0.827(排名 145/5123)!这给了我一个非常重要的教训:相信技术,而不是短暂的分数。
组装
当然,事后看来,我应该知道最好的执行模型,但是当我只有公开的 LB 结果时,我应该如何选择我的提交?这就是集成的作用,它消除了过程中的猜测,同时减少了你的误差的方差。比赛结束后,我尝试了一个合奏,取了我选择的 4 个作品的天真平均值:
- 一个带有一些功能工程的公共脚本,在公共 LB 上得了 0.842 分(作者是一个叫 Mikhail 的家伙)
- 一个名为 xgb_lalala 的公共脚本(没有 cv,只有一组‘古怪的性能参数’)
- 我自己的脚本有和没有双向互动
结果几乎让我哭了(兴奋的泪水混合着悔恨的痛苦):
我希望这篇文章有所启发,不仅仅是技巧,还有面对排行榜上的激烈竞争坚持己见的重要性。
作为一名数据科学经理,我希望自己做得与众不同
集中孤立的数据
I still get nostalgic looking at the very first Pebbles. (Photo courtesy of Pebble’s first Kickstarter)
2014 年,我加入了后来被 Fitbit 收购的智能手表制造商 Pebble,领导他们的数据科学和分析团队。
我对在硬件公司管理数据组织的挑战很感兴趣。我上一份全职工作是在脸书平台的一家视频游戏开发商那里,分析是公司的命脉。我们对从游戏内机制到用户获取的一切都进行了集中登录。
我知道在硬件公司工作会有所不同。我们会有很多我在以前的工作中遇到的相同的业务问题——客户在哪里找到我们的产品?他们如何使用它?我们怎样才能让它变得更好?—但要回答这些问题,可利用的数据有限得多。当顾客在百思买购买你的产品时,很难推断他们是从哪里听说你的,也很难衡量你的营销努力的影响。当客户被动地将您的产品戴在手腕上时,很难知道哪些客户每天都会使用该产品,哪些客户通常会将手表放在抽屉里。
My favorite watch face, on the Pebble Time Round.
在我在 Pebble 工作的两年中,我们想出了许多方法来了解人们如何使用 Pebble,并确定我们如何改进它。但是我们在分散在不同系统的数据上苦苦挣扎。
关键信息分布在多个存储库中:来自手表的日志保存在一个可查询的数据库中。营销数据存储在谷歌分析中,有时访问受到限制。销售数据存储在来自零售分销商的巨大、难以解析的电子表格中。客户支持查询和退货数据被锁定在不可查询的第三方工具中。
筒仓的问题
许多公司面临着同样的问题:集中分析团队只能访问公司不同业务职能部门的一小部分信息,而他们无法获得跨职能部门的支持,将孤立的数据集中到一个中心位置。
把所有数据放在一个地方的好处很容易得到口头上的支持。但实际上实现这一目标并不是一件轻而易举的事情,需要多个岗位的多个人坐下来达成共识。
如果孤立的数据没有直接和明确定义的增值,每个人都将难以将集中化优先于他们手头的所有其他任务。即使您使用的工具应该使数据集中化变得“简单”,您也必须找到合适的人,比如说,让您获得适当的身份验证令牌,以将孤立的数据源连接到您的中央数据存储,并且这个“简单”的任务可能会拖上几天,直到您取消优先级并有效地放弃它。
也可能有合理的理由保持数据孤岛,而组织的不同部分并不完全理解。例如,有些公司拥有敏感的客户数据,出于隐私原因,整个组织都不能访问这些数据。
The fence between the data you have and the data you need.
“可是我们没有数据啊!”
“我们没有数据”是数据工作者哀叹的标准部分。作为一名经理,我觉得我工作的一部分就是让我的团队向我倾诉他们日常工作中的琐事所带来的挑战。
我知道数据工作有多令人沮丧。您花了几个小时清理一堆杂乱的数据,只是为了可以对其运行一个简单的脚本,您发现日志中的漏洞和错误弄乱了您的整个方法,或者您发现自己无法回答高管们提出的问题,因为您需要的数据根本不存在。处理数据需要用头撞墙,作为经理,我的工作就是承认这种挫败感,并尽可能有效地帮助团队克服它。
有时,经理可以提供建设性的解决方案,实际上解决这些问题。实现一个 ETL 脚本来保持数据整洁!与工程部门讨论如何修复日志记录错误!与另一个团队合作,访问您需要的数据!但是通常最好的选择是鼓励团队找到变通的解决方案。人们很容易被问题的细节所困扰,开始让完美成为美好的敌人。尽可能经常地,我想让我的团队成员回到鸟瞰图,这样他们可以找到一个足够好的解决方案来有效地解决他们的问题。
为什么管理者会让“我们没有数据!”关注幻灯片
这就是为什么,当我团队中的人提出我们应该集中访问谷歌分析、Zendesk 或零售销售数据的时候,我经常不予理会。这些数据通常对解决他们眼前的问题并不重要,而且作为一名经理,我倾向于不优先考虑那些“值得拥有”的东西
我也有一种直觉,我们的团队可能并不了解为什么这些数据最终会成为孤岛的所有复杂的组织原因,所以我不想花费宝贵的时间和精力去追逐那些最终会成为死胡同的数据。
但是我希望,无论何时,当我的团队抱怨他们无法使用某些东西时,我会告诉他们去解决他们自己的问题。
去找电商团队谈 Google analytics 吧!
去和支持团队谈谈 Zendesk 吧!
去和销售团队谈销售渠道数据吧!
如果你想要数据,让它发生!没有人会比你更关心这些数据,所以你会优先考虑这些数据。我会给你所有你需要的工具,把它输入我们的中央数据库。如果你没有访问数据的权限,那是你要解决的问题。去拿吧!
Collect ALL the data!
让你的团队继续前进
我尽最大努力让我的团队去追逐他们需要的数据。但是在这些情况下,他们通常会带着一个新的理解回来,为什么他们认为容易的事情实际上很难,他们会放弃他们的担忧,继续他们的下一个任务。
我希望我进一步鼓励了他们,并告诉他们坚持下去。
虽然集中式数据的直接价值并不总是显而易见的,但我确实相信将所有数据放在一个地方会有剩余和复合效应。但是,经理们通常无法确定集中化任务的优先顺序。有太多的孤岛,太多的团队需要加入,太多的令人担忧的问题需要优先考虑。
自上而下的数据集中化方法—数据科学副总裁与营销副总裁、销售副总裁、运营副总裁和首席执行官合作—过于庞大。但是零敲碎打——让一个有积极性的数据工作者在另一个部门找到一个合作者,并继续集中他们能集中的任何一点点数据——可能会成功。
Pebble 拥有适合这种自下而上方法的文化。总的来说,我们是一群友好、体贴、慷慨、思想独立的人。我们的组织文化强调自主意识,没有人会因为初级团队成员主动解决他们关心的问题而被冒犯。
自下而上的数据集中化方法可能并不适用于每家公司,但总的来说,我认为数据科学经理可以受益于将数据获取的责任交给他们团队中投资于所述数据的任何成员。他们才是将要使用它的人——为什么他们不应该有责任倡导获取他们需要的数据呢?
如果我告诉你数据库索引是可以学习的呢?
不幸的是,这篇论文我没能在 NIPS 上看到,但在过去的几天里,它在 ML 圈子里引起了相当多的关注。这些作者中包括杰夫·迪恩(Jeff Dean),一位非常受尊敬的早期谷歌员工,他们有一个核心观点,他们在整篇论文中重申:在他们的核心,数据库索引是模型。它们可能(通常)不会被统计学习,但是它们是在输入(索引建立所基于的键)和输出(内存中的位置)之间提供映射(希望非常快)的结构。二叉树是用于有序数据的典型结构,它甚至采取树的形式,这是机器学习工具箱中的核心工具。
基于这一关键的直觉,论文接着提出了这样的问题:如果这些结构仅仅是模型,那么统计模型是否可以学习并利用被索引数据的分布,比我们目前使用的索引更好——更小,更高效?剧透:答案(至少对于数值数据类型)是肯定的。
例如,可能所有元素的长度都相同,并且数字键的位置随着每个键前进 5:在这种情况下,您可以很容易地学习键和位置之间的线性回归映射,这将比必须有条不紊地一个一个拆分的 B 树快得多。B 树在最糟糕的情况下是有效的,在这种情况下,键的位置的 CDF 密度(如果你把它们排成一行)确实是随机的,并且假设是未知的。
关于 B 树的一个有趣的事实是,每当有新数据加入时,它们都需要重新平衡,作者认为这个过程类似于模型的重新训练。因此,出于比较的目的,他们简单地比较了在训练集上的性能,因为 B 树和候选统计模型只有在被重新训练后才能工作。
架构和结果
作者从训练一个基线模型开始:一个两层,每层 32 个隐藏单元,密集连接的网络。这个模型有两个主要问题。
- 首先,它生成作为关键字函数的最小/最大搜索位置的预测非常慢:它最初是在 Tensorflow 中训练的,它的前期成本很高,对于这样小的模型来说不值得
- 其次,它只是在单个键的层面上不够准确。虽然它在学习累积密钥分布的整体形状方面做得很好,但它避免了过度适应 CDF 函数中的小局部变化,因此当您“放大”密钥空间的小区域时会变得不太准确。因此,与只进行全键扫描相比,它并没有显著加快查找过程。按照他们设计问题的方式,一个简单的模型可以很容易地将预期的搜索误差从 100 米减少到 10,000 米,但由于模型中固有的平滑假设,很难将它一直减少到 100 秒的数量级
提议的解决方案
这些问题有两个关键的解决方案:一个是实施细节,另一个是理论创新。第一种方法相对简单(至少在概念上):构建一个框架,在这个框架中,您可以在 Tensorflow 中训练模型,但是模型是在推理阶段用 C++评估的。这使得之前测试的基准模型的性能大幅提升:从 80,000 纳秒降至 30 纳秒。
第二,作为“最后一英里”准确性问题的解决方案,是递归模型。在这个框架中,我们首先训练一个“顶级”模型,它输出对钥匙位置的预测。然后,我们把空间分成,比方说,三个部分,然后分别为每个子区域学习一个模型。因此,例如,顶部模型可能预测键 4560 映射到 10000 长的存储区域中的位置 2000。因此,他们会根据顶级模型的预测,将观察结果组合在一起,并专门训练一个新模型,比如说,预测位置在 0 到 3500 之间的键。
当这种方法——使用更有意义的优化代码的分层模型——在具有数字键值的数据上进行尝试时,结果确实令人印象深刻。与 B 树相比,使用小得多的模型,学习索引实现了有意义的加速,超过 60%。值得注意的是,下面的结果是*没有使用 GPU。*这表明如果 GPU 在数据库硬件中变得更加标准,这种改进甚至可能会增加。
他们目前只展示了对数字键建模的工作,但建议将目前用于文本的更复杂的方法(RNNs,字符级 CNN)添加到这个通用框架中。
Results for lat/long of Maps data
那么,除了它可能导致新一代数据库索引设计的实际事实之外,为什么所有这些首先是有趣的呢?
首先,我要承认,在我心中,那些在一个知识领域的背景下重新构建另一个知识领域的论文有着特殊的地位。除了介绍一些引人注目的 ML 思想之外,这篇文章还让我更深入、更清晰地思考索引如何工作背后的机制,而在以前,这一直是我通常理解但没有深入研究的东西。
其次,这只是一个实际的事实,作为机器学习模型被用来优化运行它们的低级系统的一个例子,它似乎是有意义的。这是我记得看到的第一篇使用机器学习来优化计算过程本身的论文之一,但它似乎不太可能是最后一篇。
你的数据不正常怎么办?
在本文中,我们讨论了统计数据分析的切比雪夫界。在对给定数据集的正态性没有任何概念的情况下,该界限可用于衡量数据在平均值附近的集中程度。
介绍
这是万圣节周,在恶作剧和款待的间隙,我们这些数据极客正在社交媒体上为这个可爱的迷因窃笑。
你认为这是一个笑话?我告诉你,这可不是闹着玩的。这很吓人,符合万圣节的精神!
如果我们不能假设我们的大部分数据(商业、社会、经济或科学来源的)至少是近似“正常的”(即它们是由高斯过程或多个这样的过程的总和产生的),那么我们就注定要失败!
这里有一个非常简短的列表,列出了一些无效的东西,
- 六西格玛的整体概念
- 著名的68–95–99.7 法则
- 统计分析中 p =0.05 (来自 2 sigma 区间)的‘神圣’概念
够吓人吗?大家再多聊聊吧…
无所不能、无所不在的正态分布
让我们保持这一节的简短和甜蜜。
正态(高斯)分布是最广为人知的概率分布。这里有一些描述其功能和广泛适用性的文章的链接,
高斯分布如此受深度学习、机器学习工程师和…
towardsdatascience.com](/why-data-scientists-love-gaussian-6e7a7b726859)
由于它出现在各个领域和中心极限定理 (CLT),这种分布在数据科学和分析中占据中心位置。
在概率论中,正态(或高斯或高斯或拉普拉斯-高斯)分布是一种非常常见的连续…
en.wikipedia.org](https://en.wikipedia.org/wiki/Normal_distribution)
那么,有什么问题呢?
这一切都很好,有什么问题?
问题是,您经常会发现特定数据集的分布可能不满足正态性,即正态分布的特性。但是由于过度依赖正态假设,大多数商业分析框架都是为处理正态分布的数据集而定制的。
它几乎根深蒂固地存在于我们的潜意识中。
假设您被要求检测来自某个流程(工程或业务)的一批新数据是否有意义。通过“使有意义”,你的意思是新数据是否属于,即它是否在“预期范围”内。
这个‘期望’是什么?如何量化范围?
我们自动测量样本数据集的平均值和标准偏差,并继续检查新数据是否在特定的标准偏差范围内,就像受到潜意识驱动的指引一样。
如果我们必须在 95%的置信范围内工作,那么我们很高兴看到数据落在 2 个标准差以内。如果我们需要更严格的界限,我们检查 3 或 4 个标准偏差。我们计算 Cpk ,或者我们遵循六西格玛的质量 ppm (百万分率)标准。
所有这些计算都基于一个隐含的假设,即总体数据(而非样本)遵循高斯分布,也就是说,所有数据(过去和现在)生成的基本过程由左侧的模式控制。
但是如果数据遵循右边的模式会发生什么呢?
或者,这个,还有……那个?
数据不正态时有没有更普适的界限?
最终,我们仍然需要一种数学上合理的技术来量化我们的置信区间,即使数据不正常。这意味着,我们的计算可能会有一点改变,但我们仍然可以这样说-
“在距平均值一定距离处观察到一个新数据点的概率是这样那样……”
显然,我们需要寻找一个比 68–95–99.7(相当于距离平均值 1/2/3 的标准偏差)更普遍的界限。
幸运的是,有一种这样的束缚叫做“切比雪夫束缚”。
什么是切比雪夫界,它有什么用?
切比雪夫不等式(也称为 Bienaymé-Chebyshev 不等式)保证,对于一大类概率分布,不超过某个分数的值与平均值的距离不超过某个距离。
具体来说,不超过 1/ k 个分布值可以超过 k 个偏离平均值的标准偏差(或者等价地,至少1 1/k个分布值在平均值的 k 个标准偏差内)。
它适用于几乎无限类型的概率分布,并且基于比正态性更宽松的假设。
它是如何工作的?
即使你对你的数据背后的秘密过程一无所知,也有很大的机会你可以说出下面的话,
“我相信所有数据的 75%应该在平均值的 2 个标准偏差之内”,
或者,
我相信 89%的数据应该在平均值的 3 个标准偏差之内”。
这是任意分布的情况,
Image Credit: https://2012books.lardbucket.org/books/beginning-statistics/s06-05-the-empirical-rule-and-chebysh.html
如何应用?
正如您现在所猜测的,您的数据分析的基本机制不需要做任何改变。您仍将收集数据样本(越大越好),计算您习惯计算的两个量——平均值和标准差,然后应用新的界限,而不是 68–95–99.7 规则。
该表如下所示(这里 k 表示远离平均值的许多标准偏差),
Image: https://en.wikipedia.org/wiki/Chebyshev%27s_inequality
这里是它的应用的视频演示,
有什么条件?为什么人们不用这种‘更普遍’的束缚呢?
通过查看表格或数学定义,很明显有什么问题。切比雪夫规则在对数据设限方面比高斯规则弱得多。
与正态分布的模式相比,它遵循 1/k 模式。
例如,要以 95%的置信度绑定任何东西,您需要包括多达 4.5 个标准差的数据,而不是只有 2 个标准差(对于正常情况)。
但是当数据看起来一点也不像正态分布时,它仍然可以挽救这一天。
还有更好的吗?
还有一个界叫做“ 切尔诺夫界”/赫夫丁不等式 它给出了独立随机变量和的指数锐尾分布(与 1/k 相比)。
当数据看起来不正常时,这也可以用来代替高斯分布,但是只有当我们高度确信底层过程由彼此完全独立的子过程组成时。
不幸的是,在许多社会和商业案例中,最终数据是许多子流程极其复杂的交互的结果,这些子流程可能具有很强的相互依赖性。
摘要
在本文中,我们了解了一种特殊类型的统计界限,它可以应用于与正态假设无关的最大可能的数据分布。当我们对数据的真实来源知之甚少,并且不能假设它遵循高斯分布时,这就很方便了。该界限遵循幂律,而不是指数性质(如高斯),因此较弱。但是它是一个重要的工具,可以用来分析任意类型的数据分布。
你可以查看作者的 GitHub 知识库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样,对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
* [## Tirthajyoti Sarkar -数据科学工程经理- Adapdix Corporation | LinkedIn
将 AI/ML 的力量放在工业 4.0 和下一代智能工厂的边缘。将人工智能引入工业领域…
www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)*
英特尔最近的举动将如何影响深度学习
谁没听说过英特尔这个引领处理器发展的科技巨头呢?虽然它曾经引领计算设备行业,但由于竞争对手不断涌现,用于移动设备和其他下一代设备的处理器不断涌现,它的声誉最近正慢慢黯然失色。幸运的是,这位技术领袖并不打算很快被淹没。引用 Ingrid Lunden 在她的 TechCrunch 文章中的话,
该公司的目标是成为下一波计算浪潮的中心,这是其关注 R&D 和其他人工智能投资的更广泛背景。
没错:英特尔曾经引领计算领域的潮流,它计划在人工智能领域也这样做。这一努力的最新步骤是:获得顶点。AI,正如 2018 年 8 月 16 日宣布的那样,并让这个团队与英特尔的 Movidius 团队一起工作。
Image by author
不太清楚这意味着什么,以及它将如何影响深度学习,是吗?我们将把它分成几个部分,理解每一个部分,以便更好地了解全局。在这样做的时候,我们将看到这一举动将如何影响这一领域的进展。
云:去而复返
机器学习(ML)或深度学习(DL)模型需要经过训练、测试和部署才能适合使用,这就是问题所在:这些需要大量的计算!随着更好更复杂的算法被开发出来,笔记本电脑再也无法在合理的时间范围内应付了。谁会愿意让自己的笔记本电脑连续四天不停地进行数学运算呢?因此,开发人员借助谷歌云平台和亚马逊网络服务等服务,将他们的模型运行在云上。通过这种方式,他们可以腾出笔记本电脑来执行其他任务。
这些解决方案虽然在某种意义上很方便,因为开发人员现在可以免费使用他们的笔记本电脑,但不幸的是,它们并不适合解决速度至关重要的问题,换句话说,就是实时问题(下面将提到一些例子)。随着越来越多的人使用这种服务,集中式云计算预计会变得很麻烦,因为通信期间的延迟预计会增加。如果开发人员有一些设备,如 USB,其目的是做这些密集的计算,模型可以部署在本地,并给出几乎即时的响应…进入英特尔 Movidius!
英特尔移动
正如 Siraj Raval 的视频中所描述的,英特尔 Movidius 神经计算棒由英特尔的一个名为 Intel Movidius 的团队创建,是一种将模型从“云”(在线,在远程服务器中)带到“边缘”(本地)的设备。换句话说,它允许用户在本地测试和部署模型。由于不需要与数据服务器通信,实时使用现在可以更快地完成。此外,由于数据保存在本地,不会发送到中央服务器,因此数据隐私问题较少。
应用多种多样,例如智能安全摄像头、手势控制无人机和工业机器视觉设备,如英特尔 NCS 页面所述。请注意,在这些应用程序中,速度是最重要的。例如,在手势控制的无人机场景中,如果无人机检测到有人向它投掷物体,最好的解决方案是尽可能快地躲开,立即做出决定,而不是记录场景,将其发送到服务器,等待回复,然后根据回复采取行动。
好吧,但这和顶点有什么关系?AI?好吧,我们会查出来的!
顶点。人工智能,以及他们加入英特尔将如何影响深度学习
顶点。AI 是一家创业公司,在他们的网站上写着如下宗旨:
我们正致力于将神经网络的力量应用到每一个应用中,使用内部发明和构建的新技术,使不可能的应用成为可能。
顶点。AI 正在建立一个名为 PlaidML 的平台,其任务是在任何设备上启用高性能神经网络。这的确是一个非常崇高的使命,因为正如该项目的 Github 资源库所提到的那样,它们已经是实现这种算法与操作系统(Linux、Windows、macOS)和硬件(Intel、AMD、ARM 等)兼容的最快和最简单的平台。嗯……最快最简单,那么这会给用户的预算造成多大的缺口呢?这个项目是开源的(因此 Github 上的任何人都可以看到),这个平台是免费使用的!
A comparison of PlaidML with alternative tensor compilers (TVM and Tensorflow Comprehension)
现在我们有了不同的拼图。剩下的就是把它们放在一起。
- 英特尔 Movidius 团队努力工作,推出了英特尔 Movidius 神经计算棒,可以对本地部署的模型进行计算。这提高了速度,消除了与中央数据服务器通信的需要。
- 英特尔收购了 Vertex。简而言之,AI 的目的是让深度学习在任何地方都能工作,并计划让这个团队与英特尔 Movidius 一起工作。
(Sourced from https://www.cbronline.com/news/startup-vertex-ai)
在未来几年(如果不是几个月的话)可以预期的是,实时深度学习应用(由 Movidius 实现)的繁荣,在所有平台上工作(由 Vertex 实现)。AI)。随着两个团队共同努力实现他们设定的目标,以及对这种组合的认识的提高,这种增长将会发生。实时应用将会像我们想象的那样丰富多彩,并将有助于推动人类沿着人工智能的道路前进。
如果你喜欢这篇文章,请给它一个掌声,这样其他人也可以找到它。在数据科学社区中互相帮助总是好的:)
Hans A. Gunnoo 是一名数据科学家,他的职业生涯始于电子工程,后来专攻机器学习。他还在业余时间为开源人工智能项目和关于数据科学领域最新趋势的博客做出贡献。
什么是 DAPP?
Apps vs. DAPPs
DAPP(分布式应用程序)由运行在分布式对等网络上的后端代码组成。DAPP 也可以有一个用户界面,由调用后端的前端代码创建。DAPPs 不需要一个中央机构来运行:它们允许用户和提供商之间的直接交互。
DAPPs 的特性
DAPPs 通常具有以下特征:
- 他们在区块链上奔跑
- 他们的代码是开源的,自主运行,没有任何人或团体控制大多数令牌
- 它们生成 DAPP 令牌来为它们的贡献节点提供价值
- 用户被授予对它们的访问权以换取令牌
- 当矿工成功地为生态系统做出贡献时,他们会得到代币作为奖励
Unlike most Apps in use today, DAPPs store all their data on a blockchain and have their back end code running on a blockchain instead of with a central authority.
DAPPs 的种类
以太坊描绘了 DAPPs 的三个主要类别:
1.资金管理应用:用户可以在区块链网络上使用其固有货币进行交易。这些 DAPPs 通常都有自己的区块链,我们通常称之为加密货币(比如比特币)。
2.将金钱与外部真实事件相结合的应用程序:例如,一家物流公司可能使用 RFID 芯片位置来确定一批货物已经到达港口,然后才支付货款。如果买卖双方签订一份智能合同,这甚至可以用区块链上的资金完成,无需人工干预。
3.分散自治组织(DAOs):区块链上分散的、无领导的组织。这些从概念开始,根据编程定义的规则运行,这些规则关于什么实体可以是成员,成员如何投票,他们可以从事什么业务或活动,以及代币、资金或价值如何交换。一旦部署,DAPPs 会根据它们的规则自动运行。他们的成员可以在地理上分散在任何地方。
迄今为止,DAPP 初创公司(建立在区块链平台之上)已经构成了 ico 的大部分。大多数当前的 2 类和 3 类 DAPPs 使用以太坊平台。
DAPPs present a new paradigm for fintech and money management related applications.
为什么是 DAPPs?
DAPPs 本质上允许所有后端代码和数据去中心化,因此是不可变的和防篡改的。考虑到这些应用的分散性质,再加上保护区块链数据的机制,DAPPs 有潜力开启各种各样的用例。
创建 DAPP 而不是普通应用程序的一些好处包括:
支付处理:无需与法定支付提供商集成来接受用户资金,因为用户可以直接使用加密货币进行交易
用户证书:使用公钥和私钥系统,用户可以轻松地以不同程度的匿名处理和绑定他们的用户会话和元数据,无需冗长的注册或登记过程
信任和可审计性:聪明的用户可以访问和理解开源的 DAPP 代码。封闭数据的这种透明性和固有的安全性产生了对应用程序的信心。区块链上的公共记录也使得交易信息易于被用户或第三方审计
Ethereum is currently the platform of choice for DAPP developers, with several extremely promising contending platforms closing in.
结论
DAPP 的前景正在迅速演变。虽然以太坊目前是 DAPP 开发人员的首选平台,但 Cardano、Lisk、QTUM 和 NEO 也是 DAPP 开发的热门平台。也有许多努力正在进行中,以建立其他大规模的 DAPP 平台。
DAPP 开发正处于萌芽阶段,但 DAPP 提供的优势(传统的集中式应用程序没有)表明,我们可以期待在不久的将来看到区块链技术令人印象深刻的新功能和用例。
—
关注 Lansaar Research 关于媒体的最新新兴技术和新商业模式。
什么是“数据工程师?”
今年早些时候,我的老板与我和一位同事一起为我们的团队定义了一个新职位——数据工程师职位。这让我很兴奋,因为自从进入大学毕业后的职业生涯以来,我一直有一个不幸的习惯,那就是从事与他们的头衔或描述不符的工作。在研究了其他公司如何描述相同的职位后,我意识到这最接近我目前的职责(以及我的兴趣)。
上周,我有机会描述了我的职业道路,以及在此基础上,我如何解释我目前作为一名数据工程师的职责。我进一步解释了我所看到的“数据工程师”和其他几个热门的数据相关职业(包括著名的“数据科学家”)之间的区别。最终目标是帮助一个同为多面手的人(也在市场运营部门工作)决定她在职业生涯中可能有哪些选择。
在收到积极的反馈后,我决定写下我的想法来阐明我所看到的数据工程。
我怎么会在这里
大学一毕业(拥有数学学位),我就在临床研究领域找到了一份“治疗数据分析师”的工作它通常被描述为一个数据科学家类型的角色,在谷歌搜索这个术语并看到它是一个有前途的职业后,我就接受了这个角色。几年后,随着对行业标准术语有了更多的了解,我把它更多地描述为一个商业智能分析师,也就是说,把来自不同来源的数据拉进中小企业的标准报告中。这里和那里都涉及到数据科学——我们会被要求根据数据帮助做出决定,然后我们会创建用 r 编写的定制算法。
随着时间的推移,我意识到我们的许多业务问题可以通过提供对我们正在使用的数据的更容易的访问来解决,这个角色演变成了一个商业智能工程师。我的日日夜夜都专注于数据库设计、ETL 工作、与供应商应用程序的基本集成,以及设计用户界面(虽然有些糟糕,但总比没有好)。我保留了我最初的头衔——治疗数据分析师——当我开始寻找职业生涯的下一步时,这是一个障碍,因为我没有合适的词语来描述我正在做什么或想要做什么。
当我作为一名解决方案工程师被 Red Hat 聘为营销运营时,这份工作被官方描述为用最新的 NodeJS 栈构建内部的、面向用户的工具。鉴于我的技能,我有机会从事我们的营销自动化基础设施的工作(当时主要是在 Eloqua 的程序构建器界面中构建的)。日常工作包括设计新的数据自动化流程,并使用数据分析对现有流程进行故障排除。但是,随着解决方案工程师团队越来越关注 javascript 应用程序,我们需要对数据人员所做的事情进行新的描述。看了几篇很有帮助的博文(数据工程师的崛起),我们团队的数据工程师工作诞生了。
有什么区别?
我和我的数据工程师( D E)同事认为自己是构建健壮、一致、高质量数据流程的人。我们中的一些人有不同的关注点(例如,开发接近实时的销售线索数据管道与维护全球数据仓库和仪表板),但质量和一致性是我们的共同因素。
我们的目标还包括教育和鼓励其他企业用户如何最好地使用和应用可用数据。由于我们最接近数据创建级别,我们通常是理解数据可能具有的潜在假设和警告的专家(这对于做出基于数据和数据驱动的决策至关重要)。
我们的营销运营团队有许多面向数据的角色,因此区分这些角色的起点和终点非常重要:
- 应用工程师:这两个职位通常需要相同的技能(面向对象编程,解决问题),但是应用工程师通常在 UX 投资更多。DEs 也有潜在的更大的错误后果,包括数据修复工作和收入损失。
- 数据分析师:通常专注于解释和说明数据,以帮助业务用户做出更好的决策。虽然涉及到分析,但对于 DE 来说,其目的通常是排除故障和改进现有的基础设施。
- 数据科学家:热门职业,有时从 BI 分析师到机器学习专家不等(因为是比较年轻的职业,像德,没那么多固化的定义)。在不知不觉中,DE 角色经常有很多重叠,因为数据科学家需要干净、标准化的数据来进行分析。
我希望这能为一些人提供数据工程的有用解释,以及它与其他数据职业的关系。考虑到数据收集和使用的迅速发展,对进入这个行业的人来说,清楚地了解这些选项是很重要的。
请随时留下您的想法、问题或不同意见!
什么是决策树?
银行在考虑是否向某人提供贷款时,通常会考虑一系列问题,以判断向个人提供贷款是否安全。那些问题可以从人有什么样的收入这样简单的问题开始。如果介于 30-70,000 美元之间,他们会继续回答下一个问题。他们目前的工作做了多长时间?如果 1-5 年后,这会导致他们的下一个问题:他们会用信用卡付款吗?如果是,他们会提供贷款,如果不是,他们不会。这个过程最基本的形式是决策树。
决策树是用于回归和分类问题的大量使用的非参数有效机器学习建模技术。为了找到解决方案,决策树根据预测数据对结果变量进行连续的、分层的决策。
那么这一切意味着什么呢?
分层意味着模型由一系列问题定义,当应用于任何观察时,这些问题导致一个类别标签或一个值。一旦建立起来,模型就像一系列“如果这发生,那么这发生”条件中的协议,从输入数据产生特定的结果。
非参数方法意味着没有关于误差或数据分布的潜在假设。它基本上意味着模型是基于观察到的数据构建的。
目标变量使用一组离散值的决策树模型被分类为分类树。在这些树中,每个节点或叶子代表类标签,而分支代表导致类标签的特征的合取。目标变量取连续值(通常是数字)的决策树称为回归树。这两种类型通常在 CART(分类和回归树)中一起被提及。
每个购物车模型都是有向无环图的一个例子。这些图具有表示关于给定预测值的主变量的决策点的节点,边是节点之间的连接。在上面的贷款场景中,30-70 美元是一个优势,而“工作年限”是节点。
由于决策树的目标是在每个节点的末端做出最佳选择,因此它需要一种能够做到这一点的算法。这种算法被称为亨特算法,它既贪婪又递归。贪婪意味着在步骤中它做出最优决策,递归意味着它将较大的问题分成较小的问题,并以相同的方式解决它们。根据称为纯度的度量标准,决定在每个节点进行拆分。当一个节点被 50/50 平均分割时,它是 100%不纯的,当它的所有数据都属于一个类时,它是 100%纯的。
为了优化我们的模型,我们需要达到最大纯度并避免杂质。为了衡量这一点,我们使用了基尼系数,它衡量随机选择的元素被错误标记的频率,如果它是根据分布随机标记的。它的计算方法是将标签为 I 的物品被选中的概率 pi 乘以时间分类错误的概率(1–pi)。我们的目标是让它达到 0,在这里它将是最小不纯的,最大纯的,属于一个类别。
使用的另一个度量是信息增益,它用于决定在树的每一步拆分什么特征。这是通过维基百科精心设计的方程式计算出来的,
Information Gain = Entropy(parent) - Weighted Sum of Entropy(Children).
虽然这是一个很好的模型,但它确实存在一个很大的问题,即当所有信息都在一个类或属性中时,它会停止运行。以偏差为代价,这个模型的方差是巨大的,肯定会导致过度拟合。“决策树学习者可以创建过于复杂的树,这些树不能很好地从训练数据中归纳出来。”那么网络如何应对这种情况呢?我们可以设置决策树的最大深度(即,它将深入多少个节点(上面的贷款树的深度为 3 )),和/或另一种方法是指定做出每个决策所需的最小数据点数。
决策树的其他缺点是什么:它使用贪婪算法进行局部优化,我们不能保证返回到全局最优的决策树。如果单个类接受一个数据集,这是一个令人难以置信的有偏差的模型,除非数据集在放入树中之前是平衡的。
虽然有缺点,但决策树也有很多优点。
由于它们的可视化表示,它们非常容易理解,它们需要很少的数据,可以处理定性和定量数据,可以使用统计集进行验证,可以处理大量数据,并且计算成本非常低。
我希望这篇文章能帮助你更好地理解决策树。对于编码和更多关于它们的知识,我强烈建议您查看关于决策树的 Scikit-Learns 文档。
什么是生成性对抗网络?
生成模型中有什么?
在我们开始讨论生成对抗网络 (GANs)之前,有必要问一个问题:生成模型中有什么?为什么我们甚至想拥有这样的东西?目标是什么?这些问题可以帮助我们思考如何更好地与 GANs 合作。
那么我们为什么想要一个生成模型呢?嗯,名字里就有!我们希望创造一些东西。但是我们希望产生什么呢?通常,我们希望生成数据(我知道,不是很具体)。除此之外,我们很可能希望生成以前从未见过的数据,但仍然适合某种数据分布(即我们已经放在一边的某种预定义数据集)。
这样一个生成模型的目标是什么?变得如此善于提出新生成的内容,以至于我们(或任何正在观察样本的系统)再也无法区分什么是原创的,什么是生成的。一旦我们有了一个可以做这么多的系统,我们就可以自由地开始产生我们以前从未见过的新样本,但仍然是令人信服的真实数据。
为了更深入一点,我们希望我们的生成模型能够准确地估计我们真实数据的概率分布。我们会说,如果我们有一个参数 W,我们希望找到使真实样本的可能性最大化的参数 W。当我们训练我们的生成模型时,我们找到这个理想的参数 W,使得我们最小化我们对数据分布的估计和实际数据分布之间的距离。
分布之间距离的一个很好的度量是 Kullback-Leibler 散度,它表明最大化对数似然相当于最小化这个距离。采用我们的参数化生成模型,并最小化它与实际数据分布之间的距离,这就是我们如何创建一个好的生成模型。它还把我们带到了两种类型的生成模型的分支。
显式分布生成模型
显式分布生成模型提出显式定义的生成模型分布。然后,它通过对数据样本的训练来改进这种明确定义的参数化估计。显式分布生成模型的一个例子是变分自动编码器 (VAE)。VAEs 需要一个明确假定的先验分布和似然分布。他们使用这两个组成部分得出一个“变分近似”来评估他们的表现。由于这些需求和这个组件,vae 必须显式分布。
隐式分布生成模型
就像你可能已经放在一起的一样,隐式分布的生成模型不需要对它们的模型分布进行显式定义。相反,这些模型通过从其参数化分布中间接采样数据来训练自己。你可能已经猜到了,这就是 GAN 所做的。
它到底是怎么做到的?让我们深入研究一下 GANs,然后开始描绘这幅画面。
高级 GAN 理解
生成敌对网络的名字有三个组成部分。我们已经谈到了生成方面,网络方面是不言自明的。但是对抗性的部分呢?
GAN 网络由两部分组成,一个发生器(G)和一个鉴别器(D)。这两个组件一起出现在网络中,作为对手工作,推动彼此的性能。
发电机
生成器负责生成虚假的数据示例。它将一些潜在变量(我们称之为 z)作为输入,输出与原始数据集中的数据形式相同的数据。
潜变量是隐藏变量。当谈到甘时,我们有一个“潜在空间”的概念,我们可以从中取样。我们可以不断地滑过这个潜在的空间,当你有一个训练有素的 GAN 时,它会对输出产生实质性的影响(有时是可以理解的影响)。
如果我们的潜在变量是 z,我们的目标变量是 x,我们可以把网络的生成器看作是学习一个从 z(潜在空间)映射到 x(希望是真实的数据分布)的函数。
鉴别器
鉴别者的作用就是鉴别。它负责接收样本列表,并预测给定样本是真是假。如果鉴别器认为样本是真实的,它将输出更高的概率。
我们可以把我们的鉴别器想象成某种“扯淡检测器”。
对抗性竞争
这两个组成部分走到一起,一决雌雄。生成器和鉴别器彼此对立,试图最大化相反的目标:生成器希望创建看起来越来越真实的样本,而鉴别器希望总是正确地分类样本来自哪里。
事实上,这些目标是彼此直接对立的,这也是 GANs 名字中对抗性部分的由来。
谁不爱用一个好的比喻来学习理解一个概念呢?
艺术品赝品
当我第一次了解甘斯时,我最喜欢的比喻是伪造者对批评家的比喻。在这个比喻中,我们创造者是一个试图伪造艺术品的罪犯,而我们的鉴别者是一个艺术评论家,他应该能够正确地鉴别一件作品是赝品还是真品。
两者来回往复,彼此直接对立。试图超越他人,因为他们的工作依赖于此。
伪造的货币
如果不是艺术品伪造任务,而是我们有一个试图制造假币的罪犯和一个试图确保他们不接受任何假币的银行实习生。
也许在开始的时候罪犯是非常坏的。他们进来,试图递给实习生一张纸,上面用蜡笔画着一美元钞票。这明显是假美元。但也许实习生也真的不擅长他们的工作,并努力弄清楚这是不是真的假的。两个人都会从他们的第一次互动中学到很多。第二天,当罪犯进来的时候,他们的假钱会变得更难辨别真假。
在日复一日的活动中,这两个人来来回回,变得非常擅长他们的工作。然而,在某一点上,可能有一天两者会达到某种平衡。从那里,罪犯的假美元变得如此逼真,甚至没有一个经验丰富的专家甚至可以开始告诉它是假的还是真的。
那是银行实习生被解雇的日子。
这也是我们利用我们的罪犯变得非常富有的一天!
鹦鹉
前两个例子非常直观。但是一个稍微不同的例子呢。
假设我们的发电机是我们的宠物鹦鹉,我们的鉴别者是我们的弟弟。每天,我们坐在窗帘后面,我们的鹦鹉坐在另一个窗帘后面。我们的鹦鹉会试着模仿我们的声音来愚弄我们的弟弟。如果他成功了,我们就请他吃一顿。如果我们的兄弟猜对了我们在哪个窗帘后面,我们会给我们的兄弟一份礼物(希望不是给我们的鹦鹉的礼物)。
可能一开始,鹦鹉真的不擅长模仿我们的声音。但是日复一日的练习,我们的鹦鹉也许能够发展出完美地模仿我们声音的技能。在这一点上,我们已经训练我们的鹦鹉像我们一样说话,我们可以成为网络名人。
得分!
怪物背后的数学
在我们结束对 GAN 的介绍之前,有必要稍微详细地探索一下 GAN 背后的数学。gan 的目标是通过求解以下 minimax 方程,在网络的两部分之间找到平衡:
我们称这个方程为极大极小方程,因为我们试图联合优化两个参数化网络 G 和 D,以找到两者之间的平衡。我们希望最大化 D 的混乱,同时最小化 g 的失败。当求解时,我们的参数化的、隐式的、生成的数据分布应该相当好地匹配底层的原始数据分布。
为了进一步分解等式的各个部分,让我们多分析和思考一下。从 D 这一边,它想最大化这个方程。当一个真正的样本进来时,它希望最大化它的输出,当一个假样本进来时,它希望最小化它的输出。这就是等式右半部分的本质所在。另一方面,当 G 得到一个假样本时,它试图欺骗 D 使其产量最大化。这就是为什么 D 试图最大化而 G 试图最小化。
由于最小化/最大化,我们得到了 minimax 这个术语。
现在,假设 G 和 D 被很好地参数化,因此有足够的学习能力,这个极大极小方程可以帮助我们达到两者之间的纳什均衡。这是理想的。
如何实现这一点?
简单:我们只是来回迭代。
开玩笑的。其实并不简单。但是我们可以简单地描述一下。
首先,我们将首先训练 D 成为固定版本 G 上的最佳分类器。从那里,我们固定 D 并训练 G 以最好地愚弄固定 D。通过来回迭代,我们可以优化我们的极大极小方程,直到 D 不再能够区分真实和虚假样本,因为我们的生成数据分布或多或少无法与实际数据分布区分开来。此时,D 将为它遇到的每个样本输出 50%的概率。
包扎
这就是我们对甘斯的介绍。但是男孩还有更多!我们只是刚刚开始触及表面,在高层次上触及一切。然而,还有更多的错综复杂的事情要发生。并非所有事情都像我们目前概述的那样简单,在真实环境中训练 GAN 实际上可能非常困难。出于这个原因,我们将在后面的帖子中更深入地讨论 GANs 的组件、问题、突破、变化等等。现在,只要陶醉于这样一个事实:你正在理解生成模型和 GANs 的神奇世界!
如果你喜欢这篇文章,或者发现它在任何方面都有帮助,如果你给我一大笔一美元或两美元来资助我的机器学习教育和研究,我会永远爱你!每一美元都让我离成功更近一步,我永远心存感激。
敬请关注近期更多 GAN 博客!
P.S .非常感谢生成性对抗网络及其变体如何工作:GAN 概述的作者,他们帮助启发了我,让我对 GAN 如何工作有了更多的了解。如果没有他们的论文,这个系列是不可能完成的。
最初发表于T5【hunterheidenreich.com】。
卷积神经网络新手入门
这是一只狗。
Image 1: Dog // Source
这是一只猫。
Image 2: Cat // Source
当我们的眼睛看到这两张图片时,我们的大脑会立即告诉我们正在展示的是哪种动物。很简单,对吧?但是如果你不得不教一台机器区分猫和狗呢?
如果我们仅仅依靠我们在学校学习的基于逻辑的(“传统”)编程,这几乎是不可能的。我们可以尝试对猫和狗的特征进行分类,比如说,猫有尖尖的耳朵和锋利的爪子,而狗通常有较平的耳朵和较钝的爪子。因此,如果动物有尖尖的耳朵和锋利的爪子,那么它就是猫。如果不是,那就是狗。
然而,这也带来了许多问题。首先,有很多例外。有尖耳朵的狗和耷拉着耳朵的猫。还有,有很多猫不露出爪子的画面。除非我们手动编程所有的例外——会有很多——很难简单地通过从列表中勾掉它们的特征来简单地区分这两种动物。其次,机器将如何识别图片是否包含尖耳朵?图像没有标签说{尖耳朵:真,尖爪子:真},这意味着我们必须自己找到一种方法来确定它。当我们看图片时,我们会自动看到尖尖的耳朵和锋利的爪子,但机器如何学习呢?
当我们看到一只狗的图像时,我们大脑中的某些神经元受到刺激,向其他神经元发送信号,其他神经元向更多的神经元发送信号,最终导致某些神经元被激活,“告诉”我们看到了一只狗。神经网络试图模拟这一过程,建立一个“迷你大脑”,可以完成简单的任务,如区分猫和狗。
Image 3: Basic neural network // Source
最基本的神经网络看起来像这样。我们从神经元的输入层开始,它激活隐藏层的神经元,然后激活输出层的神经元。把上图中的每个圆圈想象成一个神经元。每个神经元包含一个数字,称为它的激活。
在狗和猫的例子中,给我们一张照片,我们必须区分它是狗还是猫。所以我们的输入是照片,我们的输出是它是猫的概率和它是狗的概率。
为了简单起见,我们只给机器黑白照片。假设我们传入一张尺寸为 64 x 64 像素的照片:我们有 64 x 64 = 4096 像素。这些像素中的每一个都有一个对应于像素灰度值的数字。下图中的每个像素都有一个从 0 到 255 的数字,0 代表黑色,255 代表白色。
Image 4: Input image // Source
因此,输入层将由 4096 个激活排列在一起的神经元组成,或者由 4096 个数字组成的数组(列表)。
当我们传入一张大小不是 64 x 64 像素的照片时会发生什么?神经网络有一个固定的输入层大小,这意味着它必须分析 64 x 64 像素的照片。如果我们传入的照片比这个大,我们可以给机器编程,只分析中间的 64 x 64 像素,或者缩小整张照片,直到它达到那个尺寸。如果我们传入的照片小于 64 x 64,我们可以放大照片,或者干脆不分析。当然,64 这个数字是我选择的。您可以在每次运行时更改输入大小。计算机科学家通过实验发现,分析正方形部分(例如 64 x 64,而不是 64 x 70)会产生更好的结果,所以通常我们会继续分析正方形部分。
另一方面,输出层应该只包含两个神经元:一个神经元表示它是猫的概率,另一个表示它是狗的概率。理想情况下,如果我们传入一张猫的照片,我们应该得到这样的结果:
Image 5: Cat output
或者,从数值上来说,是这样的数组:[1.00,0.00]。
如果我们传入一张狗的照片,我们应该得到相反的结果。然而,更有可能的是,一个训练有素的神经网络可能会产生这样的结果:
Image 6: Dog output
或者,从数值上来说,是这样的数组:[0.98,0.02]。
神经网络训练得越好,就越接近正确答案。
在输入层和输出层之间,有几个隐藏层。在上图中,只显示了一个由 5 个神经元组成的隐藏层,但大多数神经网络都有多个包含许多神经元的隐藏层。理想情况下,我们可以想象每一层都有特定的用途;例如,第二层(第一隐藏层)将识别动物的轮廓,第三层将识别某些形状(如圆形),第四层将识别动物部分(例如,圆内的圆可能是眼睛和瞳孔),最后一层(输出层)将根据动物部分的特征识别它是猫还是狗。
这是怎么回事?这个网站展示了如何很好地分析图像的特征。这里,人的输入图像被转换成人的轮廓的输出。
Image 7: Convolution layer
这可以简单地通过抓取 9 个像素(3 x 3,如输入图像的左上角所示)并将 9 个像素中的每一个乘以某个数字,然后将它们加在一起来完成。在本例中,9 个像素乘以这些数字:
Image 8: Convolution kernel
左上角的像素灰度数乘以-1,右上角的像素灰度数乘以-1…等等。然后,所有的数字加在一起,这个新的灰度值就是输出图像中相关像素的数量。这里,输出是-172,所以输出图像中红色框中的像素是黑色的。
或者,简单地说,机器在一个 3×3 矩阵中取 9 个像素,并让它与另一个 3×3 矩阵进行标量乘法,以产生新图像的新灰度数。
然后,机器向下移动到下一组 3 x 3 像素,如下所示:
Image 9: Convolution layer
它会继续下去,直到创建一个完整的输出图像,只包含原始图像的轮廓。
同样的事情也可以用我们的狗对猫神经网络的前两层来做。狗或猫的照片被传入,然后经过一个变换矩阵,在图片中勾勒出动物的轮廓,以创建一个新的轮廓图片。新轮廓图片中的每个像素是第二层中的一个神经元。
在两层之间可以进行不止一次转换。例如,我们可以选择突出狗图片的垂直边缘和水平边缘。这是两个需要两个变换矩阵的变换,将产生两个输出图像。在这种情况下,两个图像(及其像素)可以放在一起形成第二层。这样,第二层不必包含与输入层相同数量的神经元;事实上,神经网络中的每一层都不需要拥有相同数量的神经元。
从第二层开始,对图像进行更多的变换以产生其余的隐藏层。最后一个隐藏层然后经历最后的变换,产生两个数字:它是猫的概率和它是狗的概率。
该视频展示了识别字母的神经网络的不同层,初始图像经历了几次转换,直到最终映射到某个字母。
Image 10: Convolution layer
回到这个例子,输入图像中的 3×3 像素乘以轮廓变换矩阵产生-172,即输出图像中像素的激活。我们称变换矩阵中的数字(1 和 8)为图像的权重。为了更好的形象化,这是我们的神经网络图:
Image 11: Weights
因为空间有限,我只将输入图像中中间一列的 3 个像素表示为输入层中的三个神经元。隐藏层中的顶部神经元是输出图像中产生的像素。神经元乘以的每个数字(1 和 8)就是神经元的权重。
有时候,我们可能想做矩阵乘法之外的另一种运算。例如,我们可能希望将激活下移一个特定的值。例如,我们可以使用 9 个像素和变换矩阵,取其标量积得到-172,然后减去 10 得到-162。在这种情况下,10 将是它的偏差,这意味着神经元必须至少为 10 才能有意义地活跃。
每个神经元都有自己的偏好和权重。通过正确的权重和偏差,神经网络将能够区分猫和狗。
2020 年的当代网络刮刀是什么样的?
如果网站所有者不通过 API 授权用户访问,2020 年网络数据提取或网络抓取是获得所需数据的唯一途径。
Photo by Bruno Mira on Unsplash
许多网站,如 Twitter、YouTube 或脸书,提供了一种通过公共 API 访问数据的简单方法。使用 API 获得的所有信息都是结构化的和规范化的。例如,它可以是 JSON、CSV 或 XML 格式。
从任何网站提取数据的 3 种方法。
排名第一的官方 API。
首先,你应该总是检查是否有一个官方的 API,你可以用它来获得想要的数据。
有时官方 API 更新不准确,或者其中缺少一些数据。
#2“隐藏的 API”。
后端可能会生成 JSON 或 XML 格式的数据,供前端使用。
使用 web 浏览器检查器研究 XMLHttpRequest (XHR)为我们提供了另一种访问数据的方式。它会像官方 API 那样为我们提供数据。
如何获取这些数据?让我们寻找 API 端点!
例如,让我们看一下https://covid-19.dataflowkit.com/资源,它为网站访问者展示了当地的新冠肺炎案例。
- 通过按 Ctrl+Shift+I 调用 Chrome DevTools
- 控制台出现后,转到“网络”选项卡。
- 让我们选择 XHR 过滤器来捕捉一个 API 端点作为“XHR”请求,如果它可用的话。"
- 确保“录制”按钮已启用。
- 刷新网页。
- 当您看到与数据相关的内容已经出现在网页上时,请单击停止“记录”。
现在,您可以在左侧看到一个请求列表。调查他们。预览选项卡显示名为"v1."
的项目的一组值
按“标题”选项卡查看请求的详细信息。对我们来说最重要的是网址。"v1"
的请求网址是[https://covid-19.dataflowkit.com/v1](https://covid-19.dataflowkit.com/v1)
。现在,让我们以另一个浏览器标签打开该 URL,看看会发生什么。
酷!这就是我们要找的。
直接从 API 获取数据或使用上述技术获取数据是从网站下载数据集的最简单方法。当然,这些方法不会对所有的网站都有效,这就是为什么网络抓取库仍然是必要的。
如果网站所有者不通过 API 授予用户访问权限,Web 数据提取或 web 抓取是获取所需数据的唯一途径。Web 抓取是一种 的数据抽取技术 ,替代手工的重复键入或复制粘贴。
#3 网站抓取。
懂规矩!
在抓取网站之前应该检查什么?
Photo by Adam Sherez on Unsplash
☑️ Robots.txt 是你打算抓取网站数据时首先要检查的。Robots.txt 文件列出了您或机器人应该如何与它们交互的规则。您应该始终尊重并遵守 robots.txt 中列出的所有规则。
☑️确保你也看了网站的**使用条款。**如果使用条款规定没有说限制对僵尸程序和蜘蛛的访问,也没有禁止服务器的快速请求,那么爬行是可以的。
☑️为了遵守新的欧盟通用数据保护条例,或者 GDPR,你应该首先评估你的网络废弃项目。
如果你不收集个人资料,那么 GDPR 就不适用。在这种情况下,您可以跳过这一部分,进入下一步。
☑️:使用提取的数据时要小心,因为有时你可能会侵犯版权。如果使用条款没有对数据的特定用途做出限制,只要爬虫不侵犯版权,什么都可以。
查找更多信息:网页抓取合法不合法?
网站地图
典型的网站都有网站地图文件,其中包含属于该网站的链接列表。它们有助于使搜索引擎更容易抓取网站和索引它们的页面。从网站地图中获取 URL 进行抓取总是比用 web scraper 顺序收集要快得多。
呈现 JavaScript 驱动的网站
JavaScript 框架如 Angular、React、Vue.js 广泛用于构建现代 web 应用程序。简而言之,典型的 web 应用前端由 HTML + JS 代码+ CSS 样式组成。通常,源 HTML 最初并不包含所有的实际内容。在网页下载过程中,HTML DOM 元素与呈现 JavaScript 代码一起被动态加载。结果,我们得到了静态 HTML。
☑️:你可以使用 Selenium 进行网站抓取,但这不是一个好主意。许多教程都在教授如何使用 Selenium 从网站上抓取数据。他们的主页清楚地说明 Selenium 是用于测试目的的自动化 web 应用程序的。
☑️ PhantomJS 早期适合处理此类任务,但自 2018 年以来,其开发已暂停。
☑️或者,Scrapinghub 的 Splash 是在 Headless Chrome 出现之前 Python 程序员的一个选择。
你的浏览器本质上是一个网站刮刀。如今最好的方法是使用无头 Chrome,因为它可以“原生地”呈现网页。
puppeter节点库是 Javascript 开发者控制 Chrome over DevTools 协议的最佳选择。
Go 开发者可以选择从 chromedp 或 cdp 中选择一个,通过 DevTools 协议访问 Chrome。
放聪明点。不要让他们阻挡你。
Photo by Randy Fath on Unsplash
一些网站使用反抓取技术来阻止 web scrapper 工具获取在线数据。网络抓取永远是一场“猫捉老鼠”的游戏。因此,在构建 web scraper 时,考虑以下方法来避免阻塞。否则你有可能得不到想要的结果。
技巧 1:在请求之间制造随机延迟。
当一个人访问一个网站时,访问不同页面的速度比网络爬虫的速度慢很多倍。相反,Web scraper 可以立即同时提取几个页面。短时间内网站的巨大流量看起来很可疑。
你应该找出理想的爬行速度,这是每个网站的个人。为了模拟人类用户行为,您可以在请求之间添加随机延迟。
不要给站点造成过多的负载。对你从中提取数据的网站要有礼貌,这样你就可以继续抓取数据而不会被屏蔽。
技巧 2:改变用户代理。
当浏览器连接到网站时,它在 HTTP 头中传递用户代理(UA) 字符串。该字段标识浏览器、其版本号和主机操作系统。
典型的用户代理字符串如下所示:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36".
- 如果对同一个域的多个请求包含同一个用户代理,网站可以很快检测并阻止您。
- 一些网站阻止特定的请求,如果他们包含不同于一般浏览器的用户代理。
- 如果“用户代理”价值丢失,许多网站将不允许访问他们的内容。
解决方法是什么?
您必须建立一个用户代理列表,并随机轮换它们。
技巧 3:轮换 ip 地址。使用代理服务器。
如果您在抓取过程中从同一个 IP 地址发送多个请求,网站会认为您行为可疑并阻止您。
对于最简单的情况,使用最便宜的数据中心代理就足够了。但是一些网站有先进的僵尸检测算法,所以你必须使用住宅或移动代理来清除它们。
例如,欧洲有人想从一个只允许美国用户访问的网站中提取数据。很明显,通过位于美国的代理服务器进行请求,因为它们的流量似乎来自本地到美国的 IP 地址。
要获得目标网站的特定国家版本,只需在数据流工具包获取服务的请求参数中指定任意国家。
技巧 4:避免刮擦模式。模仿人类的行为。
人类在浏览网站时是不一致的。他们做不同的随机动作,比如点击页面和移动鼠标。
相反,网页抓取机器人在抓取网站时会遵循特定的模式。
教你的刮刀模仿人类的行为。这样,网站机器人检测算法就没有任何理由阻止你自动化你的抓取任务。
提示 5:留意防刮擦工具。
检测黑客攻击或网络抓取企图最常用的工具之一是*“蜜罐”人眼看不到蜜罐,但机器人或网页抓取工具可以看到。就在你的抓取工具点击了这样一个隐藏链接之后,网站很容易就屏蔽了你。*
找出一个链接是否设置了"display: none"
或"visibility: hidden"
CSS 属性,如果它们只是停止跟随那个链接。否则,一个网站会立即识别你是一个机器人或刮刀,指纹你的请求的属性,并禁止你。
技巧 6:解决在线验证码。
在大规模抓取网站的同时,有机会被网站屏蔽。然后你开始看到验证码页面,而不是网页。
验证码是网站用来反击机器人和爬虫的测试,要求网站访问者在继续之前证明他们是人类。
许多网站使用谷歌的 reCAPTCHA。reCAPTCHA 的最新版本 v3 分析人类行为,并要求他们勾选"I'm not a robot"
框。
验证码解析服务使用两种方法来解析验证码:
☑️ 基于人工的验证码求解服务
当你把你的验证码发送到这样的服务,人类工作者解决一个验证码,并把它发送回来。
☑️ OCR(光学字符识别)解决方案
在这种情况下,OCR 技术用于自动解决验证码。
点击式可视选择器。
当然,我们不打算只下载和呈现 JavaScript 驱动的网页,而是从中提取结构化数据。
在开始数据提取之前,让我们指定数据的模式。请看销售智能手机的网络商店截图。我们想刮一个项目的图像,标题,及其价格。
谷歌 chrome inspect 工具在研究 HTML 网页的 DOM 结构方面做得很好。
Click the Inspect icon in the top-left corner of DevTools.
Chrome Inspector tool
使用 Chrome Inspect 工具,您可以轻松地找到并复制网页上指定 DOM 元素的 CSS 选择器或 XPath 。
通常,当抓取一个网页时,您有不止一个相似的数据块要提取。在一次抓取会话中,您通常会抓取几个页面。
当然,你可以使用 Chrome Inspector 来构建一个有效的抓取工具。在一些复杂的情况下,这只是研究网页上特定元素属性的一种方法。
尽管现代在线 web 抓取器在大多数情况下提供了一种更舒适的方式来指定数据抓取的模式(CSS 选择器或 XPath ),设置分页规则,以及在此过程中处理详细页面的规则。
看看这个视频,了解它是如何工作的。
管理您的数据存储策略。
现在最广为人知的存储结构化数据的简单数据格式包括 CSV、Excel、JSON (Lines)。在解析网页之后,提取的数据可以被编码成目的地格式。这些格式适合用作小容量存储。
抓取几个页面可能很容易,但是几百万个页面需要不同的方法。
如何抓取几百万个页面,提取几千万条记录?
如果输出数据的大小从中等到巨大怎么办?
选择正确的格式作为输出数据。
Photo by Ricardo Gomez Angel / Unsplash
格式#1。逗号分隔值(CSV)格式
CSV 是最简单的人类可读数据交换格式。文件的每一行都是一条数据记录。每条记录都由逗号分隔的相同字段列表组成。
以下是以 CSV 数据表示的系列列表:
id,father,mother,children
1,Mark,Charlotte,1
2,John,Ann,3
3,Bob,Monika,2
CSV 仅限于存储二维无类型数据。没有办法像普通 CSV 中的孩子的名字一样指定嵌套结构或值的类型*。*
格式#2。JSON
[
{
"id":1,
"father":"Mark",
"mother":"Charlotte",
"children":[
"Tom"
]
},
{
"id":2,
"father":"John",
"mother":"Ann",
"children":[
"Jessika",
"Antony",
"Jack"
]
},
{
"id":3,
"father":"Bob",
"mother":"Monika",
"children":[
"Jerry",
"Karol"
]
}
]
然而,在 JSON 文件中表示嵌套结构很容易。
如今**,JavaScript Object Notation(JSON)**成为事实上的数据交换格式标准,在大多数情况下取代了 XML。
我们的一个项目包含 300 万个解析过的页面。因此,最终 JSON 的大小超过 700 Mb。
当您必须处理这样大小的 JSONs 时,问题就出现了。要从 JSON 数组中插入或读取记录,每次都需要解析整个文件,这远非理想。
格式#3。JSON 行
让我们看看什么是 JSON 行格式,以及它与传统 JSON 的比较。使用 JSON 行在业内已经很普遍了。 Logstash 和 Docker 将日志存储为 JSON 行。
表示为 JSON 行格式的相同系列列表如下所示:
{"id":1,"father":"Mark","mother":"Charlotte","children":["Tom"]} {"id":2,"father":"John","mother":"Ann","children":["Jessika","Antony","Jack"]} {"id":3,"father":"Bob","mother":"Monika","children":["Jerry","Karol"]}
JSON Lines 由几行组成,其中每一行都是一个有效的 JSON 对象,由换行符\n
分隔。
因为 JSON 行中的每个条目都是有效的 JSON,所以可以将每一行解析为独立的 JSON 文档。例如,您可以在其中进行搜索,将一个 10gb 的文件分割成较小的文件,而无需解析整个文件。您可以根据需要读取任意多的行来获得相同数量的记录。
摘要
一个好的刮削平台应该:
☑️ 同时从网页中获取和提取数据。
我们使用 Golang 的并发特性,发现它们非常棒;
☑️ 定期将提取的刮掉的 数据块保存在中央数据库中。
这样,在抓取许多页面时,您不必在 RAM 中存储太多数据。除此之外,以后可以很容易地将数据多次导出为不同的格式。我们使用 MongoDB 作为我们的中央存储。
☑️ 基于网络。
在线网站刮刀是可以从任何地方的任何设备连接到互联网。不同的操作系统不再是问题。都是浏览器的问题。
☑️ 对云友好。
它应该提供一种根据 web 数据提取项目的当前需求快速扩大或缩小云容量的方法。
结论
在这篇文章中,我试图解释如何在 2020 年抓取网页。但是在考虑抓取之前,试着找出官方 API 的存在或者寻找一些“隐藏的”API 端点。
如果您能花一分钟时间告诉我,2020 年您最常用的网络抓取方式是哪一种,我将不胜感激。就在下面给我留言评论吧。
刮的开心!
原载于 2020 年 5 月 27 日 https://blog.dataflowkit.com**的 。
什么是 AI 对齐?
这篇博客是一个系列的一部分
第一部分是: AI —控制问题
在之前的博客中,我讨论了控制问题——我们面临的挑战是控制一台以与我们完全不同的方式思考的机器,它很可能比我们聪明得多。即使我们对控制问题有一个完美的解决方案,我们还剩下第二个问题,我们应该要求人工智能做什么,思考什么,重视什么?
这个问题就是 AI 对齐。
人工智能很可能比我们快得多(如果不是,为什么不多建几台服务器呢?那就一定会!)而且对我们来说,确认它想要做出的每一个决定都是不可行的,也是没有价值的。我们想要的是一套规则或原则,人工智能可以参考这些规则或原则,自己做出决定,知道通过遵循这些规则,它的行动将与人类想要的一致。
人工智能的这些规则系统分为两个主要类别——直接规范性和间接规范性。
直接规范性
有了直接的规范性,我们给 AI 提供了一套可以遵循的规则。这些规则中最著名的是艾萨克·阿西莫夫机器人定律,它是一个伟大的…基础…但是分崩离析,正如我们从阿西莫夫写的故事中看到的那样。
一个更现代的例子是 Nick Bostrom 的回形针最大化器。拿一个人工智能来说,让它的效用函数成为它的核心价值,来创造回形针。这听起来无害,并且是要求受控人工智能制作回形针的一种简单方法。我们不想让它做人类会做的事情;我们已经有工厂生产回形针了。我们使用人工智能的目的是找到新的、更好的、更有效的制造回形针的过程,并且制造出它应该制造的回形针。在它完成所有我们可能想要的曲别针之后,它会停止吗?不。它已经被硬连线制作回形针,所以它会继续制作回形针,即使在它使用了所有给它的材料,地球上的所有材料,甚至把我们星球和太阳系以外的材料变成回形针,如果可以的话。那些人类?它们也是由物质制成的,如果它是一个回形针,看起来会更好。如果有什么不同的话,人类变成回形针是特别重要的,因为在他们的人类形态中,他们可能会决定不再需要任何回形针。人工智能希望给自己尽可能高的概率来制作回形针,如果它预测人类可能不希望这种情况发生,他们就有机会以人工智能的方式获得,所以人工智能根除人类以提高其制作更多回形针的概率是合理的。
对此的改编是告诉一个回形针制作有限数量的回形针,比如 1000 个。不幸的是,这也不太管用。假设这个人工智能使用贝叶斯概率来衡量确定性,它永远不可能对任何事情都 100%或 0%确定。在制作了 1,000 个回形针之后,它将继续检查它是否精确地制作了 1,000 个,而不是 999 个,并且它们都是回形针应该有的样子。它将继续使用它将用来变成回形针的所有相同的资源来检查和再次检查这一点,因为 AIs 的最终价值,它的整个存在是关于确保精确地制作 1000 个回形针。另外,它也没什么更好的事情可做。
应用于比对,我们想要做的是找到一系列规则,人工智能可以严格遵守这些规则,并确保它正在做人类想要做的事情。我们目前提出的系统似乎都有漏洞,如果我们能够以人类的智力水平发现这些漏洞,那么对于超越人类水平的智力来说,发现和利用这些漏洞将是轻而易举的事情。
增加越来越多的规则听起来也没有吸引力。我们可以把这比作税法,税法有大量的规则。然而奇怪的是,我们似乎被人包围着,甚至是不纳税的大公司。更多的规则似乎提供了更多可被利用的漏洞,而不是更安全。在直接规范下,我们没有理由期望一个人工智能遵循规则的精神,只是严格遵守它们。
间接规范性
所以,进入替代方案。间接规范性并不要求 AI 遵循一套明确的静态规则。相反,它给了人工智能一个框架来寻找价值本身,通常要求它做我们“想要的”Eliezer Yudkowski 提供了一个框架,称为“连贯的外推意志”,简称 CEV。
用诗歌的术语来说,如果我们知道得更多,思考得更快,成为我们希望成为的人,在一起成长得更远,我们连贯的推断意志就是我们的愿望;外推收敛而不是发散,我们的愿望一致而不是干涉;如我们所愿的推断,如我们所愿的推断,如我们所愿的解释——Eliezer Yudkowski,机器智能研究所
这种方法有一个更深的抽象层来指导规范性,并要求 AI 基于对早期声明的诚实解释来创建自己的规则。我们在这里工作的假设是,我们已经解决了控制问题,所以人工智能不能为了任何邪恶的需要修改第一个声明。
随着间接规范性的出现,一件有趣的事情变得显而易见,那就是我们并不真的希望人工智能去做我们会做的事情,或者精确地评价我们会重视的东西。想象一个在维京时代创造的人工智能,在那里我们成功地编码了我们当时的价值观。我们很可能会拥有一个非常强壮和暴力的人工智能(抱歉,如果维京人不是这样,历史不是我的强项!).我们今天有不同的价值观,但那些价值观可能并不能反映 1000 年后我们将成为的人,甚至不能反映超人智能 AI 出现后我们将立即成为的人。例如,我们今天重视人类的生产力,这将变得不那么重要。我们也重视短期收益,以牺牲环境为代价提高生产率,而这不太可能适合我们未来的社会。我们想要的是一个人工智能,它可以为自己创造一个价值体系,总结我们未来的需求,而不牺牲今天社会的需求或价值。
很难预测人工智能在这种情况下会做什么。正如我们所说的,这个假设场景中的控制已经解决,我们要求人工智能做我们在未来会做的事情,我们的价值观趋同,做我们在这个声明中的意思。它预测的未来版本的我们可能可以接受人工智能为了我们自己的利益操纵我们自己的价值体系,即使这不是我们今天想要的东西,因为这是我们未来可能重视的东西。
我们如何找到正确的价值观?
简而言之,我们不知道。
关于伦理和道德的问题已经被哲学家们研究了几千年,而且确实没有令人满意的答案。我们甚至在最基本的问题上没有完全的共识——一些人认为我们可以发现一个普遍的伦理框架,另一些人认为伦理是我们当前理想的平均值,随着时间的推移而变化。仅仅因为人工智能是一个不同的问题,并不意味着我们会更容易找到答案。
提出的一个解决方案是创建一个精灵类型的人工智能,并询问它应该被赋予什么值,或者我们应该使用什么间接指令来实现想要的值。如果我们使用这种类型的人工智能来解决控制问题,这种方法的问题就可想而知了。如果我们用它来解决控制问题,精灵本身是无法被完全控制的。我们可能会试图限制它对数据的访问,并给它一个非常严格的交流系统,比如只能回答是或不是的问题,但人类很难预测一个比我们更强大的智能可能会采取什么方法来逃离我们为它建造的笼子。应用于对齐,问题是我们如何知道未对齐的人工智能给出的答案是否确实符合人类价值观,因为我们期望我们需要一个不同于我们以前想到的任何答案。
Eliezer Yudkowski 将这种类型的人工智能与下棋计算机进行了比较。1950 年,克劳德·香农提出了一个理论上完美的国际象棋算法,从此“深蓝”花了 47 年时间打败了加里·卡斯帕罗夫。香农需要的是让他的算法实现的计算能力。人工智能排列虽然是在前香农天。即使有无限计算,我们也不知道我们将运行什么算法。
凭借我们今天可用的处理能力,理论上完美的算法和功能原型之间的差距可能会更短,但我们首先需要解决一些基本问题,以充分利用这种处理能力。
AI 是什么?
我最近与一位非技术业务同事/经理会面,他要求我解释一些人工智能术语,如机器学习和深度学习。“机器学习是深度学习的一种,还是反过来?”。所以,我在白板上画了这幅图,然后开始了一个有点漫无边际的关于人工智能及其历史的演讲。然后我想到,许多业务类型都在问自己(和他们的同事)类似的问题,我看到不止一个经理混淆了这些区别。因此,这篇文章试图做一个快速的非技术性概述。
本着上面匆忙绘制的图片的精神,本文并不打算对人工智能的子领域进行彻底的分类。我也不做任何准确性的声明,所以如果你不同意,或者认为我在某些细节上错了,请对我宽容一些。如果你谷歌“什么是人工智能?”,你会得到大量有深度的文章/博客(包括维基百科条目)、书籍,以及许多更加全面的图片。但是许多非技术经理既没有时间也没有兴趣钻研细节;这篇文章旨在帮助这些人更好地了解人工智能。
人工智能可以大致分为符号人工智能和机器学习。如今,人工智能一词是机器学习的同义词,最近则是深度学习。但是,人工智能的起源大多是象征性的,带有旨在捕捉专家知识的手工编码规则。通常,精通 Lisp 或 Prolog 等“人工智能语言”的人工智能软件工程师会与领域专家(比如说,医学博士)配对,以 IF-THEN 规则的形式表示相关知识。除了规则,还有很多其他的符号化知识表示机制,比如框架。时至今日,你会发现许多产品都使用规则/框架,比如许多最先进的聊天机器人框架,它们使用 AIML 规则或意图框架来使用脚本对话创作对话。这些产品虽然取得了一些成功,但仍然受到下面提到的限制。
在 20 世纪 60 年代和 80 年代的几次人工智能炒作周期之后,人工智能领域进入了一个漫长的“人工智能冬天”直到 2000 年代中期。为什么?从软件工程的角度来看,规则/框架是脆弱的,一旦我们通过了几百条规则,就很难管理/维护一个符号化的人工智能系统。规则开始相互冲突,并且不可能跟踪规则触发的顺序和调试这些系统。规则必须由昂贵而忙碌的领域专家手动编写,并进行大量输入。这些系统中的“学习”大多是“受监督的”和离线的。人们试图通过基于用户交互反馈的“无监督”和在线学习来自动创建规则。然而,大多数这些尝试仍然是学术上的努力,很少有商业上成功的实现。
机器学习开始于 20 世纪 90 年代中期,当时计算机科学家和统计学家开始相互合作和学习。决策树和支持向量机等算法在 21 世纪初被用于挖掘越来越大的数据库,以获得可用于预测/分类和其他高级分析任务的模式。更快的计算机和 Hadoop 等“大数据”软件工具的出现激发了人们对数据驱动模式识别的兴趣,这种模式识别使计算机能够从历史数据中学习。主要区别是,新的人工智能工程师,现在称为数据科学家,不从事传统的软件工程。相反,他们的工作是从原始数据中提取特征,并使用这些特征来创建监督学习模型,使机器能够学习基于历史数据进行分类和预测。数据科学家提供带标签的数据,用于识别指向每个不同类/标签的要素组合。这种“模型工程”远比“规则工程”更强大,并受益于更快的计算机、更多数据和用户在线反馈的良性循环。无监督的机器学习方法(如聚类)通常与有监督的方法结合使用。
深度学习起源于人工神经网络(ANN),它是“连接主义者 AI ”的一部分,也可以追溯到 20 世纪 60 年代。许多算法进步,如反向传播、多层感知器、卷积网络和递归网络,是在 20 世纪 80 年代、90 年代和 21 世纪初逐步发现的。但是深度学习,其名称来自大量的神经层(从 5 到 100 或更多),只是在大约 5 年前随着 GPU 作为计算主力的出现才变得具有商业可行性。这些更快的基于 GPU 的计算机以及大量非结构化数据(如图像、音频、视频和文本)的可用性,是人工智能当前成功的关键。此外,在过去 5 年中,深度学习算法和架构的创新步伐令人难以置信。今天,深度学习系统可以以惊人的准确度执行图像识别、语音识别和自然语言理解任务。
深度学习系统也大多是受监督的学习系统,因为数据科学家必须提供大量带标签的数据来训练这些系统(神经元之间互连的权重)。但是,与更传统的统计机器学习算法(如随机森林)不同,深度学习系统可以自动从原始数据中进行特征提取。因此,数据科学家不必执行特征工程。深度学习的意义在于,连续的层在不断增加的抽象层次上学习特征。因此,虽然前几层可能识别边缘和其他较低层次的图像特征,但接下来的几层识别较高层次的特征,如鼻子/耳朵/嘴巴,而接下来的几层识别整张脸等等。
生成对抗网络(GANs) 和自动编码器是无监督深度学习系统的例子。强化学习系统是深度学习系统的例子,可以被认为是在线学习系统,因为它们直接从模拟环境中执行的动作和在真实环境中部署时获得的反馈中学习。自动驾驶汽车和游戏系统,如 AlphaGo 利用强化学习;AlphaGo 是基于模拟学习的一个很好的例子,因为该系统是通过无数次与自己对弈来训练的。这也是一个无监督学习的例子,因为系统通过观察自己的错误并纠正它们而变得更好。
人工智能还有许多其他相关的子领域,如进化(遗传)算法、博弈论、、多智能体系统等等。此外,请注意,人工智能受益于其他学科,如数学优化,这些学科已成为其他领域的一部分,如运筹学 (OR)。事实上,人工智能最近的繁荣也重振了对控制理论等相关领域的兴趣,因为自动驾驶汽车、无人机和机器人背后的许多算法都有其他学科的数学基础。因此,人工智能是一个真正的跨学科领域,来自各种背景的科学家和工程师能够应用他们的数学和软件技能。
我试图保持这个概述的非技术性和简短。我希望这能帮助一些商业人士掌握办公室里流传的一些流行词汇和行话。
什么是信息图?它与数据可视化有什么不同?
你在任何地方都能看到它们——从教室到企业,信息图表充斥着我们的生活和媒体。很难一天不在我们的脸书 feed 或网络上的其他地方看到他们。有了信息图表制作软件,创建这些有趣的视觉效果比以往任何时候都更容易,许多人正在利用这一点。
然而,随着这个词被如此频繁地使用,人们不禁要问——信息图到底是什么?这些视觉效果很容易与其他形式混淆,尽管它们有自己独特的历史、设计和目的。
先来一个大概的定义。根据 dictionary.com的说法,信息图是“以图表、图形或其他图像的形式伴随着最少文字的信息的视觉呈现,旨在给出一个容易理解的概述,通常是一个复杂的主题。”
你可能会问:“但是这和数据可视化有什么不同?”根据《哈佛商业评论》的指南 好图表,有四种不同类型的信息图形:陈述性的、概念性的、探索性的和数据驱动的。为了找出特定图形的位置,您需要问自己两个问题:
- 我拥有的信息是概念性的还是数据驱动的?
- 我是在宣告什么还是在探索什么?
如果你对第一个问题的回答是“概念性的”或“数据驱动的”,对第二个问题的回答是“声明某事”,那么你可能正在处理一个信息图,绘制在下面图表的上半部分。
如果您对第一个问题的回答是“数据驱动”,对第二个问题的回答是“探索某物”,那么您很可能希望创建一个数据可视化,它绘制在此图表的右下象限。
每种图形类型的视觉示例
这个方便的图表可能会让你更好地了解如何对信息图形进行分类,但是要真正训练你的眼睛来识别每一个,你可能需要看一些例子。下面,我们提供了一些现实生活中的例子来帮助你识别它们之间的区别。
数据即:数据驱动和探索
在爱因斯坦的想法首次出现一个世纪后,看看这张关于广义相对论对当前物理学研究的影响的迷人的数据可视化图。它允许用户通过放大数据点并从各种不同的角度查看来与信息进行充分的交互。这使得读者可以随心所欲地深入或浅显地研究数据。
图表:声明性或探索性
图表经常在信息图中使用,但并不等同于后者。图表直观地显示特定的数据集,本质上可以是声明性的,也可以是探索性的。
如果你的星盘中的一切都是为了制造一个特定的、预先确定的点,那么你可以确定它是声明性的;然而,如果它在显示数据时没有将注意力吸引到某一点上,让浏览者得出自己的结论,那么它可能是探索性的。
尽管信息图可能包含图表,但它们使用其他图像和文字来为一个点服务。您可能会使用图表来显示单个数据集,而不是试图在一个视图中包含一大部分信息。
信息设计
由于名称非常相似,很容易将信息设计与信息图混淆。然而,这两者仍然服务于明显不同的目的。根据 Dirk Knemeyer 的说法,信息设计并没有一个固定的定义。有各种各样的方法来理解它,正如你在这里看到的。一个这样的潜在定义是:“语言学科、艺术和美学学科、信息学科、传播学科、行为和认知学科、商业和法律以及媒体制作技术之间的交叉点。”
信息设计尤其用于连接和整合不同的学科。它不是一个特定的视觉类别,如信息图,因为它包含了广泛的概念。例如, Clare McDermott 建议使用“标注框”形式的信息设计来吸引对特定点的注意。
那么我们什么时候使用信息图表呢?
Jaime Nacach 通过解释信息图表的四种用途给出了答案:
- **图解数据:**这意味着从调查(和类似的功能)中获取数据,并使它们比你的平均图表更有趣。
- **简化一个复杂的主题:**如果你有一个令人难以置信的概念,并且需要一种快速简单的方法来分解它,信息图是一个不错的选择。
- **进行比较:**信息图非常善于展示两件事是多么相似还是不同。
- **知名度:**无论是与商业、政治还是任何其他领域相关,您都可以通过可共享的信息图表迅速提高品牌或事业的知名度。
问问你自己,“我想呈现什么样的信息?”如果你想要吸引眼球的东西,有大量简化的数据,信息图是正确的选择。
如果信息图已经演变成一套独特的视觉效果,那么这些图形最初是如何发展的,在哪里发展的?事实上,它们的起源可以追溯到很久以前。
开始的时候…
可能最早被认为是“信息图表”的图片实际上是洞穴壁画。这些不是今天大多数人知道的信息图表,但它们仍然有类似的目的:将一个困难的主题,如一个故事或一课,转化为一种易于可视化和理解的格式。象形文字和地图可以被认为有类似的目的。
我们今天所知的信息图的最大功臣是 1626 年的克里斯托夫·席耐尔,他利用信息图追踪太阳的轨迹。他在 Rosa Ursina sive Sol 重印了这些,一份遗产就这样诞生了。
席耐尔可能已经播下了这个信息图表的种子,但是一个名叫威廉·普莱费尔的苏格兰人真的在它上面展开了。根据克莱夫·汤普森的说法,Playfair 最初绘制专利,后来意识到他可以将他的插图应用于经济学,使数据更具视觉吸引力。
随着 Playfair 掌舵,这些新兴的信息图表在 19 世纪开始在欧洲蓬勃发展,有几个著名的例子。安德烈·米歇尔·盖里(André-Michel Guerry)是第一个使用阴影来说明某种物质或主题密度较高的区域的人,例如犯罪较为常见的区域,许多人随后采取了其他措施。
19 世纪后期,弗洛伦斯·南丁格尔使用信息图表向维多利亚女王陈述了她的情况——具体来说,她希望克里米亚战争的参战者获得更好的医疗服务。
事实证明,信息图表已经从简单地展示科学或经济数据转变为展示道德和政治主题。这些被带到了美国,在那里“奴隶地图被用来决定内战中的战场。本质上,黑暗的区域意味着更多的奴隶,因此他们是应该首先关注的目标。
信息图在 20 世纪的使用更加多样化。丽贝卡·洋葱发布了一些来自科学美国人的 20 世纪早期的信息图表,这些图表聚焦于各种主题(例如,离婚的原因)。美国宇航局甚至向太空发送了信息图表,以先锋 10 号和先锋 11 号上的“先锋徽章”的形式。
21 世纪信息图的使用扩展到了许多媒体形式,包括电视节目、视频游戏和报纸文章。Adobe 等程序的出现使得创建视觉效果变得不那么费力,并为现在的程序和信息图表铺平了道路。
今天,信息图仍然用于新闻和其他媒体,但已经扩展到其他领域,如课堂和内容营销。
要避免的常见错误
如今,信息图有多种使用方式,也有多种出错方式。
Emilie Flutterman 给出了各种信息图表常用方式的例子。例如,她提到信息图经常被视为简历,可以用来进行比较和招募他人。
凯西·施勒克提到信息图表可以很好地用于评估,并为教师列出了各种资源,以及许多有创意的信息图表示例。她的博客值得一读,尤其是如果你是一名有兴趣将这些概念融入课堂的老师。同样,Catlin Tucker 评论了教授信息图表如何给她的学生提供有用的技能,并给出了他们工作的几个例子。
随着信息图表出现在课堂环境中,它们也出现在学生的演示中也就不足为奇了。许多学生自然看到了使他们的信息更吸引人和更容易获取的吸引力,这也使他们的信息更有娱乐性。
信息图表应用增长最快的领域可能是内容营销。这张信息图说明了许多人想在营销中使用信息图的几个原因,从制作病毒式内容到让你的主题更容易理解。乔·普利兹列出了一些最好的内容营销信息图,让你知道什么最有效。
虽然您可能已经准备好直接创建信息图,但首先有几件事您应该警惕。创建一个糟糕的信息图实际上会迷惑他人,让他们对你的主题不感兴趣,而不是吸引他们的注意力,让数据更加清晰。
Nayomi Chibana 给出了一些信息图表半途而废的 10 个原因。例如,她警告说,你应该从一个另类和原创的角度来接近一个广泛覆盖的主题,否则你可能会失去观众的注意力。他们还警告诸如糟糕的设计或信息图表太长等缺陷。
以下是一些让你的信息图脱颖而出的额外技巧:
- **别出心裁:**做别人没做过的事,或者用新的方式去做。
- 做意想不到的事:给你的观众一个惊喜,但不要做得太安全。但是记住,要确保这个惊喜不会转移你的主题。
- 了解你的观众:记住你的观众,设计一些吸引他们的东西。
- **使用吸引人的颜色组合和图形:**学习色彩理论,看看哪些颜色搭配起来很好,它们能唤起什么样的情感,然后开始运用它们。
- **理解你的主题:**在你的信息图中包含信息之前,先弄清楚事实。
记住这些提示,你就可以开始创造一些惊人的视觉效果了。
敬未来
信息图现在非常流行,并且在过去几年里以惊人的方式发展,但是未来会怎样呢?
毫无疑问,信息图表将继续被企业、教育工作者和媒体频繁使用,但它们很有可能会像我们的技术一样发展。或许在未来,我们将开始看到更多互动的、类似游戏的信息图,以及融入虚拟现实体验的 3D 沉浸式信息图。
信息图仍在发展和变化,所以如果你以前没有使用过它们,现在是开始的最佳时机。你可以从下面的免费的 初学者指南中获取创建可共享的信息图,带着你的新的创新想法,把它们变成能被人们长久记住的东西。
什么是 API,如何使用 Youtube API
用简单的英语解释 API 的概念,以及如何使用 tuber package 抓取 Youtube 数据
上次我谈到了成功优步的策略。对我来说,这是一个令人兴奋的项目。但这并不容易,因为我必须努力搜索如何获得 Youtube API 密钥。已经有很多资源了,但是大部分是给 web 开发者的,给 R 用户的教程几乎看不到。在我花了一整天的时间设法得到 API 密匙之后,我突然有了一个想法,为什么不把帖子留给和我有同样问题的人。
今天我要讲的是 API 的概念,以及如何获取 API key。我还将介绍用于在 r 中分析数据的 tuber 包。如果你没有使用过 Google APIs,并且你有兴趣用它们做一个数据科学项目,这篇文章将是一个好的开始。
什么是 API?
如果你不熟悉 API 这个词,一开始可能很难理解它的意思。API 代表应用程序编程接口。对你来说这是不是太“程序员”语言了?那很好。我会一步一步解释这个概念。
为了您的理解,最好从两个不同的接口开始。有两种接口,用户接口和应用编程接口。简单来说,UI 是普通用户的接口,API 是程序员的接口。你可以在下面看到一个 UI 的例子。这是我们每天都会遇到的常见网页。我们如何使用它们?我们可以简单地通过点击图片或单词来使用它们。这是面向普通人的级别,面向用户的界面。怎么可能呢?这是因为 web 开发人员将所有需要的代码都藏在了按钮后面。这是程序员的界面,代码和命令就在这里。换句话说,API。您可以将 API 视为一组代码、协议和功能,用于与软件应用程序进行工作和交互。对于 UI,我们使用简单的按钮和工具,而对于 API,我们使用预定义的功能。
Two kinds of interfaces (on the left) and the screenshot of Airbnb apps (on the right)
对你来说还很难吗?那么让我们假设你正坐在一家餐馆里。你晚餐想要一份美味的牛排和一杯红酒。你坐在桌子上打电话…谁啊。服务员!然后你拿到菜单,点你想要的。几分钟后,他们会把菜端上来。这就是 API 的作用。你不需要卷起袖子一个人做所有的事情,比如准备食材、切蔬菜、烤肉。服务员会为你做这些步骤,你所要做的只是叫他们,然后从那个架子开始你的工作。
同样,当开发人员使用编程工具时,或者当数据科学家与数据争论时,他们不会每次都编写每一个代码。他们使用预制的功能,这些功能是在引擎盖下运行的基本代码集。例如,当您想要将两个数据合并成一个数据时,您可以调用 join 函数(一个“join”服务员)并命令它按照您的命令工作(对菜单进行排序)。然后它会返回需要的结果(你的菜)。
为什么是 API?
API 现在已经成为企业在大数据时代装备的一种新的商业模式和战略。那有什么特别的?是什么让 API 这些天这么火?让我们简单地谈谈在商业环境中我们可以用它做什么。
API 可以在内部和永久产生大量的价值。管理和处理数据是企业管理的关键因素之一,每个公司都建立了 IT 系统。然而,随着数据的规模呈指数级增长,通过传统 IT 系统处理所有数据存在局限性。从这个意义上说,应用 API 可以是一个效率更高、安全性更好的解决方案。它可以打破系统之间的壁垒,从而简化工作流程,促进组织之间的合作,并提高数据保护。
API 的外部优点甚至更花哨。如果一家公司公开或以额外费用开放他们的 API,它可以提供新的服务并获得潜在客户。客户可以体验到前所未有的更高级别的服务。通过提供 API 服务,第三方开发者可以构建全新类型的产品,这甚至是公司从未想过的。例如,谷歌地图,开发者中最受欢迎的应用程序接口,最初并没有预期会产生那么大的影响。通过将这些数据应用到房地产和其他各种领域,开发者为谷歌带来了更高的价值和资产。
如今 API 的数量在不断增加,而且这种趋势将会持续下去甚至更多。现在我们可以说,一个公司 API 的实施和管理是其竞争和战略价值的关键因素之一。
那么如何使用 API 呢?
要使用 API,您需要首先获得一个授权密钥。它用于获取与 API 连接的授权密钥。API 提供者,在这里是 Youtube,不仅仅是无控制地提供他们的服务。为了保留这个界面并管理用户,他们为每个用户提供了一个唯一的访问密钥。这样,我们就可以连接到应用程序的接口。就像我们通过将电源线插入电源插座来连接电源一样,我们使用这个唯一的密钥将服务器插入存储设备。从这一点出发,我们可以使用 API 的数据和协议。
那么现在让我们从如何获得授权密钥开始。有一个非常好的获取钥匙的教程。如果你是一个网站开发人员,你可以一步一步地遵循这个教程。
创建您的 YouTube API 凭证是通过执行以下主要阶段来完成的:第一阶段——创建 Google OAuth…
help.aolonnetwork.com](https://help.aolonnetwork.com/hc/en-us/articles/218079623-How-to-Create-Your-YouTube-API-Credentials)
如果你要做一些数据分析,你不需要所有这些步骤。您按照步骤进行,直到第 9 步,然后选择“其他”而不是“web 应用程序”开发人员控制台上有两种不同类型的客户端,每种情况下的访问方法都不同。因此,如果您尝试通过“web 应用程序”获取密钥,并从您的本地计算机请求 Oauth,您可能会遇到类似我所得到的错误消息。
因此,单击“其他”选项,然后您将获得客户端密钥和秘密密钥。将它们复制并粘贴到本地计算机上。
Youtube API 的 tuber 包
R 里有 tuber 包,是专门为 Youtube 数据分析做的。您可以绘制各种数据,包括特定频道的视频数量、观看次数、对视频的喜欢和评论等等。要在 R 中调用这些数据,需要先安装‘tuber’包。然后,您向 Google 请求授权令牌。
install.packages('tuber')
library(tuber)client_key = ''
client_secret = ''
yt_oauth(app_id = client_key, app_secret = client_secret)
当您注释这段代码时,浏览器会弹出一些数字,允许您授权应用程序。如果您检查您的本地工具,R 将已经在等待编号,所以复制并粘贴序列号。现在你终于可以和 Youtube API 连接了。
我还将介绍一些对分析来自tuber
包的 Youtube 数据有用的函数。
get_all_channel_video_stats
:统计一个频道中所有视频的功能。您需要一个 channel_id 来使用它。get_stats
:这给你一个视频 id 的统计数据。返回值是视图、喜欢、不喜欢、喜爱和评论的计数。get_video_details
:提供视频发布日期等更具体的信息。您还可以获得标题、描述、缩略图和类别。get_all_comments
:它给你一个视频的所有评论,因此在特定主题或频道的文本挖掘方面有很大的用处list_channel_activities
:返回频道活动列表。list_videos
:返回最受欢迎的视频。
还有其他有用的 API 调用,推荐大家去查一下。你可以从这里浏览它们。
资源
- 什么是 API 的一个优秀视频:https://www.youtube.com/watch?v=s7wmiS2mSXY&t = 75s
- 哈佛 API 战略价值报告:https://hbr.org/2015/01/the-strategic-value-of-apis
- 想多研究 API?ProgrammableWeb 是一所“API”大学,提供几乎所有关于 API 的内容:【https://www.programmableweb.com/
- 不知道怎么处理 Youtube 的数据?看看我以前的作品。你可以从中获得新的灵感!
[## 成为成功 Youtube 的策略:广泛的 Youtube 探索性分析(第 1/2 部分)
为 Youtubers 推荐数据驱动的策略
towardsdatascience.com](/strategies-to-be-a-successful-youtuber-extensive-youtube-exploratory-analysis-part-1-2-40eee29554e6) [## 成为成功 Youtube 的策略:广泛的 Youtube 探索性分析(第二部分)
揭开单词嵌入的神秘面纱并拟合模型以预测视图
towardsdatascience.com](/strategies-to-be-a-successful-youtuber-extensive-youtube-exploratory-analysis-part-2-2-6862cd4f40be)
已经有很多 API 了,但是只有一小部分是公开的。由于数据将直接转化为当今世界的竞争力,我理解企业的意图。然而,我认为他们不应该忽视共享经济的潜力。通过使他们的内部数据可访问,他们将释放全世界开发人员和数据科学家的创造力,为数据设计全新的用途。就像过去几年我们对开源所做的一样。
感谢您的阅读,希望这篇文章对您有所帮助。如果有需要改正的地方,请分享你的见解!如果您想鼓励一位有抱负的数据科学家,请点击👏 👏 👏!我总是乐于倾听你的想法,所以请在 LinkedIn 上分享或联系我。我将带来另一个激动人心的故事。在那之前,机器学习快乐。
什么是人工通用智能?
首先,什么是人工智能?
人工智能是计算机科学(或科学)的一个分支,研究智能系统的创造。智能系统是那些像人类一样拥有智能的系统。
人工智能科学并不新鲜,人工智能一词在古希腊和埃及的手稿中就已被提及。希腊人信奉神**赫菲斯托斯,也被称为铁匠之神,**根据一个希腊神话赫菲斯托斯为所有的神制造了智能武器,在他们看来,人工智能的目标是:有助于人们实现某个目标,能够自动操作并预先被编程以根据情况做出不同的反应。
嗯,人工智能这个词在娱乐领域变得很流行,我们可以看到很多基于超级智能概念的电影。(前 machina,Her,AI,复仇者联盟-奥创时代等。) .但是我们今天看到的人工智能系统无法与所谓的“超级智能”系统相提并论。
真实人工智能和当今人工智能系统的区别:
如前所述,人工智能并不是一个新的领域,自从人类出现以来,许多哲学家和科学家都对人工智能有过一些想象,但他们都受到了当时技术的限制。今天,随着强大的超级计算机的出现,我们能够建立服务于所需目的的人工智能系统。 但是,他们真的聪明吗??答案是否定的,他们不是。让我们看看怎么做。
在计算机和互联网上足够大的数据集的帮助下,所谓的机器学习进入了画面**。机器学习提供了一套可以在现实世界中实现的数学概念。**
神经网络,大致模拟人脑的工作,让机器从例子中学习。深度学习已经帮助许多技术巨头,如谷歌和苹果,通过实施许多新的热门技术,如人脸识别,语言理解,图像理解等,经济地改进他们的产品。但是你想到的,所谓的深度学习并不是真正的智能。机器学习领域需要大量数据集来学习对对象进行分类或进行预测,这被称为监督学习。
所谓的监督学习创造了一种智能的假象,但其核心只是一种数学优化。尽管它拥有决策和分类数据集的能力,但它的工作方式非常狭窄。
我们非常熟悉创建监督学习系统的技术。给定一个大数据集,监督学习系统学习输入和输出之间的映射,因此它可以预测未知输入的输出。但这不是我们的大脑实际做的事情,我们的大脑不需要 10000 张猫的图像来识别一只猫,甚至我们的大脑可以做很多监督学习系统不能做的事情。
监督学习的局限性:
即使监督学习可以用来创造如此多令人惊奇的东西,它也有如此多的限制:
- 它的思维总是局限于某个特定的领域。
- 它的智能取决于你使用的训练数据集。再说一次,你在控制。
- 它不能用于动态变化的环境。
- 只能用于分类和回归。但不是为了控制问题。
- 它需要庞大的数据集,否则就缺乏准确性。获取数据集可能是一个问题。
什么是 AGI?
AGI(人工通用智能)是一个用来描述真正智能系统的术语。真正的智能系统拥有全面思考的能力,不管以前受过什么训练都可以做出决定,这里的决定是基于他们自己所学的。设计这样的系统可能真的很难,因为今天的技术有些有限,但是我们可以创建所谓的“部分 AGI”。
强化学习:
甚至在今天,许多科学家认为强化学习是实现所谓 AGI 的一种方式。强化学习可以用来解决监督学习无法解决的问题。让我们举一个简单的例子来理解行走的基本任务之一,行走是我们非常自然和擅长的一项人类任务。婴儿自己学会走路,而不必搜索数据集,人脑可以通过从错误中学习来做到这一点。但是一旦它变得完美,它可以走上千步,甚至一个步长的不匹配都能被它识别出来。大脑采取的步骤总是最优的,采取的速度(或简单的步长)总是以这样的方式,以同样的方式,在最短的时间内到达目的地,每一步花费的能量应该是最小的。所以行走的速度取决于能量以及你到达目的地的速度。同样的行走问题也可以应用到机器人学等许多需要运动的领域。当然,如前所述,监督学习无法做到这一点。
与动态规划和控制理论的联系:
正如我们已经熟悉的,动态规划是一种获得任何问题的最优解的方法。动态规划已经成为解决旅行商问题和其它图论相关问题最成功的算法之一。这种方法使用迭代方法,其中一组解决方案可以在一个或多个步骤中找到,然后算法的剩余部分决定哪个解决方案是最优的。
**动态规划方程:**动态规划的标准方程被称为贝尔曼方程。该方程可应用于所有决策问题,例如,在旅行推销员问题中,给定一组城市及其距离,问题是获得穿过所有城市至少一次的最短路径。贝尔曼方程可由下式给出:
这个方程包括寻找一个函数 V(x,a),这个函数的目标是为每个状态 x 选择一个动作 a,使得 a 对于 x 总是最优的。这是解释贝尔曼方程的最简单的形式(不是数学的,为了证明,参考维基百科)。目前广泛使用的所有强化学习算法都是动态可编程的,也就是说它们都采用贝尔曼方程的形式。我们稍后会看到 Deep-Q 算法,它类似于贝尔曼方程。一些强化学习算法遵循马尔可夫决策规则,如 SARSA 算法等。在这种情况下,它们采用随机空间中的贝尔曼方程的形式,如下所示:
深度 Q 学习算法:
谷歌的 Deepmind 在 2015 年发表了一篇关于所谓深度 Q 学习算法的非常有趣的论文。这种算法能够在大多数人类难以完成的任务中表现出色。该算法能够在超过 2600 个雅达利游戏中脱颖而出。
他们的工作代表了有史以来第一个能够在没有任何人类干预的情况下不断适应其行为的通用智能体,这是在寻求通用人工智能的过程中向前迈出的一大步。
代理是使用一种称为 Q-learning 的算法开发的,Q 学习算法的核心是 Bellman 方程的一个结果,因此它遵循动态规划的方法论。
**实用方法:**每个强化学习问题都包含以下成分:
- 代理:学习算法或任何有学习能力的物理实体。
- 环境:是部署代理的地方或空间。地球是一个环境,在这里人类是代理人。一个环境是由状态、行动和奖励形成的一套定义明确的规则组成的。
- 状态:代理在任何情况下的有效位置称为状态。代理可以通过执行动作从一种状态转换到另一种状态。每一个行动,不管对国家来说是否正确,都有回报。
- 奖励:奖励是由特定行动的环境定义的结果。如果行动正确,奖励是积极的,否则是消极的。
任何代理人的长期目标都是了解环境,以便获得最大的回报。奖励只有在积极的情况下才能最大化,积极的奖励反过来又是对那个状态采取正确行动的结果。因此,最大化问题处理以下序列,简单来说:
- 给定有效状态 si,生成随机动作 ai。
- 假设动作是正确的,并经历到下一个随机状态 si+1 的转换。
- 计算过渡的奖励 ri。
- 如果奖励是积极的,记住这种状态下的行动,因为这是适当的行动,但不是最佳行动。
- 如果奖励是负的,放弃行动。
- 从获得的一组最佳行动中,找出奖励最大的最佳行动。
- 对环境中的每个状态都这样做。
该等式可由下式给出:
意味着,Q 值,即状态-动作值取决于旧值+新信息和旧信息之间的差异。旧的信息已经存在于记忆中,而新的信息是通过最大化从行动中获得的回报而获得的。所以在许多强化学习问题中,我们构造了一个神经网络,如果动作是正的,它可以学习状态和动作之间的映射。一旦训练完成,我们就可以部署网络,使它为任何有效状态创建正确的动作,从而最大化回报。
登山车示例:
Openai gym 提供了一套可以训练智能体的环境,Mountain Car 是一个很好的例子,强化学习可以用来学习最佳加速度。这个游戏的目标是训练一辆汽车成功爬山。
我们可以从头开始实现 Q 学习,或者我们可以简单地使用 Kears-rl。Krars - rl 只是一个 API 集合,通过它可以使用预先编写的算法。
Car learning to produce optimal acceleration.
如图所示,在 4000 集结束时,汽车已经学会产生足够的加速度来爬山。
代码:
Code for MountainCar-v0
谢谢大家!更多关于强化学习的例子,请参考我的 GitHub 简介:https://github.com/Narasimha1997
我的 Linkedin 个人资料:https://www . Linkedin . com/in/narasimha-pras Anna-HN-17aa 89146/
谢谢:)
什么是人工智能?第一部分
虽然人工智能(AI)这个术语已经存在很多年了,但近年来它似乎已经成为一个流行语。像许多从科学中获得的流行词汇一样,人工智能似乎已经成为一个相当恼人的现象的受害者:大多数使用这个术语的人并不真正知道它的意思。
好吧,也许这有点太苛刻了。当然,使用人工智能这个术语的人对它的意思有一些了解,但是我注意到在很多情况下,非专家(甚至一些所谓的专家)的用法偏离了这个术语在学术界最初的意图。
没有人真正知道是谁创造了“人工智能”这个术语。许多人将其归因于已故的计算机科学家约翰·麦卡锡,但是根据丹尼尔·克勒维耶的采访,麦卡锡否认提出了这个术语。
Participants of the 1956 Dartmouth Summer Research Project on Artificial Intelligence in front of Dartmouth Hall. Based on my wife’s highly tuned facial recognition algorithm, the photo includes Claude Shannon (front right), John McCarthy (back right), Marvin Minsky (center), Ray Solomonoff (front left), and Nathaniel Rochester (back left). Photo credit Margaret Minsky via www.achievement.org
尽管如此,人工智能一词在 20 世纪 50 年代中期开始流行,尽管主要是在美国科学家的小圈子里。一个同义术语,*机器智能,*似乎起源于英国,至今仍在使用,虽然没有人工智能广泛。在本文中,我主要使用术语 AI 来指代“思维机器”的概念,除非我讨论的是一贯使用“机器智能”的作者。
总的来说,本文旨在从历史的角度阐明人工智能的概念,并简要追溯其发展到现代。作为免责声明,我需要指出我不是专业的历史学家。在这段简短的历史中,可能有许多遗漏的情节,但我将通过引用许多更权威的参考文献来试图弥补这一点。
我打算分几部分发表这篇文章。在第 1 部分中,我将重点放在能够思考的机器的概念上。第二部分将集中在 1936 年到大约 1954 年间英国的发展。第三部分将继续从 1954 年左右开始的故事,当时焦点开始转移到美国。
早期人工智能简史
为了理解人工智能是什么,我们回顾过去,看看伟大的思想家认为机器可能做什么。我将人工智能的早期历史分为三个时期:“从自动机到分析引擎”,“从图灵机到跳棋”,以及“从逻辑理论家到自我编写程序”。这将我们带到大约 20 世纪 50 年代末,在这一点上,我们可以说人工智能是一个根深蒂固的科学学科。
从自动机到分析引擎
一些作者将思考机器的想法追溯到古埃及或古希腊(例如[2]),但我个人并不认为这些例子,如苏格拉底和 Euthypro 之间关于虔诚标准的对话,与思考机器或人工智能有太多关系(见[3])。另一个例子是 Talos ,希腊神话中的青铜雕像。由于他被认为是由希腊神赫菲斯托斯创造的,他很难被称为人造生物。
In 1637, Descartes presumed that it would be impossible to create machines that reasoned like humans. Image from a first edition copy of Discourse on the Method (Source: Bibliothèque nationale de France, département Réserve des livres rares, RESM-R-76, Available from: http://gallica.bnf.fr/ark:/12148/btv1b86069594)
基于我有限的研究,我认为思考机器的想法可以追溯到 17 世纪[5]。特别是,勒内·笛卡尔在 1637 年发表了关于方法的论文(著名的短语“我思故我在”就来自于此),在论文中,他推测不可能创造出像人类一样推理的机器[6]:
“……从道德上讲,任何一台机器都不可能存在多种多样的器官,足以让它像我们的理性使我们能够行动那样,在生活的所有事件中发挥作用。”
事实上,在同一篇文章中,他概述了图灵测试,这个话题我们稍后会谈到:
对于那些熟悉不同的自动机或人类工业制造的移动机器所执行的各种运动的人来说,这也不会显得奇怪,与在每个动物体内发现的大量骨骼、肌肉、神经、动脉、静脉和其他部分相比,这只是很少的一部分…
……但是,如果有一些机器带有我们身体的形象,并且能够在道德上尽可能模仿我们的行为,那么仍然会有两种最确定的测试来证明它们不是真正的人。其中第一个是,他们永远不能使用我们能够胜任的词语或其他符号来向他人表达我们的思想:因为我们可以很容易地设想一台机器被构造成能够发出词汇,甚至能够发出一些与外部物体对它的作用相对应的信号,这些外部物体引起它的器官发生变化;例如,如果在一个特定的地方被触摸,它可能要求我们想对它说的话;如果在另一个地方,它可能会大叫说它受伤了,诸如此类;但不是说它应该把它们排列成不同的形式,以便恰当地回答在它面前所说的话,就像智力水平最低的人所能做的那样。
第二个测试是,虽然这种机器可能执行许多事情与我们任何人一样完美,或者可能更完美,但毫无疑问,它们在某些其他方面会失败,从中可以发现它们不是根据知识行事,而是仅仅根据它们的器官的配置…
他所指的自动机本质上是对各种生物的机械化模仿。据报道,这种自动机在古代就已经被制造出来,但它们很难被称为模仿人类思维的机器。
Image of the Great Chess Automaton from “Briefe über den Schachspieler des Hrn. von Kempelen” by Karl Gottlieb von Windisch and published in 1783 (Source: Krešimir Josić*, University of Houston*)
一个例外是 Wolfgang von Kempelen 的大象棋自动机,它建于 1769 年*。*它被设计来下棋,而且下得很好。它甚至打败了本杰明·富兰克林!大多数人都认为擅长下棋是一种需要智力的能力。唯一的问题是冯·肯佩兰的象棋自动机原来是假的。这个奇妙的装置里真的有人!直到 1837 年,也就是它诞生近 70 年后,这一点才被揭示出来。
然而,这个例子表明,到 18 世纪,思考机器的想法肯定仍然存在,而且很好,一些人愿意试图证明笛卡尔是错误的(如果他们甚至知道他的断言)。事实上,似乎没有人知道如何制造会思考的机器,但至少梦想是存在的。
19 世纪上半叶是一个巨大的飞跃,当时发明家查尔斯·巴贝奇提出了分析引擎。它被广泛认为是通用计算机的第一个设计。虽然分析引擎从未完全建成,但许多人认为它在推进机械化通用计算的梦想方面具有影响力。
Trial model of Charles Babbage’s Analytical Engine. (Source: Science Museum Group. Babbage’s Analytical Engine, 1834–1871. (Trial model). 1878–3. Science Museum Group Collection Online. Accessed March 10, 2018. https://collection.sciencemuseum.org.uk/objects/co62245.)
1843 年,阿达·洛芙莱斯翻译并注释了 Luigi Menabrea 的一篇论文,该论文基于 1840 年巴贝奇在都灵的演讲,描述了巴贝奇的分析引擎[8]。似乎没有人想到分析引擎确实是一台思考机器:
因为机器不是一个有思想的生物,而只是一个根据强加给它的法则行动的自动机。
洛夫莱斯在她的笔记中补充道:
分析引擎并不自命能创造任何东西。它可以做我们知道如何命令它执行的任何事情。它可以跟随分析;但是它没有预见任何分析关系或真理的能力。它的职责是帮助我们利用我们已经熟悉的东西。
尽管分析引擎不被认为是思维机器,但它在设计能够进行复杂数学计算的计算机方面向前迈出了一大步。这将被证明是对其他计算机先驱的鼓舞,比如艾伦·图灵,我们接下来会谈到他。
继续第 2 部分。
参考
[1]克勒维耶博士(1993 年)。人工智能:探索人工智能的动荡历史。纽约:基础书籍。
[2]哈克,s .(未注明)。人工智能简史。检索自https://www . atariarchives . org/deli/artificial _ intelligence . PHP。
[3]柏拉图。(约。【公元前 399 年】T4。从http://www.gutenberg.org/ebooks/1642取回。
[4] *塔罗斯。*检索自https://www . Greek mythology . com/Myths/Creatures/Talos/Talos . html。
【5】人工智能。(2010) *你知道吗?。*从https://didyouknow.org/ai/.取回
[6]笛卡尔(1637 年)。论正理求真的方法。从 http://www.gutenberg.org/ebooks/59 取回。
[7]伟大的国际象棋自动机。(未注明)。恶作剧博物馆。检索自http://hoaxes . org/archive/permalink/the _ great _ chess _ automaton。
[8]梅纳布雷亚,L. F. (1843 年)。查尔斯·巴贝奇发明的分析引擎草图。a .洛夫莱斯)。科学回忆录。第三卷。从https://www.fourmilab.ch/babbage/sketch.html取回(原作发表于 1842 年)。
什么是人工智能?第二部分
从图灵机到跳棋
在这篇文章中,这是从一开始就追溯人工智能概念的系列文章的第二部分,我们继续讲述艾伦·图灵的故事,他被许多人认为是计算机科学之父。正如我们将看到的,艾伦·图灵不仅有资格被称为计算机科学之父,也有资格被称为最早的人工智能先驱之一(或者他会称之为机器智能)。因此,我对他短暂而非凡的职业生涯倾注了相当多的关注,包括一些生平细节。
我重申我的免责声明,我不是专业的历史学家。相反,我希望这一系列文章能够激励其他人进一步研究这一迷人的历史,并为“人工智能”的实际含义提供见解。
论可计算数(1936)
1936 年,艾伦·图灵发表了科学史上具有里程碑意义的论文之一《论可计算数,以及对 entscheidungpolymer 的应用》[1] 。在书中,他描述了他所谓的“通用计算机器”。为了纪念他,这个理论构造现在被称为通用图灵机*,它不仅具有理论意义:许多人认为它是现代计算机的基础思想。*
图灵在计算科学方面的早期工作与人工智能相关,因为它提出了以巴贝奇的分析引擎为代表的计算思想。图灵的论文从数学角度证明了一般计算由单台机器完成的可能性。也就是说,图灵证明了任何可以被计算的数或序列,都可以被一种单一类型的机器计算,即所谓的通用图灵机。虽然这可能无法证明机器能够思考,但它表明,完成一般计算任务的机器是可以设计出来的(至少在理论上是如此)。
Several pages of a typed draft of “On Computable Numbers” are known to exist. Another unpublished paper was handwritten by Turing on the back of these pages. I gratefully acknowledge [2] for this information (Image Source: AMT/C/15/image 01a.2. The Turing Digital Archive [6]. Copyright © P.N. Furbank*)*
谜和炸弹(1939-1942)
1939 年 9 月 4 日,也就是英法对德宣战的第二天,图灵从剑桥搬到了英国政府代码和密码学校(GC & CS)的总部布莱切利公园[3]。在那里,他成了破译机Bombe的主要设计者,这种破译机用于破译德国 Enigma 密码机的密码。
谜和炸弹的故事是一个漫长而有趣的故事,但它已经被很好地记录下来了。我将只叙述基本的细节。我向感兴趣的读者推荐杰克·科普兰的优秀著作《图灵的本质》和其中引用的参考资料。
Example of a wartime Enigma cipher machine. (Source: National Museum of the Royal Navy)
在这篇文章中,我想简要探讨的是图灵的工作和人工智能的发展之间的联系,我相信这有助于阐明人工智能实际上是什么的概念。
在许多方面,Bombe 可以被认为是机器学习的原始实现。“炸弹”是一种机器,它装有复制几份“谜”的元件,建造的目的是发现能解开德国密码信息的“T2 之眼”。它使用启发式搜索来找到一个候选关键字,该关键字将解决一组特定的约束条件(即,一个启发式的,由炸弹的特定设置来表示),然后人工操作员将检查该关键字,应用于编码信息,是否会产生连贯的德语。图灵后来推测“智力活动主要由各种各样的搜索组成。”[4].
我认为上述过程是机器学习的原始形式,因为这是当今许多机器学习算法在高层次上所做的:(1)从一大组可能的配置中选择一个配置,表示满足某些约束的函数的参数,(2)根据某种正确性度量来检查/测量候选解(即参数集),(3)根据需要重复,以及(4)一旦对性能满意,就使用所选配置作为模型来计算其他尚未看到的数据的一些输出。
Images of a “Bombe,” which was about 2 meters high (including the wheels and cabinet). The left image shows the front with its nine rows of drums replicating Enigma “wheels”. The right image show the rear panel, where cables connected together different drums in order to represent different constraints (Left image source: Gerald Massey; Right image source: Antoine Taveneaux)
Bombe 和现代机器学习之间有三个主要区别,不是在程序上,而是在实现上。首先,Bombe 要求操作员使用连接不同组件的电缆来设置机器(见上图),以便施加某些约束/启发。一个人还被要求将候选“解决方案”转移到一台单独的机器上(一个复制的谜),以试图破译一条完整的德国信息。原则上,这些手动步骤也可以是自动化的,但在这个时期,让人类操作员执行这些步骤可能比构建/扩展一台机器来执行相同的任务更容易。
其次,虽然 Bombe 可以在大约两个小时内选择和检查 17,576 种配置[3],但在现代计算机上执行的现代机器学习在许多情况下可以每秒执行数百万次这种类型的过程(当然,细节取决于参数的数量、计算之间的函数、计算机的大小等)。).
第三,炸弹是一种被设计用来执行特定任务的机器(即学习恩尼格玛密码的钥匙),而且只能用于该任务。今天,我们通常在通用计算机上执行机器学习任务,这些计算机可以通过简单地将其他程序加载到内存中来“重新配置”用于其他任务。
尽管用现代术语来说,这种炸弹需要手动操作且“缓慢”,但与之前存在的任何东西相比,它代表了其特定任务在自动化和计算速度方面的重大进步。请注意,当时还有其他计算机器存在,如 IBM 601 。不过,我不确定是否有可能像我们今天这样,在这个时代的不同机器之间进行“苹果对苹果”的计算速度比较。最后,我想指出的是,Bombe 是基于早期解谜机的设计,由波兰数学家设计的 Bomba 。
在进入其他话题之前,我想指出,在仅仅三四年的时间里,图灵从非常理论化的(关于可计算数字)转向了高度实用化的(破解德国军事通信)。用英国特勤局官方历史学家哈里·辛斯利爵士的话说:
我不会说图灵的所作所为让我们赢得了这场战争,但我敢说,如果没有他,我们可能会输掉这场战争。
我们还知道,在 1941 年初,由于德国潜艇对船只的攻击,英国面临着食物和其他基本供应品告罄的危险。当时,海军版的英格玛还没有被破解,许多人认为它无法破解,但最终当图灵的团队在 1941 年 6 月开始定期解码海军英格玛信息时,英国船只能够成功地避开 U 艇[3]。灾难得以避免。
如果这些成果——帮助英国人民避免饥饿,帮助盟军赢得二战——不是实践研究的缩影,我不知道什么是。在我看来,在图灵悲惨短暂的职业生涯开始时,他的工作的高度实践性对人工智能的发展有很大的影响。如果图灵继续走理论路线,这个领域可能不会像 1941-1953 年期间那样迅速发展,我们现在将探讨这一点。
图灵转向机器智能(约 1941-1953)
根据与图灵在布莱奇利公园共事的唐纳德·米歇尔的采访,图灵早在 1941 年就开始思考“机器智能”。他在 GC & CS 的同事中传阅了一篇关于机器智能的论文,但是现在已经遗失了。我们还知道,在 1941 年底,留给图灵研究的关于英格玛的理论问题已经不多了,所以他开始研究其他问题,只是在短期内加入了英格玛团队[3]。
1942 年 11 月,图灵去了美国,在那里他在贝尔实验室研究语音加密。在那里他遇到了 Claude Shannon,我们将在第 3 部分讨论他。图灵于 1943 年 3 月回到英国,继续致力于自动语音加密,直到战争结束。
第一台通用计算机设计(1945-1947)
尽管图灵 1936 年关于可计算数字的论文描述了一台通用的计算机,但它并不是一台计算机的实用设计。1945 年 10 月,图灵加入了国家物理实验室(NPL)的数学部门,致力于这样的设计。1945 年末,图灵发表了一份名为“提议的电子计算器”的技术报告,其中详细说明了这种机器的设计(见下图)。在这份报告中,他还提出了机器智能的话题,描述了什么将成为“经典”的人工智能问题:
给定国际象棋中的一个位置,机器可以列出每边大约三步的所有“获胜组合”。这……提出了一个问题‘机器会下棋吗?’很容易就能玩一场相当糟糕的游戏。这很糟糕,因为象棋需要智力。我们在本节开始时说过,机器应该被视为完全没有智能。然而,有迹象表明,冒着偶尔犯严重错误的风险,让机器显示智能是可能的。通过跟踪这一方面,机器可能会下一盘很好的棋。
Left: Original manuscript of “Proposed Electronic Calculator,” which was to become the Automatic Computing Engine (ACE). Right: Letter from Turing to Sir W. Ross Ashby, describing how ACE could be used to mimic how the human brain works. (Source: The Turing Archive for the History of Computing [5])
当这台机器的一个试验版本最终被命名为自动计算引擎(ACE;为了向巴贝奇致敬),建于 1950 年 5 月,它是世界上最快的计算机,运行速度为 1 MHz [3,第 367 页]。另一台使用与图灵的 ACE 设计相同的基本原理建造的计算机是 Bendix G15 ,被一些人认为是第一台个人计算机。
当图灵设计 ACE 时,机器智能是他考虑的首要问题,正如 1946 年写给 W. Ross Ashby 的一封信(见上图)所示:
在研究 ACE 的过程中,我对制造大脑活动模型的可能性比对计算的实际应用更感兴趣…
…机器很有可能尝试不同的行为,并以你描述的方式接受或拒绝它们,我一直希望让机器做到这一点 ACE 实际上类似于我在关于可计算数的论文中描述的“通用机器”。这种理论上的可能性在实践中是可以实现的……因此,尽管大脑实际上可能是通过改变其神经元回路来运作的……然而,我们可以在 ACE 中建立一个模型,在这个模型中,这种可能性是允许的…
1947 年 2 月 20 日,图灵在伦敦数学协会做了一次关于 ACE 的演讲。我们通过一个草稿副本了解了这个讲座的一些内容,这个草稿副本可以从[5]中获得,并且已经被重印了几卷(例如[7]和[3])。这不仅是已知的第一次描述机器智能的公开讲座,图灵还清楚地阐述了机器学习的概念:
有人说,计算机只能执行它们被指示去做的过程……同样真实的是,最初建造这些机器的意图是把它们当作奴隶,只给它们经过详细考虑的工作……直到现在的机器只是以这种方式使用。但是有必要总是以这种方式使用它们吗?
让我们假设我们已经设置了一台具有某些初始指令表[即程序]的机器,如果有充分的理由,这些表有时可能会修改这些表……可能它仍然会得到机器最初设置时所期望的类型的结果,但以更有效的方式……这就像一个学生从他的主人那里学到了很多,但通过自己的工作增加了很多。**当这种情况发生时,我觉得人们不得不认为机器显示了智能。**一旦人们能够提供合理的大内存容量,就应该可以开始在这些方面进行实验……我们想要的是一台能够从经验中学习的机器。
(黑体字是我为了强调而加的。)
主要由于内部政治和 NPL 对 ACE 项目的管理不善,直到 1950 年 5 月才完成 ACE 的“试验模型”。
剑桥公休假(1947-1948)
1947 年 7 月,图灵仍然受雇于 NPL,他去剑桥大学休假 12 个月。国家公共图书馆馆长查尔斯·达尔文爵士很好地表达了这一休假的目的[5]:
[图灵]想把他在机器上的工作进一步扩展到生物学方面。我可以这样来最好地描述它:迄今为止,机器被设计用来做相当于大脑较低部分的工作,他想看看机器能为较高部分做多少工作;例如,可以制造一台可以通过经验学习的机器吗?
A report written by Turing in 1948 titled “Intelligent Machinery” is the most detailed treating of artificial intelligence written before 1950. It was not published during Turing’s lifetime. (Source: The Turing Archive for the History of Computing [5])
休假回来后,图灵写了一份题为《智能机械》的报告。这是一部高度原创的作品,引入了具有学习能力的遗传算法和神经网络(他称之为“无组织机器”)等思想,以及强化学习。我不想给出详细的总结,我只想引用图灵在报告结尾的总结:
讨论了使机器表现出智能行为的可能方法。与人脑的类比被用作指导原则。有人指出,只有提供适当的教育,人类智力的潜力才能发挥出来。这项研究主要围绕一个应用于机器的模拟教学过程。定义了无组织机器的概念,并提出婴儿人类大脑皮层具有这种性质。简单的例子,这样的机器,他们的教育通过奖励和惩罚的方式进行了讨论。在一种情况下,教育过程一直进行到组织类似于 ACE。
图灵从未发表过这份报告,但同样可以通过[5]和几本选集(即[8]和[3])获得。
曼彻斯特时代(1948-1953)
由于对进展缓慢感到沮丧,图灵于 1948 年离开了他在 NPL 的职位,加入了曼彻斯特维多利亚大学的计算机实验室。
First page of Turing’s 1950 article “Computing Machinery and Intelligence,” where the now famous “Turing Test” was introduced.
计算机实验室是由马克斯·纽曼(布莱奇利公园的另一位老兵)于 1946 年建立的。当图灵加入时,他们正在深入开发“曼彻斯特宝贝”,当它在 1948 年 6 月 21 日运行第一个程序时,成为世界上第一台存储程序计算机。虽然我不会详细讨论图灵对曼彻斯特早期计算机发展的贡献,但可以说他的影响是巨大的。
图灵在 1948 年至 1953 年期间最著名的成就是一系列关于机器智能主题的文章和公开讲座,包括 1950 年发表在领先哲学杂志 Mind 上的文章“计算机械和智能”。在这篇文章中,提出了著名的“模仿游戏”,也就是现在所知的图灵测试:
我建议考虑这样一个问题,“机器能思考吗?”这应该从“机器”和“思考”这两个术语的定义开始……我不会尝试下这样的定义,而是用另一个问题来代替这个问题,这个问题与它密切相关,并且用相对明确的语言表达。
这个问题的新形式可以用一个我们称之为“模仿游戏”的游戏来描述。它由三个人玩,一个男人(A),一个女人(B),和一个审问者©,他们可能是男性也可能是女性。审讯者呆在一个与其他两人分开的房间里。这个游戏的目的是让审讯者确定另外两个人中哪个是男人,哪个是女人…审讯者可以向 A 和 B 提问…
在举了一些审讯者可能会问的问题类型的例子后,图灵继续说道:
我们现在问这样一个问题,“当一台机器在这个游戏中扮演 A 的角色时,会发生什么?”这样玩游戏时,审讯者会像在男女之间玩游戏时一样经常错误地决定吗?这些问题取代了我们原来的‘机器会思考吗?’
文章的其余部分描述了对机器可以思考这一观点的各种可能的反对意见,以及图灵对这些反对意见的反驳。还有一章是关于“学习机器”,这在很大程度上是对他在 1948 年文章中概述的观点的扩展。他以一个深刻的观察结束了这篇文章:
我们只能看到前面不远的地方,但我们可以看到那里有许多需要做的事情。
1951 年,在英国广播公司做了几次广播演讲,其中一次题为“智能机械,异端学说”,另一次题为“数字计算机能思考吗?”1952 年,他参加了 BBC 播出的一个小组讨论,题目是“自动计算机器可以说会思考吗?”。其他小组成员包括理查德·布莱斯维特(哲学家)、杰弗里·杰弗逊(神经外科医生)和马克斯·纽曼。
在这段时间里,图灵也对人工生命的话题产生了兴趣。这有点超出了本文的范围,所以我不会试图总结他在这方面的工作。1953 年,他发表了一篇名为《国际象棋》的短文,这标志着他多年来为计算机编程下棋的努力达到了顶峰。最后,在 1954 年,图灵发表了他的最后一篇文章,题目是《可解和不可解的问题》,发表在科学新闻上,这是一份普及科学的杂志。这篇文章的目的是向普通读者展示他在可计算数字方面的早期贡献,也许是最持久的贡献*。*
图灵的审判与死亡
Alan Turing quoted in 11 June 1949 edition of “The Times” (UK).
1952 年,图灵受到审判,并被判犯有同性恋行为,这在当时的英国是刑事犯罪。1954 年 6 月 8 日,图灵被发现死于家中。虽然死亡被裁定为自杀,这一发现一直是争议的主题[9]。
尽管他的生命和职业生涯短暂,但图灵对人类和计算机创造力的影响是持久的。我想引用图灵在 1949 年 6 月 11 日《T4 时报》上的一篇文章来结束我的演讲:
这仅仅是即将发生的事情的预演,也仅仅是将要发生的事情的影子。在真正了解这台机器的性能之前,我们必须先有一些使用它的经验。我们可能需要几年时间才能适应新的可能性,但我不明白为什么它不能进入人类智力通常覆盖的任何领域,并最终在平等的条件下竞争。
参考
[1]a . m .图灵(1937 年)。可计算数及其在 Entscheidungsproblem 问题上的应用。伦敦数学学会会报, 2 (1),230–265 页。(注:从技术上讲,这篇论文发表于 1937 年,但在那个时代,论文通常会在会议上被大声朗读,之后会以纸质形式发表在会议录上。这篇论文是在 1936 年 11 月 12 日宣读的。)
[2]霍奇斯(未注明日期)。可计算的数字和图灵机,1936 年。艾伦·图灵互联网剪贴簿,从 http://www.turing.org.uk/scrapbook/machine.html 的 T2 取回。
[3]科普兰,B. J .).(2004).《图灵精粹》:在计算、逻辑、哲学、人工智能和人工生命方面的开创性著作,还有《谜》的秘密。牛津:克拉伦登出版社。
[4]图灵,A. (1948)。“智能机械”。在 B. J .科普兰(编辑).(2004).《图灵精粹》:在计算、逻辑、哲学、人工智能和人工生命方面的开创性著作,还有《谜》的秘密。牛津:克拉伦登出版社。
[5]科普兰法官(未注明日期)。AlanTuring.net:计算历史图灵档案,从http://www.alanturing.net/检索。
[6]国王学院(剑桥)。(未注明)。图灵数字档案馆,从http://www.turingarchive.org取回。
[7]卡彭特、B. E .和多兰·r . w .(1977 年)。另一台图灵机。计算机杂志。第 20 卷第 3 期。
[8]埃文斯和罗伯逊编辑).(1968)关键论文:控制论。伦敦:巴特沃斯。
[9]维基百科贡献者。(2018 年 3 月 15 日)。艾伦·图灵。在维基百科,免费百科。检索 2018 . 3 . 20 20:08 来自https://en.wikipedia.org/w/index.php?title=Alan_Turing&oldid = 830576161
未引用的其他参考文献:
Copeland,B. J. (2005 年)。艾伦·图灵的自动计算引擎:密码破译大师努力打造现代计算机。纽约:牛津大学出版社。
科普兰,B. J。).(2012).艾伦·图灵的电子大脑:努力打造 ACE,世界上最快的计算机。纽约:牛津大学出版社。
科普兰,j .,鲍文,j .,斯普雷瓦克,m .,,威尔逊,R .).(2017).图灵指南。纽约:牛津大学出版社。
胜彦和杉本四叶(2017 年)。《从计算机器到学习智能机器:艾伦·图灵机器思想的年代发展》。在了解信息:从大爆炸到大数据。 (A. J .舒斯特)湛:施普林格自然。