# Distillation
**Idea**: Áp dụng quá trình dạy và học của con người. Kiến thức sẽ được truyền đạt từ giáo viên (có kiến thức tốt hơn) sang học sinh (có kiến thức kém hơn).
Quá trình bao gồm 2 phần:
- Huấn luyện teacher: Teacher sẽ được huấn luyện trên một tập dữ liệu đã được dán nhãn sẵn (đảm bảo teachder model đủ tốt). Sau đó ta dùng teacher để huấn luyện student.
- Huấn luyện student: Qúa trình này sẽ sử dụng gợi ý của teacher để huấn luyện student.
**Cách huấn luyện thông thường**: ta sẽ áp dụng loss function dạng cross-entropy cho student.

Với $y$ là vector one-hot có giá trị 1 tại index trùng với ground-truth, $z_{x}$ là output của student, $\sigma_{j}(z)=\frac{exp(z_{j})}{\sum_{i}exp(z_{i})}$
**Một vài cải tiến**:
- **KL divergence**: Thay vì sử dụng hard-label như thông thường. Tác giả đã tìm cách làm mềm softmax score (còn được gọi là soft-label) bằng cách áp dụng kĩ thuật scaling temperature, đồng thời bổ sung thêm vào hàm loss một hàm lỗi KL-divergence:

Với $z^{t}$ là output của teacher, $z^{s}$ là output của student, $\tau$ là scaling temperature,
$\Rightarrow$ Khi đó, loss function cuối cùng gồm:

Với $\gamma$ và $\alpha$ là hệ số cân bằng (giúp cân bằng vai trò của 2 hàm loss trong loss function tổng).
- **Hint**: Đặc trưng trung gian của student sẽ bắt chước theo đặc trưng của teacher cho một ảnh x tại layer l. Nó sẽ thực hiện ánh xạ các đặc trưng của học sinh (có bổ sung thêm tham số r) sao cho khớp với kích thước các đặc trưng của teacher, sau đó tối tiểu hóa hàm MSE:


Ta sẽ bổ sung hàm Loss Hint vào hàm loss của student (tương tự với KL-divergence):

Với $\gamma$ và $\beta$ là hệ số cân bằng.
**Hint** được định nghĩa là một output của một hidden layer của teacher có vai trò hướng dẫn student học. Tương tự, chọn 1 hidden layer của student làm guided layer, sẽ học từ hint layer của teacher.
- **CRD (Contrastive representation distillation)**: Gọi s(x) và t(x) là đặc trưng kế cuối của student và teacher đại diện cho một ảnh x. Nếu x và y là hai tấm ảnh thuộc 2 loại khác nhau thì s(x) và t(x) phải tương đồng nhau (positive pair), s(x) và t(y) phải khác nhau (negative pair). Mấu chốt quan trọng để có được hiệu suất tốt phụ thuộc vào số lượng negative samples N được dùng cho mỗi ảnh. Ta sẽ load tất cả dữ liệu huấn luyện vào vùng nhớ (bộ nhớ) và cập nhật liên tục để có thể tăng số lượng negative samples một cách nhanh chóng thông qua hàm loss:


**Ưu điểm**:
- Có hiệu quả rất cao đối với các model phức tạp có nhiều lớp và nhiều tham số.
- Chắt lọc kiến thức từ một mô hình lớn sang một mô hình nhỏ hơn với rất ít sự mất mát -> có thể sử dụng cho các model chạy trên các thiết bị có bộ nhớ ít, hiệu năng thấp, và cần tính di động.
**Nhược điểm**:
- Student model sẽ phụ thuộc khá nhiều vào teacher model, do đó nếu teacher không đủ tốt dẫn đến việc student cũng không tốt (ta có thể chứng minh bằng cách thử đánh lừa teacher, kết quả là các student cũng sẽ bị đánh lừa theo dẫn đến kết quả có thể không được tốt)

- Phải thử nghiệm và cân nhắc nhiều trong việc lựa chọn teacher model. Vì chưa chắc teacher model có accuracy cao sẽ là teacher model tốt nhất cho việc 'chắt lọc kiến thức'.
- Không phải lúc nào student model cũng đạt được accuracy cao như teacher model, việc này ảnh hưởng ở quá trình inference ra kết quả.
**Một vài chiến lược huấn luyện**
- **Online distillation**: khi teacher model quá lớn và quá phức tạp, lúc này teacher model sẽ không có sẵn (chưa pre-train). Lúc này ta có thể áp dụng online distillation. Cả teacher và student sẽ được cập nhật liên tục đồng thời với nhau trong mỗi quá trình huấn luyện. Có thể sử dụng tính toán song song giúp cho phương pháp online distillation đạt hiệu quả cao nhất.
- **Self-distillation**: Một model vừa đóng vai trò làm teacher vừa đóng vai trò làm student. Ta chia mạng ban đầu thành nhiều phần. Sử dụng bottleneck layer kết hợp với mạng FC dùng huấn luyện và sẽ được xóa khi thực hiện bước inference, ta thu được bộ phân loại (classifier) được thiết lập sau mỗi phần nông (shallow) của mạng. Trong quá trình huấn luyện, tất cả các phần nông tương ứng với bộ phân loại sẽ được distill knowledge từ các phần sâu hơn. Lúc này các phần nông sẽ đóng vai trò là student và các phần sâu hơn sẽ đóng vai trò là teacher.
**Ưu điểm**: khắc phục được một số hạn chế của phương pháp distilled knowledge truyền thống
# Prunning
**idea** : IF ALMOST ZERO, WHY NOT
SET THEM ZERO AT ALL?
- trong quá trình train sẽ có nhiều thành phần trong mạng neuron trở nên không cần thiết
- Ví dụ : các trọng số trở nên quá nhỏ, dù có hay không thì cũng không tác động đến output => cắt tỉa đi.
- Có thể cắt tỉa trong quá trình training : mỗi epoch sẽ lựa ra % các trọng số nhỏ nhất để cắt tỉa.
- tuy nhiên, cắt tỉa các connection (kết nỗi giữa các nút neuron) gây khó khăn về mặt kỹ thuật vì mạng neuron được biểu diễn bằng ma trận.
- giải quyết : cắt tỉa **nút neuron** , **layer** thay vì cắt tỉa cạnh (aka connection).
# Quantization
- giảm kích thước lưu trữ cho mô hình bằng cách thay đổi cách biểu diễn trọng số.
- các trọng số thường được biểu diễn dưới dạng float 32-bit => giảm xuống còn float16 hoặc integer.
- Khi các tham số mô hình được giảm kích thước thì việc tính toán cũng sẽ được tăng tốc.

**Ưu điểm :**
- Ý tưởng đơn giản, dễ cài đặt.
- Tốn ít thời gian để thực thi.
**Nhược điểm :**
- Độ nén của mô hình và tốc độ cải thiện không bằng các phương pháp trên
- Không thể làm chủ được độ chính xác của mô hình như các pp khác
# Reference
1. [Distillation Methods: KL divergence, Hint, CRD](https://arxiv.org/pdf/2205.16004.pdf)
2. [Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation](https://arxiv.org/pdf/1905.08094.pdf)
3. [Hint For Thin Deep Nets](https://arxiv.org/pdf/1412.6550.pdf)
4. [Contrastive Representation Distillation](https://arxiv.org/pdf/1910.10699.pdf)
5. [Model Compression methods](https://towardsdatascience.com/three-model-compression-methods-you-need-to-know-in-2021-1adee49cc35a)
6. [Knowledge Distillation - phamdinhkhanh](https://phamdinhkhanh.github.io/2021/03/13/KnownledgeDistillation.html)
7. [Model Compression](https://viblo.asia/p/ong-toan-vi-loc-bi-kip-vo-cong-de-tao-mo-hinh-sieu-sieu-nho-li-ti-voi-do-chinh-xac-khong-lo-Qpmleon9Krd?fbclid=IwAR3eHG2avhPkx0pu1_3bfsLxi-s1PeVibMg9E5oK-vrCC_fodZvA3YaxfQE)