Categorical cross entropy là gì

Học sâu với giảm Entropy chéo có trọng số trên dữ liệu dạng bảng không cân bằng bằng FastAI

Hướng dẫn xây dựng mô hình học sâu một cách dễ dàng mà vẫn tránh được những cạm bẫy

Ảnh của Aditya Das trên Unsplash

FastAI là một thư viện máy học cực kỳ tiện lợi và mạnh mẽ mang Deep Learning (DL) đến với đại chúng. Tôi đã có động lực để viết bài này trong khi khắc phục một số vấn đề liên quan đến việc đào tạo một mô hình cho nhiệm vụ phân loại nhị phân. Mục tiêu của tôi là hướng dẫn bạn qua các bước cần thiết để xây dựng một mô hình DL đơn giản và hiệu quả bằng cách sử dụng FastAI cho một tập dữ liệu dạng bảng , không cân bằng trong khi tránh những sai lầm mà tôi đã mắc phải. Cuộc thảo luận trong bài viết này được tổ chức theo các phần được liệt kê bên dưới.

  1. Dataset
  2. Mã mẫu
  3. Phân tích mã
  4. So sánh FastAI với PySpark ML & Scikit-Learn
  5. Phần kết luận

Tập dữ liệu đến từ ngữ cảnh chuyển đổi quảng cáo trong đó các biến mục tiêu nhị phân 1 và 0 tương ứng với sự thành công và thất bại của chuyển đổi. Tập dữ liệu độc quyền này (không, tôi không sở hữu quyền) có một số thuộc tính đặc biệt thú vị do kích thước của nó, sự mất cân bằng lớp và mối quan hệ khá yếu giữa các tính năng và biến mục tiêu.

Thứ nhất, kích thước của dữ liệu: tập dữ liệu dạng bảng này chứa một số lượng khá lớn các bản ghi và các tính năng phân loại có tính tổng hợp rất cao .

Lưu ý : Trong FastAI, các đối tượng phân loại được biểu diễn bằng cách sử dụng nhúng có thể cải thiện hiệu suất phân loại trên các đối tượng số lượng cao.

Thứ hai, các nhãn lớp nhị phân rất mất cân bằng vì các chuyển đổi quảng cáo thành công là tương đối hiếm. Trong bài viết này, chúng tôi thích ứng với ràng buộc này thông qua cách tiếp cận cấp thuật toán (các hàm mất entropy chéo có trọng số) trái ngược với cách tiếp cận cấp dữ liệu (lấy mẫu lại).

Thứ ba, mối quan hệ giữa các tính năngbiến mục tiêu khá yếu . Ví dụ, một mô hình Hồi quy logistic có vùng xác nhận dưới đường cong ROC là 0,74 sau khi điều chỉnh mô hình đáng kể.

Tóm tắt các thuộc tính tập dữ liệu

  • Kích thước: 17 tính năng, 1 biến mục tiêu, 3738937 hàng
  • Các lớp mục tiêu nhị phân
  • Tỷ lệ mất cân bằng lớp 1:87
  • 6 tính năng số
  • 8 tính năng phân loại
  • Đối tượng phân loại có tổng số kết hợp là 44.000

Mã này được chạy trên máy tính xách tay Jupyter Lab trên Google Cloud - Nền tảng AI với các thông số kỹ thuật được liệt kê bên dưới.

  • 4 vCPU tiêu chuẩn N1, RAM 15 GB
  • 1 GPU NVIDIA Tesla P4
  • Môi trường: PyTorch 1.4
  • Hệ điều hành: Debian 9

3. Phân tích mã

Nhập gói

Cài đặt cả hai fastaivà fastbookthông qua thiết bị đầu cuối lệnh. Để biết thêm chi tiết về thiết lập, hãy xem liên kết này .

conda install -c fastai -c pytorch fastai git clone https://github.com/fastai/fastbook.git pip install -Uqq fastbook import pandas as pd from fastai.tabular.all import *

Tên cột phải được ẩn danh vì lý do bảo mật.

df = pd.read_csv('data/training.csv') # Categorical Features CAT_NAMES = ['col_1', 'col_2', 'col_3', 'col_4', 'col_5', 'col_6', 'col_7', 'col_8'] # Continuous Features CONT_NAMES = ['col_9', 'col_10', 'col_11', 'col_12', 'col_13', 'col_14'] # Target Variable TARGET = 'target'

Thay đổi kiểu dữ liệu của biến mục tiêu nhị phân thành danh mục .

df[TARGET] = df[TARGET].astype('category')

Khởi tạo Dataloader

Tiếp theo, liệt kê các bộ xử lý trước dữ liệu, phân chia tập hợp đào tạo / xác thực và tạo bộ dữ liệu dạng bảng.

# Data Processors procs = [Categorify, FillMissing, Normalize] # Training/Validation Dataset 80:20 Split splits = RandomSplitter(valid_pct=0.2)(range_of(df)) dls = TabularDataLoaders.from_df(df, y_names=TARGET, cat_names=CAT_NAMES, cont_names=CONT_NAMES, procs=procs, splits=splits)
Categorical cross entropy là gì

Xây dựng trọng lượng chức năng giảm

Sự mất cân bằng của lớp được sử dụng để tạo ra trọng số cho hàm giảm entropy chéo, đảm bảo rằng lớp đa số được giảm trọng số tương ứng. Công thức cho các trọng số được sử dụng ở đây giống như trong scikit- learning và PySPark ML .

class_count_df = df.groupby(TARGET).count() n_0, n_1 = class_count_df.iloc[0, 0], class_count_df.iloc[1, 0] w_0 = (n_0 + n_1) / (2.0 * n_0) w_1 = (n_0 + n_1) / (2.0 * n_1) class_weights=torch.FloatTensor([w_0, w_1]).cuda() TypeError: cannot assign 'list' object to buffer 'weight' (torch Tensor or None required) roc_auc = RocAucBinary() ValueError: y should be a 1d array, got an array of shape (2000, 2) instead. loss_func = CrossEntropyLossFlat(weight=class_weights) RuntimeError: Expected object of scalar type Long but got scalar type Char for argument #2 'target' in call to _thnn_nll_loss_forward

Sử dụng tabular_learnertrong FastAI để dễ dàng khởi tạo một kiến ​​trúc.

learn = tabular_learner(dls, layers=[500, 250], loss_func=loss_func, metrics=roc_auc) learn.loss_func Out [1]: FlattenedLoss of CrossEntropyLoss()

Train the model over the desired number of epochs.

learn.fit_one_cycle(3)
Categorical cross entropy là gì
Area under ROC curve reaches 0.75 in just 3 epochs!

Thats great! With minimal tuning, the FastAI model is performing better than the models built painstakingly using PySpark and Scikit-Learn.

4. Comparison Of FastAI To PySpark ML & Scikit-Learn Logistic Regression Model

In this section , we compare model performance and computation time of these three ML libraries.

Note: While the neural network performed well without extensive hyper-parameter tuning, PySpark ML and Scikit-Learn did not. As a result, I have added those times since they were relevant to training a descent model.

Model Training Time

  1. FastAI 6 minutes
  2. PySpark ML 0.7 seconds + 38 minutes for hyper-parameter tuning
  3. Scikit-Learn 36 seconds + 8 minutes for hyper-parameter tuning (on a subsample of the data)
  1. FastAI 0.75
  2. PySpark ML 0.74
  3. Scikit-Learn 0.73

5. Conclusion

In this article, we saw the power of FastAI when it comes to quickly building DL models. Before playing around with FastAI, I would put off using neural networks until I had already tried Logistic Regression, Random Forests etc. because of the stigma that neural networks are difficult to tune and computationally expensive. However, with increased accessibility to GPUs via Google AI Platform Notebooks and the layered FastAI approach to deep learning, now it will surely be one of the first tools I reach for when it comes to classification tasks on large, complex datasets.