Jeśli twój model AI nie uczy się, najczęściej winna jest jedna z kilku dobrze znanych przyczyn: złe dane, źle dobrany learning rate, przeuczenie albo niedouczenie, błędna architektura sieci lub po prostu błąd w kodzie, który sprawia, że gradienty w ogóle nie płyną. W tym artykule omawiam 7 najczęstszych problemów z uczeniem modelu AI, pokazuję jak je zdiagnozować i jak je szybko naprawić. Bez teorii dla samej teorii, tylko to, co faktycznie blokuje trening.
Skąd wiadomo, że model AI nie uczy się?
Zanim zaczniesz szukać błędu, upewnij się, że właściwie go widzisz. Klasyczne objawy to:
- Loss nie spada przez wiele epok albo spada jedną epoką, po czym plateau.
- Accuracy stoi w miejscu, często na poziomie odpowiadającym losowemu zgadywaniu (np. 10% przy 10 klasach).
- Loss oscyluje gwałtownie w górę i w dół bez wyraźnego trendu.
- Validation loss rośnie, podczas gdy training loss maleje (klasyczne przeuczenie).
Każdy z tych symptomów wskazuje na inną przyczynę. Poniżej znajdziesz mapę od objawu do rozwiązania.
Błąd 1: Złe dane wejściowe i problemy z ich przygotowaniem
To najczęstszy powód, dla którego model nie poprawia accuracy. Algorytmy uczenia maszynowego uczą się wzorców ze danych, więc jeśli dane są błędne, model nauczy się błędnych wzorców albo nie nauczy się niczego.
Najczęstsze problemy z danymi
- Brak normalizacji lub standaryzacji. Sieci neuronowe są wrażliwe na skalę cech. Jeśli jedna cecha ma wartości w zakresie 0,0001, a inna w zakresie 100 000, optymalizator będzie miał poważne kłopoty. Normalizuj dane do zakresu [0, 1] lub standaryzuj (mean=0, std=1) przed treningiem.
- Niesbalansowane klasy. Gdy 95% przykładów należy do jednej klasy, model może osiągnąć 95% accuracy, nie ucząc się niczego poza predykcją klasy dominującej. Sprawdź rozkład klas i zastosuj oversampling (SMOTE), undersampling lub class weights.
- Wyciek danych (data leakage). Gdy dane testowe "przesączają się" do treningu, accuracy na zbiorze testowym będzie sztucznie zawyżona, ale model nie uogólni się na nowe dane.
- Błędne etykiety. Nawet 5-10% błędnych etykiet potrafi znacznie spowolnić uczenie. Narzędzie cleanlab (open source) pomaga automatycznie wykrywać potencjalnie błędne etykiety w zbiorze.
Reguła praktyczna: zanim zaczniesz tunować hiperparametry, sprawdź 50-100 losowych przykładów ze zbioru treningowego i walidacyjnego ręcznie. To często wystarczy, żeby znaleźć oczywiste błędy.
Błąd 2: Zły learning rate
Learning rate to jeden z najważniejszych hiperparametrów w machine learning. Zbyt duży powoduje, że optymalizator "przeskakuje" nad minimum i loss oscyluje lub rośnie. Zbyt mały sprawia, że uczenie jest tak wolne, że wydaje się, iż model w ogóle się nie uczy.
Jak dobrać learning rate?
Najskuteczniejszą metodą jest learning rate range test (popularyzowany przez Lesliego Smitha). Trenujesz model przez kilka iteracji, zwiększając learning rate logarytmicznie od bardzo małej wartości (np. 1e-7) do dużej (np. 1). Potem rysujesz wykres loss vs. learning rate i wybierasz wartość tuż przed miejscem, gdzie loss zaczyna rosnąć.
W PyTorchu możesz do tego użyć biblioteki torch-lr-finder. W Keras/TensorFlow analogiczną funkcjonalność oferuje callback LearningRateFinder z ekosystemu TensorFlow Addons.
Typowe wartości startowe:
- Sieci konwolucyjne (CNN): 1e-3 do 1e-4
- Transformery: 1e-4 do 5e-5 (z warmupem)
- Modele liniowe: 0,01 do 0,1
Rozważ też learning rate scheduler: cosine annealing lub ReduceLROnPlateau (zmniejsza LR, gdy validation loss przestaje spadać).
Błąd 3: Przeuczenie i niedouczenie
Błędy w machine learning często sprowadzają się do klasycznego dylematu bias-variance. Zbyt prosty model (high bias) nie ma wystarczającej pojemności, żeby nauczyć się wzorców. Zbyt złożony (high variance) zapamiętuje dane treningowe zamiast się uogólniać.
Diagnoza
| Objaw | Możliwa przyczyna |
|---|---|
| Training accuracy wysoka, validation niska | Przeuczenie (overfitting) |
| Obie niskie i zbliżone | Niedouczenie (underfitting) |
| Duże wahania validation accuracy | Zbyt duży LR lub zbyt mała batchsize |
Jak walczyć z przeuczeniem?
- Dropout: wyłączaj losowo neurony podczas treningu (np. p=0.3-0.5 w warstwach Dense).
- L2 regularyzacja (weight decay): dodaje karę za duże wagi; w PyTorchu parametr
weight_decayw optymalizatorze. - Data augmentation: sztucznie powiększaj zbiór treningowy (obroty, przycięcia, zmiany jasności dla obrazów; masking, random swap dla tekstu).
- Early stopping: zatrzymuj trening, gdy validation loss przestaje maleć przez N epok. Keras ma gotowy callback
EarlyStopping.
Jak walczyć z niedouczeniem?
- Zwiększ pojemność modelu (więcej warstw, więcej neuronów).
- Trenuj dłużej (więcej epok).
- Zmniejsz regularyzację.
- Upewnij się, że learning rate nie jest zbyt mały.
Błąd 4: Błędy w architekturze modelu i inicjalizacji wag
Zdarza się, że model AI nie uczy się przez błąd w samej definicji sieci. To jeden z trudniejszych do wykrycia problemów z uczeniem modelu AI, bo kod kompiluje się bez błędów, ale model nie robi tego, co powinien.
Zanikające i eksplodujące gradienty
W głębokich sieciach neuronowych gradienty mogą zanikać (stają się bliskie zeru) lub eksplodować (rosną do nieskończoności) podczas backpropagacji. Objawy:
- Parametry modelu prawie się nie zmieniają pomimo kilkudziesięciu epok (zanikające gradienty).
- Loss staje się
NaNjuż po kilku iteracjach (eksplodujące gradienty).
Rozwiązania:
- Używaj funkcji aktywacji ReLU (lub Leaky ReLU, GELU) zamiast sigmoid/tanh w ukrytych warstwach.
- Stosuj Batch Normalization lub Layer Normalization między warstwami.
- Inicjalizuj wagi metodą He (dla ReLU) lub Xavier/Glorot (dla sigmoid/tanh). W PyTorchu domyślna inicjalizacja warstw liniowych to Kaiming Uniform, co jest zazwyczaj poprawne.
- Użyj gradient clipping:
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0).
Błędna funkcja straty
Dobór funkcji straty do zadania to podstawa. Częste błędy:
- Użycie
MSEdo klasyfikacji wieloklasowej zamiastCrossEntropyLoss. - Użycie
BCELossbez wcześniejszego sigmoid, podczas gdy model zwraca logity. - Zapomnienie o
softmaxw ostatniej warstwie przy klasyfikacji (choćCrossEntropyLossw PyTorchu stosuje go wewnętrznie, więc dodanie go ręcznie to błąd).
Błąd 5: Problemy z pipeline'em danych i DataLoaderem
Zaskakująco często model AI nie uczy się przez błąd nie w samym modelu, ale w sposobie dostarczania danych. To szczególnie częste u osób, które dopiero zaczynają pracę z PyTorchem lub TensorFlow.
Co sprawdzić?
- Przetasowanie (shuffle): upewnij się, że dane treningowe są przetasowywane w każdej epoce (
shuffle=Truew DataLoaderze). Brak przetasowania może sprawić, że model przez kilka epok widzi tylko jedną klasę. - Transformacje stosowane na zbiorze testowym. Jeśli do treningu stosujesz augmentację i normalizację, do testu/walidacji powinna trafić tylko normalizacja. Augmentacja na zbiorze testowym zaburza metryki.
- Batch size. Bardzo mały batch size (np. 1-4) powoduje bardzo zaszumione gradienty. Bardzo duży może pogorszyć uogólnianie. Typowy zakres to 32-256 w zależności od zadania.
- Wycieki transformacji. Jeśli wyliczasz mean i std do normalizacji na całym zbiorze (łącznie z testowym), wprowadzasz subtelny data leakage. Statystyki normalizacji zawsze licz tylko na zbiorze treningowym.
Szybki test diagnostyczny: podaj modelowi jeden batch danych treningowych i sprawdź, czy loss maleje przez kilkadziesiąt kroków tylko na tym jednym batchu (overfitting do jednego batcha). Jeśli model nie jest w stanie zapamiętać jednego batcha, błąd leży w architekturze lub w przepływie gradientów.
Błąd 6: Nieodpowiedni optymalizator i jego konfiguracja
Wybór optymalizatora ma znaczenie, ale błędy w jego konfiguracji mają znaczenie jeszcze większe.
Najpopularniejsze optymalizatory i kiedy je stosować
- SGD z momentum: dobry do trenowania dużych CNN od zera (np. ResNet na ImageNet). Wymaga staranniejszego doboru LR.
- Adam: domyślny wybór dla większości zadań. Adaptuje learning rate dla każdego parametru. Parametry domyślne (
lr=1e-3, betas=(0.9, 0.999), eps=1e-8) działają dobrze w większości przypadków. - AdamW: wariant Adama z poprawioną regularyzacją L2 (weight decay). Zalecany przy fine-tuningu transformerów (BERT, GPT).
- Lion: nowszy optymalizator od Google Brain (2023), bywa szybszy od AdamW przy podobnych wynikach.
Częsty błąd: stosowanie Adama z bardzo dużym weight decay (np. 0.1). Prowadzi to do nadmiernej regularyzacji i niedouczenia. Bezpieczny zakres to 0.01-0.001.
Błąd 7: Błędy w metrykach, nie w modelu
Czasem model AI pozornie nie uczy się, bo... źle mierzysz jego postępy. To zaskakująco częsty scenariusz, szczególnie przy niesbalansowanych zbiorach danych.
Pułapki metryk
- Accuracy przy niesbalansowanych klasach to zła metryka. Użyj zamiast niej F1-score, AUC-ROC lub precision/recall.
- Liczenie metryk na całym zbiorze naraz vs. uśrednianie po batchach. Uśrednianie accuracy po batchach różnej wielkości daje błędny wynik.
- Confusion matrix: wydrukuj ją po każdej epoce walidacji. Często od razu widać, które klasy model myli i czy predykcje są "zróżnicowane" czy model zawsze wskazuje tę samą klasę.
- Loss vs. metryka: loss może maleć, a accuracy stać w miejscu (szczególnie przy imbalanced data). Obie mierzą różne rzeczy.
Narzędzia, które warto znać: scikit-learn (classification_report, confusion_matrix), Weights and Biases (W&B) do śledzenia eksperymentów, MLflow jako alternatywa open source.
Chcesz zrozumieć AI od podstaw, żeby samodzielnie diagnozować takie problemy?
Jeśli chcesz naprawdę rozumieć, dlaczego model AI nie uczy się i jak działa uczenie maszynowe od środka, kurs Sztuczna Inteligencja: Jak Działa AI od Środka na platformie VITA przeprowadzi Cię przez mechanizmy stojące za sieciami neuronowymi, gradientami i optymalizacją. Bez czarnych skrzynek, z prawdziwym rozumieniem.
Kurs jest częścią abonamentu VITA. Możesz go przetestować przez 3 dni pełnego dostępu za 0 zł (karta wymagana; potem 79 zł/mies. albo 590 zł/rok, anulujesz jednym kliknięciem przed końcem okresu próbnego). Jeśli zdasz egzamin końcowy w trakcie okresu próbnego i zdecydujesz się zostać, certyfikat zostanie wydany po pierwszej płatności.
Zacznij 3-dniowy okres próbny na vita.edu.pl/abonament
Szybka lista kontrolna: co sprawdzić, gdy model się nie uczy?
Poniżej znajdziesz skondensowaną checklistę diagnostyczną. Idź od góry do dołu, bo problemy z danymi są częstsze niż problemy z architekturą.
- Sprawdź 50-100 losowych przykładów z danych treningowych ręcznie.
- Upewnij się, że dane są znormalizowane i klasy nie są skrajnie niesbalansowane.
- Zrób test "overfitting do jednego batcha": model powinien zejść do loss bliskiego zera na 1 batchu.
- Sprawdź learning rate (learning rate range test lub zacznij od 1e-3 dla Adama).
- Wydrukuj gradienty po pierwszym kroku: czy są skończone i niezerowe?
- Sprawdź funkcję straty: czy pasuje do zadania i do formatu wyjścia modelu?
- Wydrukuj confusion matrix po pierwszej epoce walidacji.
- Sprawdź, czy dane treningowe są tasowane w każdej epoce.
- Użyj early stopping i śledź zarówno training, jak i validation loss.
- Zaloguj eksperymenty (W&B, MLflow) zamiast porównywać wyniki z pamięci.
Większość problemów z uczeniem modelu AI można zlokalizować w ciągu 30-60 minut, jeśli podejdziesz do tego systematycznie. Klucz to diagnostyka krok po kroku, nie losowe zmiany hiperparametrów.