Logaritmer
Kunna använda logaritmer för att lösa exponentialekvationer och förstå log-skalor — grunden för log-loss och log-sannolikheter.
Öva i Mattegrafen ↗ · Matematik 2cFörkunskaper
Intuition
Logaritmen svarar på frågan: «upphöjt till vad?»
Den är alltså exponentialfunktionens motsats — precis som subtraktion är motsatsen till addition.
| Bas | Skrivs | Används till |
|---|---|---|
| 10 | eller | decibel, pH, storleksordningar |
| all matematisk analys, ML | ||
| 2 | information, bitar, entropi |
Logaritmens superkraft: den gör multiplikation till addition.
Det låter som en kuriositet men är avgörande i praktiken: multiplicerar du 500 sannolikheter (var och en mindre än 1) får du ett tal så litet att datorn avrundar det till noll. Adderar du deras logaritmer får du ett hanterbart negativt tal.
Därför räknar all maskininlärning i log-rummet.
Formellt
Lagarna — alla följer av potenslagarna:
| Lag | |
|---|---|
| produkt → summa | |
| kvot → differens | |
| potens → faktor | |
| , | |
| basbyte |
Lösa exponentialekvationer. Logaritmera båda sidor:
Varför ML räknar i log-rummet — tre skäl:
- Numerisk stabilitet. är noll i flyttal. är det inte.
- Produkter blir summor. Sannolikheten för en hel sekvens är en produkt över tokens; log-sannolikheten är en summa, som dessutom går att derivera term för term.
- Log-loss är den naturliga förlusten. Att maximera log-sannolikheten för rätt svar är samma sak som att minimera korsentropin:
För en säker och rätt gissning () går . För en säker och fel gissning () går den mot oändligheten. Log-loss straffar alltså självsäker dumhet oändligt hårt — vilket är precis vad man vill.
Perplexitet är samma sak i en mer läsbar förpackning: , tolkad som «hur många alternativ modellen i praktiken väljer mellan». Går log-lossen från 2,3 till 2,0 låter det litet — men perplexiteten går från 10,0 till 7,4, vilket är en fjärdedels minskning av modellens effektiva osäkerhet.
Kod
import math
print(math.log2(8), math.log10(1000), round(math.log(math.e), 4)) # 3.0 3.0 1.0
# Lösa 3 · 2^x = 96
print(math.log(96 / 3) / math.log(2)) # 5.0
# Varför log-rummet behövs: 400 sannolikheter multiplicerade
p = [0.1] * 400
print(math.prod(p)) # 0.0 ← all information borta
print(sum(math.log(x) for x in p)) # -921.03 ← fortfarande exakt
# Log-loss straffar självsäkra fel
for p_ratt in (0.99, 0.9, 0.5, 0.1, 0.01, 1e-8):
print(f" p={p_ratt:<8} log-loss={-math.log(p_ratt):.3f}")
# p=0.99 log-loss=0.010
# p=0.5 log-loss=0.693
# p=0.01 log-loss=4.605
# p=1e-08 log-loss=18.421 ← självsäkert fel kostar enormt
# Perplexitet gör log-loss läsbar
for loss in (2.3, 2.0, 1.6):
print(f" loss={loss} perplexitet={math.exp(loss):.1f}")
# loss=2.3 perplexitet=10.0
# loss=2.0 perplexitet=7.4
# loss=1.6 perplexitet=5.0
# log1p är exaktare än log(1+x) för små x
x = 1e-15
print(math.log(1 + x), math.log1p(x)) # 1.110223e-15 1.0e-15 ← log1p är exakt
Behärskning innebär
- Använder logaritmlagarna
- Löser exponentialekvationer med logaritm
- Förklarar varför ML räknar i log-rummet
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Matteboken (Mattecentrum) — fri läsning, ideell förening
- Khan Academy — matematik — CC BY-NC-SA 3.0
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0