图灵机可以计算所有可计算函数吗为什么?

0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取

数据的本质是存储信息的介质,而模式(pattern)是信息的一种表现形式。在一个数据集中,模式有很多不同的表现形式,不管是在传统的机器学习训练的过程,还是是深度学习的训练过程,本质上都是在进行模式提取。

而从信息论的角度来看,模式提取也可以理解为一种信息压缩过程,通过将信息从一种形式压缩为另一种形式。压缩的过程不可避免会造成信息丢失。

笔者这里列举几种典型的体现模式提取思想的算法。

循环神经网络(recurrent neural network)或 RNN 是一类用于处理了序列数据的神经网络。我们这个章节来针对RNN的一些基本概念展开讨论。

我们先从参数共享机制说起,这是RNN循环神经网络的一个核心特点,也是RNN能够拥有某些强大性能的原因之一。

参数共享机制使得神经网络对序列数据中的模式具备了一定的平移不变泛化能力,以及模式记忆能力。

本章我们将计算图的思想扩展到包括循环。

这些周期代表了变量自身的值在未来某一时间步会对自身值的影响。这样的计算图允许我们定义循环神经网络。

我们使用图中的每一个节点来表示一个变量。

变量可以是标量、向量、矩阵、张量、或者甚至是另一类型的变量。

为了形式化我们的图形,我们还需引入操作(operation)这一概念。操作是指一个或多个变量的简单函数。

我们的图形语言伴随着一组被允许的操作。我们可以通过将多个操作复合在一起来描述更为复杂的函数。

如果变量 y 是变量 x 通过一个操作计算得到的,那么我们画一条从 x 到 y 的有向边。我们有时用操作的名称来注释输出的节点,当上下文很明确时,有时也会省略这个标注。

双向lstm之后用flattern和DNN进行压平和整合,最后softmax得到单个向量的输出。

0x2:基于LSTM生成城市名称

RNN具备记忆性,在经过大量训练后可以学习到时序数据的潜在规律,并且可以使用这种规律随机生成新的序列。

1. 如何给RNN输入训练样本

RNN可以学习到数据中的时序规律,但是作为模型设计者,我们需要明确地定义:该样本集中时序规律的形式是什么

例如笔者在项目中遇到的一些典型场景:

1. 你有一段时序向量数据,并且拥有对这个时序向量数据的一个 0/1 label,即二分类问题,这在安全攻防场景中很常见;
2. 你有一个预料库,该语料库中包含了各种句子。你希望让RNN从中学习到隐藏的”句式、语法模式“。我们知道,语言对话是由词/句/短语/段落组成的,我么可以采取”滑动窗口“的方式,逐段地将整个句子分成多个【X(可能长度为7), Y(可能长度为1)】的训练样本,通过让RNN学习 X序列 和紧随其后的 Y 字符的序列特征,等效地让RNN学会语料库中的”句式、语法模式“;
3. 同理,基于图像生成标注的道理也是类似的(同2);

我们收集了131个大小在4096bytes内的JSP webshell文件,这批样本作为训练语料库。

需要特别注意的一点是,每个文件之间理论上应该是一个独立的样本集,最合理的做法是单独从每个文件中以ngram方式提取序列。

我们这里为了简单起见,把所有文件concat到一个整体的字符串中,进行向量化,读者朋友在实际项目中要注意这点。

采集滑动窗口进行词模式提取,窗口越小,提取到的词模式特定空间就越大,描述能力就越强,相对的,训练难度也越大,举例说明:

RNN是一种sequence to sequence的神经网络,因此我们需要给模型提供一个种子seed字符,作为启动字符,选择这个字符的原则也很简单,选择对应编程语言开头的第一个字母。

4. 循环到直接网络输出EOF或者达到开发者设定的filesize 5. 最终得到的序列就是一个目标webshell序列

——《计算与认知》解读
(另,图表与符号显示不出)

摘 要:派利夏恩对一个认知者的特征理解是:基于表征而采取行动的。如果解释这些行为的特征,我们就必须说明他们的知识和目标,并且借助某些普遍原理把他们的表征与行为联系起来。这样的认知研究既与布伦塔诺的“意向性”理论相关,又与来自计算机科学的观念相连。在认知科学建构初期,派利夏恩提出心智的计算是一种模型,而不单单是一种模拟。
关键词:表征; 计算; 功能建构

要理解派利夏恩在《计算与认知》中对认知科学提出的建构思想,我们首先要弄清两个概念——表征和计算。
“表征”(或“表达”;representation),同“处理”(processing)或“计算”(computation)都是认知科学中最基本的概念。而心灵哲学中一般对心理状态M有内容P这一断言的充分必要条件提供说明。我们知道,与外部表征不同,内部心理表征不能被直接观察到。就表征与被表征的关系来说,表征世界由心理表达组成(心理语系统);被表征世界是外部世界和内部世界。
派利夏恩认为所谓表征问题起源于一个唯物主义者的疑问,在一个物理规律所支配的世界中,外在的而无因果关系的实体(非存在物)所描述的行为规律性如何可能?布伦塔诺认为这个问题无法解答,除非我们承认心理现象不是由物理规律而是由心理规律本身决定的。派利夏恩的解答则是:“行为的原因不是数字、期望未来事件或其他意向性对象,而是这些对象的物理上例示的内部表征,即物理代码或符号。” [1](P27)
比如心灵哲学常常讨论的命题“我当下的行为是由我当下的思想引发的。”换言之,“我的行为是由我大脑中的特定状态引发的。”就好像我写下一句子“今天天气真好,阳光灿烂。”那么这句子就可根据特定规则(逻辑的、启发式的、联结性的规则等)视做与代码的表征内容合理地相关联。之所以如此,是因为我写的句子中词语的意义是从我的心理状态的语义学和我用这些词描述某些事物的意向中导出来的。如果引发这些句子的心理状态并不指向任何事物(或指很不同的另一些事物)。那么我写这些句子就同录音机照相机一样,不是在做出一个表达。这时,相关的术语就不能够成为对“某事物被肯定了”这一描述中的事件的解释。
我理解派利夏恩的目标是通过描述认知科学对表征的语义内容这一概念的看法,讨论这种观点的合理性。按纽厄尔(Newell)的区分符号层面;表征的层面(知识或语义层面)。这两个层面是在生物层面(或物理层面)之上的。生物层面是服从生物规律最终还原为物理规律,使用生物或物理术语描述。
符号层面受功能建构支配,也可称为功能(或句法)层面,使用算法规则描述。第一层的生物层面中生物学的因素可以通过调整基本计算资源(即派利夏恩所说的功能建构)与符号层面概括相互作用。这种调节可能有生物化学作用、神经细胞分叉、神经功能萎缩等影响。这些调节也可通过一种派利夏恩叫转换器(Transduction)[1](P43) 的装置而互相作用。
但有些物理性质集合在功能层面上有相同之处,而这些相同之处无法通过物理层面描述得到。这就需要第三个表征层面——表征(或语义、意向性)层面代表了一个独特又自主的描述层面。
表征层面是基于这样的一个假设:存在着某些原则制约着一些不同状态之间的转换,而这些原则不能由功能单独使之个别化。[2](P33)在这一层面上,哲学家们用的是意向性术语(使用信念、目标、命题态度等),但并没有确切理解其中一个主要的原则——合理性(rationality)这是一个值得我们讨论的问题。
合理性原则是以上两个层面无法做出特定概括的。当我们说“某人做某事是因为他们有某个目标,并且他们相信这样做可以帮助他们达到目标”时,我们是在给出一个关于发生了什么事情的原则性解释,而不仅仅是做一个特设性(ad hoc)描述。
这里再详细说明一下。例如,在解释一个受试者如何给一个代词指派正确的指称时,像我们平时说的“小明相信小红是因为她曾经帮过他”,我们会涉及该受试者关于世界的信念。代词“她”与“他”分别哪个指男孩女孩,它们会否是当时在场的其他哪些什么人。我们在给出解释时只需假定这种解释是系统性的。不必加上“如果这个人此时正在合理地(或理性地)行动”之类,因为这是背景条件。
但是——语义解释究竟来自哪里?决定一个(句法上连接的)状态表征的东西是什么?历史上有:心理主义、行为主义、功能主义等解答,我在这里主要说说功能主义。
功能主义不是通过功能状态和表征对象之间的纯粹因果联系去刻画功能状态的语义内容,而是把表征关系当作源于功能状态在完全的理论中的作用而产生的,这些作用包括有机体通过被称为转换器与环境相互作用的形式,它要被解释为输入和输出内容的形式,以及有机体行为同它自己与外界相互作用的关系。
在计算模型中,符号代码本身并不刻画其既定的解释,但是如果一个认知理念认定了它是什么模型,它的哪些方面应该对某事物建模,这个理论实际上就必须表述状态表征的是什么。不必涉及解释和获取概括。如果把某些特殊的表征内容归结为模型的状态,那的该理论就是弱等价的或“仅仅是模仿”。
塞尔(Searle)的弱AI即是持这种观点,计算机在心灵研究中只是一个强有力的工具。形式模拟物就只是模拟而已,不具有也不解释心理状态的表征内容。塞尔说,计算模型产生相同行为,及模型状态被赋予特定语义解释,这两者并不能得出系统的活动同人的活动方式一样。派利夏恩认为这是取决于程序员或理论家给出的特定解释。语义解释存在于理论家头脑中还是存在于模型自身中是一个伪问题。正确的问法是:是什么使功能状态的语义解释确定下来?又或者问,理论家赋予系统状态一个语义解释时所选取的范围是什么?这样的回答就可以按程序改变对计算机功能状态的解释,数,字母,词,环境描述等等。
但这种功能模型是否根本上有别于我们大脑的模型?信息处理加工理论在说明问题求解、语言处理和知觉方面取得了成功,它们有意掩盖有意识-无意识之分,还搁置了感受特质(qualia)由何构成的问题,只处理可靠的功能和语义的相互关联(如只讨论“某人在痛”这个信念,而不讨论痛的感受)
我在此试着利用一个图来理解派利夏恩的主要观点。刚刚已经说过生物层面与符号层面由转换器来相互作用,而符号层面与表征层面的影响是一种认知渗透性(Cognitive penetrability)[2](ⅩⅦ) (P130-145)的,这个我们下面还要再详细谈谈。这也就是为何我用双箭头在上图的三个层面当中表示的。而上下两个箭头中间有一条直接相连的线呢?派利夏恩有论述这三个层面的联系是“自下而上”直达不间断的,我们暂时放到后面再来回答这个问题。另外外部环境与整个功能模型的相互作用也是通过转换器来实现的。前面也提到过转换器,它是“认知功能建构中一种特殊的原始操作” [1](P173),它是一个独立于认知系统的受刺激来进行约束的部件,由自身的环境去中断驱动或数据驱动。这种装置的行为可被描述为从物理事件到符号的函数。(也就是由物理层面到符号层面)但它执行的功能是非符号的。[1](P165)
这三个层面我们暂时交代一下。下面是关于什么是“计算”的问题。

其实派利夏恩并未对“计算”或者“计算机”进行定义,他只是采用了符号系统。认知的“计算”概念源于图灵猜想,早期数学里,希尔伯特计划(Hilbert program)试图使用纯形式的手段建立数学,有弗雷格、罗素、怀特海、哥德尔、图灵(Turning)、丘奇(Church)波斯特(Boster)戴维斯(Davis)等人。
图灵(Turning)试图证明存在一种普遍适用的机制(图灵普适机),可模拟任何可用形式化方法描述的机制,共同的目标是“计算相同的函数”——图灵给出了一个查看形式的符号操作系统的普遍性和界限的见地深刻的方法。它为将心灵看做符号处理系统提供了初始的动力。
图灵机的特点有三个:可计算函数;二进制表征,ASCII密码赋值二进制表征到每个输入记号;计算操作在输入时运行,储存寄存器中。其基本的结构是:标有0和1的无限长记录带;一个能以许多步骤自动左右移动记录带的读、写、擦除头。[4](P112)
纽厄尔认为,图灵机的这种普适性意味着一个形式符号处理机制可以产生任何的输入-输出函数。纽厄尔将输入分成两个部分:一部分被指派上一组指令作为一种特许的解释,或作为一个特定的输入-输出函数的评述。另一部分被处理为该函数的适当输入。纽厄尔和西蒙的符号系统假说认为思维是符号操作,也即根据因果作用,但符号丧失意向性,表征规则丧失规范性。
——如果把输入的符号当作指定或识别某个函数会遇到困难:潜在的输入-输出函数太多,我们无法用有限的指令集合,或任何其他有限的手段来确认它们,函数的集合不仅仅是无穷的,而且是不可数的,即,它不能以一一对应的方式满射到整数集合上。数学上存在着无法用有限方法确认的函数(所以图灵机的函数确定无法去辨认无限的函数,或者须有自我升级的函数规则——一种适应性的adaptive以简单的灵活方式来描述行为的无限集合。)
计算机成功通过“图灵检验”的可能性完全建立地对符号系统所具有的行为的可塑性的识别上,该系统可以被规划得依照任何一个可有限地确认的函数行动。
我们要理解计算必须区别机器和程序,同时还因为我们是要利用计算机来解释认知,所以对于一些函数的假设要先交代一下。首先是机器的可视物理性质大多与它所计算的函数无关。在一台计算机中,只有很小的物理上可分辨的状态的子集是计算上可分辨的。有一种例示函数(Instantiation Function 简为IF)表达了某一机器的物理状态的等价类到符号表达式的一个映射。其次是机器的计算状态对应于一个等价的物理状态集合,这些状态,按它们在机器的抽象计算描述中的功能看,是无法被识别出来的。[1](P60-65)
除了IF外有另一个关键的函数——语义函数(Semantic Function简为SF)。SF将相连的函数状态映射到某个意定的解释的域上。这个的假设是在符号串结构上递归地定义的,近似于塔尔斯基的真值条件语义学。我们以“+”对应于加法,状态转移在数学定义的加法操作下,须保持符号串的语义解释。[1](P62-66)
在计算过程中,对于表征的或意向性的解释派利夏恩给出必须注意的两个标准:
1、我们必须通过给出的代码之间或相互连接的认知状态之间成立的形式的规则,表现系统由规则支配的行为。在一个形式系统中,系统的所有部分都能使用它们。它们没有解释,只有理论才为它们提供解释。
2、如果系统是表征性的,它是行为规律只有通过参照它所表征的内容才能获得,那么规则必须具有这样的性质,那些适用于某一特定代码的东西将表现得依赖于它们是什么的代码,或“尊重语义解释”。
由此区别有限态自动机与图灵机。两种机器可计算的函数依赖于图灵带子的无边界性,一种有限一种无限。图灵机带子的潜在无限长度可以给过程加上一种定性的组织,可以生成处理,应用非常大的范围事实。而一台冯诺伊曼计算机,新联结主义机器都是一台有限态自动机,不能作为心灵建构的类型。问题不在于我们说心灵是一个串行的计算机还是并行计算机,而在于说心灵是否处理符号,它是否有规则和表征。
总的来看,一个计算过程是一个其行为被看做是依赖于它的状态所表征的内容。这过程是基于符号层面的,符号表达式的殊型结构对应于系统中的真实的物理差别,即两个层面相对应。形式的符号结构反映所有相关的语义区别,对这些区别系统应该做出反应,当某些被语义解释了的规则应用于它们,将它们转变成新的符号结构时,系统会继续这样做。对任何可以设想的影响行为的语义特征都必须在符号的层面根据句法编码。

而比模型更为具体的层面是程序,程序是使用某种语言编写的特定算法,是清晰易懂,可修改的。我们知道,一种好的计算机程序语言要全面封锁与完成任务的算法无关的细节,所以它又是严密的。程序的概念与一种语言的存在是捆绑一起的,在一种计算机系统中通常有一个包含许多独立的语言层面的集合。
如果一个程序是由STRIPS(一种AI语言)写的,它的命令就可以用LISP(一种命令式语言,源自递归函数)编写的程序语言解释,依次LISP程序又可以被用汇编语言编写的程序解释,汇编程序可以通过存贮在只读存贮器中的微程序指令来解释……继续倒退。因为人们可以从符号的角度而不是电子的角度来看待计算机中的电路——甚至是单个晶体管的功能。实际上,计算机设计师正是这样看待的。
要考虑怎样将一计算系统用做认知模型。首先是要给出标准的形式或算法,即用某种编程语言编写的程序,可能包括图形表示,递归语言描述等。当然,也要受一些假设的限制,包括哪些基本操作是可能的,它们是如何相互作用的,操作是怎样排序的,什么样的数据结构是可能的……这些假设是我们选择的功能结构的重要部分。广泛应用的冯诺伊曼机主要是通过“取出”、“运算”、“存储”操作形成序列进程。这种的建构是利用“寄存器”(当计算机处理二进制数据时中央处理器中存储数据的部分),其中的符号提取是根据它们的数字“地址”,控制通过一个程序按顺序转移,符号操作的过程是将它们从存储器中取出来,关到一台指定的寄存器,对它们施以基本的命令,然后将结果送回到存储器中保存。
图灵引入原初的二进制图灵机,虽具普适性,但计算复杂,操作序列的复杂性会依任务和输入方式的性质而变化。于是图灵机先模仿寄存器的建构,然后再模仿建构中执行算法。直接执行一种算法与先模仿某个其他的功能建构然后再执行它,这之间的区别对于认知科学来说是至关重要的,它会遇到一个核心问题——
计算的哪些方面可被实际上看作是模型部分,哪些方面只能被看作细节的实现呢?
我们需要在计算机上实现初始的认知操作的方法,但是关于实现这一目标的细节却没有什么经验的内容。派利夏恩坦言,这是由于实际的硬件层面的现实问题,这个经验上与细节实现不相关的层面或心理操作的模仿层面是不可缺少的,因为产生模型计算机的功能建构与大脑的不同在于——线路不同、介质不同。
这里强调一下,派利夏恩的计算建模是一种假设,但假设是合理的,现在是尝试经验地证明这种假设,还要明确一些非计算的性质会随功能建构的某些假定而产生。
认知虚拟器的功能基础我们已经描述了,但尚未完成,需要在计算过程与心灵的实际发生过程有一个“强等价”关系,这种强等价性要求计算模型满足严格的条件以保证模型与认知的相似。派利夏恩指出这其中类似的实现又要求一个强制约的层面——聚合层面(Level-of-Aggregation)[2](P92)。
纽厄尔和西蒙已指出选择过于总体的或过于细微的操作器所产生的缺陷,像丹尼特(Dennett)的“小人理论”。计算模型应该是建立在一个能将基本表征状态提示出的聚合层面上的。一是因为机械的可实现性并非循环的机械解释的必要条件,这是对于当前技术水平的考虑而不是经验考虑。(这在认知科学早期的AI建构成了主要障碍)二因为是我们传统以来的“奥卡姆剃刀”造成一种惰性,在处理行为现象时,只关注以最抽象最方便的层面。但实际情况是,每一层面都把握了某些概括,我们必须在各个不同的层面上描述。(三个层面的不同描述就是如此)那么聚合层面是一界限,这界限是区分用语义原则说明的现象(语义层面上)与不必用语义原则说明的现象(符号层面上)。这后一个现象是系统的功能建构的例示,功能建构提供了实现认知过程的计算资源给“虚拟机器”,这好比如程序语言为运行计算机程序提供资源。
功能建构我们可以细节方面还可以利用两条经验标准把握——复杂性等价和认知渗透性。
复杂性等价是强等价的必要条件,但不是充分条件。它使我们可根据从输入的性质到过程的某个统一的聚合性质的函数来处理程序之间的强等价关系。通过外部观察怎能判定两台计算机是否在执行同一算法呢?以流程图表示一下,节点所对应的对象被限制为那些资源被确认的过程。表示的是计算相同的输入-输出函数,这依赖于输入的计算资源需求的监测。

第二个标准是认知渗透性,其本质是:假设当受试者相信一件事时,他们表现出的行为可以部分地被某个函数F1刻画,当受试者相信另一件事时,他们表现出行为可以部分地被另一个函数F2刻画。进一步假设受试者表现出的特定的F与他们信念的内容具有某种逻辑或理性的关系。要说明这点,对F本身的解释必须包含受规则支配的或计算的过程。认知渗透性标准的应用不是唯一的,这里我们只是简单提及一下。当我们要解释关于假设的子过程时,我们所能知道的一切是整个的生物体的行为,这是渗透性的。对于一个相关子过程F1或F2是否相互影响?是否受其他Fn的影响?这是个问题。不过这样的好处是我们可以通过确认功能是否以语义上规范的方式,通过改变受试者的目标和信念加以改变,对此做一经验性研究,能以这种方式改变的功能就是认知渗透性的。这时就不是在功能建构中例示,是一个复杂的计算过程。派利夏恩在这里提出,过程是认知渗透性的,功能建构中某些部件也是可渗透的。(前面提到的转换器是不可渗透的)——回到那第一个图的上下两个箭头的相连问题——语义层面会不会不仅影响符号层面而甚至影响生物层面?派利夏恩认为这是关系到语义术语和物理术语的“混合词汇”的可能性。由于派利夏恩坦言功能建构和受表征支配过程的分界或许是他提出的最基本的分界,是有强限制的,是原则性问题,是认知科学的基本工作假设。三个层面的图已表明这个区分。所以语义不能对物理的性质有任何直接影响。
例如,可以给出某人行为的一种复杂性描述,描述的依据是事物的部件如何组合、各部分如何连接、各部分作用怎样等等,整个看起来为某种抽象的黑箱——以进行功能描述(在这个意义上派利夏恩可以说是功能主义者)。派利夏恩认为这样处理就可以把某些人们渴望、相信的,但又不存在的事物统统归入表征内容。当我们说我们做某事是因为我们有某个目的G,或我们相信某个命题P,我们就把因果性归因于表征,尽管它并不是引发行为的实际内容。被表征的东西未必存在。
在派利夏恩的理论中,我理解其最主要的认知制约是合理性原则(这还包含哲学上深层的标准问题)。我们再重新看看第一个图中的分层,下面两个必须有各自的解释,如果两种层面的规律性(在能最好地抓住概括的描述中)还不能得到解释,那么须求助于语义层面。在这个层面的所谓规律性是以合理性给出的(如S想要G,并且相信,如果不做A就得不到G;所以,在其他情况都相同的时候,S将倾向于做A)。通过这样的机制,表征得以编码,语义层面的原理得以实现。心理过程是一种计算的想法实际上是一个严肃的经验性假设。所谓的计算建模要求强制约性,它不是一劳永逸的,只是帮助我们解决人类的认知问题,从而更好地理解人类的心灵。前面已说过,假设合理的话我们就要经验性地尝试。哲学又何尝不是如此呢?莫非一开始我们就有思考上的懦弱或懒惰?

我要回帖

更多关于 设计一个图灵机计算函数 的文章

 

随机推荐