首页 / 资讯中心 / 交通百科/工智能自动驾驶汽车中机器学习的深度压缩与修剪

工智能自动驾驶汽车中机器学习的深度压缩与修剪

发布时间:2018-08-06 分类:交通百科

存储数据时,您往往没有无限的存储空间,因此需要考虑如何减少数据量,但仍保持数据所代表的含义。如果你过度删除数据,那么你可能会减少数据量,但同时你可能已经抛弃了必要的方面而且损失是一件坏事。同样,您可以尝试保留数据,不是修剪它而是压缩它。压缩是将事物压缩在一起并且可以减少总空间量,但同时您需要考虑您是否可以轻松访问数据,因为它需要解压缩才能将其恢复到可读状态。

人工智能

有时候你只专注于修剪,有时候你只关注压缩,有时候,同时进行压缩和修剪是很方便的。从计算机的角度来看,压缩和修剪的操作可能是计算密集型的,因此您需要确定这样做是否有效的投资回报。如果压缩和修剪的努力是一次性的,那么结果就会一次又一次地使用,那么一次性预先压缩和修剪的成本就更有可能是值得的。您可能会减少总体所需的存储量,并且紧凑性可能会使数据更容易存储,且存储成本更低。

这和人工智能自动驾驶汽车有什么关系?

在控制论自动驾驶汽车研究所,我们正在使用机器学习的深度压缩和修剪来使神经网络更紧凑,更便于在自动驾驶汽车中使用。

神经网络的修剪可以追溯到人工神经网络出现的早期。在20世纪90年代,许多研究试图找到修剪神经网络的方法。最重要的思想是考虑所有可能的神经网络拓扑,适用于手头的问题,并从这些变体中选择一个在最小的大小上具有相同输出的变体。不幸的是,试图通过所有的可能性去寻找“最好的”,通常是不可行的,因为大量的组合和排列,将需要审查。因此,有各种各样的拇指修剪规则被开发出来,指导人们进行不那么全面的修剪,同时也试图找到一个更小的神经网络,即使它不是最优的最小的神经网络-它至少比它本来可能要小的多。

在发展神经网络时,有四个主要阶段:

1、据需要设计神经网络。

2、神经网络进行训练,以找到合适的。

3、成正在使用的神经网络。

4、神经网络用于现实世界的行动。

在进行设计的第一阶段,开发人员需要考虑诸如有多少层、有多少个神经元、有多少个突触(连接)等方面。最外层通常用于接收输入和提供输出,因此主要用于外部性目的。神经网络中的其他层有时被称为隐藏层,位于最外层之间。每一层中的神经元与该层中的其他神经元相互连接,也可以与其他层中的神经元相互连接。每个神经元可以有一些扇入连接和一些扇出连接。

对于一个给定的问题,你想要使用神经网络,你需要考虑有多少层,多少神经元,多少连接,等等。如果你去挑选一些任意大的大小野猪,你可能会发现,训练的难度可以相当高。如果你太保守,没有足够的规模,你将不太可能有成功的神经网络,试图匹配的问题,并达到预期的结果。

让我们假设你正在设计一个神经网络来尝试识别路标。这个神经网络将是人工智能自动驾驶汽车系统的一部分。当图像呈现给神经网络时,您希望神经网络能够准确地找到路标。自动驾驶汽车有摄像头,可以拍照,并将照片发送到车载神经网络。然后,神经网络试图确定前面是否有停车标志,并提醒人工智能系统的其他部分,这样自动驾驶汽车就会适当地停下来。

车载神经网络将消耗存储空间和处理器时间,以完成对自动驾驶汽车摄像头产生的图像进行分析的工作。自动驾驶汽车上的计算机需要足够强大,能够容纳神经网络,并且速度足够快,以确保神经网络能够及时地进行匹配。如果摄像机提供了一个路标的图像,如果自动驾驶汽车正以较快的速度向前行驶,如果神经网络花了太长的时间来判断该标志是否是停车标志,那么自动驾驶汽车的人工智能可能会直接穿过停车标志,因为从神经网络获得路标分析结果的时间太晚了。

考虑到自动驾驶汽车需要数以吨计的神经网络来分析来自相机、激光雷达和声纳等设备的各种输入,你就会开始意识到车载计算机的数量和它们的存储需求是相当令人望而生畏的。另外,还要考虑所有这些计算机的能量需求。你需要有一个巨大的电池或其他能源生产的自动驾驶汽车的元素,只是为所有的电脑所需的车载。

因此,总的来说,将神经网络的规模保持在尽可能小的范围内是至关重要的。但是,这必须以一种不过分限制它们的工作方式来完成。如果我们修剪和压缩一个路标神经网络,使它很小,但如果它在识别路标方面做得很差,假设它只能在某些时候找出一个停车标志,那么我们将把自动驾驶汽车的其他部分和乘员置于更高的风险中。

因此,开发人员在设计阶段必须设法衡量他们认为使用的大小是合理的。然后,在训练阶段,他们对大样本数据进行神经网络训练,看看神经网络对数据的训练效果如何。你希望神经网络达到一种泛化的状态,这样一旦投入使用,它就能很好地工作。如果神经网络与训练数据“相适应”,这意味着神经网络在训练集上做得很好,但一旦投入使用,它就可能做得不好(因为过于专注于训练数据)。

在神经网络得到充分的训练后,开发人员就会做一些最终的完成方面的工作,以准备好在持续的基础上使用神经网络。在某些情况下,神经网络将是稀疏的,例如有大量未使用的神经元或未使用的连接,等等。大多数开发人员倾向于在达到这个完成阶段时考虑修剪。他们可能没有意识到,在设计阶段,他们可能已经在做修剪工作了,也就是说,也许他们最初在N+1大小时就可以建立一个N大小的神经网络,而是选择了N+1,换句话说,他们只是在开始时决定在进入训练阶段时大小会是多少。

这里的要点是,您可以在任何阶段进行修剪。在最初设计神经网络时,你基本上可以做修剪。一旦神经网络正在进行训练,你可以做修剪,看看它如何影响训练。而且,一旦神经网络被训练,在完成阶段,你可以做修剪。

修剪的类型包括:

1、少层数(这通常是最划算的)。

2、减连接的数目。

3、少神经元的数目。

4、掉加权数。

5、他方面。

如果你能以某种方式消除整个神经网络层,那么就减少神经网络的规模和复杂性而言,这往往是最大的回报。话虽如此,但减少整个层的可能性通常较小。另外,我不想误导你,因为你可能有一个层,一开始是相当少的,因此通过删除该层的修剪量可能没有你能够修剪的连接或神经元等的数量那么大的回报。每个神经网络都有它自己的形状,因此修剪的收益取决于这个形状。

在假设修剪很容易的时候,你也应该小心。

你有没有试过修剪一棵在你家周围长满了的树或灌木?把它砍掉,你一开始就想。如果你这样做,你会发现有时树木或灌木会受到伤害,无法再长出来。修剪的方法有时是正确的,有时是错误的。神经网络也是如此。如果你用错误的方法修剪,你将开始失去拥有神经网络的意义。因此,在修剪过程中,您需要检查神经网络对您所承担的每个修剪操作的敏感性。

除了修剪,开发人员还应该考虑如何可能压缩神经网络。例如,如果查看用于神经元的权重,有时会发现有些权重为零(在这种情况下,这些神经元是可能修剪的候选),或接近于零(更多的候选修剪),或具有一个通常重复的值,您可能会对它们进行压缩。用于神经网络压缩的最流行的压缩技术之一是应用Huffman编码。从本质上说,Huffman编码技术采用频繁出现的代码,例如在神经网络中反复使用相同的权重,并生成一个大小更短的替代代码,但仍然在需要时返回原始代码(这称为无损数据压缩)。

在人工智能自动驾驶汽车的情况下,修剪和压缩最有可能对一种被称为卷积神经网络的神经网络有很大的回报,这是一种用于图像分析和视觉模式匹配的神经网络。我们已经在人工智能自动驾驶汽车的路标分析神经网络和行人检测神经网络上看到了这种良好的工作。

对于许多人工智能自动驾驶汽车开发人员来说,他们目前主要是在努力制造适用于人工智能自动驾驶汽车的神经网络,而不太关心神经网络是否会占用大量的存储空间或花费大量的处理时间。一旦他们的神经网络在现场工作,对这些开发人员来说,这将变得更加明显,这是一个巨大的飞跃。