NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-10-07 14:012064

评论

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

数仓备机DN重建:快速修复你的数仓DN单点故障

华为云开发者联盟

数据仓库 主机 华为云 备机 DN

数字人民币双层运营架构下缘何衍生出2.5层?看完才明白,原来这么重要!

CECBC

奇亚矿机系统源码,Bzz节点分币系统搭建

使用高级视频质量工具 AVQT 评估视频 | WWDC 演讲实录

网易云信

机器学习 算法 音视频

CloudQuery 安全系列(一): Http 与 Https

BinTools图尔兹

数据库 网络安全 https 数据安全 数据库管理

安卓工控主板显示接口有哪些呢?

双赞工控

安卓主板 工控主板 ARM开发主板

性能利器Takin来了!首个生产环境全链路压测平台正式开源

TakinTalks稳定性社区

开源 高可用 性能测试 压力测试

Vue Conf关于Vite的分享给我带来的启发

前端森林

vite esm Vue 3

未来法律科技发展现五大趋势,区块链、AI、大数据吸引资本目光

CECBC

Windows 11 这项亮点功能源自英特尔Bridge技术支持

E科讯

41 位 Contributor 参与,1574 个 PR,不容错过的版本更新!

SphereEx

网络攻防学习笔记 Day55

穿过生命散发芬芳

网络攻防 6月日更

让AI发展避开“暗礁”,索信达控股推出自研区块链+联邦学习解决方案

索信达控股

区块链 金融科技 联邦学习 金融监管 风控

解密开源技术的污点

WorkPlus

5W1H聊开源之Who和How——谁、如何参与开源?

禅道项目管理

开源 开源文化

存储大师班:NFS 的诞生与成长

青云技术社区

存储 分布式存储 NFS

Java 的函数式接口(必懂知识点!)

Java MySQL 程序员 面试

CloudQuery 使用教程之《No.2数据查询(上)》

BinTools图尔兹

sql dba 数据库管理工具 国产数据库 开发运维

数字化时代,为什么解决信任问题是科技公司最重要的事情?

CECBC

字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构

Java 编程 程序员 架构 面试

阿里最新秋招面经,腾讯/美团/字节1千道Java中高级面试题

Java 编程 程序员 架构 面试

iOS面试残篇-辟邪剑谱

程序员 面试 编程之路 移动开发 iOS 知识体系

透过 3.0 Preview 看 Dubbo 的云原生变革

try catch

深入C语言中数据的存储

小写丶H

我的新书《C++服务器开发精髓》终于出版啦

张小方

c++ 网络编程 Linux服务器开发 C++后端开发 网路通信

dubbo 2.7应用级服务发现踩坑小记

捉虫大师

dubbo 服务发现

多路三线RTD电阻温度采集电路设计方案

不脱发的程序猿

电路设计 硬件开发 RTD电阻 温度采集电路

深度学习分类任务常用评估指标

华为云开发者联盟

机器学习 深度学习

在北鲲云超算平台上做球体落入水中的流固耦合仿真模拟记录

北鲲云

社群编码识别黑灰产攻击实践

百度Geek说

技术解密 |阿里云多媒体 AI 团队拿下 CVPR2021 5 冠 1 亚成绩的技术分享

阿里云视频云

阿里云 AI 计算机视觉 经验分享 CVPR

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