본문 바로가기

music/music generation

[논문리뷰] Music Transformer: Generating Music with Long-Term Structure (ICLR19)

논문제목: Music Transformer: Generating Music with Long-Term Structure
저자: Cheng-Zhi Anna Huang, Ashish Vaswani, Jakob Uszkoreit, Noam Shazeer, Ian Simon, Curtis Hawthorne, Andrew M. Dai, Matthew D. Hoffman, Monica Dinculescu, Douglas Eck
소속: Google Brain
발표: ICLR 19
논문: https://arxiv.org/abs/1809.04281
블로그: https://magenta.tensorflow.org/music-transformer
supplement: https://storage.googleapis.com/music-transformer/index.html

- 음악에는 반복이 중요함. 반복이 있어야지 사람들이 기억함. 역시 음악에는 훅이 있어야! 근데 트랜스포머같은 셀프 어텐션 기술들은 반복같은 구조를 발견하는데 좋음! 오, 그러면 트랜스포머를 이용하면 반복도 되는 음악을 만들 수 있지 않을까?
- 일단 바닐라 트랜스포머에서는 인풋 데이터에서 위치가 딱 정해져 있었음(사인코사인써서 인코딩함) 그런데 음악같은 데이터에서는 상대적인 위치가 더 중요함! 근데 상대적인 인코딩은 [Shaw18]에서 먼저 제안함. 어차피 같은 구글논문이고 하니 이걸 써보도록함
- 근데 음악 데이터는 텍스트 데이터에 비해서 길이가 너무 김. 알다싶이 트랜스포머에서는 인풋의 길이가 길면 쥐약. [Shaw18] 논문에서는 메모리가 $O(L^2 D)$만큼 필요한데, 이거 잘 보다보니 $O(LD)$로 줄일 수 있을것 같은데? 음악 뿐 아니라 트랜스포머 알고리즘적으로도 뭔가 제안할 수 있을 것 같음(어차피 2저자가 Vaswani). 
-  결국 1분짜리 음악(2000토큰)을 만드는 데 성공! 별거 아닌 것 같지만 비슷한 주제를 가진 최신 구글 논문[Oore18]에서는 LSTM을 사용해서 최대 15초짜리밖에 못만들었음. 4배나 길어진 것임.

Story

많은 사람들이 음악을 시퀀스 모델을 이용해서 만들어보고자 함. HMM, RNN, LSTM등 여러 모델들이 사용됨[Oore18][Hadjeres17]. 폴리포닉(여러 성부로 되어있는 일반적인 형태) 음악의 경우는 각 성부를 순서대로 인터리빙하거나 아니면 2D형태로 표현하곤 함. 2D 피아노롤같은 표현법은 사실 이미지같은 형태여서 이를 GAN[Dong18]이나 NADE[Huang17]을 이용하기도 함. 하지만 아직 트랜스포머를 쓰는 경우는 못봤음.


[Lattner18]에서는 self-similarity를 이용하여 음악 구조를 표현하였는데, 사실 self-attention이 보다 일반적인(generalization) 버전이라고 할 수 있음. 왜냐하면 self-similarity에서는 $Q$와 $K$에 같은 프로젝션을 쓰는데반해 self-attention에서는 서로 다른 프로젝션을 쓰기 때문. 고로 트랜스포머를 쓰면 더 좋을 듯?

 

Data Representation

일반적으로 음악은 화성으로 되어있기 때문에 이를 어찌 잘 표현을 해야함. 이 논문에서는 4성부 바흐의 코랄의 경우 16분음표를 기준으로 시간을 나누고(시간 해상도) 미디 피치 넘버로 저장함. 그러면 행렬형태로 저장이 되는데, 래스터스캔방식(아래로 다음으로 오른쪽으로)으로 직렬화할 수 있음. 피아노 연주(piano-e-competition)의 경우는 실제 연주이기 때문에 시간도 오묘하고 음의 세기(다이나믹)도 저장해야함. 위와 같은 그리드방식으로는 너무 잘게 쪼개야 하기 때문에 이번에는 미디 이벤트같은 방식으로 저장함(사실 [Oore18]에서 제안한 방식임). 즉 NOTE_ON, NOTE_OFF, TIME_SHIRT, SET_VELOCITY등의 이벤트들로 각 음을 표현함(논문 appendix에 자세하게 설명되어 있음)

 

Relative Positional Self-Attention

[Shaw18]에서는 각 두 포지션 사이의 상대적인 거리를 이용하여 relative position representation 방식을 제안함. 사실 인풋 데이터간에 Fully Connected Edges를 만들어서 서로 서로 상대적인 거리를 저장하는 것임. 그리고 이 상대적인 위치 임베딩 $E^r$ 을 각 헤드마다 배우게 됨. 이 임베딩들은 $L \times L$ 형태의 행렬 $S^{rel}$로 표현되고 $QK$에 더해지면 됨.

위가 유명한 바닐라 트랜스포머 버전. 아래가 $S^{rel}$이 추가된 Relative Position버전. 

 

 

Memory Efficient Implementation of Relative Position-based Attention

$S^{rel} = QR$ 로 구해지는데, 이 $R$이 모든 키와 쿼리들 간에 상대적인 거리에 해당하는 임베딩을 지닌 행렬이어서 크기가  $L \times L \times D_h$ 임. 즉 이걸 구하려면 메모리가 $O(L^2D)$가 필요함! 음악처럼 긴 시퀀스를 적용하려고 하니 메모리가ㅎㄷㄷ.  그런데 이걸 잘보니 $QR$을 구하는거랑 $QE^r$ 을 구하는거랑 비슷한거 아님? 그리고  $QE^r$은 $L \times D_h$ 공간만 있으면 됨. 차이는 $QR$은 절대적인 위치를 고려해서 계산하는 것이고, $QE^r$은 상대적인 위치를 고려하는 것. 따라서 $QE^r$로 계산하고 이를 절대적인 위치로 변경하면 됨. 

알록달록 색깔들이 예쁜데, 아랫줄에 $QE^r$ 아래에 동그라미 9개(3x3)가 어찌어찌 바뀌어  $S^{rel} j-i$ 아래에 동그라미 9개(3x3)으로 변환되는 과정만 보면 됨. 앞에는 상대적인 위치, 변환된 후에는 절대적인 위치. 잘보면 데이터들이 기울어진 것을 볼 수 있음. 논문에서도 skewing이라고 부름. 자 이렇게하면 메모리를 엄청 아낄 수 있음(제곱과 선형의 차이는 정말 ㅎㄷㄷ). 하지만 시간 복잡도는 똑같이 $O(L^2D)$임. 하지만 실제적으로는 빅오보다는 실제 시간이 중요한 것이겠지. 650길이의 인풋 테스트 결과 속도도 6배 빨라졌다고 함.

 

Relative Local Attention 

여기서 더 줄이고자 로컬버전의 어텐션을 사용함. 어차피 전부 다 보는건 너무 시간 및 공간 소모가 큼. 전체 인풋을 $M$개의 블럭으로 나누고 이 안에서만 어텐션을 계산함. 물론 전부다 보면 좋겠지만 현실은...

 

Experiments

J. S. Bach Chorales

구글이 좋아하는 바흐의 4성부 코랄 데이터로 먼저 실험을 진행. 16분음표 단위로 쪼갤 수도 있고 바로크음악이니 상대적으로 간단하게 실험하기에 좋음. 상대 위치 인코딩을 사용하니 바닐라 트랜스포머보다 결과가 상당히 많이 개선되었다고 함. CNN을 사용하는 Coconet과도 비교를 하였음.

NLL(=Negative Log Likelihood)

 

Piano-E-Competition

다음으로  Piano-e-Competition 데이터를 이용하였음. MAESTRO 데이터셋[Hawthorne19] 만들때 사용하기도 한 데이터로 퀄리티 좋은 피아노 연주 미디 데이터를 구할 수 있음. 2000토큰 시퀀스를 랜덤하게 자르고 data augmentation(transposition+time stretch)도 좀 했음. 동료 연구자의 PerformanceRNN[Oore18]과  LookBack RNN[Waite16]과 비교를 했음. 역시 결과는 제안한 방법이 가장 좋고 상대위치 어텐션이 그냥 어텐션보다 더 좋았음. 로컬버전이랑 글로벌버전 트랜스포머도 별 차이가 안났음. 

 

맨 위가 논문에서 제안하는 방법, 반복도 잘 표현됨. 중간은 바닐라 트랜스포머. 절대적인 위치를 사용하는지라 시간이 지나면 안습ㅠㅜ. 마지막은 PerformanceRNN. LSTM을 사용해서 역시 기억력에 한계가 있음.

 

Human Evaluations

리스닝 테스트도 진행함. 3명에게 총 180개의 비교를 해달라고 함. 역시 이 모델이 실제 데이터 다음으로 좋았음.

상대위치를 쓰지 않은 그냥 트랜스포머는 그냥 슬플뿐

 

트랜스포머는 이름처럼 심볼릭 음악을 생성하는 데에도 강력했음.
그런데 이걸하다보니 트랜스포머 메모리 줄이는 법까지 덩달아 발견한듯? 

 

  • [Waite16] Elliot Waite. Generating long-term structure in songs and stories. https://magenta. tensorflow.org/2016/07/15/lookback-rnn-attention-rnn, 2016.
  • [Hadjeres17] Gaëtan Hadjeres, François Pachet, and Frank Nielsen. Deepbach: a steerable model for bach chorales generation. In International Conference on Machine Learning, pp. 1362–1371, 2017.
  • [Dong18] Hao-Wen Dong, Wen-Yi Hsiao, Li-Chia Yang, and Yi-Hsuan Yang. Musegan: Multi-track sequential generative adversarial networks for symbolic music generation and accompaniment. In Proceedings of the AAAI Conference on Artificial Intelligence, 2018.
  • [Lattner18] Stefan Lattner, Maarten Grachten, and Gerhard Widmer. Imposing higher-level structure in poly- phonic music generation using convolutional restricted boltzmann machines and constraints. Journal of Creative Music Systems, 2(2), 2018.
  • [Oore18] Sageev Oore, Ian Simon, Sander Dieleman, Douglas Eck, and Karen Simonyan. This time with feeling: Learning expressive musical performance. arXiv preprint arXiv:1808.03715, 2018.
  • [Shaw18] Peter Shaw, Jakob Uszkoreit, and Ashish Vaswani. Self-attention with relative position representa- tions. In Proceedings of the Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, volume 2, 2018.
  • [Hawthorne19] C.Hawthorne, A.Stasyuk, A.Roberts, I.Simon, C.-Z.A.Huang, S.Dieleman, E.Elsen, J.Engel, D.Eck. Enabling factorized piano music modeling and generation with the maestro dataset. ICLR 2019. [논문리뷰]