c语言sscanf函数的用法是什么
223
2022-11-09
利用Tensorlow及其API为例来进行讨论,理解深度学习背后的魅力
对于深度学习的理解有各种不同的观点和层次顺序。我们首先用下面的网络结构作为例子:
上图描述了一张图像经过一个深度学习网络的传播过程,我们在这里先进行一个小小的变换,将最左端看做是底部,而最右端看做是整个网络的顶部。这样我们就可以利用自底向上的方法来对网络进行分析。
上图中我们会看到随着信息向网络顶层传播,数据和复杂度在明显的下降。我们能不能假设这一过程是一种认知的浓缩呢?它是不是将不重要的部分剔除了,如何做到的呢?深度学习模型通过什么方式来判断哪些是显著的特征而哪些不是呢?
对于纯粹的数据缩减来说主要是通过压缩或者随机删除的机制来实现的,但这对于深度学习来说却不是一个好办法。我们需要的是提出那些不显著的部分并在最后留下那些显著的数据和特征。但很多人对于基于重要性的缩减方法没有正确的认识并利用了无损压缩算法来进行评估。
图片在神经网络中传输的故事里,前面阶段神经网络只能操作一些临近的像素并检测出简单的直线和曲线信息、以及不同的颜色。所以他们描述的主要是基于线条和颜色的基本信息。
而上面的层则会进行更为复杂的处理,他们可能会“看到”某些边缘与先前看到过的边缘很类似属于某一类物体。它们也许会说“这和之前看到的草很类似呀”。甚至没有标签信号的时候,这种高层次的信号也能形成某一种表达向前传播。
在更上一层,神经网络可能会看到更多的草“哇,这么多草叶子,这里一定是草地了”,那么草地的信号会被继续向前传播;
最后顶部的操作会综合这些结果“我们是人脸检测器,并不关心草地,忘了它们吧”。最后将不显著的草地的信息丢弃。
将不是人脸的数据剔除后剩下的是什么呢?
在你知道网络的表达是什么之前是不能丢弃其中的信息的。具体来说就像上面的例子中低层级的草叶检测器不能丢弃草一样,因为它们还不知道更高级的显著性特征草地-不是草地/人脸-不是人脸的线索。
我们能做的仅仅是在理解和抽象的层面上进行操作。每一个层级接收低下传上来的描述、丢弃它认为不相关的部分并将它们自己对于信息的表示向上传递,直到到达真正知道网络所要搜寻的目标的层。
而这也是深度学习之所以深的原因。
我们先来看看池化操作,tensorflow中有超过50个池化操作算子,下图是2*2的最大池化操作:
它将邻近的四个像素中最大值传递给下一个层级。靠近输入端的四个值可能是相互邻近的像素值,但更多通过池化则只选出了其中最重要的一个,可以看做是抛弃了75%不重要的部分,仅仅留下最高的一个值。
在像素层面可能是最亮的值,在上面草叶的例子中就会表示“这里至少有一片叶子”。对于丢弃信息的解读是需要根据网络层的实际情况来进行的,事实上神经网络层代表了不同的缩减或者称之为抽象。
现在我们应该对深度神经网络中最为重要的观点有了一定的感受了:缩减需要在不同层次的抽象上进行。在决定哪些需要保留哪些需要丢弃只能在对应的抽象层次上进行。我们不能在仅仅看到深浅不一的绿色就决定丢弃草地的抽象,因为这个层次还没有草地的信号被表达出来。这也对应着一个简单的道理,对于行为的决策只有在对学习产生积极贡献的时候才能做出,不可靠或无用的决策将会通过一些机制被忽略。
接下来我们来观察tensorflow中的卷积操作,手册中是这样介绍卷积操作的:
虽然她被称为卷积操作,但实际上应该严格的成为互相关操作。(编者注:卷积和互相关不同在核是否翻转,如果核对称则相同)
不同的核用于发现不同的互相关和共现关系。共现关系能对图像中不同位置的模式进行学习。就像Hinton举的一个例子嘴总是在鼻子的下面,这种空间关系是深度网络能够从学习过程中发现模式并与标签对应起来。这使得图像理解器可以为图像中鼻子的位置打上鼻子的标签。此外系统还能够学习到物体间相对后面和下面的概念。
传播到深度网络高层次的信息描述的正是这些关系,而不相关的信息则被视为不显著的并被丢弃。在上面的示意图中, 丢弃操作是由卷积+ReLU后面的最大池化层完成的。需要说明的ReLU是一种用于丢弃负值的函数,同时它还为深度学习引入了重要的非线性但这不是此次分析的重点。
由卷积ReLU和池化层组成的模块在深度学习中十分普遍,因为这三者的结合形成了十分可靠的减约过程。他们常常被打包在一起作为深度学习的单元被整合到计算图中去,并用各自不同的方式抽取出数据中显著的特征。
最后再强调一遍,这就是深度学习为何深的原因,因为你只能在你能理解抽象表达相关性的不同层处进行缩减,抛弃不相关的信息,而浅层的网络并没有理解这些表达的能力。
深度学习科学吗?
深度学习一般使用线性代数来进行数学描述,但我们还不能通过这些数学公式解释出深度网络可以形成各种复杂的理解能力。
让我们先来考虑一下卷积操作,卷积层能够发现相关性。例如很多片草叶出现的时候意味着一片草地。模型在训练过程中不断去发现内在的相关性,一旦发现后就会对网络权重进行调整进行正确的缩减,以增加模式被再次发现的概率。但在本质上所有的相关性都会被遗忘随后在下一次训练中重新发现,深度学习向上传输的信号和向下传输的梯度是根据误差的信号来调整权重的,也可以说系统是从错误中学习的。在这一层次上,这种自下而上自顶向下的方式将会在每张图像上重复很多次。
这种上上下下的方式造就了对于图像的理解能力,也有人在文本上应用同样的方法获得成功。其中的过程就和自然学习一样,将生物的神经元和软件中的“神经元”联系了起来。
无论是深度学习算法家族还是自然学习,都在科学上有重要的意义,他们跳过了因果联系的推导过程,而从相关性中去发掘联系。这在经典科学理论中是不成立的,要么是优美的公式要么就什么也不是。很多深度学习程序仅仅包含少量的线索来实现一般的结果,有时候增加层数并不管用,这样的问题在深度学习的日常中并不罕见。没有先验模型没有信息,对于模型的可靠性、正确性或者系统的整体性能我们只有通过不断地的验证才能完成。
但你可能会问为什么我们还要使用这种不能保证给出正确答案的系统呢?因为我们别无选择了。我们在可靠的缩减方法失效的时候仅仅只能使用系统全局的方法,在任务需要理解能力需要自动缩减内容和复杂度的时候只有这样的方法。
难道真没有其他的选择了吗?有啊!我们周围几十亿人类就已经掌握了这种复杂的技能。因为人们生活在丰富多彩的世界里。所以你可以使用理论上未被证明但效果十分显著的方法,一种建立在深度学习之上的全局理解机器来理解世界。这样的机器不能被证明是正确的因为它于通常的计算机不同,它主要的工作是缩减信息,这是一种从前只在动物里拥有的能力——一种全局性(Holistic skill)的能力。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~