브라우저에서 6억 파라미터 LLM의 토큰별 어텐션 합산값을 즉시 시각화하는 데모
- LLM Attention Visualization은 생성된 토큰을 누르거나 마우스를 올리면 그 토큰 생성에 영향을 준 이전 토큰을 불투명도로 표시하는 브라우저 기반 데모임
- 표시값은 각 이전 토큰의 어텐션 가중치에 값 벡터 크기를 곱한 뒤 모든 헤드와 층에서 합산한 수치이며, 작성자는 한 수치로 크게 단순화했으므로 모델 행동 해석용 도구는 아니라고 밝힘
- 기본 예시에서 주소와 날짜처럼 원문을 그대로 복사한 출력 토큰은 원문 토큰의 값이 두드러지며, 6억 파라미터 모델도 힌트가 있으면 JavaScript 함수 대부분을 재현함
- 앱은 React와 Transformers.js로 로컬 생성하며 입력은 서버로 전송하지 않음. 계측한 모델 약 617.7MB는 첫 실행 때 브라우저 캐시에 한 번 내려받음
- 일반 생성 루프 대신 내부 값을 보존하는 생성 루프를 구현했고, ONNX 파일을 수정해 기본 출력으로 노출되지 않는 내부 값을 꺼냄. 다운로드 대기 문제 때문에 미리 생성한 예시도 제공함
Hacker News opinions
값 벡터의 크기가 크면 영향력도 크다고 보는 단순화는 꽤 의심스러움.
나도 그 해석에는 동의하지 않음. 그래서 주의 문단을 넣었고, 모델 행동을 해석하는 도구라기보다 흥미로운 패턴을 보는 시각화로 생각함.
더 깊게 보려면 Transformer Circuits의 2025 attention QK 자료를 보는 편이 나음.
두 구절의 정보를 합치는 모습은 이런 도구가 아니면 보기 어렵겠음. 다만 모든 층을 합산하면 먼저 쌓인 층이 많아서 뒤쪽 층의 주의가 묻히지 않을까?
그 문제는 있을 듯함. 어느 층까지 합산할지 고르는 조절 기능을 넣어볼 생각이고, 지금은 단순한 상관관계만 보임.
실제 계산식이 궁금함. 헤드와 층이 많은데 직관에 맞는 하나의 수치를 어떻게 고른 건지, 가중 평균인지 절제 실험인지 알고 싶음.
계산은 단순함. 값 벡터 크기에 QK 내적을 곱하고, 모든 어텐션 헤드와 층에서 합산한 값임. 처음에는 더 복잡한 실험이 필요할 줄 알았는데 이 정도만으로도 패턴이 보였음.
어텐션을 책과 영상으로 여러 번 봤는데, 지금까지 본 설명 중 가장 직관적인 예시였음.
문맥 안의 모든 토큰 관계를 추적한다면 문맥 길이에 따라 계산량이 가 되는 건가?
완전한 self-attention은 맞음.
다만 KV 캐시가 있으면 이전 토큰 표현은 미래 토큰 때문에 바뀌지 않으니 캐시할 수 있음. 전체 문맥을 생성할 때 총 작업량은 선형이고, 매 forward pass 비용은 상수 수준으로 볼 수 있음.
금요일에 이 내용을 가르쳐야 해서 딱 맞음. 가중치만으로 어텐션을 직관적으로 설명하기 어려운데 이 시각화는 도움이 됨.
한 단계씩 상태를 보고 싶었는데 애니메이션이 너무 빨랐음. Chromium/Linux에서 일시정지를 누르면 멈추는 대신 처음 상태로 리셋되더라. 0.25배속이나 한 단계씩 넘기기 버튼이 있으면 좋겠음.
이미지 모델에서도 어텐션을 뽑아볼 수 있는데, 해보면 재미있고 꽤 흥미로운 결과가 나옴.
이 어텐션이 모델이 이런 답을 내는 이유를 설명한다고 봐도 되는지 궁금함. 그 점은 논쟁이 많고, 이미지 어텐션 시각화도 설명력이 좋지 않았던 기억임.