Eğim Inis

Gerçek değer \(y\) ile tahminimiz \(h_\theta(x)\) arasındaki hatayı minimuma indirecek \(\theta^*\) değerini arıyoruz. Yapay öğrenme, en iyi \(\theta^*\) değerini öğrenmekten ibarettir. Hata fonksiyonu \[ Hata(\theta) = \frac{1}{2} (y - h_\theta(x))^2 \]

Hatayi minimuma indirecek parametre değerlerini, eğim iniş yöntemi ile bulacağız. \(Hata(\theta)\) fonksiyonun minimum noktasini

\[ \theta_i = \theta_i - \alpha \frac{d Hata(\theta)}{d\theta_i} \]

Bu \(\theta\) değerlerini nasıl güncelleyeceğimizi söyler. Türevin aksi yönde \(\alpha\) adım büyüklüğü ile orantılı olarak yol al. Basitten başlamak için, hata fonksiyonumuzun

\[ Hata(\theta) = \theta^2 + 5 \] olduğunu düşünelim. Bakalım eğim iniş yöntemi bu hata fonksiyonun minimum noktasını bula bilecek mi?

##########################################################
# Basit bir f fonksiyonun minimum noktasini bulalim
# f fonksiyonunu hata fonksiyonu gibi dusunelim
theta = -100:100
f <- function(theta){theta^2 + 5}
f.turev <- function(theta){2*theta}
guncelleme = 20 # guncelleme sayisi
basla = 94
##########################################################
dereceli.inis <- function(theta = basla, alpha = 0.025, dongu = guncelleme){
  th = rep(theta, dongu)
  for(i in 2:dongu){
    theta <- theta - alpha * f.turev(theta)
    th[i] = theta
  }
  return(th)
}
##########################################################
inis = dereceli.inis()
plot(theta,f(theta), type = 'l')
lines(inis, f(inis), type = 'o', col = "blue")
grid()

20 guncelleme sayisi ve \(\alpha = 0.025\) adım büyüklüğü ile hedefe ulaşamadık. Adım büyüklüğümüzü arttıralım.

##########################################################
inis = dereceli.inis(alpha = 0.05)
plot(theta,f(theta), type = 'l')
lines(inis, f(inis), type = 'o', col = "orange")
grid()

Az kaldı, biraz daha arttıtralım.

##########################################################
inis = dereceli.inis(alpha = 0.1)
plot(theta,f(theta), type = 'l')
lines(inis, f(inis), type = 'o', col = "red")
grid()