探讨一般的生成式对抗网络(GAN)难以模拟术数运算过程的原因

yinfupai--探讨一般的生成式对抗网络(GAN)难以模拟术数运算过程的原因--

上一篇文中有人在一评论中提出是否可以利用生成式对抗网络来对射覆的模拟,这个以前简单实验过一下,效果并不理想。 不理想是有原因,主要是一般的生成式对抗网络的实现,本质上是从某个潜在空间到某个样本空间的转换或映射,对于高维数据的学习时,时常会表现出一些缺陷,从直觉上来说,通常它无法很好地模拟循环与周期的概念。 比如试图学习的是这样一个清晰的分布。 而实际上训练出来的结果却是这样: 而且这个并不能进一步进行优化。 本来期望它能如此美好: #视频请看公众号原文 实际上它却: #视频请看公众号原文 再比如,如果假设所有的事物都可以划分为八个类,那么在一个无限大的空间内,有限的词汇可以分别聚类为八团,那么用八个高斯团进行表达,大概长这样: 左边可以理解为是各种事物混杂在一起,而右侧可以理解为进行了类似八卦的归类,每个都符合高斯分布且用了不同的颜色代表类别。 理想中的归类过程它应该是类似这样的: #视频请看公众号原文 但是实际上GAN生成过程中,它的过程是这样的: #视频请看公众号原文 因此,它生成的结果只能是这样,分类效果显然不够理想。 这也给了我们一些有意义的一些启示,对抗在某些任务上的表现尽管可以不错,但它本身是有很多问题的,抽象到现实,如同战争不能解决一切问题一样。 如果引申一下的话,会发现更有趣的事情是生成式对抗网络如同一个兑卦,兑卦不但有对抗的含义,还有交换、迁移、变革的含义,而GAN网络也似乎更擅长的任务是风格迁移与变化,而不是创造。 通过一定的方法上面的问题是可以克服的,不过那就需要更复杂的研究了,这里只是简单一提,有兴趣的研究者,可以交流。 原文始发于微信公众号(道家阴符文化):探讨一般的生成式对抗网络(GAN)难以模拟术数运算过程的原因

Read More

如何让计算机学会周易取象—兼谈对人工智能研究的一些认识

对很多人来说,让计算机也学会取象,这个听起来很玄,其实这事一点也不难,明白了原理也就简单了。易学中的类象,从抽象的角度来说,其实就是一种对于万事万物的归类,由于圣人观阴阳之开阖以命物的缘故,人类在对客观世界中所感知的事物进行起名的时候,总会依照某种直觉性的规律。而这种规律是超越语言性的,在近代来的研究的语言翻译模型,也能够能够发现类似的有趣情况,针对两种语言之间的翻译的模型,可以迁移到另外两种语言之间进行一些调整然后加以使用。这意味着其实人类的语种,在语法及结构上,看起来似乎很大的差别,但背后超越了符号的直觉是一致的,因此对于符号之间的组织方式都会暗合某种统一的规律。还有使用如GPT之类的模型进行人类语言的文本生成的时候,能够进一步发现,语言模仿一个作家的风格行文是一种很容易的事,所谓的不同风格,其实就是语句偏爱于使用哪些词语来进行语句的组织,另外就是给事物加上多少个维度的描述,这也符合某种分布,一旦捕捉到了这些,可以很容易地对语言进行模仿。甚至包括人的世界观、价值观、人生观,所塑造出来的思想而反映出来的说话模型,从数理角度上看,也只是一种概率分布形式。一个典型的例子便是有人对红楼梦里面的人物对话进行了训练,然后模型能够推断对话是由什么人物所说,正确率极高。相应的,对于红楼梦非常熟悉的人,尽管背不出红楼梦,但是看到某些对话时,也能凭感觉猜出来是谁说的。因此反过来,对于人来说,语言风格是一种“感觉”,而这种“感觉”能够让人在写与读时共同得到“感受”,人类的这种感觉,本质上是对特定概率分布的感知。这是一种非常奇妙的情况,这意味着,人类通常在阅读一两句话时,往往能够迅速从感觉上捕捉到这种分布,然后进行判断,这个过程很有可能不是通过物理运算进行的,而是通过生化机制进行的。有时候说婴儿出生下来是一片白纸,这种说法不够正确的,从模型思维上来看,婴儿更像是事先拥有了一个巨大的可进行调整的模型,对于这种模型的训练,因此能够快速地进行学习。但这种学习得越多, 模型就会变得越加定型化,因此人会产生各种思维定势,并被限制在某些看不见的桎梏中,因此在道家会要求,修道都需要像婴儿一样进行学习,这其实就是力图摆脱后天迁移的影响,回归到天然的模型上去,从而能够拥有更强的学习能力。无论是八卦类象,还是十天干类象,或是各门术数中独有的符号名称的类象,都可以理解为一种归类的方法。易学中最神奇的是这类归类方法具有很强的相通性,比如只要是按十天干命命的,无论它在什么样的易学模型中进行组织与运算,它本身的类象仍然是相同的,这意味着在不同的术数模型中,类象的划分仍然会是一致的,有极强的通用性。人类的语言背后既然有一种统一的规律,那么类象的划分必然也可以与这种规律相互对应。但另外还有一个问题是,类象的归类也要考虑到不同的场景下词语发生变化的可能,如现代网络时代出现的很多新网络词汇,例如像抨击社会现象的“时间管理大师”,这便有多重含义,另外还有一些情况,比如有时候谐音字也可以用取象,虽然应用颇多,但这是否足够合理,还需要进行验证。因此这只是一个初步的测试,方便比较简单,直接加载Bert的词向量模型后,然后进行文本分类,例如类象这样的描述:君,乾父,乾大人,乾老人,乾长者,乾名人,乾公门人,乾金玉,乾宝珠,乾圆物,乾木果,乾刚物,乾冠,乾镜,乾公堂,乾楼台,乾高堂,乾大厦,乾简单来说就是将将卦名视作类象的分类名称,通过整理好的训练集在经过6000次训练,在训练到1500次的时候,训练集的正确率已到达近75%对于会不会产生过拟合的现象,如果训练数据中存在有不正确的数据,或是给出来的关键词有不准确的情况下,过拟合才会产生问题,如果有一份足够好的基础数据用于训练,则不需要太过于担心过拟合问题。错误率仅有0.046,这意味着约有94.4%的准确率,虽然还并不够高,但可以将就用了。用一组词组进行实验,可以看到,确实能够对事物起到归类的效果,比如能够正确辨认出“黄河"、"长江"属于水的。再随便测试几个:归类的效果还是令人满意的。这个有什么用?比如说,有时候不知道某个现实的事物属于哪个卦时,便可以使用这样的系统帮助进行推断,甚至配上一个文本生成器,设计好句式的话,它甚至能描述出断语出来,当然,这个事会更加复杂一些,目前并不容易实现。值得一提的是,在提出来做这个时,有人提出可以用焦氏易林的象来做,然而经过测试,发现效果极差,模型最多只能收敛到百分之六十几。后来找了一下这份类象的出处,再翻了一下尚秉和著的《焦氏易林注》,发现这份类象表有严重的问题。首先尚秉和著的《焦氏易林注》中提炼象时,并不是针对单个卦进行提炼的,因为《焦氏易林》中的每一组都是两上六十四卦,而在解构时,并非是单纯的采用单个卦的解析关系,因为两个六十四卦,除了可以拆分为四个卦外,还可以进行互卦拆分、错卦拆分,然后形成至少八个卦之间的关系进行相互运算,因此它是一个整体的关系来进行的取象。如果简单的视作单个卦来进行解读的话,必然会出现难以挖掘的情况,而当初提炼这份类象表的人,只是用计算机代码去扫描了一下《焦氏易林注》中的词语,然后进行了分词提取,因此得到的归类的卦象本身会有极多的冲突,因此放在模型上,结果便不能很好地进行收敛。这也给了一个更加可靠的验证的反向验证,那就是并非是所有的词组可以随意地放在一起随便归类,背后依然会依照一些原则,也可以说,传统的基本归类方法是确实有效的。之来又实验一下十天干的类象,效果依然不错,这里便不一一贴图了,回头会考虑再做下相对更加丰富的地支类象。这只是一时兴起所做的研究,如果大家有什么想法,欢迎在评论中指出。

Read More

残差网络

见到知乎上有一个解释说,基础形式实际上类似于差分放大,很有道理。 假如: F'(5)=5.1 从5到5.1的变化率是极低的,因为5的基数太大,所以可以进行拆分: H(5)=5.1, H(5)=5+F(5), F(5)=0.1 此时由于在拆分项中0变成0.1,这个变化率就达到了10%,便放大了这种效果。 因为神经网络不能很好辨识出这种拆分,所以需要人工设计结构进行辅助, 一般理论上认为网络层数越多,提取细节与抽象能力越丰富,然而实际层数迭代多了,会出现梯度爆炸或梯度弥散 ,这可以通过通过正则化解决。 但即使解决了这个问题,仍然会有退化问题,即层数多了后,出现准确率反而下降的情况。 这里有一个变化的技巧就是,在 H(x) = F(x) + x 时,当F(x)=0时, 显然H(x) = x,如果f(x)越来越趋近于0,则h(x)越来越趋进x 所以可以构造这样的形式: 所以,x可以直接跳两层作为输入,因为h(x)=x,f(x)这里当然不会等于0,但是可以通过relu使得矩阵中尽量多的地方变成0,从而实现残差放大。 X如何变化是不清楚的,因为它本来就是一个需要求的值,但这里可以直接采用X的原值,因为是如果改变了X值,那么就会破坏掉残差对应的原来的X结构,因为这里的残差实际上不是差分,而只是一个通过训练后才有可能不断向差分靠拢的值。      

Read More

聊聊周易参同契(十):建木通天地,妙道由灵根

内以养己,安静虚无。原本隐明,内照形躯。闭塞其兑,筑固灵株。三光陆沉, 温养子珠,视之不见,近而易求。黄中渐通理,润泽达肌肤。初正则终修,干立末可持。一者以掩蔽,世人莫知之。 “己”字,在甲骨文之中,是一个绳索弯曲的形状,本义是丝的头绪,用以缠束丝。在汉代的《说文解字》中说:“中宮也。象萬物辟藏詘形也。” 通常这个字用对别人称本身用,而在十天干之中,"己"在戊之后,居天干第六位。 因有离纳己者,此处内中养己,实是养离,养离便是养光,因为若是没有光,如何又能“内照形躯”? “原本”,指的根本本性,在后世的名字,便是元神。“隐明”,并不是指元神不发光,而指的是元神自身虽然隐而不现,然而却有光显现出现,向外照耀。 通过在安静虚无的状态下养己,光神虽然隐而不现,然而却有光照出,便用这个光来照着自己的形神躯体。 说到这个光,又需要说到元神了,正常人的元神并非一个实体,也并没有一个具体的形象,它是合契于虚空的,然而又真实存在的。 用一种比喻的话,它类似于世界中的空气对普通人一样,虽然看不见,但是存在。 从物质意义上,可以知道空气的成份,从道学意义上,可以分解元神的构成。 元神虽然自己无形无象,然而却可以通过光来展现,按其光又分胎光,爽灵,幽精,这三种光又称为三魂。 其中胎光为太清阳和之气,爽灵为阴气之变,幽精为阴气之杂,而爽灵与幽精,而三魂既与日月星三光相应,同时又对应于三台,它可也分为阴阳来认识,阳的部分叫胎精,阴的部分叫爽灵,而阴阳相混的部分叫幽精。 当人身体出现问题,或是气运不佳时,元神发出来的光便会显得晦暗。 所以有一种认识,认为可以带入外界的光明来助旺元神,通常以火为象征,或用火炬,或用蜡烛,或用油灯,根据人的星命布下法阵,通常本命灯用三盏以照三魂,于行年上用灯七盏以照七魄,并在太岁上再点上一盏,以光照之,认为于人身便可发生此呼而彼应的变化,从而使元神安定,变得不再晦暗,民间常见元辰灯也类似这个道理。 还有些流传变化后,更加简洁的象征,如民间有一些仪式中,用火在人身上绕圈,认为能够去除晦气等,当然这种外部的行为实际上效果并不理想,因为内在的存想引导相呼应配合才是关键。 古代有些收录的传抄的道经里,将三魂与三尸相混淆,这个必须要注意,其中的尸指的就是三尸,三尸的名字是彭质、彭倨、彭矫。 实际上它们的具体名称是不用管的,因为三尸通常与九虫联合在一起的,它们指的是人体中的寄生虫。 比如说上尸彭倨居于人脑,会影响人的视力,还有可能导致精神障碍,严重的给人带来生命上的危害,从现代来看,指的会进入人脑部的寄生虫。 古人说,不斩三尸,服食丹药都是没用的,求道必须要先斩三尸,虽然说古人卫生习惯不如今世,染上的寄生虫比较多,然而也不是说现代就没有了。 比如现代医学来看,弓形虫便包含在彭倨概念中,近一半的人类都染有,并且因为现代一些研究表现,弓形虫会影响人的性格,这非常吻合上尸彭倨的特点。 古人对于一般除三尸九虫,通常会要求服用一些药物辅助。一种常见的药方是用附子七枚炮制,芜荑二两炒,乾漆二两炒令烟,然后将它们筛捣为散,常以空腹酒服一匕,每日都服,总共服上十二天,便能将身中的虫子去除掉。芜荑与乾漆在中药上都是杀虫用的,附子有一些毒性,不过它补火助阳,有逐风寒湿邪的作用。 按古籍中载,还有一种更加简洁的就是使用人的手指甲,首先自己身体健康的话,可以于寅日剪手指甲,申日剪脚指甲,然后于一年中的七月十六日,将剪下的指甲烧成灰,然后吃下,也能驱除三尸。只是此说于中医中未有记载,管不管用是不清楚的,不过人指甲确实可以入药,也没有见有毒副作用描述,有兴趣的或可一试。 前面说的有驱虫效果的药物毕竟有毒性,随意服食还是危险的,所以也有不服食药物,单凭靠内修来解决它们的方法,这个难度自然要比用药物更高一些。 按《五行紫文》载:常用朔望之日日中时,临目西向,存两目中出青气,心中出赤气,脐中出黄气,於是三气相绕,合为一,以冠身,尽见外,洞彻如光之状。良久,乃叩齿四十通,毕而咽液。此谓炼形之道,除尸虫之法,久行之佳也。 这是一种炼形的方法,根据这种功法结构来看,它主要是用的青黄赤气,取的是初一或十五的午时,用三气相绕合一后覆盖全身,洞彻光明,最后叩齿咽液。 实际这也完全可以通过勤加修炼金光法,并使金光炼形,同样可以达到去除三尸的效果。 炼形法很多了,其它还有玉液炼形法,太阳炼形法,流火炼形法等,根据自身情况的不同,可以选择性加以采用。 另外还有通过符法来进行斩三尸的,既避免了服食药物可能带来的危险,又解决了内修耗费时日太久的问题,唯一的缺点便是要符法内炼水平较高的人来制作符箓,才能收到实效。 综上所说,虽然修炼下手是要考虑斩三尸的,但这个并非是立即就要进行的事,完全可以通过能修炼过程中不断将它制伏。 后世时常将七魄错认为阴害于身的东西,这种思维方式在明清最为盛烈,然而这种逻辑显然与古道家运用北斗的认知是截然相反的。…

Read More

研究CNTK(六):ResNet

发挥图像识别的威力还是需要ResNet结构,最早是微软亚洲研究院提出的,这是可以达到90%以上识别率的网络结构,比如resnet cifar10,需要使用高达21个卷积层,并且每一步都要进行重新的批量正则化与归一化。 谷歌2016年8月份开源了Inception-ResNet-v2,是基于TensorFlow的,识别效果更为强大,能够将阿拉斯加雪橇犬(左)和西伯利亚雪橇犬给准确分类出来,另外还有V3与V4,网络结构也变得更深,唯一值的一提的是Inception-v4没有residual连接,但是效果与V2一样。 不过这都是些是些个人计算机运行起来很吃力的东西,在CNTK里这个同样有ResNet的各种实现,默认的ResNet20_CIFAR10.cntk将会进行160次迭代,这个运算量非常大也非常缓慢,不过识别精度非常高,但是不是妨尝试运行下的。 在第16次迭代时可以达到准度度已经可以达到是百分之86.1%以上的正确率了,每次迭代花费时间约在25s左右,所以时间也就花费了几分钟而已,它提高识别率的速度甚至比简单的卷积网络还快。在达到28次左右时,实际上就达到了89~90%左右的识别率,真正突破90%大概是到了36次左右,即大概15分钟便可以做到90%的识别,这个完全可以接受。不过按文档说,训练到最后错误率最高也只能达到8.2%左右,而人类的估计是6%左右,这个网络结构还是不足以超过人类,而叠加到了n=18的网络,则可以达到6.2-6.5%的效果。简单测试了一下,网络的一代迭代大概153秒,要迭代160次,约要跑6.8个小时,才可以达到6.2-6.5%的效果。   根据有人做过的研究来看,ResNet也不是层次越多越好。 到了1202层的时候,反而效果比110层更差了。   比较了一下: ResNet20_CIFAR10,numLayers =3,learningRatesPerMB = 1.0*80:0.1*40:0.01 ResNet18_CIFAR10,numLayers = 18,learningRatesPerMB = 0.1*1:1.0*80:0.1*40:0.01 除此之外并无区别了。 所以分析ResNet20_CIFAR10.cntk源文件就好 # ConvNet applied on CIFAR-10 dataset, with data augmentation…

Read More

研究CNTK(五):ConvNet_CIFAR10.cntk、ConvNet_CIFAR10_DataAug.cntk

从任务上来说,识别物体是最艰难的,因为物体大小开关都会发生灵活变化,传统的神经网络识别这个几乎是不可能的任务,而卷积技术则克服了这一点,不过仍然需要依赖强大的计算量。 ConvNet中的模型是: model = Sequential (             Normalize {featMean, featScale} :             ConvolutionalLayer {64, (3:3), pad = true} : ReLU :             ConvolutionalLayer {64, (3:3), pad = true} : ReLU…

Read More

研究CNTK(四):ConvNet_MNIST.cntk

可以看出结果为: Minibatch: errs = 0.470% * 10000; ce = 0.01797164 * 10000 Final Results: Minibatch: errs = 0.470% * 10000; ce = 0.01797164 * 10000; perplexity = 1.01813410 错误仅只有0.47,相当于正确率为99.53%,这个非常高了。 这是采用了三层卷积的效果,迭代了40次,算了挺久的,按MNIST的网站上的公布最好成绩为0.23,共计用了35个卷积层,很难想象这个得算多久。…

Read More

研究CNTK(三):MNIST识别之02、03、04

与一个隐含层的神经网络不同的体现只在MODEL这里,它是这样定义的:      在01中定义是:      model(x) = {             s1 = x * featScale             h1 = DenseLayer {200, activation=ReLU} (s1)             z = LinearLayer {labelDim} (h1)         }     在02中的定义要配合图比较直观:…

Read More