是否可以训练神经网络进行编程

数据挖掘 机器学习 神经网络 深度学习 数据挖掘 大数据
2022-01-22 15:38:01

我想训练我的神经网络来完成用不同语言编程的任务。所以,我想知道是否可以训练神经网络进行编程?

3个回答

这取决于您想要实现什么样的功能。本质上,经过训练的神经网络是一个映射函数,它接受一些输入并产生一些输出,然后可以进行各种解释(例如使用某个阈值进行分类)。

因此,如果您的程序所需的功能将提供计算功能,您可以将训练好的神经网络视为程序本身。多个机器学习库可以轻松实现这一点,生成一个包含经过训练的神经网络的类实例,并允许您像任何其他函数一样使用给定参数调用它。

但是,我假设您正在寻找一种方法来输出具有控制结构等的复杂计算机代码 - 不幸的是,这很难实现,因为您需要一种有效的方法来将神经网络输出解释为代码 - 而不仅仅是命令,但它们的结构和顺序也是如此。这种解释会非常复杂,以至于任何神经网络训练方法都很难收敛到任何合理的东西。

为了缓解这个问题,您可以尝试“直接”操作和优化代码的机器学习技术。其中最著名的是遗传编程 - 其中计算机程序被编码为一组“基因”,然后通过遗传算法技术(重组大部分代码的交叉和随机改变小部分代码的突变)进行改进)。这已成功应用于一些编程问题,例如河内塔(参见http://www.oakgp.org/towers-of-hanoi)。

François Chollet 在他的《 Python 深度学习》一书中谈到了这一点

9.2 深度学习的局限性

可以通过深度学习实现的应用空间几乎是无限的。然而,许多应用程序对于当前的深度学习技术来说是完全遥不可及的——即使有大量的人工注释数据也是如此。例如,假设您可以组装一个由产品经理编写的包含数十万甚至数百万软件产品功能的英语描述的数据集,以及由一个团队开发的相应源代码。工程师来满足这些要求。即使有了这些数据,你也无法训练深度学习模型以读取产品描述并生成适当的代码库。这只是众多例子中的一个。一般来说,任何需要推理的东西——比如编程或应用科学方法——长期规划和算法数据操作对于深度学习模型来说都是遥不可及的,无论你向它们提供多少数据。即使使用深度神经网络学习排序算法也非常困难。

这是因为深度学习模型只是将一个向量空间映射到另一个向量空间的一系列简单、连续的几何变换。它所能做的就是将一个数据流形 X 映射到另一个流形 Y ,假设存在从 X 到 Y 的可学习连续变换。深度学习模型可以解释为一种程序;但是,相反,大多数程序不能表示为深度学习模型——对于大多数任务,要么不存在解决任务的相应深度神经网络,要么即使存在,它也可能不可学习:对应的几何transform 可能过于复杂,或者可能没有合适的数据来学习它。

通过堆叠更多层和使用更多训练数据来扩大当前的深度学习技术只能从表面上缓解其中一些问题。它不会解决更基本的问题,即深度学习模型在它们可以表示的内容方面受到限制,并且您可能希望学习的大多数程序都不能表示为数据流形的连续几何变形。

在文献中我能想到的最接近的东西是 pix2code,作者在其中训练了一个 GAN,以根据预期 UI 布局的输入图像为 UI 生成简单的 DSL 代码。

https://arxiv.org/pdf/1705.07962.pdf