有没有人尝试过将代码编译成神经网络并对其进行演化?
您知道是否有人尝试将高级编程语言(java、c# 等)编译成循环神经网络,然后对其进行演化?
我的意思是,包括内存使用在内的整个过程都存储在神经网络的图中,我正在谈论复杂的程序(考虑自然语言处理问题)。
当我说神经网络时,我指的是传播激活的有向加权图,节点是其输入的函数(线性、S形和乘法以保持简单)。
此外,这是人们在遗传编程中的意思还是有区别?
Do you know if anyone has tried to compile high level programming languages (java, c#, etc') into a recurrent neural network and then evolve them?
I mean that the whole process including memory usage is stored in a graph of a neural net, and I'm talking about complex programs (thinking about natural language processing problems).
When I say neural net I mean a directed weighted graphs that spreads activation, and the nodes are functions of their inputs (linear, sigmoid and multiplicative to keep it simple).
Furthermore, is that what people mean in genetic programming or is there a difference?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
神经网络并不是特别适合不断发展的程序;他们的优势往往在于分类。如果有人尝试过,我还没有听说过(考虑到我几乎没有接触过神经网络,这并不奇怪,但我目前活跃在通用人工智能领域)。
神经网络对于生成程序没有用的主要原因是它们基本上代表一个数学方程(数字,而不是函数)。给定一些数字输入,您将得到一个数字输出。在比简单算术更复杂的程序上下文中解释这些是很困难的。
遗传编程传统上使用 Lisp,这是一种纯函数式语言,并且程序通常是通常显示为树形图(有时看起来类似于某些神经网络图 - 这是您困惑的根源吗?)。这些程序是通过在程序之间交换树的整个分支(一个函数及其所有参数)或随机重新生成整个分支来进化的。
关于这两个主题当然有很多好的(和很多坏的)参考 - 我没有列出它们,因为不清楚你真正感兴趣的是什么。维基百科涵盖了这些技术中的每一种,并且一个好的起点。
Neural networks are not particularly well suited for evolving programs; their strength tends to be in classification. If anyone has tried, I haven't heard about it (which considering I barely touch neural networks is not a surprise, but I am active in the general AI field at the moment).
The main reason why neural networks aren't useful for generating programs is that they basically represent a mathematical equation (numeric, rather than functional). Given some numeric input, you get a numeric output. It is difficult to interpret these in the context of a program any more complicated than simple arithmetic.
Genetic Programming traditionally uses Lisp, which is a pure functional language, and often programs are often shown as tree diagrams (which occasionally look similar to some neural network diagrams - is this the source of your confusion?). The programs are evolved by exchanging entire branches of a tree (a function and all its parameters) between programs or regenerating an entire branch randomly.
There are certainly a lot of good (and a lot of bad) references on both of these topics out there - I refrain from listing them because it isn't clear what you are actually interested in. Wikipedia covers each of these techniques, and is a good starting point.
遗传编程与神经网络有很大不同。你所建议的更像是遗传编程——对程序进行小的随机改变,可能“培育”成功的程序。这并不容易,我怀疑它能否在大型程序中成功完成。
您可能会更幸运地提取程序中一小部分但很关键的部分,其中有一些您可以尝试改进的特定“方面”(例如参数值)。
谷歌是你的朋友。
Genetic programming is very different from Neural networks. What you are suggesting is more along the lines of genetic programming - making small random changes to a program, possibly "breeding" successful programs. It is not easy, and I have my doubts that it can be done successfully across a large program.
You may have more luck extracting a small but critical part of your program, one which has a few particular "aspects" (such as parameter values) that you can try to evolve.
Google is your friend.
一些复杂的反病毒程序以及复杂的恶意软件使用形式语法和遗传运算符,通过神经网络相互进化。
以下是有关该主题的示例论文: http://nexginrc.org/nexginrcAdmin/PublicationsFiles/ raid09-sadia.pdf
资料来源:我几年前参加的一门人工智能课程。
Some sophisticated anti-virus programs as well as sophisticated malware use formal grammar and genetic operators to evolve against each other using neural networks.
Here is an example paper on the topic: http://nexginrc.org/nexginrcAdmin/PublicationsFiles/raid09-sadia.pdf
Sources: A class on Artificial Intelligence I took a couple years ago.
关于您的主要问题,据我所知,没有人在编程语言上尝试过这一点,但是有 进化计算领域的一些研究可以与类似的东西进行比较(但这显然是一个牵强的比较)。出于可能的兴趣,我问了一个关于 sel 的 类似问题 - 不久前改进了编译器。
有关遗传算法和遗传编程之间的区别,请查看
神经网络与遗传算法或遗传编程无关,但显然您可以使用其中任何一个来进化神经网络(就像任何其他重要的事情一样)。
With regards to your main question, no one has ever tried that on programming languages to the best of my knowledge, but there is some research in the field of evolutionary computation that could be compared to something like that (but it's obviously a far-fetched comparison). As a matter of possible interest, I asked a similar question about sel-improving compilers a while ago.
For a difference between genetic algorithms and genetic programming, have a look at this question.
Neural networks have nothing to do with genetic algorithms or genetic programming, but you can obviously use either to evolve neural nets (as any other thing for that matters).
你可以看看 genic-programming.org 他们声称他们已经发现了一些接近基因编程产生的人类竞争结果。
我以前没有听说过自我进化和自我改进的程序。它们可能作为像 Genetic-programming.org 这样的特殊研究工具而存在,但没有任何可靠的通用用途。即使它们存在,它们也非常限于特殊目的操作,例如阿兰提到的恶意软件检测。
You could have look at genetic-programming.org where they claim that they have found some near human competitive results produced by genetic programming.
I have not heard of self-evolving and self-imrpvoing programs before. They may exist as special research tools like genetic-programming.org have but nothing solid for generic use. And even if they exist they are very limited to special purpose operations like malware detection as Alain mentioned.