从随机开始

作者: LostAbaddon | 来源:发表于2015-04-19 22:47 被阅读3946次

    在忙着看似没有尽头的各种事的时候零碎想到的,所以就先给记录下来。


    关于随机

    随机和信息,是大家在日常生活中经常在用的两个术语。
      尤其在计算机、统计学以及信息学领域,而这三个领域现在又几乎已经渗透到了所有人生活的方方面面,不管是什么领域。
      比如社会学现在也用统计的方法,物理学也开始关注信息,计算机作为现代社会的基础也就更不说了。
      最让人关注的,便是计算机科学的基础,计算理论,这货和统计学、信息学的关系非常密切。
      而在这些领域中,随机和信息这两个被大家使用了很久的术语,其准确的定义却并没有大家所想的那么确切。

    个人所理解的随机,大概可以这么来表示吧:
      从一个足够长序列中的任意位置开始提取任意足够长的子序列,其元素的分布在统计上都和原序列的元素分布相同,那么这个序列就是随机的。
      但这样的定义显然是不够好的,因为一来这里存在太多无法被精确定义的东西(比如什么叫“足够长”?),二来这样的定义很容易构造出反例来。
      后来个人所想的随机是这样的:
      一个足够长的序列,取值范围为R,则对任何的n和e,存在l,使得下面的命题成立,则该序列成为是随机的:将R做n等分,子序列落在每一个子区域的元素个数的方差小于e,对于从原序列任意位置开始的长度为l的子序列都成立。
      这样的提法规避了之前的第一个问题,就是没有可操作的定义,但依然会有第二个问题。比如这样一个锯齿波:第一个元素为1,此后递推关系为(下面的a为[0, 1]之间的常数):


      当a是无理数的时候,通过上述方法构造的序列是可以满足上面这条对随机序列的定义的,但实际上却不是随机的。
      事实上,这里就存在一个问题,那便是如果一个序列仅仅满足一个统计特征的话,那我们还是很难判定这货就是随机的。
      说到底,统计特征是去除大量细节后的整体特性,而信息或者说规律或者说非随机性往往就是藏在细节中的,可随机本身所说的就是规律性、信息量都尽可能地小,最好为零。
      而,反映规律性的一个手段,就是可以用数学公式的形式来表达,比如逐项公式。
      沿着这个思路往下走,我发现最终要达到的状态,其实是这样的:
      如果一个序列及其各连续子序列如果无法被表达为任何形式的数学公式,那么这个序列是随机的。
      这个提法就已经朝着计算理论迈进了一步。
      这个提法的好处就是,能用数学公式所表达的,基本肯定是有规律的,反过来说,不能用任何形式的数学公式表达的东西就肯定是无规律的。
      当然,这个提法本身还有问题,因为数学公式本身并不能涵盖所有可能的规律性,至少不够直观。因此,更往前走一步,这个提法就可以被升级为:
      <u>如果除了将序列原封不动地打印出来外,不存在任何别的与此不可通约的图灵机可以给出该序列,那么这个序列就是随机的。</u>
      这样,这条东西在保持了上面一个提法的特性的同时,还增加了对信息量的考量。。
      而这个东西,便是与“描述复杂度”,或者更应该称其为“Kolmogorov-Chaitin复杂度”,也可以称为“算法熵”,这么个东西非常相关。

    在算法信息学(Algorithmic Information Theory,AIT)中,Kolmogorov-Chaitin复杂度是这么定义的[1]

    能够输出形式化对象s的所有图灵机中代码最短的长度值为s的K-C复杂度:K(s)=min(len(T(s)))。
      这么一来,所谓“随机”就可以被这么定义:如果序列s满足len(s)<=K(s),则s为随机序列[2]

    我们可以发现,我们从统计的角度来考虑随机开始,最后逐渐还是走到了计算理论与算法的领域中来了。
      通过算法复杂度来定义的随机的本质其实就是这么一句话:
      除了这个序列本身,没有任何方法可以给出这个序列。
      这其实便暗含了Kolmogorov与Martin-Lof关于随机的理念了:
      1,如果知道随机序列的前n项,无法推测出第n+1项;
      2,序列不可压缩。
      当然,如果必要的话还可以继续给出第三点要求:
      3,具有随机的统计特性。


    关于算法复杂度

    K氏复杂度具有一些很有趣的性质,比如对于任意自然数n,总从存在s使得K(s)>n。这点直接与“不可定义数”相关。
      而另一个有趣的性质则和“不可计算数”相关:存在一个仅和图灵机及语言的选择相关的n,使得所有K(s)>n的K(s)的具体值都是无法计算给出的,也无法证明存在这样的s。这里无法计算表明了K的不可计算性,而无法证明则给出了K的不完备性(Chaitin不完备性定理)。

    第一个性质的证明很简单显然,而第二个性质的证明则颇好玩。
      我们假定对于任意n都可以证明存在某个s使得K(s)>n,那么如下的伪代码就会带来很有意思的效果:

    T(n)=>for (s in AllString) if K(s)>n then return s
    

    上述代码的“长度”可以被写为len(K)+ln(n)/ln(2)+C,其中C是语言本身所要求的上述函数的字节数。这里因为代码都是二进制的,所以K(s)>n中的n的“长度”就成了ln(n)/ln(2)。而这样的话,我们总能找到一个L使得L>len(K)+ln(n)/ln(2)+C成立,于是T(L)按照代码的逻辑给出的就是使大于L的K(s)的s,但代码T本身的长度小于L,于是按理说就不可能给出K(s)=L而最多只能给出K(s)=len(K)+ln(n)/ln(2)+C<L,从而矛盾,因此不能给出大于某个极限L的K(s)的s。如果将if的条件换成函数“check(s, n)=>可以证明K(s)>n”,那么我们非但无法计算K(s),也无法证明存在这样的s。
      这样的性质当然是很有意思的,但,有趣的是,它本质上似乎更应该说是证明了这么一件事:

    如果要构造一个对所有s都有效的K,即通用K,那么这样的K非但是不可计算的,也是不完备的。

    但,如果我们将问题改变一下,也许会变得更有趣。

    我们假定,存在一个K1函数,它的作用是计算len(s)<=L1的所有s的算法复杂度,如果len(s)>L1则不停机,而这个函数本身的长度为C1。从而我们发现,在上面构造的函数T(n)中如果将K(s)替换为K1(s),那么T本身的长度为C1+ln(n)/ln(2)+c。因此,只要C1可以保证C1+ln(L1)/ln(2)+c>L1,甚至更强一点只要C1>L1,那么K1本身的存在不会引起任何悖论。
      接着,构造K2函数,它的作用是计算所有L2>=len(s)>L1的s的算法复杂度,其函数本身的长度C2>L2,从而这样的K2也不会引起任何的问题。
      因此,K的不可计算性实际上所证明的是:如果我们要计算长度为n的字符串s的算法复杂度,那么这个计算算法复杂度的函数本身的长度不小于n-ln(n)/ln(2)-c,其中c是一个与语言和图灵机的选择相关而与n或者字符串本身无关的常数。
      因此,当我们要计算任意字符串的时候,所要用的K本身也就必须足够大,从而不存在通用的确定的K,对任意n有效。

    事实上,从很久以前就在考虑这么一个问题,那就是虽然已经证明通用的停机判定图灵机是不可能存在的,比如下面这个函数就是一个简单的反例,但是否存在对部分特定的图灵机有效的停机判定图灵机呢?

    C()=>while(HaltCheck(C))
    

    其中HaltCheck就是通用停机判定函数。显然如果存在这样的通用判定,那么如果C是可以停机的,那么就陷入了死循环无法停机;而如果C是不会停机的,那么就立刻停机了。
      很显然,如果是通用停机判定,那么HaltCheck必然会导致这样的自指悖论。但如果我们换一个思路,假定存在SpecialHaltCheck函数,只对部分特定的图灵机有效,那么上述自指陷阱对这样的SHC函数就是无效的,因为SHC可以不包含这样的自指陷阱,从而避免被自指搞坏。
      当然,这里就带来了很多很有趣的问题,比如是否所有不包含自指的图灵机都可以被归到某一类SHC中?是否存在自指的图灵机可以被某台SHC判定?什么样的自指图灵机可以被SHC判定?
      然后,假定一台SHC1可以判定的图灵机集为A,另一台SHC2可以判定的图灵机集为B,如果A是B的真子集,那么就说SHC1是SHC2的特例。那么是否存在两台SHC,它们彼此不是对方的特例,也不存在一台SHC可以使它们俩是其特例?
      发现这样的问题想想还特别有助于睡眠。。。


    从随机到理论

    让我们回到关于随机的问题上来。

    随机如果是要求满足上述三点的字符串的话,那么是否可能存在某个图灵机可以用来生成随机字符串呢?

    首先可以证明,不存在一个不需要输入参数的可以生成随机字符串的函数,因为这样显然违反第一条:如果知道随机序列的前n项,无法推测出第n+1项。
      但,是否可能存在一系列Rn(init)函数,每一个都可以通过一组初始条件init作为输入,来获得一系列的随机字符串呢?
      这样,比如所有上述Rn(init)函数构成的集合中,有一个子集,其中每个图灵机生成的字符串序列的前n项都是相同的,那么我们自然就无法通过前n项来判断到底是其中的Ri生成的,还是Rj生成的了,从而第一点要求被保持。
      这一现象与量子力学中量子混合态在塌缩到本征态前我们虽然知道有哪些本征态却无法得知到底塌缩到哪个本征态这么一个现象非常类似。
      在进一步,如果Rn(init)真的可以生成一串足够随机的字符串,那么就等于说len(Rn)必须比其生成的结果的长度len(Rn(init))要长,否则就违反了第二条。
      因而,这就是说,生成随机字符串的函数的长度,不管选择何种通用图灵机,不管选择何种语言,都必须比其能生成的随机字符串的长度要长。

    PS,我们可以构造图灵机T的复杂度计算函数,也记为K,定义就是所有与T等价的图灵机中长度最短的T'的代码长度,就是K(T),以取代上面的len(Rn)。当然,结论不会改变。

    从这里开始,问题就变得有趣了起来,因为让我们考虑下面这段伪代码:

    R()=>if 双本征态混合量子态塌缩到本征态A then 1 else 0
    

    这个函数使用了一个物理过程,通过双本征态等比例混合的量子态(这个实验上很容易构造出来)在塌缩后是否塌缩到本征态A来作为输出1还是0的条件。
      通过量子力学我们知道,这是一个真随机过程,而且可以无限次地重复实验,从而可以生成一个可数无限长的真随机序列。
      而,通过前面的分析我们知道,这个随机函数的长度不得比生成的随机序列的长度短,这就导致了一个很有趣的现象——
      如果量子塌缩这个物理过程是可以被形式化表述的,那么量子塌缩的形式化表达的长度为无限长。

    现在,让我们更进一步,假定物理世界不是传统的主流量子力学所告诉我们的那样,在量子塌缩过程中是真随机的——比如说,是隐变量的,那么情况会怎么样?
      PS:当然,除了真随机的流派和隐变量的流派,还有别的流派,比如退相干大概既不是真随机也不是隐变量吧?不过到底是否真的是真随机也难说。。。
      隐变量理论不承认量子过程中的随机性,而将那种貌似随机的现象视为对隐变量的不可知而导致的纯粹视现象,而非本质。
      因此,对于他们来说,双本征态混合量子态的塌缩不是一个随机过程,而是一个隐变量参与其中的确定过程,从而就消除了真随机过程所要求的无限长代码长度。

    好了,接下来,让我们考虑一个物理理论。
      理论主要用来实现两点:
      1,检验一组状态是否可能存在,即Check(state);
      2,根据已知条件来推测下一时刻的系统状态,即Deducate(state)。
      如果理论可以形式化,那么我们可以选择一个真理系统Axiomatic System和恰当的语言L,使得上述两个函数都可以在某台通用图灵机上用L中的语句表达为函数的形式。
      当然,将这两个函数合并为一个函数Theory也是可以的,只不过这里要更加精妙地定义state即可。
      因而,一个含有真随机的理论,如果我们看K(Theory),就会发现这个值为无穷大。而一个隐变量的理论,其K(Theory)为有限值,至少不包含真随机所要求的无穷大。
      因此,如果我们站在集智俱乐部planeheart的文章《利用Martin-lof随机性改造证伪主义》的观点,利用算法复杂度取代可证伪性,选择算法复杂度更小的理论作为更科学的理论,这么一个思路的话,似乎隐变量是一个比以哥本哈根流派为代表的连带着各种衍生诠释流派的理论更科学的理论。
      当然,这里不得不说的是,现在物理实验对隐变量为代表的理论的约束是:实在性和定域性必须放弃一个。所以如果我们不放弃隐变量的话,现在的事实就是很多人都在考虑放弃定域性。这点其实就算是在广义相对论体系内,在考虑引力场或者说时空的能量的定义的时候我们也发现,似乎定域性是需要被抛弃的东西——比如引力场的ADM能量定义就部分地放弃了定域性。

    当然,我们还有另外一个选择,那就是选择“随机”是一个图灵机无能为力的对象,即图灵机不能给出真正的随机。
      如果这样的话,那么包含真随机的量子理论就无论如何都不能被形式化到可以用图灵机表达的程度,这样的话planeheart的文章《利用Martin-lof随机性改造证伪主义》中想法的可行性就从根本上被瓦解了。
      就个人来看,虽然我认为真实的自然是不能被图灵机描绘的,但自然的规律应该还是可以的吧,所以真随机理应被包含在图灵机中。

    那么,一个含有“上帝”这个因素的理论到底是否比含有真随机的理论更科学呢?
      至少,上帝是不怎么随机的吧?不过也有人说上帝是喜怒无常的小女孩,就这点来说,大概上帝也是很随机的吧,所以K(TheoryWithGod)应该也是一个无穷大的东西吧。。。
      或者,我们也可以说,至少包含真随机的哥本哈根流派的理论并不比上帝理论更科学,如果我们真的认为算法复杂度可以取代可证伪性而成为理论是否科学的一个评判标准的话。

    PS:个人是不赞同可证伪性来作为理论是否科学的评判标准的,这个以前已经写过文章来论述了,不重复。当然我个人也不支持用算法复杂度来作为评判标准,原因现在看来显而易见。


    随机、图灵机与生命

    当然,K这个东西不单在关于理论的理论也就是算法信息论的层面上有很有趣的应用,在别的方面也有有趣的体现,比如生命。

    在Chaitin的《证明达尔文》中,他试图通过将算法与生命基因的等同,来利用证明算法的自然演化的可能性来证明生命是可以通过自然演化而来的而不需要神创。
      这点的相关论述可以看我写的《图灵,蔡汀,达尔文:计算中的上帝》
      这里其实就有了一个很有趣的东西。
      我们可以利用代码复杂度来作为算法演化的选择压力,即如果两根基因可以完成相同的任务,比如都给出T()>n,那么K(T)就是这两根基因在环境下的选择压力,K(T)越大就越容易被环境淘汰。当然,如果T()<=n,那就是直接死亡了。。。
      这么一来,只有用更少的代码实现特定的任务,才能在演化中“生存”下来。

    在这个过程中,似乎随机就完全不是一件好事了,因为真随机代表着无限长的代码,从而这样的基因就完全会被瞬间淘汰。
      在演化的过程中,随机的来源应该更多是基因以外的,是从环境中来的。
      但,进化过程中基因的演变又离不开随机性。
      接着,我们考虑到算法熵也即算法复杂度在很多情况下都可以被视为一种真正的熵,从而高算法复杂度就意味着高温,这么一来真随机就是一个超高温区域,而生命的基因显然是一个低算法复杂度的区域,因此上面的过程就可以被这么来翻译:

    低温系统通过与高温系统的接触来保持低温。

    这倒是一个非常反物理直觉的过程啊。。。不过也不算太反物理直觉,比如对于黑洞来说,黑洞的质量越大,熵越小,而一个黑洞通过从伴星或者星际物质中吸收物质来不断增加自己的质量,从而也可以看作是在不断地通过接触高温物体(仅从引力来看)来实现自身的降温。
      这种类比还有很多,比如有人计算了人脑思考时的信息量,换算成电子比特,然后换算成能量,发现这个能量接近恒星形成黑洞的临界质量(看到有报道中说是钱德拉塞卡极限,但钱德拉塞卡极限是恒星形成白矮星的临界质量,不是黑洞哟)。

    因此,就个人来说,或许可以通过研究引力与算法这两个领域中为何低温系统接触高温系统反而能保持低温这么个问题,来获得很多有趣的东西哟。

    PS:还记得以前本科的时候写过一个科幻小说(再次没写完),其中一个设定就是人的思考与引力微子相关,这么一来,似乎就有趣了很多。


    结尾

    这篇纯粹是没来得及认真思考的随笔,肯定有很多有错的地方,没有的话反而就不对了。
      所以,欢迎拍砖。


    1. 具体可查这篇Wiki

    2. 当然这个说法本身不够严格,因为在AIT中可以证明K(s)<=len(s)+c,其中c是一个和s无关而至于图灵机及语言的选择相关的常数。

    相关文章

      网友评论

      • Sky快跑:为什么Rn会比Rn(init)长而不是相等或者少1?
        LostAbaddon:@Sky快跑 如果len(Rn)<len(Rn(init))(当然其实最好应该是len(Rn)+len(init)<len(Rn(init))),那就是说Rn(init)这个结果可以通过Rn构造出来,那么就不符合K氏复杂度关于随机的定义,因为显然Rn(init)还不够随机,还可以被进一步压缩。
      • LostAbaddon:@红茶料理 同意。
        所以个人认为他的观点最多算是“解释”了奥卡姆剃刀,为提到的“简单”给出了一个可操作的参考。
        但和他本来想要替代的“可证伪性”以及它在科学中的判别作用,应该最多只能算是“一个有趣的尝试”。
      • 十酒三:@LostAbaddon 呃……所以我的意思是:AIT不能把主观任意性消灭掉,它只是把主观任意性浓缩到了定义K的参考机的选择上而已。我觉得那个拿算法熵来搞的取代,最多能是说是把最小描述长度原理(MDL,http://en.wikipedia.org/wiki/Minimum_description_length)这个统计学原理强行推广到选择科学理论上,但是科学理论并不严格等同于二元串,要推广这个原理就要默认某个能编码所有可能的科学理论的语言。然后问题来了:怎么来决定这种语言呢?选择不同的语言在这里的效果跟选择不同的参考机是类似的,所以我也不认为这取代能解决根本问题。
      • 用力劈柴小厨娘:法学女博士看哭了好吗
      • LostAbaddon:@红茶料理 然后这个问题和自然相关的部分,其实现在就完全没有可用的理论了,所以大概也只能算是一个“有趣的想法”吧。。。
        反正我的主要意思就是用AIT的算法熵来取代可证伪性是不靠谱的。。。不过用来作为剃刀的辅助大概还是有一定的参考价值。。。
      • LostAbaddon:@红茶料理 AIT里关于这个问题是有说法的,不过这里限于篇幅和所学就没有展开。
      • 十酒三:呃,采用算法复杂度K还有一个很大的问题:用哪台图灵机来定义K?虽然用不同的图灵机造成的差别不超过一个常数,但是这个常数有可能很大。特别是:如果我想要让某个特殊的串(或其编码着的理论,模型等抽象对象)X受宠的话,我甚至可以为它“量身定做”一台通用图灵机S,里面预存了X,使得我一旦键入“1”就立刻输出X(键入“0+其他程序”则正常执行后面的程序,这只是使得其他的程序延长了1比特),从而有K(X|S)=1.不管X按照任何标准来看有多随机,只要它有限长,这样的S都存在。所以现在问题就变成了:采用哪台通用机是自然的呢?根据什么来决定这个标准?
      • LostAbaddon:@唐露 哎呀,牙疼了。。。
      • 唐露:@LostAbaddon 你才话里酸楚呢,我明明是甜甜甜~
      • LostAbaddon:@唐露 啧啧啧,话语里透着酸楚啊。。。
      • LostAbaddon:@Yanjun 友情赞好啊~~~
      • LostAbaddon: @UltramanScorpia 这个其实就是后面所提到的在一组随机数生成函数Rn中寻找一个的问题了
      • Yanjun:写这种我看不懂的文章,别人一看就知道我是点友情赞了。 :smile:
      • 唐露:我以为这真的只是“记录一些想法的随笔”,随笔啊随笔,我果然还是太天真了,点开我就傻了。留言一则,以示“关心”。
      • 46cacff5c447:而要数学给出一个先验随机的精确定义,似乎是个本质上的困难。由于工程需要,研究概率也是个不错的替代品。
      • 46cacff5c447:所以,数学可以定义后验的随机,是因为‘’通常的数学‘’真包含图灵机理论――它不过等价于直觉主义逻辑,故而可以蓄意找图灵机的晦气,却还是在数学可定义的范围。所以把通常的‘’数学公式‘’变为图灵机实际是一种降级。从研究不可琢磨的先验随机退而研究其‘’外貌‘’。
      • 46cacff5c447:先看了个开头,记下我想到的。
        K定义的随机,基本上是‘’看起来不像是有规律‘’的意思。而另一种也比较有趣的随机是‘’不确定‘’的意思。一个后验,一个是先验。停机序列或任意不可计算实数都是前者,但由于是确定的,所以不满足后者定义。他们也不一定满足‘’知道n位但无法知道n+1位‘’的性质,因为尽管不可计算,但是计算任意有限位都没有矛盾,只不过每次计算你都要重新找一个图灵机。

      本文标题:从随机开始

      本文链接:https://www.haomeiwen.com/subject/wwosfttx.html