Chưng cất tri thức

Trong học máy, **chưng cất tri thức** (knowledge distillation) hay **chưng cất mô hình** (model distillation) là quá trình chuyển giao tri thức từ mô hình lớn sang mô hình nhỏ hơn. Dù các mô hình lớn (như mạng nơ-ron sâu hoặc tập hợp nhiều mô hình) có khả năng lưu trữ tri thức cao hơn, khả năng này có thể chưa được sử dụng hết. Chi phí tính toán để chạy mô hình vẫn cao ngay cả khi nó chỉ sử dụng một phần nhỏ tri thức. Chưng cất tri thức cho phép chuyển giao kiến thức từ mô hình lớn sang nhỏ mà không làm giảm hiệu quả. Các mô hình nhỏ tốn ít chi phí tính toán hơn, có thể triển khai trên thiết bị phần cứng yếu hơn (như điện thoại di động).

Khái niệm này khác với nén mô hình (model compression) - phương pháp giảm kích thước mô hình lớn mà không cần huấn luyện mô hình mới. Nén mô hình thường giữ nguyên kiến trúc và số lượng tham số, chỉ giảm số bit trên mỗi tham số.

Chưng cất tri thức đã được áp dụng thành công trong nhiều lĩnh vực như phát hiện vật thể, mô hình âm học, và xử lý ngôn ngữ tự nhiên. Gần đây, phương pháp này cũng được áp dụng cho mạng nơ-ron đồ thị xử lý dữ liệu phi lưới.

## Phương pháp
Việc chuyển giao tri thức từ mô hình lớn sang nhỏ cần đảm bảo tính hiệu quả. Nếu cả hai mô hình cùng được huấn luyện trên một tập dữ liệu, mô hình nhỏ có thể thiếu khả năng học biểu diễn tri thức cô đọng so với mô hình lớn. Tuy nhiên, thông tin về biểu diễn tri thức được mã hóa trong phân phối giả xác suất (pseudolikelihood) đầu ra. Khi mô hình dự đoán đúng một lớp, nó gán giá trị lớn cho biến đầu ra tương ứng và giá trị nhỏ hơn cho các biến khác. Phân phối giá trị đầu ra cung cấp thông tin về cách mô hình lớn biểu diễn tri thức. Do đó, mục tiêu triển khai mô hình hiệu quả có thể đạt được bằng cách: huấn luyện mô hình lớn trên dữ liệu để khai thác khả năng học biểu diễn tri thức, sau đó chưng cất tri thức này vào mô hình nhỏ thông qua việc huấn luyện nó học đầu ra "mềm" của mô hình lớn.

### Công thức toán học
Với mô hình lớn là hàm số của biến véc-tơ \mathbf{x} được huấn luyện cho bài toán phân loại, lớp cuối cùng thường là softmax dạng:
:
y_i(\mathbf{x}|t) = \frac{e^{\frac{z_i(\mathbf{x})}{t}}}{\sum_j e^{\frac{z_j(\mathbf{x})}{t}}}

Trong đó t là nhiệt độ (temperature) - tham số thường đặt bằng 1 cho softmax chuẩn. Toán tử softmax chuyển giá trị logit z_i(\mathbf{x}) thành giả xác suất. Giá trị nhiệt độ cao tạo phân phối "mềm" hơn giữa các lớp đầu ra. Quá trình chưng lọc tri thức bao gồm việc huấn luyện mô hình nhỏ (gọi là mô hình chưng cất) trên tập chuyển giao (khác với tập dữ liệu huấn luyện mô hình lớn) sử dụng hàm mất mát entropy chéo giữa đầu ra của mô hình chưng cất \mathbf{y}(\mathbf{x}|t) và đầu ra của mô hình lớn \hat{\mathbf{y}}(\mathbf{x}|t), với giá trị nhiệt độ cao t cho cả hai mô hình:
:
E(\mathbf{x}|t) = -\sum_i \hat{y}_i(\mathbf{x}|t) \log y_i(\mathbf{x}|t) .


Trong bối cảnh này, nhiệt độ cao làm tăng entropy của đầu ra. Điều này cung cấp nhiều thông tin hơn để mô hình chưng cất học so với mục tiêu cứng. Đồng thời, nó làm giảm phương sai của gradient giữa các mẫu khác nhau. Nhờ đó, tốc độ học có thể được tăng lên.

Nếu nhãn thực tế (ground truth) có sẵn cho tập chuyển giao, quá trình có thể được củng cố bằng cách thêm entropy chéo vào hàm mất mát. Thành phần này tính toán giữa đầu ra của mô hình chưng cất (với t = 1) và nhãn đã biết \bar{y}:
:
E(\mathbf{x}|t) = -t^2 \sum_i \hat{y}_i(\mathbf{x}|t) \log y_i(\mathbf{x}|t) - \sum_i \bar{y}_i \log y_i(\mathbf{x}|1)

Trong đó, thành phần mất mát liên quan đến mô hình lớn được nhân với hệ số t^2. Lý do là khi nhiệt độ tăng, gradient của mất mát so với trọng số mô hình tỷ lệ với \frac{1}{t^2}.

### Mối quan hệ với nén mô hình
Giả sử các giá trị logit có trung bình bằng 0. Khi đó, nén mô hình là trường hợp đặc biệt của chưng cất tri thức. Gradient của hàm mất mát chưng cất E so với logit của mô hình chưng cất z_i được tính bởi:
:
\begin{align}
    \frac{\partial}{\partial z_i} E
        &= -\frac{\partial}{\partial z_i} \sum_j \hat{y}_j \log y_j \\
        &= -\frac{\partial}{\partial z_i} \hat{y}_i \log y_i + \left( -\frac{\partial}{\partial z_i} \sum_{k\neq i} \hat{y}_k \log y_k \right)\\
        &= -\hat{y}_i \frac{1}{y_i} \frac{\partial}{\partial z_i} y_i + \sum_{k\neq i} \left( -\hat{y}_k \cdot \frac{1}{y_k} \cdot e^{\frac{z_k}{t}} \cdot \left( -\frac{1}{\left(\sum_j e^{\frac{z_j}{t}} \right)^2 }\right) \cdot e^{\frac{z_i}{t}} \cdot \frac{1}{t} \right)\\
        &= -\hat{y}_i \frac{1}{y_i} \frac{\partial}{\partial z_i} \frac{e^{\frac{z_i}{t}}}{\sum_j e^{\frac{z_j}{t}}} + \sum_{k\neq i} \left( \hat{y}_k \cdot \frac{1}{y_k} \cdot y_k \cdot y_i \cdot \frac{1}{t} \right)\\
        &= -\hat{y}_i \frac{1}{y_i}
        \left(
            \frac{\frac{1}{t} e^{\frac{z_i}{t}} \sum_j e^{\frac{z_j}{t}} - \frac{1}{t} \left( e^{\frac{z_i}{t}} \right)^2}
                 {\left( \sum_j e^{\frac{z_j}{t}} \right)^2}
        \right) + \frac{y_i\sum_{k\neq i}\hat{y}_k}{t}\\
        &= -\hat{y}_i \frac{1}{y_i} \left( \frac{y_i}{t} - \frac{y_i^2}{t} \right) + \frac{y_i(1-\hat{y}_i)}{t}\\
        &= \frac{1}{t} \left( y_i - \hat{y}_i \right) \\
        &= \frac{1}{t} \left( \frac{e^{\frac{z_i}{t}}}{\sum_j e^{\frac{z_j}{t}}} - \frac{e^{\frac{\hat{z}_i}{t}}}{\sum_j e^{\frac{\hat{z}_j}{t}}} \right) \\
\end{align}

Ở đây, \hat{z}_i là logit của mô hình lớn. Với giá trị t lớn, công thức này có thể xấp xỉ thành:
:
\frac{1}{t}
\left(
    \frac{1 + \frac{z_i}{t}}{N + \sum_j \frac{z_j}{t}} -
    \frac{1 + \frac{\hat{z}_i}{t}}{N + \sum_j \frac{\hat{z}_j}{t}}
\right)

Giả thiết trung bình bằng 0 \sum_j z_j = \sum_j \hat{z}_j = 0 dẫn đến  \frac{z_i - \hat{z}_i}{NT^2} . Đây là đạo hàm của \frac{1}{2} \left( z_i - \hat{z}_i \right)^2, nghĩa là mất mát tương đương với việc khớp logit của hai mô hình như trong nén mô hình.

### OBD
Thuật toán OBD (Optimal Brain Damage) như sau:Lặp lại cho đến khi đạt được mức độ thưa hoặc hiệu suất mong muốn:Huấn luyện mạng (bằng các phương pháp như lan truyền ngược) cho đến khi thu được nghiệm hợp lý

Tính toán độ quan trọng (saliency) cho từng tham số

Xóa các tham số có độ quan trọng thấp nhấtViệc xóa tham số nghĩa là cố định giá trị của nó về 0. "Độ quan trọng" của tham số \theta được định nghĩa là \frac 12 (\partial_\theta^2 L)\theta^2, với L là hàm mất mát. Đạo hàm bậc hai \partial_\theta^2 L có thể tính bằng lan truyền ngược bậc hai.

Ý tưởng chính của OBD là xấp xỉ hàm mất mát trong vùng lân cận nghiệm tối ưu \theta^* bằng khai triển Taylor:L(\theta) \approx L(\theta^*) + \frac 12 \sum_i (\partial_{\theta_i}^2L(\theta^*)) (\theta_i - \theta_i^*)^2Do \nabla L(\theta^*) \approx 0 (vì \theta^* là tối ưu) và bỏ qua đạo hàm chéo \partial_{\theta_i}\partial_{\theta_j}L để tiết kiệm tính toán. Như vậy, độ quan trọng của tham số ước lượng mức tăng mất mát nếu tham số đó bị xóa.

## Lịch sử

Một phương pháp liên quan là *nén mô hình* hoặc *tỉa mô hình*, trong đó một mạng đã được huấn luyện sẽ được giảm kích thước. Điều này lần đầu tiên được thực hiện vào năm 1965 bởi Alexey Ivakhnenko và Valentin Lapa tại Ukraina (1965). Các mạng sâu của họ được huấn luyện từng lớp thông qua phân tích hồi quy. Các đơn vị ẩn không cần thiết được tỉa bỏ bằng cách sử dụng một tập kiểm định riêng. Các phương pháp nén mạng nơ-ron khác bao gồm Biased Weight Decay và Optimal Brain Damage.

Một ví dụ sớm về chưng cất mạng nơ-ron đã được Jürgen Schmidhuber công bố vào năm 1991, trong lĩnh vực mạng nơ-ron hồi quy (RNN). Vấn đề là dự đoán chuỗi cho các chuỗi dài, tức là học sâu. Nó được giải quyết bởi hai RNN. Một trong số chúng (*automatizer*) dự đoán chuỗi, và một cái khác (*chunker*) dự đoán lỗi của automatizer. Đồng thời, automatizer dự đoán trạng thái bên trong của chunker. Sau khi automatizer dự đoán tốt trạng thái bên trong của chunker, nó sẽ bắt đầu sửa lỗi, và cuối cùng chunker trở nên lỗi thời, chỉ còn lại một RNN.

Ý tưởng sử dụng đầu ra của một mạng nơ-ron để huấn luyện một mạng nơ-ron khác cũng được nghiên cứu dưới dạng cấu hình mạng giáo viên-học sinh. Năm 1992, một số bài báo đã nghiên cứu cơ học thống kê của cấu hình giáo viên-học sinh với các máy chuyên gia (committee machine) hoặc cả hai đều là máy riêng biệt.

Việc nén kiến thức của nhiều mô hình vào một mạng nơ-ron duy nhất được gọi là *nén mô hình* vào năm 2006: nén được thực hiện bằng cách huấn luyện một mô hình nhỏ hơn trên một lượng lớn dữ liệu giả được gán nhãn bởi một tập hợp hiệu suất cao, tối ưu hóa để khớp logit của mô hình nén với logit của tập hợp. Bản in trước về chưng cất tri thức của Geoffrey Hinton và cộng sự (2015) đã định nghĩa khái niệm và cho thấy một số kết quả đạt được trong nhiệm vụ phân loại hình ảnh.

Việc chưng cất kiến thức cũng liên quan đến khái niệm *nhân bản hành vi* được Faraz Torabi và cộng sự thảo luận.

## Tham khảo

## Liên kết ngoài
* Chưng cất kiến thức trong mạng nơ-ron – Google AI