Tối ưu hóa siêu tham số với Amazon SageMaker Điều chỉnh mô hình tự động PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Tối ưu hóa siêu đường kính với Amazon SageMaker Automatic Model Tuning

Các mô hình máy học (ML) đang gây bão trên toàn thế giới. Hiệu suất của chúng phụ thuộc vào việc sử dụng dữ liệu đào tạo phù hợp và chọn đúng mô hình và thuật toán. Nhưng nó không kết thúc ở đây. Thông thường, các thuật toán trì hoãn một số quyết định thiết kế cho người thực hành ML để áp dụng cho dữ liệu và nhiệm vụ cụ thể của họ. Những quyết định thiết kế bị trì hoãn này thể hiện dưới dạng siêu tham số.

Cái tên đó có ý nghĩa gì? Kết quả của việc đào tạo ML, mô hình, phần lớn có thể được coi là một tập hợp các tham số được học trong quá trình đào tạo. Do đó, các tham số được sử dụng để định cấu hình quy trình đào tạo ML sau đó được gọi là siêu tham số—tham số mô tả việc tạo tham số. Ở bất kỳ mức độ nào, chúng đều được sử dụng rất thực tế, chẳng hạn như số lượng kỷ nguyên cần đào tạo, tốc độ học tập, độ sâu tối đa của cây quyết định, v.v. Và chúng tôi rất chú ý đến chúng vì chúng có tác động lớn đến hiệu suất cuối cùng của mô hình của bạn.

Giống như xoay núm trên máy thu thanh để tìm tần số phù hợp, mỗi siêu tham số phải được điều chỉnh cẩn thận để tối ưu hóa hiệu suất. Tìm kiếm không gian siêu tham số cho các giá trị tối ưu được gọi là điều chỉnh siêu tham số or tối ưu hóa siêu tham số (HPO) và sẽ dẫn đến một mô hình đưa ra dự đoán chính xác.

Trong bài đăng này, chúng tôi đã thiết lập và chạy công việc HPO đầu tiên của mình bằng cách sử dụng Điều chỉnh mô hình tự động của Amazon SageMaker (AMT). Chúng tôi tìm hiểu về các phương pháp có sẵn để khám phá kết quả và tạo ra một số hình ảnh trực quan sâu sắc về các thử nghiệm HPO của chúng tôi và khám phá không gian siêu tham số!

Điều chỉnh mô hình tự động của Amazon SageMaker

Là một học viên ML sử dụng SageMaker AMT, bạn có thể tập trung vào những điều sau:

  • Cung cấp một công việc đào tạo
  • Xác định đúng số liệu mục tiêu phù hợp với nhiệm vụ của bạn
  • Phạm vi không gian tìm kiếm siêu tham số

SageMaker AMT sẽ lo phần còn lại và bạn không cần phải suy nghĩ về cơ sở hạ tầng, sắp xếp các công việc đào tạo và cải thiện lựa chọn siêu tham số.

Hãy bắt đầu bằng cách sử dụng SageMaker AMT cho công việc HPO đơn giản đầu tiên của chúng tôi, để đào tạo và điều chỉnh thuật toán XGBoost. Chúng tôi muốn hành trình AMT của bạn trở nên thực tế và thiết thực, vì vậy chúng tôi đã chia sẻ ví dụ sau đây Kho GitHub. Bài đăng này bao gồm các 1_tuning_of_builtin_xgboost.ipynb sổ tay.

Trong một bài đăng sắp tới, chúng tôi sẽ mở rộng khái niệm chỉ tìm các siêu tham số tốt nhất và bao gồm việc tìm hiểu về không gian tìm kiếm cũng như phạm vi siêu tham số mà một mô hình nhạy cảm. Chúng tôi cũng sẽ chỉ ra cách biến hoạt động điều chỉnh một lần thành cuộc trò chuyện nhiều bước với học viên ML để cùng nhau tìm hiểu. Hãy theo dõi (ý định chơi chữ)!

Điều kiện tiên quyết

Bài đăng này dành cho bất kỳ ai quan tâm đến việc tìm hiểu về HPO và không yêu cầu kiến ​​thức trước về chủ đề này. Mặc dù vậy, việc làm quen cơ bản với các khái niệm ML và lập trình Python rất hữu ích. Để có trải nghiệm học tập tốt nhất, chúng tôi thực sự khuyên bạn nên làm theo chạy từng bước trong vở song song với việc đọc bài viết này. Và ở cuối sổ ghi chép, bạn cũng có thể dùng thử một hình ảnh trực quan tương tác làm cho kết quả điều chỉnh trở nên sống động.

Tổng quan về giải pháp

Chúng tôi sẽ xây dựng một thiết lập đầu cuối để chạy công việc HPO đầu tiên của mình bằng SageMaker AMT. Khi công việc điều chỉnh của chúng tôi hoàn tất, chúng tôi xem xét một số phương pháp có sẵn để khám phá kết quả, cả hai thông qua Bảng điều khiển quản lý AWS và lập trình thông qua AWS SDK và API.

Đầu tiên, chúng tôi làm quen với môi trường và chương trình Đào tạo SageMaker bằng cách điều hành một công việc đào tạo độc lập mà không cần điều chỉnh vào lúc này. Chúng tôi sử dụng thuật toán XGBoost, một trong nhiều thuật toán được cung cấp dưới dạng Thuật toán tích hợp SageMaker (không cần kịch bản đào tạo!).

Chúng tôi thấy cách hoạt động của chương trình Đào tạo SageMaker theo các cách sau:

  • Bắt đầu và dừng một thể hiện
  • Cung cấp container cần thiết
  • Sao chép dữ liệu đào tạo và xác nhận vào phiên bản
  • Chạy đào tạo
  • Thu thập số liệu và nhật ký
  • Thu thập và lưu trữ mô hình được đào tạo

Sau đó, chúng tôi chuyển sang AMT và chạy một công việc HPO:

  • Chúng tôi thiết lập và khởi chạy công việc điều chỉnh của mình với AMT
  • Chúng tôi đi sâu vào các phương pháp có sẵn để trích xuất các chỉ số hiệu suất chi tiết và siêu dữ liệu cho từng công việc đào tạo, cho phép chúng tôi tìm hiểu thêm về các giá trị tối ưu trong không gian siêu tham số của chúng tôi
  • Chúng tôi chỉ cho bạn cách xem kết quả của các thử nghiệm
  • Chúng tôi cung cấp cho bạn các công cụ để trực quan hóa dữ liệu trong một loạt biểu đồ tiết lộ thông tin chi tiết có giá trị về không gian siêu tham số của chúng tôi

Đào tạo thuật toán XGBoost tích hợp SageMaker

Tất cả bắt đầu với việc đào tạo một người mẫu. Khi làm như vậy, chúng tôi hiểu được cách thức hoạt động của chương trình Đào tạo SageMaker.

Chúng tôi muốn tận dụng tốc độ và tính dễ sử dụng do SageMaker cung cấp thuật toán tích hợp. Tất cả những gì chúng ta cần là một vài bước để bắt đầu đào tạo:

  1. Chuẩn bị và tải dữ liệu – Chúng tôi tải xuống và chuẩn bị tập dữ liệu của mình làm đầu vào cho XGBoost và tải nó lên Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) xô.
  2. Chọn URI hình ảnh của thuật toán tích hợp của chúng tôi – SageMaker sử dụng URI này để tìm nạp vùng chứa đào tạo của chúng tôi, trong trường hợp của chúng tôi chứa tập lệnh đào tạo XGBoost sẵn sàng hoạt động. Một số phiên bản thuật toán được hỗ trợ.
  3. Định nghĩa các siêu tham số – SageMaker cung cấp giao diện để xác định siêu tham số cho thuật toán tích hợp của chúng tôi. Đây là những siêu tham số giống như được sử dụng bởi phiên bản nguồn mở.
  4. Xây dựng công cụ ước tính – Chúng tôi xác định các tham số đào tạo như loại phiên bản và số lượng phiên bản.
  5. Gọi hàm fit() – Chúng ta bắt đầu công việc đào tạo của mình.

Sơ đồ sau đây cho thấy các bước này phối hợp với nhau như thế nào.

Cung cấp dữ liệu

Để chạy đào tạo ML, chúng tôi cần cung cấp dữ liệu. Chúng tôi cung cấp dữ liệu xác thực và đào tạo của mình cho SageMaker thông qua Amazon S3.

Trong ví dụ của chúng tôi, để đơn giản, chúng tôi sử dụng bộ chứa mặc định của SageMaker để lưu trữ dữ liệu của mình. Nhưng vui lòng tùy chỉnh các giá trị sau theo sở thích của bạn:

sm_sess = sagemaker.session.Session([..])

BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
output_path = f's3://{BUCKET}/{PREFIX}/output'

Trong sổ ghi chép, chúng tôi sử dụng tập dữ liệu công khai và lưu trữ dữ liệu cục bộ trong data danh mục. Sau đó, chúng tôi tải dữ liệu đào tạo và xác thực của mình lên Amazon S3. Sau đó, chúng tôi cũng xác định các con trỏ tới các vị trí này để chuyển chúng tới Chương trình đào tạo SageMaker.

# acquire and prepare the data (not shown here)
# store the data locally
[..]
train_data.to_csv('data/train.csv', index=False, header=False)
valid_data.to_csv('data/valid.csv', index=False, header=False)
[..]
# upload the local files to S3
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/train/train.csv')).upload_file('data/train.csv')
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/valid/valid.csv')).upload_file('data/valid.csv')

Trong bài viết này, chúng tôi tập trung giới thiệu về HPO. Để minh họa, chúng tôi sử dụng một tập dữ liệu và tác vụ cụ thể để có thể thu được phép đo các chỉ số khách quan mà sau đó chúng tôi sử dụng để tối ưu hóa việc lựa chọn siêu tham số. Tuy nhiên, đối với toàn bộ bài đăng, dữ liệu cũng như nhiệm vụ đều không quan trọng. Để cung cấp cho bạn một bức tranh hoàn chỉnh, hãy để chúng tôi mô tả ngắn gọn những gì chúng tôi làm: chúng tôi đào tạo một mô hình XGBoost sẽ phân loại các chữ số viết tay từ
Nhận dạng quang học của tập dữ liệu chữ số viết tay [1] thông qua Scikit-learning. XGBoost là một thuật toán tuyệt vời cho dữ liệu có cấu trúc và thậm chí có thể được áp dụng cho bộ dữ liệu Digits. Các giá trị là hình ảnh 8×8, như trong ví dụ sau hiển thị một
0 a
5
4.

Tối ưu hóa siêu tham số với Amazon SageMaker Điều chỉnh mô hình tự động PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chọn URI hình ảnh XGBoost

Sau khi chọn thuật toán tích hợp (XGBoost), chúng tôi phải truy xuất URI hình ảnh và chuyển URI này cho SageMaker để tải lên phiên bản đào tạo của chúng tôi. Đối với bước này, chúng tôi xem xét các phiên bản có sẵn. Ở đây, chúng tôi đã quyết định sử dụng phiên bản 1.5.1, phiên bản này cung cấp phiên bản mới nhất của thuật toán. Tùy thuộc vào nhiệm vụ, các học viên ML có thể viết kịch bản đào tạo của riêng họ, chẳng hạn như bao gồm các bước chuẩn bị dữ liệu. Nhưng điều này là không cần thiết trong trường hợp của chúng tôi.

Nếu bạn muốn viết kịch bản đào tạo của riêng mình, hãy tiếp tục theo dõi, chúng tôi sẽ đề cập đến bạn trong bài đăng tiếp theo! Chúng tôi sẽ chỉ cho bạn cách chạy các công việc Đào tạo SageMaker bằng các tập lệnh đào tạo tùy chỉnh của riêng bạn.

Hiện tại, chúng tôi cần URI hình ảnh chính xác bằng cách chỉ định thuật toán, Khu vực AWS và số phiên bản:

xgboost_container = sagemaker.image_uris.retrieve('xgboost', region, '1.5-1')

Đó là nó. Bây giờ chúng ta có một tham chiếu đến thuật toán XGBoost.

Định nghĩa các siêu tham số

Bây giờ chúng tôi xác định siêu tham số của chúng tôi. Các giá trị này định cấu hình cách mô hình của chúng tôi sẽ được đào tạo và cuối cùng ảnh hưởng đến cách mô hình hoạt động so với chỉ số khách quan mà chúng tôi đang đo lường, chẳng hạn như độ chính xác trong trường hợp của chúng tôi. Lưu ý rằng không có gì về khối mã sau đây dành riêng cho SageMaker. Chúng tôi đang thực sự sử dụng phiên bản mã nguồn mở của XGBoost, vừa được cung cấp và tối ưu hóa cho SageMaker.

Mặc dù mỗi siêu đường kính này đều có thể định cấu hình và điều chỉnh, số liệu khách quan multi:softmax được xác định bởi tập dữ liệu của chúng tôi và loại vấn đề mà chúng tôi đang giải quyết. Trong trường hợp của chúng tôi, bộ dữ liệu Digits chứa nhiều nhãn (quan sát về một chữ số viết tay có thể là 0 or 1,2,3,4,5,6,7,8,9), nghĩa là đây là bài toán phân loại nhiều lớp.

hyperparameters = {
    'num_class': 10,
    'max_depth': 5,
    'eta':0.2,
    'alpha': 0.2,
    'objective':'multi:softmax',
    'eval_metric':'accuracy',
    'num_round':200,
    'early_stopping_rounds': 5
}

Để biết thêm thông tin về các siêu tham số khác, hãy tham khảo Siêu tham số XGBoost.

Xây dựng công cụ ước tính

Chúng tôi định cấu hình đào tạo trên một đối tượng ước tính, đây là giao diện cấp cao cho Đào tạo SageMaker.

Tiếp theo, chúng tôi xác định số lượng phiên bản cần đào tạo, loại phiên bản (dựa trên CPU hoặc dựa trên GPU) và kích thước của bộ lưu trữ đính kèm:

estimator = sagemaker.estimator.Estimator(
    image_uri=xgboost_container, 
    hyperparameters=hyperparameters,
    role=role,
    instance_count=1, 
    instance_type='ml.m5.large', 
    volume_size=5, # 5 GB 
    output_path=output_path
)

Bây giờ chúng tôi có cấu hình cơ sở hạ tầng mà chúng tôi cần để bắt đầu. SageMaker Training sẽ lo phần còn lại.

Gọi hàm fit()

Bạn có nhớ dữ liệu chúng tôi đã tải lên Amazon S3 trước đó không? Bây giờ chúng tôi tạo các tham chiếu đến nó:

s3_input_train = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/train', content_type='csv')
s3_input_valid = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/valid', content_type='csv')

Một cuộc gọi đến fit() ra mắt đào tạo của chúng tôi. Chúng tôi chuyển các tham chiếu đến dữ liệu đào tạo mà chúng tôi vừa tạo để trỏ chương trình Đào tạo SageMaker đến dữ liệu đào tạo và xác thực của chúng tôi:

estimator.fit({'train': s3_input_train, 'validation': s3_input_valid})

Lưu ý rằng để chạy HPO sau này, chúng ta không thực sự cần gọi fit() nơi đây. Chúng tôi chỉ cần đối tượng ước tính sau này cho HPO và có thể chuyển sang tạo công việc HPO của chúng tôi. Nhưng vì chúng tôi muốn tìm hiểu về Đào tạo SageMaker và xem cách chạy một công việc đào tạo duy nhất nên chúng tôi gọi nó ở đây và xem xét đầu ra.

Sau khi quá trình đào tạo bắt đầu, chúng tôi bắt đầu thấy đầu ra bên dưới các ô, như thể hiện trong ảnh chụp màn hình sau. Đầu ra có sẵn trong amazoncloudwatch cũng như trong cuốn sổ tay này.

Văn bản màu đen là đầu ra nhật ký từ chính SageMaker, hiển thị các bước liên quan đến điều phối đào tạo, chẳng hạn như bắt đầu phiên bản và tải hình ảnh đào tạo. Văn bản màu xanh được xuất trực tiếp từ chính phiên bản đào tạo. Chúng ta có thể quan sát quá trình tải và phân tích cú pháp dữ liệu đào tạo, đồng thời xem trực quan tiến trình đào tạo và sự cải thiện về chỉ số mục tiêu trực tiếp từ tập lệnh đào tạo đang chạy trên phiên bản.

Đầu ra từ hàm fit() trong Jupyter Notebook

Cũng lưu ý rằng khi kết thúc công việc đầu ra, thời lượng đào tạo tính bằng giây và số giây có thể lập hóa đơn được hiển thị.

Cuối cùng, chúng tôi thấy rằng SageMaker tải mô hình đào tạo của chúng tôi lên đường dẫn đầu ra S3 được xác định trên đối tượng công cụ ước tính. Mô hình đã sẵn sàng để được triển khai để suy luận.

Trong một bài đăng trong tương lai, chúng tôi sẽ tạo vùng chứa đào tạo của riêng mình và xác định các số liệu đào tạo của chúng tôi để phát ra. Bạn sẽ thấy cách SageMaker không biết bạn chuyển vùng chứa nào để đào tạo. Điều này rất hữu ích khi bạn muốn bắt đầu nhanh chóng với thuật toán tích hợp, nhưng sau đó quyết định chuyển tập lệnh đào tạo tùy chỉnh của riêng bạn!

Kiểm tra công việc đào tạo hiện tại và trước đây

Cho đến nay, chúng tôi đã làm việc từ sổ ghi chép của mình với mã của mình và gửi các công việc đào tạo tới SageMaker. Hãy chuyển đổi quan điểm và rời khỏi sổ ghi chép trong giây lát để xem nó trông như thế nào trên bảng điều khiển SageMaker.

Chế độ xem bảng điều khiển của công việc Đào tạo SageMaker

SageMaker lưu giữ hồ sơ lịch sử về các công việc đào tạo mà nó đã chạy, cấu hình của chúng, chẳng hạn như siêu tham số, thuật toán, đầu vào dữ liệu, thời gian có thể lập hóa đơn và kết quả. Trong danh sách ở ảnh chụp màn hình trước, bạn sẽ thấy các công việc đào tạo gần đây nhất được lọc cho XGBoost. Công việc đào tạo được đánh dấu là công việc chúng ta vừa đào tạo trong sổ ghi chép mà bạn đã thấy đầu ra trước đó. Hãy đi sâu vào công việc đào tạo cá nhân này để có thêm thông tin.

Ảnh chụp màn hình sau đây hiển thị chế độ xem bảng điều khiển của công việc đào tạo của chúng tôi.

Chế độ xem bảng điều khiển của một công việc Đào tạo SageMaker duy nhất

Chúng tôi có thể xem lại thông tin chúng tôi nhận được dưới dạng đầu ra ô cho fit() hoạt động trong công việc đào tạo riêng lẻ trong bảng điều khiển SageMaker, cùng với các tham số và siêu dữ liệu mà chúng tôi đã xác định trong công cụ ước tính của mình.

Nhớ lại đầu ra nhật ký từ phiên bản đào tạo mà chúng ta đã thấy trước đó. Chúng tôi cũng có thể truy cập nhật ký công việc đào tạo của mình tại đây bằng cách cuộn đến Màn Hình phần và lựa chọn Xem các bản ghi.

Bảng điều khiển Xem tab giám sát trong công việc đào tạo

Điều này cho chúng tôi thấy các bản ghi phiên bản bên trong CloudWatch.

Chế độ xem bảng điều khiển của nhật ký phiên bản đào tạo trong CloudWatch

Ngoài ra, hãy nhớ các siêu đường kính mà chúng tôi đã chỉ định trong sổ ghi chép của mình cho công việc đào tạo. Chúng tôi cũng thấy chúng ở đây trong cùng giao diện người dùng của công việc đào tạo.

Chế độ xem bảng điều khiển về siêu tham số của công việc Đào tạo SageMaker

Trên thực tế, bạn có thể tìm thấy các chi tiết và siêu dữ liệu mà chúng tôi đã chỉ định trước đó cho công việc đào tạo và công cụ ước tính trên trang này trên bảng điều khiển SageMaker. Chúng tôi có một bản ghi hữu ích về các cài đặt được sử dụng cho quá trình đào tạo, chẳng hạn như vùng chứa đào tạo nào đã được sử dụng và vị trí của bộ dữ liệu đào tạo và xác thực.

Tại thời điểm này, bạn có thể hỏi, chính xác thì tại sao điều này lại liên quan đến việc tối ưu hóa siêu tham số? Đó là bởi vì bạn có thể tìm kiếm, kiểm tra và tìm hiểu sâu hơn về những thử nghiệm HPO mà chúng tôi quan tâm. Có thể là những thử nghiệm có kết quả tốt nhất hoặc những thử nghiệm cho thấy hành vi thú vị. Chúng tôi sẽ để lại cho bạn những gì bạn định nghĩa là “thú vị”. Nó cung cấp cho chúng tôi một giao diện chung để kiểm tra các công việc đào tạo của chúng tôi và bạn có thể sử dụng nó với Tìm kiếm SageMaker.

Mặc dù SageMaker AMT điều phối các công việc HPO, tất cả các thử nghiệm HPO đều được khởi chạy dưới dạng các công việc Đào tạo SageMaker riêng lẻ và có thể được truy cập như vậy.

Với việc đào tạo được bảo hiểm, hãy bắt đầu điều chỉnh!

Đào tạo và điều chỉnh thuật toán XGBoost tích hợp SageMaker

Để điều chỉnh mô hình XGBoost của chúng tôi, chúng tôi sẽ sử dụng lại các siêu tham số hiện có của mình và xác định phạm vi giá trị mà chúng tôi muốn khám phá cho chúng. Hãy nghĩ về điều này như việc mở rộng biên giới khám phá trong không gian tìm kiếm siêu tham số của chúng tôi. Công việc điều chỉnh của chúng tôi sẽ lấy mẫu từ không gian tìm kiếm và chạy các công việc đào tạo cho các kết hợp giá trị mới. Đoạn mã sau cho biết cách chỉ định phạm vi siêu tham số mà SageMaker AMT nên lấy mẫu từ:

from sagemaker.tuner import IntegerParameter, ContinuousParameter, HyperparameterTuner

hpt_ranges = {
    'alpha': ContinuousParameter(0.01, .5),
    'eta': ContinuousParameter(0.1, .5),
    'min_child_weight': ContinuousParameter(0., 2.),
    'max_depth': IntegerParameter(1, 10)
}

Phạm vi cho một siêu tham số riêng lẻ được chỉ định theo loại của chúng, như Thông số liên tục. Để biết thêm thông tin và mẹo chọn các phạm vi tham số này, hãy tham khảo Điều chỉnh một mô hình XGBoost.

Chúng tôi chưa chạy bất kỳ thử nghiệm nào, vì vậy chúng tôi không biết phạm vi giá trị tốt cho siêu tham số của mình. Do đó, chúng tôi bắt đầu với một dự đoán có học, sử dụng kiến ​​thức về thuật toán và tài liệu của chúng tôi về siêu đường kính cho các thuật toán tích hợp. Điều này xác định một điểm bắt đầu để xác định không gian tìm kiếm.

Sau đó, chúng tôi chạy lấy mẫu công việc điều chỉnh từ các siêu đường kính trong phạm vi đã xác định. Kết quả là, chúng ta có thể thấy phạm vi siêu tham số nào mang lại kết quả tốt. Với kiến ​​thức này, chúng ta có thể tinh chỉnh ranh giới của không gian tìm kiếm bằng cách thu hẹp hoặc mở rộng phạm vi siêu tham số sẽ sử dụng. Chúng tôi trình bày cách rút kinh nghiệm từ các thử nghiệm trong phần tiếp theo và cũng là phần cuối cùng, nơi chúng tôi điều tra và trực quan hóa kết quả.

Trong bài đăng tiếp theo của chúng tôi, chúng tôi sẽ tiếp tục hành trình của mình và tìm hiểu sâu hơn. Ngoài ra, chúng ta sẽ biết rằng có một số chiến lược mà chúng ta có thể sử dụng để khám phá không gian tìm kiếm của mình. Chúng tôi sẽ chạy các công việc HPO tiếp theo để tìm các giá trị hiệu quả hơn nữa cho các siêu đường kính của chúng tôi, đồng thời so sánh các chiến lược khác nhau này. Chúng ta cũng sẽ xem cách khởi đầu thuận lợi với SageMaker AMT để sử dụng kiến ​​thức thu được từ các không gian tìm kiếm đã khám phá trước đó trong quá trình khám phá của chúng ta bên ngoài những ranh giới ban đầu đó.

Đối với bài đăng này, chúng tôi tập trung vào cách phân tích và trực quan hóa kết quả của một công việc HPO đơn lẻ bằng cách sử dụng chiến lược tìm kiếm Bayesian, đây có thể là một điểm khởi đầu tốt.

Nếu bạn theo dõi trong sổ ghi chép được liên kết, hãy lưu ý rằng chúng tôi chuyển cùng một công cụ ước tính mà chúng tôi đã sử dụng cho công việc đào tạo XGBoost tích hợp, duy nhất của mình. Đối tượng công cụ ước tính này hoạt động như một mẫu cho các công việc đào tạo mới mà AMT tạo ra. AMT sau đó sẽ thay đổi các siêu đường kính trong phạm vi chúng tôi đã xác định.

Bằng cách xác định rằng chúng tôi muốn tối đa hóa số liệu khách quan của mình, validation:accuracy, chúng tôi đang yêu cầu SageMaker AMT tìm kiếm các chỉ số này trong nhật ký phiên bản đào tạo và chọn các giá trị siêu tham số mà nó tin rằng sẽ tối đa hóa chỉ số chính xác trên dữ liệu xác thực của chúng tôi. Chúng tôi đã chọn một cách thích hợp số liệu khách quan cho XGBoost từ tài liệu của chúng tôi.

Ngoài ra, chúng ta có thể tận dụng lợi thế của việc song song hóa với max_parallel_jobs. Đây có thể là một công cụ mạnh mẽ, đặc biệt đối với các chiến lược mà các thử nghiệm được lựa chọn độc lập mà không cần xem xét (học hỏi từ) kết quả của các thử nghiệm trước đó. Chúng ta sẽ khám phá thêm các chiến lược và tham số khác này trong bài đăng tiếp theo. Đối với bài đăng này, chúng tôi sử dụng Bayesian, đây là một chiến lược mặc định tuyệt vời.

Chúng tôi cũng xác định max_jobs để xác định tổng số thử nghiệm sẽ chạy. Vui lòng đi chệch khỏi ví dụ của chúng tôi và sử dụng một số nhỏ hơn để tiết kiệm tiền.

n_jobs = 50
n_parallel_jobs = 3

tuner_parameters = {
    'estimator': estimator, # The same estimator object we defined above
    'base_tuning_job_name': 'bayesian',
    'objective_metric_name': 'validation:accuracy',
    'objective_type': 'Maximize',
    'hyperparameter_ranges': hpt_ranges,
    'strategy': 'Bayesian',
    'max_jobs': n_jobs,
    'max_parallel_jobs': n_parallel_jobs
}

Chúng tôi một lần nữa gọi fit(), giống như khi chúng tôi khởi chạy một công việc đào tạo trước đó trong bài viết. Nhưng lần này trên đối tượng bộ chỉnh, không phải đối tượng ước tính. Điều này bắt đầu công việc điều chỉnh và đến lượt AMT bắt đầu công việc đào tạo.

tuner = HyperparameterTuner(**tuner_parameters)
tuner.fit({'train': s3_input_train, 'validation': s3_input_valid}, wait=False)
tuner_name = tuner.describe()['HyperParameterTuningJobName']
print(f'tuning job submitted: {tuner_name}.')

Sơ đồ sau mở rộng trên kiến ​​trúc trước đây của chúng tôi bằng cách bao gồm HPO với SageMaker AMT.

Tổng quan về Đào tạo SageMaker và tối ưu hóa siêu tham số với SageMaker AMT

Chúng tôi thấy rằng công việc HPO của chúng tôi đã được gửi. Tùy thuộc vào số lượng thử nghiệm, được xác định bởi n_jobs và mức độ song song hóa, điều này có thể mất một thời gian. Ví dụ của chúng tôi, có thể mất tới 30 phút cho 50 thử nghiệm chỉ với mức song song hóa là 3.

tuning job submitted: bayesian-221102-2053.

Khi công việc điều chỉnh này kết thúc, hãy khám phá thông tin có sẵn cho chúng tôi trên bảng điều khiển SageMaker.

Điều tra công việc AMT trên bảng điều khiển

Hãy tìm công việc điều chỉnh của chúng tôi trên bảng điều khiển SageMaker bằng cách chọn Hội thảo trong ngăn điều hướng và sau đó Công việc điều chỉnh siêu tham số. Điều này cung cấp cho chúng tôi một danh sách các công việc AMT của chúng tôi, như được hiển thị trong ảnh chụp màn hình sau. Ở đây chúng tôi xác định vị trí của chúng tôi bayesian-221102-2053 công việc điều chỉnh và thấy rằng nó đã hoàn thành.

Chế độ xem bảng điều khiển của trang công việc điều chỉnh Siêu tham số. Hình ảnh hiển thị chế độ xem danh sách các công việc điều chỉnh, chứa 1 mục điều chỉnh của chúng tôi

Chúng ta hãy xem xét kỹ hơn kết quả của công việc HPO này.

Chúng tôi đã khám phá việc trích xuất các kết quả theo chương trình trong máy tính xách tay. Đầu tiên thông qua SDK Python của SageMaker, đây là thư viện Python mã nguồn mở cấp cao hơn, cung cấp API dành riêng cho SageMaker. Sau đó thông qua boto3, cung cấp cho chúng tôi các API cấp thấp hơn cho SageMaker và các dịch vụ AWS khác.

Sử dụng SageMaker Python SDK, chúng tôi có thể nhận được kết quả của công việc HPO của mình:

sagemaker.HyperparameterTuningJobAnalytics(tuner_name).dataframe()[:10]

Điều này cho phép chúng tôi phân tích kết quả của từng thử nghiệm trong Khung dữ liệu Pandas, như được thấy trong ảnh chụp màn hình sau.

Bảng gấu trúc trong Jupyter Notebook hiển thị kết quả và siêu dữ liệu từ các đường mòn đã chạy cho công việc HPO của chúng tôi

Bây giờ, hãy chuyển đổi quan điểm một lần nữa và xem kết quả trông như thế nào trên bảng điều khiển SageMaker. Sau đó, chúng ta sẽ xem xét các hình ảnh hóa tùy chỉnh của mình.

Trên cùng một trang, lựa chọn của chúng tôi bayesian-221102-2053 công việc điều chỉnh cung cấp cho chúng tôi danh sách các thử nghiệm đã được chạy cho công việc điều chỉnh của chúng tôi. Mỗi bản dùng thử HPO ở đây là một công việc Đào tạo SageMaker. Nhớ lại trước đó khi chúng tôi đào tạo mô hình XGBoost duy nhất của mình và điều tra công việc đào tạo trong bảng điều khiển SageMaker. Chúng tôi có thể làm điều tương tự cho các thử nghiệm của chúng tôi ở đây.

Khi chúng tôi điều tra các thử nghiệm của mình, chúng tôi thấy rằng bayesian-221102-2053-048-b59ec7b4 đã tạo ra mô hình hoạt động tốt nhất, với độ chính xác xác thực xấp xỉ 89.815%. Hãy khám phá xem siêu đường kính nào đã dẫn đến hiệu suất này bằng cách chọn Công việc đào tạo tốt nhất tab.

Chế độ xem bảng điều khiển của một công việc điều chỉnh, hiển thị danh sách các công việc đào tạo đã chạy

Chúng ta có thể thấy một cái nhìn chi tiết về các siêu đường kính tốt nhất được đánh giá.

Chế độ xem bảng điều khiển của một công việc điều chỉnh duy nhất, hiển thị chi tiết về công việc đào tạo tốt nhất

Chúng ta có thể thấy ngay những giá trị siêu tham số nào đã dẫn đến hiệu suất vượt trội này. Tuy nhiên, chúng tôi muốn biết thêm. Bạn có thể đoán những gì? Chúng ta thấy rằng alpha nhận giá trị gần đúng là 0.052456 và tương tự như vậy, eta được đặt thành 0.433495. Điều này cho chúng ta biết rằng những giá trị này hoạt động tốt, nhưng nó cho chúng ta biết rất ít về chính không gian siêu tham số. Ví dụ: chúng ta có thể tự hỏi liệu 0.433495 có dành cho eta có phải là giá trị cao nhất được kiểm tra hay liệu có chỗ cho sự phát triển và cải tiến mô hình bằng cách chọn các giá trị cao hơn hay không.

Để làm được điều đó, chúng ta cần thu nhỏ và có chế độ xem rộng hơn nhiều để xem các giá trị khác cho siêu tham số của chúng ta hoạt động như thế nào. Một cách để xem xét nhiều dữ liệu cùng một lúc là vẽ các giá trị siêu tham số từ các thử nghiệm HPO của chúng tôi trên biểu đồ. Bằng cách đó, chúng tôi thấy các giá trị này hoạt động tương đối như thế nào. Trong phần tiếp theo, chúng tôi lấy dữ liệu này từ SageMaker và trực quan hóa nó.

Hình dung các thử nghiệm của chúng tôi

SDK SageMaker cung cấp cho chúng tôi dữ liệu để khám phá và sổ ghi chép cung cấp cho bạn thông tin về dữ liệu đó. Nhưng có nhiều cách để sử dụng và hình dung nó. Trong bài đăng này, chúng tôi chia sẻ một mẫu bằng cách sử dụng Altair thư viện trực quan hóa thống kê mà chúng tôi sử dụng để tạo ra cái nhìn tổng quan trực quan hơn về các thử nghiệm của mình. Chúng được tìm thấy trong amtviz gói mà chúng tôi đang cung cấp như một phần của mẫu:

from amtviz import visualize_tuning_job
visualize_tuning_job(tuner, trials_only=True)

Sức mạnh của những trực quan hóa này trở nên rõ ràng ngay lập tức khi vẽ biểu đồ độ chính xác xác thực của thử nghiệm (trục y) theo thời gian (trục x). Biểu đồ bên trái sau đây cho thấy độ chính xác của xác thực theo thời gian. Chúng tôi có thể thấy rõ hiệu suất của mô hình được cải thiện khi chúng tôi chạy nhiều thử nghiệm hơn theo thời gian. Đây là kết quả trực tiếp và dự kiến ​​của việc chạy HPO với chiến lược Bayes. Trong bài đăng tiếp theo của chúng tôi, chúng tôi xem điều này so với các chiến lược khác như thế nào và nhận thấy rằng điều này không nhất thiết phải đúng với tất cả các chiến lược.

Hai biểu đồ hiển thị đường mòn HPO. Biểu đồ bên trái hiển thị độ chính xác xác thực theo thời gian. Biểu đồ bên phải hiển thị biểu đồ mật độ cho các giá trị độ chính xác xác thực

Sau khi xem xét tiến trình tổng thể theo thời gian, bây giờ hãy xem xét không gian siêu tham số của chúng ta.

Các biểu đồ sau hiển thị độ chính xác của xác thực trên trục y, với mỗi biểu đồ hiển thị max_depth, alpha, etamin_child_weight trên trục x, tương ứng. Chúng tôi đã vẽ toàn bộ công việc HPO của mình vào từng biểu đồ. Mỗi điểm là một thử nghiệm duy nhất và mỗi biểu đồ chứa tất cả 50 thử nghiệm, nhưng được phân tách cho từng siêu tham số. Điều này có nghĩa là thử nghiệm hoạt động tốt nhất của chúng tôi, #48, được biểu thị bằng chính xác một dấu chấm màu xanh lam trong mỗi biểu đồ này (mà chúng tôi đã đánh dấu cho bạn trong hình dưới đây). Chúng tôi có thể so sánh trực quan hiệu suất của nó trong bối cảnh của tất cả 49 thử nghiệm khác. Vì vậy, chúng ta hãy nhìn kỹ.

Lôi cuốn! Chúng tôi thấy ngay những vùng nào trong phạm vi được xác định trong không gian siêu tham số của chúng tôi có hiệu suất cao nhất! Nghĩ lại về chúng ta eta giá trị, rõ ràng là bây giờ việc lấy mẫu các giá trị gần với 0 mang lại hiệu suất kém hơn, trong khi di chuyển gần hơn tới đường viền của chúng tôi, 0.5, mang lại kết quả tốt hơn. Điều ngược lại có vẻ đúng với alphamax_depth dường như có một tập hợp các giá trị ưu tiên hạn chế hơn. Nhìn max_depth, bạn cũng có thể thấy cách sử dụng chiến lược Bayes hướng dẫn SageMaker AMT lấy mẫu các giá trị thường xuyên hơn mà nó đã học được hoạt động tốt trong quá khứ.

Bốn biểu đồ hiển thị độ chính xác của quá trình xác thực trên trục y, với mỗi biểu đồ hiển thị max_depth, alpha, eta, min_child_weight trên trục x tương ứng. Mỗi điểm dữ liệu đại diện cho một thử nghiệm HPO

Nhìn vào của chúng tôi eta giá trị, chúng tôi có thể tự hỏi liệu nó có đáng để khám phá thêm về bên phải, có lẽ vượt quá 0.45 không? Liệu nó có tiếp tục giảm xuống độ chính xác thấp hơn hay chúng ta cần thêm dữ liệu ở đây? Điều băn khoăn này là một phần của mục đích chạy công việc HPO đầu tiên của chúng tôi. Nó cung cấp cho chúng tôi thông tin chi tiết về những khu vực của không gian siêu tham số mà chúng tôi nên khám phá thêm.

Nếu bạn muốn biết nhiều hơn và hào hứng như chúng tôi với phần giới thiệu về chủ đề này, thì hãy theo dõi bài đăng tiếp theo của chúng tôi, nơi chúng tôi sẽ nói nhiều hơn về các chiến lược HPO khác nhau, so sánh chúng với nhau và thực hành đào tạo với tập lệnh Python của riêng chúng tôi.

Làm sạch

Để tránh phát sinh các chi phí không mong muốn khi bạn hoàn thành thử nghiệm với HPO, bạn phải xóa tất cả các tệp trong bộ chứa S3 của mình bằng tiền tố amt-visualize-demo và cũng tắt tài nguyên Studio.

Chạy đoạn mã sau trong sổ ghi chép của bạn để xóa tất cả các tệp S3 khỏi bài đăng này.

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

Nếu bạn muốn giữ các tập dữ liệu hoặc tạo tác mô hình, bạn có thể sửa đổi tiền tố trong mã thành amt-visualize-demo/data để chỉ xóa dữ liệu hoặc amt-visualize-demo/output để chỉ xóa các tạo tác mô hình.

Kết luận

Trong bài đăng này, chúng tôi đã đào tạo và điều chỉnh một mô hình bằng cách sử dụng phiên bản tích hợp SageMaker của thuật toán XGBoost. Bằng cách sử dụng HPO với SageMaker AMT, chúng tôi đã tìm hiểu về các siêu đường kính hoạt động tốt cho thuật toán và tập dữ liệu cụ thể này.

Chúng tôi đã thấy một số cách để xem xét kết quả của công việc điều chỉnh siêu tham số của mình. Bắt đầu với việc trích xuất các siêu tham số của thử nghiệm tốt nhất, chúng tôi cũng đã học cách hiểu sâu hơn về cách các thử nghiệm của chúng tôi đã tiến triển theo thời gian và những giá trị siêu tham số nào có tác động.

Bằng cách sử dụng bảng điều khiển SageMaker, chúng tôi cũng đã thấy cách tìm hiểu sâu hơn về các hoạt động đào tạo cá nhân và xem lại nhật ký của họ.

Sau đó, chúng tôi thu nhỏ để xem tất cả các thử nghiệm của mình cùng nhau và xem xét hiệu suất của chúng so với các thử nghiệm và siêu tham số khác.

Chúng tôi đã học được rằng dựa trên các quan sát từ mỗi thử nghiệm, chúng tôi có thể điều hướng không gian siêu tham số để thấy rằng những thay đổi nhỏ đối với các giá trị siêu tham số của chúng tôi có thể có tác động lớn đến hiệu suất mô hình của chúng tôi. Với SageMaker AMT, chúng tôi có thể chạy tối ưu hóa siêu tham số để tìm các giá trị siêu tham số tốt một cách hiệu quả và tối đa hóa hiệu suất mô hình.

Trong tương lai, chúng tôi sẽ xem xét các chiến lược HPO khác nhau do SageMaker AMT cung cấp và cách sử dụng mã đào tạo tùy chỉnh của riêng chúng tôi. Hãy cho chúng tôi biết trong phần nhận xét nếu bạn có câu hỏi hoặc muốn đề xuất một lĩnh vực mà chúng tôi nên đề cập trong các bài đăng sắp tới.

Cho đến lúc đó, chúng tôi chúc bạn và người mẫu của bạn học tập và điều chỉnh vui vẻ!

dự án

Trích dẫn:

[1] Dua, D. và Graff, C. (2019). Kho lưu trữ học máy của UCI [http://archive.ics.uci.edu/ml]. Irvine, CA: Đại học California, Trường Thông tin và Khoa học Máy tính.


Giới thiệu về tác giả

Tối ưu hóa siêu tham số với Amazon SageMaker Điều chỉnh mô hình tự động PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Andrew Ellul là một Kiến trúc sư giải pháp với Amazon Web Services. Anh ấy làm việc với các doanh nghiệp vừa và nhỏ ở Đức. Ngoài giờ làm việc, Andrew thích khám phá thiên nhiên bằng cách đi bộ hoặc đi xe đạp.

Tối ưu hóa siêu tham số với Amazon SageMaker Điều chỉnh mô hình tự động PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Elina Lesyk là một Kiến trúc sư giải pháp ở Munich. Trọng tâm của cô là các khách hàng doanh nghiệp từ Ngành Dịch vụ Tài chính. Khi rảnh rỗi, Elina thích học lý thuyết guitar bằng tiếng Tây Ban Nha để học chéo và chạy bộ.

Tối ưu hóa siêu tham số với Amazon SageMaker Điều chỉnh mô hình tự động PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Mariano Kamp là Kiến trúc sư giải pháp chính của Amazon Web Services. Anh ấy làm việc với các khách hàng dịch vụ tài chính ở Đức về lĩnh vực máy học. Khi rảnh rỗi, Mariano thích đi bộ đường dài cùng vợ.

Dấu thời gian:

Thêm từ Học máy AWS