关于图灵机的三个问题

图灵机的简单例子 最近刚考完可计算理论,考前看习题总有一些题让设计一个图灵机来实现某个算法什么的(≖-≖)(虽然考试题里完全没有考到!然而我还是勤勤恳恳地想了很久)当时看图灵机定义看了无数遍,但依然不是很明白怎么设计啊摔(手动翻桌…)后来在众多友人的帮助下终于想通了!(〃'▽'〃)接下来让本小白用最白的话举几个小例子帮助更好地理解图灵机:首先简单讲一下图灵机的构成成分(这个定义并不官方,就本小白瞎定义的,不过基本包... 阅读详情

转载:http://blog.sina.com.cn/s/blog_4dff87120100ylfv.html

写这篇文章,是想尝试回答学习图灵机模型中遇到的三个问题:

1) 为什么图灵机有不可判的问题?

2) 为什么强大的图灵机会不停机?

3) 为什么图灵当初要设计图灵机?

 

图灵机(Turing machine)是英国数学家阿兰·图灵(Alan Turing)于1936年设计的一种抽象机器,用于定义和模拟计算(computing)。图灵机虽然构造简单,但却及其强大,它能模拟现代计算机的所有计算行为,堪称计算的终极机器。然而即便是这个终极机器,也有令它无能为力的问题,这便是第一个要回答的问题:为什么图灵机有不可判的问题?

 

首先明确什么是图灵可识别(Turing recognizable)和图灵可判定(Turing decidable)。图灵机的识别对象是语言,图灵可识别当然不是说图灵本人能识别的语言(照这样说汉语可能是图灵不可识别的~),事实上这只是简称,全称应该是图灵机可识别语言(Turing machine recognizable language)和图灵机可判定语言(Turing machine decidable language)。

一台图灵机在读取一个串后可能进入三种状态:接受、拒绝、循环,如果图灵机进入循环状态,那它将永不停机。现在假设有语言A,如果能设计出一台图灵机M,对于任意字符串ω,如果ω∈A,那么M读取ω后会进入接受状态,那么A是一个图灵可识别语言。注意这个定义对于ω不属于A的情况没有做出限制,所以M读取到不属于A的ω,那么它有可能拒绝,也有可能循环。

图灵可判定语言的要求更严格,它要求对于语言A能设计出一台图灵机M:如果ω∈A,M进入接受状态;否则进入拒绝状态。如果一个语言是图灵可判定的,总能设计出一台图灵机,能在有限步数内判定一个字符串是不是属于这个语言。如果一台图灵机对所有输入总是停机,那么称它为判定器(decider)。然而第一个问题指明一定有所有判定器都不能判定的问题,要证明这一点,得从康托(Georg Cantor)说起。

 

康托最大的贡献可能是创建了现代集合论,他认为某些不同的无穷集合有不同的大小。1891年,康托发表了一篇只有5页的论文,证明实数集的基数大于自然数集,并在这篇论文中提出了传说中的对角线方法(方法虽然巧妙但很简单,wiki上有我就不赘述)。图灵机的不可判定问题便需要借助对角线方法。而实数集“大于”自然数集这个事实,可以这么想:“无限×无限”比“无限×有限”大。每个自然数是有限的,集合是一阶无限,自然数集就是一阶无限;相较之下,一个实数是一阶无限,集合又是一阶无限,那么实数的集合就是二阶无限。这个一阶二阶只是我个人的说法,关于不同集合之间的大小关系,康托提出连续统假设,即希尔伯特第一问题,认为不存在一个基数绝对大于可数集而绝对小于实数集的集合,不过这跟今天的话题没有关系,不再展开。

 

回到正题:图灵机。图灵机能够识别语言,而图灵机本身当然也可以由语言描述。什么是语言?给定一个字母表∑,一个{[由∑中的字母组成的序列]的集合}就是∑上的一个语言(为了消除歧义,算式可以加括号,语言当然也可以)。必须清楚这些概念中哪些是有限的,哪些是无限的:一个语言包含的字符串数可以是有限的也可以是无限的,但一个字母表上的所有语言的数目是无限的,而语言中任意一个字符串的长度是有限的。

首先要证明的是:一个字母表上所有语言构成的集合不仅是无限的,而且是不可数的。

这里需要借助无限二进制序列的集合来帮助证明。一个无限二进制序列(即{0,1}组成的无限序列)是一阶无限,那么这些序列组成的集合就是“无限×无限”,可以通过对角线方法证明无限二进制序列是不可数的,也可以将实数集的元素唯一地映射到无限二进制序列集合。用后者的方法,可以这样建立二者之间的映射:二进制序列每4个为一组,用8421BCD码编码,4位对应实数中的一位,再用1111表示小数点,这样每个实数总能映射到一个唯一的二进制序列,既然实数集不可数,那么无限二进制序列也不可数。

接下来证明,{无限二进制序列的集合B}与(任意字母表){∑上的所有语言组成的集合L}是同样规模的,仍然通过建立映射的方法。设∑上所有字符串的集合按字典序排序成∑*={s1, s2, s3, ...},L中的每个语言A都对应一个二进制序列b:如果si∈A,bi=1;否则bi=0,这样的序列称作A的特征序列。举个例子,如果∑={a,b},A是所有包含b的串构成的语言,则A的特征序列b如下:

∑*={a, b, aa, ab, ba, bb, aaa, aab,...}

A  ={   b,       ab, ba, bb,       aab,...}

b  =  0  1  0    1   1    1    0    1  ,...

 

反之,每个二进制序列b也能对应一个唯一的语言,所以L与B等势,又因为B是不可数集,所以{∑上的所有语言组成的集合L}也是不可数的。

 

 

好,明确了所有语言构成的集合是不可数的之后,我要回答下面这个问题:为什么图灵机集合是可数的?(reserve:哥德尔配数法)

从图灵机的定义入手,图灵机是1个7元组(Q,∑,Γ,δ,q0,qaccept,qreject)。每一台图灵机总是由有限个字符编码而成:

1) 有限的状态集Q。

2) 有限的输入字母表∑。

3) 有限的带字母表Γ。

4) 有限的转换函数δ。

5) 1个起始状态q0。

6) 有限个接受状态qaccept。

7) 有限个拒绝状态qreject。

若上述每个元素都用二进制编码表示,任意一台图灵机都只需要有限个二进制位。再将这些二进制串按照字典序排列,就可以得到一个{图灵机集合}->自然数集的一一对应。

 

好,给定一个字母表∑:

[∑上的所有语言]的集合<=>[二进制无限序列]的集合<=>实数集<=>不可数集

[所有图灵机]的集合<=>自然数集<=>可数集

有不可数个语言,却只有可数个图灵机,语言的集合“大于”图灵机的集合,所以从本质上证明了必然存在图灵机不能识别的语言。

推论:必然存在图灵机不能判定的语言。理由是图灵可判定语言的集合不会大于图灵可识别语言。

 

图灵可判定语言要求更严格,所以应该存在这样的语言:它是图灵可识别的,但同时不是图灵可判定的。事实确实如此,图灵自己就给出了一个:

A={<M, ω> | M描述一台图灵机,且M描述的机器接受ω}

首先证明A是图灵可识别的(形式化证明太过繁琐,这里只给出很高层次的证明)。设通用图灵机U这样运行:U接受参数<M, ω>,它可根据图灵机M的描述模拟M的行为,并在虚拟的M上计算ω。如果M接受ω,那么U进入接受状态;否则拒绝。

依据定义以及通用图灵机的存在性,U能识别A,所以A是图灵可识别的。

证毕。

顺着这个证明走下去,如果M本身遇到输入ω时会陷入循环,那么模拟M的U也会陷入循环,所以U不是判定器。如果U知道M在ω上不停机,那么它可以进入拒绝状态,问题是它不知道。那么能判定A的图灵机存在吗?我们就假设存在H,使得:

1)若M接受ω,则H(<M,ω>) =接受

2)若M不接受ω,则H(<M,ω>) =拒绝

根据H的定义,无论M接不接受ω,H总能停机。进一步再假设有图灵机D,以H为子程序,接受一个描述图灵机的串<M>,在H上运行H(<M,<M>>),并返回相反的结果:

1)若H(<M,<M>>)=接受,则D(<M>)=拒绝

2)若H(<M,<M>>) =拒绝,则D(<M>)=接受

也就是说,如果一台图灵机M接受描述它自身的串<M>,那么D(<M>)进入拒绝状态。构造这样一台奇怪的D是为了让它做下面这件事情,现在对D输入描述它自己的串<D>,看看会发生什么:

1)若D接受<D>,即H(<D,<D>>)=接受,则D(<D>)=拒绝

2)若D拒绝<D>,即H(<D,<D>>) =拒绝,则D(<D>)=接受

到底是接受还是拒绝呢?兜了一个圈子,D绕回原地,产生了矛盾。所以D是不存在的,所以H也是不存在的,语言A不可判定。

证毕。

上述证明比较绕,我用一阶逻辑再改写一遍。

命题:

1)P:存在语言A的判定器H

2)Q:存在以H为子程序的图灵机D(描述见上)

已知条件:

1)P→Q:如果有H,总能设计出D

2)┐Q:D是不存在的(证明见上)

证明:

1 P        假设

2   P→Q   已知条件

3   Q      1,2

4   ┐Q    已知条件

5   ┴     推出矛盾

6 ┐P      假设不成立

 

上面的证明中,图灵机D的构造简直是神来之笔,图灵怎么想到的?虽然之前的证明没有直接给出不可判定的语言,但已经从数量上证明有图灵机不能判定的语言,由于判定器的要求更严格,所以可以推断所有判定器构成的集合小于所有语言构成的集合。这是个与“实数集的势大于自然数集”类似的命题,所以应该能用类似的方法——对角线方法证明。好,尝试一下。

康托构造映射表格时,表格的每一行由一个自然数表示这是第几行,每一列也由一个自然数标识列数,对角线法构造出来的实数实际上是一行,然而这一行却和每一行都不一样。刚才的证明我们看到,图灵机集合是可数集,可将其对应自然数,标识表格的每一行,那么每一列用什么标识呢?怎样让列数与行数相等呢?行和列的交叉处是什么呢?自然数/实数的例子中,每一行由一个自然数对应一个实数,在这个问题中,行由图灵机标识了,那么不难想到,每一行应该是一个语言。语言又该如何表示?下面依次回答这些问题。

列应该用什么来标识?在对角线方法中,表格的行列数一致,行和列都用自然数集标识。那么首先可以想到既然行用图灵机标识,那么列也可以用图灵机标识。但是这样的话行列交汇处就没什么意义了,试问随意挑选的两台图灵机之间能擦出什么火花?

脑子再转一下,图灵机与图灵机之间没有什么一般化的关系,图灵机识别的是语言,是字符串,那么将标识列的图灵机换成描述图灵机的串,既保持了行列数一致性,又让行列交汇处有了非平凡的意义!即,用M1, M2, M3...标识第1行、第2行、第3行……再用描述图灵机的字符串<M1>, <M2>, <M3>...标识第1列、第2列、第3列……行列交汇处就填入accept或reject,表示一台图灵机是否接受描述某一台图灵机的串!这样,每一行刚好也就是一个语言,每一个部分的意义都正好是我们想要的。

 

 

<M1>

<M2>

<M3>

<M4>

……

M1

accept

reject

reject

reject

 

M2

reject

reject

accept

reject

 

M3

accept

accept

reject

accept

 

M4

reject

accept

reject

accept

 

……

 

 

 

 

……

为构造对角线准备的表格

 

走到这一步,离结果就很近了。

若将所有图灵机和描述它们的串排成表,行列交叉处就是H(Mi,<Mj>)的运行结果。构造图灵机D,实际上就是用对角线方法选出一行,这一行的第1列与M1相反,第2列与M2相反,第3列与M3相反……所以构造出来的这一行肯定不在这个表中。如果在,这么D所在的行与对角线相交处会出现矛盾!

 

 

<M1>

<M2>

<M3>

<M4>

……

D

……

M1

accept

reject

reject

reject

 

accept

 

M2

reject

reject

accept

reject

 

reject

 

M3

accept

accept

reject

accept

 

accept

 

M4

reject

accept

reject

accept

 

reject

 

……

 

 

 

 

……

 

 

D

reject

accept

accept

reject

 

?

 

……

 

 

 

 

 

 

……

D的每一列都与对角线相反,到它自己与对角线的交汇处产生矛盾

 

想必图灵深知语言集比图灵机集要“大”,一台图灵机只能对应一个语言,所以用对角线方法必定能构造出一个所有图灵机都不能识别的语言。这个语言就是D“识别”的语言,则D的语言肯定不会出现在那个图灵机和对应语言的表格中。如果强行将这台“不存在的图灵机”安插进表格中,必然产生矛盾,矛盾就发生在D所在行与对角线的相交处。就像康托用对角线方法构造出来的那个实数无法插入到[自然数->实数]的映射表格中,否则构造出来的那个实数就与它自己矛盾了,神奇的“图灵机D”就是这么来的。

图灵是用图灵机的术语改写了对角线方法,在图灵机上重现康托的思想。

 

 

至此,回答了第一个问题:为什么图灵机也有不可判定的语言,并且还构造了一个这样的语言,即A={<M, ω> | M描述一台图灵机,且M描述的机器接受ω},A又被称为接受问题。

 

 

 

语言A是超越图灵机极限的必然产物,因为图灵机和语言的内在关系决定了A这样不能被任何图灵机判定的语言是存在的。这是本质上的原因,但关于A本身还有一个表象上的原因(之前提到过):之所以不能用图灵机断定其它图灵机是否接受一个串,是因为图灵机不能断定其它图灵机在某个输入串上计算时是否会停机,这个问题同样是不可判定的,这就是著名的停机问题(Halting problem)。庄子曰,“吾生也有涯,而知也无涯,以有涯随无涯,殆已”。以有限的步骤去判定可能无限的计算,殆已。

但由此我产生了一个很大的疑问:为什么图灵机会不停机?这也是我试图回答的第二个问题。

 

图灵机虽然强大,但是不停机的缺陷是人们万万不想要的。然而这缺陷是天生的,原因是……图灵赋予图灵机两个无限:

1)图灵机能在输入字符串上左右移动,步骤无限,时间无限。

2)图灵机有一条无限长的带子,供读写头在上面活动,空间无限。

有穷状态机和下推自动机这两种更简单能力更弱的机器只能看到极其有限的历史,它们的读写头只能在输入字符串上单向移动,所以肯定会停机。而图灵机的读写头却可以在输入串上左右移动……一旦拥有这个能力,图灵机可以看到更多的历史,同时就必须承担这种能力带来的风险——无限循环。另一方面,图灵机拥有无限长的带子,给读写头的移动提供了无限的空间,更增加了循环的可能。

实际计算机没有无限长的带子,只有有限的内存,所以读写头左右移动这种能力带来的影响更致命:即使只有有限的空间,也可能陷入无限的循环。

然而很遗憾我的尝试只能到此为止了,现在的我还不能从本质上回答“为什么不停机”。根据我的理解,图灵机会不停机与哥德尔不完备定理有关。应该是图灵机这两种能力(左右移动,无限带子)让它足以蕴含皮亚诺算术公理,同时引入了既不能证明也不能证否的命题:碰到这种情况,图灵机就陷入循环了。希望自己将来能够摸清背后的本质,完整地回答为什么强大的图灵机会不停机?

 

 

既然图灵机有这么大的缺陷,为什么图灵当初还要设计图灵机?这要从上个世纪初数学界的boss希尔伯特(David Hilbert)说起。1928年,希尔伯特在国际数学家大会上很乐观地预期,数学将在不久的将来建立在牢固的基础上,并提出关于一阶逻辑公式可满足性的判定问题(Entscheidungs Problem)。引用我以前写过的一段话:

希尔伯特计划把数学建立在一个完备的、一致的公理化系统之上。如果他成功了,这意味着:

一,所有的数学命题都能用符号无二义地表达出来;

二,所有的数学命题都能被证明或证伪(完备性);

三,对任意数学命题P,如果P被证明,那么¬P必定能被证伪(一致性)。

四,如果最后再找到一个算法,能机械地判定一个数学命题的真伪(可判定性),那么整个数学大厦就是钢筋铁骨屹立不倒了。

结果事与愿违。

1931年,哥德尔(Kurt Gödel)发表了震惊数学界的哥德尔不完备定理,数学系统一致性和完备性的统一被打破。

1935-1936年间,图灵在剑桥大学国王学院研究希尔伯特判定问题。1936年5月,图灵完成论文《论可计算数及其在判定问题上的应用》("On Computable Numbers, with an Application to the Entscheidungsproblem"),提出图灵机作为通用计算模型,并基于图灵机重新定义了可计算函数,同时给出了一个图灵机无法判定的问题,即停机问题。

1937-1938年间,图灵来到普林斯顿大学,在逻辑大神阿隆佐·邱奇的指导下继续研究可计算性问题,这一阶段他证明他的图灵机与邱奇的λ演算具有等价的计算能力,并将这个结果作为附录加到他的论文当中。而此前,哥德尔也提出了递归函数作为计算模型,不过同样不久后被证明与λ演算等价。

在这一期间,邱奇-图灵论题(Church-Turing Thesis)在邱奇、图灵与哥德尔三人的工作下成型,该论题认为所有可有效计算的函数或算法都可以由一台图灵机来执行。这是一个论题,而不是命题,因为“可有效计算”本身是一个不存在精确定义的概念。目前普遍认为邱奇-图灵论题是正确的,即所有人能想到的算法都能用图灵机执行。

图灵设计了一个能模拟所有计算的机器,然后证明这台机器也有缺陷,有它不可判定的问题,给希尔伯特的幻想以最后的致命一击,这便是图灵机的起源。毫无疑问,虽然没有直接参与图灵机的设计,但希尔伯特功不可没,因他提出的问题指引了其他数学家的工作。

 

图灵机给计算机的具体实现提供了参考价值,但它速度太慢,也很难编程。相比之下它更是数学家们的神兵利器:算法问题从此有了坚实的基础。但图灵机也给出了现在这个时代人的上限,而这个“人”还不是一般人,而是人类中思考的精英——数学家。

根据邱奇-图灵论题,图灵机能模拟所有机械的、有限步的计算,但仍然有图灵机不能识别的语言,它的诞生就是为了去证明它自己的缺陷……这就是为什么说:

计算机是数学家一次思考失败的产物。

 

最后,谨以此文献给因社会不公而英年早逝的天才——Alan Mathison Turing

关于图灵机的三个问题

图灵机与计算问题  自从20世纪30年代以来,图灵机、计算这些重要的概念在科学的天空中就一直闪烁着无限的光彩。尤其是近年来量子计算机、生物计算机、DNA计算等领域的创新工作引起了世人的广泛关注。我们不禁问这样的问题,国外究竟为什么能发明出这些各式各样的计算机呢?这些意味着什么呢?其实这一切的源头都来源于计算理论。国内在介绍计算理论方面的教材虽然有不少,但一般都比较深奥难懂。所以我觉得很有必要对这些内容进行科普。于是 阅读详情

相关推荐

图灵机和NP难度问题

这学期选了NP难度这门课,挺感兴趣。但是在和同学讨论问题的时候,发现大家对NP难度的认识非常模糊,什么是P!=NP?什么是NP完全?什么是NP难度?都有自己的一套说法。于是自己去查阅了一些资料,可能存在理解不正确的地方,但尽量要把这些问题讲清楚。 关于NP方面的知识涉及到很多哲学和数学的内容,有非常多的定理,很难理解,这里只介绍一些基本概念。下面就从最最基本的图灵机开始说起。 1 图灵机 图

365天 1万+

计算理论学习笔记--2

X可以被Y的算法解决,则Xis no more difficult than Y, X可以归约到Y,记X≤Y。A是不可判定问题->B不可判定 A不递归->B不递归 B可判定->A可判定 B是递归的->A是递归的。若X多项式时间归约到Y,Y多项式时间可解,则X多项式时间可解;图灵可识别语言和图灵可判定语言的区别:若 S 是图灵可识别语言,则只需存在一台图灵机M,当。DFA的接受问题 是一个可判定语言, 是一个可判定语言, 是一个可判定语言。X多项式时间归约到Y,Y多项式时间归约到Z,则X多项式时间归约到Z.

weixin_44750232的博客 1280

图灵机杂思(rev#2)

  图灵机杂思(rev#2) By 刘未鹏C++的罗浮宫(http://blog.youkuaiyun.com/pongba) C++ Template是图灵完备的(turing-complete,或者更确切的说,是图灵等价(turing-equivalent)),关于这一点是没什么悬念的,只是前几天有位朋友问到为什么说C++ Template是图灵完备的,为了找出当初的连接,于是又去

刘未鹏|C++的罗浮宫 5万+

【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )

一、通用图灵机和停机问题、 二、可判定性 与 可计算性、 三、语言 与 算法模型、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

PFC中pb模型实战:从胶结参数设置到破坏模拟全流程解析

本文详细解析了PFC软件中平行胶结模型(PB模型)的实战应用全流程。从胶结参数(pb_kn, pb_ks, pb_ten等)的物理意义与精准赋值入手,深入探讨了模型构建、胶结施加以避免初始损伤的技巧,并系统介绍了破坏过程的监测、阈值判定方法以及高级可视化与常见问题诊断。旨在帮助岩土工程与颗粒材料研究者掌握从参数调试到破坏模拟的核心操作,提升数值模拟的准确性与效率。

php55的博客 1075

PCIE6.0协议学习小记-Flit_Mode

PCIE6.0学习

code_aJack的博客 4637

【计算理论】04 图灵机

图灵机可以模拟所有实际计算机的所有计算行为,掌握如何准确地描述一台图灵机,对证明可判定性、可识别性,以及分析多项式可归约性有重要意义。

qq_44350348的博客 7851

不只是对齐:用 MFA 和 Praat 给你的语音数据集快速生成 TextGrid 标注文件

本文详细介绍了如何利用Montreal Forced Aligner(MFA)和Praat工具快速生成TextGrid标注文件,大幅提升语音数据标注效率。通过批量对齐、质量校验和跨语言处理等实战技巧,帮助研究者构建自动化标注流水线,适用于语音合成和语音识别等多种应用场景。

weixin_30675247的博客 378

计算理论学习笔记

《计算理论导引》学习笔记

Github_Lee的博客 4240

样本不均衡时AUC反而下降?用imbalanced-learn库实战解决分类陷阱

本文探讨了样本不均衡时AUC指标下降的现象,并通过imbalanced-learn库实战演示了如何解决这一分类陷阱。文章详细分析了不同采样技术(如SMOTE、ADASYN)对模型性能的影响,并提供了XGBoost和逻辑回归模型的优化建议,帮助数据科学家在实际项目中做出更明智的决策。

weixin_29174013的博客 343

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 353

计算的极限(零):逻辑与图灵机

来源:数学职业家提出问题和解决问题的人2012,图灵诞辰100周年,献给这位伟大的开拓者。计算无处不在。走进一个机房,在服务器排成的一道道墙之间,听着风扇的鼓噪,似乎能嗅出0和1在CP...

人工智能学家 906

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

c++ tuling123_如何集成图灵机器人,简单实现语音聊天

图灵机器人有三个基本功能:(1)语音识别:将语音识别成相应的文本。(2)语义理解:将文本识别成领域相关的语义结果。(3)语音合成 : 将文本转化成语音读出。要集成图灵机器人,首先要进行图灵官网的注册,这里就一笔带过,按照步骤进行注册即可。然后创建自己的机器人,注意这里我们选择的是自定义机器人,(qq,微信等机器人我只实现了一下qq机器人,很简单,可以自己下载文档根据步骤走就ok)填好上面的信息,在...

weixin_39762075的博客 266

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

前言:ERA5主要提供DAILY和MONTHLY两大类别数据,其中主要包括气温、降水、压力、风速等。

等待着冬天的风的博客 3万+

基于uniapp实现自定义日历页面、年份月份选择、动态日历渲染、日期标记及备忘录、无组件依赖、多端兼容

基于UniApp框架下自定义日历组件的完整实现方案,涵盖基础日历渲染、年月选择器集成、动态数据标记等核心功能。提供完整代码段,帮助开发者快速构建高性能、高定制化的日历模块,适用于日程管理、预订系统等场景。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

计算机学科三大科学形态,华中科技大学-计算机科学与技术方法论-3计算学科中的三个学科形态.ppt...

华中科技大学-计算机科学与技术方法论-3计算学科中的三个学科形态.ppt第3章 计算学科中的三个学科形态 文坤梅 E-Mail:kunmei.wen@ 智能与分布计算实验室 Intelligence and Distributed Computing Lab 设计形态与抽象、理论两个形态存在的联系 设计源于工程,用于系统或设备的开发,实现给定的任务 设计形态和抽象、理论两个形态都须以对...

weixin_39870199的博客 292

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

全量知识系统 程序详细设计 定稿之 1“λ演算”及其三个基本转换规则+2计算模型-情态模型中的λ演算图灵机微感机:计算分界“表”/“里”的“边框”+三次模型:数据模型图算模型和统计模型(百度搜索)

在文中明确给出“科”、“题”、“目”的定义和它们在“全知系统”中的作用,以避免读者产生混淆。

ChuanfangChen的博客 673

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTM Keras 项目常见问题解决方案

NTM Keras 项目常见问题解决方案 1. 项目基础介绍和主要编程语言 NTM Keras 是一个开源项目,它实现了神经网络图灵机(Neural Turing Machine, NTM)作为一种 keras 循环层。神经网络图灵机是一种结合了神经网络和图灵机特性的计算模型,旨在增强神经网络处理内存和外部存储的能力。这个项目主要是用 Python 编写的,依赖于 Keras 深度学习库,并且是与...

gitblog_00783的博客 674

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

11.21计算机导论课后总结

本节课老师主要讲了三个知识点。 图灵机 计算机科学的学科定义 计算机科学的含义和基本问题 图灵机 根据资料上详细的定义,图灵机的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作 1、在纸上写上或擦除某个符号。 2、把注意力从纸的一个位置移动到另一个位置。 于是图灵设计了图灵机来模拟这个行为,图灵机包括:一条无限长的纸带、一个可移动的读写头、一套控制规则...

qq_17204421的博客 219

计算机学科的三大科学形态,华中科技大学 计算机科学与技术方法论 3计算学科中的三个学科形态.ppt...

华中科技大学 计算机科学与技术方法论 3计算学科中的三个学科形态第3章 计算学科中的三个学科形态 文坤梅 E-Mail:kunmei.wen@ 智能与分布计算实验室 Intelligence and Distributed Computing Lab 设计形态与抽象、理论两个形态存在的联系 设计源于工程,用于系统或设备的开发,实现给定的任务 设计形态和抽象、理论两个形态都须以对自然规律...

weixin_33701632的博客 986

图灵机的介绍

图灵机的组成 a.一条存储带 :双向无限延长,上有一个个小方格 ,每个小方格,可存储一个数字或字母b.一个控制器:可以存储当前自身的状态, 包含一个读写头,可以读,写,更改存储带上每一格的数字或者字母 ,可以根据读到的字母或数字变化自身的状态。2.图灵机的工作步骤: 准备工作: (1)存储带上符号初始化; (2)控制器设置好自身当前状态 (3)读写头置于

Just for our dream 2782

图灵机与计算机理论基础知识,《计算机科学导论》计算理论基础知识

1、引言为了回答诸如此类问题:哪些问题可以通过计算机解决?语言之间是否存在优势?运行一个程序前,是否可以确定该程序将要停止(终止)还是永远运行?用一种特定的语言解决一个问题需要多长时间?我们求助于一门学科:计算理论。2、简单语言通过简单语言可以看到计算机解决任何问题所需要最少语句是三条。它们是递增语句,递减语句和循环语句。我们可以证明这种简单的语言能模拟一些流行语言中的多个语句。我们把每个模拟称为...

weixin_30768979的博客 2177

【计算理论】图灵机 ( 多个带子的图灵机 | 计算能力对比 | 证明过程 | 一个带子图灵机 )

一、多个带子的图灵机、 二、证明过程设计、 三、模仿操作、 四、模仿带子排列、 五、模仿读写头操作

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6499

图灵机

图灵机,又称图灵计算机,是一个抽象的机器。它由数学家艾伦・麦席森・(1912―-1954年)于1936年提出的一种抽象的计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。[2]图灵机有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个读写头在纸带上移来移去。读写头有一组内部状态,还有一些固定的程序。

2301_76841790的博客 1234
上一篇: 从最大似然到EM算法浅解
下一篇: 对角论证法
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值