摘要
本文从网络的初始化和优化上下手,提出一种不是改变权值,而是选择权值的方法。作者发现,只需要给每层连接提供少量选择,如8个,便可取得十分具有竞争力的结果,而且再微调这些权值组合后,便可超过baseline
方法
架构
本文方法大致流程分三步。第一步是初始化权值,但是相比于传统方法只给每两个节点之间分配一个权值,本文的方法会给每两个节点之间分配K个权值;第二步前向传播,和传统方法基本一致,而权值的选择是根据每个权值的学习分数;第三步,更新每个权值的分数,不论是否在前向传播中使用,但不更新改变任何一个具体的权值。之后重复第二,三步。
权值选择
如上文所述,前向传播中要对于每个连接,从K个权值中选择一个权值,本文利用的是一个函数p,输入K个数后,K会返回一个位于1到K之间的下标。本文提出了两种p,一个是选出分数值最大的,被称为贪婪选择(Greedy Selection, GS),另一种是多项式分布,p~Mult(s1,s2...sK),s为权值的分数,Mult为多项式分布。(这里没懂,服从分布怎么就能返回一个整数下标了?)这种方法称为概率采样(Probabilistic Sampling, PS)。
反向传播
在反向传播阶段,每一对节点之间的连接的更新,都直接利用最后一层的损失函数,因为p的梯度在任何一对节点之间几乎都为0。针对每个权值,更新的公式为
而其中,sijk为j节点连到i节点的第k个权值的分数,α为学习速率,倒置的Δ的计算公式如下
L为损失函数。i在第l层,j在第l-1层,h(x)j即为j的激活后的输出,Wijk为j节点连到i节点的第k个权值。a(x)i为第i层的pre-activation,与之对应的是传统的post-activation,传统的方法是计算出连接之后,即计算完卷积之后,再输入到BN和激活函数中,而pre-activation是先输入到激活函数,再计算卷积。而这里的a(x)i就是第一次激活后,还未算卷积的输出。
实验
作者的目的是探究随机初始化权值的网络能否取得良好的性能,所以第一个实验和未训练过的网络进行了对比,因为本文网络训练了200个epochs,所以毫不意外的碾压式胜利
之后,作者对比了用传统方法训练的网络,本文网络取得了十分相当的表现,部分情况还超过了传统网络。而且横轴是K的选取,可以发现,当K太多时,网络性能反而会下降。
作者还对比了进行相同计算量时网络性能的对比。个人感觉是作者以为本文的方法能节约计算量(因为看摘要时我也是这么想的。。。),结果尬尴的是两者不相上下,而且本文方法在大部分时间其实还弱于传统方法。估计原因是计算更新分数还是太耗费计算量了
在训练效率上打不过,作者便探索如何进一步提高网络性能。作者发现,将训练过的网络进行微调后,可以打过传统方法。下图中,横轴是计算量,纵轴是准确率,红色为传统方法,绿色为未微调的本文方法,蓝色未微调后的本文方法,可见,相同计算量时,微调可以提高本文模型性能。
作者还对比了进行不同个训练epochs后,再进行微调的模型的性能
最后,作者对比了两种权值选择策略,第一个图显示了网络变化幅度,用贪婪选择的网络能更快地确定参数,快速减少每一次训练的权值改变数量。第二张图对比了性能,GS全面优于PS。