L2 norm其实是一个比较朴素的应用比较广泛的正则化算法,从过去的传统算法到现在的深度学习,从数据预处理到模型优化,都或多或少的会用到这个思想。其算法的过程也比较简单:
1.求出当前层数据的平方
2.求出当前层数据的平方和
3.将第一步得到的数据除以第二步得到的数据
这样一个简单的过程,会有什么作用呢?首先,经过L2 norm的数据都处于0到1之间。其次,经过L2 norm的数据之间的差异性会被放大。这两个特点能够在某些情况下发挥重要的作用,而在实际应用中,往往就是这样的小trick的累积最终形成了质变。
我所了解的L2 norm在深度学习中的应用,比较著名的有SSD目标检测器。作者在SSD中的conv4_3层后面加上了L2 norm,他的理由是该层的数据尺度与其他层不同,所以需要加上一个norm操作,具体的分析可看作者在github中的回复:
https://github.com/weiliu89/caffe/issues/241
这里我做一些自己的思考和猜想,为什么仅仅是conv4_3层中的数据分布与其他层不同呢?我想原因应该与我遇到的问题相似,在网络的前面层中存在一些操作,使得卷积对样本的差异性敏感度增加,扩大了输出值的分布范围,经过了多层卷积之后,这样的敏感性被逐渐累积放大,直到conv4_3引起了质变。当然,这个想法的合理性还有待验证。