大家都知道神经网络目前还不能“编程”,但现在一项新的工作“Neual Complete”,朝着这个方向迈出了第一步。程序员 Pascal van Kooten训练了一个神经网络,可以自动补全另一个神经网络的代码,相当于神经网络在“编程”。现代码已在 Github 开源。
人工智能具有解决软件开发中的一个古老问题的潜力——代码编写或操纵其他代码的能力的概念已经存在了很长时间,一般称为元编程(它实际上起源于20世纪50年代末的Lisp),它解决的难题,大多数目前都还在人们的想象之中。
使用人工智能,计算机能够理解一个软件开发项目从无到有的发展历史过程中的所有代码,并立即改进或者删除单独一行代码中的bug,不管是用什么编程语言。即便是一个缺乏经验的或者中等水平的程序员都能讲清楚让计算机自我编程的原理。由此,一个癌症项目的研究可能几天或者几个月就能完成,而不需要花费好几年的时间,这将带来显著的进步。
最近在Github上, 我们又发现了这一技术的新动向,研究员kootenpv发布了一个名为Neural Complete(神经网络补全技术)的模型,使用自动补全技术,研究者训练了一个神经网络,用于帮助写神经网络的代码。
听起来有些拗口,下面这个动图可以清晰地看到结果:
Neural Complete
Neural Complete(神经网络补全技术)是一种基于生成LSTM 神经网络的自动补全技术,它不仅用python代码进行训练,但也被用于改善 python 源代码。
Neural Complete 的训练基于包含了keras 输入的文件。其结果是得到一个升级网络,经过训练后,可以帮助写神经网络的代码。
这一神经网络补全的不是一个单词,而是一整行的代码。使用前面行的代码信息来提供建议。
你可以想象,未来,每个人都有一个神经网络,基于自己的神经网络来自动地完成他们的个人脚本。
第一步的model已经写好,建议把它作为一个变量(model=Sequential)。
第二步的model已经写好,建议用它来代替(model.add(……))。结果显示,它可以使用文本。
最后一行的代码包含了一些错误,但是,如果有更多的数据和更加多的文本,它会变得更精准。
模型
Neural Complete包含了两个模型:一个基于字符的模型还有一个python表征的模型。基于字符的模型带来的好处是,它在任何时刻都能补全;而python表征的模型只有在完全表征的状态下才能起作用(它不能完成一个词的补全)。但是,基于表征的模型是基于更高级别的单元(语义)的,它必须在大多数的时候都要做到可以理解。
基于字符的模型会参考之前的80个字符,而表征模型会参考此前的20个表征。
抓取数据
不幸的是,Github的API 不能通过文件名进行搜索,所以我写了一个抓取的脚本来收集专门针对keras源代码训练的python数据。
您可以更改搜索查询以收集您自己的数据。不要超过它来“骚扰”github。你需要更多的合理的结果!
这些模型只需要在26个脚本的上进行训练。
前端与后端
后端:使用keras来训练模型
前端是一个非常薄的神经网络层,与后端形成互通,以接收自动补全的建议。用Angular2 来写。dist文件夹已被包括在内,你可以轻松地自行运行它,无需求助于任何人。
结语
对神经网络的代码进行自动补全,里面涉及的核心原理是了让一个神经网络模型通过训练了解另一个神经网络,进而能实现自动完善代码。
迄今为止,机器学习的专家倾向于聚焦那些为特定任务开发的AI 应用,比如人脸识别、自动驾驶、语音识别甚至是搜索。但是,如果这些类似的算法能够在不需要人为帮助、解释或者干预的情况下,理解它们自身的代码结构呢?正如他们理解人类的语言和图像一样。
如果代码开始对自己进行分析、自我修正并提升,且速度比认为的更快,那么技术的突破可能会来得更快。由此带来的可能性是无止境的:医学的进步、更加自然的机器人、更智能的手机、更少bug的软件,更少的银行欺诈等等。
- Neural Complete Github 地址:https://github.com/kootenpv/ne … twork
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/255600.html