【发布时间】:2021-02-23 18:29:38
【问题描述】:
假设我们有一个包含 10 个维数为 100 的向量的嵌入矩阵,我们强加max_norm=1:
x = Embedding(num_embeddings=10, embedding_dim=100, max_norm=1)
原则上,每个嵌入的范数都应该小于或等于 1。但是,当我打印向量范数时,我得到的值远大于 1:
for w in x.weight:
print(torch.norm(w))
> tensor(11.1873, grad_fn=<CopyBackwards>)
> tensor(10.5264, grad_fn=<CopyBackwards>)
> tensor(9.6809, grad_fn=<CopyBackwards>)
> tensor(9.7507, grad_fn=<CopyBackwards>)
> tensor(10.7940, grad_fn=<CopyBackwards>)
> tensor(11.4134, grad_fn=<CopyBackwards>)
> tensor(9.7021, grad_fn=<CopyBackwards>)
> tensor(10.4027, grad_fn=<CopyBackwards>)
> tensor(10.1210, grad_fn=<CopyBackwards>)
> tensor(10.4552, grad_fn=<CopyBackwards>)
发生这种情况的任何具体原因以及如何解决?
【问题讨论】:
-
max_norm限制了嵌入的范数,这里计算的是权重的范数,不一定是 1。如果你尝试嵌入一个输入,并计算结果嵌入,该范数将是 1 -
如何获得嵌入的规范?