Andragradsfunktioner
Kunna rita parabler, hitta vertex och lösa andragradsekvationer — formen på en enkel loss-yta.
Öva i Mattegrafen ↗ · Matematik 2cÖva i Mattegrafen ↗ · Metoder för att lösa andragradsekvationeFörkunskaper
Intuition
ritar en parabel — en skål.
| Om | Då |
|---|---|
| skålen öppnar uppåt, har ett minimum | |
| skålen öppnar nedåt, har ett maximum | |
| stort $ | a |
| litet $ | a |
Vertex (skålens botten eller topp) ligger vid
Den formeln är värd att memorera. Den kommer direkt ur symmetrin: parabeln är spegelsymmetrisk kring en lodrät linje genom vertex, så vertex ligger mitt emellan nollställena.
Varför AI bryr sig: medelkvadratfelet för en linjär modell är en parabel i varje enskild parameter. När du hör att «modellen söker minimum av förlustfunktionen» — det är den här skålen den letar botten i.
Formellt
Nollställen — där :
Diskriminanten avgör hur många det finns:
| Antal nollställen | Grafen | |
|---|---|---|
| två | skär x-axeln på två ställen | |
| ett (dubbelrot) | tangerar x-axeln | |
| noll (reella) | ligger helt över eller helt under |
Kvadratkomplettering skriver om funktionen så att vertex syns direkt:
Det är den formen som gör det uppenbart att minimum är och nås vid : kvadraten är alltid ≥ 0, och är noll precis där.
Kopplingen till maskininlärning, konkret. Anpassa till data med medelkvadratfel:
Det är en parabel i , med . Minimum ligger vid — och det är exakt den lösning minsta kvadratmetoden ger.
Därför är «konvex förlust» något man vill ha: en skål har en botten, och gradientnedstigning kan inte fastna någon annanstans.
Kod
import numpy as np
def vertex(a, b, c):
x = -b / (2 * a)
return x, a * x ** 2 + b * x + c
def nollstallen(a, b, c):
D = b ** 2 - 4 * a * c
if D < 0:
return []
if D == 0:
return [-b / (2 * a)]
r = D ** 0.5
return [(-b - r) / (2 * a), (-b + r) / (2 * a)]
print(vertex(1, -4, 3)) # (2.0, -1.0)
print(nollstallen(1, -4, 3)) # [1.0, 3.0] — vertex ligger mitt emellan
print(nollstallen(1, 2, 5)) # [] — D = 4 - 20 < 0
# Förlustfunktionen för y = w·x ÄR en parabel i w
x = np.array([1.0, 2.0, 3.0, 4.0])
y = np.array([2.1, 3.9, 6.2, 7.8])
def L(w):
return float(np.mean((y - w * x) ** 2))
a = float(np.mean(x ** 2))
b = float(-2 * np.mean(x * y))
c = float(np.mean(y ** 2))
w_stjarna = -b / (2 * a)
print(round(w_stjarna, 4), round(L(w_stjarna), 5)) # 1.99 0.02425
# Samma svar som minsta kvadratmetoden ger direkt
print(round(float(np.sum(x * y) / np.sum(x ** 2)), 4)) # 1.99
# Och parabeln är verkligen en skål: alla andra w är sämre
for w in (1.5, 1.9, w_stjarna, 2.1, 2.5):
print(f" w={w:.4f} L={L(w):.5f}")
# w=1.5000 L=1.82500
# w=1.9000 L=0.08500
# w=1.9900 L=0.02425 ← botten
# w=2.1000 L=0.11500
# w=2.5000 L=1.97500
De sista raderna är hela poängen: att träna en linjär modell är att hitta botten på en parabel, och för just den här modellen kan man räkna ut svaret direkt i stället för att leta.
Behärskning innebär
- Ritar en parabel och hittar dess vertex
- Löser andragradsekvationer
- Kopplar parabelns form till en loss-yta
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