Forward KL: : teacher와 student의 logit이 완화되는 loss function
Reverse KL: : logit이 하나만 가지도록 하는 loss function
Response-based KD
T와 S의 답(softmax의 결과)을 비교하는 방법
Feature-based KD
layer간의 feature, activation map, attention map..을 비교하는 방법
NST ()
cosine simmilality를 구해서 분포를 맞춰주는 방식
Factor Transfer
attention Transfer는 추상화 된 개념이사 KD가 잘안된다 -> factor Transfer: Auto encoder으로 feature를 압축시켜서 student로 전달

큰 모델을 만들어서 ** block importance 측정 & 필요 없는거 제거 -> feature-based KD -> importance 측정 ... 으로 모델 사이즈를 줄이는 방식으로 쵝근에 많이 사용
Model Compression Technuques
Quantization FP16 -> FP8
W(weight) x A(activation)이고 Quantization한다는거는 W의 bit수를 낮춘다는 의미
FP format에서 BF format으로 변경 ==> 부동 소숫점 bit수를 희생 + sacle값으로 norm 해주는 효과
NF4 --> GPU메모리가 부족해서 모델을 압축해서 파인튜닝 하고싶다
FP4 --> 메모리가 충분해서 압축없이 그대로 때려박아 TP를 올리고 싶다
PTQ vs QAT
PTQ는 inference단게에서만 quantize시켜준거라 메모리를 절약시켜서 infer해줄수 있음(error로 인한 acc 저하 발생) --> error를 학습시켜보자하는게 QATl
in PTQ, channel마다 분포가 다르기 때문에 Per-Channel Scale Facter를 두는게 일반적
However, 작은 모델에 대해서는 성능이 잘안나옴
in QAT, 학습또한 quantazation하겠다. 그렇다면 미분이 불하능한(q(x))함수는? --> bypass하자
non-linear한 함수는 quan적용, linear한 함수(softmax)는 다시 dequantize해주는게 일반적(정확도를 위해)
train이후에 inference단계에서도 quan된 값으로 하자
Parameter Pruning
0과 가까운 값을 가진 파라미터는 계산하지 않음
HW based 방법론이라 s/w 적으로는 잘 쓰이지 않음
큰 맥락으로는 dense mat을 spase mat으로 바꿔서 연산, space로 어떻게 바꾸느냐? -> elememt-wise로 할거냐? vector-wise로 할꺼야? 에 따라 방법론이 달라짐
Low-Rank Approximation: LoRa QK로 만들어진 semetric행렬을 두 백터로 나타내어 메모리를 줄임
KD(knowlidge Distilation)
KV cache 메모리를 줄이기 위한 방안
GQA(Grouped-query attention) 실제로 많이 쓰이고 있음