在Distill的这篇文章中(https://distill.pub/2017/feature-visualization/),在脚注8中,作者写道:
傅里叶变换可以空间上解相关,但颜色之间仍然存在相关性。为了解决这个问题,我们明确测量训练集中颜色的相关性,并使用Cholesky分解来解相关它们。
我对如何做到这一点感到困惑。我明白,对于任意图像,我可以通过将图像的形状解释为[通道, 宽度*高度]而不是[通道, 高度, 宽度]来计算相关矩阵。但如何考虑整个数据集呢?可以进行平均,但这与Cholesky分解无关。
检查代码让我更加困惑(https://github.com/tensorflow/lucid/blob/master/lucid/optvis/param/color.py#L24)。没有计算相关性的代码,但有一个硬编码的矩阵版本(解相关通过与此矩阵的矩阵乘法进行)。矩阵被命名为color_correlation_svd_sqrt
,其中包含svd
,而在其他地方没有提到SVD。此外,那里的矩阵是非三角形的,这意味着它不是来自Cholesky分解。
对我提到的任何一点的澄清将不胜感激。
回答:
我在这里找到了你问题的答案:如何计算图像数据集上RGB值的3×3协方差矩阵?
简而言之,你计算图像数据集的RGB协方差矩阵,然后进行以下计算
U,S,V = torch.svd(dataset_rgb_cov_matrix)epsilon = 1e-10svd_sqrt = U @ torch.diag(torch.sqrt(S + epsilon))