CS/Artificial Intelligence

Non-Autoregressive (NAR)

djs100201 2025. 1. 20. 11:41

Attention / Transformer의 등장으로 엄청난 발전이 있었는데, 그러한 autogressive한 것들의 몇 가지 단점들을 처리하고자 나온 개념인거 같다. 

 

https://nar-tutorial.github.io/acl2022/NAR-ACL%202022.pdf

위 글을 보고 공부한 내용이다.

 

 

대충 입력에서 출력으로 생성할 때 출력에서 생성된 부분들도 recursive / repetitive하게 이용하여 다음 출력을 이용한다는 느낌이다.
Question: What type of food do you like? 
Answer: I -> I like -> I like spicy -> I like spicy food

 

like를 만들 때 이전 문장인 I가 영향을 주고, 마찬가지로 spicy를 만들 때 이전 문장인 I like를 생각해 다음 단어인 spicy를 만들고 이런 느낌이다. 

만약 맨 앞 단어가 I가 아니라 Spicy가 나왔다면 예시 답안은 Spicy food is what I like와 같이 됐을 것이다.

 

당연히 시간 복잡도는 O(n)이 걸린다.

NAR은  Input을 이용해서 Output을 순차적으로 만들지 말고 한번에 병렬적으로 처리한다는 아이디어이다.

시간복잡도는 O(1)로 좋아지지만, 정확도는 당연히 매우 낮아진다.



단순하게 생각해봐도 어순/문법과 관련된 문제가 매우 도드라지게 나타날 것이다. 또한 동일한 단어가 여러번 나올 가능성이 높아진다. AR시스템에서는 순차적으로 만드니까, 이런 문제를 해소하기 쉽다.

 

• The main challenge of NAR generation is “failure of capturing the target side dependency” 라고 함.

 

그래서 NAR의 구현은 mask라는 개념이 추가되는데 보통 seq -> seq학습에 있어서 AR에서는 순차적인 sequence 전부를 학습시킨다. I like dog 라는 문장에서 "I" 다음에 like를 학습하고 "I like" 다음에 dog를 학습한다.

NAR에서는 " I [mask] dog " 를 주고 mask를 맞춰는 식으로 학습한다. 아마 dependency를 학습하는게 필요하기 때문인 것 같다. 

fully 한 NAR은 정확도가 너무 떨어진다. (당연하겠지만)

따라서 모델에 AR layer을 추가하거나 iterative하게 output을 다시 masking해서 만드는 iterative method가 있다.

뒤에는 나중에 더 봐야하기도 하고, 일단은 model architecture의 개념 정도만 봤다.

각각에 대한 모델들에 대한 공부들도 해야되는데... 일단 넘어갔다.
안 좋은 습관인데, 공부가 너무 밀려서 자세하고 deep하게 하지 않고 핵심 idea만 보고 넘어가는 버릇이 생기게 됐다..
이러면 언제인가 나락가는데 두렵다..

 

근데 결론적으로 보면 아직도 정확도가 낮은가 보다. gpt도 AR이다.

속도가 빠르긴 한 것 같다.

 

 


Todo:

Latent variable의 개념 및 공부
뒤에 부분 추가로 공부