Hàm loss trong Pytorch

Hàm loss là thành phần quan trọng trong việc huấn luyện các mô hình học máy. Hãy cùng tìm hiểu ý nghĩa và các trường hợp sử dụng của chúng!

Hàm loss là gì?

Huấn luyện mạng nơ ron nhân tạo giống với cách con người học tập. Chúng ta đưa mô hình dữ liệu, nó đưa ra dự đoán và chúng ta phản hồi xem dự đoán đó có chính xác hay không. Dựa trên phản hồi, mô hình có thể sửa những lỗi sai trước đó. Quá trình này lặp đi lặp lại cho đến khi mô hình đạt đến một độ chính xác nhất định.

Việc chỉ ra rằng mô hình đã đoán sai là vô cùng quan trọng để nó có thể học ra tri thức từ dữ liệu. Và đó là nguyên nhân hàm loss được thiết kế. Hàm loss sẽ chỉ ra mô hình đoán sai bao nhiêu so với giá trị thực tế. Trong bài viết này, hãy cùng trituenhantao.io tìm hiểu một số hàm loss phổ biến được sử dụng trong Pytorch.

Hàm Loss MAE – Trị tuyệt đối trung bình

torch.nn.L1Loss

Đo sai số trị tuyệt đối trung bình (mean average error)

MAE formula

với x là giá trị thực tế, y là giá trị dự đoán.

Ý nghĩa của MAE

Nó đo khoảng cách giữa giá trị dự đoán và giá trị thực. Đây là phép đo sai số đơn giản nhất. Giá trị tuyệt đối được sử dụng vì chúng ta không muốn các số âm và các số dương được cộng trái dấu và triệt tiêu lẫn nhau.

Giá trị của MAE càng thấp, mô hình càng tin cậy. Chúng ta không thể mong giá trị lỗi bằng 0 vì trường hợp này rất hiếm gặp trong thực tế. Nếu giá trị này bằng 0 trong chương trình của bạn, bạn nên tập trung gỡ lỗi chương trình hoặc kiểm tra lại cách huấn luyện và quan sát mô hình thay vì ăn mừng.

Khi nào thì sử dụng MAE?

+ Các bài toán hồi quy
+ Các mô hình đơn giản
+ Mạng nơ ron thường sử dụng với các bài toán phức tạp nên MAE ít được dùng

Hàm Loss MSE – Bình phương trung bình

torch.nn.MSELoss

Đo sai số bình phương trung bình (chuẩn L2 bình phương).

MSE formula

với x là giá trị thực tế, y là giá trị dự đoán.

Ý nghĩa của MSELoss

Bình phương sai số giữa giá trị dự đoán và giá trị thực tế giúp ta khuếch đại các lỗi lớn. Ví dụ 200 bình phương à 40000, còn 0.1 bình phương là 0.01. Ta thấy rằng, việc sử dụng hàm loss này sẽ phạt nặng các lỗi lớn của mô hình và khuyến khích các lỗi nhỏ.

Khi nào sử dụng MSELoss?

+ Bài toán hồi quy
+ Đặc trưng dạng số không quá lớn
+ Bài toán trong không gian có số chiều không quá lớn

Hàm Loss Smooth L1 – L1 mịn

torch.nn.SmoothL1Loss

Còn có tên Huber loss, với công thức

Smoothing L1 formula

Ý nghĩa của Smooth L1 Loss

Hàm này sử dụng bình phương nếu trị tuyệt đối của sai số dưới 1 và sử dụng trị tuyệt đối trong trường hợp còn lai. Ta có thể thấy, hàm này không nhạy cảm với các outlier như MSELoss và giúp tránh tình trạng bùng nổ gradient.

Khi nào sử dụng Smooth L1 Loss?

+ Bài toán hồi quy
+ Đặc trưng có giá trị lớn
+ Phù hợp với đa số các bài toán

Hàm Loss Negative Log-Likelihood

torch.nn.NLLLoss

NLLLoss được xác định bởi công thức:

NLLLost formula

Ý nghĩa của NLLLoss

Hàm này tối đa hóa xác suất tổng thể của dữ liệu. Nó sẽ phạt mô hình khi dự đoán lớp đầu ra mong muốn với xác suất nhỏ. Hàm log giúp hiện thực hóa việc phạt, các xác suất là các giá trị số nhỏ hơn 1, do đó số đối của giá trị log là số dương, xác suất càng nhỏ, giá trị loss càng lớn.

Khi nào sử dụng NLLLoss?

+ Bài toán phân lớp

Hàm Loss Cross-Entropy

torch.nn.CrossEntropyLoss

Đo giá trị cross-entropy giữa giá trị dự đoán và giá trị thực tế.

Cross Entropy loss formula

Với x là xác xuất của nhãn đúng, y và xác suất của nhãn dự đoán.

Ý nghĩa của Cross-Entropy Loss

Cross-entropy Loss được sử dụng để học phân bố xác suất của dữ liệu. Trong khi các hàm khác phạt các giá trị sai, Cross-entropy Loss phạt mô hình dựa trên cả tính đúng và độ chắc chắn (tự tin) của dự đoán. Hàm này phạt cả các dự đoán sai lẫn các dự doán đúng nhưng độ chắc chắn thấp.

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

+ Bài toán phân loại
+ Tạo ra các mô hình với độ chắc chắn cao (precision, recall cao)

Hàm Loss Kullback-Leibler

torch.nn.KLDivLoss

KLDivLoss đưa ra một phép đo về sự khác biệt giữa hai phân bố xác suất

KLDivLoss Formula

Với x là xác xuất của nhãn đúng, y và xác suất của nhãn dự đoán.

Ý nghĩa của KLDivLoss

KLDivLoss khá giống với Cross-Entropy Loss. Hai phân bố xác suất càng khác nhau, giá trị loss càng lớn. Sự khác biệt nằm ở chỗ KLDivLoss không phạt mô hình dựa trên độ chắc chắn.

Khi nào sử dụng KLDivLoss?

+ Bài toán phân loại

Hàm Loss Margin Ranking – Xếp hạng biên

torch.nn.MarginRankingLoss

Margin Ranking Loss sử dụng hai đầu vào x1, x2, và nhãn y với giá trị (1 hoặc -1). Nếu y == 1 , hàm này sẽ coi đầu vào thứ nhất nên được xếp hạng cao hơn đầu vào thứ 2, và ngược lại với y == -1.

Margin Ranking Loss

Ý nghĩa của Margin Ranking Loss

Dự đoán y của mô hình dựa trên việc xếp hạng x1 và x2. Giả sử rằng giá trị mặc định của biên (margin) bằng 0, nếu và (x1-x2) cùng dấu, giá trị loss bằng 0. Nếu và (x1-x2) trái dấu, giá trị loss được tính bởi y * (x1-x2).

Khi nào sử dụng Margin Ranking Loss?

+ GANs.
+ Các nhiệm vụ xếp hạng

Hàm Loss Hinge Embedding

torch.nn.HingeEmbeddingLoss

Được sử dụng để đo độ tương tự / khác biệt giữa hai đầu vào.

Hinge Embedding Loss

Ý nghĩa của Hinge Embedding Loss

Giá trị dự đoán y của mô hình dựa trên đầu vào x. Giả sử Δ=1, nếu y=-1, giá trị loss được tính bằng (1-x) nếu (1-x)>00 trong trường hợp còn lại. Với y =1, loss chính là giá trị của x.

Khi nào sử dụng Hinge Embedding Loss?

+ Học các biểu diễn nhúng không tuyến tính
+ Học bán giám sát
+ Đo độ tương đồng / khác biệt giữa hai đầu vào

Hàm Loss Cosine Embedding

torch.nn.CosineEmbeddingLoss

Được sử dụng để đo độ tương tự / khác biệt giữa hai đầu vào.

Cosine Embedding Loss

Ý nghĩa của Cosine Embedding Loss

Giá trị dự đoán y được xác định dựa trên khoảng cách cosine giữa hai đầu vào x1 và x2. Giá trị này xác định bởi góc giữa hai véc tơ theo công thức:

cosine similarity

Khi nào sử dụng Cosine Embedding Loss?

+ Học các biểu diễn nhúng không tuyến tính
+ Học bán giám sát
+ Đo độ tương đồng / khác biệt giữa hai đầu vào

Nếu bạn thấy bài viết này hữu ích, đừng ngại chia sẻ với những người quan tâm. Hãy thường xuyên truy cập trituenhantao.io hoặc đăng ký (dưới chân trang) để có được những bài viết hữu ích, mới nhất về chủ đề này!