深度自适应增量学习(Incremental Learning Through Deep Adaptation)
翻译论文:Incremental Learning Through Deep Adaptation
代码:https://github.com/rosenfeldamir/incremental_learning
该方法取得2017 cvpr Visual Decathlon Challenge 竞赛冠军
注:翻译中可能存在用词不准的情况,如有发现,欢迎留言
##摘要:
\quad鉴于现有的训练过的神经网络,通常需要学习新的能力而不妨碍已经学过的人的表现。现有的方法要么学习次优解决方案,需要联合培训,要么大大增加每个添加域的参数数量,通常与原始网络一样多。我们提出了一种称为深度适应网络(DAN)的方法,将新学习的过滤器限制为现有过滤器的线性组合。 DAN在原始域中精确地保持性能,与标准微调程序相比,需要一小部分(通常取决于网络体系结构的13%)参数数量,并且在较少的培训周期内收敛到相当或更好的性能水平。当与标准网络量化技术结合使用时,我们将参数成本进一步降低到原来的3%左右,精度可以忽略不计或没有损失。可以控制学习的体系结构以在各种学习表示之间切换,从而使单个网络能够解决来自多个不同领域的任务。我们进行了广泛的实验,展示了我们的方法在一系列图像分类任务中的有效性,并探索了其行为的不同方面。
##1.引言
\quad尽管深度神经网络在图像分类[1],语义分割[2],目标检测[3],语音识别[4]医学图像分析[5]等等各个领域继续显示出显着的性能增益,仍然是这样的情况,通常情况下,需要为每个新任务训练单独的模型。给定两种完全不同的形式或性质的任务,例如预测单词序列中的下一个单词与预测图像中某个对象的类别,理所当然的是每个都需要不同的体系结构或计算。一个更受限制的情景 - 我们打算在这项工作中处理的一个情景 - 是学习一个能够在多个相关领域运行良好的表示。这种情况最近由Rebuffi等人提出。 [6]作为多领域学习(MDL),将其置于多任务学习之外,即在同一个领域执行不同的任务。 MDL的一个例子是图像分类,其中图像可能属于不同的领域,例如绘图,自然图像等。在这样的设置中,期望解决方案可以自然地会:
1)利用相同的计算流水线
2)要求每个添加域的所需参数数量适度增加
3)保留已学习数据集的性能(避免“灾难性遗忘”)
4)逐步学习,放弃对联合训练的要求,例如在先前学过的任务的训练数据不再可用的情况下。
\quad我们的目标是让网络在遵守上述要求的同时逐一学习一系列相关任务。我们这样做是通过增加一个已经学习过另一个任务的控制器模块学习新的任务。控制器模块的参数经过优化,以最大限度地减少新任务的损失。在这个阶段不需要原始任务的训练数据。原始任务数据上的网络输出保持原样;任何数量的控制器模块可以被添加到每一层,使得单个网络可以同时编码多个不同的域,其中从一个域到另一个域的转换可以通过设置二进制交换变量或自动控制来完成。由此产生的架构是DAN,表示深度自适应网络。我们证明了我们的方法在最近推出的Visual Decathlon Challenge [6]上的有效性,它的任务是生成一个分类器,以在十个不同的图像分类数据集上运行良好。虽然每个新学到的任务只增加13%的原始参数数量(具体数量取决于网络架构),但平均性能超过了微调所有参数的平均性能 - 没有加倍参数数量的负面影响和灾难性遗忘。在这项工作中,我们专注于各种数据集中的图像分类,因此在我们的实验中,“任务”一词是指特定的数据集/域。所提出的方法可扩展到多任务学习,例如执行图像分割和分类的单个网络,但本文不讨论这一点。
\quad我们的主要贡献在于引入了一种改进的传输学习方法,这种方法与微调所有网络参数以实现新任务一样有效,能够精确保留旧任务性能,需要一部分(网络相关,通常为13%)在新权重方面的成本的分数,并且能够在任何数量的学习任务之间切换。 实验结果验证了该方法对各种图像分类数据集的适用性。
\quad我们介绍了该方法的两个变体,一个完全参数化的版本,其优点如上所述,一个参数少得多,对于可比数目的参数显着地执行浅传递学习(即特征提取)。 在下一节中,我们将回顾一些相关的工作。 第3节详细介绍了所提出的方法。 在第4节中,我们展示了各种实验,包括与相关方法的比较,以及探索如何使我们的方法更有效的各种策略,随后进行了一些讨论和总结发言。
##2.相关工作
###2.1 多任务学习
\quad在多任务学习中,目标是训练一个网络同时在同一个输入上执行多个任务。这通常通过对所有任务进行联合训练来完成。这样的训练是有利的,因为单个表示被用于所有任务。另外,据说多重损失是另一个正规化者。一些例子包括面部标志定位[7],语义分割[8],3D推理[9],对象和零件检测[10]等。虽然所有这些学习在同一数据集上执行不同的任务,但最近的工作[11]探索了单个网络在各种图像分类数据集上执行任务的能力。我们还旨在对来自多个数据集的图像进行分类,但我们建议以逐一学习而非共同学习的方式进行。与我们的方法相一致的是[6]中介绍的数据集特定的附加残差单元。我们与第4节中的这项工作进行了比较。我们的工作与[12]有些相似,其中两个网络共同训练,附加的“cross-stitch”单元允许来自一个网络的每一层具有输出的附加输入线性组合从另一个下层。但是,我们的方法不需要联合培训,并且需要的参数显着减少。
###2.2 增量学习
\quad向神经网络添加新的能力常常导致所谓的“灾难性遗忘”[13],阻碍了网络工作在旧任务中表现良好的能力。解决这个问题最简单的方法是固定网络的所有参数,并使用其倒数第二层作为特征提取器,然后可以训练分类器[14],[15]。虽然保证不改变旧的性能,但观察到的结果大大低于对整个架构进行微调[3]。 Li和Hoiem [16]的工作提供了这种方法几种变体的简洁分类。另外,他们提出了一种微调整个网络的机制,同时通过引入一个损失函数来保证旧任务的性能,该函数鼓励旧特征的输出在新引入的数据上保持不变。虽然他们的方法为每个新任务添加了非常少量的参数,但并不能保证该模型在旧任务中保留其全部功能。 Rusu等人[17]显示新的表示可以与旧的表示一起添加,同时保持旧的任务性能不受影响。但是,这需要为每个添加的任务复制原始网络的参数数量。在Kirkpatrick等人[18]如果发现它们对于旧任务很重要,则神经元的学习率降低。我们的方法完全保留了旧的表示,同时导致每个添加任务的参数数量适度增加。最近,Sarwar等人[19]提出通过分享早期层次的子集和分裂后期层次来逐步培训网络。通过构建,他们的方法也保留了旧的表示。然而,正如他们的实验所显示的,重新学习新网络分支的参数,无论是用类似的分布随机初始化还是仅仅复制旧分支,都会导致比没有任何网络共享的学习更糟的性能。我们的方法在重新利用现有权重的同时,获得的结果平均好于简单的转移学习或从零开始学习。
###2.3 网络压缩
\quad多篇关于减少神经网络的数量权重的文章已经发表[20],[21],增加加速[22]或避免过度拟合[23],使用编码, 量化,修剪和张量分解。 这些方法可以与我们的方法结合使用,以进一步改善结果,如我们在第4节中所示。
##3.方法
\quad我们从一些符号开始。让T 成为一些需要学习的任务。具体而言,我们使用深度卷积神经网络(DCNN)去学习图像分类解决T 这个图像分类任务。当代大多数DCNN都遵循一个共同的结构:对于每一个输入 xix_{i}xi,DCNN通过让输入在一组中 lll 个层 ϕi\phi _{i}ϕi,i∈1...li\in 1...li∈1...l 之间用交错的非线性传递来计算输入的表示形式。网络的初始(较低)层是计算块,例如:在更新的结构中与可选的残差单元进行卷积[24]。我们的方法同样适用于有或没有残差连接的网络。至少有一个全连接层 fif_{i}fi,i∈1...ci\in 1...ci∈1...c 被附加到最后一个卷积层的输出。设 ΦFN=σ(ϕl)∘...σ(ϕ2)∘σ(ϕ1)\Phi _{FN}=\sigma(\phi _{l})\circ ...\sigma(\phi _{2})\circ\sigma(\phi _{1})ΦFN=σ(ϕl)∘...σ(ϕ2)∘σ(ϕ1) 是网络N 的所有卷积层的组成,由非线性交织。我们使用一种结构,所有的非线性σ都是相同的函数,没有可调参数。用ΦFN(x)\Phi _{FN}(x)ΦFN(x)表示网络N 的特征部分。类似的 ΦCN=fc∘...σ(f2)∘σ(f1)\Phi _{CN}=f _{c}\circ ...\sigma(f_{2})\circ\sigma(f _{1})ΦCN=fc∘...σ(f2)∘σ(f1) 表示N 的分类器部分,即N 的所有全连接层。然后N 被简单的定义为:N(x)=ΦCN∘ΦFN(x)(1)N(x)=\Phi _{CN}\circ\Phi _{FN}(x)\quad\quad(1)N(x)=ΦCN∘ΦFN(x)(1)为简洁起见,我们没有在上述符号中指定批量规范化层。如果网络是完全卷积的,可以放弃ΦCN\Phi _{CN}ΦCN项[2]。
###3.1 调整表示
\quad假设我们有两个任务 T1T_{1}T1 和 T2T_{2}T2 需要学习,并且我们已经学习了一个基础网络 NNN 来解决T1T_{1}T1。 我们假设T2T_{2}T2的一个很好的解决方案可以通过与NNN具有相同架构但具有不同参数的网络来获得。 我们增加NNN,以便它能够通过将控制器模块附加到其每个卷积层来解决T2T_{2}T2。 每个控制器模块使用 NNN 的相应层的现有权重来创建适用于新任务T2T_{2}T2的新卷积滤波器:对于NNN中的每个卷积层ϕl\phi_{l}ϕl,令Fl∈RC0×Ci×k×kF_{l}\in R^{C_{0}\times C_{i}\times k\times k}Fl∈RC0×Ci×k×k为该组的滤波器层,其中C0C_{0}C0是输出特征的数量,C1C_{1}C1是输入的数量,并且$ k\times k是内核大小(假设是方形内核)。由是内核大小(假设是方形内核)。 由是内核大小(假设是方形内核)。由b_{l}\in R^{C}表示偏差。用表示偏差。 用表示偏差。用F_{l}\in R^{C_{0}\times D}表示其行是表示其行是表示其行是F_{l}的滤波器平坦版本(原文为flattenedversion)的矩阵,其中的滤波器平坦版本(原文为flattened version )的矩阵,其中的滤波器平坦版本(原文为flattenedversion)的矩阵,其中D= C_{i}\times k\times k;令; 令;令f\in R^{C_{i}\times k\times k}是一个来自是一个来自是一个来自F_{l}的滤波器,其值为:的滤波器,其值为:的滤波器,其值为:$f^{1}=
,\cdots ,f^{i}=
\quad\quad(2) $KaTeX parse error: Can't use function '$' in math mode at position 2: f$̲的平坦版本(flattened…\widetilde{f}=(f_{11}{1},\cdots,f_{kk}{1},\cdots ,\cdots f_{11}^{i},\cdots ,f_{kk}^{i})\in R^{D}\quad\quad(3)KaTeX parse error: Can't use function '$' in math mode at position 22: …flattening”)行向量$̲\widetilde{f}$将…\widetilde{F_{l}^{a}}=W_{l}\cdot \widetilde{F_{l}}\quad\quad(4)KaTeX parse error: Can't use function '$' in math mode at position 4: 其中 $̲W_{l}\in R^{C_{…F_{l}^{a}=W_{l}\otimes F_{l}\quad\quad(5)KaTeX parse error: Can't use function '$' in math mode at position 26: …,我们实例化一个新的权重向量 $̲b_{l}^{a}$ 代替原来…x_{l+1}=\left [ \alpha (W_{l}\otimes F_{l})+(1-\alpha)F_{l} \right ]\ast x_{l}+\alpha b_{l}^{a}+(1-\alpha)b_{l}\quad\quad(6)KaTeX parse error: Can't use function '$' in math mode at position 47: …,这些行为是为新任务学习的。 $̲\quad$为了允许网络执行多…x_{l+1}=\sum_{n}^{i=1}\alpha {i}(F{l}^{a_{i}}\ast x_{l}+b_{l}^{i})KaTeX parse error: Can't use function '$' in math mode at position 3: 其中$̲F_{l}^{a_{i}}$,…y_{i}=F(x_{i};W_{i}+x_{i}\quad\quad(7)KaTeX parse error: Can't use function '$' in math mode at position 4: 其中 $̲x_{i}$ 是该层的输入,$…v=
会完美匹配这个切片。另一方面,可以第一层的9个滤波器设置为delta函数,滤波器分别为会完美匹配这个切片。 另一方面,可以第一层的9个滤波器设置为delta函数,滤波器分别为会完美匹配这个切片。另一方面,可以第一层的9个滤波器设置为delta函数,滤波器分别为
,
,\cdots,
$$。这些过滤器涵盖了所有可能的 3x3 切片,因此它们不会影响表达。 然而,保持第一层固定,第二层需要创建一个过滤器来匹配 ppp ,而 vvv 直接表达了这一点。
####3.3.3 小样本集(Toy Dataset)
\quad 为了进一步展示上述限制,我们构建了一个小样本分类任务。我们首先描述数据集和实验,然后讨论结果。
\quad 任务是:给定一个尺寸为28x28x3的输入图像,预测图像中条的长度。在此数据集中,图像被限制为长度为 3⋅k3\cdot k3⋅k的1像素宽度条,其中在空白背景上 k∈{3,4,5,6,7}k\in \{3,4,5,6,7\}k∈{3,4,5,6,7},并且类是条的相应长度。条的长度被设置为3的增量,因为较小的条导致网络难以学习,这可能是最大化操作造成的。
\quad 数据集由1000个例子组成,其中训练、测试集的划分为75%/ 25%。我们测试的网络故意非常简单:第一层包含一个5x5滤波器,第二层包含20个滤波器,接下来是两个全连接层,分别为320x50和50x5。
\quad 我们创建了这个数据集的3个变体,以测试它的不同传输学习场景。数据集变体是(1)仅红色水平条,(2)仅红色竖条(被称为“转置”)和(3)仅绿色水平条(被称为“新通道”)。请注意,我们限制了我们的方法仅在第一层操作,在这种情况下归结为将滤波器的输出乘以标量并学习新的偏差。
\quad 在所有情况下,该网络使用Adam [26]优化器(SGD在这种情况下不会收敛)训练了50次。我们测试了七个场景。这些涉及数据集中图像的不同组合,第一层的初始化以及优化程序可能会修改或不可修改哪些层。
•原始:水平数据集,第一个过滤器固定到水平绿色栏,学习其他层
•原创+学习:水平数据集,学习所有层
•转置:转置数据集,第一个过滤器固定到一个水平栏,学习其他层
•频道切换:新频道数据集,第一个过滤器固定到水平绿色栏,学习其他层
•通道切换+噪声:新通道数据集,第一个滤波器固定为水平绿色条+高斯噪声,学习其他层
•频道切换+干净启动:新频道数据集,学习所有层
•频道切换+学习:新频道数据集,首先将过滤器初始化为水平绿色栏,了解所有层。
每个实验重复20次以解释可变性。我们绘制了50次训练在验证集上的平均准确度。
图4\quad 演示小样本示例中可能方法的不同可能限制。从第一层包含从正交子空间的特征到任务所需特征的网络传输可能会导致机会的准确性。详情请参阅文字。
\quad 图4总结了这些实验的结果。左侧的子图显示了50次训练的平均表现,右侧显示了每种情景下获得的最大(20次试验)。这些表明,在大多数情况下,我们可以达到很好的准确性,但是在平均情况下,获得的性能之间存在巨大差异,尽管这是一个非常简单的数据集。第一层固定的原始场景达到100%的准确性。将通道从绿色切换到红色(“通道切换”),但保持第一个滤波器的固定结果的机会准确性,例外:纯粹“绿色”滤波器的线性组合不能代表来自红色通道的信息。在这种情况下,如果我们允许学习所有层(“信道切换+学习”),网络的确可以最终收敛到一个很好的精度(图4(b)),但20次试验的平均性能远不及最优(图4(a)) - 网络收敛到约50%的准确度(机会表现为20%)。这证实,即使对于非常简单的情况,错误的初始化也可能对训练过程不利。
\quad 平作为一项“健全测试”,我们确保随机初始化网络并允许在“频道切换”案例中学习所有层次,从而实现100%的性能(在平均和最好的情况下)。这确实是这种情况(“通道切换+干净启动”),尽管我们看到随机初始化首先收敛的速度比“原始”的已知初始化要慢得多。接下来,我们将网络初始化为“原始”,但使用“频道切换”数据集。但是,我们将随机噪声添加到第一层滤波器,然后保持固定(“通道切换+噪声”)。由于初始滤波器不与绿色通道正交,优化能够在平均和最佳情况下从初始化中恢复。
\quad “原始+学习”初始化为“原始”,但允许修改第一层。平均而言,它最初的收敛速度比“原始”情景慢,平均而言,它表现更好。
\quad 最后,将原始滤波器固定为与所需形状(水平条)正交的“转置”情况下,性能平均降低,在最佳情况下接近100%。请注意,虽然我们无法通过线性变换垂直线条来生成水平条形,但由于其卷积性质,信息不会丢失并且可以由第二层的滤波器恢复。这是通过对具有适当系数的水平滤波器的移位响应的加权总和来完成的。这是降低网络“效率”的一个例子,即委托到第一层可以完成的第二层计算。
\quad 总而言之,我们从这个小数据集上的实验得出以下结论:
1)使用强领域特定知识设置一些网络权重并修正它们的值,只学习其他层可以导致快速收敛的强解决方案。
2)如果所有图层都是随机初始化的,然后允许更新,即使收敛速度会变慢,也会出现更强的解决方案。
3)将某些权重初始化为“坏”值可能会导致平均值显着低于前两种情况,偶尔但很少出现性能良好的情况。
4)将一些权重初始化为“坏”值,修正它们,并学习其余的权重将完全无法挽回地阻止网络的学习。
\quad 在下一节中,我们将测试我们的方法,使用更丰富,更多样化的数据集,更少的退化网络(例如,第一层中的多个过滤器),以及在某些情况下残差网络,这些网络都可能会减少人工示例。
##4 真实数据集上的实验
\quad 我们进行了几次实验来测试我们的方法并探索其行为的不同方面。实验部分分为两部分,第一部分是更具探索性的部分,第二部分是针对近期多任务学习基准的结果。我们使用两种不同的基本网络结构,分别针对各个部分的两个(有些重叠的)分类基准集。第一个是VGG-B [25]。我们首先列出我们使用的数据集(4.0.1),然后通过使用几个初始网络为每个数据集训练一个单独的模型来建立基线。我们继续测试我们提出的方法的几个变体(4.1)以及测试不同的训练方案。接下来,我们讨论如何预测网络作为基础网络的性能(4.3)。我们展示如何辨别输入图像的域,并输出适当的分类(4.3.1),而无需手动选择控制参数 α\alphaα。在第二部分实验中,我们展示了如何使用我们的方法在Visual Decathlon挑战赛中取得领先分数[6],并使用不同的更新的结构。在总结之前,我们将展示我们方法的一些有用特性。
\quad 所有实验均使用PyTorch框架使用单个Titan-X Pascal GPU执行。
####4.0.1 数据集和评估
\quad 我们的评估协议的第一部分类似于[11]:我们在以下数据集上测试我们的方法:Caltech-256 [27], CIFAR-10 [28], Daimler [29] (DPed), GTSR [30],Omniglot [31], Plankton imagery data [32] (Plnk), HumanSketch dataset [33] 和 SVHN [34]。 所有图像都调整为64×64像素,复制灰度图像以使它们具有RGB通道的3个通道。 我们通过减去平均像素值并除以每个通道的方差来美白所有图像。 这是分别为每个数据集完成的。 我们选择80%用于训练,20%用于未提供固定分组的数据集中进行验证。 我们使用[25]中描述的B结构,此后称为VGG-B。 在从零开始训练时,它在各种数据集上表现相当好(请参见表1)。请参阅[11]以获取每个数据集的简要说明。
\quad 作为基准,我们在8个数据集的每一个上独立地训练网络。 这部分的所有实验都是用Adam优化器[26]完成的,初始学习率为1e-3或1e-4,这取决于每个数据集的几个试验时期。 学习率在每10个迭代后减半。 大多数网络工程在前10-20个迭代后收敛,之后几乎可以忽略不计。 我们选择Adam作为这部分的原因在于其对于非自适应优化方法(例如SGD)的快速初始收敛,代价是可能较低的最终准确度[35]。 表1中汇总了top-1(%)。
表1\quadPerf:针对几种基线和我们方法的几种变体,各种数据集和参数成本(#par.,越低越好)的top-1准确率(%,越高越好)。 第1,2行:独立基准表现。 VGG-B:VGG [25]结构B。(S) - 从头开始培训。 § - 在ImageNet上预先训练好。 第3-7行:(我们的)控制器网络性能; 在大多数数据集上,DANsketchDAN_{sketch}DANsketch 作为基础网络胜过DANcaltech−256DAN_{caltech-256}DANcaltech−256。 基于随机权重的控制器网络(DANnoiseDAN_{noise}DANnoise)工作得很好,因为其学习参数的数量是其他方法的五分之一。 DANimagenetDAN_{imagenet}DANimagenet:控制器网络从在ImageNet上预训练的VGG-B模型初始化而来。 DANimagenet+sketchDAN_{imagenet + sketch}DANimagenet+sketch:基于VGG-B§&Sketch的选择性控制网络。 我们对每列中的第一(红色),第二(绿色)和第三(蓝色)个最高值进行颜色编码(#par的最低值)。 #par:为了实现所有任务的所述性能而划分的权重的分摊数量除以所处理任务的数量(越低越好)。
###4.1 控制器网络
\quad为了测试我们的方法,我们依次在8个数据集的每一个上训练了一个网络,作为所有其他网络的基础网络。我们将这与每个数据集从头开始(VGG-B(S))或预训练(VGG-B§)网络的训练基线进行比较。表1总结了两个代表性基础网络的所有数据集的性能:DANcaltech−256DAN_{caltech-256}DANcaltech−256(79.9%)和DANsketchDAN_{sketch}DANsketch(83.7%)。其他基准网络的平均性能如图5(a)所示。每个设置的参数成本(3.2.3)在表格的最后一栏中报告。这与[6]类似,是一组完全参数化网络标准化的一组任务所需的参数总数。我们还检查了网络在充分训练后能够作为基础网络执行的程度,例如:DANimagenetDAN_{imagenet}DANimagenet是基于ImageNet上预训练的VGG-B,这使得平均性能提高了很多(83.7%至86.5%),在Caltech-256上我们看到了从88.2% 开始的提升(从头开始训练)。但是,对于Sketch和Omniglot,性能都支持DANsketchDAN_{sketch}DANsketch,注意这些是严格非自然图像的唯一两个域,此外,DANimageneDAN_{imagene}DANimagenet仍然略低于非预先训练的VGG-B(S)(86.5% vs 87.7%),尽管后者参数成本更高。#####4.1.1 多种基础网络
\quad可以说,一个好的基础网络应该具有足够通用的特征,以便控制器网络可以将它们用于广泛的目标任务。实际上,这可能不是必然的。我们推测,使用多种特征(例如通过多个任务的训练学习)将为转移学习提供更好的基础。为了同时使用两个基础网络,我们通过使用DAN−caltech−256DAN-{caltech-256}DAN−caltech−256和DANsketchDAN_{sketch}DANsketch并连接到控制器网络来实现双控网络。所得子网络的特征部分的输出在全连接层之前被级联。这导致与DANsketchDAN_{sketch}DANsketch单独完全相同的性能。然而,通过使用每组任务中选定的控制器模块,我们可以改进结果:对于每个数据集,最大性能的网络(基于验证)是控制模块的基础,即我们对除Omniglot和Sketch之外的所有数据集使用DANimagenetDAN_{imagenet}DANimagenet。对于后两者,我们使用DANsketchDAN_{sketch}DANsketch作为基础网络。我们称该网络为DANimagenet+sketchDAN_{imagenet +sketch}DANimagenet+sketch。以更多参数为代价,它将平均性能提升至87.76% - 比使用任何单个基本网络用于控制器或从头开始进行培训要好。由于它被用于9个任务(包括ImageNet),其参数成本(2.76)仍然相当不错。#####4.1.2 从随机初始化的基础网络开始
\quad我们测试了我们的方法在没有任何现有知识的情况下性能表现,例如,在随机初始化的基础网络上构建控制器网络。 这个结构的参数总数是~12M。 然而,由于10M已经被随机初始化,并且只有控制器模块和全连接层已经被学习,所以有效数目实际上是2M。 因此其参数成本被确定为0.22。 我们在表1中总结了结果。 值得注意的是,这种初始化的结果非常好, 该网络获得的平均top-1精度为76.3%,比DANcaltech−256DAN_{caltech-256}DANcaltech−256(79.9%)略差。 这比使用DANdaimlerDAN_{daimler}DANdaimler进行初始化要好,其平均准确度为75%。 这是可能的,因为基础网络中的随机值仍然可以通过我们的方法线性组合,以创建对分类很有用的值。###4.2 初始化
\quad出现的一个问题是如何初始化控制模块的权重。我们测试了几个选项:(1)将设置为单位矩阵(对角线(diagonal))。这相当于控制器模块从一个有效模仿基础网络行为的状态开始(2)将设置为随机噪声(随机(random))(3)从头开始为新任务训练独立网络,然后将设置为最佳用基本权重线性近似新的权重(线性近似(linear_approx))。为了找到最佳的初始化方案,我们在训练WWWWDANsketch→caltech256DAN_{sketch\rightarrow caltech256}DANsketch→caltech256 的过程中逐轮观察了损失。每个实验重复5次,结果取平均值。从图5(a)可以看出,对角线初始化是根号的,或许直观地反映出,不需要训练完全参数化的目标网络。简单地从基础网络的行为开始,并通过控制模块进行调整,可以加快收敛速度。因此,我们用对角线方法训练控制器模块。有趣的是,[6]中的残差适配单元最初与对角线配置类似。如果其适配器单元中的所有过滤器都设置为1(达到标准化),则适配器的输出最初将与使用单位矩阵初始化的控制器单元的输出相同。图5
\quad(a)控制器初始化方案。 对于初始化控制器模块的不同方式,在5次实验中的平均损失的平均值,用最小值和最大值重叠。 随机初始化性能最差(随机)。近似微调网络的性能略好(线性近似)且初始化基础网络(对角线表现最好(b)考虑到其可转移性测量,控制网络的整体准确度在所有数据集上的可预测性。###4.3 可转移性(Transferability)
\quad如何选择一个良好的网络作为其他网络的基础?作为每个独立训练网络 的特征的代表能力的指标,我们在其他数据集上测试性能,使用 进行微调。我们将一个源任务 w.r.t的目标任务 的可转移性定义为通过对在 上训练的 进行微调以在 上执行而获得的top-1精度。我们测试3种不同的场景,如下:(1)仅微调最后一层(也称为特征提取)(ft-last); (2)微调 的所有层(ft-full); (3)与ft-full相同,但冻结批处理标准化层的参数 - 在某些情况下,这已被证明是有益的 - 我们将此选项称为ft-full-bn-off。图3中的结果显示了一些有趣的现象。首先,如预期的那样,特征提取(ft-last)不如微调整个网络。其次,通常从头开始的训练是最有利的选择。第三,我们看到自然图像(Caltech-256,CIFAR-10,SVHN,GTSR,Daimler)和非自然图像(Sketch,Omniglot,Plankton)之间的区别;Plankton图像本质上是自然的,但似乎表现出与其他行为不同的行为。图3NNSTSNTN
\quad不同数据集相互之间的可转移性(ft-last)只调整最后一层(full)微调所有层(ft-full-bn-off)微调所有层,同时禁止批量标准化层要更新的权重。 总的来说,网络往往更容易转移到相关领域的问题(例如,自然/绘图)。 放大查看数字。 建议在线观看该图。
\quad很明显,自然图像的特征对于不自然的图像不太有利。有趣的是,相反的情况并非如此:从Sketch或Omniglot开始训练一个网络对于大多数数据集来说工作得非常好,既自然又不自然。这在表2中进一步示出:我们通过图3的可转移矩阵的每行的平均值来计算每个数据集的平均可转移性。 DANCaltech−256DAN_{Caltech-256}DANCaltech−256最适合特征提取。但是,使用DANPlanktonDAN_{Plankton}DANPlankton 作为最佳起点的全面微调,紧随其后的是DANCaltech−256DAN_{Caltech-256}DANCaltech−256。对于控制器网络,使用DANsketchDAN_{sketch}DANsketch(83.7%)获得从零开始训练的单个基准网达到的最佳平均准确度。这与通过完全转移学习获得的性能接近(84.2%,参见表2),参数数量的一小部分。这与我们的可转让性措施一致。为了进一步测试可转移性与特定基础网络的性能之间的相关性,我们使用每个数据集作为所有其他网络的控制网络的基础,并测量平均总体准确度。结果见图5(b)表2
\quad平均转移学习表现。 我们展示了通过微调从每个域到所有域的网络获得的平均top-1精度(%)。 在上面的数据集中,从Caltech-256开始,证明了最通用的特征提取器(ft-last)。 但是,在初始训练Sketch数据集时(ft-full),微调是最好的,####4.3.1 统一网络
\quad最后,我们测试一个单一网络的可能性,它既可以确定图像的域,也可以对其进行分类。 我们训练一个分类器,使用8个数据集中的训练图像来预测图像来源于哪个数据集。 网络(也称为VGG-B)很容易学会这一点,其迅速收敛到99%的准确度。 使用这个名为 NdcN_{dc}Ndc的“数据集-决策器”,我们增加了DANsketchDAN_{sketch}DANsketch,以便为来自任何数据集DiD_{i}Di的每个输入图像 III 设置 DANsketch→DiDAN_{sketch\rightarrow D_{i}}DANsketch→Di的控制器值 αi\alpha_{i}αi 为1,当且仅当 NdcN_{dc}Ndc 认为 III 源自 DiD_{i}Di 否则为0。 这产生了一个网络,它将适用于每个输入图像的正确控制器分类到它自己的域中。 虽然 αi\alpha_{i}αi 的预测值是实值,但我们将最高值设置为1,其余为零。###4.3 视觉十项全能挑战赛
\quad我们现在展示最近的[6]的视觉十项全能 挑战赛的成绩。挑战介绍涉及10个不同的图像分类数据集:ImageNet [36];Aircraft[37]; Cifar-100 [28];Daimler Pedestrians[29];Dynamic Textures[38];GTSR [30];Flowers[39];Omniglot [40];SVHN [34]和UCF-101 [41]。我们的目标是使用作者确定的train / val / test splitting,在保持小模型大小的同时,在每个数据集上实现准确的分类。所有图像都调整大小,因此每个图像的较小边是72像素。预计分类器可以在64x64像素的图像上运行。在挑战中的每个条目都被赋予一个十项全能得分,这是一个为所有10个数据集上的高亮度方法设计的功能,其比基线要好。有关评分和数据集的详细信息,请参阅挑战网站:2500分的分数反映了将ImageNet上学习的网络独立地微调到每个数据集所产生的基线。对于同样的结构,残差适配器方法所获得的最好结果在十项全能评分方面略低于我们,在平均性能方面略高于我们。然而,与他们不同的是,我们避免对所有数据集进行联合训练,并使用数据集相关的权重衰减。表3http://www.robots.ox.ac.uk/~vgg/decathlon/。与[6]类似,我们选择使用整个深度为28和扩展因子为4的宽残差网络[42],在每个基本块的开始卷积处步长为2。下面我们描述挑战结果,然后再进行一些额外的实验,显示我们方法在各种环境中的附加价值。在本节中,我们使用了最近的YellowFin优化器[43],因为它需要的调整少于SGD。我们使用0.1的初始学习率因子,并在25次迭代后将其降至0.01。这适用于除ImageNet外的所有数据集,我们用SGD进行150迭代,初始学习率为0.1,每35次迭代降低10倍。这是我们使用可用验证数据确定的配置,然后用于在验证集上进行训练(如挑战的作者),并从评估服务器获取结果。在这里,我们从头开始对降低分辨率的ImageNet进行训练,并使用生成的网络作为所有其他任务的基础。表3总结了我们的结果以及基线方法和[6]中的方法,所有方法都使用相似容量的基础架构。通过使用明显更强的基础结构,他们获得了更高的结果(平均值为79.43%),但参数成本为12,即需要原始参数的12倍。所有的行都从[6]中复制,包括它们重新实现的LWF,除了最后一个显示我们的结果。表中的最后一列显示了十项全能评分。
\quad视觉十项全能挑战的结果。 Scratch:独立进行每项任务的培训。Feature:使用预先训练的网络作为特征提取器。 Finetune:香草(vanilla)微调。 性能良好但需要许多参数。 无需学习的学习(LWF,[16]略胜过它,但参数成本较高,Residual adapt[6]显著减少了参数数量,在所有任务上共同训练的结果会提高(Res.Adapt(Joint)) 。所提出的方法(DAN)虽然增加了每个任务的独立性,但仍胜过残差适配器,S是十项全能挑战分数。###4.5 压缩和收敛
\quad在本节中,我们重点介绍一下我们方法的其他有用属性。以下所有实验均使用与上一节中相同的结构完成,但仅对视觉十项全能挑战赛的训练集进行训练并在验证集上进行测试。首先,我们检查网络压缩的影响是否与我们的互补或可能阻碍他们。尽管最近出现了复杂的网络压缩技术(例如[20]),但我们仅使用一种简单的压缩方法作为概念验证,并指出使用最新的压缩方法可能会产生更好的结果。我们对网络权重应用简单的线性量化,使用4,6,8,16或32位来表示每个权重,其中32表示无量化。我们没有量化批标准化系数。图7(b)显示了量化每个网络的系数如何影响准确性。使用8位仅导致精度的边际损失。这实际上意味着我们的方法可以用来学习新的任务,同时需要增加3.25%的原始参数量。很多人甚至保持在6位的性能(DPed,Flowers,GTSR,Omniglot,SVHN)。接下来,我们比较量化对不同转移方法的影响:特征提取,微调和我们的方法(对角线和线性变体)。对于每个数据集,我们记录每种方法/量化级别(将其转换为所需参数的百分比)的归一化(除以最大值)精度。如图9所示,我们的方法达到与微调相同的精度,需要的参数明显更少。 如果参数使用有限,则我们方法的对角线变体显着优于特征提取。 最后,我们表明,直到接近最大性能时的迭代次数明显低于我们的方法。 这可以在图8中看到。图7
\quad(a)准确性与学习方法。 仅使用最后一层(特征提取器)表现最差。 finetune:香草(vanilla)微调。 Diagonal:我们的控制器模块具有对角组合矩阵。 Linear:我们的完整方法。 平均而言,我们的完整方法胜过了香草(vanilla)微调。 (b)精度与量化:低至8位,我们看不到网络量化对我们方法的显着影响,表明它们可以一起使用。图8
\quad(a)我们的方法(线性)比微调收敛速度快。 我们方法的较弱变体收敛速度与特征提取一样快,但达到了较高的准确性(7(a))。(b) 放大(a)的右上方。图9
\quad 平均分类准确率(标准化,对数据集进行平均)w.r.t no. paramters 我们的方法在基线上获得了更好的性能,适用于大范围的参数预算。 对于极少数参数对角线(我们的)胜过特征提取。 为了获得最大的准确度,我们完整的方法需要的参数少得多(参见线性与微调)。###4.6 讨论
\quad我们已经观察到,所提出的方法比香草微调更快地收敛到相当好的解决方案,并且最终获得稍好的性能。尽管网络具有表现力,但分类精度的提高仍受到我们的结构限制。我们推测,将每一层约束为表示为原始网络中相应层的线性组合,用于规范解空间,并且在任务彼此充分相关时是有利的。人们可以想出简单的例子,其中提出的方法可能会失败。如果任务不属于同一类型,则可能会发生这种情况。例如,一个任务需要计算水平线,另一个需要计算垂直线,而且这些例子都出现在训练集中,那么所提出的方法可能会比从头开始的香草微调或训练的工作差得多。我们在第3.3节中尝试了这种场景。根据经验,我们没有看到在我们的任何关于“真实”数据集的实验中发生了这种情况。这可能只是源于图像分类任务中的一些内在相似性,这使得一些基本特征对大多数都有用。我们离开了对这个问题的调查,并找到了在特征重用和学习新特征之间取得平衡的方法,以此作为未来的工作。##5 总结
\quad我们已经提出了一种转移学习方法,可以将现有网络适应新的任务,同时完全保留现有的表示。我们的方法匹配或优于微调,但需要一小部分参数,当与净压缩结合时达到原始参数的3%而不损失精度。该方法快速收敛到高准确度,同时达到或超越其他具有相同目标的方法。内置于我们的方法中的是能够轻松切换各种学习任务之间的表示,使单个网络能够在各个领域无缝执行。控制参数 α\alphaα 可以作为实值向量来转换,从而允许不同任务的表示之间的平滑过渡。这种平滑过渡的效果的一个例子可以在图6中看到,其中 α\alphaα 用于在不同学习配对任务的表示之间线性内插,允许人们平滑地控制不同行为之间的转换。允许每个添加的任务使用现有控制器的凸面组合将潜在地更有效地利用控制器,并将控制器的数量与任务的数量分离。图6
\quad转移表示。 使用单个基础网络 NsketchN_{sketch}Nsketch,我们通过在[0,1]范围内改变它来检查该方法对 α\alphaα 的变化值的敏感性。 增加 α\alphaα 使网络远离基本表示并转向学习任务 - 逐渐降低基础任务(菱形)的性能并改进已知学习任务(圆形)。图上的性能(蓝色菱形)相对较慢的下降以及Plankton(蓝色圆圈)的增加表明学习表示之间的相似性。##参考文献[1] A. Krizhevsky, I. Sutskever, and G. E. Hinton, “Imagenet classification with deep convolutional neural networks,” in Advances in neural information processing systems, 2012, pp. 1097–1105.[2] J. Long, E. Shelhamer, and T. Darrell, “Fully convolutional networks for semantic segmentation,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2015, pp.3431–3440.[3] R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2014, pp. 580–587.[4] A. Hannun, C. Case, J. Casper, B. Catanzaro, G. Diamos, E. Elsen,R. Prenger, S. Satheesh, S. Sengupta, A. Coates et al., “Deep speech: Scaling up end-to-end speech recognition,” arXiv preprint arXiv:1412.5567, 2014.[5] G. Litjens, T. Kooi, B. E. Bejnordi, A. A. A. Setio, F. Ciompi, M. Ghafoorian, J. A. van der Laak, B. van Ginneken, and C. I. Sanchez, “A survey on deep learning in medical image analysis,” ´ arXiv preprint arXiv:1702.05747, 2017.[6] S.-A. Rebuffi, H. Bilen, and A. Vedaldi, “Learning multiple visual domains with residual adapters,” arXiv preprint arXiv:1705.08045,2017.[7] S. Zhu, C. Li, C. C. Loy, and X. Tang, “Face alignment by coarseto-fine shape searching.” in CVPR. IEEE Computer Society, 2015,pp. 4998–5006.[8] K. He, G. Gkioxari, P. Dollar, and R. Girshick, “Mask R-CNN,” ´arXiv preprint arXiv:1703.06870, 2017.[9] D. Eigen and R. Fergus, “Predicting depth, surface normals and semantic labels with a common multi-scale convolutional architecture,” in Proceedings of the IEEE International Conference on Computer Vision, 2015, pp. 2650–2658.[10] H. Bilen and A. Vedaldi, “Integrated perception with recurrent multi-task neural networks,” in Proceedings of Advances in Neural Information Processing Systems (NIPS), 2016.[11] ——, “Universal representations:The missing link between faces, text, planktons, and cat breeds,” 2017.[12] I. Misra, A. Shrivastava, A. Gupta, and M. Hebert, “Cross-stitch Networks for Multi-task Learning.” CoRR, vol. abs/1604.03539, 2016.[13] R. M. French, “Catastrophic forgetting in connectionist networks,” Trends in cognitive sciences, vol. 3, no. 4, pp. 128–135, 1999.[14] J. Donahue, Y. Jia, O. Vinyals, J. Hoffman, N. Zhang, E. Tzeng, and T. Darrell, “DeCAF: A Deep Convolutional Activation Feature for Generic Visual Recognition.” in Icml, vol. 32, 2014, pp. 647–655.[15] A. Sharif Razavian, H. Azizpour, J. Sullivan, and S. Carlsson,“CNN features off-the-shelf: an astounding baseline for recognition,” in Proceedings of the IEEE Conference on Computer Vision andPattern Recognition Workshops, 2014, pp. 806–813.[16] Z. Li and D. Hoiem, “Learning without Forgetting.” CoRR, vol. abs/1606.09282, 2016.[17] A. A. Rusu, N. C. Rabinowitz, G. Desjardins, H. Soyer, J. Kirkpatrick, K. avukcuoglu, R. Pascanu, and R. Hadsell, “Progressive neural networks,” arXiv preprint arXiv:1606.04671, 2016.[18] J. Kirkpatrick, R. Pascanu, N. Rabinowitz, J. Veness, G. Desjardins, A. A. Rusu, K. Milan, J. Quan, T. Ramalho, A. Grabska-Barwinska et al., “Overcoming catastrophic forgetting in neural networks,” Proceedings of the National Academy of Sciences, p. 201611835, 2017.[19] S. S. Sarwar, A. Ankit, and K. Roy, “Incremental Learning in Deep Convolutional Neural Networks Using Partial Network Sharing,” 2017.[20] S. Han, H. Mao, and W. J. Dally, “Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding,” arXiv preprint arXiv:1510.00149, 2015.[21] S. Han, J. Pool, J. Tran, and W. Dally, “Learning both weights and connections for efficient neural network,” in Advances in Neural Information Processing Systems, 2015, pp. 1135–1143.[22] E. L. Denton, W. Zaremba, J. Bruna, Y. LeCun, and R. Fergus,“Exploiting linear structure within convolutional networks for efficient evaluation,” in Advances in Neural Information Processing Systems, 2014, pp. 1269–1277.[23] S. J. Hanson and L. Y. Pratt, “Comparing biases for minimal network construction with back-propagation,” in Proceedings of the 1st International Conference on Neural Information Processing Systems.MIT Press, 1988, pp. 177–185.[24] K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2016, pp. 770–778.[25] K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” arXiv preprint arXiv:1409.1556, 2014.[26] D. Kingma and J. Ba, “Adam: A method for stochastic optimization,” arXiv preprint arXiv:1412.6980, 2014.[27] G. Griffin, A. Holub, and P. Perona, “Caltech-256 object category dataset,” 2007.[28] A. Krizhevsky and G. Hinton, “Learning multiple layers of features from tiny images,” 2009.[29] S. Munder and D. M. Gavrila, “An experimental study on pedestrian classification,” IEEE transactions on pattern analysis and machine intelligence, vol. 28, no. 11, pp. 1863–1868, 2006.[30] J. Stallkamp, M. Schlipsing, J. Salmen, and C. Igel, “Man vs. computer: enchmarking machine learning algorithms for traffic sign recognition,” Neural networks, vol. 32, pp. 323–332, 2012.[31] V. Mnih, K. Kavukcuoglu, D. Silver, A. A. Rusu, J. Veness, M. G. Bellemare, A. Graves, M. Riedmiller, A. K. Fidjeland, G. Ostrovski et al., “Human-level control through deep reinforcement learning,” Nature, vol. 518, no. 7540, pp. 529–533, 2015.[32] R. K. Cowen, S. Sponaugle, K. Robinson, and J. Luo, “Planktonset 1.0: Plankton imagery data collected from fg walton smith in straits of florida from 2014–06-03 to 2014–06-06 and used in the 2015 national data science bowl (ncei accession 0127422),” Oregon State University; Hatfield Marine Science Center, 2015.[33] M. Eitz, J. Hays, and M. Alexa, “How do humans sketch objects?” ACM Trans. Graph., vol. 31, no. 4, pp. 44–1, 2012.[34] Y. Netzer, T. Wang, A. Coates, A. Bissacco, B. Wu, and A. , “Reading digits in natural images with unsupervised feature learning,” in NIPS workshop on deep learning and unsupervised feature learning, vol. 2011, no. 2, 2011, p. 5.[35] A. C. Wilson, R. Roelofs, M. Stern, N. Srebro, and B. Recht, “The Marginal Value of Adaptive Gradient Methods in Machine Learning.” CoRR, vol. abs/1705.08292, 2017.[36] O. Russakovsky, J. Deng, H. Su, J. Krause, S. Satheesh, S. Ma, Z. Huang, A. Karpathy, A. Khosla, M. Bernstein et al., “Imagenet large scale visual recognition challenge,” International Journal of Computer Vision, vol. 115, no. 3, pp. 211–252, 2015.[37] S. Maji, E. Rahtu, J. Kannala, M. Blaschko, and A. Vedaldi, “Fine-grained visual classification of aircraft,” arXiv preprint arXiv:1306.5151, 2013.[38] M. Cimpoi, S. Maji, I. Kokkinos, S. Mohamed, and A. Vedaldi, “Describing Textures in the Wild.” CoRR, vol. abs/1311.3618, 2013.[39] M.-E. Nilsback and A. Zisserman, “Automated Flower Classifica tion over a Large Number of Classes.” in ICVGIP. IEEE, 2008, pp.722–729.[40] B. M. Lake, R. Salakhutdinov, and J. B. Tenenbaum, “Human level concept learning through probabilistic program induction,” Science, vol. 350, no. 6266, pp. 1332–1338, 2015.[41] K. Soomro, A. R. Zamir, and M. Shah, “UCF101: A dataset of 101 human actions classes from videos in the wild,” 2012.[42] S. Zagoruyko and N. Komodakis, “Wide Residual Networks.” CoRR, vol. abs/1605.07146, 2016.[43] J. Zhang, I. Mitliagkas, and C. Re, “YellowFin and the Art of Momentum Tuning,” arXiv preprint arXiv:1706.03471, 2017.
深度自适应增量学习(Incremental Learning Through Deep Adaptation)的更多相关文章
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- (转)分布式深度学习系统构建 简介 Distributed Deep Learning
HOME ABOUT CONTACT SUBSCRIBE VIA RSS DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...
- 201904Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptors
论文标题:Online Human Action Recognition Based on Incremental Learning of Weighted Covariance Descriptor ...
- A Gentle Introduction to Transfer Learning for Deep Learning | 迁移学习
by Jason Brownlee on December 20, 2017 in Better Deep Learning Transfer learning is a machine learni ...
- 论文学习 :Learning a Deep Convolutional Network for Image Super-Resolution 2014
(Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014) 摘要:我们提出了一种单图像超分辨率的深度学习方 ...
- paper 124:【转载】无监督特征学习——Unsupervised feature learning and deep learning
来源:http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio c ...
- 论文笔记之:Learning Cross-Modal Deep Representations for Robust Pedestrian Detection
Learning Cross-Modal Deep Representations for Robust Pedestrian Detection 2017-04-11 19:40:22 Moti ...
- (转)Understanding, generalisation, and transfer learning in deep neural networks
Understanding, generalisation, and transfer learning in deep neural networks FEBRUARY 27, 2017 Thi ...
- 转:无监督特征学习——Unsupervised feature learning and deep learning
http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio clas ...
随机推荐
- 洛谷 P4822 [BJWC2012]冻结 题解
P4822 [BJWC2012]冻结 题目描述 "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于 ...
- Loj刷题记录
又是一年云参营. 所以一起刷省选题吧. LOJ2028 「SHOI2016」随机序列 题目链接. 简要社论 发现+和-可以互相抵消,于是有贡献的时候一段前缀的乘积.设\(s[i]=\prod_{j=1 ...
- Java-Long类型精度丢失问题
问题 今天碰到一个问题,后端需要返回给前端Long类型的id,前端收到的id会发生精度丢失. 测试代码:后端返回的值为344739147160346624 但是前端获取的值为: 解决办法 将返回的值转 ...
- Java获取两个指定日期之间的所有月份
String y1 = "2016-02";// 开始时间 String y2 = "2019-12";// 结束时间 try { Date startDate ...
- [内网渗透] MSF路由转发/网络代理
这里只做记录,不做详解 0x01 路由转发 已经拿到一台公网服务器: 1.1 方法1 进到meterpreter的会话: route #查看路由信息 background退出当前会话,通过会话2,转发 ...
- node.js使用cluster实现多进程
首先郑重声明: nodeJS 是一门单线程!异步!非阻塞语言! nodeJS 是一门单线程!异步!非阻塞语言! nodeJS 是一门单线程!异步!非阻塞语言! 重要的事情说3遍. 因为nodeJS天生 ...
- 在IDEA上对SpringBoot项目配置Devtools实现热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...
- C# HtmlDecode、HtmlEncode、UrlEncode、UrlDecode
不用System.Web 对 Content进行编码,De编码 string content = "<br/>"; string s1 = WebUtility.Htm ...
- [E2E_L9]GOMFCTemplate的融合进阶
在前面出现的融合方法中,最突出的问题就是每次运算,都需要将整个推断的过程全部操作一遍,这样肯定是费时间的--所以我们需要将能够独立的地方独立出来,但是这个过中非常容易出现溢出的错误--经过一段时间的尝 ...
- 事务管理(ACID)和事务的隔离级别
https://blog.csdn.net/dengjili/article/details/82468576 谈到事务一般都是以下四点 原子性(Atomicity)原子性是指事务是一个不可分割的工作 ...