C/C++教程

用SVD压缩深度模型(DNN,CNN)的全连接层(fully-connected layer)

本文主要是介绍用SVD压缩深度模型(DNN,CNN)的全连接层(fully-connected layer),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

转载请注明出处,否则将依法追究版权

全连接层出现在DNN和 CNN中.很多论文[介绍了如何用SVD,VQ,Sparse code压缩全连接层,这些方法不是端到端地训练一个新模型,而是对训练好的模型压缩其全连接层的权重矩阵,在应用实现中则需要同时考虑对权重和偏移的处理. 实际上权重和偏移的维度不相同,处理方法是不同的.本文将系统性地介绍在应用实现中,如何利用下述方法压缩权重矩阵,同时处理与之对应的偏移量,从而实现全连接层压缩的整个过程.

首先深入研究两个相邻全连接层的运算原理,理解权重矩阵 和偏移 的关系.如下图所示,第L层有m个神经元,第(L+1)层有n个神经元,因此相邻两个全连接层的权重矩阵 是一个 的2维矩阵.全连接层输入 与输出 的映射关系是 .即L层所有神经元与第(L+1)层的某个神经元的连接共享同一个偏移量,因此相邻两个全连接层的偏移量是一个1维向量,包含n个元素.

奇异值分解(SVD)压缩算法. 如下图所示,基于SVD的全连接层压缩方法就是引入一个中间层L’,该中间层包含 c个神经元, .因此可以减少连接数和权重规模,权重矩阵规模从 mn减少到(m+n)c ,从而降低运行深度模型的计算和存储需求.
图片描述
DeepX运用了基于SVD的面向层的压缩技术,处理训练好的模型参数,以减少参数规模,减少模型执行推断时的资源消耗,提高推断速度.具体地,相邻的两个全连接层L和(L+1)分别有m和n个神经元,对相邻两层的权重矩阵 执行SVD运算,即就是 .可以选择最大的c个值来近似权重矩阵,如式(1)所示.
(1)图片描述
基于以上分析,就可以直接代码实现了
图片描述

这篇关于用SVD压缩深度模型(DNN,CNN)的全连接层(fully-connected layer)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!