神经网络

 


神经网络

从脑科学角度出发:人脑学习新技能,是发生在神经元这个层面的。因为练习一个动作而经常被一起触发的神经元,最后就会长在一起,整个网络结构长好了,就相当于一个技能长在了您的大脑之中。

传统的人工智能对人思维的模拟,走的是结构模拟的道路。

仿照人脑的内部结构和工作机制,来制造机器。但是,人脑实在是太复杂了,脑科学的研究也才刚刚起步,计算机科学家又岂能复制出跟人脑一样的复杂结构呢 ?

所以,哪怕人工神经网络甚至在计算机之前诞生(1950年左右),却解决不了什么实际问题。

  • 1960-1970年,被美国政府的经费管理部门打入了冷宫,因为花掉了很多钱没有成果。

  • 1980年,由于摩尔定律使得计算机成本大幅度下降,英特尔等公司的微处理器性能的提升使得廉价的分布式并行处理成为可能,人工神经网络经过改进后又流行起来。第二次拿到了美国政府的资助。不过,由于人工神经网络的一些根本性问题没有解决,对于复杂的人工智能问题依然束手无策,随后不多久这个领域的研究又“凉”了下来

  • 1990-2010年,是全世界人工智能的低谷,那个时期人工智能的博士生在找工作时都不好意思讲自己研究的课题是人工智能,因为没有人要。

  • 现在您知道了,特别火。

    这要特别感谢几个人,就是在大家都不看好人工神经网络的时候,本杰欧辛顿莱昆三人分别在各自的大学从事大家都看不上的研究,他们通过将概率模型和其TA机器学习的算法引入人工神经网络,改进了这项历史悠久的机器学习技术,并且拓宽了TA的应用范围。

    本杰欧辛顿莱昆三个人的贡献并不在于最早提出人工神经网络的概念,而在于完善了这种机器学习的方法,特别是通过实现深度的神经网络,奠定了今天深度机器学习的基础,并通过实验验证了TA们在工程上的应用前景。

    随着当时云计算的兴起,他们有可能实现非常大规模,也就是网络层次非常深的人工神经网络。由于过去人工神经网络在美国政府科研机构的名声不太好,这次他们换了一个说法,叫做深度学习,有时也称为深度神经网络(DNN),这回是一炮打响。

现在神经网络复出,在江湖中的外号是“深度学习”。

之所以变化这么大,就是计算机科学家发现模拟人的思维(结构模拟),这条路走不通呀。

人的大脑里有数百亿个神经元,大脑计算不是基于明确规则的计算,而是基于神经元的计算。大脑的识别能力,也不是靠临时弄一些规则临时编程。大脑的每一个功能都是专门的神经网络长出来的,那计算机能不能效法大脑呢?

突然,就有科学家灵光乍现!!

如果 不模拟人脑的内部结构只模拟人脑的功能 呢 ?

  • 什么样的复杂系统可以产生智能 ?
  • 机器有没有可能像人一样,具备学习能力,遇到了问题,自己能想办法解决 ?

 


复杂网络与网络效应

答案是:复杂网络(Complex network)。

网络就网络,什么是复杂网络呢?

复杂网络是相对于【规则网络】、【随机网络】的。

  • 规则网络:网络有某种规则,比如星型网络(一个节点为中心,其TA节点只与中间节点连接)、以及数据结构里面的二叉树、线性表。

  • 随机网络:节点之间的连接完全是随机的,没有规律。

     


接下来,我们聊聊复杂网络里最神奇的网络效应。

人的思维是个体行为,作决定彼此不干扰。这有好的一面,但是也难以集中很多人的智慧,产生叠加的效果。但是神经网络是建立在复杂网络基础上的,产生了网络效应

网络效应:自同步、自组织、自适应、自演化(人工神经网络的根源),复杂网络的连接产生,是相对于规则和随机的网络连接,所以具有网络效应。

  • 何谓,自同步?

    比如,夏天的晚上,萤火虫按照同样的频率闪烁;

    比如,稻田里,青蛙整齐的鸣叫;

    比如,剧场中,观众的鼓掌由凌乱到整齐的变化。

  • 何谓,自组织?

    现代新型的战争形式,已经不再是那种飞机、坦克、机枪、战壕的方式,而是变得更加分散,更加的小型化,更多地偏向反恐战争;如美国,就以打击恐怖组织为名头,对中东发动了一次又一次的间谍行动和无人机轰炸。

    因为美国的无人机和间谍活动是一种不平等的战争方式(被攻击的人几乎没有反应时间、也不知道无人机从哪里来、目的是什么),因此唯一的方法就是隐藏身份。

    这就是在传统战场已经消失的情况下,我们需要学习应付和面对的新的战争形态,类似无人机打击这样的新战争模式,极有可能在毫无预警的情况下,突然出现在你我的身边。

    不过现在,要出动,就是几十甚至上百架无人机组成的编队。

    那么,这么多无人机同时起飞,怎么控制呢?怎么协调行动,防止无人机和无人机撞到一起,然后坠毁呢?

    最简单的方法,就是给每一架无人机都配备一名控制手,远程遥控。但是,要让这么多控制手都精妙地配合,也是不可能完成的任务。

    另外一个办法是,采用星型网络(规则网络)。成立一个控制中心,统一发号施令,来控制每一架无人机的行动。TA的问题是比较脆弱。一旦控制中心发生故障,整个编队都会受到影响。这样的无人机都有一个无人机头领,只要干掉领头的无人机,那其TA无人机就失去目标只能返航了。

    目前军队采用的是复杂网络。把无人机组成一个复杂网络,每架无人机都是网络中的一个节点,TA们之间的通信信道就是连接。无人机和无人机之间,可以实时通讯,信息共享,协同搜索、侦察和攻击,自发地产生秩序,彼此协调行动,这就是复杂网络自组织的特征。这种自组织的网络一旦形成,无人机队伍行动就没有任何影响了。

  • 何谓,自适应?

    2018年5月,《自然》杂志子刊发表的一篇文章,用网络视角研究拐卖儿童的论文,做出这项研究的是武汉大学王真等 4 4 4 位学者,他们抓取了寻子网站 “宝贝回家” 上的 22 , 139 22,139 22,139 条网络寻亲数据,使用这些数据构建了省、市两级的拐卖儿童犯罪网络。


    研究发现,最重要的拐卖路径,是从欠发达地区到发达地区,尤其是到东部经济发达、但是重男轻女观念较为严重的城市。

    从拐卖距离看, 42.4 42.4 42.4% 的拐卖都发生在同一个城市之内。即便是跨城市的买卖,拐卖地和非法领养地也相差不到 500 500 500 公里。这表明,相当一部分儿童拐卖都是短途的和城市内部买卖,而不像很多人想象的那样,儿童被卖到了很遥远的地方。

    更重要的是,犯罪分子的网络,具有自适应的特点。警队如果打击了这个城市,犯罪分子就转移到另外一座城市。警队如果打击了这条铁路干线,他们就转移到另外一条高速公路。所以,我们必须把拐卖儿童看作是一个复杂网络。

    但在复杂网络的视角下,警队不仅可以找出哪些城市是关键节点、哪条线路是主要路线,我们还可以根据犯罪团伙的社会网络,分析出他们面临不同打击方案时的应对方案,以及替代的拐卖路线。

    对于自适应的犯罪网络,只有这样,才有可能制定出更加系统性的、更有预见性的打击方案,达到事半功倍的效果。

  • 何谓,自演化?

    自演化这个特性,自发演化的东西往往比设计出来的东西好,神经网络算法就是建立在自演化这个网络效应上的。

    科学家知道模拟人脑的内部结构这条路走不通,所以试着只模拟人脑的功能,用数学方法模拟【人脑的神经突触网络】。

    而后他们尽管利用复杂网络的思路来模拟【人脑的神经突触网络】,但是,科学家并不知道这个神经突触网络到底是怎么“思考”的。

    而人工智能思考问题的方式,是通过反复的训练,来调整参数,优化参数,而这个过程中充满了大量的随机性

    所以,科学家唯一能做的,就是给人工智能喂大量的数据。

    用小孩来打比方,这就好比说让一个小孩学习“什么样的东西是狗”。您给他看大量的狗和不是狗的照片,他一开始纯属猜测哪个是狗哪个不是狗,但是每次您都告诉他正确答案。时间长了,他的判断准确度就会越来越高,最后尽管您从来没有向他描述“狗的定义”是什么,他自己就能学会判断狗。

    事先并不需要输入任何决策规则,让系统自己学着判断。系统内部有各种神经突触连接,如果这一次猜对了,相关的连接就会增强;如果猜错了就会减弱。这样用海量的例子训练,系统自己就能学会判断。

    训练会加大权重的 确定程度。比如,一开始神经元给这个输入数据的权重是 0.9 0.9 0.9,但这是一个随机的分配,有很大的不确定性。随着训练的加深,神经网络越来越相信这个权重应该是 0.11 0.11 0.11,参数稳定在这里。看数值,减小了。但是确定性大大增加了。

    对比到人,这就好比篮球,训练的目的不是让投篮的用力越来越大,而是越来越准确。

    这的确相当于大脑神经元之间的连接越来越稳固!!

    经常在一起激发的两个神经元会“长”在一起,TA们之间的电信号会更强,电信号强对应参数更确定

    复杂网络自演化,可以自我学习、自我优化、自我迭代,从而变得更加强大。神经网络算法,就是在拥抱了复杂网络这个视角和工具之后,才重新焕发了生机,实现了质的飞跃。

1989年,有科学家证明,用最简单的神经网络反复训练,每次只要系统做对了就增加相关连接的权重,给足够多的时间最后TA就能够做成任何事情。

神经网络大概长这样:

这个神经网络,跟【人脑的神经突触网络】没有任何关系(没有模拟人脑的内部结构),TA只是一个特殊的 分类器(只模拟人脑的功能)。

在这个分类器中,左边的一端(输入端)输入一些信号,今天这些信号就是数据,另一端(输出端)则会在某一些事先设定好的类别中挑选出一类。

在这个网络的内部,是一些信息传递通道(弧),以及通道交会的节点。

由于世界上很多看似人工智能的问题都可以变为分类问题(等价问题),比如各种图像识别、语音识别、博弈、计算机辅助决策、计算机翻译等等,因此人工神经网络这种工具近年来越来越普及,利用TA们解决了很多过去的难题。

深度学习大概长这样:


深度学习,就是网络层次非常深的神经网络;深的意思是,中间层比较多。

AlphaGo 的深度人工神经网络跟生物的大脑一样,是分层的,总共有 13 13 13 层。

AlphaGo 在下棋的时候,会把棋局转化为数据,输入到第一层神经网络,处理之后,然后,输出一个数据集合,输入到第二个神经网络,以此类推,总共运行 13 13 13 次,最后计算出棋子落下的位置。

凡很大的问题,都是分层管理的,如中国有十几亿人口。

我们的国家是分层管理的,从乡到县,从县到厅,从厅到省,从省到国家,都是一级一级管理的。

我们的公司也是分层管理的,总经理管理总监,总监管理产品经理,产品经理管理程序员,一级一级地管起来,这样一个大的机构就可以管起来。

如果没有这样一个清晰的机构,一千个人管理起来就很费劲,一会儿这儿出问题,会像一个救火队长一样冲过去了。

在计算机里常常遇到很大的问题,这个问题不好解决,怎么办呢?

就变成一个跟它原来很相似的,比原来规模小一点的问题来解决。第二个小一点问题的解决方式寄希望于什么办法呢?也是通过跟它有点相似的,但是规模再小一级的,一级一级到最后一个个体的时候,就好解决了。

分层的好处,大大减少了运算量。
 


神经元的计算

我们大脑里有数百亿个神经元,大脑计算不是基于明确规则的计算,而是基于神经元的计算,这也是神经网络要实现的功能。

比如,识别下图的动物?

但家里只有猫猫🐱和狗狗🐶,所以这是一个二分类任务(二选一的分类问题)。


之所以可以得到正确的结果,那是靠复杂网络的网络效应(自演化),但具体的计算就是神经元的事了。

计算机的底层单元是 晶体管(硬件)、二进制(软件),而人工神经网络的底层单元是 神经元。

神经元计算的指标,就是在不断的调参、优化参数。

训练会加大权重的 确定程度。比如,一开始神经元给这个输入数据的权重是 0.9 0.9 0.9,但这是一个随机的分配,有很大的不确定性。随着训练的加深,神经网络越来越相信这个权重应该是 0.11 0.11 0.11,参数稳定在这里。看数值,减小了。但是确定性大大增加了。

举个例子,下图是一个根据交通信号灯判断要不要前进的神经元。

TA由三部分组成:输入内部参数输出


这个神经元的输入就是红灯、黄灯和绿灯这三个灯哪个亮了。

如果用 1 1 1 表示亮, 0 0 0 表示不亮,那么按照顺序,图中的 [ 1 , 0 , 0 ] [1,0,0] [100] 这组输入数字,就代表 [ 红 灯 亮 , 黄 灯 不 亮 , 绿 灯 不 亮 ] [红灯亮,黄灯不亮,绿灯不亮] [绿]

神经元的内部参数包括 “权重” ( W e i g h t ) (Weight) (Weight),TA对每个输入值都给一个权重,如图中给红灯的权重是 − 1 -1 1,黄灯的权重是 0 0 0,给绿灯的权重是 1 1 1。另外,TA还有一个参数叫“偏移 ( b i a s ) (bias) (bias)”,上图偏移值是 − 0.5 -0.5 0.5

神经元做的计算,就是把输入的三个数字分别乘以各自的权重,相加,而后再加上偏移值。

比如现在是红灯,那么输入的三个数值就是 [ 1 、 0 、 0 ] [1、0、0] [100],权重是 [ − 1 、 0 、 1 ] [-1、0、1] [101],所以计算结果就是:

  • 1 × ( − 1 ) + 0 × 0 + 0 × 1 − 0.5 = − 1.5 1×(-1) + 0×0 + 0×1 - 0.5 = -1.5 1×(1)+0×0+0×10.5=1.5

输出是做判断:

  • 计算结果大于 0 0 0 就输出 “前进” 命令
  • 小于 0 0 0 就输出 “停止” 命令
  • 计算结果小于 0 0 0,就输出 “停止” 命令。

这就是神经元的基本原理。
 


神经网络实战:手写数字识别

我们收到一个任务,让计算机自动识别手写的阿拉伯数字。

 


转变问题

这里,就有一个计算机科学家的问题模版:

  • 首先。判断当前问题是否是可计算问题(计算机能够处理的问题)?

  • 其次。如果是可计算问题,如何把当前问题转化为信息或者数学问题 ?


    我们先用把各个数字分开,从解决最简单的问题开始(单个数字):

    现在问题变成给您一个包含一个手写数字的正方形区域,您能不能识别其中是个什么数字。

    再进一步,试着忽略字的颜色,降低正方形的分辨率,就考虑一个 28 × 28 = 784 28×28 = 784 28×28=784 个像素的图像。

    规定每一个像素值都是 [ 0 , 1 ] [0,1] [0,1] 之间的一个小数,代表灰度的深浅, 0 0 0 表示纯白色, 1 1 1 表示纯黑。这样一来,手写的数字 1 1 1 就变成了下面这个样子…

    现在问题变成了给您 784 784 784 [ 0 , 1 ] [0,1] [0,1] 之间的数,您能不能对这组数做一番操作,判断 TA们对应的是哪个阿拉伯数字。相当于,输入 784 784 784 个数,输出一个数。

    很明显啦,这是一个可计算问题,经过数字化处理后,同时也是一个数学问题。
     


设定网络

不过,这件事具体怎么解决呢?

从常理来说并不是一点头绪都没有。

  • 比如任何人写数字 7 7 7,左下角的区域应该是空白的,这就意味着 784 784 784 个像素点中对应正方形左下角区域那些点的数值应该是 0 0 0

  • 再比如说,写 0 0 0 的时候的中间是空的,那么对应正方形中间的那些像素点的数值应该是 0 0 0

但这个人为找规律的思路非常不可行。

首先很难想到所有的规则,更重要的是很多规则都是模糊的 —— 如 7 7 7 的左下角空白,那这个空白区域应该有多大呢?

不同人的写法肯定不一样,但肯定有规律,可也说不清都是什么规律,这种问题特别适合神经网络学习。

我们要调用一个神经网络算法,这个算法叫【误差反向传播网络】。

TA最早起源于 1986 1986 1986 年发表在《自然》杂志上的一篇论文,这篇论文的被引用次数已经超过了 4 4 4 万次,是深度学习的里程碑。不过当时计算能力不强,所以算法没啥用武之地。

建立一个简单的神经网络:

  • 第一层是输入数据,图中只画了 8 8 8 个点,但其实上有 784 784 784 个数据点。
  • 第二层是中间层,由 15 15 15 个神经元组成。
  • 第三层是输出层,有 10 10 10 个神经元,对应 0 − 9 0-9 09 10 10 10 个数字。

在交通信号灯那里,您已经知道每个神经元都由 [ 输 入 、 权 重 和 偏 移 值 参 数 、 输 出 ] [输入、权重和偏移值参数、输出] [] 三个部分组成。

中间层 15 15 15 个神经元中的每一个都要接收全部 784 784 784 个像素的数据输入,总共有:

  • 784 × 15 = 11760 784×15=11760 784×15=11760 个权重和 15 15 15 个偏移值。

第三层 10 10 10 个神经元的每一个都要跟第二层的所有 15 15 15 个神经元连接,总共有 150 150 150 个权重和 10 10 10 个偏移值,这样算下来,整个神经网络一共有 11935 11935 11935 个可调参数。

理想状态下, 784 784 784 个输入值在经过中间层和输出层这两层神经元的处理后,输出层的哪个神经元的输出结果最接近于 1 1 1,神经网络就判断这是哪一个手写数字。

当然一开始肯定做不到,我们可以干脆随机选择这 11935 11935 11935 个参数的初始值。

 


训练数据

网上有个公开的现成数据库叫 M N I S T MNIST MNIST,其中包括 6 6 6 万个手写的数字图像,都标记了TA们代表的是哪些数字:


我们要做的是用这些图像训练神经网络,去调整好那 11935 11935 11935 个参数。

我们可以用其中 3 3 3 万个图像训练,用剩下 3 3 3 万个图像检验训练效果。

这个训练调整参数的方法,就是“误差反向传播”。

比如,我们输入一个数字 7 7 7 的图像,神经网络实际收到的是784个像素值。

经过两层神经元的传播计算,理想情况下,输出层的 7 7 7 号神经元的输出值应该最接近于 1 1 1,其他的都很接近于 0 0 0。可是一开始肯定不是这样,我们要用一套特定的规则去调整各个神经元的参数。

关键思想在于,参数调整有个方向,叫做 误 差 梯 度 误差梯度

比如对输出层的 7 7 7 号神经元来说,调整方向就是要让TA的输出值变大;对其他 9 9 9 个神经元,调整方向则是让输出值变小。这个调整策略是看哪个输入信息对结果的影响大,对TA的权重的调整就要大一点。

中间层神经元的参数调整更麻烦,因为调整一个中间层的神经元,会同时影响全部 10 10 10 个输出层神经元的输入值。

这就涉及到误差反向传递了,也就是调整前面神经元的参数,必须考虑TA对后面神经元总体误差的影响。

误差反向传播网络的设计思想:每次新的训练数据进来,就根据正确答案对参数进行一次微调,使得神经网络输出数值更接近正确答案。

类似体育训练中的刻意练习。反馈是即时的,您做的结果立即就能跟正确答案比较。不要求您马上就做对,但是每次总要进步一点点;而您每一次都明确知道,身体上每一个关节的动作应该往哪个方向调整。

几万个训练图像可能会被反复使用多次,神经网络参数改过来改过去,最终将会达到稳定。您会发现,慢慢地,新图像喂进来,这 11935 11935 11935 个参数的变化越来越小、最终几乎不动了。

那就是说,这个识别手写数字的神经网络,已经练成了,但整个神经网络就像一个黑箱。

我们能看到那 11935 11935 11935 个参数的数值,但是并不知道,这些数值到底用到了哪些规律。

当神经网络判断数字 7 7 7 的时候,TA利用了 7 7 7 的左下角都是空白这个规律吗?

现在计算机科学家们还是不能一一列举所有的规律,但是,尽管如此,所有的规律都已经被默默包含在 11935 11935 11935 个参数之中。

会,但是说不清 —— 人脑的这个特点,就这样简单粗暴地被神经网络复制了,而神经网络并不复杂呀!!

 


寻找最佳点

任何一个神经网络算法的过程,其实都是不断地调整数学模型参数的过程,直到参数收敛到最佳点。

从事过机器学习工作的人都知道这样一个诀窍,为了加快机器学习的收敛速度,最好先用标注过的高质量数据寻找收敛的方向,这比完全没有数据输入,全靠计算机自适应学习快得多。

那些标注过的,正确无误的数据, 其实就是人总结出来的,或者见到的成功经验。

没有这些成功经验,计算机通过自适应学习,也能收敛到正确的模型,但是时间要长很多。

如果您给计算机输入的数据是错误的,相当于失败的经验,计算机即使最终能回归到正确的模型上,也要走非常非常长的弯路。

关于,寻找最佳点的一点经验:

  • 工程直觉
  • 统计学最优
  • 最优学习法
     

工程直觉

工程直觉虽然也是直觉,但并不是靠瞎猜,而是遵循一套解题的思路。

因为工程直觉的目标不是要猜对,而是估计出大致的量级。

这里 G o o g l e Google Google 有一道面试产品经理的题目:您当前所处的房间里能装下多少个高尔夫球?

这道题目怎么入手呢,胡猜嘛,是一万,十万,还是一百万 ?

当然这道题倒也不难解,高尔夫球大约直径 4 4 4 厘米,如果我们把TA们整整齐齐地像立方体那样码在一起,用眼睛估摸着房间的面积和高度,用小学数学就能解决。

比如一个面积 15 15 15 平米,高 3 3 3 米的小会议室,大约可以装 70 70 70 万个。

所以,工程直觉就是不使用直觉(不瞎猜),在没有数据之前不要轻易给出结论。

遵循一套工程思路解决问题的人,对这个问题估计出来的大致数量级不大会错。

但是,如果靠直觉瞎猜,在数量级上会相差十万八千里… …大部分答错的人都是猜少了而不是猜多了。

原因很简单,大部分人想象不出体积这东西随着边长或者直径增加时,会增长得有多么快。


左手边的西瓜卖 20 20 20 块,那右手边的西瓜应该卖多少钱?

对比左边的西瓜,右手边的西瓜看起来可能就是大了 25 25 25 %,那价格是 25 25 25 块。

但称重量,就会发现这个西瓜比左边西瓜整整大了 1 1 1 倍,价格应该是 40 40 40 块,而不是 25 25 25 块。

如果一个球直径大 1 1 1 倍,体积可是大 7 7 7 倍,而不是想象中的 2 − 3 2-3 23 倍。

外面的 25 25 25 %,大约占了整个西瓜重量的 50 50 50 %,里面的 75 75 75 %,大约只占整个西瓜重量的 50 50 50 %。

 


统计学最优:粗调与精调

参数调整,每一次调整被称为是一次迭代,调整的幅度被称为迭代的步长。

世界上每年有很多机器学习方面的论文,都是围绕提高学习效率展开的,而其中的核心其实就是怎样用最少次迭代,完成模型的训练。

这里介绍一种统计学最优的方法,粗调与精调。

  • 粗调:先确定大致范围,重效率
  • 精调:缩小调整幅度,重精度

比如,机床现在要制作一个模具。模具的 x x x 坐标是 20.0008 20.0008 20.0008

  • 粗调:调整目标大致对准 20 20 20
  • 精调:调整目标精确到 20.0008 20.0008 20.0008

做一道 G o o g l e Google Google 面试题练练手:扔玻璃球。

  • 题目:给你两个一模一样的玻璃球。这两个球如果从一定高度掉到地上就会摔碎,当然,如果在这个高度以下往下扔,怎么都不会碎,超过这个高度肯定就一次摔碎了。

  • 规则:现在已知这个恰巧摔碎的高度范围在 [ 1 , 100 ] [1, 100] [1,100] 层楼之间。如何用最少的试验次数,用这两个玻璃球测试出玻璃球恰好摔碎的楼高。

一般是从暴力开始思考,而后再进一步思考怎么去优化复杂度。

  • 从第一层楼开始,一层一层往上试验。我们拿着球跑到第一层,一摔,没有碎,那我们又跑到第二层去试,也没有摔碎。一层层试下去,比如说到了第 59 59 59 层摔碎了,那么我们就知道摔碎的高度是 59 59 59 层。

    时间复杂度: Θ ( n ) \Theta(n) Θ(n)

优化暴力。

  • 预测一下,试一试, 我们跑到 30 30 30 层一试,没有碎,再跑到 80 80 80 层一试,碎了。虽然我们把摔碎高度的范围从 [ 1 , 100 ] [1,100] [1,100] 减小到 [ 30 − 80 ] [30-80] [3080],而后从第 31 31 31 层开始暴力… …直到第 79 79 79 层。

    时间复杂度: Θ ( n − k ) \Theta(n - k) Θ(nk) ,还是线性阶复杂度

其实这道题还有更好的方法 — 俩个球,一个用来做粗调,一个用来做精调。

具体做法是以下这样的:

  • 首先拿第一个球到 10 10 10 层去试,如果没有摔碎,就去 20 20 20 层,每次增加 10 10 10 层。如果在某个 10 10 10 层摔碎了,比如 60 60 60 层,就知道摔碎的高度在 [ 51 , 60 ] [51, 60] [51,60] 层之间,接下来从 51 51 51 层开始一层层地试验,这样可以保证不出 20 20 20 次,一定能试出恰巧摔碎玻璃球的高度。

    时间复杂度: Θ ( l o g n ) \Theta(log n) Θ(logn)

现在,您可以自己想想如果有 3 3 3 个玻璃球呢,粗调和精调该怎么用?

… …

如果有三个球,应该先求 100 100 100 的三次方根,而后再用 100 100 100 除以这个三次方根,四舍五入得 22 22 22,这是第一层精度,也就是相当于小数点后第一位,即扔第一个玻璃球的楼层间隔,在这个精度上最多扔四次。

再用 22 22 22 再除以 100 100 100 的三次方根,取整为 5 5 5,这是第二层精度,相当于小数点后第二位,即扔第二个玻璃球的楼层间隔,在这个精度上最多也是扔四次。

第三层精度就是最小单元了,用最后一个玻璃球在试得的一个五层区间里由低往高一层层试即可,最多也是四次。

如果玻璃球摔碎的楼层是 85 85 85 层,那么扔球次数达到最多 12 12 12 次。

所以,归纳起来试扔次数最大值不大于( 10 0 n − 1 ∗ n 100^{n}-1*n 100n1n,n为玻璃球数量),次方根四舍五入。

可见精度和效率可求得一个平衡点。
 


最优学习的 85% 规则

我们弄一个神经网络,用大量的数据去训练这个网络,让网络学会自己做判断。

网络内部有大量参数随着训练不断变化,就相当于人脑在学习中提高技艺。

每一次训练,都是先让网络对数据做个自己的判断,而后数据再给TA一个反馈。如果网络判断正确,TA就会加深巩固现有的参数;如果判断错了,它就调整参数。这跟人脑的学习也很像:只有当你判断错误的时候,才说明这个知识对您是新知识,您才能学习提高。

研究者可以决定用什么难度的数据去“喂”这个网络。

如果数据难度太低,网络每次都能猜对,那显然无法提高判断水平;如果数据难度太高,网络总是猜错,那TA的参数就会东一下西一下变来变去,就会无所适从。

这项研究问的问题是,每次训练中网络判断的错误率是多少,才是最优的呢?

研究者首先用了一个比较简单的数学模型做理论推导,又用了一个 AI 神经网络学习算法和一个模拟生物大脑的神经网络模型做模拟实验,结果得出一个精确解: 15.87 15.87 15.87%。


也就是说,喂给神经网络的内容中应该有大约 85 85 85 %是TA知道的,有 15 15 15 %是TA感到不知道的。

我们来看看模拟实验的结果。下面这是一张等值曲线图,说的是判断出错率和 AI 训练效率的关系:

图中横坐标代表每次训练的出错率 —— 也就是意外率,纵坐标代表训练的次数,图中颜色代表训练出来的网络的准确度,颜色越热(黄色)表示准确率越高。

我们看到, 0.1587 0.1587 0.1587 的训练出错率那个区域,随着训练次数的增长,它的准确度增加速度是最快的。比如说出错率是 0.4 0.4 0.4,训练 1000 1000 1000 次能达到的准确率,大约相当于出错率是 0.1587 0.1587 0.1587,训练 350 350 350 次的水平!

下面这张图中的三条曲线代表三个不同的训练出错率,横坐标是训练的总次数,纵坐标是准确度。

我们看到,出错率在 0.16 0.16 0.16 的那条曲线,准确度增加的速度是最快的,可以说大大高于另外两条曲线。


研究者理论推导的结果是,15.87%的意外率能让训练时间相对于其他数值以指数下降 ! !
 


卷积网络

深度学习其实就是过去计算机科学家们早就在用的所谓“神经网络”算法,只不过算法上有些改进,最重要的是硬件水平和数据量大大提升了,计算能力的提高释放了计算机科学家的想象力。

下图中有一只猫、一只狗、绿色的草地和蓝天白云。TA的分辨率是 350 × 263 350×263 350×263,总共 92050 92050 92050 个像素点。因为这是一张彩色照片,每个像素点必须用 3 3 3 个数来代表颜色,这张图要用 27 27 27 万个数来描写。

要想用误差反向传播神经网络识别这样的图,那TA第二层每一个神经元都得有 27 27 27 万个权重参数才行。要想能够识别包括猫、狗、草地、蓝天白云这种水平的常见物体,它的输出层必须有上千个神经元才行。

这样训练一次的计算量将是巨大。

返回最初的地方,重新思考。

现在我们回到人脑,想想为什么简单神经网络是个笨办法。

人脑并不是每次都把一张图中所有的像素都放在一起考虑,还有一个“看什么”,和一个“往哪看”的思路。

找猫的人,会先大概想象一下猫是什么样子,而后从一张大图上一块一块地找。

也许猫在一个角落里,那人只要一个角落一个角落找就行,人没必要同时考虑图片的左上角和右下角。这是“往哪看”。

还有,当人想象猫的时候,虽然不能完全说清,但人毕竟还是按照一定的规律去找。

比如猫身上有毛,TA有两个眼睛和一条尾巴,等等。

人看的不是单个的像素点,人看的是一片一片的像素群的模式变化。这是“看什么”。

【卷积网络】= [往哪看] + [看什么]。

卷积网络,正是因为这个方法太成功了,“深度学习”才流行起来,现在搞图形识别几乎全都是用这个方法… …

简单来说,卷积网络的方法是在最基本的像素到最终识别的物体之间加入了几个逻辑层 —— 也就是“卷积层”。

“卷积”是一种数学操作,可以理解成“过滤”,或者叫“滤波”,意思是从细致的信号中识别尺度更大一点的结构。

每一个卷积层识别一种特定规模的图形模式,而后后面一层只要在前面一层的基础上进行识别,这就解决了“看什么”和“往哪看”的问题。

我们先说一个最直观的例子,如人脸识别,卷积网络方法把问题分解为三个卷积层。

  • 第一层,是先从像素点中识别一些小尺度的线条结构。

  • 第二层,是根据第一层识别出来的小尺度结构识别像眼睛、耳朵、嘴之类的局部器官。

  • 第三层,才是根据这些局部器官识别人脸。其中每一层的神经网络从前面一层获得输入,经过深度学习之后再输出到后面一层。

基本思想就是这样,这样分层的好处:

  • 第一,卷积层中的神经元只要处理一个小区域的数据,而且参数可以重复使用,这就大大减少了运算量。
  • 第二,因为可以一个区域一个区域地搜索,就可以发现小尺度的物体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值