[ad_1]
Một cách đơn giản hơn để hiểu đạo hàm của hàm mất mát để phân loại và thời điểm/cách áp dụng chúng trong PyTorch
Cho dù bạn là người mới khám phá mạng lưới thần kinh hay là một chuyên gia dày dạn kinh nghiệm, thì đây sẽ là một bài đọc hữu ích để có thêm trực giác về các hàm mất mát. Khi ai đó kiểm tra nhiều hàm mất khác nhau trong quá trình đào tạo mô hình, tôi sẽ gặp khó khăn với những chi tiết nhỏ giữa các hàm. Tôi đã dành hàng giờ để nghiên cứu cách mô tả trực quan về hàm mất mát từ sách giáo khoa, tài liệu nghiên cứu và video. Tôi muốn chia sẻ không chỉ các dẫn xuất điều đó đã giúp tôi nắm bắt được các khái niệm, nhưng những cạm bẫy thường gặp và các trường hợp sử dụng phân loại trong PyTorch.
Trước khi bắt đầu, chúng ta cần xác định một số thuật ngữ cơ bản mà tôi sẽ sử dụng.
- Tập dữ liệu huấn luyện: {xᵢ, yᵢ}
- Mất chức năng: L(φ)
- Đầu ra dự đoán mô hình f(xᵢ, φ) với các thông số φ
- Xác suất có điều kiện: Pr(y|x)
- Phân phối tham số: Pr(y|ω) với ω đại diện cho các tham số mạng để phân phối trên y
Trước tiên chúng ta hãy quay trở lại những điều cơ bản. Một suy nghĩ phổ biến là mạng lưới thần kinh tính toán đầu ra vô hướng từ mô hình f(xᵢ, φ). Tuy nhiên, hầu hết các mạng lưới thần kinh ngày nay đều được đào tạo để dự đoán các tham số của phân phối y. (ngược lại với giá trị dự đoán của y).
Trong thực tế, mạng sẽ đưa ra phân bố xác suất có điều kiện Pr(y|x) trên các đầu ra có thể y. Nói cách khác, mọi điểm dữ liệu đầu vào sẽ dẫn đến phân phối xác suất được tạo cho mỗi đầu ra. Mạng muốn tìm hiểu các tham số cho phân bố xác suất, sau đó sử dụng các tham số và phân phối đó để dự đoán đầu ra.
Định nghĩa truyền thống của hàm mất mát là hàm so sánh đầu ra mục tiêu và đầu ra dự đoán. Nhưng chúng ta vừa nói đầu ra thô của mạng là phân phối thay vì đầu ra vô hướng, vậy điều này có thể xảy ra như thế nào?
Nghĩ về điều này theo quan điểm mà chúng ta vừa xác định, một hàm mất sẽ đẩy mỗi yᵢ có xác suất cao hơn trong việc phân phối Pr(yᵢ|xᵢ). Phần quan trọng cần nhớ là phân phối của chúng tôi đang được sử dụng để dự đoán đầu ra thực dựa trên các tham số từ đầu ra mô hình của chúng tôi. Thay vì sử dụng đầu vào của chúng tôi xᵢ cho việc phân phối, chúng ta có thể nghĩ đến một phân phối tham số Pr(y|ω) Ở đâu ω đại diện cho các tham số phân phối xác suất. Chúng tôi vẫn đang xem xét đầu vào, nhưng sẽ có một ý kiến khác ωᵢ = f(xᵢ, φ) cho mỗi xᵢ.
Ghi chú: Để làm rõ một khái niệm khó hiểu, φ đại diện cho các tham số mô hình và ω đại diện cho các tham số phân phối xác suất
GQuay trở lại định nghĩa truyền thống về hàm mất mát, chúng ta cần lấy kết quả đầu ra mà chúng ta có thể sử dụng từ mô hình. Từ phân bố xác suất của chúng tôi, có vẻ hợp lý khi lấy φ điều đó tạo ra xác suất lớn nhất cho mỗi xᵢ. Vì vậy, chúng ta cần tổng thể φ tạo ra xác suất lớn nhất trên tất cả các điểm đào tạo TÔI (tất cả các dẫn xuất đều được điều chỉnh từ Tìm hiểu về Deep Studying (1)):
Chúng tôi nhân các xác suất được tạo ra từ mỗi phân phối để tìm φ tạo ra xác suất tối đa (gọi là khả năng tối đa). Để làm được điều này, chúng ta phải giả sử dữ liệu là độc lập và được phân phối giống hệt nhau. Nhưng bây giờ chúng ta gặp phải một vấn đề: nếu xác suất rất nhỏ thì sao? Đầu ra phép nhân của chúng tôi sẽ tiến tới 0 (tương tự như vấn đề độ dốc biến mất). Hơn nữa, chương trình của chúng tôi có thể không xử lý được những con số nhỏ như vậy.
Để khắc phục điều này, chúng tôi đưa vào logarit chức năng! Bằng cách sử dụng các thuộc tính của nhật ký, chúng ta có thể cộng các xác suất của mình lại với nhau thay vì nhân chúng. Chúng ta biết rằng logarit là một hàm tăng đơn điệu, do đó kết quả đầu ra ban đầu của chúng ta được bảo toàn và chia tỷ lệ theo log.
Điều cuối cùng chúng ta cần để có được khả năng ghi nhật ký âm truyền thống là giảm thiểu đầu ra. Chúng tôi hiện đang tối đa hóa kết quả đầu ra, do đó, bạn chỉ cần nhân với số âm và lấy đối số tối thiểu (nghĩ về một số ví dụ đồ họa để thuyết phục bản thân về điều này):
Chỉ bằng cách hình dung đầu ra của mô hình dưới dạng phân bố xác suất, cố gắng tối đa hóa φ điều đó tạo ra xác suất tối đa và áp dụng nhật ký, chúng tôi đã nhận được sự mất khả năng ghi nhật ký âm! Điều này có thể được áp dụng cho nhiều nhiệm vụ bằng cách chọn phân bố xác suất hợp lý. Các ví dụ phân loại phổ biến được hiển thị dưới đây.
Nếu bạn đang thắc mắc làm thế nào một đầu ra vô hướng được tạo ra từ mô hình trong quá trình sự suy luậnđó chỉ là giá trị tối đa của phân phối:
Ghi chú: Đây chỉ là một dẫn xuất của khả năng ghi nhật ký âm. Trong thực tế, rất có thể sẽ có sự chính quy hóa trong hàm mất mát.
Cho đến thời điểm này, chúng tôi đã rút ra được khả năng ghi nhật ký âm. Điều quan trọng cần biết là nó có thể được tìm thấy trong hầu hết sách giáo khoa hoặc tài nguyên trực tuyến. Bây giờ, hãy áp dụng điều này vào phân loại để hiểu ứng dụng của nó.
Lưu ý bên lề: Nếu bạn muốn thấy điều này được áp dụng cho hồi quy, Tìm hiểu về Học sâu (1) có các ví dụ tuyệt vời về hồi quy đơn biến và Phân phối Gaussian để rút ra Lỗi Bình phương Trung bình
Phân loại nhị phân
Mục tiêu của phân loại nhị phân là gán đầu vào x đến một trong hai nhãn lớp y ∈ {0, 1}. Chúng ta sẽ sử dụng phân bố Bernoulli làm phân bố xác suất mà chúng ta lựa chọn.
Đây chỉ là một cách nói hoa mỹ về xác suất mà kết quả đầu ra là đúng, nhưng phương trình này là cần thiết để rút ra hàm mất mát của chúng ta. Chúng ta cần mô hình f(x, φ) Đến đầu ra P để tạo ra xác suất đầu ra dự đoán. Tuy nhiên, trước khi chúng ta có thể nhập P vào Bernoulli, chúng ta cần nó nằm trong khoảng từ 0 đến 1 (vì vậy đó là xác suất). Hàm được chọn cho trường hợp này là sigmoid: σ(z)
Một sigmoid sẽ nén đầu ra P nằm trong khoảng từ 0 đến 1. Do đó, đầu vào của chúng ta cho Bernoulli sẽ là p = σ(f(x, φ)). Điều này làm cho phân phối xác suất của chúng tôi:
Quay trở lại khả năng ghi nhật ký âm, chúng tôi nhận được những điều sau:
Nhìn quen quen nhỉ? Đây là hàm mất entropy chéo nhị phân (BCE)! Trực giác chính của vấn đề này là hiểu được lý do tại sao sigmoid được sử dụng. Chúng ta có một đầu ra vô hướng và nó cần được chia tỷ lệ từ 0 đến 1. Có những hàm khác có khả năng thực hiện điều này, nhưng sigmoid được sử dụng phổ biến nhất.
BCE ở PyTorch
Khi triển khai BCE trong PyTorch, có một số thủ thuật cần chú ý. Có hai hàm BCE khác nhau trong PyTorch: BCELoss() Và BCEWithLogitsLoss(). Một lỗi phổ biến (mà tôi đã mắc phải) là hoán đổi các trường hợp sử dụng không chính xác.
BCELoss(): Chức năng đèn pin này tạo ra tổn thất VỚI SIGMOID ĐƯỢC ÁP DỤNG. Đầu ra sẽ là một xác suất.
BCEWithLogitsLoss(): Chức năng ngọn đuốc xuất ra các bản ghi là đầu ra thô của mô hình. KHÔNG CÓ SIGMOID ĐƯỢC ÁP DỤNG. Khi sử dụng tính năng này, bạn sẽ cần phải áp dụng một ngọn đuốc.sigmoid() đến đầu ra.
Điều này đặc biệt quan trọng đối với Switch Studying làm mô hình, ngay cả khi bạn biết mô hình được đào tạo bằng BCE, hãy đảm bảo sử dụng đúng mô hình. Nếu không, bạn vô tình áp dụng sigmoid sau BCELoss() khiến mạng không học được…
Sau khi xác suất được tính bằng một trong hai hàm, nó cần được diễn giải trong quá trình suy luận. Xác suất là dự đoán của mô hình về khả năng xảy ra (nhãn lớp 1). Ngưỡng là cần thiết để xác định xác suất cắt của nhãn thực. p = 0,5 thường được sử dụng nhưng điều quan trọng là phải kiểm tra và tối ưu hóa các xác suất ngưỡng khác nhau. Một ý tưởng hay là vẽ biểu đồ xác suất đầu ra để xem độ tin cậy của đầu ra trước khi quyết định một ngưỡng.
Phân loại nhiều lớp
Mục tiêu của phân loại nhiều lớp là gán đầu vào x đến một trong Okay > 2 nhãn lớp y ∈ {1, 2, …, Okay}. Chúng tôi sẽ sử dụng phân phối phân loại làm phân phối xác suất mà chúng tôi lựa chọn.
Đây chỉ là việc gán xác suất cho mỗi lớp cho một đầu ra nhất định và tất cả các xác suất phải có tổng bằng 1. Chúng ta cần mô hình f(x, φ) Đến đầu ra P để tạo ra xác suất đầu ra dự đoán. Vấn đề tổng phát sinh như trong phân loại nhị phân. Trước khi chúng tôi có thể nhập P vào Bernoulli, chúng ta cần nó có xác suất nằm trong khoảng từ 0 đến 1. Một sigmoid sẽ không còn hoạt động vì nó sẽ chia tỷ lệ điểm của mỗi lớp thành một xác suất, nhưng không có gì đảm bảo rằng tất cả các xác suất sẽ có tổng bằng 1. Điều này có thể không rõ ràng ngay lập tức , nhưng một ví dụ được hiển thị:
Chúng ta cần một hàm có thể đảm bảo cả hai ràng buộc. Đối với điều này, một softmax được chọn. Softmax là phần mở rộng của sigmoid, nhưng nó sẽ đảm bảo tất cả các xác suất có tổng bằng 1.
Điều này có nghĩa là phân bố xác suất là một softmax được áp dụng cho đầu ra của mô hình. Khả năng tính toán nhãn ok: Pr(y = ok|x) = Sₖ(f(x, φ)).
Để rút ra hàm mất mát cho phân loại nhiều lớp, chúng ta có thể cắm đầu ra softmax và mô hình vào tổn thất khả năng ghi nhật ký âm:
Đây là nguồn gốc của entropy chéo đa lớp. Điều quan trọng cần nhớ là thuật ngữ duy nhất góp phần vào hàm mất mát là xác suất của lớp đúng. Nếu bạn đã thấy entropy chéo, bạn sẽ quen thuộc hơn với hàm có p(x) Và q(x). Điều này giống hệt với phương trình mất entropy chéo được chỉ ra trong đó p(x) = 1 cho lớp thực sự và 0 cho tất cả các lớp khác. q(x) là softmax của đầu ra mô hình. Đạo hàm khác của entropy chéo đến từ việc sử dụng Phân kỳ KL và bạn có thể đạt được hàm mất mát tương tự bằng cách coi một thuật ngữ là hàm Dirac-delta trong đó tồn tại đầu ra thực và thuật ngữ còn lại là đầu ra mô hình với softmax. Điều quan trọng cần lưu ý là cả hai tuyến đều dẫn đến cùng một hàm mất mát.
Entropy chéo trong PyTorch
Không giống như entropy chéo nhị phân, chỉ có một hàm mất mát cho entropy chéo trong PyTorch. nn.Mất mát CrossEntropy trả về đầu ra mô hình với softmax đã được áp dụng. Suy luận có thể được thực hiện bằng cách lấy đầu ra mô hình softmax có xác suất lớn nhất (lấy xác suất cao nhất như mong đợi).
Đây là hai ví dụ phân loại được nghiên cứu kỹ lưỡng. Đối với một nhiệm vụ phức tạp hơn, có thể mất một chút thời gian để quyết định hàm mất mát và phân bố xác suất. Có rất nhiều biểu đồ khớp với phân bố xác suất với các nhiệm vụ dự định nhưng luôn có chỗ để khám phá.
Đối với một số nhiệm vụ nhất định, việc kết hợp các hàm mất mát có thể hữu ích. Trường hợp sử dụng phổ biến cho điều này là trong một nhiệm vụ phân loại trong đó có thể hữu ích khi kết hợp tổn thất entropy chéo (nhị phân) với tổn thất hệ số Cube được sửa đổi. Trong hầu hết các trường hợp, các hàm mất mát sẽ được cộng lại với nhau và được chia tỷ lệ theo một số siêu tham số để kiểm soát mức độ đóng góp của từng hàm riêng lẻ vào việc mất mát.
[ad_2]
Source link