数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
三、基本卷积的变体
3.1 局部连接
局部连接与卷积很类似:局部连接也是连接受限的,但是每个连接都有自己的权重。
即:局部连接实现了稀疏交互,但是没有实现参数共享。
假设局部连接的权重矩阵为一个 6 维的张量 $ MathJax-Element-363 $ ,其元素为 $ MathJax-Element-245 $ , 其中: $ MathJax-Element-345 $ 为输出的通道; $ MathJax-Element-247 $ 为输出通道中的位置; $ MathJax-Element-248 $ 为输入的通道; $ MathJax-Element-249 $ 为输入通道中的位置。
则局部连接可以表示为:
$ Z_{i,j,k}=\sum_{l}\sum_m\sum_nV_{l,j+m,k+n}W_{i,j,k,l,m,n} $当权重共享时, $ MathJax-Element-240 $ ,此时局部连接操作退化到卷积操作。
局部连接也称作非共享卷积,因为它并不横跨位置来共享参数。
与基本卷积相比,权重参数由 $ MathJax-Element-241 $ 。
这说明 $ MathJax-Element-363 $ 中,不同位置的输出的计算过程中,采用了不同的权重。这意味着局部连接不满足输入的等变表示。
与全连接相比,局部连接实现了稀疏交互。
如果知道特征是一小部分区域的函数,而不是整个区域的函数时,局部连接层很有用。此时只需要处理部分输入即可。如:如果需要辨别一张图片是否人脸图像,则只需要在图像的下部中央部分寻找即可。
卷积也可以处理局部特征,但是对于不满足平移不变性的特征,卷积层无能为力。此时需要使用局部连接层。
在图片中识别是否存在人脸,这满足平移不变性,因此也可以使用卷积来处理。
有时候,可以进一步限制卷积层或者局部连接层。如:限制输出的通道 $ MathJax-Element-345 $ 仅仅利用了一部分输入通道(而不是全部输入通道) 的数据。
这种方案减少了通道之间的连接,使得模型的参数更少,降低了存储消耗,减少了计算量。
3.2 拼接卷积
拼接卷积
tiled convolution
对卷积和局部连接进行了折中:学习一组核,使得当核在空间移动时,它们可以循环利用。- 拼接卷积在相邻的位置上拥有不同的过滤器,就像局部连接层一样。
- 拼接卷积每隔一定的位置,使用相同的过滤器,就像卷积层一样。
- 拼接卷积的参数仅仅会增长常数倍,常数就是过滤器集合的大小。
假设拼接卷积的权重矩阵为一个 6 维的张量 $ MathJax-Element-363 $ ,其元素为 $ MathJax-Element-245 $ , 其中: $ MathJax-Element-345 $ 为输出的通道; $ MathJax-Element-247 $ 为输出通道中的位置; $ MathJax-Element-248 $ 为输入的通道; $ MathJax-Element-249 $ 为输入通道中的位置。
则拼接卷积可以表示为:
$ Z_{i,j,k}=\sum_{l}\sum_m\sum_nV_{l,j+m,k+n}W_{i,j\%t,k\%t,l,m,n} $这里百分号是取摸运算, $ MathJax-Element-252 $ 为不同的核的数量(它也就是核的轮换周期)。
- 如果 $ MathJax-Element-252 $ 等于输入的尺寸,则拼接卷积退化成局部连接。
- 如果 $ MathJax-Element-252 $ 等于 1 ,则拼接卷积退化成卷积。
通常在卷积层会引入非线性运算,而在非线性运算中,需要加入偏置项。
对于局部连接,每个输入单元都有各自的偏置。
对于拼接卷积,偏置项通过与核一样的拼接模式来共享。
对于常规卷积,通常在输入通道级别上共享偏置。即:同一个通道使用一个偏置项。
如果输入是固定大小的,也可以在每个输入位置上学习一个单独的偏置。其好处是:允许模型校正输入图像中不同位置的差异。
3.3 分组卷积
分组卷积
Group convolution
:将多个卷积核拆分为分组,每个分组单独执行一系列运算之后,最终在全连接层再拼接在一起。通常每个分组会在单独的
GPU
中训练,从而利用多GPU
来训练。分组卷积的重点不在于
卷积
,而在于分组
:在执行卷积之后,将输出的feature map
执行分组。然后在每个组的数据会在各个GPU
上单独训练。对卷积的输出
feature map
分组,等价于在卷积过程中对卷积核进行分组。
分组卷积在网络的全连接层才进行融合,这使得每个
GPU
中只能看到部分通道的数据,这降低了模型的泛化能力。如果每次分组卷积之后,立即融合卷积的结果则可以解决这个问题。
分组卷积降低了模型的参数数量以及计算量。
假设输入
feature map
具有 $ MathJax-Element-329 $ 的输入通道、宽/高分别为 $ MathJax-Element-254 $ ,假设卷积核的宽/高分别为 $ MathJax-Element-255 $ ,有 $ MathJax-Element-334 $ 个卷积核。则:- 参数数量: $ MathJax-Element-257 $
- 计算量(以一次
乘-加
计算为单位): $ MathJax-Element-258 $ 。 其中 $ MathJax-Element-259 $ 分别为输出feature map
的宽/高
假设采用分组卷积,将输入通道分成了 $ MathJax-Element-260 $ 组,则分组之后:
- 参数数量: $ MathJax-Element-261 $
- 计算量(以一次
乘-加
计算为单位): $ MathJax-Element-262 $
因此分组卷积的参数数量、计算量均为标准卷积计算的 $ MathJax-Element-263 $ 。
考虑到全连接层的参数数量在网络中占据主导地位,因此即使采取分组卷积,网络最终的参数数量的减小幅度不会很大。
因此分组卷积主要降低的是计算量。
分组卷积最早在
AlexNet
中出现。由于当时的硬件资源的限制,训练AlexNet
时卷积操作无法全部放在同一个GPU
中处理。因此,通过分组来在多个GPU
上分别处理,然后将多个GPU
的处理结果融合。
3.4 小卷积核替代
在
AlexNet
中用到了一些非常大的卷积核,如11x11、5x5
等尺寸的卷积核。卷积核的尺寸越大,则看到的图片信息越多,因此获得的特征会越好。
但是卷积核的尺寸越大,模型的参数数量会爆涨,不利于模型的深度的增加,计算量和存储量也大幅上升。
卷积核的尺寸越小,模型的参数数量越少,模型可以越深。
但是卷积核的尺寸太小,则只能看到图片的一个非常小的局部区域,获得的特征越差。
一种解决方案是:用多个小卷积层的堆叠来代替较大的卷积核。
假设大卷积核的宽度是 $ MathJax-Element-269 $ ,则每经过一层,输出的宽度减少了 $ MathJax-Element-265 $ 。假设希望通过 $ MathJax-Element-266 $ 个宽度为 $ MathJax-Element-267 $ 的小卷积核来代替,则为了保持输出的大小一致,需要满足:
$ k-1=n(k^\prime -1) $当 $ MathJax-Element-268 $ 时,即用尺寸为 3 的卷积核代替尺寸为 $ MathJax-Element-269 $ 的卷积核时,有: $ MathJax-Element-270 $
如:用 2 个
3x3
的卷积核来代替1个5x5
的卷积核。假设输入通道数为 $ MathJax-Element-329 $ ,输出通道数为 $ MathJax-Element-334 $ ,则
5x5
卷积核的参数数量为 $ MathJax-Element-273 $ ;而 2个
3x3
卷积核的参数数量为 $ MathJax-Element-274 $ ,是前者的 72% 。如果用 5 个
3x3
的卷积核来代替1个11x11
的卷积核,则替代后的卷积核的参数数量是替代前的 37% 。
用多个小卷积层的堆叠代替一个大卷积层的优点:
可以实现与大卷积层相同的感受野。
具有更大的非线性,网络表达能力更强。
虽然卷积是线性的,但是卷积层之后往往跟随一个
ReLU
激活函数。这使得多个小卷积层的堆叠注入了更大的非线性。具有更少的参数数量。
小卷积层堆叠的缺点是:加深了网络的深度,容易引发梯度消失等问题,从而使得网络的训练难度加大。
用多个小卷积层的堆叠代替一个大卷积层可以看作是一种正则化:要求大卷积核通过多个小卷积核进行分解(同时在小卷积层之间注入非线性)。
感受野:一个特定的
CNN
输出单元在输入空间所受影响的区域。上图中,染色的区域为某个输出单元的感受野。- 一个感受野可以用中心位置和大小来表示。
- 用多个小卷积核来代替大卷积核时,输出单元的感受野不会受到影响。
通常选择使用
3x3
卷积核的堆叠:1x1
的卷积核:它无法提升感受野,因此多个1x1
卷基层的堆叠无法实现大卷积层的感受野。2x2
的卷积核:如果希望输入的feature map
尺寸和输出的feature map
尺寸不变,则需要对输入执行非对称的padding
。此时有四种padding
方式,填充方式的选择又成了一个问题。3x3
的卷积核:可以提升感受野,对称性填充(不需要考虑填充方式),且尺寸足够小。
3.5 非对称卷积核
在卷积核分解过程中,还有一种分解方式:非对称卷积核分解,将
nxn
卷积替换为1xn
卷积和nx1
卷积。非对称卷积核的分解有以下优点:
感受野保持不变。
节省计算成本,尤其是当
n
较大时。假设输入通道数和输出通道数都为 $ MathJax-Element-277 $ ,原始卷积
nxn
的参数数量为: $ MathJax-Element-276 $ 。假设非对称卷积的
1xn
的输出通道数也是 $ MathJax-Element-277 $ ,则非对称分解时参数数量为: $ MathJax-Element-278 $ 。它是原始卷积的参数数量的 $ MathJax-Element-279 $ 。
在
Inception v2
论文中作者指出:对于较大的特征图 ,这种分解不能很好的工作;但是对于中等大小的特征图(尺寸在12~20
之间),这种分解效果非常好。因此非对称卷积分解通常用在较高的网络层。
3.6 多尺寸卷积核
图像中目标对象的大小可能差别很大。如下图所示,每张图像中狗占据区域都是不同的。
由于信息区域的巨大差异,为卷积操作选择合适的卷积核尺寸就非常困难。
- 信息分布更具有全局性的图像中,更倾向于使用较大的卷积核。如最最侧的图片所示。
- 信息分布更具有局部性的图像中,更倾向于使用较小的卷积核。如最右侧的图片所示。
一个解决方案是:分别使用多个不同尺寸的卷积核从而获得不同尺度的特征。然后将这些特征拼接起来。
在
Inception
系列的网络中,大量使用这种思想。在最初版本的
Inception
结构中,一个输入图片会分别同时经过1x1,3x3,5x5
的卷积核的处理;得到的特征再组合起来。通过多种尺度的卷积核,无论感兴趣的信息区域尺寸多大,总有一种尺度的卷积核与之匹配。这样总可以提取到合适的特征。
多尺寸卷积核存在一个严重的问题:参数数量比单尺寸卷积核要多很多,这就使得计算量和存储量都大幅增长。
3.7 1x1 卷积核
1x1
卷积并不是复制输入,它会进行跨通道的卷积。它有三个作用:实现跨通道的信息整合。
进行通道数的升维和降维。
在不损失分辨率的前提下(即:
feature map
尺寸不变),大幅增加非线性。事实上
1x1
卷积本身是通道的线性组合,但是通常会在1x1
卷积之后跟随一个ReLU
激活函数。
假设输入张量为 $ MathJax-Element-325 $ ,即: $ MathJax-Element-329 $ 个通道、宽度为 $ MathJax-Element-327 $ 、高度为 $ MathJax-Element-328 $ 。
如果图片直接通过一个宽度为 $ MathJax-Element-284 $ ,高度为 $ MathJax-Element-285 $ 、输出通道为 $ MathJax-Element-334 $ 的卷积层,则参数数量为:
$ C_I\times C_O\times W_K\times H_K $如果图片先通过一个
1x1
、输出通道为 $ MathJax-Element-291 $ 的卷积层,再经过一个 $ MathJax-Element-333 $ 、输出通道为 $ MathJax-Element-291 $ 的卷积层;最后经过一个1x1
、输出通道为 $ MathJax-Element-334 $ 的卷积层。这里中间卷积层的输出通道不一定为 $ MathJax-Element-291 $ ,但是一定是一个比 $ MathJax-Element-334 $ 小的数。其作用是起到了信息压缩的作用(类似于
PCA
降维)。则参数数量为:
$ C_I\times1\times 1 \times \sqrt{C_O}+\sqrt{C_O}\times W_K\times H_K\times \sqrt{C_O}+\sqrt{C_O}\times1\times 1\times C_O\\ =C_I\sqrt{C_O}+W_KH_KC_O+C_O^{3/2} $当 $ MathJax-Element-293 $ 时(输入通道数与输出通道数接近), $ MathJax-Element-294 $ ,以及 $ MathJax-Element-295 $ 。
则二者参数的数量比例为: $ MathJax-Element-296 $ 。因此后者的参数数量远远小于前者。
1x1
卷积层通常会形成瓶颈层bottleneck layer
。瓶颈层指的是网络中信息被压缩的层。输入
$ \mathbf P = \begin{bmatrix} P_{1,1}&P_{1,2}&\cdots&P_{1,n}\\ P_{2,1}&P_{2,2}&\cdots&P_{2,n}\\ \vdots&\vdots&\ddots&\vdots\\ P_{N,1}&P_{N,2}&\cdots&P_{N,n}\\ \end{bmatrix} $feature map
中每个元素值代表某个特征,将所有图片在该feature map
上的取值扩成为矩阵:其中 $ MathJax-Element-297 $ 为样本的数量, $ MathJax-Element-298 $ 。即:行索引代表样本,列索引代表特征。所有特征由
feature map
展平成一维得到。通常 $ MathJax-Element-299 $ ,则输入矩阵 $ MathJax-Element-324 $ 的秩 $ MathJax-Element-301 $ 。假设输入矩阵 $ MathJax-Element-324 $ 的秩为 $ MathJax-Element-314 $ 。
不考虑
$ \mathbf P^* = \begin{bmatrix} P^*_{1,1}&P^*_{1,2}&\cdots&P^*_{1,n^*}\\ P^*_{2,1}&P^*_{2,2}&\cdots&P^*_{2,n^*}\\ \vdots&\vdots&\ddots&\vdots\\ P^*_{N,1}&P^*_{N,2}&\cdots&P^*_{N,n^*}\\ \end{bmatrix} $1x1
卷积的非线性层,则1x1
卷积是输入特征的线性组合。输出featuremap
以矩阵描述为:其中 $ MathJax-Element-304 $ 。
信息膨胀过程:当 $ MathJax-Element-305 $ 时, $ MathJax-Element-323 $ 的容量要大于 $ MathJax-Element-324 $ 的信息,因此所有的有效信息都可以得到保留。
信息压缩过程:当 $ MathJax-Element-308 $ 时, $ MathJax-Element-323 $ 的容量要小于 $ MathJax-Element-324 $ 的信息,这时需要参考 $ MathJax-Element-324 $ 的有效信息。
$ MathJax-Element-324 $ 的有效信息由矩阵 $ MathJax-Element-324 $ 的秩 $ MathJax-Element-314 $ 决定。
当矩阵 $ MathJax-Element-324 $ 是满秩时,即: $ MathJax-Element-316 $ ,此时对 $ MathJax-Element-324 $ 的任何压缩都会丢失有效信息。
当矩阵 $ MathJax-Element-324 $ 不是满秩时:
- 当 $ MathJax-Element-322 $ 非常小时, $ MathJax-Element-323 $ 的容量要小于 $ MathJax-Element-324 $ 的有效信息,此时会导致有效信息丢失。
- 当 $ MathJax-Element-322 $ 较大时, $ MathJax-Element-323 $ 的容量要大于等于 $ MathJax-Element-324 $ 的有效信息,此时不会丢失有效信息。这是
1x1
卷积相当于线性降维。
在前文提到的例子(示意图如下所示)中,输入
feature map
先经过1x1
卷积的压缩,这会导致该段信息容量的下降;然后经过常规卷积,此段信息容量不变;最后经过1x1
卷积的膨胀,恢复了信息容量。整体而言模型的信息容量很像一个
bottleneck
,因此1x1
卷积层也被称作瓶颈层。
事实上,不仅
1x1
卷积层会形成bottleneck
,任何会降低模型信息容量的层都会形成瓶颈。因此在卷积神经网络中,通常每经过一个卷积层,输出尺寸减半、输出通道数翻倍。
瓶颈层中的信息膨胀阶段不是必须存在,通常信息膨胀过程是为了保持整个瓶颈层的输入尺寸、输出尺寸满足某些约束。如:输出尺寸等于输入尺寸。
3.8 DepthWise 卷积
标准的卷积会考虑所有的输入通道,而
DepthWise
卷积会针对每一个输入通道进行卷积操作,然后接一个1x1
的跨通道卷积操作。DepthWise
卷积与分组卷积的区别在于:分组卷积是一种通道分组的方式,它改变的是对输入的
feature map
处理的方式。Depthwise
卷积是一种卷积的方式,它改变的是卷积的形式。Depthwise
分组卷积结合了两者:首先沿着通道进行分组,然后每个分组执行DepthWise
卷积。
假设输入张量为 $ MathJax-Element-325 $ ,即: $ MathJax-Element-329 $ 个通道、宽度为 $ MathJax-Element-327 $ 、高度为 $ MathJax-Element-328 $ 。
假设使用标准卷积,输入通道的数量为 $ MathJax-Element-329 $ ,输出通道的数量为 $ MathJax-Element-334 $ ,卷积核的尺寸为 $ MathJax-Element-333 $ 。则需要的参数数量为 $ MathJax-Element-332 $ 。
使用
Depthwise
卷积时,图像的每个通道先通过一个 $ MathJax-Element-333 $ 的deptpwise
卷积层,再经过一个1x1
、输出通道为 $ MathJax-Element-334 $ 的卷积层。参数数量为:
$ C_I\times W_K\times H_K+C_I\times 1\times 1\times C_O=W_KH_KC_I+C_IC_O $其参数数量是标准卷积的 $ MathJax-Element-335 $ 。因此
depthwise
卷积的参数数量远远小于标准卷积。
DepthWise
卷积有几种变形的形式:- 只有对每个输入通道执行单通道卷积,没有后续的
1x1
的跨通道卷积。 - 对输入通道执行单通道卷积的结果执行
BN
和ReLU
,再后接1x1
的跨通道卷积。这会引入更多的非线性。
- 只有对每个输入通道执行单通道卷积,没有后续的
3.9 通道混洗分组卷积
在分组卷积中,特征的通道被平均分配到不同的分组中。如果融合的时刻非常靠后,则对模型的泛化性相当不利,因为如果能在早期知道其它通道的一些信息,则很可能得到更有效的特征。
通道混洗分组卷积在每一次分组卷积之后执行一次通道混洗,被混洗过的通道被分配到不同的分组中。
经过通道混洗之后,每个分组输出的特征能够考虑到更多的通道,因此输出特征的表达能力更强。
在
ShuffleNet
中,大量运用了这种通道混洗分组卷积。在
AlexNet
的分组卷积中,执行的是标准卷积操作。在
ShuffleNet
中,分组卷积执行的是deptiwise
卷积,从而使得参数更少。
3.10 通道加权卷积
在常规卷积中,各通道产生的特征都是不分权重直接结合的。通道加权卷积中,不同的通道具有不同的权重,各通道产生的特征经过加权之后再结合。
所用到的权重是输入的函数。
注意:因为卷积是线性过程,因此卷积计算的通道加权等价于对输入的
feature map
的通道加权。SEnet
(Squeeze-and-Excitation Networks
)网络大量使用通道加权卷积。在SEnet
中存在三个关键的操作:Squeeze
操作:沿着空间维度压缩特征,将每个二维的feature map
通道压缩成一个实数。该实数具有全局的感受野,表征了在该
feature map
通道上响应的全局分布。Excitation
操作:通过一个类似循环神经网络中的门机制,用一个sigmoid
激活函数的全连接层获取每个feature map
通道的权重。实际上,
Excitation
操作使用了两个全连接层来获取通道权重。Reweight
操作:将特征通道的权重通过乘法逐通道的加权到先前的feature map
上。
3.11 空洞卷积
在图像分割任务,图像输入到传统卷积层,然后再输入到池化层。由于图像分割是逐像素的输出,因此需要将池化层的输出(一个较小的尺寸)升采样(一般使用反卷积操作)到原始的图像尺寸来进行预测。
但是这里有几个问题:
- 升采样(如:线性插值) 是确定性的映射,无法学习(也没有参数要学习)。
- 在这个图像的先减少尺寸、再增大尺寸过程中,有一些信息损失。
- 小物体信息无法重建。假设有 4个池化层,每个池化层的尺寸为2、步长为2,理论上任何小于 $ MathJax-Element-336 $ 个像素的物体信息将无法被重建。
解决方案是空洞卷积。
空洞卷积:对于空洞数为 $ MathJax-Element-374 $ 的空洞卷积,卷积结果为:
$ \mathbf S(i,j)=\sum_m\sum_n\mathbf I(i+m(d+1)+1,j+n(d+1)+1)\mathbf K(m,n) $它实际上等价于一个卷积核为 $ MathJax-Element-338 $ 的新的卷积核,其中 $ MathJax-Element-339 $ 为当前卷积核的大小。新的卷积核的特点是:每隔 $ MathJax-Element-374 $ 个位置,权重非零;否则权重为零。另外首行、首列、尾行、尾列权重均为零。
$ MathJax-Element-341 $ 称作膨胀比
dilation rate
。空洞卷积的优点:在不做池化损失信息的情况下,加大感受野,让每个卷积的输出都包含较大范围的信息。
在图像需要全局信息,或者语音、文本需要较长序列信息的问题中,空洞卷积都能很好的应用。
空洞卷积的缺点:
网格效应(
Gridding Effect
)。如果仅仅多次叠加多个dilation rate=2
的3x3
的卷积核时,会发现:并不是所有的输入像素都得到计算,也就是卷积核不连续。这对于逐像素的预测任务来说,是致命的问题。
长距离信息可能与任务无关。采用空洞卷积可能对大物体的分割有效果,但是对于小物体的分割可能没有好处。
如何同时处理不同大小的物体,则是设计好空洞卷积网络的关键。
为了解决空洞卷积的缺点,人们提出了一种混合空洞卷积的结构(
Hybrid Dilated Convolution:HDC
) 。该结构有三个特性:
叠加的空洞卷积的
dilation rate
不能有大于1的公约数。这是为了对抗网格效应。如:
[2,4,6]
不是一个好的三层空洞卷积,因为会出现网格效应。将
dilation rate
设计成锯齿状结构。这是为了同时满足小物体、大物体的分割要求。如
[1,2,5,1,2,5]
的循环结构。最后一层的空洞卷积的
dilation rate
最大,且dilation rate
小于等于卷积核的大小。这也是为了对抗网格效应。
下面是一组
dilation rate
分别为[1,2,5]
的卷积核,卷积核的尺寸为3x3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论