gladiator e jučer sam se cijelu noć zajebavao sa ovim problemom, evo što sam zaključio
Problemi nastaju prilikom evaluacije \ln{\left(1 - \sigma(x)\right)} što se više x povećava (taj x će kod nas biti onaj \mathbf{w}^{\mathrm{T}} \mathbf{x} + w_0, no nebitno za ovaj konkretan problem, bitno je da je to neki realan broj koji je input u sigmoidalnu funkciju)
i prilikom evaluacije \ln{\left(\sigma(x)\right)} što se više x smanjuje.
Koji je uzrok problema? Output sigmoide. Pa ako ideš računati upravo tako, za relativno veliki x će ti u jednom trenutku ispasti \sigma(x) = 1 zbog računalne nepreciznosti, odnosno ne može računalo prikazati takav broj koji je toliko blizu 1. Npr. meni već za x \geq 36.7 ispada tako. To je onda problem jer će ti dojavljivati greške/bacati exceptione ako ideš računati \ln{\left(1 - \sigma(x)\right)} jer će pokušati računati \ln{0}. Kako to zaobići?
Pa ako malo drukčije izrazimo, dobijemo
\ln{\left(1 - \sigma(x)\right)} = \ln{\left(1 - \frac{1}{1+ e^{-x}}\right)} = \ln{\left(\frac{e^{-x}}{1+e^{-x}}\right)} = \ln{\left(e^{-x}\right)} - \ln{\left(1 + e^{-x}\right)} = -x - \ln{\left(1 + e^{-x}\right)}
Što neće biti problematično za relativno velike x. Možeš otići korak dalje i primijetiti da će za relativno velike x izraz e^{-x} biti blizu 0, pa onda gornji izraz u tom slučaju aproksimirati na samo -x.
Isto vrijedi i za drugi problematični slučaj računanja \ln{\left(\sigma(x)\right)} kada je x relativno mali (kod mene je to x \leq -700)
Opet preformuliraš izraz kao i gore
\ln{\left(\sigma(x)\right)} = \ln{\left( \frac{1}{1+e^{-x}} \right)} = -\ln{\left( 1+e^{-x} \right)}
Što je sasvim u redu jer će u logaritam onda ući dosta veliki broj zbog ovog e^{-x}. Opet, ako hoćeš jednostavnu aproksimaciju, onda možeš ju ostvariti argumentiranjem (ili limesima) da ovih 1 nadodanih na e^{-x} nije značajna pa onda aproksimirati gornji izraz sa samo x.
Zero dobije se kao argument eta
i cijelo vrijeme je ista, ne moraš raditi linijsko pretraživanje