对于batchnorm层的理解
batchnorm层的作用是什么?
batchnorm层的作用主要就是把结果归一化,
首先如果没有batchnorm ,那么出现的场景会是:
过程模拟
首先batch-size=32,所以这个时候会有32个图片进入resnet.
其次image1进入resnet50里面第2个卷积层,然后得出一个结果,这个结果是一个feature,这个feature是一个猫,此时他的位置是在坐标轴的左上角
接下来同一个batch里面的
image2进入resnet50里面仍然是第2个卷积层然后得到一个结果,这个结果必然也会是一个feature,同时,此刻的feature是一个狗的模样,此时他的位置在坐标轴左中的位置
以此这样,32个图片都在第一个卷积层做完了卷积
接下来可以讲一下什么是卷积和激活
卷积其实就是匹配的过程,卷积中的一个weight就是一个特征提取器,所谓的特征提取器就是看你像不像,如果像(),那么激活你,如果不像,那么把你kill掉
像: relu(w*x)>0 即w*x>0 而w*x>0,也就是w,x同号,如果这个w是找眉毛,同号,激活,得到结果,如果结果正确,那么让这个w更大,他对于眉毛的提取会更好,如果不正确,那么让这个w变小,也就是说这个w可以废了,因为这个w也只是对于这个feature进行作用,如果找了半天,错了,那就不用你找了,所以让w减小,如果减少到0,那么就永远不会被激活了
不像:relu(w*x)<0 即w*x<0 而w*x<0, 也就是w,x异号,如果这个w是找眉毛,异号,不激活,w不改变,
这样就明白了卷积和激活的作用,就是在不停的比对,并对这个比对给予判断
那么我们对于bn的作用就逐渐明朗了,bn的作用是要在不影响现实分布结果
这句话要分成两点看,一个是前提,一个是作用
前提:不能影响真实分布,所以要对一整个batch进行分布,这样才会保证猫和狗的分界线是一样的,只是把分界线从左上角平移到了原点附近,这个不会影响最终结果,因为卷积和激活就是比对,判断。在哪比对不是比对,所以不影响结果。
作用:比对谁?答案简单,即比对猫和狗,那么比对猫和狗的时候,第1个bacth从第1个卷积层出来的结果可能和第2个bacth从第1个卷积层出来的结果是不一样的(可能会跑到右上角),导致的原因是训练不充分。
那么第二个卷积层第一次学习的weight其实都会变得有问题,因为此刻第二个卷积层在面对第一个batch时,学习到的结果是让某一部分激活,但是他激活的是第二象限的坐标,如果面对第一象限的坐标,那么肯定激活的结果与之前产生了颠倒。而第3个batch如果又是第二象限,那么又出现了颠倒,第4个batch在第一象限,那么激活的结果又出现了颠倒,这样学习的很慢,对于weight要求很高。最终很久很久之后可能才能学到一个既能比对第二象限,又能比对第一象限的卷积层,但是结果未必好,
而如果有bn,那么每次都把分布放回到原点附近,那么在不改变真实分布的前体下,又能不会让各个batch有更大的偏差
keywords:
比对,激活,batch,不能让激活层手忙脚乱