Flow-Based Generative Model (4) | 패스트캠퍼스 챌린지 48일차
계속해서 Flow 기반 생성 모델에 대해 다루고 있다. 이 모델들은 데이터로부터 invertible하고 미분 가능한 함수로 노이즈가 계산될 때, 이 노이즈로부터 함수의 역함수를 취해 데이터와 유사한 분포를 가진 결과물을 생성할 수 있는 모델이다. Glow는 normalizing flow의 일환으로, NICE/RealNVP를 확장한 Flow이다. 여기서의 핵심은 1x1 convolution layer가 invertible하다는 것이다. 이를 활용하여 batch_size=1에 대해 translation, scale 등의 batch normalization을 수행하고(이를 activation normalization, ActNorm이라 부른다), 1x1 convolution layer의 inverse를 취한 뒤, affine coupling layer를 취하는 것을 골자로 한다. Wave-Glow는 이러한 Glow 모델을 음성 생성에 적용한 모델이다.
한 편, 이러한 flow는 연속적인 변수에 대해 계산하지만, 대부분의 데이터는 이산적으로 표현된다. 가령, 이미지의 경우 pixel 단위로 정의된다. 이렇게 이산 데이터에 대한 성능 평가는 연속확률분포를 대상으로 하는 Flow 함수로는 중첩 등의 문제로 제대로 진행할 수 없다. 따라서, 데이터에 실수 노이즈를 추가해 dequantization하는 과정이 필요하다.
이러한 dequantization의 간단한 예가 uniform dequnatization이다. 이는 데이터 x와 uniform distribution을 따르는 노이즈 u에 대해 nosiy data y = x + u로 평가하는 것을 뜻한다. 이를 통해 이산 확률 질량을 확률밀도의 적분으로 근사하게 되며, 이는 convex 함수에 대해 정의된 Jensen's Inequality에 의해 학습 과정에서 데이터의 노이즈보다 크지 않은 확률을 가지게 된다. 결국, 연속 모델이 degenerate하게 충돌하는 것을 방지하게 되는 것이다.
사실 Flow는 다른 딥러닝 네트워크에 비해 수학적 원리가 많이 가미되어 이해하기도 어려웠고, 자연어를 주로 다루었기 때문에 본 적도 없었다(Flow를 통해 자연어 음성 생성을 해 내긴 하지만, 음성 처리와 자연어 처리는 현재 마치 다른 영역처럼 떨어져 있는 실정이다). 하지만 Flow는 엄연히 중요한 자리를 차지하고 있는 딥러닝 모델이며, 특히 음성 생성에서의 활용도로 인해 알아두면 좋을 것 같다는 생각이 들었다. 다만 이 내용을 완전히 이해하지는 못해서 더 많은 공부가 필요할 것 같다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다. https://bit.ly/37BpXiC