展会信息港展会大全

人工智能:理论,技术与工具
来源:互联网   发布日期:2011-08-18 00:12:18   浏览:8775次  

导读: 人工智能:理论,技术与工具 notbelonghere 发表于 2007-11-13 15:21:15 人工智能:理论,技术与工具(简化版) 最近一直在构思写一个人工智能的程序,但总是迟迟下不了手,主要原因是没有找到好的工具足以支撑起应用。所以,在这里探讨一下人工智能与其相关...

人工智能:理论,技术与工具

notbelonghere 发表于 2007-11-13 15:21:15

人工智能:理论,技术与工具(简化版)

最近一直在构思写一个人工智能的程序,但总是迟迟下不了手,主要原因是没有找到好的工具足以支撑起应用。所以,在这里探讨一下人工智能与其相关的工具,这里虽然有编程语言的比较,但并不想引起语言之争,而仅仅是探讨在特定人工智能环境和需求下最适用的工具。

1。人工智能的简单层次。

假设我们成功编写了一个人工大脑的程序,它具有相当的智能。所谓成功,我们在这里有一个最小前提,它至少可以理解自身的源代码,也就是说这个人工大脑可以理解自己是如何被源代码所构成的。我们做这个假设的原因很简单,既然是智能的,那理解自身源代码应该是“天生俱有”的能力,类似于人类可以生出自己的后代,而不是靠上帝来生成自己。这里所说的理解,并非单指人类思想概念上的“理解”,也指机制上的理解。这就好比人类可以生出自己的后代,可是这并不是意味着人类懂得本身”源代码“是如何构成的,但人类却具有生出下一代的能力,这是为什么呢?显然人类体内有这样一套机制,它能够造出下一代,如果我们从理论上做极端的推论,就会发现这套机制本身是在理解自身DNA代码的基础上造成的。这就造成了一个现象,我们不懂自己是如何构成,可是身体却告诉我们这样一个事实,它明白人类是如何构成自己的。所以,理解在人工智能上被分为两个层次:

第一层,机制上的理解与其产物。
第二层,自身大脑的自理解。

人类在人工智能上的困境可以理解为在这两个层次之间的差距。换句话说,人类如果完全理解自己是如何构成的,那么所谓的“人工智能”问题也就不存在了,而且人类可以轻而易举的改造自己。这一情形放到我们所制造的人工大脑,也有相同的情况。所以一开始就有这样的问题,我们该让这一个人工大脑理解到哪一个层次?如果只理解到第一层次,那么将有这样的情形:

当我们在制造这个人工大脑程序的时候,在理论上可以称为它的上帝,而从此之后它将自己生成自己,不再需要我们这个“上帝”的推动。然后过一段时间之后,人工大脑将会迷失自我:我是什么?我的“人工智能”又是什么?

暂且不论由此可以引出的更多话题,我们可以轻易发现,世界上的所有生物都能达到第一层次,也就是:人工智能的必要前提,达到第一层次,具有生成自己的能力。所以这就引出了一个极为现实的话题,如果我们在计算机上编写这个人工大脑的程序,需要用什么样的语言?让它达到第一层次的最基本要求?


2.编程语言与工具比较。

实现第一层次意味着,将来人工大脑可以生成自已,有了这个前提之后,人工大脑就可以在第二层次上实现自我改善,自我优化。动物的源代码可以简单视为DNA。当我们在编写人工智能程序的时候,不可避免要思考用什么编程语言?笔者在这里做一个简单的比较。

可移植性选择,人工智能程序在理论上应该可以运行于一切的硬件。因此java和c#自然而然成了首选。笔者很喜欢这两门语言,很不幸它们的优点也是缺点,原先的设计方案都运行于虚拟机,这实现了一次编译到处运行的目标,却有可能因为虚拟的存在而导致了运行效率的下降。对于一个人工智能的程序而言,我们渴望对智能的最大化也将导致对效率的最大化追求。一个折衷的方案是使用这些高极语言却不使用它们的虚拟机,这可以通过把它们编译为特定硬件的本地代码而不是某种中间语言代码来实现。下面介绍两个可生成本地代码的java编译器

<GCJ>
http://gcc.gnu.org/java/
这是GNU自由软件基金会的一个java的编译器,可以生成普通PC上的x86本地代码。

<Excelsior JET>

Excelsior 的java编译器,笔者关注了很久,各方面性能要比GCJ好得多,但商业版价格相当的昂贵!

在这里,笔者之所以不推荐用C,C++等编程语言的原因比较简单,它们功能很强大,属于中/高级或混合语言,但对于人工大脑而言,让它理解那些程序复杂度将按指数极别上升,而越高极的语言越有较好的结构化,复杂度接近于线性,更适合机器理解自身源代码。笔者个人比较喜欢微软的C#语言,设计上似乎比java更为先进,还有一个重要的原因是当我们试图让机器理解自身源代码的时候,可以通过Reflection来进行,而C#在这一点是似乎做得很好,可是很遗憾一直没有找到可以生成本地代码的C#编译器,http://www.remotesoft.com/ 这里有一个网站声称可以把.Net代码转换为x86本地代码,但笔者一直没有机会尝试。

对于人工智能的编程工具而言,D语言是非常值得关注的,http://www.digitalmars.com/d/index.html 这里是作者的主页,据称它具有很多高低级语言优点的同时,还可以生成本地代码。然而比较遗憾的是D语言一直在发展的不稳定期,似乎没有固定的规范,作者的个人化色彩有点浓,版本在升的同时语法也一直在变,而且编译器本身经常有Bug,让人有点无所适从。如果D语言能够固定一个语言规范的话,它将会是一门很棒的编程语言了。


作者简介:最近在构思和实践人工大脑,为了实现上面的简单目标,甚至花了三个月时间到现在写一门适合人工智能的编译器,该语言以C# 3.0为原型,进行适度的增减,生成本地代码,目前仍然在工作中。人工智能是一条非常曲折的路,复杂度也相当的高,有时候空谈理论意义不太,所以我一直坚持边做边思考,发此文与大家一起勉励!

 

        本文的标签: 人工智能 

    评论( ) '发表评论 | 阅读(1472) notbelonghere的blog 

所有评论

  1 

看看jake

jake 于 2007-11-14 12:30:50 回复:人工智能:理论,技术与工具

多谢给这里提供这样的好文章!

提几个个人观点,仅供参考:

1、为什么人工智能程序必须要先理解自身的源代码?我知道你试图在说这是生命的一种基本的能力,例如人类的自我繁殖,但我想问的是,这种能力的目的何在?就人工智能程序来说,它理解了自身的源代码有什么好处?

我对此问题的答案是,这种能够理解自身源代码的程序原则上可以实现对自己行为的某种预测,就像你做一件事情之前可以先在脑中预演一便此要做的事情一样。即程序具备了模拟自身源代码的能力。这样的话,我认为最小的人工智能程序应该至少具备两个功能:(1)获取自身的源代码,(2)一个实时的通用编译器,该通用编译器应该可以解释自身源代码的那种语言。这样程序可以在作出一个行动之前编译自身的源代码预测自己应该怎样做。我认为具有这种能力的程序才算真正的自我理解。

2、关于编程语言,我也有和你类似的困惑,似乎目前的编程语言都不是为了设计这样的两层代码的。具体说来,是这样的,如果一个语言的编译器本身很小的话,那么很有可能你要实现一个描述自身源代码的程序就很长,很复杂。反过来,如果一个语言的编译器足够强大,那么,实现对这个语言的编译器就会很复杂。这是一个二难的问题。

我不知道对于java和C#来说实现这样的程序有多困难。

3、为什么要把你想设计的程序叫做人工脑?似乎和人类的大脑想差很远,而且你很难说服别人你这个程序如何完成高级的AI任务,例如模式识别,机器下棋等等。但我认为“最小智能”程序这个名字似乎很适合你的目标。


>notbelonghere在人工智能:理论,技术与工具中写道:
---------------------------

人工智能:理论,技术与工具(简化版)

最近一直在构思写一个人工智能的程序,但总是迟迟下不了手,主要原因是没有找到好的工具足以支撑起应用。所以,在这里探讨一下人工智能与其相关的工具,这里虽然有编程语言的比较,但并不想引起语言之争,而仅仅是探讨在特定人工智能环境和需求下最适用的工具。

1。人工智能的简单层次。

假设我们成功编写了一个人工大脑的程序,它具有相当的智能。所谓成功,我们在这里有一个最小前提,它至少可以理解自身的源代码,也就是说这个人工大脑可以理解自己是如何被源代码所构成的。我们做这个假设的原因很简单,既然是智能的,那理解自身源代码应该是“天生俱有”的能力,类似于人类可以生出自己的后代,而不是靠上帝来生成自己。这里所说的理解,并非单指人类思想概念上的“理解”,也指机制上的理解。这就好比人类可以生出自己的后代,可是这并不是意味着人类懂得本身......

jake的blog  '发表评论

  2 

看看notbelonghere

notbelonghere 于 2007-11-14 14:48:37 回复:人工智能:理论,技术与工具


 

1、主要是出于对进化论的思考,进化论把进化原因归结于突变,就好比把人发财的原因都归结于中六合彩,这有合理的成份,但不具有普遍性,所以引起了很多争论。理解是进化的基础,如果不在理解的基础上改进,也就很难叫做进化了。理解自身源代码意味着进化是主动和强化的,而不是某种离奇的、不可解释的、非可自控的“突变”。

2、我和你理解的有一点偏差,我的原意不是“自描述”的意思,而是没有自描述的情况下,自行反编译理解代码,但这样在实现上是极端困难的,困难度类似于人类基因组计划http://www.cbi.pku.edu.cn/chinese/documents/bioinfor/HGP/index.html,所以折衷了两种方案:加入关健的自描述信息到代码中,然后让程序自行反编译。这一个关健点的自描述类似于基因功能的自描述。并不需要对所有代码进行描述和解释,也间接降低了困难度。自描述在C#中主要使用Attribute类和代码文档注释来实现,只要能生成本地代码,在实现中已经足够了(我不太清楚D语言是否有类似于C#代码注释和属性这样的功能。这里所说的代码注释是可以反查的,而不是编译后去掉的源代码注释!),例如

[someAttribute="hello, this is ai"]
public class Some_AI_Class{
     ///<summary>This is doing something...</summary>
  public void doSomething(){
     ....
  }
}

3、人工大脑只是在我的上下文中假设的一个程序,理论上它足够聪明,相当于人类。但这也只是假设而已。不把它叫做人工智能,因为从整体的概念来看,它只是一个机器人的关健部件而已。叫人工智能还是人工大脑都没有关系。



>jake在回复:人工智能:理论,技术与工具中写道:
---------------------------

多谢给这里提供这样的好文章!

提几个个人观点,仅供参考:

1、为什么人工智能程序必须要先理解自身的源代码?我知道你试图在说这是生命的一种基本的能力,例如人类的自我繁殖,但我想问的是,这种能力的目的何在?就人工智能程序来说,它理解了自身的源代码有什么好处?

我对此问题的答案是,这种能够理解自身源代码的程序原则上可以实现对自己行为的某种预测,就像你做一件事情之前可以先在脑中预演一便此要做的事情一样。即程序具备了模拟自身源代码的能力。这样的话,我认为最小的人工智能程序应该至少具备两个功能:(1)获取自身的源代码,(2)一个实时的通用编译器,该通用编译器应该可以解释自身源代码的那种语言。这样程序可以在作出一个行动之前编译自身的源代码预测自己应该怎样做。我认为具有这种能力的程序才算真正的自我理解。

2、关于编程语言,我也有和你类似的困惑,似乎目前的编程语言都不是为了设计这样的两层代码的。具体说来,是这样的,如果一个语言的编译器本身很小的话,那么很有可能你要实现一个描述自身源代码的程序就很长,很复杂。反过来,如果一个语言的编译器......

  3 

看看amingsc

amingsc 于 2007-11-19 3:46:59 回复:人工智能:理论,技术与工具

我想说三点我的理解,可能有不对的地方还请批评指正呵~

1.你所谓的“第一层次理解”如果没有‘第二层次的’参与根本不谈不上真正的理解,你此处所谓的理解应该就是简单的机械的解析、解释或者表达而已,对这个更自然的做法就是进化,进化无需理解整个进化过程,只需机械的复制与随机的变异即可,进化的方向由环境决定;

2.已有人工大脑这个研究领域,你可以读读德·加里斯的《智能简史》,他的CBM就是对人工神经网络进行进化产生智能模块,然后将多个模块组合起来构成人工大脑的

3.在动手具体去实现工具之前你完全可以先写一篇论文来讲你想法,这样自然会有人有兴趣为你实现相关的工具,这样你就可以投入更多的精力在主题上;

amingsc的blog  '发表评论

  4 

看看notbelonghere

notbelonghere 于 2007-12-1 18:18:40 回复:人工智能:理论,技术与工具

谢谢你的回复,前一段时间我研究过德·加里斯和他的《智能简史》,我不太喜欢他的看法,有点危言耸听的味道。他的CBM主要是基于硬件的,即所谓可进化硬件。个人觉得他的理论和真正的人工大脑还有想当距离,尽管他有“人工智能之父”这样的称号。

在人工大脑方面,我有一套自己的想法,在某些理论上已经有了轮廓,但目前还不够成熟得用论文去精确和量化的描述,即使要描述,也要先做实验,所以,边做边思考就成了一种很好的方式。:-)

>amingsc在回复:人工智能:理论,技术与工具中写道:
---------------------------

我想说三点我的理解,可能有不对的地方还请批评指正呵~

1.你所谓的“第一层次理解”如果没有‘第二层次的’参与根本不谈不上真正的理解,你此处所谓的理解应该就是简单的机械的解析、解释或者表达而已,对这个更自然的做法就是进化,进化无需理解整个进化过程,只需机械的复制与随机的变异即可,进化的方向由环境决定;

2.已有人工大脑这个研究领域,你可以读读德·加里斯的《智能简史》,他的CBM就是对人工神经网络进行进化产生智能模块,然后将多个模块组合起来构成人工大脑的

3.在动手具体去实现工具之前你完全可以先写一篇论文来讲你想法,这样自然会有人有兴趣为你实现相关的工具,这样你就可以投入更多的精力在主题上;

......

  5 

看看guihuanlin

guihuanlin 于 2007-12-19 22:16:21 回复:人工智能:理论,技术与工具

       我不知道什么是人工智能,不知道相关的理论,也不知道相关的工具,看到你们的想法,看到一些人的研究,有点个人见解,分享如下:

        智能,它本身不属于工具,看见很多人都在找“工具”编写“工具”,这种路线永远都找不到“工具”。智能,是一种思维。思维,源于目的,目标,价值,性格,情绪,等一切能够影响决定的内在的和外在的因素。人,本身已经出现了,存在了,还要找工具编写出来?那么还要找能够编写人的工具的工具出来??人就在这里呀!这如同一个刚吃饱饭的人在找饭吃,没有饭,又在找种子,要吃还要种下去等到收获,才能再吃,这是在做什么呢?人已经在这里,为什么还要研究怎么来的呢?还要去研究如何构成?既然人已经存在,那么研究的方向应该是以人为平台。向上研究。很多年了,很多人研究了很久,站在楼上,还在研究楼底的地基应该如何设计,需要多少水泥,需要多少根柱子。。。。我们想到天上去,想飞的更高,站在自己的位置,继续加高就可以了。

       类人型思维,应该研究人,以人的思维成长为研究目标。而不在于研究工具,更不在于研究工具的工具。小孩出生什么都不会,为什么后来会很多东西呢?

        首先,我们有自己的大脑,能够独立思考分析问题。

        其次,我们拥有记忆,能够纪录经历,不断充实经验。

        然后,我们拥有目标,并努力实现目标。

        最后,有一套保障系统,能够调节各种平衡。

        这4个条件结合起来,便构成了一种能够学习,不断成长的思维。以此为目标发展的思维便是 类人型思维。

         我们每个人,从上学开始,老师就教育我们,要有理想,理想是什么?就是目标,是动力。就是思维的出发点。人的一生中,总是在挑战一个又一个的目标,所以人类才能前进。那么, 类人型思维 应该确立目标,是有目的的。而目标的改变,又是由于环境的变化,其实就是人本身目标变化的原因。

         当我们遇到问题,面临选择,那么我们会分析目前的可选答案,然后搜索记忆中的经验与经历,对比之后才会做出选择,还考虑情绪因素,环境因素,最终才有一个决定。从而影响行为。然而,所有的决定都是临时的,最终的大决定是不变得,那就是生存。

         在一次分析“生存式病毒”的时候,无意间想到了 类人型思维,只要是有目的的能够学习成长的程序,或者不能说程序,应该是一种未知智能,那么称他为类人型思维。这才是正确的发展方向。

guihuanlin的blog  '发表评论

notbelonghere 于 2007-12-22 9:26:38 回复:人工智能:理论,技术与工具

赞助本站

人工智能实验室

相关热词: 人工 智能 理论 技术 工具

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港