|
9.3 系统极值
“深度学习”模型近两年披荆斩棘、战果累累。一个又一个“深度学习”模型的成功,表明了“深度学习”模型具备广泛的适用性、高度的智能化。
“深度学习”模型为什么具备广泛的适用性、高度的智能化?
下面,我们以简化的程序模型来揭示其基本理论依据。
当我们在数据库中检索资料时,常常需要在不同的table表单中提取需要的数据,sql语句一般如下:
select a.date
from table1 a,table2 b
where a.date=b.date
前面我们说过,所谓A∩B的子集合AB,如果把A和B作为系统的基底,鉴于AB同时具备A属性和B属性,则其可看作在A上的投影和在B上的投影的叠加,也就是说上面的sql语句可以看作线性空间形式。
向量AB也可以画作如下的逻辑图:
进一步看,如果我们需要的数据具备更多的table属性,则可能会涉及更多的table表,比如例子2涉及了十个表单属性:
select a.date
from table1 a,table2 b,table3 c,table4 d,table5 e,table6 f,table7 g,table8 h,table9 i,table10 j
where a.date=b.date
and a.date=c.date
and a.date=d.date
and a.date=e.date
and a.date=f.date
and a.date=g.date
and a.date=h.date
and a.date=i.date
and a.date=j.date
线性逻辑图如下:
再进一步,如果我们面临庞大复杂的系统,可能需要分析更加精细化的数据,此时数据也许需要涉及多达一百个表单属性、甚至多达一千个个表单属性、甚至万亿个表单属性,这时线性空间的维度将变得非常巨大,以至于电脑在有限时间内很可能无法响应运算。
简单笼统评估,A∩B相当于A乘以B,如果每个数据库平均检索运算量是2个单位,则A∩B运算量为4个单位;
A∩B∩C∩D∩E∩F∩G∩H∩I∩J的运算量是2的10次方,即1024个单位;
如果涉及多达一百个表单属性叠加,则是2的100次方;
也就是说,每增加一个表单,则增加2倍的运算量。表单越多,运算量增加的幅度越快,以指数增长攀升。
这就是单层线性空间的局限性!(本文反复探讨的正是这个核心话题)
在实践中程序员们发现,可以把上述单个复杂的sql语句拆分为几个sql语句,分步骤运算之,这样运算有时会更快得多,比如例子2中的单个sql语句可以拆分为以下两个sql语句:
select a.date
from table1 a,table2 b,table3 c,table4 d,table5 e
where a.date=b.date
and a.date=c.date
and a.date=d.date
and a.date=e.date
into temp step1 with no log
;
select a.date
from step1 a,table6 f,table7 g,table8 h,table9 i,table10 j
where a.date=f.date
and a.date=g.date
and a.date=h.date
and a.date=i.date
and a.date=j.date
;
两个步骤sql语义的线性形式逻辑图如下:
【请注意,上图就是“深度学习”模型的基本逻辑结构图】
如果把一个层次的线性空间整体看作集合A ,另一个层次的线性空间整体看作集合B,则A与B层次的复合,其实是更宏观概念的交集A∩B,如下:
简单笼统评估,拆分两个步骤A∩B∩C∩D∩E &step1∩F∩G∩H∩I∩J,运算量等于2的5次方+2的6次方=32+64=96,大大小于单步骤的1024个单位。
并且实践中程序员们又发现,如果把上述单个复杂的sql语句拆分为三个sql语句,会比拆分为两个sql语句运行更快,比如例2可以拆分为以下三个sql语句:
select a.date
from table1 a,table2 b,table3 c,table4 d
where a.date=b.date
and a.date=c.date
and a.date=d.date
into temp step1 with no log
;
select a.date
from step1 a,table5 e,table6 f,table7 g
where a.date=e.date
and a.date=f.date
and a.date=g.date
into temp step2 with no log
;
select a.date
from step2 a,table8 h,table9 i,table10 j
where a.date=h.date
and a.date=i.date
and a.date=j.date
;
三个步骤sql语义的多层次线性形式逻辑图如下:
简单笼统评估,拆分两个步骤A∩B∩C∩D &step1∩E∩F∩G &step2∩H∩I∩J,运算量等于2的4次方+2的4次方+2的4次方=16+16+16=48,运算量更少了。
如果需要,可以引入更多的隐层。比如十个层次的宏观复合就是下面十个圈圈的重叠部分,稍微有点眼花缭乱了:
既如此,如果我们拆分为更多步骤(比如说对例子2的sql拆分为九个步骤语句),会不会更快呢?
答案是否定的,因为步骤越多产生的临时表单temp就会越多,辅助性的数据交换需要消耗更多的资源,因此过多的步骤也许整个程序运行反而会变慢。
那么,既然过多的步骤(或者过少步骤)都会导致运算缓慢,如何找到恰如其分的平衡点呢?
程序员都知道,这个平衡点就是程序的最小复杂度。
在数学中,关于函数的最值(最小值、最大值)有一个“极值定理”:
一维的极值定理容易理解,因为函数只有一个自变量参数而已。但是复杂的程序设计任务往往需要程序员考虑更多的参数,涉及到操作系统进程、碎片化多任务、并行CPU、总线结构、虚拟MEM数据交换、硬盘阵列存储位置等等,都会消耗运算资源。所有这些运算参数资源消耗的总和,体现了一个程序的复杂度。也就是说,我们不仅仅需要了解每一个参数的“极值”条件,更需要了解全系统的共同作用的“极值条件”。在参数非常多时,精准找到“系统整体极值条件”是并不容易。
这种困难的焦点在于深度学习模型面临的是高阶张量系统,是多重线性的系统。
再以面向对象技术的封装‘对象’为例。面向对象技术是目前流行的系统设计开发技术,可以看作一种在程序中包含各种独立而又互相调用的对象的思想。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的子系统“机器”,即对象。它通过抽象封装把最常用的的逻辑过程和数据打包,提供应用系统最常用的基底;然后通过“继承”形成联结类的层次模型,达到多态性。
以此而论,面向对象技术的逻辑结构也可以看作“深度学习”模型的雏形(正如多步骤sql语句的逻辑模型)。
“深度学习”模型的关键是误差最小化,而误差最小化的精准判断力,要求准确评估“系统极值条件”。 但是面向对象技术关键的困难是,究竟哪些‘对象’是多层次逻辑系统的每一层的特征‘基底’呢?选取那些‘对象’作为系统基底才满足“系统整体极值条件”呢?
如果‘对象’结点本身结构过于简单,那么系统运算的压力会转移到关联线,深度学习逻辑中的关联线条就会非常复杂;如果深度学习逻辑中的关联线条很简洁,那么系统运算的压力会转移到‘对象’结点,那么‘对象’子系统可能会变得非常繁重。很显然,‘对象’结点过于简单或者繁重,都可能导致整个系统的复杂度攀升。
另外,即使我们已经有了掌握了大量的“大小都合适”的‘对象’,在一大堆‘对象’中选取哪一个作为恰当的结点也很重要。比如,如果把太阳作为太阳系的结点基底,火星绕太阳的轨道是一个简洁的椭圆;如果把地球作为太阳系的结点基底,火星绕地球的轨迹会非常复杂,虽然这样也可以正确表达火星的运行方式。
在狭窄领域内,程序员们可以凭借日常经验,摸索选取合适的基底结点。但是人工的有限经验难以满足广泛普遍意义下的合适的基底,这只能靠“深度学习”模型人工智能系统自主选择。
那么,究竟选取那些‘对象’作为系统基底才满足“高阶张量系统极值条件”呢?我们知道,函数极值的关键是找到导数为零的那些点。同样的道理,“系统极值条件”的关键是找到偏微分为零的那些点,而微分不变性是线性时不变系统的典型特征。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 15:09
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社