DeltaNet 계열 선형 어텐션 변형 살펴보기
요약
DeltaNet 계열의 선형 어텐션 변형 모델을 분석하며, 기존 선형 어텐션의 가산 쓰기(additive update) 문제를 해결하기 위해 예측 오류를 기록하는 DeltaNet의 메커니즘을 설명합니다. 재구성 손실을 통한 경사하강법과의 수학적 연관성을 다룹니다.
핵심 포인트
- 선형 어텐션의 가산 쓰기 방식은 기존 메모리 값에 중첩되어 간섭을 일으키는 한계가 있음
- DeltaNet은 전체 값 대신 예측 오류(error)를 기록하여 정확한 값 갱신을 유도함
- 학습된 쓰기 강도(beta)를 통해 기존 예측을 목표 방향으로 선택적 교체 가능
- DeltaNet의 갱신식은 재구성 손실에 대한 경사하강법 단계와 수학적으로 동일함
핵심 항등식은 ((\lvert v\rangle\langle k\rvert)\lvert q\rangle=\langle k\vert q\rangle\lvert v\rangle)이며, 모든 과거 key와 value 대신 합산된 외적을 고정 크기 (d_v\times d_k) 상태에 저장함
토큰을 한 번 순회하므로 시퀀스 길이에 선형으로 동작하지만, 그 대가로 소프트맥스의 정규화와 선택성을 잃음
더 정교한 선형 어텐션은 특징 맵과 정규화 항을 사용함
선형 어텐션의 가산 쓰기 문제
정규화된 현재 key에 (\lvert v_t\rangle\langle k_t\rvert)를 기록한 직후 같은 key로 읽으면 (S_t\lvert k_t\rangle=S_{t-1}\lvert k_t\rangle+\lvert v_t\rangle)가 됨
새 쓰기는 메모리가 (v_t)를 반환하도록 대입하지 않고 기존 반환값에 (v_t)를 += 방식으로 더함
이전 상태가 이미 올바른 값을 반환한다면 같은 value가 두 배가 되며, key들이 서로 직교하지 않으므로 각 쓰기가 기존 쓰기와 간섭할 수 있음
선형 어텐션은 압축된 연관 메모리를 제공하지만, 필요한 =에 가까운 갱신 대신 가산 갱신을 수행함
DeltaNet: 값 대신 예측 오류 쓰기
DeltaNet은 새 key에 대한 기존 예측 (\widehat v_t=S_{t-1}k_t)를 먼저 읽고 전체 value 대신 차이만 기록함
(e_t=\beta_t(v_t-S_{t-1}k_t))
(S_t=S_{t-1}+e_tk_t^\mathsf T)
학습된 쓰기 강도 (\beta_t)는 ([0,1]) 범위임
같은 key로 즉시 다시 읽으면 ((1-\beta_t)S_{t-1}k_t+\beta_tv_t)가 됨
(\beta_t=1)이면 정확히 (v_t)를 반환함
더 작은 값은 기존 예측을 목표 방향으로 일부만 이동시킴
갱신은 key 공간에 국소적임
현재 key와 직교하는 query 방향에서는 외적 갱신이 0이므로 응답이 바뀌지 않음
현재 key 방향의 연관만 선택적으로 교체함
재구성 손실로 유도하기
상태 (S)를 선형 사상으로 보고 현재 key-value 쌍의 손실을 (\frac12\lVert Sk_t-v_t\rVert_2^2)로 두면 기울기는 ((Sk_t-v_t)k_t^\mathsf T)임
(S_{t-1})에서 크기 (\beta_t)로 경사하강 한 단계를 수행하면 DeltaNet의 갱신식과 정확히 같아짐
지난 15년간 머신러닝에는 통일된 수학 표기법이 필요했고, 아마 계속 필요했을 것임. 예전에는 세계 각지 연구자들의 논문마다 기상천외한 표기법이 등장해 더 심했음
논문마다 표기법이 달라지면 이해에 마찰이 생김. 적어도 이 글은 처음부터 표기법을 명시적으로 설명하는데, 이렇게 하는 논문은 드문 편임. 처음에는 표기법 전환 기능도 알아채지 못했지만 매우 유용함
한 글자 기호나 명시적인 자료형 대신 ∣q⟩ 같은 문자를 쓰는 전통적 수학 표기법을 선호하는 이유를 이해하지 못하겠음. 간결하다는 장점은 있겠지만, 수식을 의사 코드나 Python 같은 실제 프로그래밍 언어로 쓰면 훨씬 이해하기 쉬울 듯함
이 글은 표기법의 한 측면만 설명할 뿐, 사용한 변수의 정의는 제공하지 않음. k, q, S가 무엇인지 머신러닝을 공부했다면 알거나 추측할 수 있지만, 관련 배경지식이 없으면 글 대부분이 불투명해짐
예전에는 나도 그렇게 생각했지만, 코드보다 수식을 들여다보는 시간이 훨씬 길기 때문에 기호의 의미를 알고 나면 간결한 표기가 읽기 훨씬 쉬움. 문자로 쓰면 어렵기로 유명한 이름 짓기까지 피할 수 있음
“직접 생각해낼 수도 있었던…”이라고 하지만, 존재하지 않던 무언가를 만들거나 결합하는 일은 엄청나게 어려움
누군가 어려운 작업을 끝내 공개하면 곧바로 “별로 어렵지 않네”, “나도 할 수 있었어” 같은 반응이 나오며 모든 것이 단순해 보이기 시작함. 개발하다 새것을 발명했다고 생각했는데, 이미 1970년대에 만들어져 널리 쓰이던 것임을 나중에 발견하는 일도 흔함. 단지 내 경로와 마주치지 않아 존재를 몰랐을 뿐임
내게는 브라-켓 표기법이 모든 내용을 단순하고 직관적으로 만들어 줌. 벡터 표기에서는 어느 쪽이 가로이고 세로인지 헷갈려 덩어리만 따라가다 집중력을 잃곤 했지만, 브라-켓으로는 전체가 매우 직관적이었음
놓친 좋은 글이 많을 것 같아 다른 글도 이 표기법으로 변환해 볼 생각임. 참고로 물리학 박사이며 가벼운 난독증이 있음
“바깥곱은 행렬이고 안쪽곱은 숫자다. 과거의 모든 키와 값을 저장하는 대신 고정 크기 상태 S_t에 바깥곱의 합을 저장한다” 같은 문체를 보면 LLM이 작성한 글로 확신하게 됨
이런 글과 제목을 볼 때마다 나보다 훨씬 똑똑한 수많은 사람에게 깊은 감사와 겸손함을 느낌. 고등학교와 학부에서는 매우 똑똑한 사람으로 통했고 평균보다는 영리하지만, 나를 풋내기로 보이게 할 사람도 수백만 명은 분명히 있음
여기서 똑똑하다는 것은 거대하고 복잡한 개념과 시스템을 머릿속에 담고 추론하는 능력을 뜻하며, 수학자에게 특히 중요한 재능으로 보임
AI 도구가 작업을 점점 더 가속하더라도, 새로운 아이디어 대부분의 원천은 계속 인간일 것으로 봄
친구와 술을 마시며 해본 사고실험은 아이들을 화면과 알고리즘이 공급하는 대중적 콘텐츠에서 격리하고, 최첨단 모델을 훈련하듯 매체와 자료의 품질을 엄격히 통제하는 학습 친화적 환경에서 키우는 것이었음. 아이들을 위한 수도원처럼 만들고 수학, 공학, 컴퓨터과학, 딥러닝 등을 통해 현실에 관한 최신 지식을 가르치는 방식임
결국 첨단 AI 도구를 활용해 지식의 경계를 넓히려면 여전히 매우 똑똑하고 사고가 크게 오염되지 않은 사람이 필요함. AI가 인간을 완전히 대체하리라는 생각은 잘못된 방향임
처음에는 망설였지만 켓 표기법 덕분에 연산이 훨씬 명확해져 마음에 들었음. 다만 이차 어텐션의 d_k처럼 일부 변수에 관한 간단한 복습도 있었으면 좋았을 듯함
처음에는 이 해법을 떠올리지 못했다는 사실에 낙담했지만, JavaScript로 이진 탐색을 직접 작성하는 데도 어려움을 겪는다는 사실을 깨닫고 바로 마음이 편해졌음. Kimi Delta Attention을 내가 생각해냈을 가능성은 전혀 없음
선형대수 코드는 의외로 작성하기 쉬운 측면이 있음. 일반적인 컴퓨터과학 코드처럼 재귀가 복잡하게 얽히지 않고, 모든 변수 사이에 수학적 관계가 있으며, 흔한 수학 개념은 이미 잘 구현된 라이브러리를 이용할 수 있음
반복문도 두세 단계 이상 깊어질 일이 드물고, 그보다 복잡하다면 어차피 라이브러리로 넘기는 편이 나음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기