English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

khách
1 / ?
trở lại bài học

Trung bình Trượt Hàm mũ

Một Trung bình Gần đây Được Làm Mịn

Trung bình trượt hàm mũ (EMA) theo dõi một giá trị bằng cách cân nặng các mẫu gần đây hơn các mẫu cũ, với trọng số suy giảm hàm mũ. Công thức:


EMA(t) = (1 - alpha) EMA(t-1) + alpha value(t)


Nơi alpha (hệ số làm mịn) nằm trong (0, 1). ANDREA sử dụng alpha = 0.1 để theo dõi loss theo từng nguồn.


Từng Thuật Ngữ Một

- value(t): quan sát mới nhất. Đối với ANDREA, đây là loss được báo cáo bởi CUDA sau một forward pass trên tài liệu từ nguồn k.

- EMA(t-1): giá trị EMA trước đó cho nguồn k. Được lưu trong proxy state.

- alpha = 0.1: mỗi loss mới đóng góp 10%; lịch sử tích lũy đóng góp 90%.

- (1 - alpha) = 0.9: trọng số trên lịch sử.


Tại sao dùng EMA thay vì Trung bình Đơn giản

Trung bình chạy đơn giản coi trọng mọi bước bằng nhau. Bước 1 có trọng số giống như bước 100,000. Điều này hoạt động nếu dữ liệu là dừng. Nhưng tổn thất của ANDREA KHÔNG dừng: dung lượng mô hình tăng trong quá trình huấn luyện, nên tổn thất của một nguồn ở bước 5,000 khác với tổn thất của nó ở bước 50,000.


EMA giải quyết vấn đề này. Các giá trị tổn thất cũ mờ dần theo cấp số nhân. EMA phản ánh thực tế gần đây, không phải trung bình điều kiện ban đầu.


Theo Từng Nguồn

ANDREA duy trì một EMA cho mỗi cánh tay (mỗi nguồn). Mười sáu cánh tay = mười sáu EMA. Mỗi bước chỉ cập nhật EMA của nguồn được kéo. 15 EMA còn lại giữ nguyên cho đến lần kéo tiếp theo của chúng.

Tính toán EMA từng bước

Nguồn k có EMA_k(t-1) = 4.521. CUDA báo cáo loss mới cho nguồn k: loss_k(t) = 4.520. Với alpha = 0.1, tính EMA_k(t). Hiển thị: (a) thành phần (1-alpha), (b) (1-alpha) * EMA_k(t-1), (c) alpha * loss_k(t), (d) tổng. Làm tròn đến 4 chữ số thập phân khi cần.

Công thức Reward

Reward = Cải thiện, được Tỷ lệ hóa

ANDREA định nghĩa phần thưởng từng bước cho cánh tay k như sau:


reward_k = max(0, EMA_k(t-1) - loss_k(t)) * 1000


Ba phần:


1. EMA_k(t-1) - loss_k(t): cải thiện. Nếu loss mới thấp hơn trung bình chạy, sự khác biệt là dương: nguồn k hoạt động tốt hơn mong đợi.

2. max(0, ...): cắt các cải thiện âm về zero. Nếu loss mới tệ hơn EMA, không có phần thưởng (nhưng cũng không phạt).

3. \* 1000: mở rộng tỷ lệ để làm cho tín hiệu có thể so sánh được với phần thưởng khám phá UCB.


Reward Attribution Flow


Tại sao max(0, ...)

Phần thưởng âm sẽ đẩy mean_reward(k) xuống, làm lệch UCB chống lại các arm có tổn thất dao động tăng lên. Nhưng dao động là bình thường: một tài liệu khó đơn lẻ làm tăng tổn thất mà không có nghĩa là nguồn kém. Cắt ở mức zero coi dao động là 'không có thông tin' thay vì 'hình phạt'.


Các nguồn có thể nhận phần thưởng zero lặp lại mà không bị chìm. Xếp hạng UCB của chúng vẫn được thúc đẩy bởi phần thưởng khám phá (cao khi n_k nhỏ) cộng với các chiến thắng trước đó.


CUDA Báo Cáo Gì

Mỗi lần forward+backward pass, CUDA kernel phát ra một bản ghi:


{source: 'hermes3-general', doc_index: 4231, loss: 4.520}


Proxy nhận bản ghi, tra cứu EMA cho source đó, tính reward, cập nhật EMA, đưa reward vào accumulator mean_reward(k) của bandit.

Tính một Reward

Nguồn k có EMA_k(t-1) = 4.521. CUDA báo cáo loss_k(t) = 4.520. Tính reward_k từng bước: (a) hiệu số EMA_k(t-1) - loss_k(t), (b) giá trị bị cắt max(0, difference), (c) phần thưởng được nhân tỷ lệ (nhân với 1000). Sau đó cho trường hợp thứ hai nơi loss_k(t) = 4.530 (tệ hơn EMA), tính (d) hiệu số không bị cắt, & (e) phần thưởng cuối cùng sau khi cắt max(0, ...) & nhân tỷ lệ.

Phù hợp Phần thưởng với Thưởng Khám phá

Vấn đề Về Độ Lớn

Các cải thiện loss từng bước chạy nhỏ. Loss giảm từ 4.521 xuống 4.520: hiệu số 0.001. Từ 4.520 xuống 4.518: hiệu số 0.002. Trong toàn bộ quá trình huấn luyện, các hiệu số thô nằm trong khoảng xấp xỉ [0, 0.01].


Bây giờ hãy xem xét bonus khám phá của UCB tại C=0.5, với N=1000 & n_k=20:


0.5 sqrt(ln(1000) / 20) = 0.5 sqrt(6.91 / 20) = 0.5 * 0.588 = 0.294


Bonus chạy ở mức 0.294. Phần thưởng thô chạy ở mức 0.001. Bonus lớn hơn phần thưởng 300 lần. Argmax của UCB sắp xếp hầu như hoàn toàn theo bonus; mean_reward cung cấp tín hiệu gần như bằng không.


Kết quả không có scaling: Bandit của ANDREA chọn cánh tay có n_k nhỏ nhất ở mỗi bước. Mean_reward bị bỏ qua. Bandit trở thành chính sách khám phá thuần túy.


Giải pháp: Nhân 1000 lần

Nhân phần thưởng thô với 1000. Bây giờ phần thưởng nằm ở mức 1.0 (so với thô 0.001). So sánh với cùng mức thưởng khám phá 0.294:


phần thưởng đã scale 1.0 so với thưởng 0.294 = phần thưởng dẫn trước 3.4x


Bây giờ mean_reward thống trị bảng xếp hạng UCB. Khám phá thêm chi tiết cho phần đuôi (các cánh hiếm nhận boost 0.3), nhưng phần thân của bảng xếp hạng đến từ phần thưởng quan sát được.


Tại sao là 1000 (không phải 10, không phải 100.000)

Phù hợp bậc độ lớn. Phần thưởng thô chạy khoảng ~10^-3. Phần thưởng khám phá chạy khoảng ~10^0. Khoảng cách là 10^3. Nhân phần thưởng thô với 10^3 để rơi vào cùng phạm vi với phần thưởng thưởng.


Tăng tỷ lệ 100x để phần thưởng ở mức 0.1 (vẫn nhỏ hơn 0.294 phần thưởng -> khám phá vẫn thống trị). Tăng tỷ lệ 100.000x nâng phần thưởng lên 100 (bây giờ khám phá không thể ảnh hưởng gì; UCB sụp đổ thành mean_reward tham lam). 1000x nằm trong vùng làm việc nơi cả hai thuật ngữ đều đóng góp.


Hiệu chỉnh, Không Phải Lý Thuyết

Hệ số 1000x là hiệu chỉnh kỹ thuật, không phải hằng số lý thuyết. Nó phụ thuộc vào ba thứ: thang mất mát huấn luyện (cross-entropy trên từ vựng 8K token chạy gần 4.5), tốc độ suy giảm mất mát mỗi bước (chậm), & hằng số UCB C=0.5. Thay đổi bất kỳ cái nào, 1000 có thể không còn là hệ số nhân đúng nữa.

Suy Luận Về Hệ Số Tăng Tỷ Lệ

Giả sử ANDREA nhân thưởng thô lên 100x thay vì 1000x. Với thưởng thô 0.001 & thưởng khám phá UCB 0.294 (C=0.5, N=1000, n_k=20): (a) tính thưởng đã nhân ở 100x, (b) tính thưởng đã nhân ở 1000x, (c) với mỗi mức nhân, xác định thuật ngữ nào (mean_reward hay exploration bonus) chiếm ưu thế trong điểm UCB cho một cánh tay có mean_reward bằng thưởng đã nhân. (d) Trong một câu, giải thích tại sao 1000x cân bằng hai thuật ngữ.

Tiếp Theo

Những Gì Bạn Đã Có

Reward attribution chuyển báo cáo loss của CUDA thành tín hiệu sẵn sàng cho UCB qua ba phép toán: EMA theo nguồn theo dõi lịch sử loss (alpha=0.1, chậm), reward = max(0, EMA - loss) cắt bỏ số âm, & nhân 1000x khớp độ lớn thưởng với độ lớn thưởng khám phá UCB.


Những gì còn lại

Các tầng sàn & hình phạt epoch (hoạt động 79) hoạt động trên đầu ra của UCB. Các tầng sàn nguồn đảm bảo lấy mẫu tối thiểu cho các nguồn ưu tiên bất kể thứ hạng UCB. Hình phạt epoch làm giảm trọng số các nguồn đã được kéo nhiều lần hơn số tài liệu của chúng, ngăn chặn việc ghi nhớ các tập dữ liệu nhỏ trong khi các tập dữ liệu lớn vẫn tươi mới.


Tài liệu tham khảo

ANDREA whitepaper, phần 3.3.