Στα προβλήματα μη γραμμικής βελτιστοποίησης και εκτίμησης παραμέτρων, η μέθοδος Newton (Newton-Raphson) είναι μια ισχυρή αριθμητική τεχνική που χρησιμοποιείται για την εύρεση ριζών ή ακραίων σημείων συναρτήσεων.
Η βασική ιδέα της μεθόδου είναι να προσεγγίσουμε τη συνάρτηση f(x) με την εφαπτομένη της στο τρέχον σημείο xn και να βρούμε το σημείο όπου η εφαπτομένη τέμνει τον άξονα x:
Επαναλαμβάνοντας αυτή τη διαδικασία, η μέθοδος συγκλίνει σε μια ρίζα της f(x).
Το Gradient Descent χρησιμοποιείται συνήθως για την εύρεση του ελάχιστου μιας συνάρτησης κόστους L(x) ακολουθώντας την κατεύθυνση του αρνητικού gradient:
Όπου η είναι το learning rate. Η μέθοδος Newton προχωρά ένα βήμα πιο πέρα: χρησιμοποιεί και τη δεύτερη παράγωγο (Hessian) της συνάρτησης:
Αυτό σημαίνει ότι η Newton "προβλέπει" καλύτερα τη καμπυλότητα της συνάρτησης και όχι μόνο την κλίση.
Θέλουμε να βρούμε μια ρίζα της συνάρτησης:
Επιλέγουμε αρχική τιμή για x, π.χ.:
Η τιμή αυτή είναι κοντά στη ρίζα που ψάχνουμε.
Η παράγωγος της f(x) είναι:
Στο x₀ έχουμε:
Η μέθοδος Newton δίνει:
Υπολογίζουμε την τιμή της f στο x₀:
Άρα:
Η εφαπτομένη στο x₀ δίνεται από τον τύπο:
Στο γράφημα:
Συνέχεια από Iteration 1, όπου βρήκαμε:
Υπολογίζουμε νέα τιμή με τον τύπο Newton:
Υπολογίζουμε f(x₁) και f'(x₁):
Άρα:
Συνεχίζουμε με:
Υπολογισμοί:
Νέα τιμή:
Στο γράφημα:
Μετά από 3 iterations η μέθοδος Newton έχει συγκλίνει σε:
Παρακάτω υλοποιούμε τη μέθοδο Newton για τη συνάρτηση:
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)
Ορίζουμε τη συνάρτηση f(x) και την παράγωγό της f'(x), που είναι απαραίτητη για τη μέθοδο Newton.
---Η συνάρτηση δέχεται:
Σε κάθε iteration:
Αν η διαφορά μεταξύ δύο διαδοχικών τιμών είναι πολύ μικρή, τότε θεωρούμε ότι έχουμε συγκλίνει στη ρίζα.
Αποθηκεύουμε κάθε 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