如何理解一个卷积神经网络?(二)

Question3模型的参数和计算力如何计算?

1.FLOPS 和FLOPs

FLOPS 是floating-point operations per second的缩写,意指每秒浮点运算次数,用来衡量硬件的性能。
FLOPs 是floating point of operations的缩写,是浮点运算次数,用来衡量算法/模型复杂度。

1GFlops = 1,000MFlops

torchstat,thop这两个库可以帮助我们计算FLOPs。但是,值得注意的是,FLOPs并不能完全代表模型的速度,这个指标并没有考虑以下几个重大因素。

2.MAC(Memory Access Cost)

MAC是内存访问成本,就是指计算机将数据加载到缓存中再进行计算的时间成本。(当数据量过大的时候,如果全部数据都放在内存中加载,很容易就导致内存不足。因此,通常是通过缓存加载,将数据集分成几个batch分批次加载。)因此需要先将数据分组卷积就是一个MAC不友好的典型例子,分组组数越多,MAC成本越大。具体公式这里暂时不给出,后续文章会深入。

3.并行度

很容易理解,在相同FLOPS情况下,高并行度模型的计算速度肯定低并行度快。目前的并行方式分为两种,数据并行和模型并行。数据并行是指将一个batchsize的数据分布到多张卡上进行训练。例如,如果总共有4张卡,而batchsize设置为256,每张卡上将处理64个样本。这种方式要求每张卡上的模型参数完全一致,并且在每个批次结束后,通过梯度聚合来更新所有卡上的模型参数。

而模型并行是指将单个模型分布到多张卡上,并且每张卡负责处理部分模型的计算。比如,模型总共64层,每个GPU上各计算16层。这通常在模型太大以至于无法完全放入一张卡时使用。每张卡上的模型参数只是被分解为整体模型参数的一部分,并且每张卡上都有自己的输入数据。在每个批次结束后,每张卡上的模型参数都进行更新。这种方式要求模型能够有效地进行分解和同步,通常需要更复杂的实现。

Pytorch中目前最常用数据并行的库是torch.nn.parallel.DistributedDataParallel,以及可以使用nn.SyncBatchNorm()进行同步BN,避免在单张GPU上batchsize过小,同步BN可以达到更好的归一化效果。同时,多GPU计算的时候,batchsize也可以同时增大,这时候可以适当调大学习率,避免陷入局部最优解。

4.计算平台

计算平台的不同也会影响模型的计算速度。例如不同版本的cuda对卷积的加速计算不同。

5.一个普通卷积的参数量(Paramters)和浮点运算数(FLOPs)实例

Question4 Normalize

1.什么是Normalize?

数据标准化就是使数据分布成均值为0,方差为1的状态,又称为Z-score算法。它通常可以位于在数据输入模型前,作为一种数据预处理方式对数据进行统一的整理对齐,也可以在隐藏层,即BN层,BN层的位置通常位于全连接层之后,激励函数之前。如果不归一化,直接输入激活函数,得到结果会分布在两端,(极大值极小值两端),如图5。

图5 数据归一化(来源网络)

2.BN层的算法流程

BN层的算法流程如图6所示,为什么还有一个反标准化工序呢?这是为了让神经网络自己去学着使用和修改这个扩展参数 gamma和 平移参数 β, 这样神经网络就能自己慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用,如果没有起到作用,我就使用 gamma 和 belt 来抵消一些 normalization 的操作。

图5 BN层中的算法流程(来源网络)

3.模型必须要使用标准化吗?

并不是的,只有当你使用正则的时候,标准化是必须的。因为不用正则时,我们的损失函数只是仅仅在度量预测与真实的差距,加上正则后,我们的损失函数除了要度量上面的差距外,还要度量参数值是否足够小。而参数值的大小程度或者说大小的级别是与特征的数值范围相关的。简单可以理解为,当你特征的数值单位不一样的时候,便会影响到模型推理出来的参数的大小,参数的大小不一,在正则函数作用下,损失函数只对数量级别大的参数有影响而忽略了小参数。因此,在正则函数下是需要对数据进行标准化的。

4.Softmax

数据归一化的方法并不止一种,在多类分类算法下,常常使用的归一化方法是softmax。为什么呢?因为这类网络常常使用交叉熵损失函数,在同时使用这两个算法的情况下,且求导非常简洁,同于线性回归。具体的公式推导这里不写了,写一下softmax公式。

5.不同范围内的归一化,效果并不一样

(a)BatchNorm

批归一化通过将每个小批量数据作为一个整体来标准化输入。

优点:有助于减少梯度消失和梯度爆炸问题,加速模型训练,提高模型的鲁棒性和泛化能力。

缺点:对小批量大小敏感,对于较小的批量大小,批归一化效果较差。

(b)InstanceNorm

实例归一化将每个样本独立地进行标准化,不考虑样本之间的相关性。

优点:适用于图像风格转换等任务,能够保留图像的细节信息,降低网络对输入样本的依赖性。

缺点:忽略了样本之间的关系,不适用于对样本间关系很重要的任务。

(c)LayerNorm

层归一化将每个样本在通道维度上标准化,即在每个层的输出上进行归一化。

优点:对于RNN等逐步处理的模型比较有效,不受小批量大小的限制,有较好的泛化性能。

缺点:不考虑样本之间的关系,对于卷积神经网络等结构可能效果不如批归一化。

(d)GroupNorm

组归一化将通道分成若干组进行归一化操作,每组通道相互独立。

优点:对于批量大小较小的情况有较好的性能,适用于多尺度网络训练。

缺点:计算开销较大,不如批归一化在模型性能上表现出色。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值