Sparse Attention의 개념과 DeepSeek의 NSA를 소개합니다. # 80 위클리 딥 다이브 | 2025년 2월 26일 에디터 배니 |
|
|
💡 이번주 뉴스레터에는 이런 내용을 담았어요!
- Sparse Attention의 개념을 상세하게 설명합니다.
- DeepSeek의 Native Sparse Attention만의 특징을 정리합니다.
- Native Sparse Attentnion의 성능을 소개했습니다.
|
|
|
Sparse Attention이 다시 유행한다? |
|
|
안녕하세요, 에디터 배니입니다.
DeepSeek 사태가 벌어진 지 한 달이 지났습니다. 여러 논란과 화제를 불러 일으키며 가장 주목 받는 AI 기업 중 하나가 된 DeepSeek. 지난 뉴스레터에서는 VLM 모델과 추론 모델에 대해서 알아봤는데요. DeepSeek의 기술력은 거기서 끝나지 않았습니다. 세간의 관심을 즐기기라도 하듯 최근 여러 편의 논문을 추가로 발표하기도 하고, 한 술 더 떠서 이번주 Open-Source Week를 개최하고 있습니다. 마치 OpenAI가 12일 동안 매일 새로운 기능을 공개했던 것처럼, DeepSeek도 오픈 소스를 하나씩 차례대로 공개하고 있는 것이죠. 물 들어올 때 노를 열심히 젓고 있는 DeepSeek입니다. |
|
|
DeepSeek의 Open-Source Week GitHub 페이지
|
|
|
DeepSeek의 여러 논문 중에서도 이번주에 소개할 논문은 <Native Sparse Attention> 입니다. Native Sparse Attention은 이름에서 알 수 있듯이 Sparse Attention에 관한 논문입니다. Sparse Attention은 Long-Context와 관련된 구조로 지난해부터 다시 연구되기 시작했습니다.
아마 몇몇 분들은 GPT가 초창기보다 훨씬 더 긴 입력을 받을 수 있다는 것을 느끼셨을 것입니다. LLM의 입력값의 길이가 제한되지 않고 길어질 수 있었던 이유가 바로 이러한 Attention 구조가 반영됐기 때문인데요. Sparse Attention은 무엇인지, 그리고 DeepSeek가 공개한 Native Sparse Attention은 어떤 특징을 가지고 있는지 알아보도록 하겠습니다. |
|
|
Sparse Attention이 제안된 것은 꽤 오래 전입니다. 본격적으로 언어 모델이 개발되면서부터 이 개념이 계속 등장했는데요. 그 이유는 Self-Attention이 가지고 있는 치명적인 단점, 바로 O(n^2)의 계산 복잡도 때문입니다. 여기서 n은 입력 문장의 토큰 수라고 보시면 됩니다. 토큰 수가 늘어날 때, 즉 입력이 길어질 때마다 계산 복잡도는 제곱으로 커집니다.
BERT 등의 다양한 Transformer 기반 언어 모델이 제안됐을 당시 일반적으로 시퀀스 길이는 512, 1024 정도 됐는데요. 이는 대략적으로 10-20문장에 해당합니다. 짧은 길이의 입력을 주자니 사용성이 떨어지고, 긴 문장을 넣자니 연산 비용이 부담됩니다. 그래서 Self-Attention의 연산량을 줄이고, 더 긴 입력 문장을 받을 수 있도록 Attention 구조를 개선하고자 했습니다. 그중 하나가 바로 Sparse Attention입니다.
Sparse Attention은 이름에서 알 수 있듯이, 모든 토큰의 상호 작용을 계산하는 것이 아니라 일부만 계산합니다. 전체가 아닌 일부만 계산한다면 당연히 성능이 떨어지지 않을까 우려됩니다. Attention은 연관성이 높은 부분을 참조할 수 있도록 학습하는 것이 핵심입니다. 그리고 보통 문장이 길어질수록 문장간의 연관성은 떨어지게 마련입니다. 이를 다르게 본다면, 특정 부분과 연관성을 가진다고 볼 수도 있죠. 그럼 사전에 중요하지 않은 곳은 제외한 뒤, 특정 부분에만 집중적으로 Attention 연산을 할 수 있지 않을까요? 이것이 바로 Sparse Attention의 기본적인 아이디어입니다.
그렇다면 어떻게 중요한 곳을 골라낼 수 있을까요? 사실 모델을 훈련하지 않고 중요한 부분을 알 수 있다면 Attention 과정 자체가 필요 없었을 것입니다. 그러나 꼭 훈련이 필요한 문제는 아닙니다. 상식적인 방법으로 접근하더라도 어느 정도 중요한 부분을 찾을 수 있습니다.
예를 들어, 각 토큰이 모든 다른 토큰과 상호작용할 필요 없이, 주로 자신과 인접한 토큰들만 고려하는 ‘Local Window’ 방식을 사용할 수 있습니다. 여기서 Local Window란, 각 토큰이 자신의 주변, 즉 인접한 몇 개의 토큰과만 정보를 주고받도록 하는 방식을 의미합니다. 이 방식은 토큰들이 가까운 이웃들과 상호작용함으로써 지역적인 문맥 정보를 효과적으로 반영할 수 있도록 도와줍니다.
반면에 ‘Global Window’는 문서 전체에서 중요한 정보를 담당하는 토큰들끼리 연결되는 개념입니다. Global Window에 속한 토큰들은 문서의 핵심 내용이나 전반적인 맥락을 전달하는 역할을 하며, 멀리 떨어져 있더라도 서로 상호작용할 수 있도록 설계됩니다.
물론 Global Attention 부분은 문서 전체에서 중요한 정보를 전달해야 하므로, 이들 토큰끼리는 기존 Self-Attention과 비슷하게 계산됩니다. 하지만 Global Attention에 포함되는 토큰의 수가 전체 토큰에 비해 극히 적다면, 전체적으로 보면 연산 비용은 훨씬 낮아집니다.
대표적으로, 2020년에 제안된 Longformer는 이러한 Local Window와 Global Window 개념을 조합한 모델입니다. Longformer에서는 각 토큰이 주변의 인접한 토큰들과 상호작용하는 Local Window Attention과, 문서 전체에서 중요한 역할을 하는 토큰들이 서로 연결되는 Global Attention을 함께 사용함으로써, 긴 문서에서도 효율적으로 정보를 처리할 수 있도록 했습니다. |
|
|
Attention의 다양한 패턴들. Longformer는 Local(Sliding) Window와 Global Window를 결합한 방식을 활용한다.
|
|
|
정리하면 Sparse Attention은 기본적으로 ‘모든 토큰이 다 중요하다’는 가정 대신, 토큰의 위치, 문맥 내 역할, 혹은 사전에 정의된 규칙(또는 학습을 통해 얻어진 스코어)을 이용해 중요한 토큰과 덜 중요한 토큰을 구분하는 전략을 사용합니다. 이렇게 함으로써 불필요한 계산은 줄이고, 모델이 실제로 필요한 정보에 집중할 수 있도록 돕습니다. |
|
|
Native Sparse Attention은 무엇이 다를까? |
|
|
최근에 제안된 모델은 2020년 당시보다 적게는 10배, 많게는 100배 이상의 길이를 다루는 경우가 있습니다. 아무리 그 사이에 하드웨어 성능이 좋아졌다고 하더라도 이렇게 긴 문장을 한 번에 처리하기는 쉽지 않죠. 게다가 처리할 수 있다고 하더라도 처리 비용을 감당하기 쉽지 않을 것입니다. |
|
|
Native Sparse Attention 아키텍처
|
|
|
DeepSeek가 제안한 Native Sparse Attention의 아이디어도 앞선 Sparse Attention과 크게 다르지 않습니다. 결국, ‘중요한 부분에 집중한다’는 아이디어가 핵심인 것이죠. DeepSeek 연구진은 동일한 입력을 서로 다른 3개의 Attention에 통과시켜 Sparse Attention을 구현했습니다.
첫 번째로, 토큰 압축(Token Compression) 방식은 입력 시퀀스를 연속된 작은 블록으로 나눈 후, 각 블록 내의 토큰들을 하나의 압축된 벡터로 요약하는 방법입니다. 이 과정에서는 보통 작은 규모의 신경망과 함께 각 토큰의 위치 정보를 반영한 Positional Encoding을 활용하여, 해당 블록의 핵심 의미를 담은 대표 벡터를 생성합니다. 이렇게 생성된 압축 벡터는 원본 시퀀스의 세부적인 정보를 완전히 대체하지는 않지만, 전체적인 맥락을 파악하는 데 충분한 정보를 제공하면서 전체 토큰 수를 획기적으로 줄여 연산 비용을 낮춥니다.
두 번째로, 토큰 선택(Token Selection) 방식은 전체 토큰들 중에서 현재 쿼리와 가장 연관성이 높은 토큰 블록을 선별하는 과정입니다. 이 과정에서는 먼저 압축된 토큰들을 바탕으로 각 블록의 중요도 점수를 산출한 후, 점수가 높은 상위 몇 개의 블록을 선택합니다. 선택된 블록은 원래의 세밀한 표현을 유지한 상태로 다시 고려되어, 이후의 Attention 연산에 사용됩니다. 블록 단위의 선택은 연속적인 메모리 접근을 가능하게 하여, 하드웨어 효율을 극대화하는 동시에, 계산 과정에서 불필요한 연산을 줄여 실제 처리 속도를 높이는 역할을 합니다.
마지막으로, 슬라이딩 윈도우(Sliding Window) 방식은 토큰 압축이나 선택 방식에서 다소 희석될 수 있는 국부적인 세부 정보를 보완하기 위해 도입됩니다. 이 방식은 일정 크기의 고정된 윈도우 내에서 인접한 토큰들 간의 상호작용을 그대로 계산하는 방법입니다. 즉, 모델은 최신 또는 인접한 토큰들에 대해 Dense Attention을 수행하여, 미세한 문맥 변화와 세부적 관계를 놓치지 않고 포착할 수 있습니다. 이러한 슬라이딩 윈도우 처리 덕분에 전체 문맥에서 중요한 전역 정보와 동시에 지역적 디테일을 균형 있게 유지할 수 있게 됩니다.
요약하면, 정보의 핵심을 압축하고, 중요한 정보를 선택한 뒤, 가까이 위치한 정보에 더해 계산한다는 아이디어입니다. 단순하죠? 여기에 더해서, 연구진은 모델 학습 단계에서도 이를 적용할 수 있도록 설계하여 Sparse Attention을 사용했음에도 성능 저하 없이 오히려 더 나은 결과를 보인다고 밝혔습니다. 특히 64K 토큰 길이의 시퀀스 처리에서는 디코딩, 순전파, 역전파 단계에서 각각 최대 11.6배, 9.0배, 6.0배 이상의 속도 향상을 달성해, 계산 비용과 메모리 부담을 크게 줄였습니다. |
|
|
Full Attention을 사용했을 떄보다 좋은 성능을 내는 Native Sparse Attention(NSA)
|
|
|
이렇게 Sparse Attention의 특징에 대해 알아보고, 최근 발표된 NSA에 대해 알아봤습니다. 이렇게 보면 과거의 개념들을 현대에 재해석하여 발전하는 경우가 많아 보입니다. 5년 전에 유행했던 Sparse Attention이 다시금 되살아나서 영향을 끼치고 있다는 사실이 신기하기만 한데요. 컨텍스트 길이가 길어지면서 연산 비용을 줄여야 할 필요성은 늘어나고, 동시에 핵심 정보는 잘 찾아야 하니 Sparse Attention이 다시 주목 받은 것은 놀라운 일이 아닐지도 모릅니다. 한편으로 이러한 연구들이 LLM이 풀어야 할 근본적인 문제에 계속해서 접근하고 있다는 것을 보여주기도 합니다.
Attention 개념이 어느 부분을 참조하여 판단할지 중요도를 알기 위해 제안된 개념이고, NSA와 같은 Sparse Attentnion 역시 더 많은 정보를 압축하여 선택하고 그것과 관련된 중요도를 계산합니다. 둘의 공통점은 ‘관련 있는 정보에 어떻게 접근할 것인가’라는 것이죠. 사실 Transformer를 대체하고자 제안된 Mamba 역시 과거의 중요한 특정 부분을 기억하고자 한다는 점에서 유사한 개념을 보입니다. 이를 응용한다면 반드시 Attention, Mamba가 아니라 새로운 아키텍처가 등장할지도 모르겠습니다. 과연 어떤 기업이 한 번 더 틀을 깨고 앞으로 나아갈지 궁금합니다. |
|
|
SNS를 팔로우하면 최신 소식을 가장 빠르게 확인하실 수 있습니다 😆 |
|
|
deep daiv.
manager@deepdaiv.com
|
|
|
|
|