Toparlama ve güçlendirme gibi, gradyan güçlendirme de başka bir makine öğrenimi algoritmasının üzerine uygulanan bir metodolojidir. Genel olarak, gradyan artırma iki tür model içerir:
- "zayıf" bir makine öğrenimi modelidir. Bu, genellikle bir karar ağacıdır.
- birden fazla zayıf modelden oluşan "güçlü" makine öğrenimi modeli.
Renk geçişi artırılırken, her adımda, mevcut güçlü modelin (gerçek olmayan yanıt" olarak adlandırılan) "hata"yı tahmin etmesi için yeni bir zayıf model eğitilir. Sorunla ilgili ayrıntıları daha sonra açıklayacağız. Şu an için, tahmin ve regresyon etiketi arasındaki farkın "hata" olduğunu varsayalım. Zayıf model (yani "hata") daha sonra, güçlü modelin hatasını azaltmak için negatif modele sahip güçlü bir modele eklenir.
Kademeli artış yinelenen bir süreçtir. Her yineleme aşağıdaki formülü çağırır:
\[ F_{i+1} = F_i - f_i \]
Bu örnekte:
- $F_i$, $i$ adımındaki güçlü modeldir.
- $f_i$, $i$ adımındaki zayıf modeldir.
Bu işlem, maksimum yineleme sayısı veya (güçlü model) ayrı bir doğrulama veri kümesinde ölçüldüğü gibi sığmaya başladığı için, bir ölçüt karşılanana kadar tekrarlanır.
Aşağıdaki durumlarda basit regresyon veri kümesinde gradyan takviyesini göstermek isteriz:
- Amaç, $y$ tarafından $x$ tutarından tahmin etmektir.
- Güçlü model, sıfır sabiti olarak başlatılır: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
Bu kodu aşağıdaki veri kümesine uygulayalım:
Şekil 25. Tek bir sayısal özelliğe sahip sentetik regresif veri kümesi.
Renk geçişi artırıcı algoritmanın ilk yinelemesinden sonraki üç olay örneğini burada bulabilirsiniz:
Şekil 26. İlk yinelemeden sonraki üç plan.
Şekil 26'da olay örgüleri için aşağıdakilere dikkat edin:
- İlk şemada, şu anda her zaman 0 olan güçlü modelin tahminleri gösterilir.
- İkinci şema, zayıf modelin etiketi olan hatayı gösterir.
- Üçüncü planda, zayıf model gösteriliyor.
İlk zayıf model, etiketin kaba bir temsilini öğrenmektir ve çoğunlukla özellik alanının sol kısmına (en fazla varyasyonun olduğu bölüm, dolayısıyla sürekli olarak yanlış olan modelde en çok hata yapılan bölüm) odaklanır.
Aşağıda, algoritmanın başka bir tekrarsı için aynı çizimler verilmiştir:
Şekil 27. İkinci iterasyondan sonra üç plan.
Şekil 27'de olay örgüleri için aşağıdakileri göz önünde bulundurun:
- Güçlü model artık önceki yinelemenin zayıf modelini tahmin ediyor.
- Güçlü modelin yeni hatası biraz daha küçüktür.
- Zayıf modelin yeni tahmini artık özellik alanının doğru bölümüne odaklanıyor.
Algoritmayı 8 tekrar için daha çalıştırırız:
Şekil 28. Üçüncü iterasyon ve onuncu tekrardan sonraki üç plan.
Şekil 28'de güçlü model tahmininin veri kümesinin grafiğine benzemeye başladığını unutmayın.
Bu sayılar, zayıf ağaçlar olarak karar ağaçlarını kullanan gradyan artırma algoritmasını göstermektedir. Bu kombinasyona gradyan takviyeli (karar) ağaçlar denir.
Yukarıdaki öneriler, renk geçişi artırıcı özelliğin özünü gösterir. Ancak, bu örnekte aşağıdaki iki gerçek dünya işlemi eksiktir:
- Küçültme
- Bir adım Newton yöntemi ile yaprak değerlerinin optimizasyonu
Küçült
Zayıf model $f_i$, güçlü $F_i$ modeline eklenmeden önce $\nu$ (ör.$\nu = 0,1$) küçük bir değer ile çarpılır. Bu küçük değer, büyüme olarak adlandırılır. Diğer bir deyişle, aşağıdaki formülü kullanarak her bir tekrar yerine:
\[ F_{i+1} = F_i - f_i \]
Her iterasyon aşağıdaki formülü kullanır:
\[ F_{i+1} = F_i - \nu f_i \]
Renk geçişi artırıcı küçülme, nöral ağlarda öğrenme oranına benzerdir. Daraltma, güçlü modelin ne kadar hızlı öğrendiğini kontrol eder ve fazla sığdırmaya yardımcı olur. Yani 0,0'a yakın bir küçültme uygulaması, 1,0'a yakın bir aşağı çekme değerinden daha fazla sığma oranını azaltır.
Yukarıdaki kodumuzda küçülme işlemi şu şekilde uygulanır:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions