写点什么

杨臻:人工智能在软件工程领域的应用

  • 2019-10-07
  • 本文字数:3942 字

    阅读完需:约 13 分钟

杨臻:人工智能在软件工程领域的应用

从《黑客帝国》、《复仇者联盟》中的影视形象,到战胜柯洁的“阿尔法狗”,人工智能的概念已深入人心。你所理解的人工智能是什么样的?人工智能和软件有什么相关?程序员会被 AI 所取代吗?

在 NIUDAY 深圳站,CODING 资深全栈工程师、CODING Cloud Studio 研发总监杨臻,为我们带来了他的独到见解。


01 你所理解的人工智能是什么样的?

说到人工智能,相信从小就受各种影视文学影响的我们,头脑里一定会冒出很多形象:银翼杀手、瓦利、哆啦 A 梦等。虽然人工智能还没有完美实现,但对于大多数人来说已经是普遍接受的概念了。



这会造成一个现象:我们如果实现了一个人工智能,但它达不到电影里的程度,就不会被大多数人所接受,同时由于影视作品的影响,我们似乎在潜意识里觉得,如果人工智无法和真人一样聪明,就不算人工智能。


但以上这些想法可以说都是误解。我们看到的影视作品里,仿佛有一个国家就叫做机器,那个国家的人叫机器人,其余跟人没什么区别。不过按照现在的技术发展下去,人工智能达到人类智能水平所需要的时间是非常短的,可能现在我们觉得人工智能的智力程度不如小动物,但它达到人类智能的那一天时,可能在我们来不及反应的第二天,就把人类甩出去了。这是也很多人鼓吹人工智能威胁论的原因。


而在当今情况下,人工智能可以达到什么样的程度?我这里有一段视频,是上个月 GOOGLE I/O 大会上「劈柴哥」分享的 GOOGLE DUPLEX,他展示了人工智能是如何同人类进行对话的。


虽然我觉得这个 demo 是选取了效果最好的部分,但在我看来已足够震撼。通过他们发布的资料我们可以看出,Duplex 的核心是基于循环神经网络,由谷歌 TFX 搭建而成。



它在对话时语音非常自然,这也是基于最新的音频生成技术实现的。视频中的人工智能甚至会模仿人类的语气词,比如“嗯、啊”。据他们的博客所说,这些助词有利于对话的进展。因为人在对话时,对停顿非常敏感,要让人工智能在一个可接受的时间内快速的做出响应有时候比较困难,所以需要在等待时加入一些语气助词。要训练这个神经网络,首先需要通过谷歌自动语音转换系统 ASR,把众多的匿名电话记录的语音转换成文本,再输入到神经网络中。结合对话联系上下文语境去训练这个神经网络模型,最后得到的结果是视频里看到的样子。


这段视频公布以后,很多人觉得非常棒,但也有不少人发表他们的顾虑:如果某一天,我们无法分辨自己对话对象是人还是机器,那么就非常恐怖了。所以谷歌随后发声明说,如果他们把这个技术投入应用,会在前面加入提示,告诉通话者,他们正在和人工智能通话。同时进行技术保护,防止技术被滥用到电话诈骗等不正当场景下。


这个技术确实让我们觉得,我们离梦想中的人工智能更进一步。

02 人工智能的终极目标是什么?

所有开发者在学习写代码时,第一行永远都是 HELLO WORLD。让电脑自己说出这句话,自己有这个意识,是程序员的终极目标,也是人工智能的终极目标。可以说人工智能方面的所有技术,都是为这个目标服务的,比如自然语言处理、图象识别、神经网络、机器学习等。只是在完整搭建一个人工智能之前,我们发觉把这些技术单独拿出来用,就已经有非常广泛的应用前景了。

人工智能的应用场景

现在人工智能的应用场景已经很广泛,比如网站会用机器学习的算法,帮你推荐歌曲、电影;自动驾驶系统会根据图象识别等技术,来让车辆实行自动行驶。最近世界杯爆冷频出我们可能觉得赛果难以预测,但我相信背后的博彩公司肯定已经开始训练神经网络来更好地预测,所以你会觉得押什么都错。另外我听说现在的基金公司也正在训练神经网络,来更好的割韭菜。所以大多数人觉得如今买股票很难赚钱,没准这背后都是人工智能的锅。



无所不在的人工智能,仿佛在一夜之间突然出现,但事实上并不是这样的。它的历史几乎和计算机本身的历史一样久。

人工智能的发展演进

这里有一个简单的年表:



1943 年神经元的数学模型被提出,两年后冯诺依曼设计小组试制电子计算机,1948 年提出以简单神经元构成的再生自动机网络结构。只是以当时的能力来说,对其进行深入讨论比较困难,同时由于基于存储的指令式发展迅速,所以精力主要放在传统计算机程序方面。


到 1949 年时,赫布学习规则为神经网络的学习算法奠定了基础。1950 年图灵测试《计算机器与智能》提出。当时图灵预测计算机应能达到 30% 的被识别率,也就是在大概 30% 的人会认错但情况下,就可以认为是人工智能。


1952 年时,图灵还干了一件很有意思的事情。他虽然跟冯诺依曼同时代造出电子计算机,但项目是供英国做破译密码的用途,所以作为保密工作一直没有公开。后来因为拿不到预算,他改进这部计算机的构想就没有实现。不过他以构想中的计算机写了一个程序,用来跑国际象棋。虽然程序写出来了,但没有计算机执行这个程序,他就把自己当成一个计算机按照程序来跑,并赢了他同事的妻子。在那个年代,对他来说,计算机存不存在无所谓,只要算法写出来,就是成功了。


50 年代末诞生了基于多层神经网络的「感知机」。1956 年人工智能被正式做为一门学科提出。但他们不断努力的结果,始终受制于当时的技术和计算机算力,同时当时人们普遍有一个错觉,认为传统指令式的程序一样可以完成任何人们需要的工作。因此经历了大概 20 年,无论人们怎么努力,做出来的结果仍然像一个玩具,完全没有办法实现人工智能。


在 70 年代,人们开始放弃指令式的程序,人工智能进入第一次高潮。在 80 年代由于卡内基梅隆大学的专家系统横空出世,人工智能进入第二次高潮。


人工智能的第三次高潮就是现在:1997 年计算机深蓝战胜国际象棋世界冠军;2006 年深度学习算法带来语言识别领域但飞速进展;2011 年 IBM 的问答机器人「沃森」在知识节目战胜人类;2016 年 AlphaGo 在围棋比赛中击败李世石。特别是「阿尔法狗」的出现,我们认为依靠人类经验和直觉才能获胜的围棋领域也被机器人击败,大家才开始意识到,真正的人工智能离我们已经不是特别遥远了。

03 人工智能和软件的关系

说到人工智能和软件的关系,其实本质上说人工智能也是一种软件。可以预见,最后的影响结果一定是人工智能可以自己写程序,所有程序员都不用上班了。当然,这可能还比较遥远。目前来看,只能说人工智能在软件开发的各个环节上都可有所作为,包括估算交互时间,进行项目任务管理、自动测试和修复 BUG、代码自动补全和代码分析。


CODING 对代码分析所做过的尝试

CODING 曾经在代码分析上做过尝试,当时对一万个程序员提交的代码进行分析,通过评估他们的代码质量,试图给程序员的代码水平进行打分。再根据打分给项目需求方推荐适合的开发者。构想很美好,但结果并不是很乐观。这是当时总体上的分析结果。



图中 X 轴是代码质量,Y 轴是数量,大体上呈正态分布。这跟我们的直觉也比较相符:处于中间的程序员比较多,最好或最差的比较少。虽然总体上是正态的,但相对于个体来说还不是非常精准。


这套代码系统可以对代码里各种方面进行评分,包括有效代码行数、重复率、测试覆盖率、代码可读写性等,最后试图得出能够衡量程序员水平的分数。在拿到分析结果后,我们也会反馈给程序员,比如你的代码里哪里有些问题可以修复。但经过一段时间的尝试、优化之后,我们最后还是放弃了这个系统。因为这个分数如果不准,还不如不要。我们这个项目暂时暂停了,但如果有朝一日有更好的算法或者第三方服务出现,我们可能会再次将它启动。

用人工智能优化软件开发流程的创业公司

这里是一些尝试用人工智能来优化软件开发流程的创业公司。下面选取几例,为大家进行介绍。


mabl

mabl 是由原谷歌雇员组建的创业公司,业务主要在自动化测试领域。在他们的平台上,你可以对你的应用程序进行操作,来训练他们的测试程序。在完成训练之后,测试程序又会对你但程序更新进行测试。

applitools

applitools 是采用自适应的算法来进行可视化测试,自动判断当前的新版本是不是有 BUG。

diffblue

这家公司比较激进,他们给每个项目创建数学模型,通过对数学模型的训练,试图自动发现程序运行里的错误,来自动修复错误。但进展也不是特别好。

kite

kite 是一款代码提示工具,安装之后会通过人工智能,搜索当前互联网上的代码进行匹配。比如当你写程序时,它会猜测你当前需要的代码片段是什么,从而给出提示。据使用过的人说,效果还不错。

人工智能可以自己写代码么?

有了代码提示之后我们肯定会想,有没有可能让人工智能自己写代码?我看了现在的状况,唯一可能实现这个梦想的,是通过遗传算法生成代码。



这边有一个项目 AI Programmer,由于传统的算法不太合适做遗传算法,所以他们用只有 8 个指令的编程语言来做。虽然只有 8 个指令,但仍然是图灵完备的,所以从理论上来说它可以完成任何可解决的工作。它的原理是给每一个操作设定了一个浮点数的取值范围。开始时随机生成一串浮点数数组,这个数组可以对应出一堆操作符。但因为这套东西是随机出来的,大多数情况下肯定是没法执行的。但不断尝试的结果下,总有一次生成的代码是有意义的,能生成一些结果。


遗传代码会把能够执行的代码保留出来,对它进行演化,通过不断的迭代,最后得到理想的结果。大家可能听到过一个「无限猴子」的说法。如果给一个猴子一台打字机,它总有一天能打出一部莎士比亚全集。这个与之相似,只是遗传算法会把很多无效的随机干掉,根据他们的论文,最后的成果是如果想输出一个“ Hi ”需要 57 万次的迭代,输出一个“ Hello world ”需要 58 万次的迭代。


那么时至今日,我们需要担心人工智能会让程序员失业吗?我觉得暂时不用。我们要做的是调整好心态,学习新技能,尽量把 AI 用在自己当下的工作上,提高创造力。假如有一天,人工智能真的能替换程序员,那么基本上已经没有人需要工作了。


我的分享就到这里,谢谢大家!


本文转载自公众号七牛云(ID:qiniutek)。


原文链接:


https://mp.weixin.qq.com/s/drdwGoaFKweMB-QSIOqdBQ


2019-10-07 14:012425

评论

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

油管视频下载: 如何下载油管视频到本地

科技猫

分享 教程 经验 油管视频下载 下载油管视频

阿里工作8年,肝到P8就剩这份学习笔记了,已助朋友拿到10个Offer

Java 程序员 架构 面试

深入分析Linux操作系统对于TCP/IP栈的实现原理与具体过程

奔着腾讯去

c++ socket 网络协议

大厂招聘程序员都是“有章可循”你Get到了吗?

Java架构师迁哥

建信金科大咖访谈:ISO20000及ISO27001标准体系解读

金科优源汇

Kubernetes学习笔记之Calico CNI Plugin源码解析(二)

360技术

2021年最新版Java后端最全面试攻略,全面对标BATJ

Java 程序员 架构 面试

在外包5年,每天读写删改,突然发现跳不出来了

Java架构师迁哥

如何判断老板是在给员工画饼?

石云升

创业 职场经验 6月日更

面试官:如何给字符串设计索引?

一个优秀的废人

MySQL 索引 字符串 索引优化

超全!阿里首发内部微服务架构笔记,再也不用为“微服务”苦恼了

Java架构师迁哥

本文是为了帮大家快速回顾了Java中高级知识点,只需收藏不用看!

Java架构师迁哥

24道几乎必问的JVM面试题,我只会7道,你能答出几道?

北游学Java

Java 面试 JVM

我人生的里程碑之【作为独立开发者,第一次承接外包项目的心得经历,也许说出你的心声哦!】

码界西柚

程序人生 6月日更

《原则》(九)

Changing Lin

6月日更

涵盖了所有计算机底层知识总结与操作系统的实战教程,你确定不看看吗

Java架构师迁哥

☕️【Java 技术之旅】带你一起攻克String类创建的难点分析

码界西柚

Java string pool string 6月日更

福利时刻 十年黑客大佬的Web安全渗透技术分享

学神来啦

Linux 黑客 安全 运维自动化

毕昇JDK:为啥是ARM上超好用的JDK

华为云开发者联盟

Java 华为 jdk Openjdk 毕昇 JDK

开源之夏来啦,欢迎报名 Apache APISIX 项目!

API7.ai 技术团队

开源 后端 技术人生 API 网关

创业邦南立新:搭建创新生态,是奔向万亿美金市值的必经之路

创业邦

用 CloudQuery 管理和操作数据库,更高效更安全

BinTools图尔兹

运维 dba 数据库管理工具

基于传感器的人体生命体征监控技术

不脱发的程序猿

物联网 传感器 智能医疗 人体生命体征监控技术

从零开始学习3D可视化之模型动画

ThingJS数字孪生引擎

可视化 模型 大屏可视化 数字时代 3D可视化

centos7使用

xujiangniao

Linux

一个超牛逼的 GitHub 项目,标星高达55.3Kstar,附项目源代码

Java架构师迁哥

程序员需要了解数据库知识么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

尹文敏

云计算 阿里云 云原生

准备3个月,面试10分钟,Java中高级岗面试为何越来越难?

Java架构师迁哥

Flink + Iceberg 在去哪儿的实时数仓实践

Apache Flink

flink

上架Steam一周的付费游戏,开源了!其实你能“薅”的不止一只羊

程序员生活志

杨臻:人工智能在软件工程领域的应用_文化 & 方法_杨臻_InfoQ精选文章