8. Loss function P2 – hàm mất mát cho bài toán binary classification

Phân lớp nhị phân là bài toán mà biến đầu ra (y) chỉ có thể nhận một trong hai giá trị, là một trong hai nhãn.

Bài toán thường được đưa ra dưới dạng dự đoán giá trị 0 hoặc 1 cho lớp đầu tiên hoặc lớp thứ hai, và thường được mô tả bằng cách dự đoán xác suất của đầu vào thuộc về lớp 1.

Trong phần này, chúng ta sẽ nghiên cứu các hàm mất mát cho bài toán phân lớp nhị phân.

Chúng ta sẽ tạo dữ liệu thử nghiệm bằng thư viện scikit-learn, dữ liệu sẽ có dạng hình tròn. Bài toán liên quan đến việc vẽ các mẫu từ hai vòng tròn đồng tâm trên mặt phẳng hai chiều, trong đó các điểm trên vòng tròn bên ngoài thuộc về lớp 0 và các điểm trên vòng tròn bên trong thuộc về lớp 1. Để tránh overfit khi học, chúng ta sẽ thêm nhiễu vào các mẫu.

Chúng ta sẽ tạo ra 1.000 điểm dữ liệu và thêm 10% dữ liệu nhiễu. Việc tạo số giả ngẫu nhiên sẽ được thiết lập với cùng một giá trị tham số để đảm bảo rằng chúng ta luôn nhận được 1.000 điểm dữ liệu giống nhau trong mỗi lần chạy.

Chúng ta sẽ vẽ thử các điểm dữ liệu:

Biểu đồ phân tán cho tập dữ liệu Phân lớp nhị phân vòng tròn

Các điểm dữ liệu nằm gần giá trị 0, gần như trong khoảng [-1,1]. Chúng ta sẽ không rescale chúng trong trường hợp này.

Chia dữ liệu thành tập huấn luyện và tập kiểm tra:

Chúng ta có thể sử dụng một mô hình MLP đơn giản để giải quyết bài toán này. Bài toán sẽ có đầu vào với 2 đặc trưng, một lớp ẩn với 50 nút. Chúng ta sẽ chọn hàm kích hoạt tuyến tính và lớp đầu ra dựa trên hàm mất mát sẽ sử dụng.

Mô hình sẽ được fit bằng thuật toán SGD với learning rate là 0.01 và momentum là 0.9.

Chúng ta sẽ huấn luyện mô hình với 200 epochs và sau đó đánh giá mô hình với hàm mất mát và độ chính xác trên mỗi epoch. Sau đó, chúng ta sẽ vẽ đường cong học tập.

Có Thể Bạn Quan Tâm :   Anti-Glare là gì? Những điều cần biết về công nghệ Anti-Glare

Sau khi đã định nghĩa mô hình, bây giờ chúng ta sẽ thử nghiệm các hàm mất mát khác nhau và so sánh kết quả giữa các hàm loss để rút ra nhận xét cho từng phương pháp.

Cross-entropy là hàm mất mát được sử dụng mặc định cho bài toán phân lớp nhị phân.

Nó được thiết kế để sử dụng với bài toán phân loại nhị phân trong đó giá trị mục tiêu nhận một trong hai giá trị {0, 1}.

Về mặt toán học, nếu MSE tính khoảng cách giữa hai đại lượng số, thì cross-entropy hiểu nôm na là phương pháp tính khoảng cách giữa hai phân phối xác suất.

Với p và q là các biến rời rạc (như y – nhãn thực tế và y^ – nhãn dự đoán) trong bài toán của chúng ta, công thức này được viết dưới dạng:

$$H(p, q) = E_p[-log q]$$

Trong đó C là số lượng các lớp cần phân lớp, trong bài toán phân lớp nhị phân, C = 2.

Cross-entropy được cung cấp trong Keras bằng cách thiết lập tham số loss=’binary_crossentropy’ khi biên dịch mô hình.

Hàm yêu cầu lớp đầu ra có 1 nút và sử dụng hàm kích hoạt ‘sigmoid’ để dự đoán xác suất đầu ra.

Mã đầy đủ sử dụng cross-entropy được trình bày dưới đây:

Sau khi chạy, kết quả sẽ in ra độ chính xác trên tập huấn luyện và tập kiểm tra.

Lưu ý khi chạy, kết quả có thể khác nhau do thuật toán khởi tạo ngẫu nhiên. Chúng ta nên chạy nhiều lần và lấy giá trị trung bình.

Kết quả in ra sẽ là:

Trường hợp này, chúng ta có thể thấy mô hình đạt độ chính xác 83% trên tập huấn luyện và 85% trên tập kiểm tra. Độ chính xác trên tập kiểm tra và tập huấn luyện gần nhau cho thấy mô hình không bị underfitting hay overfitting.

Biểu đồ đường thể hiện giá trị cross-entropy trong quá trình huấn luyện của tập huấn luyện (màu xanh) và tập kiểm tra (màu cam).

Biểu đồ đường của hàm mất mát Cross-Entropy và độ chính xác.

Khi nào sử dụng cross-entropy?

  • Bài toán phân lớp.
  • Tạo ra các mô hình với độ chính xác cao (precision, recall cao).

Một cách khác để tính cross-entropy cho bài toán phân lớp nhị phân là sử dụng hàm hinge loss. Đây là ý tưởng chính của mô hình Support Vector Machine (SVM).

Có Thể Bạn Quan Tâm :   Khái niệm game lậu, game được cấp phép và cái nhìn công bằng từ game thủ

Nó được thiết kế để sử dụng với bài toán phân loại nhị phân trong đó giá trị mục tiêu nhận một trong hai giá trị {-1, 1}.

$$J_n(w, b) = max(0, 1 – y_nz_n)$$

Trong đó $z_n$ có thể được coi là điểm số của $x_n$ tương ứng với cặp hệ số $(w, b)$ là đầu ra mong muốn.

Hàm mất mát sẽ khích lệ các điểm dữ liệu có dấu đúng, và phạt lỗi nặng hơn nếu có giá trị dự đoán có dấu khác với giá trị mong muốn.

Trong thực tế, hinge loss thường cho kết quả tốt hơn cross-entropy trong các bài toán phân lớp nhị phân.

Đầu tiên, chúng ta sẽ đưa các nhãn đầu ra trở thành một trong hai giá trị -1 và 1.

Chúng ta có thể chỉ định hàm mất mát trong quá trình biên dịch bằng giá trị loss=’hinge’.

Cuối cùng, lớp đầu ra của mô hình sẽ có 1 nút và sử dụng hàm kích hoạt activation=’tanh’ để đảm bảo giá trị đầu ra nằm trong khoảng [-1, 1].

Sau đây là đoạn mã hoàn chỉnh:

Sau khi chạy, kết quả sẽ in ra độ chính xác của mô hình trên tập huấn luyện và tập kiểm tra.

Lưu ý khi chạy, kết quả có thể khác nhau do thuật toán khởi tạo ngẫu nhiên. Chúng ta nên chạy nhiều lần và lấy giá trị trung bình.

Kết quả in ra sẽ là:

Trường hợp này, chúng ta có thể thấy độ chính xác đạt khoảng dưới 80% trên tập huấn luyện và tập kiểm tra khi sử dụng hàm hinge loss, thấp hơn so với việc sử dụng cross-entropy.

Biểu đồ đường thể hiện độ chính xác trong quá trình huấn luyện của tập huấn luyện (màu xanh) và tập kiểm tra (màu cam).

Hinge Loss và độ chính xác phân lớp.

Hàm hinge loss có một số phiên bản được sử dụng trong mô hình SVM.

Một phiên bản phổ biến của hinge loss là squared hinge loss. Nó giúp làm giảm sự nhấp nhô của đồ thị hàm mất mát và dễ thao tác hơn toán học.

Nếu hinge loss hoạt động tốt trong bài toán phân loại nhị phân, squared hinge loss cũng sẽ cho kết quả tương tự.

Có Thể Bạn Quan Tâm :   "Epic" nghĩa là gì: Định Nghĩa, Ví Dụ trong Tiếng Anh

Giống như hinge loss, chúng ta cũng cần chuyển đổi nhãn thành giá trị -1 và 1.

Chúng ta có thể chỉ định hàm mất mát trong quá trình biên dịch bằng tham số loss=’squared_hinge’.

Cuối cùng, lớp đầu ra của mô hình sẽ có 1 nút và sử dụng hàm kích hoạt activation=’tanh’ để đảm bảo giá trị đầu ra trong khoảng [-1, 1].

Sau đây là đoạn mã hoàn chỉnh:

Sau khi chạy, kết quả sẽ in ra độ chính xác của mô hình trên tập huấn luyện và tập kiểm tra.

Lưu ý khi chạy, kết quả có thể khác nhau do thuật toán khởi tạo ngẫu nhiên. Chúng ta nên chạy nhiều lần và lấy giá trị trung bình.

Kết quả in ra sẽ là:

Trường hợp này, chúng ta có thể thấy độ chính xác đạt khoảng dưới 70% trên tập huấn luyện và tập kiểm tra khi sử dụng squared hinge loss, thấp hơn so với việc sử dụng hinge loss.

Biểu đồ đường thể hiện độ chính xác trong quá trình huấn luyện của tập huấn luyện (màu xanh) và tập kiểm tra (màu cam).

Squared Hinge Loss và độ chính xác phân lớp.

Mô hình có vẻ đã hội tụ, tuy nhiên bề mặt hàm mất mát vẫn còn nhấp nhô, cho thấy việc thay đổi trọng số một chút có thể ảnh hưởng lớn đến độ lỗi của mô hình.

Trong phần 2 này, chúng ta đã giới thiệu hai hàm mất mát được sử dụng cho bài toán phân lớp nhị phân. Trong phần tiếp theo (p3), chúng ta sẽ giới thiệu hàm mất mát cho bài toán phân lớp đa lớp.

Bài viết

  • Soft Margin Support Vector Machine.
  • Hàm mất mát và hàm mất mát cho việc đào tạo các mạng nơ-ron Deep Learning.

Bài báo

  • Về Hàm mất mát cho các Mạng Nơ-ron Sâu trong Phân lớp, 2017.

API

  • API Hàm mất mát trong Keras.
  • API Hàm kích hoạt trong Keras.
  • API sklearn.preprocessing.StandardScaler.
  • API sklearn.datasets.make_regression.
  • API sklearn.datasets.make_circles.
  • API sklearn.datasets.make_blobs.

Bài viết

  • Mean squared error, Wikipedia.
  • Mean absolute error, Wikipedia.
  • Cross entropy, Wikipedia.
  • Hinge loss, Wikipedia.
  • Kullback-Leibler divergence, Wikipedia.
  • Các hàm mất mát trong Mạng Nơ-ron, 2017.
Back to top button