Net2Net 知识迁移 加速.net六仔平台搭建神经网络的训练

什么是Net2Net?.net六仔平台搭建论坛:haozbbs.com Q1446595067
Net2Net(Net to Net) 是利用知识迁移来解决大型网络的训练速度慢的问题,例如先训练一个小的网络,然后Net2Net,训练一个更大的网络,训练更大的网络时可以利用在小网络中已经训练好的权重,使得再训练大型的网络速度就变的非常快,利用小网络的权重的这个过程就是知识迁移的过程。

真实场景下的机器学习系统,最终都会变成终身学习系统(Lifelong learning system),不断的有新数据,通过新的数据改善模型,刚开始数据量小,我们使用小的网络,可以防止过拟合并加快训练速度,但是随着数据量的增大,小网络就不足以完成复杂的问题了,这个时候我们就需要在小网络上进行扩展变成一个大网络了。
Net2Net

那么如何操作才能使得网络的拓扑结构改变后还能利用旧网络的权重呢?
改变拓扑结构但是不改变网络的效果,对于同样的输入有同样的输出。

如何进行Net2Net?
我们定义两个操作 Net2WiderNet 和 Net2DeeperNet

Net2WiderNet
Net2WiderNet 操作使得某一层更宽,例如让全连接层有更多的单元,让卷积层有更多的channel。
我们希望能够使得这层更宽并且变化后的结构对于同样的输入会得到相同的输出。
WiderNet

如上图,对于一个全连接层来说,如果我们新增了一个节点,那么我们随机从已有节点中选择一个节点copy它的输入权重,使得这个节点的值和已有选择的节点的值相同,对于输出的节点来说,需要把前一层的节点的值求和激活,这时我们发现我们选择的那个节点的值扩大了两倍,于是我们可以把他们各自都除以2,这样我们就实现了全连接层的恒等替换。

对于一个卷积层来说,道理也类似,如果我想增加一个channel,我可以随机选一个channel然后copy它的权重(filter),对于输出时要再进行卷积的filter而言,我们把filter中这两层的channel的权重除以2就可以,这样也在channel增加的情况实现了恒等替换。

Net2DeeperNet
Net2DeeperNet操作使得我们可以增加一层,例如在一个全连接层后面再加一个全连接层,在一个卷积层后面再加一个卷积层。

DeeperNet

对于一个全连接层来说,我们利用一个单位矩阵做权值,添加一个和上一个全连接层维度完全相同的全连接层,把前一个全连接层的值copy过来,实现恒等映射,此时再结合Net2WiderNet,就可以使这一层再变宽。但是我们可能很难实现把这个层变瘦。

对于一个卷积层来说,我们利用一个只有中间位置是1,其它位置全是0的filter,就很轻松的实现了恒等映射。

总结
综上,我们通过定义两个操作,实现了从小网络到大网络的转换,但是我们这个不是一个可以泛化的方法,有一定的局限性,因为不是所有的情况都有事先恒等映射的方法。

但是对于全连接层和卷积层等来说,我们可以利用如上的方法大大加速大网络的训练,尤其是在结合终身机器学习系统或者神经网络架构搜索的方向上。

猜你喜欢

转载自blog.51cto.com/13855600/2137052
net
今日推荐