神经网络的一些简单思考

神经网络的一些简单思考

简单来理解一个模型,其实就是一个转换器,或者说其实就充当了一个复杂函数的角色,能够将输入的数据转换成另外一种形式呈现,如果转换出来的数据形式对于相应的任务足够直观,那么就很容易实现相应的任务。

从现在来看,元学习跟起初的构想已经产生了一些差异,最初的元学习构想的是让机器学会如何学习,但这只是一个概念,实际上来看其实并没有真正的达到这一点。

一般的迁移学习中,通常是先针对一个任务训练出一个模型,然后假设目标分布与这个训练出来的模型是可以进行映射转换,因此可以寻找出一个函数,如果模型与相近任务比较近似,这样的转换函数显然会相对简单,因此通过一般的神经网络往往就可以拟合出来。

元学习所不同的是,将多个任务都加以训练,然后综合找出来一个适合各个任务的一个,这个值相当于是妥当了多个任务后所得到一个考虑了各方面所得到的协调值,然后将此作为基础模型。

简单来说,一般的神经网络,比如二分类形状时,可以学习什么是方形,什么是非方形,如果多分类时,则可以对非方形的结果,进行再次分类,比如分成三角形或圆形,这种往往可以获取比较好的效果。

另外还有一种就是输出可以是多个结果,但是采用softmax的结果,来表达输入的数据,分别可能是哪个形状的概率是多少,然后按最大概率进行取用,比如类似VGG16就是这样的方法。

而元学习里,则会训练出来一个可以粗略判断方、圆、三角的模型,这个模型是在已有的数据中推出来的,因此操作方法上与直接拟合有所区别,目的试图提升的模型的泛化能力。

1、采用两个网络组进行拟合

道家阴符派博客--神经网络的一些简单思考-- 1
如果两个网络相同的时候,则称之为挛生网络(SNN),如果两个网络结构且不共享参数时,称为伪孪生神经网络(PSNN),其实也就是异构网络,这里的关键是损失函数的结果LOSS是分别两个网络生成结构共同计算出来的。

由于两个输入是不同的数据,通过loss来控制参数的更新,对于已经标注的数据,输出可以是0或1,表示相似或不相似。

这样设计的网络显然有一个很巧妙的特点就是,假如是进行图片分类的,那么可以将同一类数据作为组合输入,最终它能够很好提取出同类数据的特征。

比如数据是图片的话,对于新的数据,只需要比较与已有的图片相似度,便可知道是否是同一类图片。

进一步的改进则是关系网络,即Relation Network(RN),这个网络在上述基础上进一步改进在于,原本是将输入数据经过模型计算出来的结果数据,直接进行比较相似度,现在改成了用加入一个子网络来转换然后计算它们之间的距离。

直观的感受就是,只是用一个网络转换输入数据,程度仍然“不够深“,表达1-shot尚可,但需要更精细的进修,生成的数据,还需要加一个网络来进行转换,这样才“更可信”

从论文上列出来的数据来看:

道家阴符派博客--神经网络的一些简单思考-- 2

当随机取20个样本,进行分类时,基本的卷积孪生网络效果有较大下降,但RN效果还比较稳定,另外在经典的MAML元学习算法中,效果也比较稳定。

这里需要提及一下比RN更早的Prototypical Net,它的思路比较有特点,而且极其简单,主要是对数据进行集中的随机采样,然后求出平均值。这里利用了布雷格曼散度(gular Bregman divergences),即:对于一些点满足任意的概率分布的情况下,这些点的平均值点(mean point)一定是空间中距离这些点的平均距离最小的点,然后将这些点构成一个矩阵,称作meta data vector,然后仅仅采用欧几里得距离计算相似度,便可以得到非常好的效果。

在2020年,Han-Jia Ye和Hexiang Hu将原始数据通过ResNet转换后,再通过这样的方式来进行分类,效果在miniImageNet数据集上的5way-1shot情景分类精度提高到了62.39%,5way-5shot情景分类精度提高到了80.53%,比使用Covnet4网络作为主干网络提高了接近20%的精度。

这些方法都有一个问题,如果数据少的话,基础数据都很难保证样本的特征是足够完整的,因此像元学习之类的,在试图最大程度的扩大泛化范围,但以目前的技术水平来说,是很难保证它的总是能正确的泛化。

因此它们通常都要大数据来进行支撑,才能收到不错的效果,到了如今又有更多的选择,例如可以使用data2vec,由于一般data2vec也就比bert高一两个点而已,如果是文本相关,那么显然使用BERT加上Prototypical Net也会是一个选择。

因此总的来说,元学习实际上就是试图训练出一个通用模型,然后可以在此模型上再进行简单的训练或极少量的训练得到更好的结果。

但神经网络有一个固有的问题就是,对于简单架构,每次训练都在几乎更新所有的权重,也就是说引起的变化实在太大,并且再用新的数据进行训练时,原有的训练权重会被覆盖。

所以大家又研究了如何在神经网络里记忆数据,典型的方法,比如用rnn那样拉长链条,循环训练,又或者像lstm那样通过一个门来控制数据是否被覆盖掉,这些方法在特定任务上能获取不错的效果,但是缺乏多种任务的通用能力。

然而,随着大模型的发展,发现了另外一个事情,那就是对大模型进行微调,也能收获不错的效果,因为大模型的参数量实在太大了,所以微调仅仅只会导致其中一点点参数变化,而另外大量的神经元节点的冗余起到类似“记忆”的作用,而这样模型不但能够保存原来的训练结果,还能对新的结果进行匹配。

更进一步的,后来又发现了,如果进行适当的提示,能够进一步挖掘大模型的能力,在很多任务上的完成效果会好,最重要的发现是,在超过百亿参数时,大模型由于足够似乎涌现出来一些新的能力,特别是简单的推理能力,而各方面的提升综合在一起,让大模型拥有了一些惊人的能力,典型的就是用足够的代码进行训练后,会拥有生成代码的能力,或是用文本进行训练后,能够生成流畅的较长文本的能力。

然而模型越来越大,这是一个很麻烦的问题,一般的硬件很难支撑如此大型的模型进行运算,导致了只有少数的研究机构才有足够的资源进行这些研究,而且也进一步推高了人工智能或大数据应用的成本。

未来的发展方向这样发展下去,显然是不现实的,纽约大学和苏黎世联邦理工大学的研究人员William Merrill、Alex Warstadt和Tal Linzen最近提出了一个证明,声称「目前的神经语言模型不太适合在没有大量数据的情况下提取自然语言的语义」。

这是一个非常重要的推论,因为越来越大的模型背后,实际上需求的是越来越大量的数据,而这个是有上限的,另外就是人类的算力,也就计算资源越来越难以支撑更复杂的模型。

因此真正要降低成本,实现更加高效的通用人工智能,仍然还是要寻找更加精简而高效的模型才行。

三符风云涌

发表评论