【发布时间】:2018-03-30 19:04:40
【问题描述】:
假设我想手动计算关于 Kullback-Liebler 散度损失的梯度更新,例如在 VAE 上(请参阅 pytorch 示例文档 here 中的一个实际示例):
KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
logvar 的位置(为简单起见,忽略激活函数和多层等)基本上是从 400 暗度特征向量到 20 暗度特征向量的单层转换:
self.fc21 = nn.Linear(400, 20)
logvar = fc21(x)
关于 fc21 的权重向量,我只是没有从数学上理解你如何取这个梯度。在数学上我认为这看起来像:
KL = -.5sum(1 + Wx + b - m^2 - e^{Wx + b})
dKL/dW = -.5 (x - e^{Wx + b}x)
其中 W 是 fc21 层的权重矩阵。但这里的结果与 W (20x400) 的形状不同。就像,x 只是一个 400 的特征向量。那么我将如何对此执行 SGD? x 是否只是广播到第二个学期,如果是,为什么?我觉得我只是在这里缺少一些数学理解......
【问题讨论】:
标签: machine-learning linear-algebra backpropagation autoencoder