지식 증류 Knowledge Distillation
- 큰 모델의 지식을 작은 모델에 옮겨 담는 학습 방법
- 대형 언어 모델은 성능이 좋지만 학습·추론 비용이 높고 배포가 어려움
- 큰 모델이 만들어낸 출력이나 판단 방식을 활용해 더 작은 모델을 학습시킴
- 모델 크기 축소, 추론 속도 향상, 서비스 비용 절감, 온디바이스·로컬 환경 배포 가능성 증가, 특정 과업에 특화된 경량 모델 제작에 활용
- 지도학습은 정답 라벨을 학습하지만, 증류에서는 큰 모델의 출력(예: 확률)을 학습 신호로 사용
- 작은 모델이 큰 모델의 출력을 완전히 학습하지는 못함

KV 캐시
- 대부분의 LLM은 Transformer 모델 구조를 사용
- 트랜스포머는 현재 토큰이 앞의 토큰들과 어떤 관계가 있는지 계산하며, 각 토큰은 Key, Value, Query 벡터로 변환됨
- 매번 전체 문장을 처음부터 다시 계산하면 비효율적이므로 과거 토큰의 Key와 Value를 저장해 두었다가 다음 토큰을 만들 때 재사용
- 다음 토큰 생성 속도를 높일 수 있음
- OpenAI API의 경우 일반 입력은 캐시된 입력보다 10배에서 80배 더 높은 요금이 적용될 수 있음
- KV 캐시는 계산량을 줄이는 대신 메모리를 많이 사용하는 단점이 있음
Mixture-of-Expert
- 하나의 거대한 모델 전체를 항상 사용하는 대신, 여러 개의 Expert를 만들어 두고 입력에 따라 필요한 Expert만 활성화하는 방식
- 앞단의 Router가 입력 토큰을 보고 어떤 Expert를 사용할지 결정
- 모델의 전체 파라미터 수는 크게 늘리면서도 실제 한 번의 추론에서 사용하는 계산량은 제한할 수 있음
- 장점
- 모델 용량 확장에 유리
- 학습 데이터와 과업의 다양성을 처리하기 좋음
- 같은 계산량 대비 성능을 높일 수 있음
- 대형 모델을 효율적으로 스케일링하기 좋음
- 단점
- 구조가 복잡함
- Router가 Expert를 잘 배분해야 함
- 학습도 더 복잡함

양자화 Quantization
- LLM은 수십억 개의 파라미터를 가지므로 저장 및 계산 비용이 큼
- 훈련 후 파라미터를 더 낮은 정밀도로 표현하는 압축 방법
- 예: 32비트 부동소수점(float32) 대신 8비트 정수(int8)를 사용
- 모델의 용량을 줄이고 속도를 높일 수 있음
- 단순한 기기에서도 작동 가능
- 정밀도를 낮추는 과정에서 오차가 생길 수 있음
- 종류
- float16: 변환이 간단하고 용량이 절반으로 감소
- int8: 변환이 복잡하지만 용량이 1/4로 감소
- BitNet: 모델 가중치를 -1/+1 두 값 중 하나(1bit), 또는 -1/0/+1 세 값 중 하나(1.58bit)로 표현
LoRA Low-Rank Adaptation
- 파라미터 W를 W0+ΔW로 분리
- W0: 사전 학습된 파라미터이며 미세조정에서는 고정
- ΔW=AB: 미세조정할 때 업데이트할 파라미터
- A: d×r 차원이며, r은 d나 k보다 작고 무작위로 초기화
- B: r×k 차원이며, 0으로 초기화(ΔW도 0으로 초기화된 것과 같음)
- 미세 조정 후에는 W0+ΔW를 더하면 새로운 W를 얻을 수 있음
- 추론할 때 추가적인 계산이 필요 없음

QLoRA
- 양자화(Quantization)와 LoRA를 결합한 방법
- 트랜스포머를 4비트로 양자화
- 모델 전체를 튜닝하는 것에 비해 더 적은 VRAM으로 비슷한 성능을 얻는 것을 목표로 함


가지치기 Pruning
- 모델 안에서 중요도가 낮은 가중치, 뉴런, 채널, 어텐션 헤드 등을 제거해 모델을 더 작고 빠르게 만드는 압축 기법
- Lottery Ticket Hypothesis: 큰 신경망 안에 처음부터 잘 학습될 수 있는 작은 부분 네트워크가 숨어 있다는 가설
- Pruning은 학습 후 불필요한 부분을 제거하는 기법일 뿐 아니라, 큰 모델 안에서 성능 좋은 작은 모델을 찾는 방법일 수도 있음
- 과정
- 큰 모델을 학습
- 중요도가 낮은 파라미터나 구조를 찾음
- 해당 부분을 제거
- 미세조정
- 종류
- 구조적(structured) 가지치기: 뉴런, 채널, 레이어, 어텐션 헤드처럼 구조 단위로 제거
- 비구조적(unstructured) 가지치기: 개별 가중치 단위로 제거
