具有有界条件数权重的感知器



N为一个(线性)单层感知器,其权重矩阵w维度为nxn

我想在布尔约束下训练N权重w条件数k(w)在优化的每一步都保持低于给定阈值k_0

是否有一个标准的方法来实现这个约束(在pytorch,说)?

在每个优化器步骤之后,遍历参数列表并重新调整所有矩阵:

(代码查看了几秒钟,但没有测试)

def recondition_(x, max_cond): # would need to be fixed for non-square x
u, s, vh = torch.linalg.svd(x)
curr_cond = s[0] / s[-1]
if curr_cond > max_cond:
ratio = curr_cond / max_cond
mult = torch.linspace(0, math.log(ratio), len(s)).exp()
s = mult * s
x[:] = torch.mm(u, torch.mm(torch.diag(s), vh))

训练循环:

...
optimizer.step()
with torch.no_grad():
for p in model.parameters():
if p.dim() == 2:
recondition_(p, max_cond)
...

最新更新