3.4 元学习神经网络模型

前面介绍了神经网络模型的基础框架、卷积神经网络和残差神经网络等经典的神经网络模型。接下来要介绍元学习神经网络模型,更新模型来适应新任务,给出完成新任务的神经网络模型。结合前面的内容,读者能看到,元学习在神经网络模型的结构和超参数设计上都投入了思考。元学习神经网络模型包括以下内容:学会学习的神经网络学习器、预训练深度神经网络模型的适应、具有适应性的神经元设计。其中:

(1)学会学习的神经网络学习器—使用神经网络模型对模型的自我更新策略建模,通过寻优来找到最优的自我更新策略。

(2)预训练深度神经网络模型的适应—对预训练深度模型进行调参来给出完成新任务的模型。

(3)具有适应性的神经元设计—通过在神经元函数中引入任务专属参数,在新任务上更新任务专属参数,给出新任务的模型。

在后面的章节中,还会介绍在自动化机器学习中使用元学习思想,改进神经网络模型的超参数寻优过程,主要有以下两个方面的介绍。

(1)自动化机器学习通过遍历神经网络的所有超参数组合,在每个超参数组合下,训练神经网络模型,找到模型效果最优的超参数组合。

(2)加速自动化机器学习,通过将元学习方法和自动化机器学习相结合,加速找到模型效果最优的超参数组合。

元学习神经网络模型使用神经网络模型来实现元学习的目的,让机器学会学习,让神经网络模型在新任务上学会自我更新,让机器自动化地适应新任务。元学习神经网络模型在神经网络模型的基础上进行改造,让神经网络模型更加灵活,拥有更多自由度,可以在新任务上快速准确更新,并利用神经网络模型结构上的优势,适用范围广,应用灵活,便于学会和理解,容易推广使用。因此,元学习神经网络模型是元学习领域被研究最多、应用最广的思想之一。这里提到的方法常常是许多思想的综合,本节通过对方法中思想的介绍,让读者理解这个思想的内涵,方法分类不是本节的目的。

3.4.1 学会学习的神经网络学习器

Li Ke和Malik Jitendra在2017年的论文“Learning to Optimize”[31]中提出了自动优化更新任何学习器的算法,对于任何任务的任何学习器,都可以实现算法的自动设计。这里使用强化学习框架解决元学习问题,将模型更新策略视为强化学习中的行动策略,将模型在新任务上的表现视为强化学习中的奖励。深度强化学习框架中的行动策略常常用神经网络模型来建模,神经网络模型是普适的函数近似器(Universal Function Approximator),可以为所有函数提供好的近似,当然也可以作为行动策略函数的近似。神经网络模型的设置非常灵活,能适用于多种任务的需要,在最优化神经网络模型中可以找到最优行动策略,即最优的学习器更新规则。在论文[31]中,作者将强化学习框架作为元学习器,而基础学习器可以是任何学习器,在任何学习任务上,元学习器都可以自动学会更新任意学习器,从而实现了自动算法设计。

自动优化更新策略是:

img

这里的π代表强化学习框架下的行动策略,f是目标函数(Objective),需要最优化目标函数。img是过去已经探索过的点,已知目标函数在这些点的取值,即强化学习框架下的奖励。行动策略的模型是神经网络模型,输入是过去所有的行动和行动产生的效果,输出是下一步要探索的点:

img

其中img是上一步探索过的点,而img是模型优化器接下来要探索的点。行动策略指导下一步探索哪个点,行动策略是神经网络模型,它的输入是过去探索过的点和目标函数,目标函数给出强化学习中的奖励,它的输出的是下一步要探索的点。

在之前最优化目标函数的算法中,常用的有随机梯度下降法,即通过计算梯度来确定下一步要探索的点。这里代表行动策略的神经网络模型替代了随机梯度下降法,由神经网络模型而不是给定的算法来确定下一步要探索的点,这也是自动算法设计的原理。

由于神经网络模型很灵活,可以近似任意函数,所以意味着行动策略可以是任何函数。这里给出的更新策略是在任意函数这样一个很大的集合上通过最优化得到的,意味着这样优化得到的更新策略会有很好的表现。

3.4.2 预训练深度神经网络的适应

遇到一个新问题时,深度学习模型获取海量有标注数据集来对模型进行训练,得到预训练深度神经网络模型(Pre-Trained Deep Model)。由于训练过的数据涵盖了几乎所有会遇到的案例,所以遇到训练过的案例时,深度学习模型能给出完美的答案,或者遇到和训练过的案例有极大相似性的新案例时,深度学习模型也能给出很好的答案。

使用预训练深度神经网络模型来完成新任务包括两个模块:

(1)在预训练数据集中的大量有标注数据上估计出具有普适性、能推广到新任务上的规律。

(2)将预训练模型推广到新任务上,直接应用具有普适性、易推广的规律,加速模型在新任务上形成快速准确推理的过程。

获取海量有标注数据集的成本昂贵,且总会遇到经验较少的新案例。此时需要考虑对预训练深度神经网络模型进行更新。上文提到的方法有局部更新、梯度反向传播更新等方式,可将预训练深度神经网络模型进行调整,以解决新案例。

局部更新一般只更新与输出层接近的层中的参数,这里的参数属于分类器,对模型适应新任务更加重要。靠近输入层的层是用来对图片数据中的平移不变特征进行提取的,这里的参数对于适应新任务来说不那么重要。例如,在ImageNet上训练VGG Net,在适应新的图片分类任务时,只对输出层的参数进行更新,就会在新任务上获取不错的分类精度。

前面提到AlexNet的参数数量比GoogLeNet多,但是AlexNet的层数比GoogLeNet少,AlexNet在ImageNet图片分类比赛中的精度没有GoogLeNet好。由此可见,并不是参数数量越多模型的精度就越高。在海量有标注数据训练的深度神经网络模型中,参数之间相关性很大,参数的冗余度极大,可以实现有效参数数目大量减少,模型训练时间减少,并且模型精度不降低。研究表明,只用少部分参数就可以准确预测其余的参数,且模型精度不降低。

由于深度神经网络模型中参数的冗余度较大,在参数之间存在映射关系,因此用少量的参数就可以准确预测其余的参数,且参数之间的映射关系相对稳定。在神经网络模型适应新任务且不断更新的过程中,参数之间的映射关系保持稳定。因此,有一种神经网络模型的更新策略是局部更新关键参数,根据以往这些关键参数与输出层参数之间的映射关系,直接从参数预测输出,减少计算量,加速神经网络模型适应新任务的过程。

Qiao Siyuan等作者在2018年的论文“Few-Shot Image Recognition by Predicting Parameters from Activations”[32]中给出了这样一种方法,一般称为Activation to Parameter,即激活函数到参数的映射法。首先,输入图片x属于图片类别y,输出层之前层的激活函数(Pre-Activation)记为Sy,输出层对应于这个类别的神经元参数记为wy,假设在Sywy之间存在稳定的映射φ,且假设映射φ对于不同图片类别来说都是一样的,在只有新类别的图片分类任务上,映射φ也是不变的。因此,在大量有标注图片数据集上预训练模型,计算映射φ中的参数,然后在新类别图片分类的任务上,直接使用映射φ预测输出层中新类别的神经元参数,直接在原来的神经网络模型的输出层上加入新类别的神经元,而不用重新训练庞大的神经网络模型。

Activation to Parameter[32]的具体步骤如下:

(1)整理图片分类的数据集。预训练数据集img包含很多图片类别,这些图片类别的集合是img,新任务数据集img只包含新的图片类别,这些图片类别的集合是img

(2)首先是预训练。遍历预训练数据集图片类别img中的所有图片类别,输入属于图片类别y的输入图片x,计算输出层之前层的激活函数值:

img

对于图片类别y中的所有输入图片,计算Ay中所有激活函数的平均值img。在实际计算中,使用的是激活状态sy,激活状态以概率p取值为img,以概率img取值为img中随机抽取的一个值。激活函数的状态值sy和输出层神经元参数wy之间的映射是

img

在预训练数据集上,最小化损失函数:

img

其中,映射img是需要估计的值,映射img可以是线性或者非线性模型。

(3)预训练完成后,将预训练得到的映射推广到新任务上。通过估计的映射预测输出层神经元中的参数,扩展神经网络模型,使之能很好地完成新任务。这里要求扩展预训练模型之后,模型在图片新类别和预训练过的旧类别上预测精度相当,所有图片类别的集合是

img

扩展预训练模型之后,输入图片x属于图片类别y的概率是

img

其中,输出层中的参数img,根据预训练模型估计的映射,直接应用到新任务中。对于所有类别的图片分类问题,这个映射都是不变的。

Activation to Parameter方法在新任务上可实现快速推理。相比之下,其他方法需要更新大量网络参数,花费很多时间和计算资源。例如,ResNet在新任务上的大量参数更新在4个GPU上花费2小时,而Activation to Parameter在新任务上推理时,在1个GPU上花费不到1秒钟,就可以达到类似精度的推理结果。

预训练深度神经网络模型具有以下优势:

(1)预训练模型适应到新任务上时精度很高,精度在新任务上和预训练过的旧任务上是类似的。

(2)新任务和旧任务是同一个种类,在新任务上,预训练模型不需要太多的迭代更新,可快速在新任务上进行推理,且精度不减。

关于预训练深度神经网络模型适应新任务具有以下探讨:

(1)预训练模型适应的新任务类型有限。例如,在Activation to Parameter方法中,新任务只能是图片分类任务,且新任务中包含已训练任务中没有的图片类别,新任务不能是图片分割的任务,也不能是语音识别任务等其他种类的任务。Activation to Parameter比不上人类的智能,人类可以从不同种类的任务之间找到可以推广的共性,在不同种类的任务之间实现快速推理。

(2)预训练模型需要大量有标注数据,而有标注数据的获取需要成本,且人工标注本身可能会有错误,预训练模型需要大量时间、计算资源和费用成本。可想而知,在这样高昂的成本下,为了保持模型在旧任务和新任务上达到一样的精度,预训练模型的复杂度是很高的。

3.4.3 具有适应性的神经元设计

神经网络模型包括神经元、神经元连接、激活函数、权重和偏差等自由度,在这些自由度上可以方便地对神经网络模型进行设计改造,以提高神经网络模型对新任务的适应性,更快地在新任务上形成推理结果,且推理结果的精度更高。以下有一些例子可供参考:

(1)神经元连接参数包括两种,一种是在适应新任务时进行更新的,另一种在适应新任务时不更新,新任务对靠近输出端的神经元状态的传递产生影响。

(2)神经元的激活函数包括许多参数,添加代表新任务适应性的参数,在新任务上只更新这些参数,新任务对神经元激活状态产生影响。

(3)神经元连接可视为离散的结构参数,在适应新任务时可更新神经网络的结构参数,使得新任务对神经网络结构产生影响。

具有代表性的方法是Tsendsuren Munkhdalai等作者在2018年的论文“Rapid Adaptation with Conditionally Shifted Neurons”[33]中提出的CSN神经元(Conditionally Shifted Neurons),重新设计神经网络模型中的激活函数,使之包括两种参数:

(1)激活函数前值参数。

(2)任务专属参数。

预训练神经网络模型后,在新任务上,元学习器更新了任务专属参数,可进行快速准确的推理。

适应性神经元CSN第img层激活函数的定义如下:

img

其中,T代表神经网络模型的最后一层,σ是非线性激活函数,at是激活函数的前值参数,βt是任务专属参数。元学习器处理新任务时,使用注意力机制从记忆模块提取相关经验,更新任务专属参数。

常见的神经网络模型中的神经元都可以换成自带适应性参数的CSN神经元,论文中提到如下深度网络模型:

(1)深度残差神经网络模型使用的CSN称为adaResNet模型。

(2)深度卷积神经网络模型使用的CSN称为adaCNN模型。

(3)长短期记忆网络模型使用的CSN可以在时间和深度上都更新模型,适应新任务。

使用CSN提高了这些神经网络模型的适应性,在小样本图片分类数据集miniImageNet上获得了更好的分类精度。

CSN方法包含如下组成部分:

(1)记忆模块。存储基础学习器在元训练集任务上的训练结果,存储训练任务的特征。

(2)基础学习器和元学习器结构。基础学习器针对任务本身进行训练,元学习器使用注意力机制在记忆模块提取有用的经验信息,在不同任务之间更新任务专属参数,对基础学习器进行指导,让基础学习器更快更好地适应新任务。

(3)自带适应性的神经元设计。神经元激活函数进行了重新设计,包含任务专属参数,在不同任务之间进行更新,让神经网络模型更好地适应新任务,且任务专属参数在同一层进行共享,减少了任务专属参数的数量,有利于加速在新任务上进行推理的过程。

CSN方法有如下两个步骤:

(1)在元训练集上,在每个有标注数据集的任务上计算任务的特征,存储到记忆模块中,并且在任务上训练基础学习器,记录训练结果中的信息,存储到记忆模块中。

(2)在元验证集或者元测试集上进行推理,元学习器计算新任务的特征,并且使用注意力机制在记忆模块中提取任务专属经验参数,元学习器将这个经验参数输入基础学习器,基础学习器输出在新任务上的推理。

在元训练阶段,将训练经验放置在记忆模块中。记忆模块包含两个部分:

(1)特征提取器从输入任务数据集中提取的特征。

(2)基础学习器在任务上训练,得到训练结果中获得的条件信息(Conditioning Information)。

在元训练阶段,首先,输入元训练数据集:

img

其中,img代表一个任务中的有标注数据集,img代表有标注数据集中的标注。对输入的有标注数据集进行特征提取,将特征记录在记忆模块中,提取的特征如下:

img

其中,img是输入数据集img的特征,f是特征提取机制,提取的特征img记录在记忆模块中。然后,在所有元训练集的任务上训练基础学习器:

img

其中,img是基础学习器在输入数据集img上形成的推理,img是基础学习器。在输入的训练任务上,基础学习器计算每个任务中包含的信息,这些信息被称为条件信息,条件信息包括任务上基础学习器给出的结果的经验信息,存储在记忆模块中,遇到新任务时,元学习器提取这些条件信息,用来加速在新任务上形成推理。论文中有这样的介绍,常用的条件信息有以下两种形式:

(1)首先,计算基础学习器损失函数的一阶导数:

img

其中,img是基础学习器在训练任务上的损失函数值,img是网络模型中的激活函数前值,是考虑任务专属参数和非线性激活函数之前的前值。n是元训练集中训练任务的个数,T是神经网络模型的层数,rt是第t个神经网络层的宽度。这里使用了损失函数值对输入任务数据集的一阶导数。损失函数导数条件信息(Error Gradient Information)的具体形式如下:

img

其中,论文中imgp是可以灵活设置的超参数,sgn是基于数值正负数的符号函数。可见,条件信息是只包含损失函数一阶导数的函数,如果一阶导数值的绝对值太小,那么需要将一阶导数值放大;如果一阶导数值的绝对值不太小,那么对一阶导数值取对数值。这样,就从一阶导数值转化成条件信息值。

(2)直接反馈信息(Direct Feedback Information):

img

其中,img是非线性激活函数σ的一阶导数,img是基础学习器的交叉熵损失函数对Softmax输出层前值的一阶导数值。直接反馈信息的计算简单,在小样本图片分类问题miniImageNet中,使用直接反馈信息的CSN网络模型具有很好的精度。基础学习器训练任务后得到的条件信息为:

img

其中,g是记忆函数,从条件信息计算出参数存储在记忆模块中。

元验证或者元测试阶段,主要有两个部分:

(1)使用注意力机制从记忆模块中提取有用的经验。

(2)使用提取的经验更新任务专属参数。

在元验证集或者元测试集上进行推理的阶段中,元学习器根据新任务输入的数据集计算特征:

img

其中,img是元验证集或者元测试集中的输入数据集,f是特征提取机制,kj是输入数据的特征。接下来,元学习器使用注意力机制,提取记忆模块中的经验,为新任务提供任务专属参数。元学习器的注意力机制如下:

img

其中,img是记忆模块中元训练任务的特征,img是新任务的特征,cos是余弦距离函数,Softmax是Softmax函数。CSN神经元中新任务的任务专属参数βt是记忆模块中参数的组合:

img

其中,img是记忆模块中训练任务的条件信息生成的,img参数来自元学习器的注意力机制。元学习器将任务专属参数img输入基础学习器,生成对新任务的推理结果。

这里,元学习器和记忆模块结合使用,指导新任务的完成,加速新任务上的推理过程。一方面,记忆模块包含记忆要素生成机制,包括对输入数据集的处理,提取输入数据集的特征,并进行存储;对基础学习器的训练结果进行处理,提取有效的信息,并进行存储。另一方面,元学习器使用注意力机制,从记忆模块中提取与新任务相关的信息,处理后为基础学习器提供完成新任务的参数。这里,元学习器和记忆模块共同为所有任务的共性进行建模,对元训练集中的所有任务进行综合,从而可以加速对新任务的准确推理。

自带任务专属参数的神经元设计有以下优势:

(1)任务专属参数为神经网络模型提供了更多的自由度,在遇到新任务时,神经网络模型可以更加灵活地实现自我更新。

(2)任务专属参数的数量可控,需要快速在新任务上进行推理时,任务专属参数的数量不能太多,更新大量参数需要更多时间,通过合理的参数分享,可减少任务专属参数的数量。

(3)由于神经元的数目比神经元之间连接的数目要少,所以在激活函数上添加任务专属参数有利于减少参数数量。如果在神经元连接的权重上设计任务专属参数,参数数量会更多。

对自带任务专属参数的神经元设计有以下探讨:

(1)需要大量元训练集中的有标注任务,使用基础学习器对大量有标注任务进行训练。通过大量的经验积累,形成巨大、海量、类似字典或者百科全书的记忆模块,使用元学习器对记忆模块中的信息进行提取和整合,形成新任务的任务专属参数。

(2)随着记忆模块中信息的累积,信息越来越多,信息的冗余程度较大。