回顾:VDSR(超分辨率)
T 他的时代, VDSR **(极深超分辨率)**回顾。VDSR 是一种用于放大图像的深度学习方法。它有 20 个权重层,比只有 3 层的 SRCNN 要深得多。
有时,我们只得到一个很差的图像,我们想进行数字放大(放大),但当放大时图像变得模糊。这是因为常规的插值或放大把一幅小图像变成一幅大图像,会得到很差的图像质量。使用 VDSR,我们可以从低分辨率(LR)图像获得高质量的高分辨率(HR)图像。
下面是两个例子。
VDSR 是经典的最先进的 SR 方法之一,在我撰写本文时,发表在 2016 CVPR 上,被引用约 800 次。( Sik-Ho Tsang @中)
Much Clear Image after Enlargement Using VDSR (Edges are much clearer)
Some More Amazing Results
结果很惊人!!那么,让我们来看看它是如何工作的。
涵盖哪些内容
- VDSR 网络架构
- 关于培训的一些细节
- 结果
1。VDSR 网络架构
VDSR Network Architecture
VDSR 架构如上图所示:
- 将 LR 图像插值为 ILR 图像并输入到网络。
- ILR 图像经过 (D-1)次 Conv 和 ReLU 层。
- 然后后面跟着一个 D-th Conv (Conv。图中的 d(残差)。
- 最后,输出与 ILR 图像相加,得到 HR 图像。
这些是 64 个大小为 3×3 的过滤器,用于每个 conv 层。(VGGNet 已经解决了连续的3×3 滤波器的问题,这有助于获得更大的感受野,因此我们不需要任何大的滤波器,例如 5×5 和 7×7。如果有兴趣,请阅读我的 VGGNet 评论。)
如我们所见,ILR 被添加到网络的输出中,以恢复 HR 图像,损失函数变为:
其中 r=y-x 。因此,网络正在学习输出和输入之间的残差,而不是像 SRCNN 一样直接学习 HR 输出。
Residual vs Non-Residual with Different Learning Rate
有了残差学习,收敛比无残差学习快得多。在第 10 时段,残差已经达到 36 dB 以上,而非残差仍然只有 27-34 dB。
2。关于培训的一些细节
2.1 可调渐变剪辑
梯度被剪裁到[-θ/γ;θ/γ ] ,其中γ表示当前的学习速率。并且 θ被调整得很小,以避免在高学习率状态下爆发梯度。
当 D= 20 时,20 层网络训练在 4 小时内完成,而 3 层 SRCNN 需要几天来训练。
2.2 多尺度训练
Mutli-Scale Training Results
当使用单尺度图像时,网络只能在测试期间对相同尺度工作良好,对于其他尺度的测试,PSNR 甚至比传统的双三次插值更差。
通过使用×2、×3、×4 尺度的图像进行训练,在测试过程中所有尺度都获得了最高的峰值信噪比。
Multi-Scale VDSR (Top), Single-Scale Dong’s [5] (Bottom)
单尺度 Dong 的[5]获得模糊的图像,而 VDSR 具有更清晰的边缘。
3.结果
Comparison with State-of-the-art Results (Red: The best, Blue: 2nd Best)
VDSR is much faster than SRCNN
上表显示 t VDSR 用最少的测试时间获得了最好的结果。
随着人工智能芯片组在未来变得流行,VDSR 或其他最先进的方法可以实时应用于图像放大,甚至应用于视频。
参考
- 【2016 CVPR】【VDSR】
使用极深度卷积网络的精确图像超分辨率
我的相关评论
综述:WRNs —宽残差网络(图像分类)
T 他的时代, WRNs(广残网)呈现出来。通过加宽残差网络(【ResNet】),在精度相同或精度提高的情况下,网络可以更浅。较浅的网络表示:
- 层数可以减少。
- 培训时间也可以缩短。
一个更好的辍学也进行了调查。这是一篇 2016 BMVC 论文,引用 700 余次。虽然这是一篇 2016 年的论文,但他们仍然在 2017 年 6 月继续更新这篇论文。( Sik-Ho Tsang @中)
Various ResNet Blocks
涵盖哪些内容
- 残网上的问题(ResNet)
- 宽残差网络
- 结果
1.关于剩余网络的问题( ResNet
1.1.电路复杂性理论
电路复杂性理论文献表明:
浅电路比深电路需要更多的元件。
残差网络的作者试图使它们尽可能薄,以利于增加它们的深度并具有更少的参数,甚至引入了一个瓶颈块,使 ResNet 块更薄。
1.2.减少特征重用
然而,当梯度流过网络时,没有任何东西迫使它通过剩余块权重,并且它可以避免在训练期间学习任何东西,因此有可能只有几个块学习有用的表示,或者许多块共享非常少的信息,对最终目标贡献很小。这个问题被表述为减少特征重用。
2.宽剩余网络
在 WRNs 中,测试了大量参数,如 ResNet 块的设计、ResNet 块内的深度(加深系数 l 和宽度(加宽系数 k )等。
当 k =1 时,与 ResNet 宽度相同。而k1,比 ResNet 宽 k 倍。
WRN- d - k
- 预激活 ResNet 用于 CIFAR-10、CIFAR-100 和 SVHN 数据集。ImageNet 数据集中使用了原始的ResNet。
- 主要区别在于 预激活 ResNet 具有在卷积之前执行批范数和 ReLU 的结构(即 BN-ReLU-Conv),而原始ResNet具有 Conv-BN-ReLU 的结构。而 预激活 ResNet 一般比原版好,但在 ImageNet 只有 100 层左右的情况下没有明显提升。
2.1.ResNet 块的设计
WRN-d-2 (k=2), Error Rate (%) in CIFAR-10 Dataset
- B(3;3) :原始基本块,在第一个图(a)中
- B(3;1;3) :在两个 3×3 层之间增加一个 1×1 层
- B(1;3;1) :所有卷积维数相同,拉直**瓶颈**
- B(1;3) :网络具有交替的 1×1,3×3 卷积
- B(3;1) :网络具有交替的 3×3,1×1 卷积
- B(3;1;1) :网络中网络样式块
B(3;3)错误率最小(5.73%)。
注意:深度(层)的数量不同是为了保持参数的数量彼此接近。
2.2.ResNet 块内的卷积层数
WRN-40–2 with different l, Error Rate (%) in CIFAR-10 Dataset
并且两个 3×3 卷积,即 B(3,3)具有最小的错误率。因为所有网络都需要保持接近相同的参数, B(3,3,3)和 B(3,3,3,3) 的更少,这使得精度下降。并且 B(3) 只有一个 3×3 卷积,这使得特征提取在 ResNet 块内的这种浅网络内无效。****
因此, B(3,3)是最优的,并将在接下来的实验中使用。
2.3.ResNet 块的宽度
Different Width (k) and Depth on CIFAR-10 and CIFAR-100
- 当宽度增加 1 到 12 倍时,所有具有 40、22 和 16 层的网络看到一致的增益。
- 另一方面,当保持相同的固定加宽因子 k = 8 或 k = 10 并且将深度从 16 改变到 28 时,有一致的改进,然而当我们进一步将深度增加到 40 时,精度降低。
- 基于上述结果,选择了三组 wrn 与最先进的方法进行比较。
3.结果
3.1.西法尔-10 和西法尔-100
CIFAR-10 & CIFAR-100
- WRN-40–4:参数(8.9M)比 1001 层 预激活 ResNet (10.2M)少。但是它也降低了错误率。(在 CIFAR-10 上为 4.52%,在 CIFAR-100 上为 21.18%)
- WRN-16-8 & WRN-28-10 :比 WRN-40–4 更浅更宽,错误率更低。使用较浅的网络,训练时间可以更短,因为无论多宽,并行计算都是在 GPU 上执行的。
- 并且它是第一篇在没有任何强大数据增强的情况下获得低于 20%的 CIFAR-100 的论文!!!
3.2.拒绝传统社会的人
Dropout in Original ResNet (Left) and Dropout in WRNs (Right)
Dropout Is Better
- 上图:使用 dropout,可以获得不同深度、k 和数据集的一致增益。
- 右下:对于辍学,训练损失较高,但测试误差较低,这意味着辍学成功地减少了过拟合。
3.3.ImageNet & COCO
Single Crop Single Model Validation Error, ImageNet
- 上述网络获得了与原始网络相似的精度,但层数减少了 2 倍。
3.4.训练时间
Training Time for Each Batch with Batch Size of 32, CIFAR-10
- WRN-16–10 和 WRN-28–10:训练时间远低于 1004 层 预激活 ResNet ,错误率更低。
- WRN-40–4:训练时间比 164 层 预激活 ResNet 短,错误率更低。
因为训练需要很多时间,所以可能需要几天甚至几周。当训练集越来越大时,需要一种更好的训练方法。事实上,在最近的研究中,许多研究人员仍然专注于如何减少训练时间或训练次数。
在 WRNs 中,它减少了训练时间,但代价是由于网络的扩大而增加了参数的数量。
参考
【2016 BMVC】【WRNs】
广残网
我对图像分类的相关综述
[LeNet][AlexNet][ZFNet][VGGNet][SPPNet][PReLU-Net][Google Net/Inception-v1][BN-Inception/Inception-v2][Inception-v3][Inception-v4
综述:例外—深度方向可分离卷积,优于 Inception-v3(图像分类)
在这个故事中,谷歌的exception【1】,代表《盗梦空间》的极致版,进行了回顾。通过修改的深度方向可分离卷积**,它在 ImageNet ILSVRC 和 JFT 数据集上都比 Inception-v3**【2】(也是由谷歌在 ILSVRC 2015 中获得亚军)更好。虽然这是一篇去年刚刚发表的 2017 CVPR 论文,但在我写这篇文章的时候,它已经被引用了 300 多次。( Sik-Ho Tsang @中)
涵盖哪些内容
- 原始深度方向可分离卷积
- 除外的改进深度方向可分离卷积
- 整体架构
- 与最先进结果的比较
1。原始深度方向可分离卷积
Original Depthwise Separable Convolution
原始深度方向可分离卷积是深度方向卷积后跟一个点方向卷积。
- 深度方向卷积是通道方向 n×n 空间卷积。假设在上图中,我们有 5 个通道,那么我们将有 5 个 n×n 空间卷积。
- 逐点卷积实际上是改变尺寸的 1×1 卷积。
与常规卷积相比,我们不需要在所有通道上执行卷积。这意味着连接数量更少,型号更轻。
2。除外的改进深度可分卷积
The Modified Depthwise Separable Convolution used as an Inception Module in Xception, so called “extreme” version of Inception module (n=3 here)
修改的深度方向可分离卷积是点方向卷积,后面是深度方向卷积。这种修改是由 inception-v3 中的 Inception 模块引起的,即在任何 n×n 空间卷积之前首先进行 1×1 卷积。因此,它与原来的有点不同。(这里 n=3 因为在 Inception-v3 中使用了 3×3 空间卷积。)
两个小区别:
- 操作顺序:如上所述,通常实现的原始深度方向可分离卷积(例如在 TensorFlow 中)首先执行通道方向空间卷积,然后执行 1×1 卷积,而修改的深度方向可分离卷积首先执行 1×1 卷积,然后执行通道方向空间卷积。这被认为是不重要的,因为当它被用在堆叠设置中时,在所有链接的初始模块的开始和结束处只有很小的差别。
- 存在/不存在非线性:在初始模块中,第一次操作后存在非线性。除了修改的深度方向可分离卷积之外,没有中间 ReLU 非线性。
The modified depthwise separable convolution with different activation units
测试了具有不同激活单元的改进深度可分卷积。如上图所示,与使用 ELU 或 r ELU 的情况相比,没有任何中间激活的例外具有最高的准确性。
3。整体架构
Overall Architecture of Xception (Entry Flow > Middle Flow > Exit Flow)
如上图所示, SeparableConv 是修正的深度方向可分离卷积。我们可以看到,SeparableConvs 被视为初始模块,并被放置在整个深度学习架构中。
还有最初由 ResNet [3]提出的针对所有流的剩余(或快捷方式/跳过)连接。
ImageNet: Validation Accuracy Against Gradient Descent Steps
正如在架构中看到的,存在剩余连接。这里,它使用非剩余版本测试异常。从上图可以看出,使用残差连接时,精度要高得多。由此可见,剩余连接极其重要!!!
4。与最先进结果的比较
测试了 2 个数据集。一个是 ILSVRC。一个是 JFT。
4.1.ImageNet — ILSVRC
ImageNet 是一个数据集,包含超过 1500 万张带有标签的高分辨率图像,大约有 22,000 个类别。
ILSVRC 在 1000 个类别中的每个类别中使用大约 1000 个图像的 ImageNet 子集。总的来说,大约有 130 万幅训练图像、50,000 幅验证图像和 100,000 幅测试图像。
ImageNet: Xception has the highest accuracy
Xception 优于 VGGNet [4]、ResNet [3]和 Inception-v3 [2]。(如果感兴趣,也请访问我关于他们的评论,广告了,lol)
需要注意的是,在错误率方面,而不是准确率方面,相对提升不小!!!
ImageNet: Validation Accuracy Against Gradient Descent Steps
当然,从上图来看,沿着梯度下降的台阶,Xception 比 Inception-v3 有更好的准确率。
但如果用非残差版本和 Inception-v3 对比,Xception 表现不如 Inception-v3。为了公平比较,是不是应该有一个残版的 Inception-v3 比较好?无论如何,Xception 告诉我们,利用深度方向可分离卷积和残差连接,确实有助于提高精度。
Model Size/Complexity
据称,Xception 与 Inception-v3 的模型大小相似。
4.2.JFT—fast val 14k
JFT 是一个用于大规模图像分类数据集的内部谷歌数据集,由 Hinton 教授等人首先介绍,它包括超过 3.5 亿张高分辨率图像,标注有来自 17,000 个类别的标签。
使用辅助数据集 FastEval14k。FastEval14k 是一个包含 14,000 幅图像的数据集,具有来自大约 6,000 个类的密集注释(平均每幅图像 36.5 个标签)。
由于多个目标密集地出现在一幅图像中,因此使用平均精度预测(mAP)进行测量。
FastEval14k: Xception has highest mAP@100
FastEval14k: Validation Accuracy Against Gradient Descent Steps
同样,与 Inception-v3 相比,Xception 的 mAP 更高。
参考
- 【2017 CVPR】【例外】
例外:深度可分卷积深度学习 - 【2016 CVPR】【盗梦空间-v3】
重新思考计算机视觉的盗梦空间架构 - 【2016 CVPR】【ResNet】
用于图像识别的深度残差学习 - 【2015 ICLR】【VGGNet】
用于大规模图像识别的极深度卷积网络
我的评论
- 回顾:Inception-v3–ILSVRC 2015 亚军(图像分类)
- 回顾:ResNet—ils vrc 2015(图像分类、定位、检测)获奖者
- 点评:VGGNet—ils vrc 2014 亚军(图像分类)、冠军(本地化)
复习:YOLOv2 & YOLO9000 —你只看一次(物体检测)
在这个故事里, YOLOv2,你只看一次版本 2,是评论。YOLOv2 比 YOLOv1 有多项改进。YOLO9000 还被提议使用单词树检测超过 9000 个对象类别。
下面(我相信)是作者非常著名的 YOLOv2 视频:
YOLOv2
在 67 FPS 时,YOLOv2 在 PASCAL VOC 2007 上获得了 76.8%的 mAP。40 FPS,YOLOv2 获得 78.6% mAP 比 更快 R-CNN 使用ResNet和 SSD。取得如此好的成绩,YOLOv2 发表在 2017 CVPR 上,并获得超过 1000 次引用。( Sik-Ho Tsang @中)
YOLOv2
论文题目是“ YOLO9000:更好更快更强”。
那么,让我们看看怎样才能更好,更快,更强!!!
涵盖哪些内容
- YOLOv2 比yolo v1(更好)**
- YOLOv2 使用 Darknet-19(更快)
- YOLO9000 by WordTree(更强)
1。YOLOv2 的改进超过了yolo v1(更好)**
1.1.批量归一化(BN)
- BN 用于 YOLOv2 中的所有卷积层。
- 地图提高 2%。
1.2.高分辨率分类器
- 经过 224×224 图像训练后,YOLOv2 还使用 448×448 图像在 ImageNet 上对分类网络进行 10 个时期的微调。
- 地图增加 4%。
1.3.带有锚盒的回旋
- YOLOv2 移除所有完全连接的层,并使用锚定框来预测边界框。
- 移除一个池层以提高输出的分辨率。
- 现在使用 416×416 的图像来训练检测网络。
- 并且获得 13×13 的特征图输出,即 32×下采样。
- 在没有锚盒的情况下,中间模型获得了 69.5%的 mAP 和 81%的召回率。
- 使用锚盒,获得了 69.2%的 mAP 和 88%的召回率。虽然地图略有下降,但召回率大幅上升。
1.4.维度群
- 锚定框的大小和比例是预先定义的,没有获得任何事先信息,就像《更快的 R-CNN 中的 一样。
- 使用基于标准欧几里德距离的 k-means 聚类不够好,因为较大的盒子比较小的盒子产生更多的误差
- YOLOv2 使用 k-means 聚类,可获得良好的 IOU 分数:
Cluster IOU
- k = 5 是在模型复杂性和高召回率之间取得良好平衡的最佳值。
Different IOU Clustering Approaches with DIfferent Number of Anchor Boxes
- 具有 5 个锚框的基于 IOU 的聚类(61.0%)具有与具有 9 个锚框的 更快 R-CNN 中的相似的结果(60.9%)。
- 基于 IOU 的 9 锚盒聚类得到 67.2%。
1.5.直接位置预测
- YOLOv1 对位置预测没有约束,这使得模型在早期迭代时不稳定。预测的边界框可能远离原始网格位置。
- YOLOv2 使用逻辑激活σ来限定位置,这使得值落在 0 到 1 之间:
Constrained Bounding Box Prediction
- (cx,cy)是网格的位置。
- (bx,by)是包围盒的位置:(cx,cy) +由σ(tx)和σ(ty)包围的 delta。
- (pw,ph)是从聚类中得到的锚盒先验。
- (bw,bh)是边界框尺寸:(pw,ph)乘以(tw,th)。
- 地图比锚盒版本增加了 5%。
1.6.精细特征
- 13×13 特征图输出足以检测大物体。
- 为了更好地检测小目标,将前一层的 26×26×512 特征图映射为 13×13×2048 特征图,然后与原始的 13×13 特征图连接进行检测。
- mAP 增加了 1%。
1.7.多尺度训练
- 对于每 10 个批次,随机选择新的图像尺寸。
- 图像尺寸为{320,352,…,608}。
- 调整网络大小并继续训练。
1.8.增量改进总结
Incremental Improvements
- 较小尺寸的图像网络运行速度更快。
- 对于低分辨率的 YOLOv2,在 90 FPS 的情况下,mAP 和 快速 R-CNN 一样好,非常适合更小的 GPU。
- 对于高分辨率 YOLOv2,以实时速度获得 76.8%的 mAP。
PASCAL VOC 2007 Dataset
对于 MS COCO 数据集,以下方法中只有 YOLOv2 可以获得实时性能:
Microsoft COCO Dataset
2。YOLOv2 使用 Darknet-19(更快)
除了以上修改,网络架构也是影响 mAP 的一个因素。
在 YOLOv2 中使用 Darknet-19 分类网络进行特征提取:
Darknet-19 Classification Network
我们可以看到,Darknet-19 有许多 1×1 卷积来减少参数的数量。(如果对原因感兴趣,请访问我在 GoogLeNet 上的评论。)
Darknet-19 可以在准确性和模型复杂性之间获得良好的平衡:
1000-Class ImageNet Classification Results
由于 Top-1 和 Top-5 错误接近于 ResNet-50 ,Darknet-19 具有更低的模型复杂度(FLOP),因此具有更快的检测速度(FPS)。
3. YOLO9000 by WordTree(更强)
有多个数据集用于分类和检测。作者有一个想法,“他们能结合在一起吗?”
3.1。联合收割机
COCO and ImageNet
- 微软 COCO : 100k 图片,80 个类,检测标签,类比较笼统像“狗”或者“船”。
- ImageNet:1300 万张图片,22k 个类别,分类标签,类别更具体,如“诺福克梗”,“约克夏梗”,或“贝德灵顿梗”。
- 像“狗”和“诺福克梗”这样的类别并不互相排斥。
我们不能通过添加更多的类来直接组合它们,如下所示:
We CANNOT combine like this
为了合并,使用了单词树:
WordTree
如上所示,WordTree 有一个层次结构树,将类和子类联系在一起。简而言之,基于树的单词树是在基于图的单词网的基础上,通过将 ImageNet 中的名词可视化,并在单词网中选择较短的路径来构建的。
例如:“诺福克梗”也有“狗”和“哺乳动物”的标签。
如果网络看到“狗”的图像,但不确定它是哪种类型,它仍然会基于条件概率以高置信度预测为“狗”。
最后有 9418 个班。
3.2.YOLO9000 培训
- 使用 3 个先验而不是 5 个先验来限制输出大小。
- 对于检测图像,损失通常反向传播。
- 对于分类图像,只有分类损失在标签的相应级别或以上被反向传播。
3.3.YOLO9000 结果
- 获得了 19.7%的 mAP。
YOLO9000 Results
最初,COCO 女士没有这么多的基本事实类,而 ImageNet 有类,但没有基本事实边界框。
现在 YOLO9000 提供了一种将它们结合在一起的方法。
参考
【2017 CVPR】【yolov 2 & yolo 9000】
yolo 9000:更好更快更强
我的相关评论
[ R-CNN ] [ 快速 R-CNN ] [ 更快 R-CNN][SSD][yolov 1][VGGNet][ResNet][Google net/Inception-v1][Inception-v2/BN-Inception]
岭和套索回归:L1 和 L2 正则化
使用 Scikit 的完整指南-学习
从我上周讨论的非常重要的非监督学习技术,继续,今天我们将通过线性回归深入探讨监督学习,特别是两个特殊的线性回归模型——Lasso 和 Ridge regression。
由于我使用了术语“线性”,首先让我们澄清一下,线性模型是使用输入要素的线性函数来预测输出的最简单方法之一。
Linear model with n features for output prediction
在上面的等式(1.1)中,我们已经示出了基于 n 个特征的线性模型。只考虑单一特征,因为你可能已经知道 w[0] 将是斜率,而 b 将代表截距。线性回归寻找优化 w 和 b ,使得它最小化成本函数。成本函数可以写成
Cost function for simple linear model
在上面的等式中,我假设数据集有 M 个实例和 p 个特征。一旦我们对分成训练集和测试集的数据集使用线性回归,计算训练集和测试集的分数可以给我们一个粗略的概念,即模型是过拟合还是欠拟合。如果你足够幸运的话,选择的线性模型也可以是恰到好处的!如果数据集上的特征很少,训练集和测试集的得分都很低,那么这就是拟合不足的问题。另一方面,如果我们有大量的特征,并且测试分数比训练分数相对较差,那么这就是过度概括或过度拟合的问题。岭和套索回归是降低模型复杂性和防止简单线性回归可能导致的过度拟合的一些简单技术。
岭回归: 在岭回归中,通过增加一个等价于系数大小平方的惩罚来改变成本函数。
Cost function for ridge regression
这相当于在如下条件下最小化等式 1.2 中的成本函数
Supplement 1: Constrain on Ridge regression coefficients
因此岭回归对系数 (w)施加了约束。罚项(λ)正则化系数,使得如果系数取大值,优化函数被罚。因此,岭回归缩小了系数,有助于降低模型复杂性和多重共线性。**回归情商。1.3 可以看出,当λ → 0 时,成本函数变得类似于线性回归成本函数(等式。1.2).因此*降低对特征的约束(低λ),模型将类似于线性回归模型。*让我们看一个使用波士顿数据的例子,下面是我用来描述线性回归作为岭回归的极限情况的代码
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
matplotlib.rcParams.update({'font.size': 12})from sklearn.datasets import load_boston
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridgeboston=load_boston()
boston_df=pd.DataFrame(boston.data,columns=boston.feature_names)
#print boston_df.info()# add another column that contains the house prices which in scikit learn datasets are considered as target
boston_df['Price']=boston.target
#print boston_df.head(3)newX=boston_df.drop('Price',axis=1)
print newX[0:3] # check
newY=boston_df['Price']#print type(newY)# pandas core frameX_train,X_test,y_train,y_test=train_test_split(newX,newY,test_size=0.3,random_state=3)
print len(X_test), len(y_test)lr = LinearRegression()
lr.fit(X_train, y_train)rr = Ridge(alpha=0.01) # higher the alpha value, more restriction on the coefficients; low alpha > more generalization,
# in this case linear and ridge regression resemblesrr.fit(X_train, y_train)rr100 = Ridge(alpha=100) # comparison with alpha value
rr100.fit(X_train, y_train)train_score=lr.score(X_train, y_train)
test_score=lr.score(X_test, y_test)Ridge_train_score = rr.score(X_train,y_train)
Ridge_test_score = rr.score(X_test, y_test)Ridge_train_score100 = rr100.score(X_train,y_train)
Ridge_test_score100 = rr100.score(X_test, y_test)plt.plot(rr.coef_,alpha=0.7,linestyle='none',marker='*',markersize=5,color='red',label=r'Ridge; $\alpha = 0.01$',zorder=7) plt.plot(rr100.coef_,alpha=0.5,linestyle='none',marker='d',markersize=6,color='blue',label=r'Ridge; $\alpha = 100$') plt.plot(lr.coef_,alpha=0.4,linestyle='none',marker='o',markersize=7,color='green',label='Linear Regression')plt.xlabel('Coefficient Index',fontsize=16)
plt.ylabel('Coefficient Magnitude',fontsize=16)
plt.legend(fontsize=13,loc=4)
plt.show()
Figure 1: Ridge regression for different values of alpha is plotted to show linear regression as limiting case of ridge regression. Source: Author.
让我们来理解上图。在 X 轴上,我们绘制了系数索引,对于波士顿数据,有 13 个特征(对于 Python,第 0 个索引是指第 1 个特征)。对于较低的α值(0.01),当系数限制较少时,系数的大小几乎与线性回归相同。对于较高的α (100)值,我们看到,与线性回归情况相比,系数指数 3、4、5 的幅度要小得多。这是一个使用岭回归缩小系数大小的例子。
**Lasso 回归:**Lasso(最小绝对收缩和选择算子)回归的成本函数可以写成
Cost function for Lasso regression
Supplement 2: Lasso regression coefficients; subject to similar constrain as Ridge, shown before.
就像岭回归成本函数一样,对于λ= 0,上面的等式简化为等式 1.2。*唯一的区别是,不考虑系数的平方,而是考虑幅度。*这种类型的正则化(L1)可导致零系数,即某些特征在输出评估中被完全忽略。**因此,Lasso 回归不仅有助于减少过度拟合,还能帮助我们进行特征选择。**正如岭回归一样,可以控制正则化参数(λ),我们将使用sklearn
中的癌症数据集看到以下效果。我使用癌症数据而不是我以前使用的波士顿房屋数据的原因是,癌症数据集有 30 个特征,而波士顿房屋数据只有 13 个特征。因此,通过改变正则化参数可以很好地描述 Lasso 回归的特征选择。
Figure 2: Lasso regression and feature selection dependence on the regularization parameter value. Source: Author.
我用来绘制这些图的代码如下
import math
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# difference of lasso and ridge regression is that some of the coefficients can be zero i.e. some of the features are
# completely neglectedfrom sklearn.linear_model import Lasso
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_breast_cancer
from sklearn.cross_validation import train_test_splitcancer = load_breast_cancer()
#print cancer.keys()cancer_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)#print cancer_df.head(3)X = cancer.data
Y = cancer.targetX_train,X_test,y_train,y_test=train_test_split(X,Y, test_size=0.3, random_state=31)lasso = Lasso()
lasso.fit(X_train,y_train)
train_score=lasso.score(X_train,y_train)
test_score=lasso.score(X_test,y_test)
coeff_used = np.sum(lasso.coef_!=0)print "training score:", train_score
print "test score: ", test_score
print "number of features used: ", coeff_usedlasso001 = Lasso(alpha=0.01, max_iter=10e5)
lasso001.fit(X_train,y_train)train_score001=lasso001.score(X_train,y_train)
test_score001=lasso001.score(X_test,y_test)
coeff_used001 = np.sum(lasso001.coef_!=0)print "training score for alpha=0.01:", train_score001
print "test score for alpha =0.01: ", test_score001
print "number of features used: for alpha =0.01:", coeff_used001lasso00001 = Lasso(alpha=0.0001, max_iter=10e5)
lasso00001.fit(X_train,y_train)train_score00001=lasso00001.score(X_train,y_train)
test_score00001=lasso00001.score(X_test,y_test)
coeff_used00001 = np.sum(lasso00001.coef_!=0)print "training score for alpha=0.0001:", train_score00001
print "test score for alpha =0.0001: ", test_score00001
print "number of features used: for alpha =0.0001:", coeff_used00001lr = LinearRegression()
lr.fit(X_train,y_train)
lr_train_score=lr.score(X_train,y_train)
lr_test_score=lr.score(X_test,y_test)print "LR training score:", lr_train_score
print "LR test score: ", lr_test_scoreplt.subplot(1,2,1)
plt.plot(lasso.coef_,alpha=0.7,linestyle='none',marker='*',markersize=5,color='red',label=r'Lasso; $\alpha = 1$',zorder=7) # alpha here is for transparency
plt.plot(lasso001.coef_,alpha=0.5,linestyle='none',marker='d',markersize=6,color='blue',label=r'Lasso; $\alpha = 0.01$') # alpha here is for transparency
plt.xlabel('Coefficient Index',fontsize=16)
plt.ylabel('Coefficient Magnitude',fontsize=16)
plt.legend(fontsize=13,loc=4)plt.subplot(1,2,2)plt.plot(lasso.coef_,alpha=0.7,linestyle='none',marker='*',markersize=5,color='red',label=r'Lasso; $\alpha = 1$',zorder=7) # alpha here is for transparency
plt.plot(lasso001.coef_,alpha=0.5,linestyle='none',marker='d',markersize=6,color='blue',label=r'Lasso; $\alpha = 0.01$') # alpha here is for transparency
plt.plot(lasso00001.coef_,alpha=0.8,linestyle='none',marker='v',markersize=6,color='black',label=r'Lasso; $\alpha = 0.00001$') # alpha here is for transparency
plt.plot(lr.coef_,alpha=0.7,linestyle='none',marker='o',markersize=5,color='green',label='Linear Regression',zorder=2)plt.xlabel('Coefficient Index',fontsize=16)
plt.ylabel('Coefficient Magnitude',fontsize=16)
plt.legend(fontsize=13,loc=4)
plt.tight_layout()
plt.show() #output training score: 0.5600974529893081
test score: 0.5832244618818156
number of features used: 4training score for alpha=0.01: 0.7037865778498829
test score for alpha =0.01: 0.664183157772623
number of features used: for alpha =0.01: 10training score for alpha=0.0001: 0.7754092006936697
test score for alpha =0.0001: 0.7318608210757904
number of features used: for alpha =0.0001: 22LR training score: 0.7842206194055068
LR test score: 0.7329325010888681
让我们用简短的总结来理解剧情和代码。
- Lasso 回归中正则化参数的默认值(由α给出)为 1。
- 由此,在癌症数据集中的 30 个特征中,仅使用了 4 个特征(系数的非零值)。
- 训练和测试分数(只有 4 个特征)都很低;得出结论,该模型不符合癌症数据集。
- 通过减少 alpha 和增加迭代次数来减少这种欠拟合。现在α = 0.01,非零特征=10,训练和测试分数增加。
- 图 2 的左图显示了两个不同α值的系数大小的比较。对于α= 1,我们可以看到大部分系数为零或接近零,而α= 0.01 则不是这样。
- 进一步减少α =0.0001,非零特征= 22。训练和测试分数类似于基本线性回归情况。
- 在右图中,当α = 0.0001 时,套索回归和线性回归的系数非常相似。
套索正则化如何导致特征选择?
到目前为止,我们已经学习了岭和套索回归的基础知识,并看到了一些理解应用的例子。现在,我将尝试解释为什么套索回归可以导致特征选择,而岭回归只减少接近零的系数,而不是零。下面的插图将帮助我们更好地理解,我们将假设一个只有两个特征的假设数据集。使用脊和套索回归系数的约束(如以上补充 1 和 2 所示),我们可以绘制下图
Figure 3: Why LASSO can reduce dimension of feature space? Example on 2D feature space. Modified from the plot used in ‘The Elements of Statistical Learning’ by Author.
对于二维特征空间,用青色和绿色绘制套索和脊回归的约束区域(见附录 1 和 2)。椭圆轮廓是线性回归的成本函数(等式)。1.2).现在,如果我们放宽了系数的条件,那么约束区域会变得更大,最终它们会到达椭圆的中心。当岭和套索回归类似于线性回归结果时就是这种情况。否则,**两种方法都通过找到椭圆轮廓碰到约束区域的第一个点来确定系数。菱形(套索)在轴上有角,不像圆盘,每当椭圆区域碰到这样的点,其中一个特征完全消失!**对于更高维度的特征空间,使用 Lasso 回归可以在轴上有许多解决方案,因此我们只选择重要的特征。
最后,为了结束这次冥想,让我们总结一下到目前为止我们学到了什么
- 脊套回归的代价函数和正则项的重要性。
- 通过一些使用简单数据集的例子来理解线性回归作为套索和岭回归的极限情况。
- 理解了为什么 Lasso 回归可以导致特征选择,而 Ridge 只能将系数缩小到接近于零。
对于进一步的阅读,我建议“统计学习的元素”;J. Friedman 等人,Springer,第 79-91 页,2008 年。这里展示的使用 L1 和 L2 来演示正则化的例子受到了 Andreas Muller 的《使用 Python 进行机器学习》一书的影响。
希望你喜欢这篇文章,并保持快乐!干杯!
页(page 的缩写)请参阅阿坎沙·拉瓦特的评论,他对在应用岭回归算法之前标准化变量提出了批评意见。
如果你对更深入的基础机器学习概念感兴趣,可以考虑加盟 Medium 使用 我的链接 。你不用额外付钱,但我会得到一点佣金。感谢大家!!
更多来自 Saptashwa(以及媒体上的所有其他作者)。你的会员费直接支持 Saptashwa 和其他作家…
medium.com](https://medium.com/@saptashwa/membership?source=publishing_settings-------------------------------------)
撕掉文字云,聊天情节万岁
在 R 中用一种整洁的方法代替“文本数据的饼图”
在这篇简短的帖子中,我提出了一个信息更加丰富的替代方案,以 R 代码为例,使用了一个tidy text&gg plot 2框架。
前言
数据即字云的缺陷已经很好的覆盖了,随着替代 接近,我在此不再赘述。
尽管如此,单词云仍然是常见的,因为它们令人困惑。在许多方面,它们仍然是文本数据可视化的事实上的标准,至少在技术含量较低的分析中是这样(这一点很明显,并且可能因为大量易于使用的在线工具而变得更加糟糕)。这才真正使它们成为*饼状图 的自然语言 。(因此,两者仍然有它们的位置,尽管几乎总是不如其他选项)。*
总结我个人对 wordclouds 的不满:
- ***无序&迷失方向:*一个单词在视觉平面上的位置(或者它面对的方向)没有逻辑,所以我永远不知道从哪里开始,下一步看哪里,或者我已经看了哪里。我总是在几句话后就迷失了方向,然后我放弃了。
- 一维低信息:它们通常只传达一个维度:词频,尽管有时会故意使用颜色编码。这限制了上下文传达的信息量。
- ***没有尺度:*通常捕捉到的单一维度(词频)甚至没有很好的表现,因为几乎从来没有任何尺度感。例如,即使按比例调整了大小,也没有指示最大或最小的单词在文档中出现的频率。最重要的词可能出现在 90%或 9%的回答中,彻底改变了对数据的任何合理解释。
- ***任意性&不透明:*以上几点都导致了文字云压倒性的任意性&不透明性,导致了糟糕的信噪比,这使得文字云往往更令人困惑,而不是更有启发性。
我认为,文字云的一些可取之处:
- 直接绘制数据 (而不是数据的几何抽象)
- 能够让自己获得身临其境、探索性的用户体验
那么什么是更好的方法呢?
几乎任何事情。
除了上面链接的备选方案 方法之外,茱莉亚·西尔格&大卫·罗宾逊的用 R 整理文本挖掘包含了许多例子,从简单的条形图到更复杂的网络图(&是的,向文字云致敬),并附有 R 代码。
我在与《每日新闻》Philly.com 的问询者&的&洞察团队一起为内部 NLP 框架构建方法原型时,大量借鉴了他们的工作。我们最初的任务是总结对 NPS 调查的自由形式的回复,但是应该推广到各种自然语言:用户评论、客户服务反馈、实际文章内容等等。
介绍聊天情节
在总结 NPS 响应的情况下,我们有关于多尺度&维度的信息:
- 词频 : 一个离散的数值变量
- 每位用户自我报告的推广者得分(“您推荐我们产品的可能性有多大,从 1 到 10 分?”):一个离散的数值/序数变量
- 每个用户的 NPS 发起者/诋毁者/被动者 类别,基于他们的发起者分数:分类/顺序变量
- 用户群 /每个用户的调查版本(例如 7 天印刷订户、仅周日印刷、仅数字等):分类变量
- 复合指标,如按词、NPS 类别或用户群的净或平均推广者分数:连续数字变量
- 派生的 NLP 度量如情感得分 & tf-idf :典型的连续数值变量**
有这么多的信息要传达,一个词云感觉远远不够。
除了用多面条形图通过分类变量简单表示单词或 n- gram 频率之外,我还想利用一个完整的 x,y 笛卡尔平面&将 wordclouds 的直接数据绘制、探索性质映射到更定量的声音、信息丰富的可视化方法。
我的第一个想法是尝试一个带标签的散点图,y 轴是词频,x 轴是每个词的平均推广分数。但是散点图的点很快变得多余&有噪声,那么为什么不直接绘制标签呢?
ggplot 的[geom_text()](https://ggplot2.tidyverse.org/reference/geom_text.html)
实现了这一点,而gg replay扩展包通过geom_text_repel().
提供了更好的易读性的自动间距
我绝对没有发明最终的情节,因为它只是一个用文字而不是点组成的散点图,但我相信我是第一个用聪明/愚蠢的名字’chatter plot’命名它的人,不管那值不值得…
为了演示,我们将通过 Google BigQuery 的公共数据集调出黑客新闻评论&他们的排名:
**
因此,我们有 8000 多条评论和它们的排名(越低=越好),我们将使用它们作为原始 NPS 调查数据的推广者分数的某种代理。
可以看到,排名有很大的偏差(可能的排名取决于评论的总数:如果至少有 10 条评论,一个人只能排在第 10 位),所以为了可视化的目的,我们希望用对数表示它们。
但是首先,我们需要预处理自然语言文本数据,如整齐文本挖掘中所述:
看起来前 8 个左右的单词是文本编码工件,所以我们将在绘图前过滤掉所有大于 2000 的内容。
我们还需要计算每个单词的平均排名,以在我们的图中加入一个额外的维度,然后将其加入到单词计数数据中:
*# compute avg comment ranking of each word
hn_word_avg_rank <- hn_word_tokens_no_stop %>%
group_by(word) %>%
summarize(avg_rank = mean(ranking))# filter word counts & join to average ranks
hn_counts_and_ranks <- hn_word_counts %>% filter(n < 2000 ) %>%
left_join(hn_word_avg_rank, by = "word")*
现在我们准备好选择前 100 个单词&构建我们的聊天情节!
输出:
它就像是一个单词云,除了有顺序的实际数量逻辑,元素的布局美学方面,以及每一个的显式比例参考。这使我们能够在情节中表现更多的多维信息,为观众提供一个连贯的视觉逻辑。
在这个特定的情节中可能有几个有趣的点,但这些都是常见的词(事实上是 8000 条评论中最常见的),所以尽管删除了停用词,但往往不是很有实质性。排名也没有太大变化,因为大多数单词来自前 10 名评论。
让我们尝试另一个对话图,这次按照最低排名(意味着最高排名)选择前 100 个单词:
Careers 是一个明显的离群值,而其余的词则拥挤在低频范围内,最右边、排名最低的评论中有很多网址(可能表明是垃圾邮件?).
我们可以通过添加对 ggplot 的ylim(0,6)
调用来放大这些:
这样更好看。
不爱 opentable ,但send grid&riot games的境遇更好。预测型 ’ & ’ 定量型’也有像样的看点,恰如其分的适合黑客新闻。但是我们应该注意,这些词的频率为 0-6,无论如何都不能被认为代表了它们所来自的 8493 条评论。但是 chatterplot 使这一点完全清楚,而这样的细节几乎被所有的文字云所掩盖。
显然,这只是出于演示目的的 toy ish 数据的一个起点。 chatterplot 框架是灵活的&可以以多种方式扩展。我将把这样的进一步探索留给读者作为练习。
几句临别赠言:
- 在上面的例子中,我们有二维的冗余表示:字数 & 平均评论排名。字数由 y 轴以及文字大小表示,而排名由 x 轴 & 颜色渐变表示。显然,我们可以通过交换这些冗余的表示,在这样的图中编码更多的维度,从而获得更高的信息密度。
- 由于 ggrepel 尽最大努力避免重叠元素,我们失去了一些精度,因为它们被“推到”平面中更开放的空间,所以坐标有些近似。
- 这是在 R 中完成的,但应该可以移植到大多数绘图库或软件中。
***【编辑:*感谢詹姆斯·斯科特-布朗在推特上指出杰森凯斯勒的类似(但要深得多)散射文本 python 包,快来看看!
概述
imo 的 chatterplot 通过将 order 、 coherence 、quantitative rightness、&、多维信息容量引入众所周知的探索性、直接数据 plot,对 wordcloud 进行了改进。
尝试一下&让我知道你提出的任何反馈、例子或改进!
另外关注我&查看我的其他帖子😃
—
在推特上关注:@ dnlmcLinkedIn:【linkedin.com/in/dnlmc】T4Github:https://github.com/dnlmc
机器的崛起
Homer Simpson of the 22nd Century?
大多数看情景喜剧的人都不可避免地会遇到《辛普森一家》,这是一个关于美国工人阶级和社会的典型故事。辛普森一家的父亲荷马·辛普森开车去附近的一家发电厂工作,他是那里的一名核安全检查员。他的大部分工作是检查关键的操作参数是否有异常。如果荷马这样的人生在 150 年前,他会做什么工作?如果他 50 年后出生呢?让我们做一些猜测——
1850 年——普通人荷马可能会在煤矿工作。他会走路去上班,挖煤(或者如果他幸运的话,监督那些工作的人),拿现金,大概还会去户外或者玩棋盘游戏取乐。他吃从家里带来的食物,或者食堂工作人员提供的食物。家里的扫帚有助于清洁灰尘。
1925 年——本世纪初,标准的美国工作是工厂工作。现在,他可能有某种交通工具去那里。休闲发展引入了现代游戏,如篮球和棒球。书籍和游乐园也在增加。他仍然通常吃从家里带来的食物,或者食堂工作人员提供的食物,但有时也会吃包装好的食物。强大的扫帚继续统治。
2000 年——今天,荷马开车去上班。他坐在办公室里,观察机器输出的数字。他通过电子方式向自己的银行账户付款,并让电视在家陪伴他。他还有视频游戏和社交媒体等选择。当家里没人做饭时,他就把一包现成的放进微波炉里吃。现在他的房子变大了,他使用真空吸尘器,因为这比找人替他打扫要便宜。
2050 年——荷马驾驶自动驾驶汽车去他的工作场所,在那里,所有的机器都在内部自我照顾。对于娱乐,有无数的设备。有一台机器可以准备任何你想要的食物。这房子是自动清洁的。等等,为什么他又要去工作了?
‘I’m bored.’
尽管纯属假设,但这确实让我们了解了我们的工作进展情况。他从更多劳动密集型工作到更少劳动密集型工作。从采煤到在工厂使用机器,它们正越来越多地渗透到我们的生活中。在我们过去依赖他人的地方,我们不再依赖科技。无论是社交媒体取代邮递员,还是谷歌地图取代我们在路上询问的人,技术似乎正在为我们做大量的工作。但是他们能做我们所有的工作,让我们无事可做吗?
比较优势
几位经济学家说不会——人类永远都有工作要做。他们认为,李嘉图在 19 世纪倡导的比较优势理论适用于所有情况。即使机器在我们做的每件事情上都做得更好,我们仍然有理由做我们最擅长的事情。这本质上就是比较优势——如果 A 国比 B 国生产更多的小麦和钢铁,他们之间的贸易还是有意义的。尽管这似乎有悖常理,但它已被广泛接受,并成为国际贸易的全部基础。经济学家大卫·H·奥特尔说,虽然机器的工作越来越好,但我们所做工作的价值是对它的补充。引用他的话,“通常情况下,这些输入都扮演着重要的角色;也就是说,一个方面的改进并不排除对另一方面的需要。如果是这样,一组任务的生产率提高几乎必然会增加其余任务的经济价值。既然我们只坚持是否所有人类工作都可以被取代的理论问题,我们现在可以忽略社会因素。但我仍然认为,当我们把机器和技术带入画面时,奥托尔的比较优势假设就失效了。
让我们假设一个由两个成员组成的社会——一个人类和一个机器人。假设人类一天能砌 1000 块砖,或者一天能做 20 公斤意大利面(为了便于讨论)。一个机器人可以砌 10000 块砖或者煮 100 公斤意大利面。很明显,机器人有绝对的优势,无论它做什么工作。比较优势理论告诉我们,每个国家进行专业化分工然后进行贸易仍然是有意义的。(如果你不能理解这一点,这里有一个很棒的链接)。但是如果另一个机器人能在短时间内制造出来呢?那么,人类的产出将比两者都少得多,人类再做任何一项任务都没有意义了!显然,机器人(以及总体技术)在短时间内以低成本复制的能力,是我认为比较优势可能不成立的关键。
互补性
随着汽车的出现,出现了加油站工人、机械师、挡风玻璃清洁工等工作。这些是随着汽车的发展而出现的意想不到的工作。它是否重新创造了所有被拿走的工作是一个次要问题;事实是机器不能做所有的工作。奥特尔沿着这些思路论证道:随着技术的进步,将会创造出我们无法想象的工作岗位。这些是进步带来的互补性。他提出了这样一个观点,即当一项活动变得更有成效时,流程中的所有其他活动都具有更大的价值。因此,人类将永远在填补这些空白方面发挥作用。但是,随着技术发展的步伐,它们所需要的互补性也变得更加技术性。机器现在需要更多的机器才能更好地工作。然而,人类仍然需要建造那些‘其他’机器。这一点让我对机器人是否能完全取代我们深感矛盾。每 1000 个无所事事的家庭中,就有 1 个人在制造那辆自动驾驶汽车。然而,人工智能可能会改变这一点。
人工智能的到来
在此之前,让我们退一步考虑什么是智能。你怎么知道什么是笔记本?有些大,有些小。有些是螺旋装订的,有些是精装的。但是当我们看到一个笔记本时,我们只是知道它是一个笔记本。但是想象一下,向一个没有智力的人描述一个笔记本。笔记本有各种各样的形状、大小、封面和颜色。需要智慧才能知道什么是笔记本。这就是波兰尼悖论——我们知道的比我们能说的多。这在传统上被视为计算机无法取代人类的原因。然而,这种情况正在迅速改变。这方面的一些证据
谷歌 DeepMind 开发的程序 AlphaGo 在 2016 年 3 月击败了世界最佳围棋选手 Lee Sedol。围棋是一种抽象的战略棋类游戏,被认为比国际象棋更难,而 wand 则需要很强的直觉和智力。
每次你在谷歌上使用图片搜索,你实际上是在使用谷歌 DeepMind 的技术,今天的错误率为 5.5%。如果这听起来很多,考虑一下这个——人为错误率大致相同。
人工智能的一个标准是图灵测试。英国著名数学家艾伦·图灵(更著名的是*,模仿游戏*就是基于他)提出,如果一台机器能够在一次对话中成功地愚弄人类,让对方相信它是人类,那么这台机器将显示出真正的人工智能。这是 75 年前的事了。有几个系统已经接近甚至击败了它(尽管这是有争议的)。不管怎样,我们已经非常接近了。
为什么这日益成为一个大话题?我们每天产生的数据量是巨大的;世界数据每两年翻一番*。据预测,到 2025 年,人类大脑将拥有和人类大脑一样的能力。随着计算能力的进步,机器学习算法可以处理的大量数据是海量的,可以用来建立更好的人工智能。*
用外行人的话来说,凭借我们所拥有的数据量和计算能力,我们可以使用蛮力——向计算机展示一百万张岩石照片,它将能够正确识别接下来的一千张照片——来开发计算机的智能。这意味着波兰尼悖论将被规避。计算机现在将和我们知道的一样多。而且没有任何人类的缺点,比如需要休息、食物或熟悉感——不难想象这些机器人会夺走我们目前做的所有工作。当埃隆·马斯克说我们应该担心人工智能时,我们可能应该保持警惕。
Source: WaitbutWhy.com
总而言之,我们目前所做的所有工作,将来都有可能被机器人接管。这是否一定意味着世界末日即将来临,更多的是一个社会问题——这取决于人类社会适应变化的速度,同时让每个人都参与进来。因为有一件事是清楚的——转变将是困难的。70 年代和 80 年代创造的工作岗位已经被人工智能夺走了。人类文明从未处于如此快速的变化之中。查尔斯·斯特罗斯(Charles Stross)的《土星的孩子》(Saturn’s Children)中说,一旦人类社会有机器人做所有的工作,我们就会退缩到“内部快乐”中,对外部世界失去兴趣,最终导致我们的灭绝。希望我们能证明他是错的。
如果你想深入探讨这个话题,这里有一些很棒的链接-
PDF:我们为这篇文章制作了一个精美的 PDF,用于打印和离线浏览。在这里买。(或者看个预览。)注意:…
waitbutwhy.com](http://waitbutwhy.com/2015/01/artificial-intelligence-revolution-1.html) [## 健谈的经济学家
自动化和机器人技术的貌似合理的进步会导致大规模失业吗?如果…
conversable economist . blogspot . in](http://conversableeconomist.blogspot.in/2015/08/how-automation-affect-labor-markets.html)
无脑机器的崛起
当人们讨论人工智能的未来时,一个普遍表达的担忧是对抗性超级智能的出现,这可能意味着我们所知的人类的终结。事实上,我们应该已经考虑好预防措施,以便在人工智能达到人类水平甚至更高时,与它安全共存。
然而,一个更直接的威胁没有得到应有的关注:不是说我们的生活将被超级智能的人工通用智能控制,而是被只会模仿智能的无脑代理人控制,这些代理人执行他们没有充分准备好的任务。
对于一些用例来说,不充分的人工智能可能会令人讨厌,但它的失败通常不会产生严重的影响。例如,我最近给一群流浪猫拍了一张假期快照。云存储服务的图像分类器判定这些动物是狗。
A bunch of “dogs”
在其他情况下,对人工智能不足的担忧更为严重。例如,每个人都希望自动驾驶汽车尽可能安全。所有道路使用者的生活关键取决于控制车辆做出正确决策的算法。
对于上面的示例应用程序,我们很好地理解了问题的机制,以及机器无法做出正确决策的后果。此外,我们可以通过客观的衡量标准(例如,自动驾驶汽车是否能够在路上行驶)或非常直观的标准(例如,那不是一只狗,咄)来评估机器的性能。因此,这些问题非常适合依靠最先进的统计机器学习做出的决策来解决。
H 然而,在一些问题上,我们并没有很好地理解形势的内在机制,也没有明显的有效性标准。最重要的是,如果我们实施不充分的人工智能来大规模地为我们做出这些决定,我们并不容易掌握对人类社会的长期后果。
这种决定的例子有:
在每个例子中,算法可能会引入对某些特征的偏见,这些特征在伦理上是有问题的,例如种族、年龄或性别。可怕的是,这些都是对许多个人的命运和未来有重大影响的决定,我们做出这些决定的方式将塑造整个社会。
一些机器学习专家会告诉你,为了让机器的决策可靠而没有过度的偏见,你只需要调整你的统计模型,在正确的数据上运行它,并可能实施额外的规则来帮助防止歧视性决策:换句话说,这些任务可以由最先进的机器学习来充分执行。
然而,我认为目前的算法甚至无法模拟人类推理的关键特征,这一事实本身就必须让我们在让这些无脑机器做出不仅仅需要数据处理的决定之前非常谨慎。
无脑机器如何无法推理
假设你在远足时被一场雷雨惊到了。你会躲在树下等暴风雨过去吗?你可能不会,因为你知道站在树旁边更容易被闪电击中。你的生命取决于这个信息。
一个基于贝叶斯范式的机器学习算法会同意你的评估:远离树木,因为站在一棵 10 米高的树旁边,被闪电击中的可能性会比不站在树旁边的情况高出 3 倍多。
现在假设你漫步在德国柏林这样的大城市的某个地方。警告你在雷雨时站在树旁的同一算法也将告诉你避开任何有许多外国血统的人居住的地区。毕竟,你遇到的这些人中,有 3 倍的可能性是惯犯。
虽然最终取决于你的政治观点,但是这个被无脑机器使用的“推理路线”可能会引起一种不安的感觉。
最后,如果你比普通人多吃 50%的奶酪,你被床单缠住致死的可能性是普通人的 3 倍:
http://tylervigen.com/spurious-correlations
出于这个原因,无脑机器会强烈建议你少吃美味的切达干酪——这当然是个可笑的建议。
上面的例子都只使用了一个解释变量,所以它们必须被认为是坏特征工程的例子。尽管如此,似乎人类的大脑能够捕捉到增加简单概率推理的方面——无脑机器完全忽视的方面。
在下文中,我将确定其中的三个方面:对因果关系的认识,对这些因果关系的良好解释,以及利用前者来实现积极目标的能力。
**因果关系。**统计学的一个众所周知的口头禅是“相关性并不意味着因果关系”。事实证明,虽然有明确定义的相关性统计方法,但众所周知,因果关系很难定义、形式化或量化。
因果推理的一个方面是反事实思维:如果一棵非常高的树被闪电击中,我们相信如果它不那么高,这一事件就不会发生。另一方面,我们确信,如果我们用邪恶博士的闪电枪射击这棵大树,它将不会发生有效收缩的直接后果(除了被烧伤之外)。因此,树被闪电击中是因为它高,而不是相反。
此外,我们无法想象吃大量奶酪会导致床单成为死亡陷阱的世界。
**很好的解释。**我们是如何如此确信这些反事实的陈述的?毕竟,我们还没有进行任何(随机)实验,包括给整天躺在床上的人喂食奶酪。答案是因果关系是通过我们可以很好解释的机制来传达的:树木中的水分使其成为比空气好得多的导体,树木越高,它就越能为闪电提供阻力最小的路径。
好的解释也是我们如此确信这个推理可以被广泛推广的原因:你知道你不想在雷雨时躲在树下。但是你也知道,无论你在地球上的什么地方,你都应该遵守这条规则,它不仅适用于树木,也适用于其他高大的导电结构。
最后,将这些对世界的解释汇集在一起,让我们对吃太多奶酪会对你产生什么影响以及不会产生什么影响有了很好的直觉。
**目标&行动。**一旦人类明白了因果,他们就可以付诸行动:用一根棍子摩擦另一根棍子会产生火,在寒冷的夜晚和冬天,家人会保持温暖。再加上一个好的解释的力量,他们明白热和火可以通过其他方式产生。这些解释越深入、越普遍,人类与环境的互动就越深远,实现目标的工具就越强大。例如,他们认识到热能是一种能量形式,可以转化为驱动机械工具,比如说蒸汽机。
简而言之,人类的推理和决策不仅基于观察到的数据,还基于对我们的行为将如何影响产生数据的环境和过程的预测。这也是任何道德行为的基础。为了有助于改善社会,代理人需要意识到这样一个事实,即她或他的行动可能有助于改变。
C 当前最先进的机器学习实际上执行或至少模拟了理性推理和决策的上述方面?毕竟,因果推理是机器学习中的一个活跃研究课题。然而,因果推断绝不是战壕中数据科学家的标准工具箱的一部分。
当谈到道德时,无脑机器不会表现出任何良心,目前确保算法不会产生不想要的结果的唯一可靠方法可能是良好的老式监管和审计。
最后,所有这些关键的方面都是相互依赖的:如果不观察和把握因果关系,你就无法给出一个好的解释,如果没有这样的理解,你的行动将是徒劳的。但更重要的是,人类思维过程的其他方面也是必不可少的:反事实思维需要想象力,解释需要抽象(如数学建模),通过明智的行动追求目标甚至需要更多。
无脑机器将如何控制
到目前为止,et 的总结是:虽然人工智能仍然缺乏理性、道德和上下文推理的必要和基本方面,但已经有人努力实现该技术来完成各种道德敏感和上下文敏感的任务,如招聘或浪漫的配对。
一般来说,只有当技术足够成熟时,你才会期待它的广泛实现。
然而,一个常见的认知偏见可能会导致在适当的成熟之前被广泛采用:人工智能的拟人化。请注意,虽然当前围绕人工智能的炒作可能会减弱,但拟人化的趋势已经根深蒂固地融入了人类的大脑,因此将会持续下去。
此外,拟人化习惯性地通过营销行话延续下去。例如,DeepDream 为其用户提供“从人工智能的意识中发现惊人的新维度和视觉文物”当输入一幅图像时,软件可能会产生这样的结果:
Cats, dogs, hellspawn?
所以我们被告知的是:机器有意识,它可以做梦。暗示机器“思考”和“感觉”非常像人。即使你没有从表面上理解这种暗示,你仍然会因为经常接触这种语言的使用而受到影响。
现在考虑由计算机产生的这件“艺术品”或“梦”:
Ceci ne pas un mouton électrique
这是部分曼德尔布洛特场景的可视化。虽然美丽、复杂和微妙,但图像生成的过程基本上只涉及复数的重复平方:这是一个非常简单的数学规则,任何具有第一学期数学知识的人都可以完全理解和应用。
没有人会把更高的认知功能归因于如此简单和任意的计算结构。当然,当前最先进的机器学习也不会产生更高的认知功能:
- 虽然“神经网络”指的是许多复杂的机器学习算法,但它们都与传统的数学工具有着更密切的联系,而不是实际的生物大脑。
- 即使是最大的神经网络(数十亿个权重)的复杂性也远远低于人脑的复杂性(数万亿个神经连接)。
粗略地说,Siri 或 Alexa 将被赋予比 80 年代的袖珍计算器更多的人性,这种想法近乎疯狂。但这是市场行话、公开文章和文章所隐含的想法——包括这篇关于“无脑”机器的文章。
这一发展并非巧合。人们表现出与计算机互动的需求,就像他们与其他人互动一样:几十年的互动设计以相当直接的方式从命令行界面到语音识别和对人形机器人和情感计算的研究。
这意味着人们投入了大量的努力来使机器看起来像人,因此比它们实际上更聪明。因此,对人工智能软件的信任比实际保证的要多。最终,这项技术的采用可能会比合理证明的更快、更广泛。
此外,在我们将无脑机器拟人化的同时,一些人可能会认为世界上的大部分地区已经进入了一个非人化、反科学和反智主义的新时代。如果这些担忧成为现实,前景实际上是相当暗淡的。
- 人工智能将用于任何任务,它将优化仅由经济可行性定义的效用指标。如果相信主要人工智能玩家声称的改善问题的良好意图,那将是非常天真的。
- 科学探究,被理解为解释和知识的积累和更新,将成为优先次序改变的牺牲品,并被无脑的预测机器所取代。
- 公众并不总是知道有多少无脑机器在使用,因为企业可能不希望自由地宣传它们在敏感任务中的用途,例如人力资源管理。
- 算法不仅会学习产生不充分的响应,因为人类输入,而且它还会从其他算法产生的有偏差的数据中学习越来越多的信息,这些数据已经在辨别。
我们如何安全使用无脑机器
总之,我们可能不得不应对一个不同的反乌托邦,远早于一个将人类变成一大滩计算机的流氓人工超级智能:一群没有大脑的机器将通过决定谁将找到工作、配偶或朋友,或者谁将获得贷款,或者谁将入狱,来控制数十亿个人的社会地位和福祉。当然,也将控制我们投票给哪个政府,而将决定世界各地战场上的生死。
他们会这样做,没有审查或任何后果感,因为他们每个人的认知能力都不如果蝇。他们将无处不在,他们将忙于彼此交流,没有学到任何新的东西,但在许多反馈循环中延续旧的偏见和错误。他们缺乏任何内在动机,无法真正理解或解释他们的环境或行为。一些机器会假装它们不是哲学僵尸,但它们实际上是,而是伪装成你的“老师”、“朋友”、“同事”或“伴侣”。其他机器会对你隐藏起来,我们甚至不知道它们在那里,从无处不在的计算基础设施的一些黑暗的、被遗忘的角落拉你的弦。
我们能做些什么来阻止这样一个暗淡的未来呢?当然,每个人都要尽自己的一份力量,我最后提出一些建议:
- 在我看来,因果推理和强化学习将是机器学习研究前进的关键概念。理解因果关系和与环境的相互作用是发展人类智能的先决条件。
- 与此同时,我们不能将智能算法的监管和审计工作留给各大人工智能公司。数据保护法需要在全球范围内实施防止算法偏差的政策。
- 数据科学家和机器学习工程师需要就构建敏感的人工智能应用程序的道德准则和最佳实践达成一致。
最后,随着人工智能越来越成为日常生活的一部分,该技术的安全、好处和风险需要像道路交通安全一样自然地成为日常政治和公共话语的一部分。
进一步阅读/观看
大卫·多伊奇:我们离创造人工智能还有多远?
约翰·塞尔:人工智能中的意识
弗朗西斯科·梅希亚·乌里韦:没有证据就相信在道德上是错误的
更多技术说明
对消防工作中“风险”的思考
The 2017 Las Vagas Shooting produced more than 800 victims in less than 10 minutes
这个比喻
想象一下,你和世界闻名的叔叔丹一起去露营,他是经济学教授,在“风险”方面的专业知识得到了广泛认可。午饭后,你看到丹把手伸进大岩石下寻找响尾蛇。惊恐之余,你坚持丹立即停止他的“野生王国”探险。丹毫不惊慌,平静地解释说,他是“风险”方面的专家,并根据他的“统计历史”得出结论,响尾蛇咬他的可能性几乎为零。你突然意识到经济学中的“风险”肯定不同于现实世界中的“风险”,也许丹叔叔应该呆在安全的大学校园里。
理解“风险”有不同的框架。在股票市场上赔钱的风险和从着火的屋顶上掉下来的风险是不同的。因此,不同的领域有不同的理解风险的方法。偶尔,一个领域借用另一个领域的风险模型,导致有缺陷的思维方式。不幸的是,这正是消防部门所做的,他们采用了经济学中的风险模型,即“经济效用理论(EUT)”
经济学中的风险史
Exposition of a New Theory on The Measurement of Risk
1738 年,丹尼尔·伯努利发表了《关于风险度量的新理论的阐述》,这为度量风险奠定了基础,被称为经济效用理论,或简称为“EUT”伯努利的 EUT 认为,“风险”是概率和后果的产物,是衡量投资的有用工具。EUT 最终成为经济、金融、商业以及消防服务领域风险度量的基础。
美国国家消防协会(NFPA)对“风险”的定义之一是“不利影响的可能性和严重性的度量”这是伯努利的 EUT 的另一种说法。需要澄清的是,我并不是批评 NFPA 对“风险”的定义,而是批评好心的用户对这一特定定义的不当应用。在不考虑不利后果的情况下,NFPA 对风险的定义进入了消防部门的覆盖标准、社区风险降低计划和公共安全卓越中心。
A Screen shot from NFPA’s 2018 Glossary of Terms
尽管 NFPA 对风险的定义在技术上没有错,但如果用在错误的上下文中,它可能会产生误导。由于缺乏 EUT 模型所要求的“概率度量”,消防部门经常用统计数据来代替。这种对概率的历史统计的不正确使用是常见的和欺骗性的,经常导致图表通过基于出现频率的分数将两个对立的概念联系在一起。
Screen shot for Sacramento Fire Departments 2017 Standards of Coverage Report
概率和出现频率的换位使用有很大缺陷。例如,仅仅因为某人在六面骰子上掷出十次“一”,并不意味着掷出额外一个“一”的概率增加了。掷出“1”的概率仍然是六分之一或 16%,即使最近掷出“1”的频率非常高。
统计历史和概率之间的巨大差异是 EUT 从未被用于消防服务等领域的原因。用统计学代替概率会导致危险的结论。更糟糕的是,概率测量在消防服务中是不可计算的。
赌场是我所知道的唯一一个概率是已知的、高斯的(即,钟形曲线),并且几乎是可计算的人类冒险。
——纳西姆·塔勒布,被随机性愚弄
为什么消防服务中没有“概率”
概率是一个等式;基于 随机 、 不相关 事件产生一个介于 0 和 1 之间的数的计算。例如,使用“先验概率”,在一轮俄罗斯轮盘赌中幸存的概率是 6 分之 5 或 83%。为了计算概率,我们将有利结果的数量除以可能结果的总数。在俄罗斯轮盘赌的例子中,我们用空室的数量 5 除以空室的总数 6。换句话说,要诚实地计算概率,你需要知道所有 可能的 结果!
Probability (PA) is equal to the number of favorable outcomes divided by the total possible outcomes
现在挑剔的读者可能会立即看到问题;如何才能知道现实世界中所有 可能的 结果?批判思想家突然认同纳西姆·塔勒布、爱德华·索普、巴西尔·帕斯卡(概率的创始人)等学者和数学家;他们都认为概率只在游戏中起作用。
因此,如果消防部门使用 EUT,我们如何在不知道所有可能结果的情况下计算概率呢?如前所述,消防部门经常混淆概率和统计趋势,或者说是错误的假设,即一个人的历史是一个人未来的预测。这类似于假设既然一条蛇从未咬过你,那么你未来的“概率”很低。幸运的是,美国国土安全部(DHS)已经着手解决这个问题,并为理解风险提供了一个替代框架。
联邦政府对风险的了解。
“我们必须在所有国土安全工作中应用基于风险的框架。”
——国土安全部——风险指导社区,2008 年
衡量风险的方法有很多。使用不合适的风险模型可能比什么都不做更糟糕;制造虚假的安全感,让社区面临更多风险。联邦政府在 911 之后吸取了这个教训。所有基于历史事件的风险客观衡量标准都对 2001 年 9 月 11 日的事件视而不见。自那以后,DHS 采用了一种主观风险框架,定义为“根据威胁、脆弱性和后果评估的负面结果”,简称“TVC”
Risk model from Center from Homeland Security and Defense
“所有的模型都是错的;有些是有用的”——乔治·博克斯博士*。*
TVC 等主观风险框架是一种混乱的做法。与 EUT 不同,TVC 没有一个清晰、客观的数据。相反,TVC 用的客观性换取了的灵活性。TVC 更像是一个组织思想的框架,而不是产生数字计算,它允许用户利用直觉和新信息。借用统计学家乔治·博克斯的话来说,TVC 是错误的,但却非常有用。
没有证据并不是不存在的证据。
“最大的失败是想象力的失败。”-911 委员会报告
TVC 防止我们陷入“缺少证据就是缺少证据”的谬论或者说,只是因为我们以前没有见过它,并不意味着它不存在。“911 委员会”称这是“想象力的失败”。“想象力的失败”在阿波罗 1 号事故、珍珠港事件和泰坦尼克号沉没中被提及。因此,联邦政府大多放弃了 EUT 等定量风险指标,转而采用 TVC 等主观框架。
想象力的丧失
就像 DHS 一样,消防部门面临着不寻常事件的可能性,这些事件源于复杂系统的相互作用,如天气、人类行为和相互交织的基础设施;想想圣布鲁诺管道破裂或者 FIU 大桥坍塌或者。相互关联的复杂系统,如城市,固有地具有发生新的灾难性事件的可能性。复杂系统产生的事件的新颖性需要一个允许想象的风险框架。需要说明的是,不一定是对所有可能发生的事件的想象,而是对**可能发生的事件的描述;**比如时速 100 英里的大风引发的野火,火灾后的泥石流,或者在音乐会上有人向 22,000 名观众开枪。
Driven by heavy winds through topography that burned 40 years ago, the Tubb’s fire was very plausible with an incalculable probability
衡量风险是一件棘手的事情,包含了大量的模型和框架。选择错误的模型或框架会导致错误的安全感。这为我们面临的实际风险创造了一个“盲点”。由于对概率的依赖,风险的客观度量如 EUT 在“真实生活”环境中是失败的。接受消防服务中不存在“概率”的事实将符合我们社区的最大利益。我们需要采用更灵活的框架,比如 TVC。继续使用需要数字变量的客观模型只是在科学的幌子下对自己撒谎的一种精心设计的方式,可能会因为错过独特的事件而将我们的社区置于更高的风险之中。
“当风险最大的时候,安全感也达到了顶点”——纳西姆·塔勒布,《黑天鹅:极不可能事件的影响》
Photo by Timothy Meinberg on Unsplash
人工智能解决方案
机器学习对人类的未来有着巨大的潜力——但它不会解决我们所有的问题
尽管媒体标题暗示我们已经生活在一个人工智能已经渗透到社会各个方面的未来,但这实际上对人工智能真正能为人类做什么设定了不切实际的期望。世界各国政府都在竞相承诺支持人工智能倡议,但他们往往低估了在现实世界中部署先进的机器学习系统的复杂性。这篇文章反思了“人工智能解决方案主义”的风险:越来越流行的观点认为,只要有足够的数据,机器学习算法就可以解决人类的所有问题。没有万能的人工智能解决方案。所有的解决方案都是有成本的,并不是所有可以自动化的都应该有成本。
关于人工智能(AI)未来的预言无处不在。关于人工智能如何治愈疾病、加速人类创新和提高人类创造力的耸人听闻的新闻并不缺乏。单从标题来看,你可能会认为我们已经生活在一个人工智能已经渗透到社会各个方面的未来。
不可否认的是,人工智能已经开启了大量充满希望的机会,它也导致了一种心态的出现,这种心态可以被最好地描述为“人工智能解决方案主义”。这就是 en vogue 哲学,给定足够的数据,机器学习算法可以解决人类所有的问题。
但是这个想法有一个很大的问题。它没有支持人工智能的进步,而是通过忽视重要的人工智能安全原则和对人工智能真正能为人类做什么设定不切实际的期望,实际上危害了机器智能的价值。
人工智能梦想和妄想
仅仅几年时间,人工智能解决方案主义就从硅谷的技术传道者传播到了世界各地的政府官员和政策制定者。钟摆已经从反乌托邦观念人工智能将毁灭人类转向新发现的乌托邦信念,即我们的算法救世主已经到来。
在世界各地,我们现在看到各国政府承诺支持国家人工智能倡议,并在技术和言论上展开军备竞赛,以主导蓬勃发展的机器学习领域。例如,英国政府誓言投资 3 亿英镑在人工智能研究上,将自己定位为该领域的领导者。着迷于人工智能的变革潜力,法国总统埃马纽埃尔·马克龙已经承诺将法国变成一个全球人工智能中心。与此同时,中国政府正在增加其人工智能实力,制定了一项国家计划,到 2030 年创造价值 1500 亿美元的中国人工智能产业。
正如预言科幻作家威廉·吉布森曾经写道的,“未来已经在这里了——只是分布得不太均匀。“因此,许多国家都希望主导第四次工业革命。人工智能解决方案主义正在兴起,并将继续存在。
“当谈到机器学习时,政府应该停下来深呼吸一下。仅仅为了人工智能而使用人工智能可能并不总是有成效或有用的。”
虚假承诺或有缺陷的前提?
虽然许多政治宣言吹捧即将到来的“人工智能革命”的积极变革效应,但他们往往低估了在现实世界中部署先进机器学习系统的复杂性。自然,人工智能的能力是有限的,这些限制与机器学习技术的实际工作方式有关。为了理解这些错误观念背后的原因,让我们来看看基础知识。
最有前途的人工智能技术之一是神经网络。这种形式的机器学习是松散地模仿人脑的神经元结构,但规模要小得多。许多基于人工智能的产品使用神经网络从大量数据中推断模式和规则。但许多政治家不明白的是,简单地将神经网络添加到问题中并不意味着你会自动找到解决方案。
“简单地给民主添加一个神经网络,并不意味着它会立刻变得更加包容、公平或个性化。”
如果政策制定者开始在左右和中间部署神经网络,他们不应该假设人工智能会立即使我们的政府机构更加敏捷或高效。简单地给民主添加一个神经网络,并不意味着它会立刻变得更加包容、公平或个性化。
通过类比,考虑将一个实体购物中心转变为一家公司,比如亚马逊。仅仅增加一个脸书页面或推出一个网站不足以让实体购物中心成为一家真正的数字技术公司。需要更多的东西。
挑战数据官僚主义
人工智能系统需要大量数据才能运行。但是公共部门通常没有合适的数据基础设施来支持高级机器学习。其大部分数据仍然存储在离线档案中。现存的为数不多的数字化数据来源往往被官僚机构所掩盖。通常情况下,数据分散在不同的政府部门,每个部门都需要特殊许可才能访问。最重要的是,公共部门通常缺乏具备适当技术能力的人才来获得机器智能的全部好处。
此外,部署机器学习系统的许多困难之一是,AI 极易受到对抗性攻击。这意味着恶意的 AI 可以针对另一个 AI,迫使它做出错误的预测或以某种方式行事。许多研究人员警告不要在没有适当的安全标准和防御机制的情况下推出人工智能。然而,令人震惊的是,在政策制定者的政治言论中,人工智能安全仍然是一个经常被忽视的话题。
由于这些原因,媒体对艾的炒作吸引了许多批评。伯克利大学计算机科学教授斯图尔特·拉塞尔(Stuart Russell)长期以来一直倡导对神经网络采取更现实的方法,专注于人工智能的简单日常应用,而不是假设的超级智能人工智能接管机器人。
同样,麻省理工学院的机器人学教授罗德尼·布鲁克斯写道“几乎所有机器人和人工智能的创新都需要比领域内外的人想象的更长、更长的时间才能真正广泛部署”。真正的进步是痛苦而缓慢的。而在 AI 的情况下,需要大量的数据。
制造机器,而不是魔法
如果我们要获得人工智能的好处,并最大限度地减少其潜在危害,我们必须开始思考如何将机器学习有意义地应用于政府、企业和社会的特定领域。这意味着我们需要就人工智能伦理和许多人仍然对机器学习的不信任进行长期的多方利益相关者讨论。
最重要的是,我们需要意识到人工智能的局限性,以及人类仍然需要领先的领域。我们不应该描绘人工智能机器人所提供的超能力的不切实际的画面,而是应该后退一步,将人工智能的实际技术能力与魔法分开。机器学习既不是神奇的仙尘,也不是解决一切的方法。
就连脸书最近也承认,人工智能并不总是答案。很长一段时间,社交网络相信错误信息和仇恨言论的传播等问题可以通过算法识别和阻止。但在最近来自立法者的压力下,该公司迅速承诺用一支超过 10,000 人的审查队伍取代其算法。
医学界也认识到人工智能不能作为解决所有问题的灵丹妙药。IBM 肿瘤学沃森项目是人工智能的一部分,旨在帮助医生治疗癌症。即使它被开发来提供最好的算法建议,人类专家发现很难信任机器。结果,尽管在技术上进行了大量投资,人工智能程序在大多数医院被放弃。
类似的问题也出现在法律领域,当算法被用于美国法院对罪犯进行判决时。一种不透明的算法被用来计算风险评估分数,并确定某人再次犯罪的可能性。人工智能旨在帮助法官在法庭上做出更多以数据为中心的决定。然而,该系统被发现放大了结构性的种族歧视,导致法律专业人士和公众的强烈反对。
人工智能仪器的法律
这些例子表明没有万能的人工智能解决方案。仅仅为了人工智能而使用人工智能可能并不总是高效或有用的。并不是每个问题都可以通过应用机器智能得到最好的解决。
在 1964 年出版的一篇近乎预言性的论文中,美国哲学家亚伯拉罕·卡普兰(Abraham Kaplan)将这种趋势描述为“工具法则”。
它被表述为:“给一个小男孩一把锤子,他会发现他遇到的一切都需要敲打”。只是这一次,卡普兰小男孩的心态被有影响力的世界领袖所分享,而 AI 锤子不仅非常强大,而且非常昂贵。
因此,这对于所有旨在加大对昂贵的人工智能投资和国家人工智能项目的投资的人来说都是至关重要的一课:所有解决方案都有成本,并非所有可以自动化的东西都应该有成本。
我们不能坐以待毙,直到我们在遥远的未来达到一般水平的感知人工智能。也不能靠狭隘的 AI 来为我们解决今天所有的问题。我们今天需要自己解决这些问题,同时积极塑造新的人工智能系统来帮助我们完成这项艰巨的任务。
关于作者: 维亚切斯拉夫·波隆斯基 博士是牛津大学的研究员,研究复杂的社会网络和集体行为。他拥有计算社会科学博士学位,之前曾就读于哈佛大学、牛津大学和伦敦政治经济学院。他积极参与了 世界经济论坛 专家网 和 WEF 全球塑造者 社区,在那里他担任了 牛津中心 的馆长。2018 年,《福布斯》杂志在欧洲的 《福布斯》30 岁以下 30 人 榜单上专题报道了他的工作和研究。他写的是社会学、网络科学和技术的交集。
本文的早期版本出现在大众影响中心大思考世界经济论坛议程 。****
非常感谢 2017 年关于机器学习的 迪奇利会议 给了我一个独特的机会来完善我的想法,并获得该领域领先的人工智能研究人员、政策制定者和企业家的早期反馈。
RNN 训练技巧和诀窍:
以下是安德烈·卡帕西关于训练 RNN 管道的一些好建议。链接到最初来自的。
监控验证损失与培训损失
如果你对机器学习或神经网络有些陌生,获得好的模型可能需要一点专业知识。要跟踪的最重要的量是训练损失(在训练期间打印)和验证损失(对验证数据运行 RNN 时偶尔打印一次,默认情况下每 1000 次迭代打印一次)之间的差异。特别是:
- 如果你的训练损失远低于验证损失,那么这意味着网络可能过度拟合。解决这个问题的方法是缩小你的网络规模,或者增加辍学率。例如,您可以尝试 0.5 的辍学,等等。
- 如果你的训练/验证损失大致相等,那么你的模型不符合。增加模型的大小(层数或每层神经元的原始数量)
参数的大概数量
控制模型的两个最重要的参数是lstm_size
和num_layers
。我建议你总是使用 2/3 的num_layers
。lstm_size
可以根据您拥有的数据量进行调整。这里要跟踪的两个重要量是:
- 模型中的参数数量。这是你开始训练时打印出来的。
- 数据集的大小。1MB 的文件大约有一百万个字符。
这两个应该差不多一个数量级。有点难以分辨。以下是一些例子:
- 我有一个 100MB 的数据集,我使用默认的参数设置(目前打印 150K 的参数)。我的数据量要大得多(100 密耳> > 0.15 密耳),所以我预计会严重不足。我在想,我有足够的钱让
lstm_size
变得更大。 - 我有一个 10MB 的数据集,正在运行一个 1000 万参数的模型。我有点紧张,我在小心地监控我的确认损失。如果它比我的训练损失大,那么我可能会尝试增加一点点辍学,看看这是否有助于验证损失。
最佳模式战略
获得非常好的模型的获胜策略(如果你有计算时间)是总是错误地将网络变大(大到你愿意等待它计算),然后尝试不同的压差值(在 0,1 之间)。无论哪种模型具有最好的验证性能(写在检查点文件名中的损失,低是好的),都是您最终应该使用的模型。
在深度学习中,使用许多不同的超参数设置运行许多不同的模型是非常常见的,最终采用任何给出最佳验证性能的检查点。
顺便说一下,你的训练和验证分割的大小也是参数。请确保您的验证集中有足够的数据,否则验证性能将会很嘈杂,并且不能提供很多信息。
使用深度学习的道路场景理解
The final outcome of applying semantic segmentation on road scene
场景理解
语义分割代表了深度学习中的一种技术,其中我们通过将图像中的每个像素分配给预定义的类别集来为其分配意义。从上面的 GIF 中,我们可以看到我们在语义分割过程中有两个类( road 和 not road )被相应地着色。
使用语义分割的方法,我们能够将场景分解成我们特别感兴趣的片段。这对于自动驾驶汽车尤其重要,因为它将能够检测场景的哪个部分是可驾驶区域。
这是如何工作的?
语义分割的一种方法是使用全卷积网络(FCN)。加州大学伯克利分校有一篇很棒的论文,详细解释了方法论和架构。我们的实现也将基于本文。
典型的卷积网络由几个卷积层和完全连接的层组成。这种类型的架构适用于分类问题(例如:这是一条路吗?)。但是为了在一幅图像上定位道路(*道路在哪里?*问题)我们需要网络能够保存空间信息。这就是 FCN 发挥作用并提供最先进的语义分割结果的地方。
如何建设 FCN?
建造 FCN 有三种主要技术:
- 用 1x1 卷积层替换全连接层。
- 通过使用转置卷积层引入上采样。
- 添加跳过连接。
下面我们来详细看看如何做到这一点。
我们的 FCN 架构有两部分:编码器和解码器。
FCN architecture
对于编码器,我们将使用在 ImageNet 上预先训练的 VGG16 模型。VGG16 模型中完全连接的层将替换为卷积 (1) 。编码器从图像中提取将被解码器使用的特征。
下一步是构建解码器,这是通过使用转置卷积层 (2) 对最后一个编码器层进行上采样来完成的。转置卷积本质上是一种逆卷积。
FCN architecture based on pre-trained model, replaced fully connected layers and transposed convolutions
最后,我们将在特定层之间添加跳过层 (3) ,使网络能够使用多种分辨率。这反过来提供了更好的分割结果。跳过连接可以减少信息丢失,使网络能够“看到全局”,因为典型的卷积网络只关注图像的一部分。
Skip connections in FCN
我们在添加跳过连接时应该小心,因为它们会极大地影响模型的大小。
最后结局
用于道路场景理解的 FCN 的实施是作为 Udacity 自动驾驶纳米学位项目的一部分完成的。我已经使用 Python 和 TensorFlow 建立和训练了模型。该模型已经在 NVIDIA 1080Ti 显卡上进行了 30 次训练,耗时不到半小时。
这是推理的输出:
结论
相关的源代码可以在我的 GitHub 个人资料中找到:
通过在 GitHub 上创建一个帐户,为 CarND-Semantic-Segmentation 开发做出贡献。
github.com](https://github.com/bdjukic/CarND-Semantic-Segmentation)
革命之路:社会主义 vs 共产主义
通过 PushShift API 和自然语言处理进行子编辑分类
我一直认为,在一个社会经济不平等继续困扰社会并阻碍人类真正进步的时代,社会主义和共产主义背后的意识形态非常引人注目。虽然没有一个政治/经济体系是完美的,但我们必须承认资本主义的缺点及其在助长这种不平等中的作用。
在马克思主义理论中,社会主义是继资本主义之后社会向共产主义过渡的阶段。它们都建立在集体合作的理念上,但不同之处在于共产主义者认为合作应该由一个政党组成的政府来管理。无论你同意其中一个,另一个,两个,还是都不同意,我们都可以从这些理论中学到很多关于创造一个更加公正和平等的社会的东西。
由于两者之间的微妙差异,社会主义和共产主义将成为探索自然语言处理能力的伟大范例。为了做到这一点,我进行了一项实验,利用了子编辑r/共产主义和r/社会主义的文本。使用以下步骤,我可以将这些帖子转换成语料库,用于训练随机森林或其他类型的分类算法:
- 查询 PushShift API 以检索提交
- 清理和预处理文本
- 分析矢量化/标记化的文本
- 网格搜索跨两种分类算法优化超参数
步骤 1:查询 PushShift API
我没有直接从 Reddit(限制最多 1000 个查询)获取提交内容,而是利用了 PushShift API,该 API 创建了大多数子编辑的历史档案。通过这个 API,我能够获取提交的标题、文本、作者和日期。
步骤 2:清理和预处理文本
在从两个子编辑中读入合并的文件后,我做了一些清理和预处理:即删除特殊字符,转换成小写,并对结果单词进行词汇化。
此外,我删除了已删除/已删除帖子或版主自动帖子的所有标签(这些标签特定于子编辑,可能会影响训练集):
步骤 3:分析矢量化/标记化的文本
为了进一步完善我的文本分析,我需要对词汇化的文本字段进行标记,并确定每个集合中哪些单词最罕见和最频繁。我首先想要移除(通过停用词)组合数据帧中最频繁出现的词,这些词在分类算法中是低预测特征。
步骤 4:网格搜索优化超参数
最后,我想比较两种不同分类算法的准确性:逻辑回归和随机森林。这两个都是强大的工具,但我发现逻辑回归是更可靠的预测器,尤其是考虑到 75K+标记化的特征。
虽然随机森林为训练数据生成了可比较的准确性分数,但我想通过比较 ROC / AUC 分数来比较模型,以了解在平均阈值范围内哪个更可靠:
征服计算机视觉的路线图
计算机视觉如何入门
写博客给 ace 机器学习提供指导已经成为一种传统。我很难找到任何这样的计算机视觉路线图和任务清单。作为一名视觉爱好者和顾问,我发现很多人询问掌握计算机视觉的具体路线图(在技能、课程等方面)。下面的博客试图达到这个目的。
应该注意的是,这将是一个长期的、以努力为导向的路线图。我个人不鼓励人们在学习一个硬核领域的时候走捷径。我相信,按照上面提到的路线图,你会在正确理解事物的基础上,在正确的轨道上完成大量严谨的愿景工作。够兴奋了吧?没关系!
什么是计算机视觉?
计算机视觉是人工智能的一个子领域,旨在使机器足够智能以理解图像。由于机器学习(和深度学习)是当今世界上最活跃的人工智能子集之一,在机器学习框架中处理计算机视觉将是合适和明智的。为了理解我将要提出的路线图的全部本质,考虑一个通用的机器学习过程是很重要的。
注意:下面的部分有点技术性。只想开始使用路线图的人应该跳过这一步,阅读食谱部分
机器学习是如何工作的?
每个机器学习系统都可以分解为以下两个子系统:
- 从原始数据(图像、音频、文本等)中提取特征
- 在特征空间上拟合学习算法
学习算法本质上需要 n 维特征空间来绘制决策边界(在分类范例中)或拟合超平面(就线性回归而言)。为了将原始数据转换到特征空间,我们通常需要两件重要的事情:
a.领域/业务知识
b.数据处理知识
领域知识告诉我们在我们的商业决策中研究数据的重要因素(考虑一个医生告诉你在 MRI 中寻找一个圆来检测肿瘤)。然后,数据处理知识将这些因素(来自领域知识)编码到来自数据处理知识的特征空间(考虑使用图像处理从 MRI 检测圆)。
数据处理对于从原始数据中提取重要特征至关重要。如果原始数据是图像的形式,图像处理就是我们需要的数据处理知识。如果数据是文本的,我们需要有语言学和文本挖掘知识来提取特征。每种类型的数据都有相应的处理知识。
深度学习有多不一样?
深度学习是机器学习的一个子集,有其技术根源。在不深入研究深度学习背后的技术细节的情况下,应该理解的是,深度学习使我们能够摆脱特征提取步骤。我们只是有一个学习算法来做所有的事情。这些深度学习算法可以直接在原始数据空间上工作。现在所有的人工智能炒作都是因为深度学习。
配方是什么?
由于我们有两种不同的学习范式,我们可以以两种不同的形式学习和应用计算机视觉。由传统机器学习算法支持的计算机视觉被称为经典计算机视觉。如果计算机视觉是基于深度学习的,则称为现代计算机视觉。
经典计算机视觉路线图
与任何机器学习系统一样,经典计算机视觉也由两个主要子系统组成:
- 图像处理:将数据编码到合理的特征空间(与特征提取相同)
- 学习算法:适应该空间中的任何相关模型
所以伙计们,掌握计算机视觉与理解上述两件事有着重要的关系。我列出了一些图像处理和计算机视觉的课程来开始学习:
- 关于计算机视觉介绍的 Udacity 课程
- YouTube 上的穆巴拉克·沙阿博士课程
- 一门纯机器学习的课程对我们的第二步也很重要。你可以选修任何现有的课程。比如吴恩达在 T4 Coursera 上的课程或者南多在 YouTube 上的课程
- 还需要掌握 OpenCV 等一些开源工具,以便快速实验和学习。你可以看看一些很酷的 PyImageSearch 和 LearnOpenCV 博客
现代计算机视觉路线图
现代计算机视觉系统基本上建立在深度学习的基础上。它给了我们灵活性,我们可以在没有经典图像处理知识的情况下完成许多视觉任务。要采用这种方法,请尝试以下课程:
我强烈建议读者在深入研究现代计算机视觉之前,至少对经典计算机视觉有所了解。这对以后很有帮助。
结论
列出的大纲将使你们能够开始计算机视觉的不断学习之旅。肯定是很费时间的。这肯定需要很多努力,但这是最基本的要求。我希望每个人都意识到为什么她/他要应用某些算法。该路线图还将帮助您设计和构建针对新问题的定制解决方案。
我花了半个博客来描述一个通用的机器学习过程。你可以把相同的路线图推广到人工智能的其他子领域,包括自然语言处理、语音识别等。
机器人也错了——最坏情况下的混乱映射
这里有龙
Photo by Seth Doyle on Unsplash
上一次计算器不按你的意愿工作是什么时候?一个人最后一次这样做是什么时候?从确定性的角度来看,像机器学习这样的算法介于这两者之间。
今天,我们正在制造比我们所能理解的更复杂的机器,我们需要用不同于以往技术的方式来处理它们。它不再是指定我们想要做什么,然后调试它。
在 Philosophie 我们一直在构建新的工具和练习,如机器移情映射,为人工智能和机器学习项目带来人类目的。最新的是我们称之为混淆映射,它帮助你更好地为所有可能的非确定性系统失败做准备。
混乱矩阵速成班
正如我们从设计思维中窃取了移情映射一样,我们也从数据科学中窃取了混淆矩阵用于混淆映射。混淆矩阵是分类算法(包括机器学习)的性能可视化。当深入研究系统如何运行时,您需要了解的不仅仅是错误率和准确率。你需要知道它是如何失败的。
这里有一个例子:
It is always about cats, isn’t it?
一般来说,横轴是实际发生的事情,纵轴是在理想世界中预期会发生的事情。有四个象限需要考虑:
- True positive —系统认为它应该是真的,并且它是真的
- True negative —系统认为它应该是假的,但它确实是假的
- 假阳性(又名“假警报”或倾向于这些统计的 I 型错误)—系统认为它应该是真的,但它是假的
- 假阴性(又名“遗漏”或第二类错误)—系统认为它应该是假的,而它是真的
混淆矩阵最传统的用法是用于分类问题。例如,如果你想把一张图片归类为一只狗或一只猫,你会在混淆矩阵中考虑两个不同的类别。认为一张猫的照片是一只狗将会是一个错误的结果。在这种情况下,有 18 种情况下狗被错误地归类为猫:
Example of confusion matrix plot for a dogs and cats classifier from the fast.ai course.
对于每个象限,我们考虑正确(或不正确)分类发生的次数。当考虑特定结果与其频率相比的影响程度时,这可能非常有帮助。
通常当它用图表示时,你会看到一条从左上到右下的对角线,在那里你有每一类或预测的真阳性和真阴性。
有些情况下,您可以有许多分类。在 ImageNet 的情况下,有许多许多可能的分类。关于狗,仅狗的种类就有 120 种。
They can be huge!
困惑矩阵是关于结果的…
建立解决人们问题的服务的第一步是关注结果而不是解决方案。混淆矩阵通过计算分类器做它应该做的事情的次数来做到这一点。
你需要知道当机器做它应该做的事情时,以及当它正确地不做任何事情时,期望的结果是什么。
当创建混淆矩阵时,他们对原始分类最感兴趣。我们需要更进一步,思考我们的机器按照我们期望的方式工作会有什么样的结果或可能的影响。
让我们以自动驾驶汽车的前方物体检测系统为例。它需要识别车辆前方何时有人或物,以便采取正确的行动,例如紧急刹车或急转弯以避免碰撞。当没有检测到任何东西时,它不应该干扰车辆的其他计划和执行。
对于我们为现场服务运营 (FSO)所做的一个项目,有一个界面会根据预测算法推荐是否将现场技术人员分配到某项工作。我们要么希望系统指派某人以便他们可以去工作,要么在指派之前要求某人获得更多信息。
A field service operations job detail for a dispatcher with automatically recommended technicians, parts, schedule, etc.
要采取的干预措施是这个例子中最重要的部分。根据所识别的事物的类型,它可能想要采取不同的动作。
…以及应用程序将如何出错
当我们构建这些类型的智能算法时,它们会出错。原因是我们不会尝试每一种可能的情况组合,只是那些我们认为会发生的情况。如果我们不这样做,将会花费很长时间来建立和训练这些类型的系统。
Watch out for that bicyclist!
对于我们一直在谈论的自主车辆障碍物检测系统,当它认为汽车前方有障碍物而实际上没有障碍物时,就会产生误报。错误的否定是认为车前有东西,而实际上有。这两种情况之间有明显的区别,因为一种是导致不恰当地猛踩刹车(假阳性),另一种是像人一样撞到障碍物(假阴性)。
假阴性并不总是比假阳性更糟糕。以诊断癌症的算法为例:假阳性可能引发一系列不必要的手术干预,从而导致进一步的问题。从假阴性和假阳性的角度来理解尽可能多的影响是很重要的。
对于 FSO 理工学院的推荐,误报是在工作准备好分配之前分配现场技术人员。如果现场技术人员不合格、没有合适的零件或者只是不知道该做什么,这可能需要返回(对于预测算法来说,这是一种“感觉糟糕”的情况)。在这种情况下,错误的否定是让作业在队列中等待,并在分配之前要求更多的澄清。这可能导致现场技术的利用率下降,并减少计费时间量(对于算法来说,这两种情况都是“糟糕的”)。
作为灵感的死亡前
混淆矩阵显示了特定的分类算法是如何特别失败的。预死亡是一种帮助我们理解我们的项目和团队将如何失败的技术。他们在复杂的团队结构中特别有用。
预死亡的好处在于,它允许每个人戴上他们的黑帽子,在最坏的情况下发挥真正的创造力。群众的智慧在决定什么是项目中最有可能自己造成的问题方面非常有用。
作为一种方法的前概念和作为一种概念的混淆矩阵是我们在 Philosophie 创建的混淆映射练习的灵感来源。
混淆映射方法
当你专注于一个问题和一个可能的解决方案时,这个练习是最合适的。在我们举办的一个研讨会上,在做这个练习之前,我们做了挑战映射(用一个很好的‘我们如何能……’)、疯狂的 8 个想法和机器的移情映射。
在这个练习中最关键的是不要担心病例的发生频率。你专注于收集尽可能多的问题。
你应该和一群跨学科的人(例如,数据科学家、工程师、设计师、产品经理、高管等)一起计划大约一个小时。)来完成这些类型:
- 用“积极”表示你希望实现的功能,用“消极”表示没有实现的功能。
- 对于四个象限中的每一个,privately ideate on post 都指出了如果发生这种情况会对人们或其他系统产生什么影响。花 3 分钟时间构思每个象限,并在每个象限的生成步骤后立即分享…
- 你们一起把每个单独构思的项目放在黑板上,如果不明白就澄清,并删除任何共同的项目。在这一点上尽量避免过多的讨论。为此,每个象限大约需要 2 分钟。
- 现在点选真实正象限和真实负象限中最重要的项目。按照票数从多到少的顺序把他们排在一边。
- 接下来点票假阳性和假阴性象限中最差的项目。Stack 将他们按照从差到差的顺序排在一边。
Photo from our NYC Media Lab Design Thinking for AI workshop.
在这个过程之后,你应该有一个堆叠排列的结果列表,当事情成功或失败时,这些结果是最重要的。锻炼的最重要的方面是团队内部对可能出错的地方的一致和共同理解。
少一些困惑
在 Philosophie,我们在从问题到计划的过程中使用这些类型的练习,我想你会发现它们是有益的。
既然你们在团队中已经达成共识,那么有几件事情需要考虑:
- 采用具有更确定性模块的系统方法来调整或指导输出,以避免这些情况。
- 将模型分解成多个具有不同的单一误差指标的模型,作为一个整体,以降低这些误差发生的可能性。
- 开始着眼于评估不同结果的频率。
理解这些系统是如何出错的,是与使用它们的人建立信任的第一步。不使用不受信任的解决方案。
会推理的机器人
基于模型强化学习的无机知识传统
这篇文章探索了无机知识传统的概念,它能够使用基于模型的强化学习进行连续改进
许多行为经济学家目前认为,人类进行战略决策时主要使用两种方法。一种是快速、直觉和无意识的——被称为系统 1 思维。另一种是缓慢的、有逻辑的、循序渐进的,需要努力思考,被称为系统 2 思维。
越来越多的证据现在支持 DeepMind 等人推广的无模型强化学习的说法。所有这些在功能上都与来自卡尼曼和特沃斯基的双重过程理论的系统 1 思维相对应。在我看来,这一发展没有得到应有的重视。考虑到系统 1 思维可能是迄今为止几乎所有高级动物认知形式的基础。各种各样的 RL 算法现在可以在功能上复制系统 1 的思维,这很可能会导致机器人控制机制的复兴,至少如此。如果有人能像训练狗一样训练一个家庭机器人,那他能训练它做什么呢?可能是一些非常漂亮的东西,各种各样奇怪的东西,嘿,老实说,一些彻头彻尾的邪恶的东西!毕竟是人类在进行训练,而不是天使。
然而,这种前景忽略了强化学习领域一个更重要的发展,即可以在功能上复制双重过程理论中的系统 2 思维的算法——人类特别擅长的基于缓慢深思熟虑的模型的推理。不希望把它说得太细,系统 2 算法的全面开花可能会使一些关于奇点临近的更大胆的说法显得不太牵强。也就是说,本文的目的不是要说服奇点的怀疑论者,而是指出基于模型的强化学习的一些最新发展,并探索它们的含义。
关于直觉系统 1 的决策,当我们经历时,那些经历会改变我们未来的决策。直到最近,这种随时间改变和适应直觉决定的能力一直是生物智能的专属领域。这也是我们认为的“一般智力”的基础。这是一个激烈争论的话题,一些人认为没有“一般智力”这样的东西,只有许多种专门的智力。直觉上,我们中的许多人可能会有不同的感觉,认识到一个共同的线索,这就是我们学习如何骑自行车和征服 Atari 视频游戏的能力。一个可能的共同思路是无模型强化学习,大量的证据支持这一观点。
赋予计算机无模型强化学习带来的一个有问题的结果是,代理人没有办法知道它的策略为什么有效,也没有办法就此进行交流或推理。和进化一样,无模型强化学习的手也是瞎的。它可以优化,而不知道它做了什么导致了理想的结果。这是一个无意识的过程,因为主体不能抽象地推理环境中的特定元素如何与它的动作相结合来实现期望的结果。就像一只狗可以成功地操纵它的主人,却不知道为什么当它坐在枕头上做出愚蠢的表情时,食物会像雨点般落在它身上。狗只是知道过去什么工作得好,而不是它为什么工作的机制。因此,生成这些解的路径经常隐藏在代理为达到其目标状态而采用的随机变化中。
这使得复制或交流通过无模型强化学习产生的技能变得困难。在固定的环境中,在固定的回报下,人们会期望多个无模型 RL 算法在给定足够训练的情况下最终收敛到单个目标状态。这种收敛性的证明已经在 SARSA 和 Q Learning 中得到验证。然而,在一个丰富的真实世界环境中,有一个连续的动作空间,可能很难或不可能复制最终导致代理达到所需目标状态的动作的精确组合,就像试图将一个雪球滚下山,并让它遵循前一个雪球滚入的完全相同的路径-但滑雪者和雪地摩托车一直穿过这些相同的轨道。
另一方面,基于模型的强化学习的优势在于,当代理学习事物时,它创建了事物在环境中交互方式的抽象。然后,可以将这些信息传递给其他代理,或者存储起来供以后在其他环境中使用,从而加快相关技能的获取。因此,基于模型的强化学习的发展很可能构成人工智能领域的下一波进步。DeepMind 已经朝着这个目标取得了一些令人印象深刻的进展,推出了用于“关系深度强化学习”的算法。这些将关系网络与强化学习结合起来,允许代理推测环境中的对象如何与它的动作交互以产生期望的结果。
在许多方面,这种向基于模型的强化学习的转变概括了人类获得性文化策略的进化。以现代农业为例——正如贾雷德·戴蒙德在他的书《第三只黑猩猩》中指出的,这很可能始于一个完全无意识的过程,发生在人类采集野生植物的过程中,在这个过程中,不知不觉地将种子放在它们的家养围栏附近。其中一些种子后来发芽了,形成了第一个原始花园。因此,当人类开始除草、收割和重新种植那些曾经是野生的植物时,一个无意识模式的策略可能会逐渐产生一个基于有意识模式的策略。通过关系型深度强化学习,可以认为计算机正在经历类似的“大跃进”,从无模型的强化学习策略过渡到使用模型对环境进行推理和推测的策略。
其结果是,人类文化,我们物种的集体知识,可以转移和改进,可能很快就会在计算机科学和机器人技术中产生必然结果。由深度 RL 代理开发的关系网络可以逐渐改进,然后传播到其他代理。从理论上讲,这允许多个主体以类似于人类科学知识随着时间的推移而增长的方式,慢慢地提高他们对给定环境的集体理解,从而产生了我们目前生活的文明。
使用先进的计算机视觉技术的鲁棒车道发现:中期项目更新
车道发现对于开发自动驾驶机器人或自动驾驶汽车的算法至关重要。车道寻找算法必须对变化的光线条件、天气条件、道路上的其他汽车/车辆、道路的曲率和道路本身的类型具有鲁棒性。在这篇文章中,我们提出了一种基于先进的计算机视觉技术的算法,从仪表板上安装的摄像头视频中识别左右车道。我们在以下步骤中实现了车道寻找算法,
- 不失真的相机图像,并应用透视变换获得街道的鸟瞰图。
- 转换到 HSV 色彩空间并应用颜色遮罩来识别黄线
- 应用 Sobel 滤波器以获得具有潜在线条/边缘的图像
- 组合来自 Sobel 过滤器和 HSV 颜色遮罩的二进制遮罩
- 应用移动平均过滤器来去除任何可能是由于图像中的其他伪像造成的标记或特征。
- 应用多项式回归计算左右车道
- 应用帧到帧平滑以丢弃图像之间的噪点,并在图像上画回线条。
- 计算曲率和车道偏离,并将其写在图像上。
接下来我们将详细讨论每个步骤。上述过程的最终结果如下所示,
Advanced lane finding using computer vision
下面的视频展示了制作上面的视频所涉及的所有步骤的诊断视图。
第一步:不失真的相机图像和应用透视变换。
当相机镜头捕捉图像时,它们捕捉的不是真实的图像,而是原始图像的变形。图像中心的点具有较低的失真,而远离中心的点具有较高的失真。这种失真可能是由于与相机中心的距离不同、不同镜头位置的光线弯曲不同或透视失真造成的。一篇关于不同类型失真的好文章可以在这里找到。
因此,图像处理的第一步是对原始图像进行去失真处理。对用于不失真摄像机图像的算法的详细描述可以在这里找到。对于我们的算法,我们首先使用提供的棋盘图像计算相机失真矩阵和失真参数。然后,我们加载相机矩阵,并使用它来不失真的图像。下图显示了未失真的结果。最后一个面板显示了原始图像和未失真图像之间的差异。
Removing image distortion
接下来,我们应用透视变换来获得道路的鸟瞰图。我们首先在原始相机图像中识别 4 个点,然后拉伸图像,使 4 个点之间的区域形成一个矩形截面。
Perspective transform to get bird-eye view
一旦获得了俯视图,我们就开始确定车道。
步骤 2:转换到 HSV 色彩空间并应用颜色遮罩
下一步是将鸟瞰图 RGB 图像转换为 HSV 颜色方案。HSV 指的是色调、饱和度、数值。HSV 方案是作为一种更直观的方式来表示颜色而开发的。色调(或 H)代表特定的颜色,饱和度(或 S)代表颜色的数量,数值(或 V)代表相对于类似照明的白色的亮度。因此,通过将图像转换为 HSV 尺度,可以获得良好的颜色分辨率。我们使用 HSV 颜色空间来识别黄色和白色。我们应用黄色面具作为
yellow_hsv_low = np.array([ 0, 80, 200])
yellow_hsv_high = np.array([ 40, 255, 255])
res = apply_color_mask(image_HSV,warped,yellow_hsv_low,yellow_hsv_high)
其中,apply_color_mask 返回指定强度介于低值和高值之间的像素。应用黄色蒙版的结果是,
Applying yellow-mask
因为黄色掩模对于不同的照明条件非常鲁棒,因为黄色的不同照明图像是通过改变亮度通道而产生的,同时保持色调或颜色通道固定。下图显示了不同照明条件下应用黄色遮罩的效果。
Yellow mask on shadowed and bright patch of road
Yellow mask on bright patch of road
类似地,使用阈值应用白色遮罩,如下所示
white_hsv_low = np.array([ 20, 0, 200])
white_hsv_high = np.array([ 255, 80, 255])
为了识别白线,
Applying white mask,
一旦应用黄色和白色蒙版,通过如下组合两个通道蒙版获得来自彩色蒙版的通道。
Combined lane from color masks
第三步:应用索贝尔过滤器得到潜在的线条/边缘
下一步是应用索贝尔过滤器,以获得潜在的线/边缘。如果道路上没有其他黄色或白色标记,上面的颜色遮罩是选择车道标记的好方法。这并不总是可能的,因为道路上可能有白色或黄色的文字。因此,为了避免混淆,我们还使用 Sobel 滤波器进行边缘检测。Sobel 滤波器用于图像处理,通过执行原始图像和 Sobel 算子(或滤波器)的 2-D 卷积来获得图像的边缘。这个操作可以表示为,
Sobel filter, circle denotes convolution operation
沿着 x 和 y 方向 Sobel 滤波器给出了沿着 x 和 y 方向的图像强度的梯度或变化。然后,这些强度可以通过大小和方向进行阈值处理,以获得仅在边缘处等于 1 的二进制图像。我们将应用 Sobel 滤波器,并对 HLS 图像的 S 和 L 通道的 x 和 y 方向的梯度幅度进行阈值处理。我们选择 HLS 通道是因为在以前的实验中,发现 HLS 颜色空间对于检测边缘是最鲁棒的。
Sobel filter applied on L and S channel of image
第四步:组合索贝尔滤镜和彩色蒙版
接下来,我们将来自 Sobel 过滤器的二进制掩码和颜色掩码相结合,以获得车道的更强指示符。车道应该是深色背景上的白色或黄色标记,因此应该显示较大的坡度。白色和黄色通道的组合 Sobel 图像和颜色遮罩如下所示。
Lane masks from Sobel filters and color masks
来自颜色掩蔽和 Sobel 滤波器的最终组合的车道和边缘掩蔽如下所示。很明显,原始图像中预期有车道的区域用粗粗线突出显示。我们能够获得这些粗线是因为我们结合了边缘检测和颜色掩膜。
Final combined lane mask
第五步:应用窗口来删除任何可能是由于图像中的其他伪像而产生的标记或特征。
在最终的合成蒙版中,我们看到了许多可能是由其他伪像造成的边缘特征,其中一个突出的是由汽车引擎盖造成的水平线。因此,我们计算沿 x 方向的所有像素的平均值,并使用移动平均滤波器来获得沿 x 方向的平滑强度分布。然后,我们应用阈值 0.05 来识别可能包含车道线的区域。这些区域边界用蓝线表示。
Plot of intensity along X direction
我们使用这些峰的左右边缘作为边界来选择左右车道标志点。通过去除左右车道标志的点,我们得到了表示车道的点,
Left and right lane markings
步骤 6:应用多项式回归计算左右车道
接下来,我们使用多项式回归获得二次拟合来近似车道线。我们使用 numpy 的简单多项式拟合函数来计算左右车道的二次拟合。一旦获得了左和右车道的二次拟合,我们将它们画回到图像上,并如下用青绿色标记左和右车道之间的区域。
Redrawing lane lines and lane back on the original image
第七步:逐帧平滑去除图像间的噪声,并在图像上画线。
接下来,我们通过一阶滤波器对帧进行平滑处理。我们还包括一个干扰抑制例程,该例程丢弃任何系数与前一帧中的系数偏差超过 5%的多项式拟合。
步骤 8:计算车道曲率和车道偏差
最后,我们计算了曲率半径和车道偏离,并实现了一个简单的车道偏离警告系统,如果车道偏离超过 30 厘米,该系统会将蓝绿色区域变为红色。
反思
这是一个非常有趣的项目。最有趣的部分是查看在以前的简单项目中开发的技术如何应用于更一般的场景。这个项目的工作远未结束。当前的算法不够健壮,不足以推广到挑战视频,但性能非常好。我们将在最终报告中详细介绍一个更强大的算法。
致谢:
我非常感谢 Udacity 选择我作为第一批,这让我能够与许多志同道合的人联系。一如既往,从与亨里克·特纳曼和陈志强的讨论中学到了很多。我也感谢获得 NVIDA 的 GPU 拨款。虽然这是工作用的,但我也用它来办公。
特别感谢一位同学陈志强。John 发布了一个简单的解决方案来实现管道的诊断视图,但是当论坛从旧论坛迁移过来时,这个解决方案被删除了。尽管约翰在度假,他还是及时上传了新论坛上的代码片段,并把链接发给了我。
坚如磐石的预测——预测…岩石?
序幕——在战场上翻滚
许多年前,我在(超级)大石油公司的第一个任务期间,我负责陆上气田钻井的重大决策。每口井都钻得很快,平均需要 5-7 天。地质情况是众所周知的,一般来说,储层是经济的,钻井的作业风险相当低且易于管理。
尽管该油田的区域地质具有明显的同质性(地质学中没有什么是真正同质的),但作业地质学家(比如我自己)不得不做一些非常手工的工作。
当我们接近每口井的储油层部分时,我被要求根据钻井时获得的数据确认我们正在接近储油层。在行业中,这被称为随钻测井或 LWD 测井。
Sunset in Wyoming at the rig site
在确认我们到达了储油层部分后,我被要求根据我们绘制的储油层厚度图来确认油井的总深度(TD)。最后,在确认 TD 后,我被要求观察最终的测井记录,以决定为生产目的关闭油井。尽管我们尽了最大努力,但并不是每口井都是经济井,因此我必须决定储层中是否有足够的天然气(产层)来保证在井眼中放置生产质量的套管。
At the rigsite. I still cherish the helmet the mudloggers bought specifically for me.
这一切都非常有趣和酷,直到人们意识到两个主要问题:
- 钻井作业是全天候的,因此,你可以(也将会)全天候接到电话
- 这些井钻得很快。负责 2-3 条钻井管线意味着我必须定期处理这些电话,几乎没有停机时间
除了清晨的钻机呼叫之外,这需要许多个深夜。我一直在想,一定有更好的方法…
这显然是一个可以通过机器学习来解决的问题!
然而,这是在 2007-2008 年,现代机器学习刚刚起步,在石油和天然气等行业还不存在。
快进到去年秋天。2016 年,SEG(勘探地球物理学家协会)在 Github 上提出了一项挑战,要求使用机器学习来解释岩石类型/地层的样本测井记录。
渴望有趣的项目,我一头扎进去,看看我能做些什么…
摇滚是个大问题
“最近人们对大数据非常兴奋,并且迫切需要能够从中提取意义的数据科学家。与此同时,地球科学家多年来一直在利用大量数据进行科学研究,不需要吹嘘数据有多大。但是现在大而复杂的数据集随处可见,分析它们的工具和技术也随之激增。现在存在许多免费和开源的软件包,为地球科学家的工具箱提供了强大的补充,其中许多以前只能在专有(且昂贵)的软件平台上获得…
…在我们的例子中,特征将是来自九口气井的测井数据。这些井已经根据岩心描述进行了岩相分类。一旦我们训练了一个分类器,我们将使用它来分配尚未描述的井的相。"
好吧,说真的,对于那些不是地球科学家或者不精通这个主题的人来说,这毫无意义。然而,它可以被提炼为简单的…
我们能预测岩石相吗?
对于非地球科学家来说,什么是真正的岩石相?
Classic alluvial depositional environment. In this case, a braided stream. The sandstone will be deposited and recorded where the streams are today.
沉积岩相是根据其沉积环境对不同类型的沉积岩进行分类的基本方法。 这是一个冲积砂岩的简单例子,这种砂岩形成于溪流或河流中。岩石相让我们知道石油和天然气可能在哪里,也可能不在哪里。
尽我们所能从数据中提取信息
数据集来自堪萨斯大学,重点是 Hugoton 和 Panoma 气田。它有 7 个特征(来自测井的 5 个电缆测量和 2 个指示变量)以及每 6 英寸一个的相标签。
Sample Well log. The facies labels are on the far right of the log.
左边是一个示例测井记录。该数据通常在钻井作业期间或在钻井完成后通过钻柱上的工具或下降到井内的测井电缆工具来记录。除了通过钻孔向上循环的岩屑的岩石描述之外,这些结果通常是地质学家关于所讨论的井的唯一信息。
通常情况下,地球科学家会手动获取测井记录并进行对比。他们必须从一条测井曲线到另一条测井曲线,以获得岩石类型/岩相、其特征(孔隙度/渗透率/保持和流动流体的能力)及其含量(水、油、气等)的整体视图。).这在成熟的领域中会变得单调乏味,并且在新的领域中容易被误解。
本项目的目标是预测维持组的相标签(不在下表中,而是在上面测井记录的最右侧),作者可以在其上运行模型以评估模型的成功。
Example of dataset features. What the fields mean are of relatively little importance in this case. Assume it’s just standard data obtained from every well in a given field.
退出石器时代…
我取了上面的数据,做了一些简单的特征工程。
首先,我使用虚拟变量对地层名称进行编码(这些名称包含有价值的沉积环境信息)。
然后,我将数据分成训练集和测试集,从数据集中删除相信息。
既然我已经把数据整理好了,现在是选择模型的时候了。
这个多类分类模型对我来说是一个新的模型,因为它没有预测二元结果。我想探索的不仅仅是一个简单的随机森林,还想探索我能用这些数据做些什么。
因此,我选择评估两种不同的模型:
- OVO(一对一分类器)
- 随机森林
我让事情非常简单,因为这是一个下午的项目,但结果非常有趣…
摇滚明星的结果!
如上所述,这个问题将使用 F1 分数进行评估。
https://www.slideshare.net/DhianaDevaRocha/qcon-rio-machine-learning-for-everyone
相对于对数损失、AUC 和其他指标,我最初对这个指标并不熟悉,所以我做了一点研究。
F1 分数是精确度和召回率的调和平均值。
该模型将对相预测的准确性和相邻相预测的准确性进行评分。
我对我的两个模型都进行了评分,结果相当疯狂:
OVO 分类器—
OVO 分类器将问题分解成许多 1:1 的比较,并学习如何区分不同的输出。需要 K (K-1) / 2 个二元分类器来将多类问题分成二元类。然后,它对每次运行中的每次观察的投票进行评分,并根据这些投票对最终的类读数进行排序。
OVO 的 F1 分数低于 Github repo 上其他人的模型结果。
然而,看看我的随机森林模型测试集的结果…
随机森林—
在我的测试集上,我的分数比非正式比赛的最高分高出 0.1 分。玩了一下午还不错…
不过,差不多是的太的好…
我从来没有正式提交过我的模型 ,所以我一直无法实际验证我在官方 holdout set 中的 F1 分数。
滚过我的不安全感…
冒名顶替综合症——恐惧…
然而,摇滚可以拯救你的灵魂!
我知道你们每个人都在为此挣扎。
谈论它是有帮助的。写下来会有帮助。唱出来会有帮助!通过任何对你有意义的方式来表达自己会有帮助。
感谢文字,表达思想,思考和学习,我每天都在克服这些挑战。
每天谈论和做让你感到不舒服的事情。我拿了一个自己比较舒服的东西,地学,和一开始让我不舒服的东西混在一起,编程。
现在,通过每天做一些不舒服的事情,我对自己的数据科学和编码技能更有信心了。
喜欢你正在读的书吗?请在未来几周继续关注我正在撰写的关于营销分析以及如何使用数据作为工具讲述令人信服的以客户为中心的故事的文章。
错过了我的职业支点系列?我是如何从地球科学转向数据科学的?阅读此处跟随我的旅程…
更多阅读:http://library.seg.org/doi/10.1190/tle35100906.1#_i2
https://github.com/seg/2016-ml-contest
https://en.wikipedia.org/wiki/Impostor_syndrome
卷起轮圈:真的是六分之一吗?
蒂姆·霍顿名言的统计分析
蒂姆·霍顿即将赢得 2018 年的比赛。你每买一杯热饮,就有六分之一的几率中奖(奖品包括免费甜甜圈、咖啡和汽车)。随着比赛的进行,对他们标志性的“六分之一”声明的怀疑也在增加。
这是运气不佳、确认偏差或者可能蒂米斯实际上在欺骗我们的综合结果。由于没有人能够购买流通中的全部 3600 万杯,没有人能够绝对肯定地反驳或证实他们的说法。
然而,即使样本量相对较小,我们也可以用证据来说明他们的陈述有多准确。
数据收集
在对朋友和家人进行调查后,我收集了 108 种购买饮料的相关数据。其中,16 个是赢家。乍一看,这意味着 1/6.75 的可能性。还不错。但这是否足够接近六分之一来支持 Timmies 的签名声明呢?
先说一个假设。
**假设:**有 1/6 的中奖几率。
你可能不同意这个假设,但没关系——如果我们有证据,我们可以稍后反驳它。因为有足够多的杯子在流通,所以一个结果不会显著改变获奖的几率,我们可以使用伯努利分布来模拟这个假设。
Jacob Bernoulli, famous mathematician and also very stylish
拟合优度检验
我们可以使用卡方检验来评估我们的样本数据在多大程度上符合伯努利分布,在伯努利分布中,成功的几率(在这种情况下,是获奖)是 1/6。卡方检验要求我们计算一个统计量,这个统计量概括了我们观察到的和我们期望看到的之间的差异。对于我们的示例,我们预计会看到 18 个奖项和 90 个“请再玩一次”的奖项。
有了这些信息,我们可以使用以下公式计算卡方检验统计量:
卡方检验统计量方便地遵循卡方分布。伴随着这种有点复杂的现象,有一个很好的证明,但这是我们幸运拥有的东西。
当我们知道统计数据遵循的分布时,我们可以根据统计数据在分布中的拟合程度来测试我们的假设。
结果
幸运的是,R 有一个内置的卡方检验函数。如果没有它,我们将不得不用传统的方法来计算,并将结果与表格进行比较。
哪些输出:
Chi-squared test for given probabilities data: observed
X-squared = 0.26667, df = 1, p-value = 0.6056
这里感兴趣的参数是 p 值。更容易将 p 值解释为百分比(60.56%)。
p 值表示 1) 假设我们的假设为真,并且 2)我们根据我们的假设从分布中重复采样,那么我们观察到的 60.56%的样本将比我之前收集的 108 个样本更加“极端”。
通常,我们使用 5%的 p 值作为拒绝假设的准则。如果不到 5%的后续样本更“极端”,这表明我们的观察非常“极端”,因此我们的假设不太可能是真的。我们的样本显示情况并非如此。
底线:我们的 108 个样本没有证据否定蒂姆·霍顿的说法,即 1/6 的几率。
这是否意味着中奖几率确实是 1/6?
肯定不是!反驳一种说法比证实一种说法容易得多。
这引出了另一个问题——如果问题出在我们的样本上呢?大多数关于样品的问题都是“好吧。如果我们真的非常非常幸运,看到了我们所看到的,会怎么样?”。
这些问题归结为以下几个问题:
- 样本是否偏向某些群体?
- 108 的样本够大吗?
**针对第一点,**答案是肯定的,抽样是有偏差的。我调查的大多数人来自安大略省南部。他们中的大多数是喝咖啡的人。大多数人在上班前都会买咖啡。问题是——这些偏见重要吗?我认为,一旦杯子生产出来,奖品(或缺少奖品)不会改变是公平的。一个更合理的担忧是地理位置和杯子的大小。蒂姆·霍顿的分销网络是如何构建的?如果有的话,他们付出了什么样的努力来确保获胜的奖杯被平均分配?没有进一步的数据,我们对这些情况视而不见。
**样本量呢?**更好的问题— 多大的样本才算“足够大”?虽然我们有一个封闭形式的公式来计算控制误差的样本量,但我认为模拟可能更有见地。
模拟时间
让我们模拟五种不同的场景,其中我们假设实际获奖几率分别为:
- 四分之一
- 五分之一
- 六分之一
- 七分之一
- 八分之一
我们根据 100 人、1,000 人和 10,000 人的样本量将这些场景分成三组。我们对每一组模拟 100 次,并用概率为“1/6”的天真假设进行测试。
卡方检验能正确拒绝假设多少次?或者,在潜在的赔率实际上是 1/6 的情况下,卡方检验会错误地拒绝假设多少次?
R code for simulation
我们观察到以下结果。让 n 表示样本大小。
We reject the hypothesis when p-value < 0.05
嗯。不幸的是,看起来我微薄的 108 个样本太小,无法检测出假阳性(不是 1/6 的几率被认为是 1/6 的几率),特别是当实际几率更小的时候。它似乎在消除假阴性方面做得不错(1/6 的几率不会被认为是 1/6 的几率)。
但是,如果我们给自己更多的宽容来惩罚假阳性呢?毕竟,我的样本确实达到了 60.56%的 p 值,这比建议的 5%临界值高得多。
如果当 50%或更少的后续样本更极端时,我们拒绝 1/6 的赔率假设(即当 p 值< 0.5), we obtain the following.
We reject the hypothesis when p-value < 0.5
Not too bad for a first run! Ideally, I would have liked to work with a larger data set with more variables to explore (such as location, time of purchase, cup size …etc). That could provide more insight into Tim Horton’s distribution network and eliminate more biases from the sample. Alas, we must make do with what we have.
Maybe for next year, I will make more of an effort to collect data.
结论:虽然我们的样本表明没有证据拒绝 1/6 的赔率,但我们认识到 108 的样本量可能不够。然而,我们的样本结果和样本大小在评估真实几率时,在消除假阴性和假阳性方面做得还可以。
感谢您的阅读!
如果你喜欢这篇文章,可以看看我关于数据科学、数学和编程的其他文章。通过 Medium 关注我的最新动态。😃
作为一个业余爱好项目,我还在www.dscrashcourse.com建立了一套全面的免费数据科学课程和练习题。
如果你想支持我的写作,下次你报名参加 Coursera 课程时,可以考虑使用我的会员链接。完全公开—我从每一次注册中获得佣金,但不会对您产生额外费用。
再次感谢您的阅读!📕
深度学习图像分类器的罗夏测验
当没有东西可看的时候,他们看到了什么?
The inventor of the Rorschach Test, Hermann Rorschach, next to his modern day counterpart, Walter Kovacs.
随着对图像分类和标记的大量探索,我们倾向于使用各种库来快速评估和标记图片。但是除了内存使用和重新训练图层的便利性,当呈现不清楚、有颗粒的图片时,它们会有什么表现呢?
为了在实践中更好地感受每个 ConvNet 的细微差别和趋势,我对罗夏测试中的所有卡片连续运行了最流行的那些。
目标很简单:设定我的期望,理清我对每一个期望的理解,这样我就可以使用正确的工具来推进工作。
罗夏测验
由赫曼·罗夏克发明(或者更准确地说,修改)的罗夏测验是最著名的墨迹测验。墨迹测试是与你的治疗师的一个简单的对话开始,那就是“你看到了什么?”在被展示一张纸上挤压的故意抽象的(通常是对称的)墨滴之后。罗夏更进一步,创造了一套标准。这套标准现在可以用于病人和治疗师之间。
All 10 cards from the original Rorschach Test. Note the use of colors, as opposed to some of the inkblot tests used before Mr. Rorschach’s standardized version.
这个测试的目的是唤起对抽象艺术的潜意识反应,用你自己的偏见和最深刻的想法覆盖它,这样你首先看到的就是你正在思考的。尽管它在过去几年中已经失宠(“伪科学”被用来描述它),但它仍然是描述心理学领域的一个非常有用的比喻。
在这种情况下,我使用它来强制各种库将这个无害的数据集分类到预定义的标签中。
分类器
为了对图片进行分类,我查看了以下库:
- ResNet50
- VGG16
- VGG19
- InceptionV3
- InceptionResNetV2
- 例外
- MobileNet
- MobileNetV2
- DenseNet
- 纳斯网
(这些都是在 Keras 2.2.0 中可用的原生应用程序库。)
这些分类器中的每一个都具有特定的结构和与之相关联的权重。
Documentation for each classifier from Keras.
除了内存使用和可训练参数之外,每一个的实现细节都有很大的不同。与其深入挖掘每个结构的特殊性,不如让我们看看他们是如何看待同样令人困惑的数据的。
(如果你想单独了解每个结构的更多信息,如果你想了解更多关于 ResNet 、 Inception 、 DenseNet 、 NASNet 、 VGG16/19 和 MobileNet 的信息,这里有链接。)
结果呢
总的来说,我们的目标是快速了解预测和预测背后的信念强度。为了做到这一点,我将前 1 名的预测按名称分组,并将它们的得分加在一起。这给出了每个分类者准备在一张特定的牌上赌多少的感觉。对每个标签都这样做,可以很好地代表每个分类器的可信度,并让我们了解每个卡片的相对预测可信度。
举个例子,InceptionResNetV2、NASNetLarge、DensetNet201 认为卡 1 是战机(得分分别为 88.3%、46.2%、18.6%)。然后我把它加起来,无量纲的分数是 153.1。现在,我可以在分类器之间比较这个分数,看看哪一个表现最好。
卡片 1、2 和 3
Cards 1, 2, 3. Or, according to the classifiers, a fighter jet, a rooster, and a book jacket. Go figure.
Card 1:
warplane 153.05
wall_clock 75.41
letter_opener 47.29
lampshade 33.13
buckeye 28.95
jigsaw_puzzle 23.19
paper_towel 22.51
birdhouse 11.50Card 2:
cock 72.84 # <--- Rooster. They mean rooster.
lampshade 59.99
brassiere 59.47
velvet 43.84
earthstar 41.42
mask 29.46
candle 21.84
tray 19.30
wall_clock 18.41
hair_slide 17.84
vase 11.44Card 3:
**book_jacket 325.35** # <--- No idea what's going on here.
coffee_mug 62.61
chocolate_sauce 45.00
candle 32.68
ant 25.81
matchstick 24.02
jersey 16.94
卡片 4、5、6 和 7 —错误和爆炸
First row: Card 4 and Card 5. Second row: Card 6 and Card 7. Card 5 is without a doubt a picture of some sort of bug.
卡片 4 到 7 引出了更多的烟、飞船和虫子。这让我想起了我的农村童年,玩着有史以来最好的乐高玩具。(我显然指的是 M-Tron 、邪恶 BlackTron 和 Ice Planet 。)
Card 4:
volcano 101.76
fountain 72.11
space_shuttle 32.72
hen-of-the-woods 29.40
pitcher 28.28
vase 25.00
king_crab 23.99
wall_clock 18.25
triumphal_arch 11.04Card 5: # <--- Bugs. Definitely bugs.
isopod 106.54
king_crab 83.67
ant 61.58
long-horned_beetle 32.23
tick 30.05
hip 26.32
rhinoceros_beetle 14.52Card 6:
space_shuttle 174.48
warplane 155.58
conch 104.73
missile 63.71
airship 57.73
fountain 11.57Card 7:
missile 195.66
parachute 52.52
projectile 42.31
space_shuttle 31.18
hip 29.89
geyser 20.92
warplane 17.50
卡片 8、9 和 10——降落伞、海螺和托盘?
Cards 8, 9, and 10. How the right one is a “tray” is beyond me.
Card 8:
fountain 189.59
parachute 98.27
umbrella 94.61
pencil_sharpener 63.27
spoonbill 51.08
poncho 45.19
coral_fungus 12.05
shovel 10.12Card 9:
missile 238.45
fountain 64.82
parachute 48.21
volcano 44.77
paper_towel 41.59
lampshade 13.48Card 10:
tray 229.22
handkerchief 151.63
conch 77.94
feather_boa 60.34
rapeseed 15.95
当然,我们可以更深入地了解每个预测的平均置信度。下面是卡 1 的一些示例数据。所有的结果都可以在该项目的 GitHub 页面上找到。
All of the results available for Card #1.
代码
为了标记每张图片,我们首先加载 Pandas、NumPy 和 Keras 图像预处理库:
from keras.preprocessing import image
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.models import Model
import keras.backend as K
import numpy as np
import pandas as pd
import json
然后,我们创建一个助手函数来返回包含每个库的前 10 个结果的分数的数据帧,以便快速汇集每个图像的分数:
def getLabels(model, dims, pi, dp):
"""
Returns the top 10 labels, given a model, image dimensions,
preprocess_input() function, and the labels inside decode_predictions().
"""df = pd.DataFrame()
for img_path in images:# Resize image array
image = load_img(img_path, target_size=(dims, dims))
image = img_to_array(image)
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
image = pi(image)
# Predict what is in the image
yhat = model.predict(image)
# return the top 10 labels
labels = dp(yhat, top=10)[0]# create empty list and counter
labellist = []
counter = 0
# get labels for each image
for label in labels:
# Display the score of the label
print('%s (%.2f%%)' % (label[1], label[2]*100))
# Add image results to list
labellist.append(
{"labelnumber":counter,
"labelname" :label[1],
"pct" :'%.2f%%' % (label[2]*100),
"image" :img_path})
counter = counter + 1
# Add to dataframe
df_row = pd.Series()
df_row = pd.read_json(json.dumps(labellist), typ='frame', orient='records')
df = df.append(df_row,ignore_index=True)
print("------------")
return df
现在,我们有了一个快速评估每个图书馆的方法。
# ...
# ResNet50 Rorschach assessment
from keras.applications.resnet50 import ResNet50
from keras.applications.resnet50 import preprocess_input
from keras.applications.resnet50 import decode_predictionsmodel = ResNet50()df = getLabels(model, 224, preprocess_input, decode_predictions)
df.to_csv('results_resnet50.csv', index=False)# ----------# VGG16 Rorschach assessment
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.applications.vgg16 import decode_predictionsmodel = VGG16()df = getLabels(model, 224, preprocess_input, decode_predictions)
df.to_csv('results_vgg16.csv', index=False)
# ...
…等等。
这种方法的有趣之处在于,当使用不同的图像集时,它是一个非常实用的笔记本:
A snapshot of the notebook from the repository.
这种笔记本结构允许您快速浏览不同的数据集,并查看适合您的产品或项目的最佳分类器。你是否在模糊的图片上寻找一个可靠的顶级精度?如何识别一张图片的所有不同内容?你的里程可能会有所不同,但你现在可以开始自己探索了。
你可以在这里得到的全部代码。
玩得开心!
马特。
matt @ lemay . ai
LEMAY . AI
1(855)LEMAY-AI
您可能喜欢的其他文章:
我的首席技术官丹尼尔·夏皮罗(Daniel Shapiro)的其他文章您可能会喜欢:
附注:发音是吼-肖克。
树莓 Pi 3 vs 龙板
从 Python 的角度来看
Python 是创建简单 PoC 项目的完美语言。我们不会谈论 Python 优点的完整列表,但最神奇的是 Python 是跨平台。这个特性对于构建嵌入式系统应用程序非常有用。无需等待编译器构建二进制文件,无需将应用部署到主板上。同样的代码既可以在 PC 桌面上运行,也可以在基于 Linux 的板上运行,比如 Raspberry Pi。
然而,这种方法有其局限性。它不能用于一些与硬件相关的项目,例如 PC 桌面没有 SPI。显然,基于 ARM 的主板比 PC 要慢。因此,在某些情况下,在桌面上完美运行的算法在嵌入式系统上会出现性能下降。
性能对比
在我们最新的项目中,性能至关重要。我们使用 Dragonboard 410c 作为目标平台之一。我们对董事会的表现感到惊喜。即使没有仪器基准测试,我们也能感觉到与 Raspberry Pi 3 相比,OS 包安装、应用程序启动和整体性能都有显著提升。
Board specs
看起来相当平等,并不能解释 DragonBoard 的优越性能。所以我们执行了一个基准测试来分析它是否真的更快。
基准测试
我们决定在这些主板上测量 Python 3 的性能,作为我们最感兴趣的版本。我们使用了 Python 性能基准测试套件,声称它关注真实世界的基准测试,而不是尽可能使用整个应用程序的合成基准测试。
我们在嵌入式平台上使用了我们最喜欢的操作系统。该操作系统是一致的,并提供事务性更新。最重要的是,它支持两种板进行我们的基准测试。我们在 SD 卡上安装了 Ubuntu Core,并使用“经典”环境进行测试。
以下命令安装 Pyperformance:
pip3 install pyperformance
我们用以下方式运行它:
echo pyperformance run --python=python3 -o result.json | nohup sudo classic &
我们使用这个棘手的命令只是为了允许测试在没有活动 ssh 连接的情况下在后台运行,因为这需要时间,并避免由于丢失 ssh 连接而导致的任何问题(测试也会被停止)。
Results
结果
结果真的很让人吃惊。DragonBoard 几乎比树莓 Pi 3 快两倍!现在我们明白了为什么我们会感觉到性能提升。当然,Raspberry Pi 3 官方内核使用的是 32 位的 armhf (v7)架构,而 DragonBoard 410c 使用的是 64 位的 amr64(v8)内核。由于 Python 大量使用 64 位算法,这可能解释了差异。
最终系统台架测试
为了用本机代码确认这个结果,让我们也运行“sysbench”测试。Sysbench 有一些我们想要运行的测试:cpu、内存、线程、互斥。这些测试更具综合性,但我们还是来比较一下这些板的计算能力吧。
Results
CPU 基准测试快了 25 倍。这是因为 CPU 测试使用显式的 64 位整数。在这种情况下,64 位操作系统具有很大的优势。其他测试大约快两倍,这与 pybenchmark 非常相似。即使线程测试不会受到 64 位内核的影响。
结论
当然,总有机会用 C 甚至纯汇编语言开发你的项目,获得更好的性能。但是通常开发时间比板子的价格要贵。使用像 Python 这样的工具来帮助开发质量更好的产品并更快地将其交付给市场,会更便宜、更有效、生产率更高。
Python 导致的性能下降可以通过一个更强大的板来轻松克服。我们真的希望树莓派官方形象会有一个 64 位的 OS。但是现在 DragonBoard 410c 是 Python 应用程序开发的完美选择。
由 DataArt 的高级建筑师尼古拉·哈巴罗夫执笔。
可微分神经计算机:综述
可微分神经计算机是一种神经网络,它利用了记忆增强,同时也利用了注意力机制。最初的论文是由 Alex Graves、Greg Wayne 等人撰写的使用具有动态外部存储器的神经网络的混合计算(T2)。2016 年 10 月出版。
结构
让我们把 DNC 想象成一台带有 CPU 和 RAM 的机器。
一个神经网络,即控制器,将扮演 CPU 的角色。一个存储器,它只是一个矩阵,将扮演 RAM 的角色。
存储矩阵的每一行称为位置。矩阵将有 N 个位置,它们是 W 维向量。那么,存储器就是一个 N×W 矩阵。
记忆增强和注意机制
控制器将从存储器中存储和读取信息,网络将通过一些参数向量来学习如何做到这一点,但我们将对此进行讨论。主要的一点是,网络的内存是在网络本身之外的。
通常,网络的全部知识都存储在其权重中。相反,DNC 是一种叫做“记忆增强神经网络”的东西,这种特性为它提供了一些很好的特性。
内存增强并不是本文介绍的新奇事物;事实上,这根本不是什么新鲜事。DNC 中最酷的是在控制器和内存之间起中介作用的向量和操作系统。这被称为注意机制,这是过去几年的一个基本概念。
权重和人头
注意机制定义了 N 个位置上的一些分布。这些分布是 N 向量,称为权重。加权向量的每个第 I 个分量将传达控制器应该给予存储器的第 I 个位置中的内容多少关注。有更多的进程需要观察内存内容,这就是不同权重将采取行动的地方。
在我们的网络图中,每一个涉及操作的过程都是一个功能单元。生产和使用砝码的单位称为头。基本上,我们在控制器和存储器之间有两种类型的交互:通过读取权重调节的读取过程,以及通过写入权重调节的写入过程。发生这种中介作用的功能单元被称为读磁头和写磁头。
可微性
正如我们将会看到的,在大脑内部,一种可区分的注意力机制以三种不同的方式被应用。当我说可微时,我是说产生读写权重的函数是可微的,然后我们可以对磁头应用梯度下降。
权重背后的直觉
当我谈到权重时,我指的是下面的概念:控制器想要做一些涉及内存的事情,而不仅仅是查看内存的每个位置;相反,它将注意力集中在那些包含它正在寻找的信息的位置上。谁把信息放在这些地方的?以前是控制器自己把它写在那里:它现在只想恢复它。
我说过,这个结构中的每个单元和操作都是可微的,也就是说,我们可以通过迭代应用梯度下降来学习一切。所以,脑袋的工作方式也是学来的!
概括一下:DNC 可以学习如何为每个输入产生良好的权重,也就是说,它知道如何根据其相对于给定输入的相对重要性,对其存储器进行不同的加权。为输入产生的权重是在特定过程(读或写)中 N 个位置相对重要性的分布。
权重是如何确定的?
权重通过控制器发出的向量产生,该向量被称为接口向量。接口向量是一组值,这些值对控制器需要和向存储器发出的请求进行编码。
注意高贵的三重路径
控制器和存储器之间有三种交互,它们由接口向量来调节:
- 内容查找:将接口向量中的一组特定值与每个位置的内容进行比较,我们将把这些值收集到一个叫做 key vector 的东西中。这种比较是通过相似性度量(在这种情况下,余弦相似性)来进行的。
- 临时内存链接:连续写入位置之间的转换记录在一个 N x N 矩阵中,称为临时链接矩阵 l。控制器写入内存的顺序本身就是一个信息,它是我们想要存储的东西。你可以这样想:如果我不记得我把智能手机放在哪里了,我可以试着回忆一下在到达现在的位置之前我在哪里。
- 动态内存分配:每个位置都有一个使用级别,用 0 到 1 的数字表示。挑选出未使用位置的权重被发送到写磁头,以便它知道在哪里存储新信息。“动态”一词是指控制器重新分配不再需要的内存,擦除其内容的能力。此外,分配机制独立于内存的大小和内容,这意味着我们可以扩展内存,而无需牺牲或重新训练网络。
这是对可微分神经计算机的初步观察。如果你在寻找一个定性的描述,我希望我足够清楚(不要犹豫,在评论中写下任何问题!).
Rubikloud 兑现了全渠道的承诺
大约在十年前,全渠道的理念开始深入人心。传统零售商认为这是一个“概念”,因为他们主要的实体店仍然是服务客户的重点渠道。快进到 2018 年,机器学习正在将这个概念变成现实。根据定义,
全渠道承诺通过满足消费者对购物即时性、便利性和无处不在的更高期望,拉近零售商与消费者的距离。它还认识到一个不可避免的现实:购物者越来越需要超越网上购物和商店购物之间障碍的零售体验。
我很荣幸地会见了首席执行官刘可莉和数据科学经理坎查纳·帕德马纳班,他来自 Rubikloud ,这是一家总部位于多伦多的软件公司,今天最接近实现这一承诺。
“全球领先的零售机器学习平台”
这是公司的价值主张。Rubikloud 是一个先进的零售机器学习平台,提供促销和忠诚度营销的市场内建议。影响:优化个性化,在正确的时间,通过正确的渠道,向正确的客户提供正确的产品和正确的信息。
现在,Rubikloud 拥有 100 名员工,在全球范围内拥有 10 多家零售客户,风投融资 4500 万美元,它正在进行零售革命。
开始:永远改变了企业软件的融合
五年前,凯瑞在一次收购后退出了一家初创公司。当时,他注意到了 3 个重要事件,这些事件有助于形成 Rubikloud 的推动力:
- 云:三巨头——亚马逊、谷歌和微软在弹性计算方面进行了大量投资,为开发者提供云访问和计算可扩展性。
- 数据框架:开源和各种数据框架的快速部署和采用。
- 人工智能:人工智能开始在消费者领域变得越来越普遍,为脸书的新闻推送、网飞的推荐引擎和亚马逊的动态定价提供动力。
这三种趋势正在推动内部人工智能系统,它们正在汇聚成一种新形式的企业软件。一家新公司正是基于这一理念成立的:
我们成立 Rubikloud 最初是为了用一个垂直领域解决这三个挑战,随着我们的扩张,我们会进入新的垂直领域。我们决定关注全球零售业,即在市场成熟的世界关键地区拥有多样化终端用户体验的传统零售商。
克里的信念是,传统零售商没有死。他们只是需要技术来帮助他们转型和发展。
协调客户从线下到线上的旅程
测量客户购买的影响以确定倾向是困难的,因为直到现在,由于不同的系统和数据库,一次关注一个客户以及他/她在每个在线或离线购买点的购买的机制在很大程度上是分散的。
Rubikloud 的零售客户已经收集这些数据很长时间了,在许多情况下,他们被困在多个遗留系统中,而没有采取任何措施。
协调来自数据的见解并使其与业务目标相匹配不可能一蹴而就。然而,通过了解每个业务利益相关者(即销售和营销团队)的目标和挑战,Rubikloud 从根本上使这些团队的预测更加精确,执行更加无缝,并创建了更强大的绩效系统。
正如 Kerry 指出的,销售团队需要知道在几十万个 SKU 下订购多少库存,以什么价格设定,以及为每个渠道和商店分配多少。
Rubkiloud 的价格和促销经理将向零售商提供商店级分配和在线级分配。它还会告诉零售商对该库存使用什么促销策略,以及在促销过程中他们需要多久补充一次库存。
所有这些变量都由系统以自动化的方式进行计算,并由系统发送到沿途的各个接触点,无论是供应链系统、商店运营还是 ERP……它旨在解决零售商目前面临的最困难的计算问题之一:有多少库存、什么价位、哪些特定的 SKU 正在移动、在什么地区,最重要的是,哪些客户群受到这些 SKU、该价位和库存量的影响。
这些见解的价值注定会吸引更大的 CPG 玩家,他们传统上无法控制或获得其营销或推广工作的投资影响。在过去,接触零售数据在很大程度上是难以捉摸的。像尼尔森这样的推断数据源提供了 CPGs 的价格、市场份额和销售信息。相比之下,Rubikloud 收集了与 SKU 相关的数百个数据点,因为它们与客户细分、促销策略、购买、价格和位置相关。
零售数据的状态
数据是新的货币。它现在是、将来也将是近乎实时地在市场上做出决策的驱动力。然而,考虑到当今在转换数据以进行分析方面的普遍挑战(一些行业估计称 80%的模型开发工作处于清理阶段),再加上大型零售商之间缺乏对数据的使用、聚合和分析,数据转换可能需要 1-6 个月的时间。Kerry 指出,这不仅高度依赖于数据及其系统的状态,还依赖于零售目标的要求。
数据科学家 Kanchana Padmanabhan 认为,好的数据是关键。Rubikloud 吸收所有客户数据——交易数据、促销数据和其他相关数据源。零售商之间的差异可能导致可扩展性挑战:如不同的模式、遗留系统、不同的技术堆栈和数据量差异。加入数据,尤其是验证数据变得至关重要。
随着时间的推移,在许多用例及客户中,Rubikloud 在数据处理、管理和加工方面做得越来越好。他们已经学会并善于在数据进入他们的系统之前预先提出正确的问题。坎查纳补充道:
我们也有稳定的产品,所以我们知道我们在构建什么样的模型。我们知道我们提供的解决方案,更重要的是,我们知道我们需要什么数据。
Kanchana 指出,他们可以处理各种格式:从调查,到广告,电子邮件,交易,CRM,ERP 和社交媒体等。在某些情况下,鼓励营销人员一致且正确地输入信息,以确保数据的有用性。
除了主要信息外,Kanchana 表示,他们还覆盖了人口统计数据、竞争性定价信息、产品图片和描述。虽然社交媒体具有价值,但如今这些数据非常混乱,试图从社交媒体中找出交易也很困难…这就让我们想到了房间里的大象…
以客户为中心和隐私可以共存吗?
考虑到欧洲通用数据保护条例(GDPR),像 Rubikloud 这样的智能系统会受到威胁吗?通过生活方式管理器解决个性化的圣杯将需要在理想的环境和情况下,增加背景来确定顾客的购买意图。然而,克里强调,
我们不会收集个人身份信息(PII):我们不会收集您的姓名、电子邮件、信用卡号码和电话号码。原因是:这对我们没有帮助。了解 PII 对我们的模型没有任何帮助。我们更喜欢客户给我们一个哈希 ID 的客户…我们正在下降到 1-1 客户级别,但我们不知道这个人的名字或 PII。
该散列 ID 将通过 Adobe Campaign 或 Salesforce Marketing Cloud 发送回营销自动化堆栈,并将与 Rubikloud 及其系统范围之外的客户端系统中的客户信息进行匹配。
对于许多营销人员来说,使用任何和所有可用的数据进行分析和细分都是理所当然的。使用人工智能,在整个客户群的数千/数百万数据属性中搜索模式,不需要像 Kerry 那样需要个人信息来建立有效的模型。
虽然《今日 PII》是当今隐私辩论中的一个强大支柱,但即将到来的从元数据中进行的推理(人工智能在其中找到这些模式来定义上下文并预测客户倾向)肯定会成为一个辩论的话题。随着 GDPR 起飞,我们将继续关注此事。
零售业的未来意味着回归基础
凯瑞认为,零售业作为一个整体正在增长。客户的期望发生了显著变化。衡量零售商的技术能力也是一个品牌发展的标志。客户想要相关的推荐;他们喜欢亚马逊的动态定价;他们希望每次与零售商互动时,体验会更熟悉一些。
我们认为零售商不会消亡,但他们只有很短的时间来修正技术。他们不能再在大型遗留项目或临时创新项目上浪费时间了。他们必须解决消费者问题或产品问题。
克里指出,零售商把问题复杂化了。挑战在于他们如何以产品化的方式部署解决方案。我们生活在一个人工智能实验猖獗的时代。Rubikloud 已经进入全面生产阶段,他们已经学会了如何构建一个适用于该行业的整体解决方案。
你购买打包了所有用例及输入的软件,并与了解你业务细微差别的公司合作。在我们看来,您购买软件是为了解决可以解决的核心问题。
这意味着零售商将重新成为零售商。对于购买者来说,他们会将财务分析从工作描述中删除。相反,他们会将自己的核心能力应用于价格谈判、产品资源配置以及新产品和新客户的试验中。
通过采用技术,它允许客户做他们最擅长的事情。在 Rubikloud 的例子中,它肯定影响了这个咒语。
关于:
Kerry Liu is the Co-Founder & CEO at Rubikloud, where he leads three important functions: people, sales, and technology disruption. In his role, Kerry works to manage and maintain a thriving company culture that recruits the best and brightest in the industry, while also maintaining relationships with global retailers and investors. Kerry is passionate about machine learning and big data, and enjoys providing enterprise retailers with the tools and knowledge needed to enhance their overall business goals.
Kanchana Padmanabhan is the Manager of Data Science at Rubikloud. Kanchana received her PhD from North Carolina State University in Raleigh, NC with a focus on Graph Mining and Analytics, Computational Biology, and Network Modeling. Prior to Rubikloud, Kanchana spent 3 years at Sysomos, a social media analytics company for research projects that use machine learning, network analysis and NLP techniques in conjunction with big data technologies such as Hadoop, MapReduce, and Spark. She currently focuses her time on solving big data problems in retail. She has 4 patent filings and co-edited a book titled “Practical Graph Mining with R“ CRC Press.
本帖原载认知世界。