当前位置: 首页 > news >正文

每日文献(八)——Part four

今天从第五章节 CNN的迅速发展开始介绍。

目录

五、CNN的迅速发展

5.1 FFT

5.2 结构化变形

5.3 低精度

5.4 权重压缩

5.5 稀疏卷积


五、CNN的迅速发展

随着计算机视觉和机器学习任务的挑战越来越大,深度神经网络的模型变得越来越复杂。这些强大的模型需要更多的数据进行训练,以避免过度拟合。与此同时,大量的训练数据也带来了新的挑战,例如如何在可行的时间内训练网络。在本节中,我们将介绍CNN的一些快速处理方法。

5.1 FFT

Mathieu等人。[49]使用FFT在傅里叶域中进行卷积运算。使用基于FFT的方法具有许多优点。首先,由于滤波器与小批量中的多个图像进行卷积,因此可以重复使用滤波器的傅里叶变换。其次,当将梯度反向传播到滤波器和输入图像时,可以重用输出梯度的傅立叶变换。最后,可以在傅立叶域中执行输入通道上的求和,使得每个图像每个输出通道仅需要一次逆傅立叶变换。已经开发了一些基于GPU的库来加速训练和测试过程,例如cuDNN [130]和fbfft [131]。

然而,使用FFT来执行卷积需要额外的内存来存储傅立叶域中的特征图,因为滤波器必须被填充为与输入相同的大小。当跨越参数大于1时,这尤其昂贵,这在许多最先进的网络中很常见,例如[132]和[10]中的早期层。虽然FFT可以实现更快的训练和测试过程,但小尺寸卷积滤波器的日益突出已经成为诸如ResNet [12]和GoogleNet [10]等CNN的重要组成部分,这使得一种新方法专门用于小尺寸滤波器:Winograd的最小滤波算法[133]。Winograd的洞察力类似于FFT,在应用逆变换之前,Winograd卷积可以在变换空间中跨通道减少,从而使推理更有效。

5.2 结构化变形

低秩矩阵因式分解已经在各种情况下被用于改进优化问题。给定一个m×n秩矩阵C,存在一个分解C = AB,其中A是m×r列满秩矩阵,B是r×n行满秩矩阵.因此,我们可以用A和B代替C。为了将C的参数减少一个分数p,必须确保mr+rn < pmn,即,C的秩应满足r < pmn/(m + n)。通过应用这种分解,空间复杂度从O(mn)降低到O(r(m + n)),时间复杂度从O(mn)降低到O(r(m + n))。为此,Sainath等人。[134]将低秩矩阵分解应用于深度CNN中的最终权重层,导致训练时间加速约30-50%,精度损失很小。类似地,Xue等人。[135]在深度CNN的每一层上应用奇异值分解,将模型大小减少了71%,相对准确度损失不到1%。受[136]的启发,丹顿等人。[137]和Jaderberg等人。[138]独立研究卷积滤波器内的冗余,并开发近似值以减少所需的计算。Novikov等人。[139]概括了低秩思想,他们将权重矩阵视为多维张量,并应用Tensor-Train分解[140]来减少全连接层的参数数量。

自适应Fastfood变换是Fastfood [141]变换在逼近矩阵方面的推广。它使用自适应快餐变换来重新参数化全连通层中的权重矩阵C ∈ Rn×n:Cx =(?D1 H?D2ΠH?D3)x,其中?D1、?D2和?D3是参数的对角矩阵,Π是随机置换矩阵,H表示沃尔什-哈达玛矩阵。算法时间复杂性为O(nlogn),空间复杂性为O(nlogn)。

受循环矩阵在空间和计算效率方面的巨大优势[142,143]的激励,Cheng等人[144]通过在权重矩阵上施加循环结构来加快计算,并进一步允许使用FFT来加快计算,从而探索了全连接层的参数化中的冗余。以循环矩阵C ∈ Rn×n作为全连通层的参数矩阵,对于输入向量x ∈ Rn,Cx的输出可以通过FFT和逆IFFT有效地计算出来:CDx = ifft(fft(v))fft(x),其中对应于元素乘法运算,v ∈ Rn由C定义,D是随机符号翻转矩阵,用于提高模型的容量。该算法的时间复杂度从O(n2)下降到O(nlogn),空间复杂度从O(n2)下降到O(n).Moczulski等人[145]通过用正交离散余弦变换(DC)交织对角矩阵来进一步概括循环结构

5.3 低精度

浮点数是处理CNN参数的小更新的自然选择。然而,结果参数可能包含大量冗余信息[146]。为了减少冗余,二值化神经网络(BNN)将计算输出所涉及的部分或所有运算限制为二进制值。

神经网络层的二进制化有三个方面:二进制输入激活,二进制突触权重和二进制输出激活。完全二值化要求所有三个分量都被二值化,并且具有一个或两个分量的情况被认为是部分二值化。Kim等人。[147]考虑完全二值化,其中突触的预定部分具有零权重,并且所有其他突触具有权重1。他们的网络只需要XNOR和位计数操作,他们在MNIST数据集上报告了98.7%的准确率。XNOR-Net [148]在ImageNet数据集上应用卷积BNN,其拓扑结构受到AlexNet,ResNet和GoogLeNet的启发,报告完全二进制化的前1精度高达51.2%,部分二进制化的精度高达65.5%。DoReFa-Net [149]探讨了在向前传递和向后传递过程中降低精度。在他们的实验中探索了部分和完全二进制化,ImageNet上相应的前1名准确率分别为43%和53%。Courbariaux等人的工作[150]描述了如何使用完全二进制化和批量归一化层训练完全连接的网络和CNN,并报告了MNIST,SVHN和CIFAR-10数据集的竞争精度。

5.4 权重压缩

为了减少卷积层和全连接层中的参数数量,已经进行了许多尝试。在这里,我们简要介绍了这些主题下的一些方法:矢量量化、剪枝和哈希。

矢量量化(Vector quantiization, VQ)是一种压缩密集连接层以使CNN模型更小的方法。类似于标量量化,一个大的数字集被映射到一个较小的集合[151],VQ将一组数字量化在一起,而不是一次处理一个。2013年,Denil等人[136]证明了神经网络参数中存在冗余,并使用VQ显著减少了深度模型中动态参数的数量。Gong等人[152]研究了压缩cnn参数的信息理论向量量化方法,得到了与[136]相似的参数预测结果。他们还发现VQ方法比现有的矩阵分解方法有明显的增益,并且在VQ方法中,结构化量化方法(如积量化)的效果明显优于其他方法(如残差量化[153]、标量量化[154])。

另一种压缩权重的方法是修剪。它通过永久删除不太重要的连接来减少cnn中的参数和操作数量[155],这使得较小的网络能够从大型前辈网络中继承知识并保持性能的可比性。Han等人[146,156]通过基于量的修剪方法在网络中引入细粒度稀疏性。如果任何权值的绝对值小于标量阈值,则对该权值进行修剪。Gao等人[157]扩展了基于幅度的方法,通过紧耦合的修剪和再训练阶段,允许恢复先前迭代中修剪过的权重,以获得更大的模型压缩。Yang等[158]考虑到权值之间的相关性,提出了一种能量感知的剪枝算法,直接使用CNN的能量消耗估计来指导剪枝过程。除了细粒度的修剪,还有研究粗粒度修剪的工作。Hu等人[159]建议移除在验证集上频繁产生零输出激活的过滤器。Srinivas等人[160]将相似的过滤器合并为一个,而Mariet等人[161]将具有相似输出激活的过滤器合并为一个。

设计一个适当的哈希技术来加速cnn的训练或节省内存空间也是一个有趣的问题。hashhednets[162]是一种最近的技术,通过使用哈希函数将连接权重分组到哈希桶中,并且同一哈希桶中的所有连接共享单个参数值来减小模型大小。他们的网络在很大程度上保留了图像分类的泛化性能的同时,大大降低了神经网络的存储成本。正如Shi等人[163]和Weinberger等人[164]所指出的那样,稀疏性将最小化哈希冲突,使特征哈希更加有效。HashNets可以与剪枝一起使用,从而更好地节省参数。

5.5 稀疏卷积

最近,已经进行了几种尝试来稀疏卷积层的权重[165,166]。Liu等人[165]考虑基滤波器的稀疏表示,并通过利用卷积核的信道间和信道内冗余实现90%的稀疏化。Wen等人[166]没有对卷积层的权重进行稀疏化,而是提出了一种结构化稀疏学习(SSL)方法来同时优化它们的超参数(过滤器大小、深度和局部连通性)。Bagherinezhad等人[167]提出了一种基于查找的卷积神经网络(LCNN),该网络通过对丰富的字典集进行少量查找来编码卷积,该字典集被训练以覆盖cnn中的权重空间。他们用字典和两个张量解码卷积层的权重。字典在一个层中的所有权重过滤器之间共享,这使得CNN可以从很少的训练样本中学习。与标准CNN相比,LCNN可以在少量迭代中获得更高的精度。

http://www.dtcms.com/a/112084.html

相关文章:

  • 基于YOLOv8的热力图生成与可视化-支持自定义模型与置信度阈值的多维度分析
  • FPGA系统开发板调试过程不同芯片的移植步骤介绍
  • Leetcode 680 -- 双指针 | 贪心
  • LeetCode算法题(Go语言实现)_30
  • AcWing 6135. 奶牛体检
  • 【Java集合】LinkedList源码深度分析
  • Nature Electronics|一种透气、可拉伸的液态金属基3D电子皮肤系统(健康监测/可穿戴电子/透汗透气性电子/电子皮肤/柔性电子/集成电路)
  • 降维算法之PCA(主成分分析)
  • 函数和模式化——python
  • 文件系统-重定向
  • 架构思维:冷热分离 - 表数据量大读写缓慢的优化方案
  • 有没有可以帮助理解高数的视频或者书籍资料?
  • 【力扣hot100题】(050)岛屿数量
  • 消息队列之-Kafka
  • #Linux内存管理# 在ARM32bit Linux中,高端内存的起始地址是如计算出来的?
  • 思二勋:未来所有的业务都将生于AI、长于AI、成于AI
  • 搜索二维矩阵
  • 笔记:代码随想录算法训练营day65:dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • Docker安装、配置Redis
  • 使用Expo框架开发APP——详细教程
  • 【JavaScript】原型链 prototype 和 this 关键字的练习(老虎机)
  • 安当TDE透明加密:构建跨地域文件服务器安全传输的“双重保险“
  • VBA中类的解读及应用第二十二讲:利用类判断任意单元格的类型-5
  • C语言:3.31
  • 【YOLO系列(V5-V12)通用数据集-火灾烟雾检测数据集】
  • 大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)
  • 七均线策略思路
  • Mac VM 卸载 win10 安装win7系统
  • Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
  • Apache Camel指南-第四章:路由径构建之异常处理