2P by GN⁺ | ★ favorite | 댓글 1개
  • Google DeepMind의 Mixture-of-Depths(MoD) 는 트랜스포머 언어 모델이 모든 토큰에 같은 FLOPs를 쓰지 않고, 레이어마다 필요한 토큰만 attention과 MLP 계산에 참여시키는 방식임
  • 레이어별 라우터가 토큰마다 스칼라 가중치를 만들고, 미리 정한 top-k 용량 안의 토큰만 블록을 통과하며 나머지는 residual connection으로 우회함
  • k를 사전에 고정해 계산 그래프와 텐서 크기는 정적으로 유지하면서도, 문맥에 따라 토큰별 계산 배분은 동적으로 달라짐
  • 실험에서 MoD는 isoFLOP 기준 기본 transformer보다 같은 학습 시간에 더 낮은 loss를 내거나, 같은 성능에서 forward pass당 FLOPs를 줄여 학습·샘플링 step을 빠르게 만들 수 있었음
  • 가장 좋은 설정은 12.5% 용량 블록을 격블록(every other block)에 적용하는 쪽이었고, auto-regressive sampling에서는 predictor 기반 라우팅으로 top-k의 비인과성 문제를 줄임

MoD가 겨냥한 계산 낭비

  • 일반적인 transformer 언어 모델은 forward pass에서 모든 토큰에 동일한 계산량을 사용함
  • MoD는 모든 토큰과 시퀀스가 예측에 같은 시간과 노력을 요구하지 않는다는 전제에서, 전체 계산 예산을 줄이면서 필요한 토큰에 계산을 배분함
  • 기존 조건부 계산(conditional computation)은 동적 계산 그래프를 만들 수 있어 현재 하드웨어가 선호하는 정적 계산 그래프와 맞지 않을 수 있음
  • 사용자가 학습 전에 총 계산 예산을 정하면, 모델은 그 안에서 토큰별·레이어별로 계산을 어디에 쓸지 학습함
    • 계산량, 메모리 사용량, forward pass당 FLOPs를 사전에 예측할 수 있음
    • 라우팅 대상 토큰은 입력 문맥에 따라 달라짐

라우팅 구조와 계산 절감 방식

  • MoD는 MoE transformer처럼 라우터를 쓰지만, 여러 expert 중 하나를 고르는 대신 토큰을 두 경로 중 하나로 보냄
    • attention과 MLP를 포함한 표준 블록 계산
    • 값을 그대로 넘기는 residual connection
  • residual connection은 계산 비용이 낮고, 블록 출력은 입력값으로 결정됨
  • 블록의 capacity를 전체 토큰 수 T보다 작게 설정하면 기본 transformer보다 forward pass당 FLOPs가 줄어듦
    • 예를 들어 capacity를 T/2로 줄이면 attention의 query-key 행렬 곱은 T² 대신 (T/2)²가 되어 FLOPs가 25% 수준이 됨
  • capacity를 0으로 만들면 매우 빠르지만 대부분의 transformer 파라미터를 쓰지 않아 성능이 나빠지고, capacity를 T로 두면 기본 transformer와 같아짐
  • 목표는 이 두 극단 사이에서 기본 transformer와 같거나 더 나은 성능을 내면서 step 속도를 높일 수 있는 지점을 찾는 것임

top-k expert-choice 라우팅

  • 각 레이어 l에서 라우터가 토큰 임베딩마다 스칼라 가중치를 생성함
  • 사용자가 정한 capacity C에 따라, 시퀀스 토큰 중 top-k에 해당하는 토큰만 attention과 MLP 계산에 참여함
  • 선택되지 않은 토큰은 블록 계산을 건너뛰고 residual connection으로 다음 레이어에 전달됨
  • 이 방식은 expert-choice routing에 기반함
    • token-choice routing은 토큰이 경로를 고르므로 load balancing 문제가 생길 수 있음
    • expert-choice routing은 각 경로가 top-k 토큰을 고르므로 capacity가 정확히 채워짐
  • MoD에서는 경로가 사실상 “블록 계산”과 “우회” 두 가지라, 단일 top-k 연산으로 토큰을 두 집합으로 나눌 수 있음
  • 라우터 가중치는 블록 출력에 곱해져 gradient path 위에 놓이고, 언어 모델링 학습 과정에서 경사하강법의 영향을 받음

샘플링에서 생기는 비인과성 문제

  • expert-choice routing의 top-k 연산은 비인과적(non-causal)
    • 어떤 토큰이 top-k에 들어가는지는 이후 토큰의 라우터 가중치까지 알아야 결정됨
    • auto-regressive sampling에서는 미래 토큰 정보를 사용할 수 없음
  • 이를 피하기 위해 두 가지 방법을 실험함
    • 라우터 출력의 sigmoid가 top-k 선택 여부를 예측하도록 하는 binary cross-entropy 보조 손실
    • 라우터와 같은 입력을 받되 stop-gradient를 적용한 작은 보조 MLP predictor
  • 첫 번째 방법은 주 언어 모델링 objective에 약 0.2~0.3% 영향을 줌
  • 두 번째 predictor 기반 방법은 언어 모델링 objective에 영향을 주지 않았고, step speed에도 유의미한 영향을 주지 않음
  • 보조 예측 과제는 실험적으로 빠르게 99% 정확도에 도달함

실험 결과와 관찰

  • 초기 실험은 총 6e18 FLOPs 예산에서 MoD 하이퍼파라미터를 찾는 방식으로 진행됨
  • 최적 MoD 설정은 격블록마다 라우팅을 적용하고, top-k를 256으로 둔 경우였음
    • 시퀀스 길이 2048 기준 256개 토큰, 즉 12.5% 만 attention과 MLP를 통과함
    • 나머지 1792개 토큰, 즉 87.5% 는 블록을 우회함
  • 220M 파라미터 MoD 변형은 isoFLOP 최적 baseline보다 약간 더 좋은 성능을 내면서 학습 중 step 속도가 60% 이상 빨랐고, 동일 하드웨어에서 전체 학습 wall-clock time은 거의 같았음
  • 6e18, 2e19, 1e20 FLOPs의 isoFLOP 분석에서도 MoD의 FLOP-optimal 모델은 baseline보다 더 많은 파라미터를 가지는 경향을 보임
  • 같은 성능 또는 더 낮은 loss를 내면서 forward pass당 FLOPs가 더 적은 MoD 변형들이 존재함
  • step 속도 향상은 두 가지 요인에서 나옴
    • 일부 토큰이 블록을 우회하므로 같은 모델 크기에서 FLOPs per parameter가 줄어듦
    • baseline과 같은 성능을 내는 더 작은 MoD 변형을 고를 수 있음
  • stochastic routing을 쓴 MoD는 기본 transformer와 일반 MoD보다 크게 낮은 성능을 보여, 학습된 라우팅이 중요했음
  • auto-regressive 평가에서는 256,000개 시퀀스, 500M 토큰의 held-out data를 사용했고, predictor 기반 라우팅으로 바꿔도 성능 저하는 작았음
  • MoD는 MoE와 결합해 Mixture-of-Depths-and-Experts(MoDE) 로도 구성할 수 있음
    • staged MoDE는 attention 전에 토큰을 블록으로 보낼지 우회할지 결정함
    • integrated MoDE는 기존 MLP expert 사이에 “no-op” expert를 넣어 MoD 라우팅을 통합함
  • 라우팅 분석에서는 일부 토큰이 여러 블록을 자주 통과하고, 다른 토큰은 가능할 때마다 우회하는 패턴이 관찰됨
  • 블록을 자주 통과하는 토큰은 출력 예측의 entropy가 더 높은 경우와 상관되는 예비 분석 결과가 있었고, 이는 예측이 더 어려운 토큰일 가능성과 연결됨

댓글과 토론

Hacker News 의견들
  • 더 복잡한 라우팅은 확실히 더 흔해질 것 같음
    특히 언젠가는 전문가 집합을 다시 통과시키는 재귀 라우팅으로 갈 것이라 봄. 앞으로는 '사고 과정(chain-of-thought)'이 모델 내부에서 재귀적으로 일어날 듯함

    • 이런 가상의 객체는 Recursive Neural Networks라고 부르면 되겠음
    • 여기서 묘사한 건 Universal Transformers 계열 연구와 조금 비슷해 보임. 입력 임베딩을 하나의 트랜스포머 블록에 여러 번 통과시키고, 별도 모듈이 임베딩이 충분히 “익었는지” 판단해 꺼내는 방식임
      “전문가”라는 아이디어와 더 가까운 것으로는 작년 Sparse Universal Transformers 논문이 있는데, Universal Transformer와 희소 전문가 혼합을 결합해서 게이팅 메커니즘이 어떤 트랜스포머 블록을 어떤 순서로 쓸지 결정함
      내 전문 분야는 아니지만, 제대로 학습시키기 까다롭고 일반 트랜스포머와 비슷한 결과를 내려면 추론 때 전체 연산량이 더 필요한 것으로 이해했음. 그래도 흥미로운 방향이고, 토큰당 계산 단계 수에 상한이 있다는 점은 고전적 트랜스포머 구조의 큰 단점 중 하나라고 봄
    • 이게 아직 안 된 이유는 학습 시점에 재귀를 몇 번 해야 하는지 결정할 방법이 없기 때문이라고 봄
      무작위 횟수를 고르거나 여러 재귀 깊이를 시도하면 출력이 “흐려짐”. 즉 어떤 층의 출력이 최종 결과에 중요한 정보를 내야 하는지, 아니면 다음 재귀 라운드에 가장 좋은 입력을 내야 하는지 알 수 없게 됨
    • 어텐션은 기본적으로 라우팅이고, 이런 다른 라우팅 방식은 모델에 더 거친 선택지를 줘서 잠재적으로 학습을 더 쉽게 만들 수 있음
    • 흐름은 확실히 동적 라우팅 증가 쪽이지만, MoE/MoD/MoDE가 더 깊은 추론을 가능하게 한다기보다는 가중치 안에서 중첩을 줄이며 추가 사실을 담게 해주는 쪽에 가깝다고 봄
      더 깊은 추론은 층 단위 동적성보다 토큰 단위 동적성에서 올 것 같음. 예를 들어 모델이 버리는 근거 토큰을 출력하는 최근 Quiet-STaR 논문이 있음: https://arxiv.org/abs/2403.09629
  • 2024년 가장 중요한 논문일 수도 있음
    모든 토큰에 같은 양의 연산을 쓰지 않아도 되는 모델을 원한다는 아이디어는 예전부터 있었지만, 이를 위한 설득력 있는 메커니즘은 처음 봄

    Equipped with these new methods, we can sample autoregressively by choosing to route tokens to or around a block based on the router’s output, which does not depend on any information from future tokens. We provide empirical evidence that this is a relatively easy auxiliary task that quickly achieves 99% accuracy.
    이게 좀 놀랍지 않나?

    • Sparse Universal Transformer는 더 오래됐고, 이미 라우팅 기반 조기 종료를 했음
    • 가장 중요하다고까지? 모든 토큰이 전체 문맥 창을 필요로 하지 않는다는 건 obvious optimization이어야 함
  • 간단한 입문 버전:
    말을 이해하고 처리할 수 있는 똑똑한 비서가 있다고 상상해보면 됨. 보통 이 비서는 각 단어가 전체 의미에 얼마나 중요하든 상관없이 모든 단어에 같은 주의를 기울임
    이제 비서가 “두뇌 자원”을 더 똑똑하게 쓰도록 가르치는 방법을 찾았다고 해보자. 모든 단어에 같은 주의를 주는 대신, 의미 이해에 가장 중요한 단어에 더 집중하고, 문맥에 따라 그 집중을 즉석에서 조절함
    비서가 과부하되지 않도록 특정 시점에 쓸 수 있는 총 “두뇌 자원”에도 한도를 둠. 예산을 주고 “한 번에 일정 수의 단어에만 자원을 쓸 수 있다”고 하는 셈임. 그러면 비서는 어떤 단어가 가장 중요한지 결정해야 함
    이 한도가 있어도 비서는 자원 사용을 유연하게 조절함. 어떤 단어에는 더 쓰고, 다른 단어에는 덜 쓰면서 상황에 맞게 우선순위를 정함
    이렇게 학습하면 비서는 지능적으로 주의를 기울이면서도 효율적으로 동작함. 모든 단어에 똑같이 주의를 주는 비서만큼 잘 이해하면서도 전체 두뇌 자원은 덜 쓰기 때문에 응답과 새 정보 처리가 훨씬 빨라짐

    • ELI5라는 건 알겠지만, 설명한 방식은 이미 어텐션이 하는 일 아닌가? 이전 시퀀스에서 문맥상 중요한 단어에 특정하게 집중하니까
  • 내가 이해한 내용을 바탕으로 여기에 조금 정리해봤음:
    https://lifeinthesingularity.com/p/googles-breakthroughs-in-...

    • 글이 좋음. New Scientist 스타일이 떠오름. “진행하면서 설명하되 짧게 유지하는” 느낌이라 이 분야 감을 잡기에 좋음
  • 전문가 혼합과 매우 비슷함. 다만 토큰을 여러 전문가로 라우팅하는 대신, “동적으로 건너뛸 수 있는 단일 전문가에 배치”하는 식임

    • 둘을 섞으면 꽤 멋질 듯함. 성능은 유지하면서 MoE 연산량을 더 줄일 수 있음
  • “This is more computationally efficient than performing a full content-based lookup across an entire memory buffer for each step in the future, and could be one step towards drastically increasing the context-length available for making a prediction.”
    이게 1천만 토큰 문맥 창을 가능하게 하는 방식인가? 아니면 앞으로 더 긴 문맥 창을 말하는 건가?

  • RASP 알고리즘 몇 가지를 이해하고 구현해보려 한 뒤 얻은 결론은, 특정 함수는 동작하려면 일정 수의 트랜스포머 층이 필요하다는 것이었음
    이 논리를 따르면 트랜스포머가 학습한 함수들이 여러 헤드에 걸쳐 퍼질 수 있다는 점이 드러남. 이런 함수를 반복하는 것은 문제를 이해하고 푸는 데 매우 가치 있을 수 있지만, 현재 추론 방식은 연속된 헤드 묶음을 반복 실행할 수 없음. 이 논문은 실제로 유망한 방향으로 보임
    [1] https://arxiv.org/pdf/2106.06981.pdf
    [2] https://www.youtube.com/watch?v=t5LjgczaS80

  • LLM이 너무 빨리 발전하는 것의 유일한 단점은, 논문이 누구도, 적어도 Google 밖에서는, 개선점을 학습하고 테스트할 수 있는 속도보다 빨리 나온다는 점일지도 모름
    내가 딥러닝을 시작했을 때는 ReLU와 드롭아웃이 한창이었고, 소비자용 1080에서 코드 한두 줄 바꿔 몇 시간 안에 개선 여부를 테스트할 수 있었음. 지금은 Mistral 같은 곳이 시험해볼 때까지 몇 주 기다려야 할 듯함

    • GPU 빈곤층에 온 걸 환영함
      나는 양자화 접근에 집중하면서 구식 이전 세대 GPU들로 테스트하고 있음
  • hu-po가 AI 논문을 심층 라이브 스트리밍으로 리뷰함
    강력 추천하고, 여기서는 논의 중인 mixture-of-depths 논문을 다룸: https://www.youtube.com/watch?v=Teru_qIdB8Y