Hàm lỗi entropy chéo trong các mạng thần kinh


115

Trong MNIST Dành cho người mới bắt đầu ML, họ định nghĩa entropy chéo là

Hy(y):=iyilog(yi)

i y iyi là giá trị xác suất dự đoán cho lớp và là xác suất thực sự cho lớp đó.iyi

Câu hỏi 1

Có phải đó là vấn đề mà (trong ) có thể là 0 không? Điều này có nghĩa là chúng ta có một bộ phân loại thực sự xấu, tất nhiên. Nhưng hãy nghĩ về một lỗi trong tập dữ liệu của chúng tôi, ví dụ như một "hiển nhiên" được dán nhãn là . Nó chỉ đơn giản là sụp đổ? Có phải mô hình mà chúng ta đã chọn (kích hoạt softmax ở cuối) về cơ bản không bao giờ đưa ra xác suất 0 cho lớp đúng không? đăng nhập ( y i )yilog(yi)13

Câu hỏi 2

Tôi đã học được rằng entropy chéo được định nghĩa là

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

Cái gì đúng? Bạn có bất kỳ tài liệu tham khảo sách giáo khoa cho một trong hai phiên bản? Làm thế nào để các chức năng đó khác nhau trong các thuộc tính của chúng (như các chức năng lỗi cho các mạng thần kinh)?



Xem thêm: Bài viết trên blog Giải thích về phân kỳ Kullback-Leibler .
Piotr Migdal

Câu trả lời:


101

Một cách để giải thích entropy chéo là xem nó như một khả năng (trừ) log cho dữ liệu , theo mô hình .yiyi

Cụ thể, giả sử rằng bạn có một số mô hình cố định (còn gọi là "giả thuyết"), dự đoán cho lớp xác suất xảy ra giả thuyết của họ . Giả sử bây giờ bạn quan sát (trong thực tế) trường hợp của lớp , của lớp , trường hợp của lớp , v.v. Theo mô hình của bạn, khả năng điều này xảy ra là: Lấy logarit và thay đổi ký hiệu: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
Nếu bây giờ bạn chia tổng số bên phải cho số lượng quan sát và biểu thị xác suất theo kinh nghiệm là , bạn sẽ nhận được entropy chéo: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Hơn nữa, khả năng ghi nhật ký của một tập dữ liệu được cung cấp cho một mô hình có thể được hiểu là thước đo "độ dài mã hóa" - số bit bạn muốn sử dụng để mã hóa thông tin này nếu sơ đồ mã hóa của bạn dựa trên giả thuyết của bạn.

Điều này xuất phát từ quan sát rằng một sự kiện độc lập với xác suất yêu cầu ít nhất bit để mã hóa nó (giả sử mã hóa hiệu quả) và do đó, biểu thức nghĩa đen là độ dài dự kiến ​​của mã hóa , trong đó độ dài mã hóa cho các sự kiện được tính toán bằng cách sử dụng phân phối "giả thuyết", trong khi kỳ vọng được thực hiện so với thực tế.yilog2yi

iyilog2yi,

Cuối cùng, thay vì nói "thước đo độ dài mã hóa dự kiến" tôi thực sự muốn sử dụng thuật ngữ "đo lường bất ngờ" không chính thức. Nếu bạn cần rất nhiều bit để mã hóa một sự kiện dự kiến ​​từ một bản phân phối, thì bản phân phối đó "thực sự đáng ngạc nhiên" đối với bạn.

Với những trực giác đó, câu trả lời cho câu hỏi của bạn có thể được xem như sau:

  • Câu 1 . Đúng. Đó là một vấn đề bất cứ khi nào tương ứng là khác không cùng một lúcyi . Nó tương ứng với tình huống trong đó mô hình của bạn tin rằng một số lớp có xác suất xảy ra bằng 0 và lớp này hiện ra trong thực tế. Kết quả là, "sự bất ngờ" của mô hình của bạn là vô cùng lớn: mô hình của bạn không tính đến sự kiện đó và bây giờ cần vô số bit để mã hóa nó. Đó là lý do tại sao bạn có được vô hạn như entropy chéo của bạn.

    Để tránh vấn đề này, bạn cần đảm bảo rằng mô hình của bạn không đưa ra các giả định phát ban về điều gì đó là không thể trong khi nó có thể xảy ra. Trong thực tế, mọi người có xu hướng sử dụng các hàm sigmoid hoặc "softmax" làm mô hình giả thuyết của họ, đủ bảo thủ để có ít nhất một số cơ hội cho mọi lựa chọn.

    Nếu bạn sử dụng một số mô hình giả thuyết khác, bạn cần phải thường xuyên hóa (hay còn gọi là "trơn tru") để nó không đưa ra giả thuyết về các số 0 ở nơi không nên.

  • Câu 2 . Trong công thức này, người ta thường giả sử là hoặc , trong khi là giả thuyết xác suất của mô hình cho đầu vào tương ứng. Nếu bạn nhìn kỹ, bạn sẽ thấy rằng nó chỉ đơn giản là cho dữ liệu nhị phân, tương đương với phương trình thứ hai trong câu trả lời này.yi01yilogP[data|model]

    Do đó, nói đúng ra, mặc dù nó vẫn là một khả năng đăng nhập, nhưng điều này không tương đương về mặt cú pháp với entropy chéo. Ý nghĩa của một số người khi đề cập đến một biểu thức như là entropy chéo là trên thực tế, đó là một tổng số trên các entropi chéo nhị phân cho các điểm riêng lẻ trong tập dữ liệu: trong đó và phải được hiểu là các bản phân phối nhị phân tương ứng và .

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
Bạn có thể cung cấp một nguồn nơi họ xác định không? Ở đây, họ định nghĩa nó là phân phối một nóng cho nhãn lớp hiện tại. Sự khác biệt là gì? yi=kiN
Lenar Hoyt

1
Trong hướng dẫn của MNIST TensorFlow, họ cũng định nghĩa nó theo các vectơ một nóng.
Lenar Hoyt

@LenarHoyt Khi , sẽ tương đương với một nóng. Bạn có thể nghĩ về một điểm nóng là mã hóa của một mặt hàng dựa trên xác suất phân loại theo kinh nghiệm (thực tế) của nó. N=1ki/N
THN

'sự kiện độc lập yêu cầu ... để mã hóa nó' - bạn có thể giải thích bit này không?
Alex

@Alex Điều này có thể cần giải thích dài hơn để hiểu đúng - đọc mã Shannon-Fano và mối quan hệ của mã hóa tối ưu với phương trình entropy của Shannon. Để giảm bớt sự cố, nếu một sự kiện có xác suất 1/2, cách tốt nhất của bạn là mã hóa nó bằng một bit duy nhất. Nếu nó có xác suất 1/4, bạn nên dành 2 bit để mã hóa nó, v.v. Nói chung, nếu tập hợp sự kiện của bạn có xác suất ở dạng 1/2 ^ k, bạn nên cho chúng độ dài k - theo cách này mã của bạn sẽ tiếp cận chiều dài tối ưu của Shannon.
KT.

22

Công thức logloss đầu tiên bạn đang sử dụng là cho mất nhật ký đa lớp, trong đó chỉ mục liệt kê các lớp khác nhau trong một ví dụ. Công thức giả định rằng một trong mỗi ví dụ là 1 và phần còn lại đều là 0.iyi

Điều đó có nghĩa là công thức chỉ ghi lại lỗi trên lớp đích. Nó loại bỏ bất kỳ khái niệm lỗi nào mà bạn có thể coi là "dương tính giả" và không quan tâm đến việc xác suất dự đoán được phân phối như thế nào so với xác suất dự đoán của lớp thực.

Một giả định khác là cho các dự đoán của từng ví dụ. Một lớp softmax thực hiện điều này một cách tự động - nếu bạn sử dụng một cái gì đó khác nhau, bạn sẽ cần phải mở rộng quy mô đầu ra để đáp ứng ràng buộc đó.iyi=1

Câu hỏi 1

Có phải đó là vấn đề mà (trong ) có thể là 0 không?yilog(yi)

Vâng, đó có thể là một vấn đề, nhưng nó thường không phải là một vấn đề thực tế. Một lớp softmax được khởi tạo ngẫu nhiên là cực kỳ khó có thể tạo ra một chính xác 0trong bất kỳ lớp nào. Nhưng nó là có thể, vì vậy giá trị cho phép nó. Đầu tiên, đừng đánh giá cho bất kỳ , vì các lớp phủ định luôn đóng góp 0 cho lỗi. Thứ hai, trong mã thực tế, bạn có thể giới hạn giá trị ở mức nào đó như tính ổn định số - trong nhiều trường hợp không bắt buộc, nhưng đây là chương trình phòng thủ hợp lý.log(yi)yi=0log( max( y_predict, 1e-15 ) )

Câu hỏi 2

Tôi đã học được rằng entropy chéo được định nghĩa làHy(y):=i(yilog(yi)+(1yi)log(1yi))

Công thức này thường được sử dụng cho một mạng có một đầu ra dự đoán hai lớp (thường là thành viên lớp dương cho 1 và âm cho đầu ra 0). Trong trường hợp đó chỉ có thể có một giá trị - bạn có thể mất tổng số trên .ii

Nếu bạn sửa đổi một mạng như vậy để có hai đầu ra đối lập và sử dụng softmax cộng với định nghĩa logloss đầu tiên, thì bạn có thể thấy rằng trên thực tế đó là cùng một phép đo lỗi nhưng gấp số liệu lỗi cho hai lớp thành một đầu ra.

Nếu có nhiều hơn một lớp để dự đoán thành viên và các lớp không độc quyền, ví dụ một ví dụ có thể là bất kỳ hoặc tất cả các lớp cùng một lúc, thì bạn sẽ cần sử dụng công thức thứ hai này. Đối với nhận dạng chữ số không phải là trường hợp (một chữ số viết chỉ nên có một lớp "đúng")


Lưu ý rằng có một sự mơ hồ trong cách trình bày công thức thứ hai - về mặt lý thuyết có thể giả sử chỉ có một lớp và sau đó sẽ liệt kê các ví dụ. i
Neil Slater

log(yi)=0yi=0log(yi)

@NeilSlater nếu các lớp không loại trừ lẫn nhau, vectơ đầu ra cho mỗi đầu vào có thể chứa nhiều hơn 1, chúng ta có nên sử dụng công thức thứ hai không?
Truyền thông

1
@Media: Không hẳn. Bạn muốn được nhìn vào những thứ như phân loại thứ bậc mặc dù. . .
Neil Slater

1
yiyiyi

11

ytrueypredictytrue

Câu hỏi đầu tiên:

Câu trả lời trên đã giải thích nền tảng của công thức đầu tiên của bạn, entropy chéo được xác định trong lý thuyết thông tin.

Từ một ý kiến ​​khác với lý thuyết thông tin:

bạn có thể tự kiểm tra rằng công thức đầu tiên không có hình phạt về tính tích cực sai (sự thật là sai nhưng mô hình của bạn dự đoán rằng nó đúng), trong khi công thức thứ hai có hình phạt về tính tích cực sai. Do đó, việc lựa chọn công thức đầu tiên hoặc thứ hai, sẽ ảnh hưởng đến số liệu của bạn (còn gọi là số lượng thống kê bạn muốn sử dụng để đánh giá mô hình của mình).

Trong từ cư sĩ:

Nếu bạn muốn chấp nhận gần như tất cả những người tốt làm bạn của bạn nhưng sẵn sàng chấp nhận một số người xấu trở thành bạn của bạn, thì hãy sử dụng công thức đầu tiên cho tiêu chí.

Nếu bạn muốn trừng phạt bản thân chấp nhận một số người xấu làm bạn, nhưng đồng thời, tỷ lệ chấp nhận người tốt của bạn có thể thấp hơn điều kiện thứ nhất, sau đó sử dụng công thức thứ hai.

Trong khi, tôi đoán hầu hết chúng ta đều quan trọng và muốn chọn cái thứ hai (vì vậy nhiều gói ML giả định entropy chéo là gì).

Câu hỏi thứ hai:

Entropy chéo trên mỗi mẫu trên mỗi lớp:

ytruelog(ypredict)

Entropy chéo cho toàn bộ bộ dữ liệu toàn bộ các lớp:

inkKytrue(k)log(ypredict(k))

Như vậy, khi chỉ có hai lớp (K = 2), bạn sẽ có công thức thứ hai.


5

Những vấn đề này được xử lý bằng cách sử dụng softmax của hướng dẫn.

Đối với 1) bạn đúng rằng softmax đảm bảo đầu ra khác không vì nó lũy thừa theo đầu vào của nó. Đối với các kích hoạt không cung cấp bảo đảm này (như relu), thật đơn giản để thêm một thuật ngữ tích cực rất nhỏ vào mỗi đầu ra để tránh vấn đề đó.

Đối với 2), rõ ràng chúng không giống nhau, nhưng tôi, công thức softmax mà họ đưa ra đã giải quyết vấn đề này. Nếu bạn không sử dụng softmax, điều này sẽ khiến bạn học các thuật ngữ thiên vị rất lớn, đoán 1 cho mỗi lớp cho bất kỳ đầu vào nào. Nhưng vì họ bình thường hóa softmax trên tất cả các lớp, nên cách duy nhất để tối đa hóa đầu ra của lớp chính xác là nó phải lớn so với các lớp không chính xác.


"Bạn đúng rằng softmax đảm bảo đầu ra khác không" - Tôi biết rằng về mặt lý thuyết là như vậy. Trong thực tế, có thể xảy ra rằng (do vấn đề số) điều này trở thành 0?
Martin Thoma

Câu hỏi hay. Tôi cho rằng chức năng lũy ​​thừa hoàn toàn có thể xuất 0,0 nếu đầu vào của bạn quá nhỏ so với độ chính xác của số float của bạn. Tuy nhiên, tôi đoán hầu hết các triển khai đều thêm thuật ngữ tích cực nhỏ để đảm bảo đầu vào khác không.
jamesmf

0

Có phải đó là vấn đề mà (trong ) có thể là 0 không?yilog(yi)

Đúng vậy, vì không được xác định, nhưng vấn đề này được tránh sử dụng trong thực tế.log(0)log(yi+ϵ)

Cái gì đúng?
(a) hoặc (b) ?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) là chính xác cho dự đoán nhiều lớp (nó thực sự là một tổng kết kép), (b) giống như (a) cho dự đoán hai lớp. Cả hai đều là entropy chéo.

Thí dụ:

Giả sử mỗi dữ liệu đào tạo có nhãn và mô hình dự đoán .xici{0,1}ci[0,1]

Đối với 5 điểm dữ liệu, nhãn thực và dự đoán mô hình là: cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1),

Xác định các vectơ và là yiyi

  • yik:=1c i = k : = 0 nếu và nếu không, ci=k:=0

  • yik:=p(k|xi)x i k là xác suất của thuộc lớpxik , được ước tính theo mô hình.

(yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])}

Cả (a) và (b) được tính như sau:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

Đạo hàm:

1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik)

yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim)

Công thức cuối cùng trên tất cả các điểm đào tạo là:

Hy(y)=(xi,yi)k=1Kyiklog(yik)

yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

giống như (b).

Liên kết chéo (a) trên các lớp (một tổng)

Entropy chéo (a) trên các lớp là:

Hy(y)=k=1Kyklog(yk)

Phiên bản này không thể được sử dụng cho nhiệm vụ phân loại. Cho phép sử dụng lại dữ liệu từ ví dụ trước:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

y0=3/5=0.6y1=0.4

y0=3/5=0.6y1=0.4

y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

(0,0.8)(1,0.2)y0y1


(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

y0y0=3/5

Licensed under cc by-sa 3.0 with attribution required.