激活值最大化,用来可视化每个神经元的输入偏好,即找到怎样的输入能够最大程度地激活在特定层的特定神经元。可以启发式地认为,每个神经元都负责提取特定特征,假设已知某个神经元提取的特征,给定一个具有该特征的输入,应该能够在该神经元处得到较大的激活值;反过来,在不知道某个神经元能够提取什么样的特征时,可以迭代地调整输入,使得该神经元的激活最大,从而可视化神经元学到的特征。
算法:迭代地改变输入x来最大化神经元的激活函数,其表达式为
其中表示第i层第j个卷积的激活,是关于输入x的函数,通过梯度上升的方法求最优解
上述方法的一个问题是求解出的可视化输入往往辨识度不是很高,与真实的图像相支甚远(由于我们是在随机初始的输入上进行迭代的,没有任何措施保证能够找到符合真实图像的输入,一些极值像素点,结构化的高频模式等都有可能造成较大的激活值)。为了能够求得与真实图像尽可能想近的解,需要引入相应的正则项。
另外由于训练网络时的「输入图像」是由 原始图像减去整个数据集中样本的均值得到的,所以网络的直接输入x可以认为是零均值的输入。把优化问题定义为
在实际中,通过正则化操作将x映射为更合适的形式,而不必为的导数,x的迭代式为
的不同表达式有以下几种:
-
防止出现一些不正常的极值点 -
用梯度上升法倾向于求得带有高频信息的解,尽管这些解可以在特定神经元取得高的激活值,但它们既不真实,通常也不具备可解释性,所以有必要对这种高频信息进行惩罚,这里用了高斯模糊(也叫高斯平滑)的方法,该操作在图像上的效果相当于透过毛玻璃观察图像。从数学角度看,图像的高斯模糊是将图像与高斯分布做卷积,由于高斯分布的傅里叶变换是另外一个高斯分布,所以对于图像来说是一个低通滤波。 -
经过前面两个正则化处理,分别抑制了图像中的高幅值和高频率的信息,已经得到相对小而且平滑的图像,但求得的的非零像素基本遍布整个图像,无法突出图像中对激活特定神经元起关键作用的部分,所直觉地认为以范数值小的像素作用小,直接设置为零
4.
根据范数值来判断像素的作用有点过于粗暴,因为较小的像素有可能有较大的权重,从而对神经元有大的激活。所以转而求像素对激活的贡献程度,一个简单的方法是把单个像素设置为0,看激活值有什么变化,根据变化值大小来确定像素的贡献,即求,其中是指将第j个像素值设置为0。但这种方法计算效率太低,需要遍历每一个相素做前向运算。所以这里做了一个近似计算,将x与其激活值的梯度按元素相乘,将三个通道累积,再取绝对值,得到与x相同大小的像素贡献图,以此来将贡献值小的像素值设置为0。
实验表明,单独应用以上正则化方法可以改善可视化结果,得到更自然,更具可解释性的图像;而综合地应用多种正则化方法能够得到更好的结果。
网友评论