机器学习已经开始改变软件开发行业

2018 年 12 月 22 日

机器学习已经开始改变软件开发行业

硬件能力的发展和海量数据使得现有的机器学习方法成为可能,例如模式识别、自然语言处理和强化学习。人工智能正在影响软件开发过程,给版本控制、CI/CD 和测试等带来了额外的复杂性。


ThoughtWorks 人工智能全球主管 Christoph Windheuser 在Goto Berlin 2018大会上谈到了各个行业中的人工智能应用程序。InfoQ 通过问答、摘要和文章的形式报道了本次大会。


Windheuser 认为,机器学习方法的最大优点是可以通过学习数据而不是编程来优化算法。这意味着算法可以实现无法通过编程来实现的行为,例如光学和声学模式识别或自然语言处理。他说,随之而来的是全新的应用程序,可能性是无穷无尽的。


Windheuser 表示,在数据科学和机器学习项目中,开发人员不仅需要处理他们的编程代码,还需要处理大量数据,例如训练模式、从这些模式中提取的特征以及学习算法的参数和超参数。他认为,这为开发过程带来了新的复杂性。


在他的演讲之后,InfoQ 采访了 Windheuser。


InfoQ:人工智能为我们带来了哪些可能性?


Christoph Windheuser:随着硬件功能的大幅进步和可用的大量数据,一些众所周知的旧机器学习方法出现了全新可扩展和可操作的应用方式。在模式识别领域有语音识别和图像识别,在自然语言处理领域有语言翻译、情感分析、意图识别、文本到语音和聊天机器人。通过强化学习,甚至可以学会玩电子游戏、下棋或平稳驾驶汽车。如果没有机器学习方法,这一切都是不可能的。


InfoQ:数据在应用人工智能方面扮演着什么样的角色?


Windheuser:数据是机器学习算法的基础。对于像反向传播这样的监督学习,为了实现神经网络的泛化,你需要的训练模式数量远远超过了用于优化(权重)的参数。对于具有大量层、每层具有大量单元的深度学习模型,参数的数量很容易就达到数百万个,要进行成功的训练,这需要更多的训练模式。

对于监督学习,训练模式需要标签(例如对模式的正确分类),而这些通常需要手动进行。除此之外,数据模式必须具有正确的形式,这样才能被学习算法接受。这意味着必须从训练数据中提取正确的特征。这对于获得良好的训练算法来说非常重要。

例如,如果你想了解未来客户对杂货店商品的需求,可以使用历史销售数据来预测未来的销售情况。你可以直接使用POS(销售点)数据来训练你的网络。从POS数据中提取时间戳的工作日部分会非常有用,并将其作为特征提供给神经网络。因为客户需求高度依赖于工作日,这将有助于神经网络更容易、更快地学习。


InfoQ:人工智能将如何改变软件开发和部署流程?


Windheuser:人工智能已经在很多方面改变了开发过程。为了能够在出现问题或者训练实验没有显示预期结果的情况下进行回滚,代码和数据必须被设置回过去定义的某个一致的点。我们使用开源工具DVC(数据科学版本控制——dvc.org)获得了一些很好的体验,即使数据位于远程的云存储桶中。

此外,持续集成/持续交付(CI/CD)环境的设置变得越来越复杂。你通常会同时拥有多个流和管道,例如,一个用于应用程序开发,一个用于数据科学和机器学习模型。如果你为了加速训练速度在多台计算机上进行并行训练,则必须借助管道的扇入和扇出来并行化训练,并在之后进行同步测试。在我们的很多项目中,我们使用的是GoCD环境,这是一个由ThoughtWorks开发的开源工具,能够管理这种复杂的CI/CD环境。

使用机器学习组件测试应用程序的需求也变得越来越普遍。除了不同组件的单元测试之外,还必须使用一些KPI(例如错误率或在独立测试集上实现的混淆矩阵)来测试训练阶段的成功率。在很多情况下,功能测试无法完全自动化。以聊天机器人为例:它的功能不能完全通过自动化进行测试,因为自动化测试只能测试到一小部分对话。由于机器学习应用程序功能测试的成本很高,我们经常使用“测试表”而不是经典的“测试金字塔”。


InfoQ:人工智能将为我们带来怎样的未来?


Windheuser:这很难预测,因为这个领域正在快速发生变化。为了将人工智能及其应用推向一个新的水平,新的科学突破是必要的,例如在无监督学习、获取现实世界知识或推理领域。这可能会在接下来的几个月或几年内发生,或者可能需要几十年,中间还可能出现另一个AI寒冬。我真的相信,最终,拥有超智能的通用人工智能(AGI)将成为可能,但这仍需要很长时间。


查看英文原文Q&A with Christoph Windheuser on AI Applications in the Industry


2018 年 12 月 22 日 10:391178
用户头像

发布了 731 篇内容, 共 359.6 次阅读, 收获喜欢 1824 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

Wireshark的使用与数据分析(一)

姬翔

ARTS-week-1

saddamwilson

ARTS 打卡计划

推荐几款有意思的小众App(05.30)

静陌

产品 App

带你学够浪:Go语言基础系列-环境配置和 Hello world

柠檬橙

golang 后台开发

分布式锁🔒是个啥❓ 其实就这么点事

山中兰花草

Java redis 后端 分布式锁 开发

用大数据分析了一线城市1000多份岗位招聘需求,告诉你如何科学找工作

柠檬橙

Python 数据分析

JMM的前世今生

fkc_zyk

重排序 volatile happens-before JMM cpu

github看代码效率提高10倍!因为用了sourcegraph这个工具

柠檬橙

GitHub 程序员 效率工具

ARTS|Week 01 (2020第22周)

MiracleWong

算法 写作 ARTS 打卡计划

PageHelper

BitSea

10分钟白嫖我的常用的在线工具网站清单

Guide哥

设计 在线工具 工具类网站 PDF

面试造飞机系列:说下微服务接口设计原则?

柠檬橙

分布式 微服务 后端 架构设计

云上基础产品之负载均衡

韩超

负载均衡 公有云

Linux命令-df

一周思进

使用 PCA 进行降维可视化,了解特征分布

黄大路

数据挖掘 数据分析 可视化

Prometheus 2.18.0 新特性

耳东

Prometheus

游戏夜读 | 记忆里的老游戏

game1night

带你学够浪:Go语言基础系列 - 8分钟学基础语法

柠檬橙

程序员 后台开发 golan

谈谈控制感(12):选择什么样的工作

史方远

读书笔记 个人成长 随笔杂谈

Python 进阶与核心技术 dict & set

Bonaparte

Python 极客时间

如何衡量产品需求效果

黄大路

产品经理 产品设计 运营

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试

编程道与术

Java 编程 TDD 单元测试 JUnit

是什么奠定了架构师的职场地位?

刁架构

极客大学架构师训练营

程序员的晚餐 | 5 月 30 日 入梅天,来一盆小龙虾

清远

美食

云上基础产品之对象存储

韩超

对象存储 公有云 S3

云上基础产品之虚拟私有云

韩超

公有云 VPC 虚拟私有云

思维模型 - 概念篇

石云升

学习 高效 思维模型 决策

Linux下程序出问题不要慌,资深程序员教你6招搞定!

柠檬橙

Linux 程序员 后台开发

遇事不决,请先 「搜索」

Sicolas Flamel

个人成长 职场 随笔杂谈

云上基础产品之内容分发网络

韩超

CDN 公有云 内容分发网络

【摘】Git-从零单排 02期

卡尔

git 原理 开发工具 工具链

机器学习已经开始改变软件开发行业-InfoQ