❶ 神经网络权值怎么确定
神经网络的权值是通过对网络的训练得到的。如果使用MATLAB的话不要自己设定,newff之后会自动赋值。也可以手动:net.IW{}= ; net.bias{}=。一般来说输入归一化,那么w和b取0-1的随机数就行。神经网络的权值确定的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。
参数初始化要满足两个必要条件:
1、各个激活层不会出现饱和现象,比如对于sigmoid激活函数,初始化值不能太大或太小,导致陷入其饱和区。
2、各个激活值不为0,如果激活层输出为零,也就是下一层卷积层的输入为零,所以这个卷积层对权值求偏导为零,从而导致梯度为0。
(1)神经网络中权值和连接的修剪扩展阅读:
神经网络和权值的关系。
在训练智能体执行任务时,会选择一个典型的神经网络框架,并相信它有潜力为这个任务编码特定的策略。注意这里只是有潜力,还要学习权重参数,才能将这种潜力变化为能力。
受到自然界早成行为及先天能力的启发,在这项工作中,研究者构建了一个能自然执行给定任务的神经网络。也就是说,找到一个先天的神经网络架构,然后只需要随机初始化的权值就能执行任务。研究者表示,这种不用学习参数的神经网络架构在强化学习与监督学习都有很好的表现。
其实如果想象神经网络架构提供的就是一个圈,那么常规学习权值就是找到一个最优点(或最优参数解)。但是对于不用学习权重的神经网络,它就相当于引入了一个非常强的归纳偏置,以至于,整个架构偏置到能直接解决某个问题。
但是对于不用学习权重的神经网络,它相当于不停地特化架构,或者说降低模型方差。这样,当架构越来越小而只包含最优解时,随机化的权值也就能解决实际问题了。如研究者那样从小架构到大架构搜索也是可行的,只要架构能正好将最优解包围住就行了。
❷ 30分钟讲清楚深度神经网络
这两年神经网络各种火。但对很多人而言,只是听着觉得各种高大上,究其本质,还是听不懂。下面我们花三十分钟把这个事情讲清楚。
神经网络算法是最早来源于某神经生理学家和某数学家联合发表的一篇论文,他们对人类神经运行规律的提出了一个猜想,并尝试给出一个建模来模拟人类神经元的运行规律。
神经网络一开始由于求解问题的不稳定,以及范围有限被抛弃。后面又在各个大神的努力下,对遇到的问题一个个解决,加上因为游戏带来的计算能力的提升获得了一个爆发式的增长。
下面我们讲讲神经网络是啥以及遇到的问题和探索出来的解决方案,最终我们给出一个深度神经网络的默认的最优配置项。
建立M个隐藏层,按顺序建立输入层跟隐藏层的联结,最后建立隐藏层跟输出层的联结。为每个隐藏层的每个节点选择激活函数。求解每个联结的权重和每个节点自带的bias值。参见下图。
所谓激活函数就是对各个路径的输入求和之后进一步增强的函数 。
典型的有如下几个:
下面这个图里面,是已知的各个联结线的权值,求y1, y2
这个练习可以测试对神经网络的理解。
所谓神经网络问题的训练本质,就是已知 y1,y2....yn, 已知x1, x2....xm,求解每个连接的权值和每个神经元上的偏差值。对单层的激活函数为RELU的神经网络而言就是, y = max(sum(w * x)+b, 0),已知y和x,求解w和b。
对于以上求解w和b的值,科学家们发现可以通过反向传播和梯度下降相结合来求解。就是一开始用随机数初始化我们每个联结的权值,然后通过神经网络计算出来的y值跟真实的y值做比对。如果这个值相差比较大,则修改当前层的联结的权重。当发现这个值相差不大时,则修改更低一层的权重。这个步骤一直重复,逐步传递到第一层的权值 。
三大问题:
针对这三个问题,大拿们开始了一场探索之旅。
神经网络的求解是通过反向传播的技术来解决的。通过梯度下降法。问题是,反向传播从输出层开始一步一步传到Layer 1时,越到低层,联结的权值变化越小,直到没变化。这种叫梯度消失。还有一些呢?则是越到第一层,变化越来越大。这种叫梯度爆炸。常见于RNN。
解决方案探索如下:
目前来说,通常用1+2 多于 3 多于 4。就是现在一般使用He initialization跟ReLU的演进版本作为作为激活函数来解决梯度消失和爆炸的问题,其次才使用Batch Normalization,最后使用Gradient Clipping。
通常来说,我们很难获得足够的标记好的训练数据。常用解决方案如下:
对于大规模数据的训练,很多时候速度很慢。除了解决梯度消失或爆炸的问题之外,还有使用AdamOptimizer替代GradientDescentOptimizer会大大加快收敛速度 。
我们后面会教大家用tensorflow构造出一个神经网络并求解。
❸ BP神经网络中初始权值和阈值的设定
首先需要了解BP神经网络是一种多层前馈网络。以看一下在matlab中BP神经网络的训练函数,有梯度下降法traingd,弹性梯度下降法trainrp,自适应lr梯度下降法traingda等。
因为初始值(初始权值和阀值)都在x这个向量中,x(n,1)的长度n为:n=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum
其中inputnum*hiddennum是输入层到隐含层的权值数量,hiddennum是隐含层神经元个数(即隐含层阀值个数),hiddennum*outputnum是隐含层到输出层权值个数,outputnum是输出层神经元个数(即输出层阀值个数)。
结构
BP网络是在输入层与输出层之间增加若干层(一层或多层)神经元,这些神经元称为隐单元,它们与外界没有直接的联系,但其状态的改变,则能影响输入与输出之间的关系,每一层可以有若干个节点。
BP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每~层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
以上内容参考:网络-BP神经网络
❹ 神经网络权值是啥意思
神经网络的权值是通过对网络的训练得到的。如果使用MATLAB的话不要自己设定,newff之后会自动赋值。也可以手动:net.IW{}= ; net.bias{}=。一般来说输入归一化,那么w和b取0-1的随机数就行。神经网络的权值确定的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。
网络是由若干节点和连接这些节点的链路构成,表示诸多对象及其相互联系。
在1999年之前,人们一般认为网络的结构都是随机的。但随着Barabasi和Watts在1999年分别发现了网络的无标度和小世界特性并分别在世界着名的《科学》和《自然》杂志上发表了他们的发现之后,人们才认识到网络的复杂性。
网络会借助文字阅读、图片查看、影音播放、下载传输、游戏、聊天等软件工具从文字、图片、声音、视频等方面给人们带来极其丰富的生活和美好的享受。
汉语中,“网络”一词最早用于电学《现代汉语词典》(1993年版)做出这样的解释:“在电的系统中,由若干元件组成的用来使电信号按一定要求传输的电路或这种电路的部分,叫网络。”
在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型。在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。网络是人类发展史来最重要的发明,提高了科技和人类社会的发展。
❺ 神经网络算法中的weight是不是翻译为“权值”权值指的是什么呢 我是一个初学者,希望能有人能帮助我。
weight是连接权值的意思。权值是连接某两层网络的一个可调整的量,通过不断调节权值的量来达到训练网络的目的。不同的神经网络有不同的权值修正的函数。
❻ 神经网络算法原理
一共有四种算法及原理,如下所示:
1、自适应谐振理论(ART)网络
自适应谐振理论(ART)网络具有不同的方案。一个ART-1网络含有两层一个输入层和一个输出层。这两层完全互连,该连接沿着正向(自底向上)和反馈(自顶向下)两个方向进行。
2、学习矢量量化(LVQ)网络
学习矢量量化(LVQ)网络,它由三层神经元组成,即输入转换层、隐含层和输出层。该网络在输入层与隐含层之间为完全连接,而在隐含层与输出层之间为部分连接,每个输出神经元与隐含神经元的不同组相连接。
3、Kohonen网络
Kohonen网络或自组织特征映射网络含有两层,一个输入缓冲层用于接收输入模式,另一个为输出层,输出层的神经元一般按正则二维阵列排列,每个输出神经元连接至所有输入神经元。连接权值形成与已知输出神经元相连的参考矢量的分量。
4、Hopfield网络
Hopfield网络是一种典型的递归网络,这种网络通常只接受二进制输入(0或1)以及双极输入(+1或-1)。它含有一个单层神经元,每个神经元与所有其他神经元连接,形成递归结构。
(6)神经网络中权值和连接的修剪扩展阅读:
人工神经网络算法的历史背景:
该算法系统是 20 世纪 40 年代后出现的。它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理、分布式信息存储、良好的自组织自学习能力等特点。
BP算法又称为误差反向传播算法,是人工神经网络中的一种监督式的学习算法。BP 神经网络算法在理论上可以逼近任意函数,基本的结构由非线性变化单元组成,具有很强的非线性映射能力。
而且网络的中间层数、各层的处理单元数及网络的学习系数等参数可根据具体情况设定,灵活性很大,在优化、信号处理与模式识别、智能控制、故障诊断等许 多领域都有着广泛的应用前景。
确认方法:
统计学认为,在统计中计算平均数等指标时,对各个变量值具有权衡轻重作用的数值就称为权数。
例子:求下列数串的平均数
3、4、3、3、3、2、4、4、3、3、
一般求法为(3+4+3+3+3+2+4+4+3+3)/10=3.2
加权求法为(6*3+3*4+2)/10=3.2
其中3出现6次,4出现3次,2出现1次.6、3、1就叫权数。这种方法叫加权法。
一般说的平均数,就是把所有的数加起来,再除以这些数的总个数。表示为:
(p1+p2+p3+…..+pn)/n;
但有的数据记录中有一些相同的数据,在计算的时候,那一个数有几个相同数,就把这个数乘上几,这个几,就叫权,加权,就是乘上几后再加。平均数还是要除以总个数。
还是以上面的各个数为例:
它们每个数都有一些相同数,表示为:k1,k2,k3…….kn;
加权平均的公式是:(k1p1+k2p2+k3p3+……knpn)/(k1+k2+k3+…..kn)
❽ 三值神经网络
权重压缩:三值神经网络
卷积神经网络(Convolutional Neural Network,CNN)尤其适合于目标识别、分类、检测及图像分割等计算机视觉应用。 典型的模型有数百万参数并 运算量大 ;例如,AlexNet有6100万参数(浮点数权值共占用249MB存储空间),分类一张图片需要15亿高精度运算。 所以为降低CNN规模和使用资源,现在有模型修剪(model pruning,去掉值较小的权值)和权值压缩(weight compression,利用少数几位量化权值) 两种方法。
权值压缩:二值神经网络
重要点:网络中的权重更新使用三值{+1,0,-1};并最小化全精度权重W和三值权重W的欧式距离。
传播过程:
公式1的优化问题化解为如下:
从而 解:
最终确定一个阈值 、 来构建三值神经网络;根据 W 具体的分布情况来确定阈值 :
均匀分布:在 大于阈值的条件下 : 约等于均值( )*数量( )
[图片上传失败...(image-885207-1554553493996)]
正态分布:
[图片上传失败...(image-2a3804-1554553493996)]
最后本文章作者根据经验:
确定三值网络中的阈值与W期望的关系 : :
均值分布: (注 在[-a,a]均匀取值,均值为 )
正态分布: (注:
算法:
[图片上传失败...(image-d013ce-1554553493996)]
只在前向和后向过程中使用使用权值简化 ,但是更新是仍然是使用连续的权值。
优化方法:随机梯度下降(SGD+动量)、批量标准化和学习率衰减
Momentum动量:
本实验基于数据集MNIST、CIFAR-10、ImageNet以及三种网络结构(LeNet-5、VGG-7、ResNet-18(B))进行测试,分别使用二值神经网络、三值神经网络及全精度网络,评测其效果。
TWNs在benchmark表现比全精度网络稍微差一点,但是模型压缩率达到了16/32倍。
源码:
前向后向 更改在conv_layer.cpp line 30-100 Forward_cpu | backward_cpu
❾ 人工神经网络里的权值和权向量是什么意思啊
人工神经网络是有向概率随机网络
每条路径都有实现概率和方向
权值就是这条路径的实现概率
权向量就是这条路径的指向和权值共同组成的向量
❿ Rethingking The Value of Network Pruning
加速卷积神经网络的方法主要可以分三个方面:1. 针对卷积操作优化,例如使用FFT实现卷积操作;2. 量化操作,例如网络的二值化(BinaryNet);3. 在结构上简化,使模型变小。在结构上简化模型也可以分三类:张量分解、连接稀疏化,基于通道的裁枝。首先张量分解是将张量分解成多个小张量,但是输出的通道数并没有变化,因此对于1*1的卷积层很难通过张量分解的方法做压缩,而当前很多模型结构都用到了大量的1*1卷积(例如ResNet,GoogleNet,Xception等)。其次连接稀疏化是将两层之间的连接变稀疏,但是这种稀疏化处理通常是没有固定模式规律的,所以尽管理论上有很高的加速效果,但是实际实现很复杂,因为通过稀疏化处理,数据无法再通过原来的张量存储,需要使用稀疏矩阵/稀疏张量来存储,那么卷积操作也变成稀疏卷积。最后相比于前两种方法,基于通道的裁枝既可以减少通道数,又不会改变数据的存储方式,因此其对于CPU和GPU都有很好的加速效果,同时也不需要实现特殊的卷积操作。
模型压缩的典型工作:
Low-rank Decomposition 低秩分解 :
使用SVD等技术来近似于权重矩阵(它具有低秩矩阵)。
在全连接层上工作很好,但CNN的计算量主要在卷积层。
Weight Quantization 量化权值 :
如HashNet量化网络权值(采用共享权重和哈希索引大大节省存储空间)
但不能节省运行时间(因为权重还需要恢复从而进行网络推理inference)
二值化是个很好的方法(或用三值化{-1,0,1})。
Weight Pruning/Sparsifying 权重修剪或稀疏 :
有论文将训练好的网络里的小权值修剪掉(即设为0),这样也可以用稀疏格式储存权值。
但是需要专用的稀疏矩阵运算库或特殊硬件来加速,且运行内存也没有减少。
Structured Pruning/Sparsifying 结构修剪或稀疏化:
有提出在训练好的网络中,修剪那些较小权值连接的Channel,再微调网络恢复精度方法的论文
有提出在训练前随机停用channel从而引入稀疏,有提出neuron-level的稀疏方法从而修剪神经元获得紧凑网络,也有提出结构化稀疏学习(SSL)的方法,去稀疏CNN不同层级的结构(filters、channels、layers)。
Neural Architecture Learning (NAS)神经结构学习:
有关于自动学习网络结构的方法,如谷歌通过强化学习来搜寻最佳网络结构,或者其他的给定巨大网络结构,从中学习出最佳子图网络。
但是资源消耗太大,时间太长。
传统的模型剪枝思路:训练一个冗余模型+剪枝+微调,剪枝的意义在于保留重要的权重,裁剪冗余的权重,以此尽可能保证准确率。实际上,对于所有STOA的模型结构剪枝算法,微调一个剪枝后的模型相比于从头训练一个剪枝候的模型,结果不会更好,甚至更差。意思就是说,剪枝之后保留的权重相比于剪枝之后网络模型的结构,并不那么重要,或者说, Network Pruning更多地是在进行网络结构的搜索 。根据实验观察,本文发现:1、训练一个大的参数冗余的模型并不是必要的;2、保留对于大网络重要的权重对于小模型而言并不那么重要;3、剪枝之后的网络结构本身而非保留的权重对于最后模型的有效性更为重要。
传统剪枝的两点共识:
1、训练一个效果优良的大模型很重要,以此保证高准确率;
2、剪枝之后的模型结构和保留的权重都很重要,因此是fine-tuning而非train from scratch
本文认为在进行结构剪枝(structured pruning method)(在卷积通道上进行剪枝)上述两个共识可能并不是必须的。
两个观察:
1、对于预先定义(predefined)目标模型的结构剪枝,直接从头训练剪枝模型不比微调剪枝之后的模型效果差,甚至更好;
2、对于事先不知道(auto-discover)目标模型的结构剪枝,从头训练也不比微调的结果差,甚至更好。
意思是说结构比参数重要,模型剪枝可能本质就在做网络结构的搜索。此外,从参数冗余的大模型继承权重参数似乎并不是那么好,可能让剪枝之后的模型陷入局部优化。
对于非结构化的网络剪枝(unstructured,weight level),在小数据集上从头训练往往与微调剪枝模型效果相当,但是在大数据集上不是如此。
从头训练有两种方式:
剪枝模型与大模型训练同样的轮数显然不公平,因为剪枝模型一轮训练的计算量明显远低于大模型。
因此,一种方法是使得训练大模型和训练小模型的总体计算量是相同的(FLOPs),换言之,剪枝降低了几倍的计算量,训练轮数就是训练大模型的几倍,称之为Scratch-B。另外一种的使得训练剪枝模型的轮数跟训练大模型一样,称之为Scratch-E。
Predefined Structured Pruning
L1-norm based Filter Pruning
以往一些剪枝的操作主要是 减少了全连接层的参数 ,全连接层的参数量占比最多(比如VGG-16中全连接层操作参数占了90%,但计算量只占了不到1%), 但是主要的计算量集中在卷层操作。意即对权重矩阵进行稀疏化并不能充分减少计算量。论文提出 对卷积层进行剪枝操作 ,然后进行retrain,不会造成 稀疏连接 (稀疏矩阵操作需要特殊的库等来处理),全连接层可以使用 平均池化层 来代替以减少参数量。
pruning filters and feature maps
第 层卷积层的输入特征图为 ,卷积核维度为 ,单个卷积核记为 ,输出特征图维度为 ,总计算量为 ,去除一个卷积核,将减少的计算量为 ,因此,如果去除 个卷积核,将减少的计算量倍数为 。
在单层中确定去除那些卷积核:
衡量每层中单个卷积核的相对重要性:绝对值的和(矩阵L1范数和)
具有较小权重的卷积核可以认为倾向于产生较小激活的特征图(相比于同层内的其他卷积核)
选择前m个最小的绝对值,删除对应的卷积核和特征图,相比于随机选择相同数量的filters和选择最大值filters的结果比较,效果更好 。
算法:
对于每一个filter matrix按列绝对值求和
对求和结果排序
裁剪掉m个绝对值最小的filters,以及对应的输出,它又是下一层的输入,所以也得去掉下一层卷积核的对应通道
剩余的kernel weights保留
决定每层对剪枝的敏感性:
每一卷积层进行单独剪枝,查看在validation set上准确度的变化,对于VGG-16,一些卷积层的卷积核数量是一样的,所以对于敏感度差不多的卷积层,使用相同的比例进行剪枝,而对于敏感度比较大的层,选择最小的比例进行剪枝或者不进行剪枝。
跨越多层的剪枝:
之前的一些剪枝策略是逐层剪枝,然后进行retraining,但是这样是非常耗时的。
两种策略
独立剪枝:就是每一层是独立的,当剪枝层的输入特征图通道减少,决定该去掉哪些卷积核时,范数的计算还是应该考虑原始卷积的所有通道,然后进行剪枝
贪心剪枝:就是考虑到上一层被剪掉的情况,当剪枝层的输入特征图通道减少,决定该去掉哪些卷积核时,范数的计算要去掉对应输入特征图减少的通道,然后进行剪枝
Retraining
剪枝之后,应该retraining(类似fine-tune)
一次性剪枝然后retrain
逐层剪枝进行retrain
第二种策略结果可能会更好,但是需要更多的epochs
ThiNet
作者主页
prune以filter(卷积核)为单位,根据该层filter的输出来判断该filter是否对结果有贡献,如果没有贡献或贡献很小,则直接把这个filter去掉,关键在于filter的选择方式,依据则是如果可以用某一层的输入的一个子集代替原来的输入得到尽可能类似原来的输出的话,那么子集以外的输入就可以去掉,则其对应的前面一层的卷积核也就可以去掉。如下图。
以去掉冗余卷积核做prune的研究还有很多,关键在于选择方式,比如计算filter的绝对值和,认为如果一个filter的绝对值和比较小,说明该卷积核并不重要,这种算法暂且叫Weight sum;还有计算激活层输出的feature map的值的稀疏程度,如果feature map的值很稀疏,也就是大部分值是0,那么该feature map对应的filter也是冗余的,可以去掉,这种算法暂且叫APoZ(Average Percentage of Zeros)。
Filter selection:
不同于一些方法:用第 层的数据来指导剪枝第 层的卷积核,本文使用第 层来确定第 层的剪枝,如前所述:
如果能用第 层的输入的某一子集来估计该层的输出,那么输入中的其他通道就可以被去掉,而第 层的输入来源于第 层的输出,那么对应第 层的卷积核就可以去掉。
Pruning:
同时去掉第 层输入的weak channel,和与其对应的第 层的卷积核,网络结构不变,只是变瘦了。
Finetuning:
当对每一层做prune后,都fine-tune1到2个epoch,然后等所有层都prune后,再fine-tune多个epoch。
因此整体上就是上述三步迭代应用到每一层上,依次对每一层做prune。
Data-drive channel election:
将一个卷积操作定义为: , 表示输入特征图,维度为 , 表示卷积核,维度为
目标是移除一些不太重要的卷积核 ,而由于第 层的卷积核数量没变,因此第 层的输出的维度是不变的,意即第 层的输入 不变,根据这样的想法,就可以移除第 层中对 影响很小的那些卷积核,这样对整个网络的性能影响也很小。换句话说,就是最小化 的重构损失。
Collecting training examples
从 上任意取一位置分量 ,有:
意即可以寻找一个子集 ,使得:
贪心算法:给定输入 ,优化:
m是图像数量和位置数量的乘积。
由于 包含channel较多,因此求解速度会很慢,因此定义另一个集合 ,集合 所包含的channel要少于 ,满足:
则优化下式:
对于ResNet这样的网络,在每一个stage的每一个block中一般有三层卷积,其中最后一层卷积的结果需要和skip connection的结果做element-wise proct,这样的话就得保证该block的最后一层卷积的输出channel个数和skip connection的输出channel个数一样。因此在文中采用只对一个block的前两层卷积做prune,而不动最后一个卷积层,如下图Figure3。另外对于VGG-16网络,由于前面10层卷积占据了90%的计算量,而全连接层又占据了86%的参数,因此作者采用对前面10层卷积层进行prune,达到加速目的,另外将所有全连接层用一个global average pooling层代替。
Regression based Feature Reconstruction
Channel Pruning for Accelerating Very Deep Neural Networks
对于一个训练好的模型,本文方法通过一个2步迭代的算法逐层裁枝,优化函数是LASSO回归和最小二乘法重建误差。
与ThiNet类似,本文不去考虑单个参数的重要性,而是直接最小化输出特征图的重建误差,逐层地做裁枝,为了降低特征图B的通道,通过最小化特征图C的重构误差得到。
第一步是选择通道,第二步是特征图重建,目的是最小化重建误差,本文提出两步迭代的算法:首先选取最具代表性的通道,即裁剪B层到C层的卷积;其次重建特征图,调整B层到C层的参数W,使C层特征图重建误差最小。迭代交替进行以上两步。通过基于LASSO回归的方法来找到最具代表性的通道。
假设特征图B到特征图C的卷积表示为 ,特征图B ,特征图C , 表示batch_size,将特征图B的通道由 降为
表示非零项数, 是向量 的分量,为0就表示对应通道被去掉, , 都表示单通道的特征图/卷积核。但由于上式中的约束条件是0-范数,属于 优化问题,求解为NP难问题,因此进一步将0-范数放宽到1-范数,得优化函数为:
选择通道:
固定参数 不变,求解 ,则上述优化问题可以进一步转化为LASSO回归问题:
,上式可以通过SGD方法找到最优解,是比较常见的优化问题。
重构特征图:
固定 不变,上式可以转化为最小二乘估计问题:
最小二乘估计问题同样为常见的优化问题,也可以利用SGD的方法得到最优解,最后做出调整,保证范数为1:
对多分支网络进行剪枝:
在裁剪第一个卷积时,并不删掉其输入特征图的通道,而是新加一层采样层(其用处就是对输入特征图按 来进行采样,同时保留了原本的输入特征图作为shortcut的输入),对于残差块的第一个卷积层的输入进行通道采样,估计 的重构误差。
Automatic Structured Pruning
Network Slimming
利用batch normalization中的缩放因子 作为重要性因子,即 越小,所对应的channel就不太重要,就可以裁剪(pruning)
对BN层中的scale factor 进行L1正则化,使其变得稀疏。
BN:
直接用 来评估channel的重要程度。 的数越小,说明该channel的信息越不重要,也就可以删减掉该Channel。
为什么不用 作为重要性因子?
feature map的信息量是来源于方差而非均值。方差越大则该feature map内的特征就越明显。
服从分布 ,因此方差越小,信息量就越少,就越不重要
某些通道特征图的方差越小,意即对下一层特征图的所有单元的贡献值越平均,将其去掉,仅仅只是做了特征评议,不影响相对差异
因此对BN的缩放因子添加smooth L1正则化(不是Fast R-CNN中的smooth L1 Loss),损失函数定义为:
训练方法为:
第一步:初始化网络;
第二步:加入Channel稀疏惩罚项,训练网络;
第三步:通过固定阈值来删减channel,如删减70%的channel;
第四步:Fine-tune。由于删减channel后精度会下降,故再训练去微调网络;
第五步:可以再跳到第二步,实现多次精简网络;
第六步:得到精简后的网络。