这个方法现在被很多文章应用。本文就讲讲这个orthogonal regularization, 可以翻译成正交规范化。

这个方法首先出现在这篇文章里:LCLR2017文章,2018年,也出现于BigGAN

最开始,2014年只是在初始化的时候让卷积核参数都是正交的。 而orthogonal regularization认为参数如果一直保持正交特性将会发挥作用。

为什么要用正交规范化?

在神经网络中,我们都会有矩阵乘法,即使是卷积神经网络CNN中。

正交阵的好处是,如果一个矩阵与一个正交阵相乘,这个矩阵的范数不会变化。(这里不证明)

正交阵的这个特性在梯度反向传播时有一定好处,特别是梯度爆炸和梯度消散的情况。

为什么矩阵范数不变会有助于梯度爆炸或梯度消散呢?

我们举个例子,就拿L2范数来说,L2范数等于矩阵所有元素的平方和的平方根。

我们如果能让卷积核这个矩阵是正交阵,那么特征图这个矩阵的范数就不变了。于是特征图的L2范数不变化,进而使得前后特征图的最大值都不会很大。而梯度反向传播时权重的梯度会用到输入并与之相乘,当然这有助于梯度爆炸。输入值也不会变得越来越小,这样也有助于梯度的保持(不考虑梯度越往后本身就越小,只考虑因为要与输入相乘这个因素)

关于为何保证范数就可以缓解梯度消失和爆炸,现在也还没有完全分析透彻。BigGAN文章中就试图用谱范数来追踪GAN的模型塌陷。

因此,**我们希望在运行过程中,卷积核是一个正交阵。**保持特征图的范数。

如何运用?

正交阵的一个条件是: 范化java 正交规范化_卷积神经网络 其中,范化java 正交规范化_卷积核_02就是正交阵,范化java 正交规范化_卷积神经网络_03

但是,实际过程中,卷积核 范化java 正交规范化_卷积核_02 并不是一个正交阵,因此等式 范化java 正交规范化_卷积神经网络_05 是一个非0矩阵。可以认为非0元素越多,我们越不喜欢这个卷积核。因此,我们求这个等式的某一范数,并认为这个范数是损失,加到总的损失中。

如上面给出的链接中2017年LCLR文章就是使用了L1范数作为损失。就是对每个元素取绝对值,然后求和。

范化java 正交规范化_卷积神经网络_06


BigGAN做了一些改进。它不使用L1范数,而是L2范数。并且认为对角线上有其他约束。下式中,范化java 正交规范化_反向传播_07矩阵 表示每个元素都为1.

范化java 正交规范化_卷积神经网络_08

参考链接:

  1. 正交阵保证范数的不变性
  2. 关于正交规范化的讨论-英文网址
  3. 关于矩阵范数的一些知识