element-wise
와 directional
방식의 saturation을 각각 구현했음.
python
코드 복사
def saturation(x, factor, method="directional"):
if method == "elementwise":
x = factor * torch.tanh(x/factor)
elif method == "directional":
x_norm = torch.norm(x, dim=1, keepdim=True)
saturation = factor * torch.tanh(x_norm/factor)
saturation = saturation / x_norm
x = x * saturation
return x
그러나 문제 발생: saturation 적용 후에도 계속 원본 소리와 큰 차이가 없는 결과가 나옴.
원인은 quantizers[d].out_proj(latents_saturated)를 업데이트하는 과정에서 +=
을 쓰지 않고 =
을 사용해 누적이 제대로 이루어지지 않았던 것임.