The Era of 1-bit LLMs:All Large Language Models are in 1.58 Bits

https://arxiv.org/abs/2402.17764


16비트, 8비트, 6비트, 4비트, 3.25비트, ... 점점 줄이는 양자화의 한계가 어디까지일까 생각해본 적이 있다면 위 논문이 흥미로울 것입니다.


언어모델의 트랜스포머라는 것이 하는 일은 레이어를 계속 타고 넘으면서 의미를 주입하는 쪽으로 방향을 몰아주는 것이라고 설명한 적이 있는데요,


그 방향을 극단적으로 단순화하면 1비트로 줄일 수 있을 것입니다. 


예/아니오 질문을 여러번 스무고개 하듯이 여러단계를 통과하게 하면 1비트의 2지선다 만으로도 의외로 많은량의 정보를 넣을 수 있는 것이지요.


그래서 가장 극단적인 형태라고 할 수 있는 1비트 트랜스포머 구조가 작년에 발표된 적이 있었는데, 성능면에서는 약간 아쉬움이 있었습니다.

BitNet: Scaling 1-bit Transformers for Large Language Models

https://arxiv.org/abs/2310.11453


+1 과 -1 만 갖고 웨이트를 구성하다보니 학습 대상의 특징 (feature) 을 포착하는 학습 과정이 비효율이 되어버린 것입니다. 수렴이 안되고 계속 값이 왔다리갔다리 할 수 밖에 없으니까요


그렇다면 1비트에서 약간 양보해서 +1, 0, -1 의 3가지 값 (ternary을 가질 수 있게 하는 형태로 구성하면 어떨까라는 생각을 해볼 수가 있는데요, 이렇게하면 대략 1.58bit 정도로 정보를 인코딩할 수 있습니다. 왜 1.6667 도 아니고 1.5 도 아니고 1.58bit 일까요?


예를 들어서 100 개의 대상을 3가지중 하나의 값을 갖는 형태로 인코딩한다면, 경우의 수는 3^100 이 됩니다.

3^100 은 대략 2^158 정도와 비슷한 숫자입니다. 따라서 1.58 bit 라고 표현하는 것입니다.


간단한 수식으로 다시 표현하자면 log2(3) 에 해당하는데 요것은 대략 1.5849625 입니다


어쨌든 0 을 추가한 형태로 하면 쌩 1비트 양자화의 단점이 상당히 커버된다고 합니다. 물론 4비트나 더 높은 정보량으로 양자화한 것에 비해서 당연히 성능이 떨어지고, 이미 모델이 학습된 이후에 후반 단계로 하는 양자화로는 만들 수 없고, 모델을 처음부터 pretrain 시키는 방식으로만 만들 수 있는 결과이긴 하기 때문에 당장 여러분에게 도움이 되진 않을 것입니다.

하지만 이러한 1비트 구조가 갖는 아주 중요한 의미가 있는데요, 바로 1비트나 1.58bit 구조에서는 더 이상 행렬연산에서 곱셈이 필요없어진다는 점입니다.


이 말은 앞으로 새로운 gpu 구조를 설계할 때, 아예 극단적으로 덧셈에만 특화된 구조로 칩을 만들고, 관련 아키텍처도 단순화할 수 있다는 것입니다. 양자화로 인한 정보의 손실은 트랜스포머 구조에서 어텐션 헤드의 갯수, 차원의 성분수, 레이어의 갯수를 늘리는 것으로 보충할 수 있는데, 이렇게 파라메터 갯수를 키워서 얻는 이득의 폭이 양자화로 인한 손실보다 크다는 점이지요. 같은 성능을 내면서 메모리도 적게 먹고, 속도도 빠르고, 발열도 적어지고 할 수 있습니다. 모바일 기기에서 추론이나 학습을 돌리는데 훨씬 좋아지겠죠. 지금은 전성비같은 것이 중요한 고려사항이 아니지만 앞으로 모바일 기기에서 자기 주변의 환경을 학습하게 되는 것도 점점 대중화될 것입니다.


https://www.projectaria.com/datasets/aea/


앞으로 MoE 같은 구조를 응용한다던가, 아예 1.58bit 에 최적화된 언어모델 구조 (llama 같은 구조를 빌리지 말고 완전히 새롭게), 모바일에서 돌리기 최적화, 전용 하드웨어의 설계등으로 연구를 확대할 것이라고 하니 관심을 가져볼만 합니다.