본문 바로가기
AIML

[Mamba 이해하기 1-1] HiPPO의 A 행렬의 중요성 | HiPPO: Recurrent Memory with Optimal Polynomial Projections, Gu et al., NeurIPS 2020

by 하우론 2024. 9. 3.

 

HiPPO와 이후 나오는 SSM의 모든 것을 설명할 figure. HiPPO는 신호 $x$를 고차원 다항 함수로 projection (1 -> 2) 하고, 계수를 구하고(2 -> 3), 계수의 변화를 이산화(3 -> 4)하는 방법이다.

 

다루고자 하는 문제: 시계열 모델링

1차원 연속 신호 $x(t)$가 주어졌을 때, 우리가 원하는 종류의 신호 $y(t)$로 바꿔주는 함수(또는 시스템) $f(t): \mathbb{R}_+ \rightarrow \mathbb{R}$을 찾는 문제이다. $x(t)$가 오늘 엔비디아 주가라면 $y(t)$는 내일 주가가 될 수 있다. $x(t)$가 노이즈 낀 전화기 너머 목소리라면 $y(t)$는 깨끗한 목소리가 될 수 있다. 마지막으로, $x(t)$가 기계가 만들어낸 사람 목소리라면 매 지점마다 의심스러운 정도를 나타내는 $y(t)$를 만들 수도 있다.

사람은 비디오, 오디오, 자연어 등을 효율적으로 이해할 수 있지만 딥러닝 모델들은 그렇지 못하다. 컴퓨터는 신호를 discrete 하게 받을 수밖에 없고 연속 신호는 수천 수만 개의 data point가 된다. 가청 주파수인 10kHz 신호도 단 1초만 수집해도 10000개의 점이 된다. 사람은 노래를 1초만 들어도 노래 이름과 가수, 연도 등등 다양한 정보를 이끌어낼 수 있다. 딥러닝 모델에게도 이런 능력을 갖게 하려면 강력한 시계열 모델링이 필수다.

해당 논문에서 소개하는 방법은 HiPPO-LegS(빨강)이다. 매우 긴 화이트 노이즈 시퀀스(검정)를 reconstruct 하는 간단한 task이다. 그래프에서 빨간색이 검은색에 겹치는 부분이 많아 거의 안 보인다. 실제로 MSE도 기존 시계열 모델들에 비해 매우 낮다.

"기억" = Vanishing Gradient?

기존의 LSTM, GRU 등의 시계열 방법은 모델에게 기억을 관장하는 회로를 넣어줌으로서 문제를 어느 정도 해결했다. 매 신호마다 "이 신호는 기억할까?"라고 묻는 기억 함수 $m: X \rightarrow [0, 1]$에 인풋을 통과시켜 아웃풋 $z$에 곱해준다. 실제로 이렇게 하면 뭔가 기억을 하는 것처럼 동작은 한다.

하지만 RNN 계열 모델들은 익히 알려진 vanishing gradient 라는 문제가 있다. 기억 함수 $m$은 0 ~ 1의 값에 매핑 시키기 위해 sigmoid, tanh 등의 함수를 감싸줘야 한다. 이들은 치역이 제한됐기 때문에 어쩔 수 없이  gradient를 소멸시킨다. Backprop은 forward pass가 끝나고 이루어지기 때문에 첫 번째 point에 대한 gradient는 거의 소멸된다. $y = f^{10000}(x[t=0])$을 $f$에 대해 미분하면 가장 안쪽 $f$는 gradient를 거의 못 받는다.

매 순간 최적해를 구할 수 있다면 해결 된다.

모든 문제는 gradient descent에서 시작한다. $x$를 처음부터 끝까지 다 보고 나서야 gradient를 얻을 수 있고 파라미터를 업데이트 할 수 있다. 만약 매 순간 최적해를 얻을 수 있다면 descent를 할 필요가 없어진다. 만약,  

  1. 지금까지 봐왔던 신호를 optimal하게 요약할 수 있고,
  2. 실시간으로 optimality를 유지할 수 있다면,

기억을 더 효과적으로 할 수 있지 않을까 하는 접근이다.1을 위해 closed-form solution을 선형대수적으로 구할 수 있는 다항 함수 회귀를 도입했고, 2를 푸는 방법이 해당 논문의 핵심 contribution이다. 

 

HiPPO란?

HiPPO는 시간에 따른 $x$의 중요도인 measure $\mu^{(t)}$를 설정하면 그에 따른 최적의 다항 함수의 계수 $c(t)$를 효율적으로 구하고, $c(t)$의 시간에 따른 변화를 이산적으로 표현할 수 있는 선형 변환의 행렬 $A_k$를 구하는 방법이다. "얼마나 오래 됐든 모든 부분은 중요하다"는 의미의 measure $\mu^{(t)}(x) = \frac{1}{t}, x < t$를 줬을 때 나온 $A_k$가 바로 HiPPO A 행렬이다. 그리고 "오래 됐을수록 exponential 하게 덜 중요하다"는 의미의 measure $ \mu^{(t)}(x) = e^{x - t}, x \le t$를 주면 GRU가 나온다. 기존 RNN 모델들이 HiPPO의 specification임을 보인 것도 이 논문의 또 다른 contribution이다.

수식들은 다음 글에서 설명할 것이다.

'AIML' 카테고리의 다른 글

torch.compile과 친해지기 (링크들 모음)  (0) 2024.09.13
[Mamba 이해하기 0] 개요  (0) 2024.09.03