- Nəzarətli, nəzarətsiz və möhkəmləndirici öyrənməni fərqləndirmək, əlamət və etiket anlayışlarını izah etmək
- MSE və çarpaz entropiya itkilərini əl ilə və NumPy ilə hesablamaq
- Qradiyent enişi ilə xətti reqressiya modelini öyrətmək və öyrənmə sürətinin təsirini izah etmək
- Öyrədici və validasiya itkilərinə baxaraq həddən artıq və zəif uyğunlaşmanı aşkar etmək
Təsəvvür et ki, Bakıda mənzilin qiymətini onun sahəsinə, otaq sayına və rayonuna görə proqnozlaşdıran proqram yazmalısan. Bütün qaydaları əl ilə yazmaq mümkün deyil: «əgər Nəsimi rayonudursa və sahə 80 m²-dən böyükdürsə...» kimi şərtlərin sonu görünmür. Maşın öyrənməsi başqa yol təklif edir: kompüterə satılmış mənzillərin minlərlə nümunəsini veririk, o isə qaydanı verilənlərdən özü öyrənir. Bu dərs bütün modulun, yəni neyron şəbəkələrin, CNN-lərin və transformerlərin riyazi bünövrəsidir.
Proqramın hansısa tapşırıqdakı nəticəsi (ölçülən keyfiyyəti) təcrübə — yəni verilənlər — artdıqca yaxşılaşırsa, deyirik ki, proqram öyrənir. Model parametrləri olan funksiyadır, öyrənmə isə bu parametrlərin verilənlərə görə seçilməsidir.
Öyrənmənin növləri, əlamətlər və etiketlər
Hər nümunə əlamətlər (features) vektoru x ilə təsvir olunur: mənzil üçün sahə, otaq sayı, mərtəbə. Proqnozlaşdırmaq istədiyimiz kəmiyyət etiketdir (label) y: qiymət. n nümunə və d əlamət olanda verilənlər n × d ölçülü X matrisi və uzunluğu n olan y vektoru kimi saxlanılır. Etiket ədəddirsə, tapşırıq reqressiya, sinifdirsə (spam / spam deyil) — təsnifat adlanır.
| Növ | Verilənlər | Məqsəd | Nümunə |
|---|---|---|---|
| Nəzarətli öyrənmə (supervised) | (x, y) cütləri | yeni x üçün y-i proqnozlaşdırmaq | mənzilin qiyməti, spam filtri, rentgen şəklində xəstəliyin tapılması |
| Nəzarətsiz öyrənmə (unsupervised) | yalnız x, etiket yoxdur | verilənlərdəki quruluşu tapmaq | müştəriləri qruplara bölmək (klasterləşdirmə), ölçünün azaldılması |
| Möhkəmləndirici öyrənmə (reinforcement) | mühitlə qarşılıqlı təsir və mükafatlar | ümumi mükafatı maksimuma çatdırmaq | oyun oynayan agent, yeriməyi öyrənən robot |
Verilənlərin bölünməsi: öyrədici, validasiya və test dəstləri
Modelin əsl yoxlaması onun görmədiyi verilənlərdir. Buna görə verilənləri təsadüfi qarışdırıb üç hissəyə bölürük (tipik nisbət 70/15/15 və ya 80/10/10):
- Öyrədici dəst (training set) — parametrlər yalnız bunun üzərində öyrədilir.
- Validasiya dəsti — hiperparametrləri (öyrənmə sürəti, modelin ölçüsü) seçmək və öyrənməni vaxtında dayandırmaq üçün.
- Test dəsti — ən sonda, bir dəfə: modelin real dünyadakı keyfiyyətinin qərəzsiz qiymətləndirilməsi.
import numpy as np
rng = np.random.default_rng(42)
idx = rng.permutation(10)
train, val, test = idx[:6], idx[6:8], idx[8:]
print('train:', train)
print('val: ', val)
print('test: ', test)▸ Gözlənilən nəticə
train: [5 6 0 7 3 2] val: [4 9] test: [1 8]
İtki funksiyaları
Modelin nə qədər səhv etdiyini bir ədədlə ölçmək lazımdır — bu ədədi itki funksiyası L verir. Öyrənmə itkini minimuma endirən parametrləri axtarmaqdır. Reqressiyada adətən orta kvadratik xəta, təsnifatda isə çarpaz entropiya işlədilir.
- nnümunələrin sayı
- yᵢi-ci nümunənin həqiqi qiyməti (etiket)
- ŷᵢmodelin proqnozu
Orta kvadratik xəta (mean squared error). Kvadrata yüksəltmə böyük səhvləri daha ağır cəzalandırır; vahidi etiketin vahidinin kvadratıdır.
- Ksiniflərin sayı
- yₖk sinfi düzgündürsə 1, əks halda 0 (one-hot)
- pₖmodelin k sinfinə verdiyi ehtimal
- pₜdüzgün sinfin ehtimalı
Çarpaz entropiya (cross-entropy). İki sinif üçün: BCE = −[y · ln p + (1 − y) · ln(1 − p)]. Düzgün sinfin ehtimalı 1-ə yaxınlaşdıqca itki 0-a yaxınlaşır.
a) Həqiqi qiymətlər y = (3; 5; 2,5), proqnozlar ŷ = (2,5; 5; 3,5). MSE-ni tap.
b) Şəkil təsnifatçısı «pişik, it, quş» sinifləri üçün p = (0,7; 0,2; 0,1) ehtimallarını verib. Şəkildə pişik olduqda və quş olduqda çarpaz entropiyanı tap.
Həllini göstərHəllini gizlət
MSE = 1,25 / 3 ≈ 0,4167.
b) Pişik: CE = −ln 0,7 ≈ 0,357 — model əmin idi və haqlı çıxdı, itki kiçikdir.
Quş: CE = −ln 0,1 ≈ 2,303 — düzgün sinfə cəmi 10% verilib, itki 6 dəfədən çox böyükdür.
import numpy as np
y = np.array([3.0, 5.0, 2.5])
y_hat = np.array([2.5, 5.0, 3.5])
mse = np.mean((y - y_hat) ** 2)
print(f'MSE = {mse:.4f}')
p = np.array([0.7, 0.2, 0.1])
print(f'CE (true class 0) = {-np.log(p[0]):.4f}')
print(f'CE (true class 2) = {-np.log(p[2]):.4f}')▸ Gözlənilən nəticə
MSE = 0.4167 CE (true class 0) = 0.3567 CE (true class 2) = 2.3026
Qradiyent enişi və öyrənmə sürəti
Dumanlı dağda aşağı enmək istədiyini təsəvvür et: ətrafı görmürsən, amma ayağının altındakı yamacı hiss edirsən. Ən dik eniş istiqamətində kiçik addım atırsan və bunu təkrarlayırsan. Qradiyent ∇L itkinin ən sürətlə artdığı istiqaməti göstərir, deməli, onun əksinə getmək lazımdır. Addımın uzunluğunu öyrənmə sürəti η müəyyən edir.
- θmodelin bütün parametrləri (çəkilər və sürüşmələr)
- ηöyrənmə sürəti, adətən 0,0001–0,1
- ∇L(θ)itkinin hər parametrə görə xüsusi törəmələrindən ibarət qradiyent vektoru
Qradiyent enişinin yeniləmə qaydası. Hər təkrar bir addımdır; bütün öyrədici dəstdən bir dəfə keçməyə epoxa deyilir.
Xətti reqressiyada ŷᵢ = w · xᵢ + b və L = MSE-dir. Zəncir qaydası ilə törəmə alsaq, (ŷᵢ − yᵢ)² ifadəsinin w-yə görə törəməsi 2(ŷᵢ − yᵢ) · xᵢ, b-yə görə isə 2(ŷᵢ − yᵢ) olur. Bütün nümunələr üzrə orta qiymət götürürük:
- w, bxəttin bucaq əmsalı (çəki) və sərbəst həddi (sürüşmə)
- ŷᵢ − yᵢi-ci nümunədə səhv
Model ŷ = w · x, yeganə nümunə (x = 2, y = 6), başlanğıc w = 1, L = (ŷ − y)². η = 0,1 və η = 0,3 üçün bir addım at və yeni itkini tap.
Həllini göstərHəllini gizlət
dL/dw = 2(ŷ − y) · x = 2 · (−4) · 2 = −16.
η = 0,1: w = 1 − 0,1 · (−16) = 2,6; ŷ = 5,2; L = 0,64 — itki 25 dəfə azaldı.
η = 0,3: w = 1 + 4,8 = 5,8; ŷ = 11,6; L = 31,36 — minimumun (w = 3) üstündən tullandıq və itki artdı!
Burada L(w) = 4(w − 3)², ikinci törəmə 8-dir; kvadratik itki üçün eniş yalnız η < 2/8 = 0,25 olanda yığılır.
İndi eyni ideyanı 50 nöqtəli sintetik verilənlərə tətbiq edək. Verilənlər y = 3x + 4 düzxəttindən küy əlavə etməklə yaradılıb; model w və b-ni heç nə bilmədən, sıfırdan başlayaraq tapmalıdır. Kodu işə sal — itki qrafiki avtomatik göstəriləcək.
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(42)
x = rng.uniform(0, 5, size=50)
y = 3 * x + 4 + rng.normal(0, 1, size=50)
w, b, lr = 0.0, 0.0, 0.05
losses = []
for epoch in range(500):
error = (w * x + b) - y
losses.append(np.mean(error ** 2))
dw = 2 * np.mean(error * x)
db = 2 * np.mean(error)
w -= lr * dw
b -= lr * db
if epoch % 100 == 0:
print(f'epoch {epoch:3d} loss {losses[-1]:.4f}')
print(f'w = {w:.3f}, b = {b:.3f}')
plt.plot(losses)
plt.yscale('log')
plt.xlabel('epoch')
plt.ylabel('MSE loss')
plt.show()▸ Gözlənilən nəticə
epoch 0 loss 158.9249 epoch 100 loss 0.6019 epoch 200 loss 0.5740 epoch 300 loss 0.5735 epoch 400 loss 0.5735 w = 3.024, b = 3.769
Praktikada qradiyent hər addımda bütün verilənlər üzrə deyil, B ölçülü kiçik paket (mini-batch, məsələn, B = 32) üzrə hesablanır. Buna stoxastik qradiyent enişi (SGD) deyilir: addımlar daha küylü, amma çox ucuzdur, küy isə bəzən pis lokal minimumlardan çıxmağa kömək edir.
Həddən artıq uyğunlaşma, zəif uyğunlaşma və sistematik xəta–dispersiya
Çox sadə model verilənlərdəki qanunauyğunluğu tuta bilmir — bu zəif uyğunlaşmadır (underfitting). Çox mürəkkəb model isə qanunauyğunluqla birlikdə təsadüfi küyü də əzbərləyir: öyrədici dəstdə səhvi demək olar ki, sıfırdır, yeni verilənlərdə isə böyükdür — bu həddən artıq uyğunlaşmadır (overfitting). Aşağıdakı kodda sin(2πx) funksiyasından 15 küylü nöqtəyə müxtəlif dərəcəli çoxhədlilər uyğunlaşdırılır:
import numpy as np
from numpy.polynomial import Polynomial
rng = np.random.default_rng(1)
x_train = np.sort(rng.uniform(0, 1, 15))
x_val = np.sort(rng.uniform(0, 1, 15))
f = lambda x: np.sin(2 * np.pi * x)
y_train = f(x_train) + rng.normal(0, 0.2, 15)
y_val = f(x_val) + rng.normal(0, 0.2, 15)
for deg in [1, 3, 9, 12]:
model = Polynomial.fit(x_train, y_train, deg)
train_mse = np.mean((model(x_train) - y_train) ** 2)
val_mse = np.mean((model(x_val) - y_val) ** 2)
print(f'degree {deg:2d}: train {train_mse:.3f}, validation {val_mse:.3f}')▸ Gözlənilən nəticə
degree 1: train 0.264, validation 0.235 degree 3: train 0.032, validation 0.037 degree 9: train 0.008, validation 1.894 degree 12: train 0.005, validation 67.532
- f̂(x)təsadüfi öyrədici dəstdən öyrədilmiş modelin proqnozu
- Biassistematik xəta: modelin çox sadə fərziyyələrindən yaranan orta səhv
- Vardispersiya: proqnozun konkret öyrədici dəstdən nə qədər asılı olduğu
- σ²verilənlərdəki aradan qaldırılmayan küy
MSE üçün sistematik xəta–dispersiya ayrılışı. Model mürəkkəbləşdikcə sistematik xəta azalır, dispersiya artır; ən yaxşı model cəmi minimuma endirir.
| Öyrədici itki | Validasiya itkisi | Diaqnoz | Nə etməli |
|---|---|---|---|
| böyük | böyük | zəif uyğunlaşma (böyük sistematik xəta) | daha böyük model, yeni əlamətlər, daha uzun öyrətmə |
| kiçik | xeyli böyük | həddən artıq uyğunlaşma (böyük dispersiya) | daha çox verilən, requlyarlaşdırma, erkən dayandırma, sadə model |
| kiçik | ona yaxın | yaxşı uyğunlaşma | test dəstində bir dəfə yoxla |
- λrequlyarlaşdırma gücü (hiperparametr, validasiya ilə seçilir)
- ∑ⱼ θⱼ²çəkilərin kvadratları cəmi — böyük çəkiləri cəzalandırır
L2 requlyarlaşdırma (weight decay): model daha «hamar» funksiyalar seçir və küyü əzbərləməyə daha az meyl edir.
Əsas fikirlər
- Nəzarətli öyrənmə (x, y) cütlərindən öyrənir; etiket ədəddirsə reqressiya, sinifdirsə təsnifatdır.
- Öyrədici dəst parametrlər, validasiya dəsti hiperparametrlər üçündür; test dəstinə yalnız ən sonda baxılır.
- Reqressiyada MSE = (1/n)∑(y − ŷ)², təsnifatda çarpaz entropiya CE = −ln pₜ işlədilir.
- Qradiyent enişi: θ ← θ − η · ∇L; η çox böyük olanda itki artır, çox kiçik olanda öyrənmə ləngiyir.
- Öyrədici itki kiçik, validasiya itkisi böyükdürsə — həddən artıq uyğunlaşma; hər ikisi böyükdürsə — zəif uyğunlaşma.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.