Nếu chúng ta muốn tính xác suất lớp , chúng ta sẽ cần tính toán mẫu số:p(Y=C|x)
log(p(Y=C|x))=log(p(x|Y=C)p(Y=C) ∑|C|k=1p(x|Y=Ck)p(Y=Ck))=log⎛⎝⎜p(x|Y=C)p(Y=C)numerator⎞⎠⎟−log⎛⎝⎜⎜⎜⎜⎜ ∑k=1|C|p(x|Y=Ck)p(Y=Ck)denominator⎞⎠⎟⎟⎟⎟⎟
Phần tử có thể bị tràn vì có thể rất nhỏ: đó là vấn đề tương tự như trong tử số, nhưng lần này chúng ta có một phép tính tổng bên trong logarit, điều này ngăn chúng ta chuyển đổi (có thể gần với 0) vào (âm và không gần với 0 nữa, vì ). Để khắc phục sự cố này, chúng ta có thể sử dụng thực tế là để có được:log( ∑|C|k=1p(x|Y=Ck)p(Y=Ck))p(xi|Ck)p(xi|Ck)log(p(xi|Ck))0≤p(xi|Ck)≤1p(xi|Ck)=exp(log(p(xi|Ck)))
log( ∑k=1|C|p(x|Y=Ck)p(Y=Ck))=log( ∑k=1|C|exp(log(p(x|Y=Ck)p(Y=Ck))))
Tại thời điểm đó, một vấn đề mới phát sinh: có thể khá tiêu cực, ngụ ý rằng có thể trở nên rất gần với 0, tức là dưới dòng. Đây là nơi chúng tôi sử dụng thủ thuật log-sum-exp :log(p(x|Y=Ck)p(Y=Ck))exp(log(p(x|Y=Ck)p(Y=Ck)))
log∑keak=log∑keakeA−A=A+log∑keak−A
với:
- ak=log(p(x|Y=Ck)p(Y=Ck)) ,
- A=maxk∈{1,…,|C|}ak.
Chúng ta có thể thấy rằng việc giới thiệu biến tránh dòng chảy bên dưới. Ví dụ: với , chúng tôi có:Ak=2,a1=−245,a2=−255
- exp(a1)=exp(−245)=3.96143×10−107
- exp(a2)=exp(−255)=1.798486×10−111
Sử dụng thủ thuật log-sum-exp, chúng tôi tránh được dòng , với :
A=max(−245,−255)=−245log∑keak=log∑keakeA−A=A+log∑keak−A=−245+log∑keak+245=−245+log(e−245+245+e−255+245)=−245+log(e0+e−10)
Chúng tôi đã tránh được dòng chảy vì cách xa hơn hoặc . 3,96143 × 10 - 107 1.798486 × 10 - 111e−103.96143×10−1071.798486×10−111