Przejdź do treści
← wszystkie przedmioty

Podstawy AI i ML dla inżynierów

Głębokie kompendium techniczne: paradygmaty uczenia maszynowego, bias-wariancja, metodyka walidacji, embeddingi, metryki ewaluacji, architektura transformera i wdrożenia produkcyjne modeli.

TEMATY EGZAMINACYJNE W TYM PRZEDMIOCIE
  • Kompromis bias-wariancja: diagnoza przeuczenia i niedouczenia
  • Poprawna metodyka train/validation/test oraz unikanie data leakage
  • Precision, recall, F1 i AUC: dlaczego accuracy myli przy danych niezbalansowanych
  • Mechanizm attention i powód, dla którego transformery wyparły RNN
  • Jakość danych jako czynnik dominujący nad wyborem architektury modelu
  • Monitoring modeli w produkcji: dryf danych, koszt, opóźnienie

1 · Rodzaje uczenia maszynowego

Uczenie maszynowe dzieli się na trzy paradygmaty według tego, jaki sygnał uczący ma dostęp do modelu: etykiety, strukturę danych bez etykiet, albo nagrodę ze środowiska. Wybór paradygmatu wynika z natury problemu i dostępności danych, nie z mody na konkretny algorytm.

Termin kluczowy
Uczenie nadzorowane (supervised learning) - Model uczy się mapowania wejście → wyjście na podstawie par (X, y), gdzie y to znana etykieta lub wartość docelowa. Obejmuje klasyfikację (kategoria) i regresję (wartość ciągła). Wymaga oznaczonego zbioru danych, co jest zwykle najdroższym elementem projektu ML.
Termin kluczowy
Uczenie nienadzorowane (unsupervised learning) - Model szuka struktury w danych bez etykiet: klasteryzacja (grupowanie podobnych obiektów), redukcja wymiarowości (PCA, t-SNE, UMAP), wykrywanie anomalii. Wynik wymaga interpretacji przez człowieka, algorytm nie wie co to znaczy 'poprawny' klaster.
Termin kluczowy
Uczenie ze wzmocnieniem (reinforcement learning, RL) - Agent podejmuje sekwencję decyzji w środowisku i uczy się na podstawie nagrody (skalarny sygnał zwrotny), a nie etykiety. Cel: maksymalizacja skumulowanej nagrody w czasie. Stosowane tam, gdzie decyzja wpływa na przyszły stan środowiska (robotyka, sterowanie, gry, optymalizacja polityk).
Heurystyka wyboru
Masz etykiety i pytanie 'co to jest / ile to jest' → supervised. Masz dane bez etykiet i pytanie 'jakie tu są grupy / co jest nietypowe' → unsupervised. Masz sekwencję decyzji z opóźnioną nagrodą i wpływem na stan środowiska → RL. Większość projektów przemysłowych (klasyfikacja defektów, prognoza popytu) to supervised, nie dlatego że jest 'lepszy', tylko dlatego że dane mają etykiety.
Klasyfikacja nadzorowana ze stratyfikowanym podziałem python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)
clf = RandomForestClassifier(n_estimators=300, max_depth=8, random_state=42)
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)
Klasteryzacja nienadzorowana python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

X_scaled = StandardScaler().fit_transform(X)
kmeans = KMeans(n_clusters=4, n_init="auto", random_state=42)
labels = kmeans.fit_predict(X_scaled)
Q-learning: agent uczy się z nagrody, nie z etykiety python
import numpy as np
import gymnasium as gym

env = gym.make("FrozenLake-v1", is_slippery=False)
Q = np.zeros((env.observation_space.n, env.action_space.n))
alpha, gamma, epsilon = 0.1, 0.95, 0.1

for episode in range(5000):
    state, _ = env.reset()
    terminated = truncated = False
    while not (terminated or truncated):
        action = env.action_space.sample() if np.random.rand() < epsilon else np.argmax(Q[state])
        next_state, reward, terminated, truncated, _ = env.step(action)
        Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])
        state = next_state
Pułapka
Traktowanie wyniku klasteryzacji jako 'prawdy' bez weryfikacji domenowej to częsty błąd: klastry są matematycznie spójne, ale niekoniecznie odpowiadają kategoriom biznesowym. Klaster nie jest etykietą, dopóki człowiek go nie zinterpretuje i nie zweryfikuje na próbce.

Supervised

  • Wymaga oznaczonych danych (X, y)
  • Cel jasno zdefiniowany z góry
  • Ewaluacja: metryki na zbiorze testowym z prawdziwą etykietą
  • Typowe zastosowania: klasyfikacja defektów, prognoza churnu

Unsupervised

  • Dane bez etykiet
  • Cel: odkryć nieznaną strukturę
  • Ewaluacja: metryki wewnętrzne (silhouette) lub ocena eksperta
  • Typowe zastosowania: segmentacja klientów, wykrywanie anomalii
Mnemonik
SUR: Supervised uczy się z etykiet, Unsupervised szuka struktury, Reinforcement uczy się z nagrody.

2 · Przeuczenie, niedouczenie i kompromis bias-wariancja

★ egzamin

Każdy model popełnia błąd generalizacji z dwóch niezależnych źródeł: bias (systematyczne uproszczenie zbyt sztywnego modelu) i wariancja (nadwrażliwość zbyt elastycznego modelu na szum w danych treningowych). Zrozumienie tego kompromisu jest podstawą diagnozowania, dlaczego model działa źle, zanim zacznie się zmieniać architekturę.

Termin kluczowy
Przeuczenie (overfitting) - Model zapamiętuje szum i idiosynkrazje zbioru treningowego zamiast uczyć się generalizowalnego wzorca. Objaw: bardzo niski błąd na treningu, wysoki na teście. Rośnie z liczbą parametrów modelu i maleje z liczbą reprezentatywnych danych treningowych.
Termin kluczowy
Niedouczenie (underfitting) - Model jest zbyt prosty, by uchwycić rzeczywistą zależność w danych. Objaw: wysoki błąd zarówno na treningu, jak i na teście. Zwiększenie pojemności modelu (więcej cech, głębsza sieć, wyższy stopień wielomianu) zwykle to rozwiązuje.
Termin kluczowy
Kompromis bias-wariancja (bias-variance tradeoff) - Całkowity błąd modelu można rozłożyć na bias^2 + wariancja + szum nieredukowalny. Zmniejszenie biasu (bardziej elastyczny model) zwykle podnosi wariancję i odwrotnie. Optymalny model minimalizuje sumę, nie żaden ze składników z osobna.
Regularyzacja jako dźwignia kompromisu
L1/L2 (kara za duże wagi), dropout (losowe wyłączanie neuronów), early stopping (przerwanie treningu przed przeuczeniem) i augmentacja danych to techniki celowo zwiększające bias, żeby obniżyć wariancję. Nie eliminują błędu, przesuwają punkt na krzywej kompromisu.
Ten sam model, trzy stopnie złożoności: niedouczenie, sweet spot, przeuczenie python
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import mean_squared_error

rng = np.random.default_rng(42)
X = rng.uniform(-3, 3, size=(40, 1))
y = 0.5 * X[:, 0] ** 2 - X[:, 0] + rng.normal(0, 1, size=40)

X_train, X_test = X[:30], X[30:]
y_train, y_test = y[:30], y[30:]

for degree in (1, 4, 15):
    model = make_pipeline(PolynomialFeatures(degree), LinearRegression())
    model.fit(X_train, y_train)
    train_mse = mean_squared_error(y_train, model.predict(X_train))
    test_mse = mean_squared_error(y_test, model.predict(X_test))
    print(f"degree={degree}: train_mse={train_mse:.2f}, test_mse={test_mse:.2f}")
ObjawPrzeuczenieNiedouczenie
Błąd na treningubardzo niskiwysoki
Błąd na teściewysokiwysoki
Luka train vs testdużamała
Naprawaregularyzacja, więcej danych, mniejszy modelwiększy model, więcej cech, dłuższy trening
Pułapka
Ocena modelu wyłącznie po accuracy na zbiorze treningowym to typowy błąd juniorów: model ze 100% accuracy na treningu jest podejrzany, nie imponujący. Zawsze porównuj błąd treningowy z walidacyjnym, luka między nimi mówi więcej niż wartość bezwzględna.
  1. 1 Wykreśl krzywe uczenia (learning curves) Błąd treningowy i walidacyjny w funkcji liczby przykładów treningowych.
  2. 2 Zdiagnozuj wzorzec Obie krzywe wysoko i blisko siebie → underfitting. Duża luka między nimi → overfitting.
  3. 3 Zastosuj odpowiednią interwencję Underfitting: zwiększ pojemność modelu lub liczbę cech. Overfitting: regularyzacja, więcej danych, uproszczenie modelu.
  4. 4 Zweryfikuj na zbiorze testowym Dopiero po ustabilizowaniu walidacji, jednorazowo, żeby nie zanieczyścić decyzji o architekturze.
  • Regularyzacja L1 (Lasso): wymusza rzadkość wag, efektywna selekcja cech
  • Regularyzacja L2 (Ridge/weight decay): tłumi duże wagi bez zerowania ich
  • Dropout: losowe wyłączanie neuronów podczas treningu sieci głębokich
  • Early stopping: zatrzymanie treningu, gdy błąd walidacyjny przestaje spadać
  • Augmentacja danych: sztuczne powiększenie zbioru treningowego bez zbierania nowych danych
Mnemonik
Bias to model za tępy, wariancja to model za nerwowy. Regularyzacja uspokaja nerwowego kosztem odrobiny tępoty.

3 · Metodyka train/validation/test i wyciek danych

★ egzamin

Poprawny podział danych to fundament wiarygodnej ewaluacji modelu. Błąd metodologiczny na tym etapie daje fałszywie optymistyczne wyniki w laboratorium i katastrofę w produkcji, ponieważ model był oceniany na danych, które w praktyce nigdy nie powinien był 'widzieć' przed predykcją.

Termin kluczowy
Zbiór treningowy / walidacyjny / testowy - Trening: dopasowanie wag modelu. Walidacja: strojenie hiperparametrów i wybór architektury w trakcie rozwoju, można ją odwiedzać wielokrotnie. Test: jednorazowa, końcowa ocena przed wdrożeniem, symuluje dane produkcyjne, nie wolno jej używać do podejmowania decyzji o modelu.
Termin kluczowy
Walidacja krzyżowa (k-fold cross-validation) - Zbiór treningowy dzielony jest na k części, model trenowany k razy, za każdym razem na k-1 częściach i walidowany na pozostałej. Daje bardziej stabilny szacunek wydajności niż pojedynczy podział, kosztem k-krotnego czasu treningu.
Termin kluczowy
Wyciek danych (data leakage) - Sytuacja, w której informacja ze zbioru testowego (lub z przyszłości) wpływa na proces treningu, bezpośrednio lub pośrednio. Skutek: metryki na teście wyglądają świetnie, a model w produkcji zawodzi, bo w praktyce tej informacji nie miał.
Trzy typowe źródła wycieku
1) Preprocessing dopasowany na całym zbiorze przed podziałem (skalowanie, imputacja, selekcja cech). 2) Wyciek czasowy: losowe tasowanie danych z porządkiem chronologicznym, model 'widzi' przyszłość podczas treningu. 3) Wyciek cechy docelowej (target leakage): cecha wejściowa jest pochodną etykiety i nie będzie dostępna w momencie predykcji w produkcji.
Pipeline: preprocessing dopasowywany osobno w każdym foldzie, brak wycieku python
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score, StratifiedKFold

pipeline = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", SVC(kernel="rbf", C=1.0)),
])

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipeline, X, y, cv=cv, scoring="f1_macro")
print(f"F1 macro: {scores.mean():.3f} +/- {scores.std():.3f}")
Pułapka
`scaler.fit_transform(X)` na całym zbiorze przed `train_test_split` to najczęstszy wyciek w praktyce: średnia i odchylenie standardowe użyte do skalowania 'widziały' dane testowe. Poprawnie: fit tylko na X_train, transform osobno na X_train i X_test (Pipeline robi to automatycznie w każdym foldzie).
Pułapka
Losowy `train_test_split` na danych szeregu czasowego (np. odczyty czujników w kolejności czasowej) tasuje przeszłość z przyszłością. Model uczy się interpolować między znanymi punktami zamiast ekstrapolować w przyszłość, co jest realnym zadaniem produkcyjnym. Rozwiązanie: `TimeSeriesSplit` lub ręczny podział po dacie granicznej.

Poprawny workflow

  • Podział train/val/test przed jakimkolwiek preprocessingiem
  • Scaler/encoder dopasowany tylko na train, transform na resztę
  • Test dotykany raz, na samym końcu
  • Chronologia zachowana przy danych czasowych

Workflow z wyciekiem

  • Skalowanie/imputacja na całym zbiorze przed podziałem
  • Selekcja cech na podstawie korelacji z etykietą liczonej na całości danych
  • Wielokrotne 'podglądanie' testu i dostrajanie modelu pod niego
  • Losowe tasowanie danych z porządkiem czasowym
  • Czy preprocessing był dopasowany wyłącznie na zbiorze treningowym?
  • Czy jakakolwiek cecha jest dostępna dopiero po zaistnieniu etykiety (target leakage)?
  • Czy dane mają porządek czasowy i czy podział go respektuje?
  • Czy zbiór testowy był użyty więcej niż raz do podejmowania decyzji o modelu?
Mnemonik
Test to sejf: otwierasz go raz, na końcu, i nigdy nie zaglądasz do środka podczas budowania modelu.

4 · Embeddingi i podobieństwo wektorowe

Embedding to gęsty wektor liczbowy o stałym wymiarze, który reprezentuje znaczenie obiektu (słowa, zdania, obrazu, użytkownika) w taki sposób, że obiekty semantycznie podobne mają wektory blisko siebie w przestrzeni wektorowej. To fundament wyszukiwania semantycznego, systemów rekomendacji i RAG (retrieval-augmented generation).

Termin kluczowy
Embedding - Wyuczona reprezentacja obiektu jako wektora liczb rzeczywistych, zwykle 128 do 1536 wymiarów, generowana przez model wytrenowany tak, by odległość geometryczna odzwierciedlała podobieństwo semantyczne.
Termin kluczowy
Podobieństwo kosinusowe (cosine similarity) - Miara podobieństwa dwóch wektorów oparta na kącie między nimi, a nie na ich długości: cos(theta) = (a·b) / (||a|| ||b||). Wartość 1 oznacza identyczny kierunek, 0 oznacza ortogonalność (brak związku), -1 oznacza przeciwny kierunek.
Termin kluczowy
Baza wektorowa i ANN (approximate nearest neighbor) - Wyszukanie dokładnie najbliższych sąsiadów w milionach wektorów jest zbyt wolne przy pełnym przeszukaniu. Bazy wektorowe (np. z indeksem HNSW) używają przybliżonych algorytmów najbliższego sąsiada, oddając niewielką dokładność za rząd wielkości szybsze zapytania.
Typowe wymiary embeddingów
Modele klasy sentence-transformers dają zwykle 384 lub 768 wymiarów, nowsze modele komercyjne do wyszukiwania semantycznego sięgają 1536 i wyżej. Więcej wymiarów nie zawsze znaczy lepiej: wyższa dokładność semantyczna kosztuje więcej pamięci i wolniejsze wyszukiwanie w bazie wektorowej.
Wektoryzacja tekstu i liczenie podobieństwa kosinusowego python
import numpy as np
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = model.encode([
    "Panel fotowoltaiczny z peknięciem ogniwa",
    "Uszkodzona cela w module PV",
])

def cosine_similarity(a: np.ndarray, b: np.ndarray) -> float:
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))

similarity = cosine_similarity(embeddings[0], embeddings[1])
  • Wyszukiwanie semantyczne: dopasowanie po znaczeniu, nie po dokładnych słowach kluczowych
  • RAG: pobranie kontekstu najbardziej relewantnego semantycznie do zapytania przed wygenerowaniem odpowiedzi przez LLM
  • Systemy rekomendacji: podobieństwo produktów lub użytkowników w przestrzeni wektorowej
  • Deduplikacja: wykrywanie niemal identycznych treści mimo różnic w sformułowaniu
Pułapka
Porównywanie embeddingów wygenerowanych przez dwa różne modele (albo dwie wersje tego samego modelu) jest bezsensowne matematycznie: każdy model uczy się własnej, niepowiązanej przestrzeni wektorowej. Odległość między wektorami z różnych przestrzeni nic nie znaczy, nawet jeśli mają tę samą liczbę wymiarów.
MetrykaWrażliwa na długość wektora?Typowe zastosowanie
Podobieństwo kosinusoweniewyszukiwanie semantyczne, embeddingi tekstu
Iloczyn skalarny (dot product)takgdy długość wektora niesie sygnał (np. popularność)
Odległość euklidesowatakklasteryzacja, dane geometryczne/przestrzenne
Mnemonik
Embedding to współrzędne GPS znaczenia: bliskie punkty na mapie to bliskie znaczenia, o ile mapa pochodzi od tego samego modelu.

5 · Metryki ewaluacji: precision, recall, F1, AUC i pułapka accuracy

★ egzamin

Accuracy jest najbardziej intuicyjną metryką i najczęściej złym wyborem w realnych problemach klasyfikacji, gdzie klasy są niezbalansowane. Precision, recall, F1 i AUC-ROC rozbijają jakość modelu na komponenty, które faktycznie odpowiadają na pytania biznesowe: ile fałszywych alarmów, ile przeoczonych przypadków.

Termin kluczowy
Macierz pomyłek (confusion matrix) - Zestawienie TP (true positive), FP (false positive), TN (true negative), FN (false negative) dla klasyfikacji binarnej. Wszystkie pozostałe metryki klasyfikacyjne są funkcjami tych czterech liczb.
Termin kluczowy
Precision (precyzja) - TP / (TP + FP). Spośród wszystkich przypadków oznaczonych przez model jako pozytywne, jaki odsetek faktycznie był pozytywny. Wysoka precision minimalizuje fałszywe alarmy.
Termin kluczowy
Recall (czułość) - TP / (TP + FN). Spośród wszystkich rzeczywistych przypadków pozytywnych, jaki odsetek model wykrył. Wysoki recall minimalizuje przeoczone przypadki, kosztem częściej fałszywych alarmów.
Termin kluczowy
F1-score - Średnia harmoniczna precision i recall: 2 * (precision * recall) / (precision + recall). Karze skrajną nierównowagę między precision a recall mocniej niż średnia arytmetyczna, przydatna gdy oba błędy mają porównywalny koszt.
Termin kluczowy
AUC-ROC - Pole pod krzywą ROC (true positive rate vs false positive rate przy zmiennym progu decyzyjnym). Mierzy zdolność modelu do rankingu przypadków pozytywnych powyżej negatywnych, niezależnie od wybranego progu. 0.5 to poziom losowy, 1.0 to separacja idealna.
Dlaczego accuracy myli na danych niezbalansowanych
Zbiór z 990 przypadkami klasy 'ok' i 10 przypadkami klasy 'defekt': model, który zawsze przewiduje 'ok' i nigdy nie wykrywa defektu, osiąga 99% accuracy, będąc bezużytecznym. Precision, recall i F1 liczone dla klasy mniejszościowej ('defekt') od razu ujawniają, że recall wynosi 0%.
Pełny raport klasyfikacji zamiast pojedynczej liczby accuracy python
from sklearn.metrics import classification_report, roc_auc_score
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(class_weight="balanced", max_iter=1000)
clf.fit(X_train, y_train)

y_pred = clf.predict(X_test)
y_proba = clf.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred, target_names=["ok", "defekt"]))
print(f"AUC-ROC: {roc_auc_score(y_test, y_proba):.3f}")
MetrykaWzórKiedy priorytetyzować
PrecisionTP / (TP + FP)koszt fałszywego alarmu wysoki (np. niepotrzebna kosztowna inspekcja)
RecallTP / (TP + FN)koszt przeoczenia wysoki (np. pominięty defekt bezpieczeństwa)
F12PR / (P + R)oba błędy porównywalnie kosztowne, klasy niezbalansowane
AUC-ROCpole pod krzywą ROCocena jakości rankingu modelu niezależnie od progu decyzyjnego
Pułapka
Domyślny próg decyzyjny 0.5 dla `predict()` jest arbitralny i rzadko optymalny przy niezbalansowanych klasach. Próg powinien być dobrany na podstawie krzywej precision-recall i realnego kosztu błędu w danym biznesie, nie zostawiony jako fabryczne ustawienie biblioteki.
  1. 1 Zidentyfikuj koszt każdego typu błędu Ile kosztuje fałszywy alarm, ile kosztuje przeoczenie.
  2. 2 Sprawdź balans klas Jeśli klasa mniejszościowa poniżej ~10-20%, accuracy jest niewiarygodne.
  3. 3 Wybierz metrykę zgodną z kosztem Recall gdy przeoczenie jest drogie, precision gdy fałszywy alarm jest drogi, F1 gdy oba porównywalne.
  4. 4 Dostrój próg decyzyjny Na podstawie krzywej precision-recall, nie zostawiaj domyślnego 0.5.
Mnemonik
Precision pyta 'czy ufam alarmowi', recall pyta 'czy nic mi nie umknęło'. F1 godzi oba pytania, AUC ocenia ranking niezależnie od progu.

6 · Architektura transformera: mechanizm uwagi i zmierzch RNN

★ egzamin

Transformer, wprowadzony w pracy 'Attention Is All You Need' (2017), zastąpił rekurencyjne sieci (RNN, LSTM) jako dominującą architekturę dla sekwencji dzięki jednej zmianie koncepcyjnej: zamiast przetwarzać sekwencję krok po kroku, każdy token 'patrzy' bezpośrednio na wszystkie inne tokeny naraz poprzez mechanizm uwagi (attention).

Termin kluczowy
Self-attention - Mechanizm, w którym każdy token w sekwencji oblicza ważoną sumę reprezentacji wszystkich innych tokenów, z wagami zależnymi od tego, jak bardzo są ze sobą powiązane semantycznie. Realizowany przez trzy wyuczone projekcje wejścia: Query (Q), Key (K), Value (V).
Termin kluczowy
Multi-head attention - Zamiast jednego mechanizmu uwagi, transformer uruchamia kilka niezależnych 'głów' równolegle, każda ucząc się innego rodzaju zależności (np. jedna głowa łapie zależności składniowe, inna semantyczne). Wyniki głów są łączone i rzutowane z powrotem do wspólnego wymiaru.
Termin kluczowy
Positional encoding - Self-attention samo w sobie jest permutacyjnie niezmiennicze, czyli nie ma wbudowanego pojęcia kolejności tokenów. Positional encoding dodaje do reprezentacji każdego tokenu informację o jego pozycji w sekwencji, zwykle jako funkcje sinusoidalne lub wyuczone wektory pozycyjne.
Dlaczego RNN/LSTM przegrały skalę
RNN przetwarza sekwencję sekwencyjnie, token po tokenie, co uniemożliwia pełną równoległość na GPU podczas treningu i sprawia, że zależności odległe w sekwencji zanikają (vanishing gradient) mimo mechanizmów bramkujących LSTM/GRU. Transformer oblicza uwagę dla całej sekwencji jednym mnożeniem macierzy, co skaluje się dobrze na GPU/TPU i umożliwiło trening modeli rzędu miliardów parametrów, które stały się fundamentem współczesnych LLM.
Scaled dot-product attention: softmax(QK^T / sqrt(d_k)) V python
import numpy as np

def scaled_dot_product_attention(Q, K, V):
    d_k = Q.shape[-1]
    scores = Q @ K.T / np.sqrt(d_k)
    weights = np.exp(scores - scores.max(axis=-1, keepdims=True))
    weights /= weights.sum(axis=-1, keepdims=True)
    return weights @ V

Q = np.random.randn(4, 8)  # 4 tokeny, wymiar reprezentacji 8
K = np.random.randn(4, 8)
V = np.random.randn(4, 8)
output = scaled_dot_product_attention(Q, K, V)
  • Warstwa self-attention (multi-head)
  • Warstwa feed-forward (dwuwarstwowa sieć gęsta stosowana niezależnie do każdego tokenu)
  • Połączenia rezydualne (residual connections) wokół obu podwarstw
  • Layer normalization stabilizująca trening głębokich stosów bloków

RNN / LSTM

  • Przetwarzanie sekwencyjne, token po tokenie
  • Trudne do równoległego treningu na GPU
  • Zależności odległe zanikają mimo bramek LSTM
  • Stan ukryty o stałym rozmiarze jako 'pamięć' całej historii

Transformer

  • Przetwarzanie całej sekwencji równolegle
  • W pełni równoległy trening na GPU/TPU
  • Bezpośredni dostęp do każdego tokenu przez attention, bez zaniku
  • Koszt kwadratowy względem długości sekwencji (uwaga liczona dla każdej pary tokenów)
Pułapka
Wagi uwagi (attention weights) bywają mylnie interpretowane jako 'wyjaśnienie decyzji modelu'. Wysoka waga uwagi między dwoma tokenami pokazuje korelację w reprezentacji wewnętrznej, nie gwarantuje przyczynowego ani semantycznie poprawnego uzasadnienia predykcji, badania nad interpretowalnością wielokrotnie to podważały.
Mnemonik
RNN czyta zdanie słowo po słowie i próbuje pamiętać. Transformer widzi całe zdanie naraz i sam decyduje, na co patrzeć.

7 · Realistyczne granice obecnej AI: kiedy NIE sięgać po model

Dojrzałość inżynierska w AI/ML objawia się nie tylko umiejętnością zbudowania modelu, ale umiejętnością rozpoznania, kiedy model jest złym pomysłem. Presja żeby 'użyć AI' bo jest modne, jest realnym źródłem kosztownych, kruchych systemów produkcyjnych.

Znane ograniczenia obecnych modeli
Modele generatywne (LLM) potrafią z pewnością siebie generować nieprawdziwe treści (halucynacje) i nie mają wbudowanego mechanizmu odróżniania faktu od prawdopodobnego brzmienia zdania. Modele ML ogólnie są kruche wobec przesunięcia rozkładu danych (distribution shift): działają dobrze na danych podobnych do treningowych i zawodzą nieprzewidywalnie poza tym zakresem, bez sygnału ostrzegawczego typu 'nie wiem'.
  • Problem rozwiązywalny jedną jasną regułą biznesową lub zapytaniem SQL
  • Zbiór danych zbyt mały, by model nauczył się generalizowalnego wzorca (rząd dziesiątek przykładów)
  • Wymóg regulacyjny pełnej wyjaśnialności decyzji, którego czarnoskrzynkowy model nie spełnia
  • Koszt błędu ekstremalnie wysoki (bezpieczeństwo, zdrowie) bez możliwości nadzoru człowieka nad każdą decyzją
  • Środowisko zmienia się szybciej niż cykl retrainingu modelu

Dobry kandydat na ML

  • Wzorzec złożony, nieliniowy, trudny do zakodowania regułami
  • Dostępne wystarczające, reprezentatywne dane historyczne
  • Tolerancja na błąd statystyczny, nie wymóg 100% pewności
  • Koszt błędnej predykcji akceptowalny lub ubezpieczony nadzorem człowieka

Lepiej rozwiązać bez ML

  • Prosta reguła if/else w pełni opisuje logikę biznesową
  • Brak danych historycznych albo dane niereprezentatywne
  • Wymagana pełna, audytowalna wyjaśnialność każdej decyzji
  • Błąd nieakceptowalny bez nadzoru, a nadzoru nie da się zapewnić
Pułapka
Wdrażanie modelu ML tam, gdzie wystarczyłaby reguła albo zapytanie do bazy danych, to częsty przypadek resume-driven development: rozwiązanie dobierane pod technologię, którą chce się wpisać do CV, a nie pod problem. Koszt utrzymania modelu (retraining, monitoring, dryf) jest zawsze wyższy niż koszt utrzymania reguły.
Guardrail: eskalacja do człowieka zamiast ślepego zaufania predykcji python
def classify_with_guardrail(model, x, confidence_threshold: float = 0.85):
    proba = model.predict_proba([x])[0]
    predicted_class = proba.argmax()
    confidence = proba[predicted_class]

    if confidence < confidence_threshold:
        return {"decision": "eskalacja_do_czlowieka", "confidence": confidence}
    return {"decision": predicted_class, "confidence": confidence}
  1. 1 Zdefiniuj problem bez wspominania o ML Jeśli da się go rozwiązać regułą lub zapytaniem, zrób to.
  2. 2 Oceń dostępność i jakość danych Brak wystarczających, reprezentatywnych danych dyskwalifikuje ML niezależnie od architektury.
  3. 3 Policz koszt błędu i wymóg wyjaśnialności Wysoki koszt bez nadzoru człowieka i wymóg pełnej audytowalności to sygnał ostrzegawczy.
  4. 4 Zaprojektuj guardrail zanim wdrożysz Próg pewności, eskalacja do człowieka, plan rollbacku, zawsze zanim model dotknie realnych decyzji.
Ograniczenia praktyczne LLM
Kontekst modelu jest ograniczony liczbą tokenów, model nie ma trwałej pamięci między sesjami, chyba że zostanie to zaprojektowane w architekturze aplikacji, a poprawność faktograficzna wygenerowanej treści nie jest gwarantowana i wymaga weryfikacji, szczególnie w zastosowaniach o wysokiej stawce błędu.
Mnemonik
Zanim wybierzesz model, zapytaj: czy da się to rozwiązać jednym if-em. Jeśli tak, model jest przerostem formy nad treścią.

8 · Jakość danych ponad architekturę i wdrożenie produkcyjne

★ egzamin

W praktyce inżynierskiej jakość i reprezentatywność danych treningowych decydują o wyniku projektu ML częściej niż wybór architektury czy hiperparametrów. Nurt data-centric AI formalizuje tę obserwację: poprawienie etykiet i usunięcie szumu w danych zwykle daje większy wzrost jakości modelu niż zmiana algorytmu.

Garbage in, garbage out w praktyce ML
Najlepsza architektura wytrenowana na źle oznaczonych, niereprezentatywnych lub niespójnych danych da gorszy wynik niż prosty model wytrenowany na czystych, spójnie oznaczonych danych. Czas inżyniera lepiej zainwestować w audyt etykiet, deduplikację i pokrycie przypadków brzegowych, niż w kolejną iterację strojenia hiperparametrów, gdy jakość danych jest wąskim gardłem.
Termin kluczowy
Dryf danych (data drift) - Zmiana rozkładu statystycznego cech wejściowych w produkcji względem danych, na których model był trenowany, przy niezmienionej relacji cecha-etykieta. Przykład: kamera inspekcyjna zmienia rozdzielczość lub oświetlenie w zakładzie.
Termin kluczowy
Dryf koncepcji (concept drift) - Zmiana samej relacji między cechami a etykietą w czasie, model wytrenowany na starej relacji przestaje być trafny nawet przy niezmienionym rozkładzie cech. Przykład: zmiana procesu produkcyjnego sprawia, że te same odczyty czujników oznaczają teraz inny typ defektu.
Wykrywanie dryfu cechy testem Kołmogorowa-Smirnowa python
import numpy as np
from scipy.stats import ks_2samp

def detect_feature_drift(reference: np.ndarray, production: np.ndarray, alpha: float = 0.01) -> bool:
    statistic, p_value = ks_2samp(reference, production)
    return p_value < alpha  # True = statystycznie istotny dryf

drift_detected = detect_feature_drift(
    reference_batch["panel_temp_delta"],
    production_batch["panel_temp_delta"],
)
Typ dryfuCo się zmieniaTypowa metoda wykrycia
Data driftrozkład cech wejściowychtest KS, Population Stability Index (PSI)
Concept driftrelacja cecha to etykietamonitoring metryk jakości predykcji w czasie na danych z opóźnioną etykietą
Label driftrozkład samej etykiety w populacjiporównanie rozkładu klas w czasie
  • Latencja: budżet czasowy na pojedynczą inferencję zgodny z wymogiem UX/SLA
  • Koszt: koszt inferencji na żądanie przy skali produkcyjnej, nie tylko koszt treningu
  • Monitoring: dashboard metryk jakości predykcji i rozkładu danych wejściowych w czasie
  • Alerting: automatyczne powiadomienie, gdy metryka lub dryf przekroczy próg
  • Plan rollbacku: możliwość szybkiego powrotu do poprzedniej wersji modelu
Pułapka
Wdrożenie modelu do produkcji bez zaplanowanego pipeline'u monitoringu ('deploy and forget') jest najczęstszym błędem operacyjnym: model degraduje się cicho wraz z dryfem danych, a pierwszym sygnałem problemu bywa skarga klienta, zamiast alertu z systemu monitoringu.
  1. 1 Walidacja danych przed treningiem Automatyczne sprawdzenie schematu, zakresów wartości i braków danych.
  2. 2 Shadow deployment Nowy model liczy predykcje równolegle z produkcyjnym, bez wpływu na decyzje, do porównania metryk.
  3. 3 Canary release Stopniowe przekierowanie małego procenta ruchu na nowy model przed pełnym wdrożeniem.
  4. 4 Monitoring ciągły Śledzenie dryfu danych, latencji, kosztu i metryk jakości predykcji w czasie.
  5. 5 Plan rollbacku Automatyczny lub ręczny powrót do poprzedniej wersji przy przekroczeniu progów alertowych.
Mnemonik
Model to nie produkt skończony w dniu wdrożenia, to system żywy: dane się zmieniają, model musi być obserwowany tak jak każda inna usługa produkcyjna.
Fiszki - aktywne przypominanie

Sprawdź się - testowanie to nauka

24 pytań w losowej kolejności. Twoje wyniki zapisują się lokalnie.

Rozpocznij quiz
Zbudowane przez Tenzan Logic