Machine Learning 13: Μέθοδος Newton για Μη Γραμμικά Προβλήματα

Στα προβλήματα μη γραμμικής βελτιστοποίησης και εκτίμησης παραμέτρων, η μέθοδος Newton (Newton-Raphson) είναι μια ισχυρή αριθμητική τεχνική που χρησιμοποιείται για την εύρεση ριζών ή ακραίων σημείων συναρτήσεων.

1. Θεωρία της Μεθόδου Newton

Η βασική ιδέα της μεθόδου είναι να προσεγγίσουμε τη συνάρτηση f(x) με την εφαπτομένη της στο τρέχον σημείο xn και να βρούμε το σημείο όπου η εφαπτομένη τέμνει τον άξονα x:

xn+1 = xn - f(xn) / f'(xn)

Επαναλαμβάνοντας αυτή τη διαδικασία, η μέθοδος συγκλίνει σε μια ρίζα της f(x).

1.1 Διαφορά με Gradient Descent

Το Gradient Descent χρησιμοποιείται συνήθως για την εύρεση του ελάχιστου μιας συνάρτησης κόστους L(x) ακολουθώντας την κατεύθυνση του αρνητικού gradient:

xn+1 = xn - η ∇L(xn)

Όπου η είναι το learning rate. Η μέθοδος Newton προχωρά ένα βήμα πιο πέρα: χρησιμοποιεί και τη δεύτερη παράγωγο (Hessian) της συνάρτησης:

xn+1 = xn - H⁻¹ ∇L(xn)

Αυτό σημαίνει ότι η Newton "προβλέπει" καλύτερα τη καμπυλότητα της συνάρτησης και όχι μόνο την κλίση.

1.2 Πλεονεκτήματα της Μεθόδου Newton

Σημείωση: Αν η Hessian είναι πολύ μεγάλη ή υπολογιστικά δαπανηρή, το Gradient Descent μπορεί να είναι πιο σταθερή λύση. Ωστόσο, για πολλά γεωφυσικά ή μη γραμμικά προβλήματα με λίγες παραμέτρους, η Newton δίνει ταχύτερη και πιο ακριβή σύγκλιση.

Παράδειγμα: Μέθοδος Newton για f(x) = x³ - 2x - 5

Θέλουμε να βρούμε μια ρίζα της συνάρτησης:

f(x) = x³ - 2x - 5

Βήμα 1: Επιλογή Αρχικής Τιμής

Επιλέγουμε αρχική τιμή για x, π.χ.:

x₀ = 2

Η τιμή αυτή είναι κοντά στη ρίζα που ψάχνουμε.

Βήμα 2: Υπολογισμός της Παραγώγου

Η παράγωγος της f(x) είναι:

f'(x) = 3x² - 2

Στο x₀ έχουμε:

f'(x₀) = f'(2) = 3*(2)² - 2 = 10

Βήμα 3: Υπολογισμός Νέας Τιμής x₁

Η μέθοδος Newton δίνει:

x₁ = x₀ - f(x₀)/f'(x₀)

Υπολογίζουμε την τιμή της f στο x₀:

f(x₀) = 2³ - 2*2 - 5 = -1

Άρα:

x₁ = 2 - (-1)/10 = 2 + 0.1 = 2.1

Βήμα 4: Γραφική Ερμηνεία

Η εφαπτομένη στο x₀ δίνεται από τον τύπο:

y = f(x₀) + f'(x₀) * (x - x₀)
graph131

Στο γράφημα:

Μαθηματική Εξήγηση: Iteration 2 και 3

Συνέχεια από Iteration 1, όπου βρήκαμε:

x₁ = 2.1

Iteration 2

Υπολογίζουμε νέα τιμή με τον τύπο Newton:

x₂ = x₁ - f(x₁)/f'(x₁)

Υπολογίζουμε f(x₁) και f'(x₁):

f(x₁) = (2.1)³ - 2*2.1 - 5 ≈ 0.061
f'(x₁) = 3*(2.1)² - 2 ≈ 11.23

Άρα:

x₂ = 2.1 - 0.061 / 11.23 ≈ 2.09457

Iteration 3

Συνεχίζουμε με:

x₃ = x₂ - f(x₂)/f'(x₂)

Υπολογισμοί:

f(x₂) ≈ (2.09457)³ - 2*2.09457 - 5 ≈ 0.00017
f'(x₂) ≈ 3*(2.09457)² - 2 ≈ 11.153

Νέα τιμή:

x₃ ≈ 2.09457 - 0.00017 / 11.153 ≈ 2.094555
graph132

Στο γράφημα:

Συμπέρασμα

Μετά από 3 iterations η μέθοδος Newton έχει συγκλίνει σε:

x ≈ 2.09455

Υλοποίηση της Μεθόδου Newton σε Python

Παρακάτω υλοποιούμε τη μέθοδο Newton για τη συνάρτηση:

f(x) = x³ - 2x - 5
import numpy as np

def f(x):
    return x**3 - 2*x - 5

def fp(x):
    return 3*x**2 - 2

def newton_method(x0, tol=1e-6, max_iter=10):
    x = x0
    history = []

    for i in range(max_iter):
        fx = f(x)
        fpx = fp(x)

        x_new = x - fx / fpx

        history.append((i, x, fx, fpx, x_new))

        if abs(x_new - x) < tol:
            break

        x = x_new

    return history

results = newton_method(2)

for r in results:
    print(r)

1. Ορισμός Συνάρτησης και Παραγώγου

def f(x): return x**3 - 2*x - 5 def fp(x): return 3*x**2 - 2

Ορίζουμε τη συνάρτηση f(x) και την παράγωγό της f'(x), που είναι απαραίτητη για τη μέθοδο Newton.

---

2. Υλοποίηση της Newton Method

def newton_method(x0, tol=1e-6, max_iter=10):

Η συνάρτηση δέχεται:

3. Επανάληψη (Core του Αλγορίθμου)

for i in range(max_iter): fx = f(x) fpx = fp(x) x_new = x - fx / fpx

Σε κάθε iteration:

xₙ₊₁ = xₙ - f(xₙ)/f'(xₙ)

4. Κριτήριο Σύγκλισης

if abs(x_new - x) < tol: break

Αν η διαφορά μεταξύ δύο διαδοχικών τιμών είναι πολύ μικρή, τότε θεωρούμε ότι έχουμε συγκλίνει στη ρίζα.

5. Αποθήκευση Ιστορικού

history.append((i, x, fx, fpx, x_new))

Αποθηκεύουμε κάθε iteration για να μπορούμε να δούμε πώς εξελίσσεται η λύση.

Αποτελέσματα

Κάθε γραμμή του πίνακα αντιστοιχεί σε ένα iteration της μεθόδου Newton.

Iteration xₙ f(xₙ) f'(xₙ) xₙ₊₁
0 2 -1 10 2.1
1 2.1 0.061 11.23 2.094568
2 2.094568 0.000186 11.161647 2.094551
3 2.094551 ~0 11.161438 2.094551

Εξήγηση Στηλών

Βιβλιογραφία

Stanford Online. Stanford CS229: Machine Learning - Locally Weighted & Logistic Regression | Lecture 3 (Autumn 2018) [Video]. YouTube. https://youtu.be/het9HFqo1TQ?list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU