I cannot reproduce this issue using random data:
for _ in range(100):
    feat = torch.randn(1, 1, 224, 224).to(device)
    targ = torch.randint(0, 2, (1, 1, 224, 224)).float().to(device)
    optimizer.zero_grad()
    pred = model(feat)
    loss = criterion(pred, targ)
    print(loss.item())
    loss.backward()
    optimizer.step()

Each loss is a positive number.
Could you post an input and target sample which yields this result?