The Hessian Penalty: A Weak Prior for Unsupervised Disentanglement

Pebbles W., Pebbles J., Zhu J., Efros A., Torralba A. The Hessian Penalty: A Weak Prior for Unsupervised Disentanglement. arXiv preprint arXiv 2008.10599, 2020.

disentagle a function 究竟是什么不是很了解, 仅仅关于此方法如何运用二阶信息做一个记录. 其目的是显然的, 就是希望生成器输入的隐变量所调节的特征是独立的.

在这里插入图片描述
如图 逐渐增加(z_6), 其生成图片由外轮廓变成实物, 但不加hessian penalty的GAN似乎缺少一种严格的划分.

主要内容

hessian penalty的目的就是希望令hessian矩阵的非对角线元素小(最好为0).

标量情况

任意函数(G:mathbb{R}^d ightarrow mathbb{R}). 其hessian矩阵(H)的元素为

[ ag{1} H_{ij} = frac{partial^2G}{partial z_i partial z_j}, ]

假设其非对角线元素为0, 即

[ ag{1.5} H_{ij} = frac{partial}{partial z_j} (frac{partial G}{partial z_i}) = 0, quad i ot =j ]

这意味着, (G)关于(z_i)的导函数不含(z_j), 即与(z_j)无关(倘若在考虑定义域内(1.5)均满足), 这说明, 调节(z_j)对调节(z_i)导致(G)的变化没有影响.

为求目标(1.5), 添加如下hessian penalty:

[ ag{2} mathcal{L}_H (G) = sum_{i=1}^d sum_{j ot= i}^d H_{ij}^2. ]

向量情况

此时(G: mathbb{R}^d ightarrow mathbb{R}^p), 设(x_i=(G(z))_i), (H_i)(x_i)关于(z)的hessian矩阵, 则

[ ag{3} mathcal{L}_H (G) = max_i mathcal{L}_{H_i} (G). ]

实际上别的比如(mathrm{mean})也是可以的, 但是作者实验发现用(max)最好.

处于实际(计算量)的考量

如果输入的维度很大的话, 想要直接计算hessian矩阵是不容易的, 作者采用的是一种采样加逼近的方式, 首先

定理1: (Var_v (v^THv)=2sum_{i=1}^dsum_{j ot=i}^d H_{ij}^2).

其中(v)是Rademacher vectors, 即(v)的每个元素独立同分布于伯努利分布((p=1/2)).

故只需用(v^THv)的经验方差来替换(mathcal{L}_H (G))就可以了.

注: 生成器的输入很少, 感觉用不到这个啊.

然后再来看怎么估计一次(v^THv), 便是很直接的中心差分

[ ag{5} v^THv approx frac{1}{epsilon^2} [G(z+epsilon v) - 2G(z) + G(z-epsilon v)]. ]

应用到生成模型中

此思想仅仅运用于训练生成器

[ ag{7} mathcal{L}_G = mathbb{E}_{x sim p _z(z)} [f(1-D(G(z)))] + lambda cdot mathbb{E}_{z sim p_z(z)} [mathcal{L}_H(G)]. ]

代码

原文代码

原文地址:https://www.cnblogs.com/MTandHJ/p/13756335.html