• FeatureMap Viewer以及中心化对统计分布变化的影响讨论


    Introduction

    准备做一个feature map浏览器,可以做些intuitive的观察。code在这里(tool目录下放的支持变形输入的module.py模块)。
    可以支持对feature mapsoftmax output的浏览,其中feature map用了简单的平均化方法(可视化之前进行了归一化),这一方法似乎简洁有效,之前有fine grained的任务是照此进行的。

    Similar Map

    测试的时候,有一项是对feature map进行操作,用的是vgg16。偶然间发现没有经过mean处理的输入产生的feature map和经过的看起来没有什么区别,而probability有明显的变化。

    Figure 1. 经过中心化的featuremap
    Figure 2. 原图数据输入获得的featuremap
    关于`softmax output`的概率输出就不贴出来了,没什么说的。 但两个`feature map`就有些意思了。 ## Exploration 从输入的数据上来看,两者有$50\%$的统计差距,在经过多次非线性映射后,表现出极为相似的map。一个容易想到的解释是,两者间有一个系数的差别,路上和大师兄说起,他第一感觉也是这样。 下面两个图是两个feature map 的`histogram`,这里注明一下,由于被抑制的元素很多(是非常多),所以统计范围区间设置为$[0.01,100]$。
    Figure 3. Histogram-经过中心化的featuremap Figure 4. Histogram-原始图数据的featuremap
    上面第一张是经过中心化的,第二张没有。如果说是有一个系数的差异,似乎更容易接受两个分布是相同的! 如果说还需要确认其中有值得从理论上考察的理由,再来看看`第一个`*Activation*后Map的分布:
    Figure 5. with *mean* Figure 6. no *mean*
    以上两图的也是按照`with mean`,`no mean`排列。大致上两个也可以认为是相同分布。 ### Link 如果再脑补一下的话,还可以想象这些分布是一种正态分布,因为`ReLU`的存在被truncate了,只剩下正半部分,还可以继续脑补,如果权重也是一个正态分布(之前有过观察,发现确实是正太),另外从初始化方式上,也可以认为其符合。 之前Kaiming He有过一个关于初始化方法的[方差理论](https://arxiv.org/abs/1502.01852),暗示在这个问题上还是可以过一把推导瘾的。 # Formulation 令$xsimmathcal{N}(mu,sigma^2)$是未经中心化的输入变量,$zsimmathcal{N}(0,delta^2)$是中心化后的变量,$w$是一个零均值正态分布,独立是必须假设的:) 。需要注意的是,这些假定与实际是相当接近的。 经过一个卷积后,输出$y$的计算式: $$ egin{equation} y_i = sum_jw_{ij}x_{j}label{eq:output_y} end{equation} $$ 下面考察均值和方差两部分的差异。 ## 均值 在上述假定的情况下,均值式计算如下: $$ egin{eqnarray} E[y_i] & = & Eleft[ sum_j w_{ij}x_{j} ight] onumber\ & = & sum_j Eleft[ w_{ij}x_{j} ight] onumber\ & = & sum_j E[w_{ij}]E[x_j] label{eq:mean} & = & 0 end{eqnarray} $$

    方差

    如果方差计算出来也是相同的,那么理论与观察又产生了一种成就感。

    [egin{eqnarray} Eleft[ left( sum_jw_{ij}x_j ight)^2 ight] & = & Eleft[ sum_jleft(w_{ij}x_j ight)^2 + sum_jsum_kw_{ij}w_{ik}x_kx_j ight]label{eq:var1} end{eqnarray} ]

    ef{eq:var1}中第二项根据相关假定,归结为(0),第一项,由独立假定处理。简化为:

    [egin{eqnarray} Eleft[ left( sum_jw_{ij}x_j ight)^2 ight] & = & Eleft[ sum_jleft(w_{ij}x_j ight)^2 + sum_jsum_kw_{ij}w_{ik}x_kx_j ight] onumber\ & = & sum_jE[w_{ij}^2]E[x_j^2] end{eqnarray} ]

    这说明方差与(x)的均值是有关的。
    考虑均值还是比较大的((150~vs.~[0,255])),所以,在两种情况下,情况应该是不同的,而且应该是有比较明显的不同

    Bias

    这里考虑一下bias存在的情况,此种情况对应 ef{eq:var1}中右式加上标量(b),容易得出,bias对方差的计算没有影响。

    关于方差的进一步考察

    上面关于方差的计算在我的直觉上,感觉是一致的,但却与观察上有冲突;我把推导的结论和大师兄讨论了下,他表述了不一样的直觉。我打算先把第一个conv的输入/输出做些对比。

    Figure 7. distribution of the conv1_1's output with subtracting *mean*

    下图是没有经过减均值处理的输出分布:

    Figure 8. distribution of the conv1_1's output **without** subtracting *mean*
    从图中并没有获得令人耳目一新的事物,但比较`title`中`variance`的值,却会有新的发现。 很自然的,这给了我去验证之前推导的公式的激励。我们再来看看第一层的`weight`和`原始`图像的分布:
    Figure 9. distribution of the conv1_1's weight**

    下面这张是原始图像的分布(实际上这里只需要关注方差的变化了,所以是否经过减均值处理并不影响后面想要得出的结论)

    Figure 10. distribution of the raw input image

    Mathematical Formulation

    数据已经足够,在开始进行数值验证前,再做一些假设以及验证方法的说明。
    Note1
    ef{eq:mean}是对某一分量进行的求解,在此处,假定所有(y_i)都是独立同分布的,这样就变成对单个随机变量的求解,记这个随机变量为(y);同理,设置随机变量(w,x),并且用一个常量(c)替换求和操作,于是改写 ef{eq:mean}:

    [egin{equation} E[y^2]=cE[w^2]E[x^2]label{eq:re-formulation-var-x} end{equation} ]

    Note2
    再用(hat{y})表示经过中心化后的变量(z)经过卷基层后的输出随机变量:

    [egin{equation} E[hat{y}^2] = cE[w^2]E[z^2]label{eq:re-formulation-var-z} end{equation} ]

    Note3
    于是验证的方法是比较通过 ef{eq:re-formulation-var-x}和 ef{eq:re-formulation-var-z}计算出来的(c)是否一致。
    ef{eq:re-formulation-var-x}:

    [egin{eqnarray} E[y^2] & = & cE[w^2]E[x^2] onumber\ 10735 & = & 0.04 imes 20208c onumber\ Rightarrow c & = & 13 end{eqnarray} ]

    ef{eq:re-formulation-var-z}:

    [egin{eqnarray} E[hat{y}^2] & = & cE[w^2]E[z^2] onumber\ 2590 & = & 0.04 imes 4583c onumber\ Rightarrow c &= & 14 end{eqnarray} ]

    另外,看看(c)的意义,按照 ef{eq:mean},c应该是元素个数,第一层conv核尺寸为3x3,通道数为3,考虑到稀疏分布,一半应该算正常。

    Conclusion

    1. 在这次讨论中,直观上看起来改变不大的分布,其方差却有了巨大改变,这是产生一种冲突的缘由;
    2. 正态分布的假设在实际数值计算中仍然有相当的效用;
    3. 过程中还发现,对变量的认定将影响数值方法的验证感受,比如对由两个满足正态分布的随机序列逐点相乘得到的序列的均值,会发现两者给人的感受有很大差异。

    Postscript

    这个问题持续了一段时间,我最开始只是想对featureMap Viewer的code做些小结,顺便贴些图片,后面偶然发现两种特征图有极为相似的视觉感受,开始讨论了下相关的数学原理,本来以为结束了,回去却突然发现得出结论的逻辑刚好弄反了(第二天赶忙过来撤下),于是陷入某种僵局,最后发现Conclusion第三条中的观点,后面从直接的输入输出进行了验证。
    这是一个与直觉有冲突的现象。看起来迷乱的猜测最后被计算贯彻。但也可以注意到softmax的输出并不是正态分布的(这很容易想象到,其分布应该相近与一个dirac函数)。
    另外,像前面提到的Kaiming He的工作,提供了一些最初的想法。

    References

    1. He, Kaiming, et al. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." international conference on computer vision (2015): 1026-1034.
  • 相关阅读:
    微信小程序支付、退款
    阿里云虚拟主机配置HTTPS
    日本的医保制度
    贫困与抑郁、焦虑之间的联系与机制
    opencv实战-识别信用卡
    pandas常用命令-学习整理
    kubernates部署(二进制包部署方式)
    kubernates部署(kubeadm 部署方式)
    MySQL的锁机制
    Unity UI适配 之 GridLayoutGroup组件下的内容适配(进度条适配)
  • 原文地址:https://www.cnblogs.com/chenyliang/p/7545529.html
Copyright © 2020-2023  润新知