18-bo‘lim

Neyron tarmoqlar asoslari

Perseptron, ko'p qatlamli tarmoq, faollashtirish funksiyalari, teskari tarqalish va chuqur o'qitishga kirish.

🕑 15 daqiqa o‘qish 📄 1 054 so‘z 👁 6 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Sun'iy neyron
  2. Nima uchun ko'p qatlam kerak?
  3. Ko'p qatlamli tarmoq
  4. Faollashtirish funksiyalari
  5. Teskari tarqalish
  6. Amaliy misol
  7. Muhim parametrlar
  8. O'qitish jarayonini kuzatish
  9. Regressiya uchun
  10. Muammolar va yechimlar
  11. Neyron tarmoq qachon kerak?
  12. Chuqur o'qitishga o'tish
  13. Xulosa

Neyron tarmoqlar - zamonaviy sun'iy intellektning asosi. Ular ovozni tanish, tarjima va rasm yaratishning ortida turadi.

Sun'iy neyron #

Bitta neyron nima qiladi? x₁ x₂ x₃ w₁ w₂ w₃ Σ + b Faollashtirish ReLU, sigmoid... y y = f(w₁x₁ + w₂x₂ + w₃x₃ + b) Bu logistik regressiyaning aynan o'zi
Bitta neyron - vaznli yig'indi va faollashtirish funksiyasi
Python
import numpy as np

def neyron(kirishlar, vaznlar, siljish):
    yigindi = np.dot(kirishlar, vaznlar) + siljish
    return 1 / (1 + np.exp(-yigindi))     # sigmoid


kirishlar = np.array([0.5, 0.3, 0.8])
vaznlar   = np.array([0.4, -0.2, 0.7])
siljish   = 0.1

print(f"Chiqish: {neyron(kirishlar, vaznlar, siljish):.4f}")
Natija
Chiqish: 0.6900
Bitta neyron - logistik regressiya

Formulani solishtiring:

Natija
Logistik regressiya:  y = sigmoid(w·x + b)
Bitta neyron:         y = f(w·x + b)

Ular bir xil. Kuch neyronlarni ko'p qatlamda birlashtirishdan paydo bo'ladi.

Nima uchun ko'p qatlam kerak? #

Bitta neyron faqat chiziqli chegara chiza oladi. Klassik misol - XOR masalasi:

x1x2XOR
000
011
101
110
Python
from sklearn.linear_model import LogisticRegression

X_xor = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_xor = np.array([0, 1, 1, 0])

model = LogisticRegression().fit(X_xor, y_xor)
print(f"Chiziqli model aniqligi: {model.score(X_xor, y_xor):.2f}")
Natija
Chiziqli model aniqligi: 0.50

50% - tasodifdan yaxshi emas.

Python
from sklearn.neural_network import MLPClassifier

tarmoq = MLPClassifier(
    hidden_layer_sizes=(4,),
    activation="relu",
    max_iter=5000,
    random_state=42,
)
tarmoq.fit(X_xor, y_xor)
print(f"Neyron tarmoq aniqligi: {tarmoq.score(X_xor, y_xor):.2f}")
Natija
Neyron tarmoq aniqligi: 1.00
Yashirin qatlam nima qiladi?

U ma'lumotni yangi fazoga ko'chiradi, u yerda sinflar chiziqli ajraladi.

Bu SVM ning yadro hiylasiga o'xshaydi - lekin bu yerda almashtirish o'rganiladi, oldindan tanlanmaydi.

Ko'p qatlamli tarmoq #

Ko'p qatlamli perseptron (MLP) Kirish Yashirin 1 Yashirin 2 Chiqish Har bir bog'lanish - o'rganiladigan vazn. Bu tarmoqda 20+15+6 = 41 ta vazn
Har bir qatlam oldingisining chiqishini kirish sifatida oladi

Faollashtirish funksiyalari #

Asosiy faollashtirish funksiyalari ReLU max(0, x) Standart tanlov Tez, oddiy, samarali Sigmoid 1/(1+e^-x) Ikkilik chiqish uchun Yashirin qatlamda ishlatmang Tanh tanh(x) Markazi nolda Sigmoid dan yaxshiroq
ReLU zamonaviy tarmoqlarda deyarli har doim ishlatiladi
Faollashtirish funksiyasisiz tarmoq foydasiz

Agar faollashtirish bo'lmasa:

Natija
qatlam2(qatlam1(x)) = W2·(W1·x + b1) + b2 = (W2·W1)·x + (W2·b1 + b2)

Bu yana bitta chiziqli funksiya. 100 qatlam ham bitta qatlamga teng bo'lardi.

Chiziqsizlik - neyron tarmoqning butun kuchi.

FunksiyaChiqish oralig'iQachon
relu[0, ∞)Yashirin qatlamlar (standart)
tanh[-1, 1]RNN, kichik tarmoqlar
logistic[0, 1]Ikkilik chiqish qatlami
softmaxYig'indisi 1Ko'p sinfli chiqish qatlami
identity(-∞, ∞)Regressiya chiqish qatlami

Teskari tarqalish #

Tarmoq qanday o'rganadi?

O'qitish tsikli 1. Oldinga bashorat hisoblanadi 2. Xato haqiqat bilan solishtirish 3. Teskari tarqalish har bir vaznning hissasi 4. Yangilash vaznlar tuzatiladi Minglab marta takrorlanadi (epoxalar) Teskari tarqalish - zanjir qoidasi bilan hosilalarni hisoblash
Har bir vazn xatoga qanchalik hissa qo'shganiga qarab tuzatiladi

Amaliy misol #

Python
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.neural_network import MLPClassifier

raqamlar = load_digits()
X, y = raqamlar.data, raqamlar.target

print(f"Namunalar: {X.shape[0]}, belgilar: {X.shape[1]}")
print(f"Sinflar: {np.unique(y)}")
Natija
Namunalar: 1797, belgilar: 64
Sinflar: [0 1 2 3 4 5 6 7 8 9]
Python
X_o, X_s, y_o, y_s = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

tarmoq = make_pipeline(
    StandardScaler(),
    MLPClassifier(
        hidden_layer_sizes=(128, 64),
        activation="relu",
        solver="adam",
        alpha=0.001,
        learning_rate_init=0.001,
        max_iter=500,
        early_stopping=True,
        validation_fraction=0.1,
        n_iter_no_change=15,
        random_state=42,
    ),
)
tarmoq.fit(X_o, y_o)

print(f"O'qitish: {tarmoq.score(X_o, y_o):.3f}")
print(f"Sinov:    {tarmoq.score(X_s, y_s):.3f}")
Natija
O'qitish: 1.000
Sinov:    0.978

Muhim parametrlar #

ParametrMa'nosi
hidden_layer_sizesQatlamlar va ulardagi neyronlar: (128, 64)
activationFaollashtirish: relu (standart)
solverOptimizator: adam (standart), sgd, lbfgs
alphaL2 regularizatsiya kuchi
learning_rate_initO'qitish tezligi
batch_sizeBir qadamda nechta namuna
max_iterMaksimal epoxalar
early_stoppingYaxshilanish to'xtasa - to'xtash
Arxitekturani tanlash
  1. Bitta yashirin qatlamdan boshlang
  2. Neyronlar soni: kirish va chiqish orasida
  3. Yetarli bo'lmasa - qatlam qo'shing
  4. Odatiy naqsh: qatlamlar torayib boradi (128, 64, 32)

Jadval ma'lumotida 2-3 qatlam odatda yetarli. Chuqurroq tarmoqlar rasm va matn uchun kerak.

O'qitish jarayonini kuzatish #

Python
import matplotlib.pyplot as plt

model = tarmoq.named_steps["mlpclassifier"]

plt.figure(figsize=(9, 5))
plt.plot(model.loss_curve_, label="O'qitish xatosi")
if hasattr(model, "validation_scores_"):
    plt.plot(model.validation_scores_, label="Validatsiya aniqligi")
plt.xlabel("Epoxa")
plt.legend()
plt.grid(alpha=0.3)
plt.show()

print(f"Epoxalar: {model.n_iter_}")
print(f"Yakuniy xato: {model.loss_:.5f}")
O'qitish jarayonini o'qish Epoxa Xato o'qitish xatosi validatsiya xatosi to'xtash nuqtasi ikkalasi ham tushmoqda validatsiya o'sa boshladi = qayta o'qitish
early_stopping aynan shu nuqtada o'qitishni to'xtatadi
early_stopping=True ni yoqing

Bu parametr validatsiya natijasi yaxshilanishdan to'xtaganda o'qitishni to'xtatadi.

Natijada:

  • Qayta o'qitish oldini olinadi
  • Vaqt tejaladi
  • max_iter ni katta qo'yish xavfsiz bo'ladi

Regressiya uchun #

Python
from sklearn.neural_network import MLPRegressor

model = make_pipeline(
    StandardScaler(),
    MLPRegressor(
        hidden_layer_sizes=(64, 32),
        max_iter=1000,
        early_stopping=True,
        random_state=42,
    ),
)
Regressiyada nishonni ham masshtablang
Python
from sklearn.compose import TransformedTargetRegressor

model = TransformedTargetRegressor(
    regressor=make_pipeline(StandardScaler(), MLPRegressor(...)),
    transformer=StandardScaler(),
)

Nishon 0-1000000 oralig'ida bo'lsa, gradientlar juda katta bo'lib o'qitish buziladi.

Muammolar va yechimlar #

Umumiy muammolar
MuammoBelgiYechim
O'qimaydiXato tushmayaptiMasshtablang, learning_rate ni oshiring
SakraydiXato u yoqdan bu yoqqalearning_rate ni kamaytiring
NaN chiqadiXato cheksizlikka ketdilearning_rate ni juda kamaytiring
Qayta o'qishO'qitish a'lo, sinov yomonalpha ni oshiring, early_stopping
Juda sekinSoatlab o'qiydiKichikroq tarmoq, batch_size ni oshiring
YaqinlashmadiConvergenceWarningmax_iter ni oshiring
Python
# Konvergentsiya ogohlantirishi
tarmoq = MLPClassifier(max_iter=100)
tarmoq.fit(X_o, y_o)
Natija
ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100)
reached and the optimization hasn't converged yet.

Yechim: max_iter ni oshiring va early_stopping=True qo'ying.

Neyron tarmoq qachon kerak? #

KerakKerak emas
Rasm, videoKichik jadval ma'lumoti
Matn, tarjimaTushuntirish muhim bo'lsa
OvozKam ma'lumot (1000 dan kam)
Juda murakkab naqshlarOddiy model yetarli bo'lsa
Katta ma'lumotTez natija kerak bo'lsa
Jadval ma'lumotida boosting ko'pincha ustun
Python
from sklearn.ensemble import HistGradientBoostingClassifier

hgb = HistGradientBoostingClassifier(random_state=42)
hgb.fit(X_o, y_o)
print(f"Boosting:      {hgb.score(X_s, y_s):.3f}")
print(f"Neyron tarmoq: {tarmoq.score(X_s, y_s):.3f}")

Ko'plab tadqiqotlar shuni ko'rsatadi: jadval ma'lumotida gradient boosting neyron tarmoqdan yaxshiroq yoki teng ishlaydi, lekin ancha tezroq o'qiydi va kamroq sozlash talab qiladi.

Neyron tarmoqning ustunligi - tuzilmasiz ma'lumotda (rasm, matn, ovoz).

Chuqur o'qitishga o'tish #

scikit-learn ning MLPClassifier - o'rganish uchun yaxshi, lekin jiddiy loyihalar uchun cheklangan.

Terminal
pip install torch
# yoki
pip install tensorflow
Python
import torch
import torch.nn as nn

class Tarmoq(nn.Module):
    def __init__(self, kirish_olchami, sinflar_soni):
        super().__init__()
        self.qatlamlar = nn.Sequential(
            nn.Linear(kirish_olchami, 128),
            nn.ReLU(),
            nn.Dropout(0.3),
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Dropout(0.3),
            nn.Linear(64, sinflar_soni),
        )

    def forward(self, x):
        return self.qatlamlar(x)


model = Tarmoq(kirish_olchami=64, sinflar_soni=10)
print(model)
Imkoniyatscikit-learnPyTorch / TensorFlow
Oddiy MLPHaHa
GPUYo'qHa
Konvolyutsion (rasm)Yo'qHa
Rekurrent (ketma-ketlik)Yo'qHa
TransformerYo'qHa
O'z arxitekturangizYo'qHa
Chuqur o'qitish arxitekturalari
ArxitekturaNima uchun
CNNRasm, video - fazoviy naqshlar
RNN, LSTMKetma-ketlik, vaqt qatorlari
TransformerMatn, tarjima, katta til modellari
GAN, DiffusionYangi rasm yaratish
AutoencoderSiqish, anomaliya aniqlash

Bu mavzular alohida darslikni talab qiladi.

Amaliy topshiriq
  1. XOR masalasini logistik regressiya bilan yechishga urinib ko'ring.
  2. MLPClassifier bilan yeching - nechta neyron yetarli?
  3. load_digits ma'lumotida tarmoq quring.
  4. hidden_layer_sizes ni (32,), (128,), (128, 64) qilib solishtiring.
  5. loss_curve_ ni chizing.
  6. early_stopping=True va False natijalarini solishtiring.
  7. alpha ni 0.0001 dan 1 gacha o'zgartirib ta'sirini o'lchang.
  8. Masshtablashsiz o'qiting - nima bo'ladi?
  9. HistGradientBoostingClassifier bilan solishtiring - qaysi biri yaxshi?
  10. Noto'g'ri tasniflangan raqamlarni chizib ko'ring.

Xulosa #

  • Bitta neyron - logistik regressiyaning aynan o'zi.
  • Kuch ko'p qatlamli birlashmadan paydo bo'ladi.
  • Faollashtirish funksiyasisiz tarmoq bitta chiziqli qatlamga teng.
  • ReLU - yashirin qatlamlar uchun standart tanlov.
  • Teskari tarqalish har bir vaznning xatoga hissasini hisoblaydi.
  • Masshtablash majburiy - aks holda tarmoq o'qimaydi.
  • early_stopping=True qayta o'qitishdan himoya qiladi va vaqt tejaydi.
  • Jadval ma'lumotida gradient boosting ko'pincha ustun.
  • Neyron tarmoq rasm, matn va ovozda tengsiz.
  • Jiddiy loyihalar uchun PyTorch yoki TensorFlow kerak.

Keyingi bo'limda modelni ishlab chiqarishga chiqarishni ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.