Hinton课程第二课
一、NN结构的主要类型的概述
这里的结构就是连接在一起的神经元。目前来说,在实际应用中最常见的NN就是前向NN,他是将数据传递给输入单元,通过隐藏层最后到输出层的单元;一个更有趣的结构是递归神经网络RNN,这种网络能够将信息保存很久,所以能够表现各种有趣的震荡,但是却也难训练,部分原因是因为他们太复杂了,不过最近的人们却也通过这种网络完成了很多不可思议的事情;最后要介绍的就是对称连接网络,即使在两个单元之间的两个方向上权重是一样的。
前向NN:
上图就是前向NN,最底层就是输入层,中间层就是隐藏层,最顶层就是输出层,其中隐藏层如果多于一层,那么就可以称之为"DNN“深层神经网络。这种网络就是通过从输入到输出之间做一系列的变换,所以在每一层,都可以得到关于输入的一个新的表征,所以本来在之前层相似的表征有可能变得不相似,而在之前层上本来不相似的在这一层却有可能相似。所以在语音识别中,我们希望随着网络的由底向上,由不同说话人说的相同的事情变得更加的相似,而有相同的说话人说的不同的事情变得更不相似。为了达到这样的目的,就需要每一层的神经元的激活函数是非线性的。
递归神经网络RNN是比前馈神经网络更强大的,如图,它们内部有一些有向环,在他们的连接图中,如上图所示,当从一个节点作为起点,通过图中的路径传播,最后可以回到起始点。因为它们有着非常复杂的动态,所以这会造成他们很难训练。所以当找到高效的方法去训练RNN的时候,他会带来很好的兴趣结果,因为他很强大。相比较之下,RNN具有更好的生物真实性,有着多层隐藏层的RNN是一般递归神经网络的特例情况,这种特性表现出来的就是隐藏层到隐藏层之间的部分链接的消失。递归网络也是一种很自然的方法去对序列数据进行建模。所以我们所要做的就是将隐藏单元之间建立连接。
如上图,这种网络的隐藏层的节点的连接可以在时间上表现的很深,所以在每个时刻,隐藏单元的状态可以决定下一个时刻的隐藏单元的状态,他们不同于前馈网络的一个地方是他们在每个时刻使用相同的权重,所以如图中的红色箭头,每个红色箭头所表示的权重矩阵在每个时刻都是相同的。在每个时刻的时候他们接受输入,同时输出,这里也是使用的相同的权值矩阵。RNN可以在隐藏层将信息保存很久。但是不幸的是,RNN很难去训练使得他有这种能力。然而,最近(2012年)的算法却可以有能力这么做。这里介绍由Ilya Sutskever设计的RNN,它是一种特殊的RNN,只是有些轻微的与上图中的RNN不同,他设计的RNN可以预测序列中的下一个字母。Ilya从英文版的维基上通过训练了差不多有5亿个字符串,并成功的预测新的文本。他使用了86个不同的字母,其中有符号,数字,大写字母等等。在训练之后,一个观察它是否训练好的方法是它是否能以很高的概率去得到下一个真实发生的字母;另一个方法是看它生成文本内容是什么。所以最后你需要做的就是给他一串字符串,然后让他预测下个真实字符出现的概率。对于这个网络来说,提取最有可能出现的字符是没用的,因为这会导致一个现象:比如abcdabcd,在某些类似回文串或者其他情况下会一直循环下去。但是如果在100次中z只出现一次,那么就会发现很多他所学到的信息。
上面这个就是Ilya设计的网络,一次输出一个字母,而且它输出的还是有意义的句子。它使合理明智的句子,他们组成总是完全真实的英语单词。偶尔,它不输出一些字,但他们通常理智的。并注意在句子中,它有一定的主题句。所以上图中 “Several perishing intelligence agents is in the Mediterranean region”这句话有问题,但是它几乎是流利的英语。而且最后一句话的语法还是相当不错的,要记得这可是一次只输出一个字的程序。
对称连接网络:他们像RNN但是单元之间的连接是对称的,在两个方向上权重是一样的。John Hopfield和其他人发现这个对称网络比RNN更容易分析,这是因为这个网络中有更多的限制,而且这个网络遵守能量函数定律。比如不能像RNN一样经过一段路径后又回到起始点。没有隐藏单元的对称连接网络叫做“Hopfield网络”。
二、感知机:第一代NN
感知机起源于1960年代,起初他们作为学习的手段,看起来很有前景,但是之后只有因为Minsky和Papert发表了文章说其实学不到多少东西(无法实现异或功能),不能学习所以就被冷落了。在统计模式识别中,它是一个模式识别的标准模式。首先在输入部分输入最原始的向量,然后通过计算激活得到特征激活向量。
如上图,这里的特征可以通过基于大家的共识的情况下手动编程实(所以这部分其实不是学到的)。输入层就是之前原始数据,到底什么才是好的特征,得通过实验去试试才知道,比如多几个,少几个等等。这个模型中的学习,说的就是在特征层之后如何通过学习权重最后去得到一个单一的标量。如果这个标量超过了顶一顶额阈值,那么就可以输出为正样本或者目标类别。所以一个感知机就是一个统计模式识别系统。图中的是标准的感知机,也被Rosenblatt称之为alpha感知机,通过将输入转换成特征激活值(这部分是人为定义的权值,所以这不是学习学到的),在将特征转换成决定单元,当超过阈值那么就输出正的,不然就输出负的,(这里就像生物的激活信号一样)。对于感知机还有段历史:在1960年早期,Frank Rosenblatt写了一本巨著叫做《Principles of Neurodynamics》,书中描述了许多不同类型的感知机,并充满了想法。这本书最重要的就是一个强有力的学习算法。人们并在此基础上宣称使用这种学习算法可以做很多事情,比如,可以区分不同图片中的坦克和卡车,即使图片的背景是朦胧的森林。但是现在这些都被证实是不可能的,因为当时的那个事件的数据是假的,他的坦克采用的是白天强光照,而卡车采用的是乌云密布的时候,那时候的结构中的所有感知机做的就是计算图片中像素的强度,当然这也是我们人类不关心的,因为我们关心对象而不是图像的整体强度,亮度。这也造成感知机当时臭大街的原因之一。在1969年,Minsky和Papert公开了一本书《Perceptrons》,并分析了感知机的局限性。许多人就将这个局限性放大到所有的NN模型,当时对AI的认识就是Minsky和Papert证实的NN没法学习困难的事物。虽然这两个作者知道他们只是证明感知机的局限性,而没说明NN的局限性。所以当HInton在1970年参加工作的时候,还是有AI届的人和他说这个模型不好。事实上,这个感知机收敛过程陷阱还是在被广泛的应用于那些有着大特征向量的任务。例如Google就是用很大的特征向量去预测的。
图中的决定单元其实就是个二值阈值神经元。与第一课中说的一样。
但是如何通过使用学习权值的法则去学习偏置?不提出另外的学习规则,而是将偏置也视为权重去学习,如图所示,将所有的特征前 加个x_0=1作为输入,这样偏置就也能被视为权值了。所以这看上去就像之前的阈值加上一个负的偏置一样。这就是感知机的一个很好的学习算法,而且能够确保它工作。因为之前是将偏置的权重减去阈值,所以这里可以不使用阈值的想法。即输出1 或者0。如果输出的是正确的,那么权重无需改变;如果输出的是错误的:一输出的是0(实际是1),将输入向量加到权重向量上;二、如果输出的是1(实际是0),将权重向量减去输入向量(这就是在输出是错误1的时候给转回正确的权值计算,因为这时候是单个样本,而且X‘X等于1,所以才能成功)。这保证了权值在所有的训练样本上,最后能够得到正确的结果。但是这样的权重其实取决于使用的是什么特征。如果之前的任务上的特征是正确的,那么学习就很容易了,如果使用的是不正确的特征,那么就没法学习。所以这里的所有要求其实都在特征上。(这个记得在有的论文中说过,具体的应该去看看感知机。)
三、几何观点看待感知机
这部分需要知道的一个术语是权重空间(和GS在MIT上的现代课一样,需要考虑空间),在感知机中每个权重只有一维,空间中的一个点表示所有权重的一个具体的集合。假设我们取消这个阈值,那么每个训练样本就能被视为权重空间中通过远点的超平面。所以空间中的点就像权值向量和训练样本就像平面一样。对于具体的训练样本,当结果正确的时候,权重肯定是位于超平面的一边。
每个任务都表示一个平面(在2维的图上,图中就是黑线),这个平面通过原点,而且与输入向量(图中蓝色,并且标签为1)垂直。所以这个例子中权重需要与输入向量在超平面的同一面,如图中绿色的,与输入向量相乘结果因为夹角小于90度,所以是正的,考虑到这里已经消除了阈值,所以结果的输出值就是大于0,那么就是正的,如图中红线,那么相乘得到是小于0的,模型给的结果就可能是负的或者是0。所以对于所有的权重向量来说如果在正确的一面,那么就得到正确的结果。
上图是当输入向量的标签为0的时候,与之前的图是相反的权重。
上图就是将前面两个放在一起的图像,如果权重在中间,那么对于两个样本来说,都是分类正确的,当然没有权重可以完全应对所有的样本,但是如果有的化,肯定也是在中间的,所以学习算法的作用就是当训练一个样本的时候移动这个权重使他更加的靠近中间。如果有一个好的权重因子,那么对于所有的训练样本他都在椎体中间,如果有另一个,也是在椎体中间,所以如果取两个权重向量的均值,那么同样还是在中间,所以这就意味着这个问题是个凸优化问题。两个问题的解的均值还是解。在ML中,如果你的问题是个凸优化学习问题,那么这就简单多了。
四、为什么学习有用
这里通过使用上面的几何背景来理解在学习的时候作为子集的权重空间中发生了什么,去得到一个有关这个感知机最终是否能够找到一个权重向量它对于所有的样本来说都是正确的证明。
首先假设有这样的一个权重向量,称之为可行解向量(如图中绿色点)。图中红色的是当前的点,是错误的,每一次当预测错误的时候,他就会更新这个权重,使得他更加的靠近这个可行解向量,所以就可以表现称可行解向量与当前权重向量之间的距离,就是图中的(Db^2+Da^2)。这里的Db^2不会改变,Da^2会变得越来越小,就是当每次错误的时候,让当前的权重向量更加的靠近所有的可行解向量。但是这里有个不幸的问题,图中金色的可行解向量,当前的权重向量是错误的,所以如果在加上现在这个很大的输入向量,我们得到的结果其实离这个金色的可行解向量更远了(跑到了很上面),所以我们之前的预想不会成功的。
所以解决方法就是定一个很好的可行解向量,那就是不只是对于每个训练样本是正确的,而且至少在某个空隙上也是对的。因为这里的随着输入向量的表示的平面足够大。所以我们考虑之前的锥形可行解,假设这个空隙是与输入向量一样大的,所以考虑可行解的椎体,在里面有另一个generously可行解椎体,他能够让所有的样本都正确,并且至少大小和输入向量一样大,现在证明就有效了。现在当分类错误需要更新权重的时候,当前权重向量到所有可行解向量的距离平方就会按照至少这个输入向量的大小被减去。假设输入向量都不是无限小的,也就是在有限步骤后,当前权重向量会到达可行解区域,注意到他可能不会到generously的可行解区域,但是却可以到达可行解区域。注意到这个原理之所以工作是因为假设有这样一个generously可行解权重向量,不然证明失效。(这段 云里雾里,不过好在暂时不会因为这里不会而无法理解后面的)。
五、什么是感知机不能做的
这部分说的就是感知机的局限性。这些限制来源于所使用的特征,当特征是正确的,那么就没事,不然就错了。这里也就强调了学习特征的重要性。但是当不学习特征,还是有很多事情可以做的。假如,想证明一个句子是否是合理的英语句子,需要定义大量的特征,并学习如何书写他们使得决定某个具体的句子是不是好的英语句子。但是还是需要特征。所以NN为什么在1960年后中断了,并在1970年早期被认为是有非常局限的,我们现在就知道到底局限在那里了。如果你手动设计特征,并选择足够的特征,那么感知机可以做任何事情。
假设我们有二值输入向量,并定义一个单独的特征单元,这个特征单元可以通过之前的二值输入向量来进行激活。我们将会需要指数级的特征单元。但是现在我们可以在二值输入向量上得到任何函数的表现形式(比如计算机编码01可以表示任何数字一样),所以对于二值输入向量来说,当你愿意去得到足够多的特征单元的时候,其实这是没有限制的。但是对于一个实际的问题来说,这个方法不够好,因为不可能去观察所有可能情况的子集,并使得剩下的情况都是正确的,因为剩下的情况也需要新的特征单元,并且不知道在这些特征单元上的权值是什么。
但是一旦人为的动手去设计特征,那么就相当与在给感知机进行限定了。例如:
如上图所示,考虑两个正情况和两个负情况,而且只有一个特征单元,只有值是1或者0.所以当两个正情况包含着两个特征都是一样的时候才会是1。当两个单元都不是一样的是,得到的特征单元结果就是0,也就是负情况。虽说是检测是否有相同的值,但是这也是无法学习的。这四个输入/输出对可以得到四个不等式,并且不可能同时完全满足。比如1*w1 +1*w2>阈值 , 那么就输出1,但是0*w1+0*w2 = 0,而且负情况的1*w1+0*w2<阈值还有第四个。所以四个其实没法完全满足的。
可以想象一个数据空间,在这其中轴由输入向量构成。所以在这个空间中,每个点就是一个数据点。每个权重向量就是去寻找这个空间的一个平面。其实这和之前在权重空间中所做的事情刚刚相反,在权重空间中,我们使得每个点就是一个权重向量,我们通过使用一个平面去定义一个输入情况,当然那个平面是由输入向量定义的。现在我们要做的就是使得每个点作为一个输入向量,并使用一个等待向量去在数据空间中定义一个平面。由权重向量定义的平面是垂直于权重向量的,并通过定义一个等于阈值的距离去替代这个原点。
上图其实在ng的ml-003中也有说过无法将这种情况使用一个平面进行区分。所以称这种数据为非线性可分。
下面是个新例子:
对于感知机来说有更多灾难性的例子,当我们试图使用简单的模式去决定的时候,而且通过循环(下图中的意思)的方法对它们进行平移的时候还要求保留原有的特性。但是现在的想法是即使被平移了,也要去正确的识别它。假设将像素作为特征,问题就是是否能找到一个二值阈值单元去区分有着相同像素值的两个不同的模式。假设一个是正类,一个是负类。答案是不行。
如上图所示,都是一维向量,对于模式a来说,有四个黑色像素,他们之间的相对位置固定,只是在往右移动,模式B也是相对位置不变,一直右移,只是是循环的。
这就是证明一个二值神经元无法决策在具有相同数量像素的情况下的模式:对于模式A来说,有四个像素的位置被激活。所以每个像素会有模式a的四种不同的平移情况。这也意味着这个决定单元(最顶层的)的结果是4*sum(所有的权重)就是排列组合。对于模式B来说,也是同样的4*sum(所有的权重)。但是对于感知机来说,为了正确的决策,模式a的每个情况都需要提供比模式b的每个单独的情况更多的输入。但是当你将模式a的所有情况相加和模式b的所有情况相加之后发现,这是不可能的,因为他们提供同样的输入个数。所以这就证明了在允许循环平移的情况下一个二值单元无法区分不同的模式。这就是Minsky和Papert团队的不变原理的一个特例情况。
为什么这样的结果对于感知机来说是灾难性的:因为模式识别去识别模式需要经受的住在变换的情况下还需要正确的去识别。Minsky and Papert’的“组不变性定理”认为感知机的学习部分无法去学习当转换来自于一个组的情况。这就是当时说的,感知机的学习部分被夸大了。
感知机其实还是能识别的,但是不得不自行组织特征,这也就是感知机难的地方。为了识别上述那种平移的情况,需要更多的特征单元去识别那些包含的子信息。所以模式识别的技巧部分必须通过手动编码的特征检测器,而不是学习过程。这种暂时的结论导致了感知机其实不好,所以NN也不好的言论。好一点的结论是NN只有在如果我们学习特征检测器的时候他才是强大的。这对于只是学习权重特征检测器还是不够的,我们需要他们能够自主学习特征检测器。第二代的NN就是下个课要说的如何学习特征检测器,但是这也花费了人们20多年的时间的探索。所以,没有隐藏单元的网络是非常受限的。如果我们只是简单的增加一些线性单元是无济于事的,因为结果还是线性的。我们能使得他更加强大,通过将一些手动编码隐藏单元放入其中,但是他们却不是真正的隐藏单元,因为这还是人为的。仅仅将输出弄成非线性的还是不够的,我们需要的是多层自适应非线性隐藏单元,问题就是我们如何去对这个网络进行训练,我们不仅仅需要对最后一层像感知机一样适应所有的权值,所以这很难。具体的,学习隐藏层的权值也等于学习特征,这很难是因为没人直接告诉我们,当激活或者未激活的时候隐藏层应该怎么做,真正的问题也就是我们如何解决如何隐藏层的权值使得他能够转变成解决具体问的特征。