AI-For-Beginners/translations/pl/lessons/3-NeuralNetworks/04-OwnFramework
localizeflow[bot] 33ce0e5757 chore(i18n): sync translations with latest source changes (chunk 1/1, 203 changes) 2026-01-30 01:54:20 +00:00
..
lab chore(i18n): sync translations with latest source changes (chunk 1/1, 203 changes) 2026-01-30 01:54:20 +00:00
OwnFramework.ipynb 🌐 Update translations via Co-op Translator 2025-08-31 14:13:46 +00:00
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 203 changes) 2026-01-30 01:54:20 +00:00

README.md

Wprowadzenie do sieci neuronowych. Wielowarstwowy perceptron

W poprzedniej sekcji poznaliśmy najprostszy model sieci neuronowej - jednowarstwowy perceptron, liniowy model klasyfikacji dla dwóch klas.

W tej sekcji rozszerzymy ten model, tworząc bardziej elastyczne ramy, które pozwolą nam:

  • przeprowadzać klasyfikację wieloklasową oprócz klasyfikacji dwuklasowej,
  • rozwiązywać problemy regresji oprócz klasyfikacji,
  • rozdzielać klasy, które nie są liniowo separowalne.

Dodatkowo stworzymy własne modułowe ramy w Pythonie, które umożliwią konstruowanie różnych architektur sieci neuronowych.

Quiz przed wykładem

Formalizacja uczenia maszynowego

Zacznijmy od formalizacji problemu uczenia maszynowego. Załóżmy, że mamy zbiór danych treningowych X z etykietami Y, i musimy zbudować model f, który będzie generował jak najdokładniejsze przewidywania. Jakość przewidywań mierzymy za pomocą funkcji straty . Często stosowane funkcje straty to:

  • W przypadku problemu regresji, gdy musimy przewidzieć wartość liczbową, możemy użyć błędu absolutnegoi|f(x(i))-y(i)| lub błędu kwadratowegoi(f(x(i))-y(i))2.
  • W przypadku klasyfikacji stosujemy 0-1 loss (który zasadniczo odpowiada dokładności modelu) lub logistyczną funkcję straty.

Dla jednowarstwowego perceptronu funkcja f była zdefiniowana jako funkcja liniowa f(x)=wx+b (gdzie w to macierz wag, x to wektor cech wejściowych, a b to wektor przesunięcia). W przypadku różnych architektur sieci neuronowych funkcja ta może przyjmować bardziej złożoną formę.

W przypadku klasyfikacji często pożądane jest uzyskanie prawdopodobieństw odpowiadających klasom jako wynik sieci. Aby przekształcić dowolne liczby w prawdopodobieństwa (np. znormalizować wynik), często używamy funkcji softmax σ, a funkcja f staje się f(x)=σ(wx+b).

W powyższej definicji f, w i b nazywane są parametrami θ=⟨w,b⟩. Mając zbiór danych ⟨X,Y⟩, możemy obliczyć całkowity błąd dla całego zbioru danych jako funkcję parametrów θ.

Celem treningu sieci neuronowej jest minimalizacja błędu poprzez zmienianie parametrów θ

Optymalizacja metodą gradientu prostego

Istnieje dobrze znana metoda optymalizacji funkcji zwana gradientem prostym. Polega ona na obliczeniu pochodnej (w przypadku wielowymiarowym zwanej gradientem) funkcji straty względem parametrów i zmienianiu parametrów w taki sposób, aby błąd się zmniejszał. Można to sformalizować w następujący sposób:

  • Zainicjalizuj parametry losowymi wartościami w(0), b(0).
  • Powtarzaj następujący krok wiele razy:
    • w(i+1) = w(i)-η∂ℒ/∂w
    • b(i+1) = b(i)-η∂ℒ/∂b

Podczas treningu kroki optymalizacji powinny być obliczane z uwzględnieniem całego zbioru danych (pamiętajmy, że strata jest obliczana jako suma dla wszystkich próbek treningowych). Jednak w praktyce bierzemy małe porcje zbioru danych, zwane minibatchami, i obliczamy gradienty na podstawie podzbioru danych. Ponieważ podzbiór jest wybierany losowo za każdym razem, taka metoda nazywana jest stochastycznym gradientem prostym (SGD).

Wielowarstwowe perceptrony i propagacja wsteczna

Jednowarstwowa sieć, jak widzieliśmy powyżej, jest zdolna do klasyfikacji klas liniowo separowalnych. Aby zbudować bardziej zaawansowany model, możemy połączyć kilka warstw sieci. Matematycznie oznaczałoby to, że funkcja f przyjmie bardziej złożoną formę i będzie obliczana w kilku krokach:

  • z1=w1x+b1
  • z2=w2α(z1)+b2
  • f = σ(z2)

Tutaj α to nieliniowa funkcja aktywacji, σ to funkcja softmax, a parametry θ=<w1,b1,w2,b2>.

Algorytm gradientu prostego pozostanie taki sam, ale obliczanie gradientów będzie bardziej skomplikowane. Zgodnie z regułą różniczkowania łańcuchowego możemy obliczyć pochodne jako:

  • ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2)
  • ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1)

Reguła różniczkowania łańcuchowego jest używana do obliczania pochodnych funkcji straty względem parametrów.

Zauważ, że lewa część wszystkich tych wyrażeń jest taka sama, dzięki czemu możemy efektywnie obliczać pochodne, zaczynając od funkcji straty i przechodząc "wstecz" przez graf obliczeniowy. Dlatego metoda treningu wielowarstwowego perceptronu nazywana jest propagacją wsteczną, lub 'backprop'.

graf obliczeniowy

TODO: cytowanie obrazu

Omówimy propagację wsteczną znacznie bardziej szczegółowo w naszym przykładzie w notebooku.

Podsumowanie

W tej lekcji stworzyliśmy własną bibliotekę sieci neuronowych i użyliśmy jej do prostego zadania klasyfikacji dwuwymiarowej.

🚀 Wyzwanie

W dołączonym notebooku zaimplementujesz własne ramy do budowy i treningu wielowarstwowych perceptronów. Będziesz mógł szczegółowo zobaczyć, jak działają nowoczesne sieci neuronowe.

Przejdź do notebooka OwnFramework i wykonaj zadania.

Quiz po wykładzie

Przegląd i samodzielna nauka

Propagacja wsteczna to powszechny algorytm stosowany w AI i ML, warto go zgłębić.

Zadanie

W tym laboratorium masz za zadanie użyć ram, które stworzyłeś w tej lekcji, do rozwiązania problemu klasyfikacji ręcznie pisanych cyfr MNIST.