请问根本理论是什么?


刚好有一篇理论文章可以部分解答这个问题:

Exact solutions to the nonlinear dynamics of learning in deep linear neural networks?

arxiv.org

我们先把研究对象放在非常简单的线性网路动力学上面,获得一个比较严格的解,希望从中获得一些启发(类比到非线性网路)。

这篇文章给出的答案是:如果(且仅当)输入的统计结构与要学习的输入-输出映射的结构一致时,无监督的预训练可以帮助后续的监督学习任务

我们来看具体如何得到:

动力学方程

考虑一个三层的线性网路:

很自然,我们有方程 [公式] 。假定loss是mean squared error,则参数的动力学方程为:

[公式]

[公式]

其中, [公式] 为输入关联矩阵, [公式] 为输入-输出关联矩阵。 [公式] 是一个关于学习率的量。

为了简化参数的动力学方程,我们将输入白化(whiten): [公式] 。再考虑输入-输出关联矩阵的SVD分解:

[公式]

其中 [公式] 反映输出中(output)独立的变化模式(mode),而 [公式] 反映输入中(input)独立的变化模式。为了将输入层和隐藏层(hidden layer);隐藏层和输出层连接起来,我们做如下变换:

[公式]

此时动力学方程被改写成:

[公式]

[公式]

新的矩阵 [公式] 将输入模式和隐藏层连接起来,我们令 [公式] 表示 [公式] 的第 [公式] 列;同理, [公式] 将隐藏层和输出模式连接起来,令 [公式] 表示 [公式] 的第 [公式] 行。那么动力学方程再次被改写成:

[公式]

[公式]

动力学的解

至此我们获得了动力学方程(5)。这组动力学方程可以写成一个能量的梯度下降,这个能量方程为:

[公式]

分析这个能量方程,我们可以获得非常重要的信息。由于是梯度下降,所以能量越低越好。第一项要求[公式][公式] 为合作关系,一起朝向同一个方向且模都要增大;第二项要求[公式][公式]为竞争关系,方向互相垂直。最终这在所有不同的第一层和第二层连接模式之间产生了对称的、成对的排斥力,将网路驱动到一个不同连接模式正交的解耦状态(decoupled regime)。

通过分析分析方程的固定点(fixed-point): [公式] 我们发现一个稳定的固定点:

[公式]

而其余的固定点都是鞍点(saddle point)。因此,当学习收敛时,网路将表示最接近真实输入-输出相关矩阵的 [公式] 阶近似。

预训练和初始化

由于方程(5)对于任意的初始条件并不好解,我们考虑其中容易解的初始化: [公式][公式]平行而[公式][公式]垂直。这种初始化可以通过矩阵的SVD分解获得:

[公式]

其中 [公式][公式] 是对角矩阵而 [公式] 是一个正交矩阵。在这种初始化条件下,通过求解动力学方程,我们发现如果这个乘积从一个很小的值 [公式] 开始,那么它就会显示一个s形上升。 这中上升可以表现出从初始化状态到完全学习状态的急剧转变:

其中不同的曲线族为不同 [公式] 值下面的学习速度,红色的线为解耦初始化下的结果,绿色为非线性网路的结果。

现在我们来看预训练做了什么:

由于预训练中,输出就是输入,此时的输入输出关联矩阵和输入关联矩阵是一样的。所以SVD分解就变成 [公式] ,其中 [公式][公式] 的本征向量。

在预训练中,由于训练时间有限,最终 [公式] ,其中[公式] 是一个对角矩阵,它随著训练逐渐趋於单位矩阵。

所以我们有 [公式] 以及 [公式] ,其中 [公式] 是一个任意一个可逆的矩阵。

然而,当从小的随机权重开始时,每个权重矩阵最终将对整个映射做出大致平衡的贡献。这种平衡对应于 [公式] ,其中 [公式] 是一个任意的正交矩阵。

对比上面的公式(1),我们发现预训练可以达到解耦的(decouped)初始化仅仅需要满足

[公式]

如果(且仅当)输入的统计结构与要学习的输入-输出映射的结构一致时,无监督的前训练可以帮助后续的监督学习任务,这是一个直观概念的精确量化实例。

从实验角度而言,我们需要验证 [公式] 是不是对角矩阵即可。我们观察MNIST是不是满足:

左图为MNIST [公式] 的子矩阵,右图为 [公式] ,的确近似是对角矩阵。

我们注意到,这种分析不太可能完全适用于非线性网路。一些非线性网路在初始化后是近似线性的(例如tanh非线性),因此我们的解可以在学习的早期很好地描述这些动态。然而,当网路进入非线性状态时,我们的解不应该期望保持精确。


希望这个回答可以帮助大家对这个问题有个更好的理解~


我觉得预训练很多模型能work的根本原因就是引入了更多的信息吧。

cv的imagenet预训练也好,nlp的word2vec预训练也好,包括最近非常火的graph embedding对实体进行向量表征也好,都是从模型数据本身之外引入了大量的信息(来自大规模预训练数据集),这个思路其实不止预训练,只要模型合理的利用了新的信息,能够work不是水到渠成的事情吗?比如cw2vec在词之外引入了笔画信息和n-gram信息,只要用的好,理论上应该都是有提升的。


因为深度学习模型并不完全是个黑箱子,在模型设计的时候,网路层所承担的作用,是有模式的。虽然不可能精确到说每一层网路层是做什么的,但是中间层在干什么,大体还是知道的。网路层的模式,可以被复用。

其次,深度学习的学习,本质上还是机器对于数据的一种归纳总结,深度学习这种数据大杀器,要的就是见多识广,而常用来作为预训练数据集的ImageNet,无论是在图像数量还是类别上,其实都比我们想像的要丰富。

迁移ImageNet上预训练的模型到无人驾驶应用上一般会有好的效果,因为ImageNet是一个种类庞大的数据集,且在ImageNet上训练的模型,已经见过了道路、车辆等与自动驾驶任务相关的场景

当然这并不是说迁移学习怎么用怎么好。比如在无人驾驶中,识别车道线和车辆是很常见的任务,但是预训练了其中一个任务的模型,再迁移到另一个任务上时,表现却不一定就好。(想想这是为什么?)

所以,回到本质上,预训练要想有作用,得看两件事 ——数据量大小,数据相似度

而在迁移预训练模型这件事情上,一般采取以下策略:

1. 数据量小,数据相似度高

Fine tune the output dense layer of the pretrained model

2. 数据量大,数据相似度高

Fine tune the pretrained model

3. 数据量小,数据相似度低

Fine tune the lower layers of the pretrained model

4. 数据量大,数据相似度低

Train the model from scratch

最后,最后的最后,预训练模型至少给迷茫的深度学习模型提供了一个不错的初始参数,看成是一种参数初始化的方式也无妨。


这个这个问题也一直使我感到疑惑和惊讶。我的图片数据集和ImageNet差别很大,但是使用在ImageNet上预训练的权值进行微调却得到了不错的效果。我想可能是1.ImageNet囊括了非常多的不同类别的数据,这些数据有各种各样浅层和深层的特征,在ImageNet上训练好的权值很好的提取到了这些特征。

2.不同图片数据之间或多或少都存在共性,包括我们能看到和看不到的,因此在ImageNet上的权值能提取到我的图片数据集上的这些共性特征。

3.ImageNet上特征在别的数据集上可能是不同的表现形式,用ImageNet上预训练的权值在我的图片数据集上提取到的这些特征刚好有一些特征可以很好地区分我的图片数据集中的图片,当然也有一些提取到的特征可能对区分我的图片根本没有用,但是没有进一步实验研究哪些权值对我的数据集有用哪些有用。


如果从底层逻辑来看,deep network很大的困境就是难以收敛,预训练可以看成是一个较为完备的参数初始化过程,尽量使网路不要因为不好的初始化而无法训练收敛。

更加抽象一些的说法就是,通过ImageNet训练之后,你的模型本身「特征抽取」的能力已经具备,接下来就是根据具体任务数据对模型的「判别能力」做调整,使其适应不同的任务。


推荐阅读:
相关文章