이 논문에서는 기존의 언어모델과 1-bit 모델들을 개선한 BitNet b1.58이라는 새로운 모델을 소개하고 있어요.

먼저 기존의 언어모델들은 보통 32비트나 16비트의 부동소수점을 사용해요. 부동소수점은 십진수를 이진수로 그대로 표현한 것이라고 보면 되는데, 굉장히 정확하지만 그만큼 데이터 크기가 커요. 반면 BitNet b1.58은 겨우 1.58비트만 써서 모델을 표현해요.

어떻게 그게 가능한 걸까요? 바로 {-1, 0, 1}이라는 세 가지 값만 쓰는 거에요. -1은 음수, 0은 0, 1은 양수를 나타내죠. 이 세 가지만 쓰면 모든 수를 표현할 순 없지만, 언어모델에 필요한 정보는 충분히 담을 수 있대요. 마치 10, 20, 50원짜리 동전만 가지고도 물건을 충분히 살 수 있는 것처럼요.

기존에는 1-bit 모델도 있었어요. 이건 {-1, 1} 두 가지 값만 쓰는 건데, BitNet b1과 비교했을 때는 성능이 좀 떨어졌대요. 특히 모델 크기가 작을수록 그 차이가 컸다고 해요. 물론 {0, 1}처럼 0과 양수만 쓰는 것도 해봤는데, 이건 학습이 잘 안 돼서 금방 포기했대요.

그 밖에도 {-2, -1, 0, 1, 2} 이렇게 좀 더 다양한 숫자를 쓰는 것도 시도해봤어요. -2나 2는 비트 연산으로 쉽게 구현할 수 있거든요. 근데 {-1, 0, 1} 세 가지만 써도 충분히 잘 되길래, 저자는 왜 괜히 복잡하게 하나 싶었나 봐요. 이건 마치 필요 이상으로 많은 종류의 동전을 만드는 것과 비슷하죠.

흥미로운 점은 BitNet b1.58의 성능이 모델 크기가 커질수록 더 좋아진다는 거에요. 작은 모델에서는 기존 방식이랑 별 차이가 없는데, 모델이 커지면 그 격차가 줄어든대요. 이는 마치 큰 금액을 동전으로 낼 때 그 위력이 발휘되는 것과 비슷해 보여요.

이처럼 BitNet b1.58은 기존 모델들의 장점은 그대로 가져오면서, 단점은 보완한 셈이에요. 앞으로는 더더욱 큰 언어모델도 쉽게 만들 수 있게 될 것 같아요. 

이 논문에서는 BitNet b1.58을 학습시킬 때 사용한 여러 가지 트릭들도 소개하고 있어요.

먼저 Loss Curve라는 걸 봤더니 S자 모양으로 생겼대요. 보통은 점점 낮아지는 게 정상인데 말이죠. 이게 의미하는 건, 중간 결과만 보고 성능을 예측하기 힘들다는 거예요. 마치 시험 공부를 할 때, 초반에는 큰 진전이 없다가 막판에 성적이 확 오르는 것과 비슷해요.

그리고 Learning Rate라는 것도 조절했어요. 이건 공부의 속도를 조절하는 것과 같아요. BitNet b1.58은 기존 모델보다 높은 Learning Rate에서도 안정적이래요. 공부를 빨리해도 흔들리지 않는 모범생 같은 거죠. 게다가 중간에 속도를 좀 줄이니까 오히려 성능이 더 올랐대요.

Weight Decay라는 기술도 썼어요. 이건 마치 습관처럼 굳어진 지식을 서서히 잊게 하는 것과 같아요. 근데 BitNet에서는 중반 이후에 이걸 끄는 게 더 좋더라고요. 처음에는 유연하게 학습하다가, 나중에는 확실히 아는 것에 집중하는 셈이죠.

논문에서는 이런 기술들 덕분에 BitNet b1.58이 기존 모델들보다 더 빨리, 더 안정적으로 학습할 수 있었다고 해요. 마치 공부 잘하는 비결을 터득한 학생 같아 보여요.

아, 그리고 실험 결과에 대해서도 좀 더 자세히 알려줬어요. 모델 크기별로 성능을 비교해 봤더니, 역시 크기가 클수록 BitNet이 기존 모델을 따라잡더라고요. 가장 큰 3B 모델에서는 성능이 거의 같았대요. 물론 실전에서는 훨씬 더 큰 모델을 쓸 거예요.

논문에서는 BitNet의 성능을 더 끌어올리기 위해 Activation과 KV cache라는 것들에 대해서도 실험했어요.

Activation은 모델 내부에서 정보가 전달될 때 거치는 일종의 관문 같은 거예요. 이걸 8비트로 줄이니까 성능이 많이 떨어지더라고요. 그래서 그 중에서도 중요한 것들은 8비트로 놔두고, 나머지는 4비트로 줄였대요. 마치 반 학생들 중에 특별히 도움이 필요한 친구들은 좀 더 신경 쓰는 것과 비슷해요.

KV cache는 모델이 이전에 학습한 내용을 저장해두는 곳이에요. 여기에 들어있는 정보는 4비트로 압축해도 아무런 문제가 없었대요. 모델이 공부한 내용을 압축해서 저장해둔다고 생각하면 되겠네요.

또 한 가지 흥미로운 점은, 실험에 사용된 하드웨어예요. 논문에서는 BitNet을 학습시킬 때 특별히 고안된 하드웨어를 사용하지는 않았어요. 하지만 BitNet은 그런 특수한 하드웨어로 최적화하기 아주 좋대요. 마치 일반 운동장에서도 잘 뛰는 선수를 좋은 운동장에서 더 훈련시키는 것처럼요.

그리고 앞으로는 학습 속도도 더 빨라질 거래요. 지금은 BitNet을 학습시킬 때 보통 컴퓨터를 썼지만, 앞으로는 전용 하드웨어를 쓰면 훨씬 빨라질 수 있대요. 마치 페라리를 타면 훨씬 빨리 달릴 수 있는 것처럼요.


마지막으로 저자들은 앞으로의 계획도 밝혔어요. BitNet을 더 발전시켜서 엄청나게 큰 언어모델도 누구나 쉽게 만들 수 있게 하는 게 목표래요. 그러려면 지금보다 훨씬 더 많은 데이터로 학습해야 할 거예요. 정말 멋진 비전이죠?

bitnet1.58에 대한 예전의 설명은 생략했음. 특붕이라면 다 알고있을테니까.
이번 bitnet 새 논문이 뭔지에 대해 정말 자세히 알고싶은 사람을 위한 설명글.
근데 bitnet용 새로운 하드웨어를 설계하는건 돈욕심때문인가 싶긴 함