Giới thiệu Random Search

Tinh chỉnh siêu tham số trong Python

Alex Scriven

Data Scientist

Điều bạn đã biết

 

Rất giống grid search:

  • Xác định estimator, các siêu tham số cần tinh chỉnh và miền giá trị cho mỗi tham số.
  • Vẫn đặt lược đồ cross-validation và hàm đánh giá.

 

NHƯNG ta chọn ô của grid một cách ngẫu nhiên.

Tinh chỉnh siêu tham số trong Python

Vì sao cách này hiệu quả?

Bengio & Bergstra (2012):

Bài báo này chỉ ra bằng thực nghiệm và lý thuyết rằng chọn thử ngẫu nhiên hiệu quả hơn grid cho tối ưu siêu tham số.

Hai lý do chính:

  1. Không phải siêu tham số nào cũng quan trọng như nhau
  2. Một mẹo xác suất nhỏ
Tinh chỉnh siêu tham số trong Python

Một mẹo xác suất

Grid search:

10x10 các mô hình khác nhau

Chạy bao nhiêu mô hình để có 95% cơ hội trúng một ô xanh lá?

Mô hình tốt nhất của ta:

10x10 các mô hình khác nhau

Tinh chỉnh siêu tham số trong Python

Một mẹo xác suất

 

Nếu ta chọn đều ngẫu nhiên các tổ hợp siêu tham số, hãy xét xác suất BỎ LỠ mọi lần thử để thấy điều đó hiếm thế nào

  • Thử 1 = xác suất thành công 0.05 và bỏ lỡ là (1 - 0.05)

    • Thử 2 = (1-0.05) x (1-0.05) để bỏ lỡ miền đó
      • Thử 3 = (1-0.05) x (1-0.05) x (1-0.05) lại bỏ lỡ
  • Với n lần thử, xác suất mọi lần đều bỏ lỡ điểm mong muốn là (1-0.05)^n.

Tinh chỉnh siêu tham số trong Python

Một mẹo xác suất

 

Vậy cần bao nhiêu lần thử để có xác suất cao (95%) rơi vào vùng đó?

  • Xác suất bỏ lỡ hết là (1-0.05)^n.
  • Nên xác suất rơi vào đó là 1 - (bỏ lỡ hết), tức (1-(1-0.05)^n).
  • Giải 1-(1-0.05)^n >= 0.95 cho kết quả n >= 59
Tinh chỉnh siêu tham số trong Python

Một mẹo xác suất

 

Ý nghĩa là gì?

  • Khi chọn ngẫu nhiên, bạn khó có thể liên tục bỏ lỡ “vùng tốt” trong thời gian dài.
  • Grid search có thể tốn nhiều thời gian ở “vùng xấu” do quét cạn.
Tinh chỉnh siêu tham số trong Python

Một số lưu ý quan trọng

 

Ghi nhớ:

  1. Giá trị cực đại vẫn chỉ tốt bằng chính cái grid bạn đặt!

  2. Để so sánh công bằng với grid search, cần cùng “ngân sách” mô hình hóa.

Tinh chỉnh siêu tham số trong Python

Tạo mẫu ngẫu nhiên siêu tham số

Ta có thể tự tạo mẫu ngẫu nhiên các tổ hợp siêu tham số:

# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in 
                    product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
                            range(0,len(combinations_list)), 100, 
                            replace=False)
combinations_random_chosen = [combinations_list[x] for x in 
                            random_combinations_index]
Tinh chỉnh siêu tham số trong Python

Trực quan hóa Random Search

Ta cũng có thể trực quan hóa phạm vi random search bằng cách vẽ các lựa chọn siêu tham số trên trục X và Y.

đồ thị phạm vi random search

Hãy để ý: phân tán rộng nhưng không phủ sâu.

Tinh chỉnh siêu tham số trong Python

Ayo berlatih!

Tinh chỉnh siêu tham số trong Python

Preparing Video For Download...