Có thể gỡ lỗi và giảm thiểu các lỗi tối ưu hoá bằng cách nào?
Tóm tắt: Nếu mô hình đang gặp khó khăn khi tối ưu hoá, thì điều quan trọng là phải khắc phục các khó khăn đó trước khi thử những cách khác. Chẩn đoán và khắc phục các lần thất bại trong đào tạo là một lĩnh vực nghiên cứu tích cực.
![Biểu đồ so sánh Standard WideResNet với Stride 1x1 WideResNet.
Trục y là Tỷ lệ lỗi kiểm tra; trục x là Tỷ lệ học cơ bản.
Standard WideResNet nhận thấy TestErrorRate giảm dần khi Tỷ lệ học cơ bản tăng lên. Ngược lại, Stride WideResNet
trải qua những biến động quá lớn khi Tỷ lệ học cơ bản tăng lên.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/stride_instability.png?authuser=0&hl=vi)
Lưu ý những điều sau đây về Hình 4:
- Việc thay đổi bước tiến không làm giảm hiệu suất ở tốc độ học thấp.
- Tỷ lệ học cao không còn được huấn luyện tốt do không ổn định.
- Việc áp dụng 1000 bước khởi động tốc độ học sẽ giúp giải quyết trường hợp không ổn định cụ thể này, cho phép huấn luyện ổn định với tốc độ học tối đa là 0,1.
Xác định khối lượng công việc không ổn định
Mọi khối lượng công việc đều trở nên không ổn định nếu tốc độ học quá lớn. Sự không ổn định chỉ là vấn đề khi buộc bạn phải sử dụng một tốc độ học quá nhỏ. Bạn cần có ít nhất 2 loại tình trạng không ổn định trong quá trình huấn luyện để phân biệt:
- Không ổn định khi khởi động hoặc ở giai đoạn đầu trong quá trình huấn luyện.
- Đột nhiên bất ổn trong quá trình tập luyện.
Bạn có thể áp dụng phương pháp có hệ thống để xác định các vấn đề về độ ổn định trong khối lượng công việc của mình bằng cách làm như sau:
- Đẩy mạnh tốc độ học tập và tìm ra tỷ lệ học tập tốt nhất lr*.
- Vẽ đường cong tổn thất trong quá trình đào tạo cho tỷ lệ học tập ngay phía trên lr*.
- Nếu tốc độ học > lr* cho thấy sự mất ổn định về mức mất mát (tổn thất không giảm trong thời gian huấn luyện), thì việc khắc phục sự không ổn định này thường cải thiện quá trình huấn luyện.
Ghi lại tiêu chuẩn L2 của độ dốc giảm hoàn toàn trong quá trình huấn luyện, vì các giá trị ngoại lệ có thể gây ra sự không ổn định giả trong quá trình huấn luyện. Mã này có thể cho biết mức độ mạnh mẽ khi cắt chuyển màu hoặc cập nhật độ đậm.
LƯU Ý: Một số mô hình cho thấy sự không ổn định rất sớm, sau đó là quá trình phục hồi dẫn đến quá trình huấn luyện chậm nhưng ổn định. Lịch đánh giá thông thường có thể bỏ qua những vấn đề này do không đánh giá đủ thường xuyên!
Để kiểm tra điều này, bạn có thể huấn luyện cho một lần chạy viết tắt chỉ khoảng 500 bước bằng cách sử dụng lr = 2 * current best
, nhưng đánh giá từng bước.
![Hai biểu đồ: trục x của cả hai biểu đồ là Bước toàn cục; trục y cho cả hai biểu đồ là Mất tàu. Cả hai biểu đồ đều so sánh Bước chuyển đổi là
(2,2) với Bước chuyển đổi là (1,1). Biểu đồ đầu tiên cho thấy số liệu đánh giá sau mỗi 1.000 bước. Trong biểu đồ đầu tiên này, cả hai Bước chuyển đổi đều cho thấy mức giảm dần ổn định với nhiều Bước toàn cục hơn. Biểu đồ thứ hai cho thấy các hoạt động đánh giá thường xuyên trong 25 bước đầu tiên. Trong biểu đồ thứ hai này, Bước chuyển đổi của (2,2) cho thấy sự thay đổi nhanh về tình trạng mất tàu trong một số Bước toàn cầu đầu tiên trước khi xuống mức thấp nhất quán hơn 20 bước toàn cầu. Bước chuyển đổi của (1,1) cho thấy tỷ lệ mất chuyến tàu liên tục ở mức thấp ngay cả sau Bước toàn cầu đầu tiên.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/more_frequent_evals.png?authuser=0&hl=vi)
Cách khắc phục có thể áp dụng cho các kiểu không ổn định thường gặp
Hãy cân nhắc những cách khắc phục có thể áp dụng cho các kiểu hình thức không ổn định thường gặp:
- Áp dụng phương pháp khởi động cho tốc độ học tập. Đây là tính năng phù hợp nhất với những thay đổi trong quá trình huấn luyện ban đầu.
- Áp dụng tính năng cắt chuyển màu. Điều này tốt cho cả tình trạng bất ổn ở giai đoạn đầu và giữa quá trình huấn luyện, đồng thời có thể khắc phục một số thao tác khởi động không hợp lệ mà không thể khởi động.
- Thử một trình tối ưu hoá mới. Đôi khi Adam có thể xử lý những tình trạng bất ổn định mà Momentum không thể. Đây là một lĩnh vực nghiên cứu đang được tích cực nghiên cứu.
- Hãy đảm bảo rằng bạn đang sử dụng các phương pháp hay nhất và các cách khởi chạy tốt nhất cho cấu trúc mô hình của mình (xem ví dụ sau). Thêm các kết nối dư và chuẩn hoá nếu mô hình chưa chứa các kết nối này.
- Chuẩn hoá là toán tử cuối cùng trước phần dư. Ví dụ:
x + Norm(f(x))
. Xin lưu ý rằngNorm(x + f(x))
có thể gây ra vấn đề. - Hãy thử khởi tạo các nhánh còn lại thành 0. (Xem bài viết ReZero là tất cả những gì bạn cần: Hội tụ nhanh ở độ sâu lớn.)
- Giảm tốc độ học. Không còn cách nào khác.
Khởi động tốc độ học
![Hai biểu đồ minh hoạ cùng một thử nghiệm. Trong biểu đồ đầu tiên, trục x là Bước toàn cục và trục y là Mất tàu. Với những con số khởi động cho tốc độ học tập thấp, tính năng Train Lost hoàn toàn không ổn định.
Với số lần khởi động tốc độ học tập cao hơn, tình trạng mất xe đã được ổn định hơn nhiều.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/instability_during_warmup.png?authuser=0&hl=vi)
Trường hợp nên áp dụng khởi động tốc độ học tập
![Biểu đồ về mức mất entropy chéo trên tập xác thực (Trục y) so với
Tốc độ học cơ sở (Trục x). Biểu đồ này cho thấy 6 phiên bản thử nghiệm khả thi, tất cả đều có tỷ lệ học cơ bản tương đối thấp. Số người dùng mất khả năng xác thực sẽ giảm khi tỷ lệ học cơ bản tăng lên, sau đó đạt một điểm thấp trước khi bắt đầu tăng lên. Biểu đồ này cũng cho thấy 4 phiên bản thử nghiệm không khả thi, tất cả đều có tỷ lệ học cơ sở tương đối cao.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/axis_model_with_instability.png?authuser=0&hl=vi)
![Biểu đồ suy giảm entropy trên tập huấn luyện (Trục y) so với Bước toàn cục (Trục x). tổn thất giảm rất nhanh trong các bước Toàn cục ban đầu. Sau đó, số bước bị mất tăng đáng kể khoảng 10.000 bước. Sau đó, mức mất mát giảm dần khoảng 15.000 bước.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/loss_model_with_instability.png?authuser=0&hl=vi)
Hình 7a cho thấy một biểu đồ trục siêu tham số cho thấy một mô hình đang gặp tình trạng không ổn định khi tối ưu hoá, vì tốc độ học cao nhất nằm ngay cạnh của sự không ổn định.
Hình 7b cho thấy cách kiểm tra kỹ vấn đề này bằng cách kiểm tra tổn thất trong quá trình huấn luyện của một mô hình đã được huấn luyện có tốc độ học lớn hơn gấp 5 lần hoặc 10 lần so với đỉnh này. Nếu biểu đồ đó cho thấy sự gia tăng đột ngột về sự sụt giảm sau khi giảm ổn định (ví dụ: ở bước ~10k trong hình trên), thì mô hình có thể bị thiếu ổn định tối ưu hoá.
Cách áp dụng khởi động tốc độ học tập
![Biểu đồ về tỷ lệ mất xác thực ở bước 76619 (Trục y) so với tốc độ học cơ sở (Trục x). Biểu đồ so sánh kết quả của 4 tình huống trên Bộ chuyển đổi LayerNorm trên WMT14 EN-De. Việc khởi động tốc độ học tập giúp giảm tỷ lệ xác thực bị mất ở tốc độ học thấp hơn.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/beneficial_effect_warmup.png?authuser=0&hl=vi)
Đặt unstable_base_learning_rate
là tốc độ học mà mô hình trở nên không ổn định, theo quy trình trước đó.
Khởi động bao gồm việc chuẩn bị trước lịch trình tốc độ học tập để tăng tốc độ học từ 0 lên một base_learning_rate
ổn định có ít nhất một bậc lớn hơn unstable_base_learning_rate
.
Tuỳ chọn mặc định là dùng thử base_learning_rate
có kích thước 10 lần unstable_base_learning_rate
. Mặc dù vậy, xin lưu ý rằng bạn có thể chạy lại toàn bộ quy trình này cho unstable_base_learning_rate
100 lần. Lịch trình cụ thể là:
- Tăng dần từ 0 lên base_learning_rate qua bước khởi động.
- Đào tạo với tốc độ không đổi cho các bước sau_warmup.
Mục tiêu của bạn là tìm ra số lượng warmup_steps
ngắn nhất cho phép bạn đạt tốc độ học tập cao nhất cao hơn nhiều so với unstable_base_learning_rate
.
Vì vậy, đối với mỗi base_learning_rate
, bạn cần điều chỉnh warmup_steps
và post_warmup_steps
. Thông thường, bạn có thể đặt post_warmup_steps
thành 2*warmup_steps
.
Bạn có thể điều chỉnh quá trình khởi động độc lập với lịch giảm dần hiện có. warmup_steps
sẽ bị quét ở một vài thứ tự độ lớn khác nhau. Ví dụ: một nghiên cứu mẫu có thể dùng thử [10, 1000, 10,000, 100,000]
. Điểm khả thi lớn nhất không được lớn hơn 10% max_train_steps
.
Sau khi một warmup_steps
không hoạt động huấn luyện tại base_learning_rate
đã được thiết lập, bạn cần áp dụng dữ liệu đó cho mô hình cơ sở.
Về cơ bản, hãy thêm lịch biểu này vào lịch biểu hiện có và sử dụng lựa chọn điểm kiểm tra tối ưu đã thảo luận ở trên để so sánh thử nghiệm này với đường cơ sở. Ví dụ: nếu ban đầu chúng tôi có 10.000 max_train_steps
và đã thực hiện warmup_steps
cho 1.000 bước, thì quy trình huấn luyện mới sẽ chạy cho tổng cộng 11.000 bước.
Nếu cần phải có warmup_steps
dài để huấn luyện ổn định (>5% max_train_steps
), thì bạn có thể cần phải tăng max_train_steps
để giải quyết vấn đề này.
Không thực sự có giá trị "thông thường" trên toàn bộ khối lượng công việc. Một số mô hình chỉ cần 100 bước, trong khi một số mô hình khác (đặc biệt là bộ biến đổi) có thể cần hơn 40 nghìn bước.
Cắt chuyển màu
![Biểu đồ định mức Grad l2 (Trục y) so với Bước toàn cục (Trục x). Quy trình huấn luyện chuẩn độ chuyển màu "thông thường" rất không ổn định trong các bước đầu trên toàn cầu. Ngưỡng đối với đoạn video quá linh hoạt đã làm giảm tốc độ học và làm chậm quá trình huấn luyện. Ngưỡng về đoạn video tốt hơn (ngay trên tiêu chuẩn về độ chuyển màu thông thường) giúp ổn định quá trình huấn luyện sớm.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/gradient_clipping.png?authuser=0&hl=vi)
Tính năng cắt chuyển màu hữu ích nhất khi xảy ra sự cố chuyển màu lớn hoặc ngoại lệ. Tính năng cắt chuyển màu có thể khắc phục một trong những vấn đề sau:
- Tình trạng không ổn định trong quá trình huấn luyện ban đầu (giá trị chuyển màu lớn ở giai đoạn đầu)
- Sự không ổn định trong quá trình huấn luyện (độ dốc đột ngột tăng đột biến giữa quá trình huấn luyện).
Đôi khi, thời gian khởi động dài hơn có thể khắc phục những sự bất ổn định mà việc cắt bớt không khắc phục được. Để biết thông tin chi tiết, hãy xem bài viết Khởi động tốc độ học tập.
🤖 Còn việc cắt video trong quá trình khởi động thì sao?
Ngưỡng chuyển màu lý tưởng là ngưỡng ở ngay trên tiêu chuẩn chuyển màu "thông thường".
Sau đây là ví dụ về cách thực hiện việc cắt chuyển màu:
- Nếu tiêu chuẩn của hiệu ứng chuyển màu $\left | g \right |$ lớn hơn ngưỡng cắt chuyển màu $\lambda$, thì hãy thực hiện ${g}'= \lambda \times \frac{g}{\left | g \right |}$ trong đó ${g}'$ là dải chuyển màu mới.
Ghi lại tiêu chuẩn độ dốc không bị cắt trong quá trình huấn luyện. Theo mặc định, hãy tạo:
- Biểu đồ so sánh chuẩn độ dốc so với bậc thang
- Biểu đồ định mức độ dốc được tổng hợp qua tất cả các bước
Chọn ngưỡng cắt độ dốc dựa trên phân vị thứ 90 của tiêu chuẩn chuyển màu. Ngưỡng này phụ thuộc vào khối lượng công việc, nhưng 90% là điểm khởi đầu phù hợp. Nếu 90% không hiệu quả, bạn có thể điều chỉnh ngưỡng này.
🤖 Thế còn một số loại chiến lược thích ứng thì sao?
Nếu thử cắt độ dốc mà vẫn gặp phải vấn đề về độ không ổn định, thì bạn có thể cố gắng hơn; nghĩa là bạn có thể thu nhỏ ngưỡng này.
Tính năng cắt chuyển màu (gradient) cực kỳ linh hoạt (tức là hơn 50% số bản cập nhật bị cắt bớt), về bản chất là một cách kỳ lạ để giảm tốc độ học. Nếu phải cắt video quá linh hoạt, thì có lẽ bạn chỉ nên cắt giảm tốc độ học.
Tại sao Google gọi tốc độ học và các thông số tối ưu hoá khác là siêu thông số? Chúng không phải là tham số của bất kỳ lượt phân phối nào trước đó.
Thuật ngữ "hyperparameter" có ý nghĩa chính xác trong công nghệ học máy Bayes. Vì vậy, việc đề cập đến tốc độ học tập và hầu hết các tham số học sâu có thể điều chỉnh khác là "hyperparameter" có thể là một hành vi lạm dụng thuật ngữ. Chúng tôi muốn sử dụng thuật ngữ "metaparameter" cho tốc độ học, tham số cấu trúc và tất cả những nội dung có thể điều chỉnh khác cho mô hình học sâu. Đó là vì siêu tham số tránh nguy cơ gây nhầm lẫn khi sử dụng sai từ "siêu tham số". Sự nhầm lẫn này đặc biệt có thể xảy ra khi thảo luận về tối ưu hoá Bayes, trong đó các mô hình bề mặt phản hồi xác suất có siêu tham số thực sự của riêng chúng.
Đáng tiếc là mặc dù có thể gây nhầm lẫn, nhưng thuật ngữ "siêu tham số" đã trở nên cực kỳ phổ biến trong cộng đồng học sâu. Do đó, trong tài liệu này, dành cho nhiều đối tượng bao gồm nhiều người có khả năng không biết đến kỹ thuật này, chúng tôi đã lựa chọn để góp phần gây ra một vấn đề gây nhầm lẫn trong lĩnh vực này với hy vọng tránh được một vấn đề khác. Tuy nhiên, chúng tôi có thể chọn một lựa chọn khác khi xuất bản một bài viết nghiên cứu và khuyến khích những người khác sử dụng "metaparameter" trong hầu hết các ngữ cảnh.
Tại sao bạn không nên điều chỉnh kích thước lô để trực tiếp cải thiện hiệu suất của nhóm xác thực?
Việc thay đổi kích thước lô mà không thay đổi bất kỳ thông tin chi tiết nào khác của quy trình huấn luyện thường ảnh hưởng đến hiệu suất của tập hợp xác thực. Tuy nhiên, sự khác biệt về hiệu suất của bộ xác thực giữa hai kích thước lô thường sẽ biến mất nếu quy trình huấn luyện được tối ưu hoá một cách độc lập cho từng kích thước lô.
Các siêu tham số tương tác mạnh nhất với kích thước lô, và do đó quan trọng nhất là cần tinh chỉnh riêng cho từng kích thước lô, là các siêu tham số của trình tối ưu hoá (ví dụ: tốc độ học, động lượng) và siêu tham số chính quy. Kích thước lô nhỏ hơn gây ra nhiều độ nhiễu hơn trong thuật toán huấn luyện do phương sai của mẫu. Tiếng ồn này có thể có tác dụng điều chỉnh. Do đó, các kích thước lô lớn có thể dễ bị quá mức và có thể yêu cầu việc điều chỉnh mạnh hơn và/hoặc các kỹ thuật chuẩn hoá khác. Ngoài ra, bạn có thể cần phải điều chỉnh số bước huấn luyện khi thay đổi kích thước lô.
Khi tất cả những tác động này được xem xét, không có bằng chứng thuyết phục nào cho thấy kích thước lô ảnh hưởng đến hiệu suất xác thực tối đa có thể đạt được. Để biết thông tin chi tiết, hãy xem Shallue và cộng sự 2018.
Có những quy tắc cập nhật nào cho tất cả thuật toán tối ưu hoá phổ biến?
Phần này cung cấp thông tin cập nhật về các quy tắc cho một số thuật toán tối ưu hoá phổ biến.
Giảm độ dốc ngẫu nhiên (SGD)
\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]
Trong đó $\eta_t$ là tỷ lệ học tập ở bước $t$.
Đà phát triển
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]
Trong đó $\eta_t$ là tỷ lệ học ở bước $t$ và $\gamma$ là hệ số động lượng.
Nesterov
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]
Trong đó $\eta_t$ là tỷ lệ học ở bước $t$ và $\gamma$ là hệ số động lượng.
RMSProp
\[v_0 = 1 \text{, } m_0 = 0\]
\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]
\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - m_{t+1}\]
Quảng cáo tìm kiếm động (ADAM)
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]
NADAM (NADAM)
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]