Tenzan Academy
Motyw
  • 8 sekcji
  • 24 pytania
  • 22 fiszki

Podstawy AI i ML dla inżynierów

Kurs techniczny: paradygmaty uczenia maszynowego, bias-wariancja, metodyka walidacji, embeddingi, metryki ewaluacji, architektura transformera i wdrożenia produkcyjne modeli.

Podstawy AI i ML dla inżynierów

Kurs techniczny: paradygmaty uczenia maszynowego, bias-wariancja, metodyka walidacji, embeddingi, metryki ewaluacji, architektura transformera i wdrożenia produkcyjne modeli.

Quiz

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 z par (X, y), gdzie y to znana etykieta lub wartość docelowa. Obejmuje klasyfikację (kategoria) i regresję (wartość ciągła). Wymaga danych z etykietami, a to zwykle najdroższy element 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ę z nagrody (skalarny sygnał zwrotny), nie z etykiety. Cel: maksymalizacja skumulowanej nagrody. Stosowane, gdy decyzja zmienia 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.

Fakt na test

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.

Dalej: 02 Przeuczenie, niedouczenie i kompromis bias-wariancja

Przeuczenie, niedouczenie i kompromis bias-wariancja

na egzaminie

Każdy model popełnia błąd generalizacji z dwóch niezależnych źródeł. Bias to systematyczne uproszczenie zbyt sztywnego modelu. Wariancja to nadwrażliwość zbyt elastycznego modelu na szum w danych treningowych. Zrozumienie kompromisu bias-wariancja to podstawa diagnozy, dlaczego model działa źle, zanim zmienisz 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

Techniki: L1/L2 (kara za duże wagi), dropout (losowe wyłączanie neuronów), early stopping (przerwanie treningu przed przeuczeniem) i augmentacja danych. Celowo zwiększają 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. Wykreśl krzywe uczenia (learning curves) Błąd treningowy i walidacyjny w funkcji liczby przykładów treningowych.
  2. Zdiagnozuj wzorzec Obie krzywe wysoko i blisko siebie → underfitting. Duża luka między nimi → overfitting.
  3. Zastosuj odpowiednią interwencję Underfitting: zwiększ pojemność modelu lub liczbę cech. Overfitting: regularyzacja, więcej danych, uproszczenie modelu.
  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.

Dalej: 03 Metodyka train/validation/test i wyciek danych

Metodyka train/validation/test i wyciek danych

na egzaminie

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. Model był bowiem 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

Preprocessing na całym zbiorze, wyciek czasowy i wyciek cechy docelowej.

  1. Preprocessing dopasowany na całym zbiorze przed podziałem (skalowanie, imputacja, selekcja cech).
  2. Wyciek czasowy: losowe tasowanie danych chronologicznych, model 'widzi' przyszłość w 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.

Dalej: 04 Embeddingi i podobieństwo wektorowe

Embeddingi i podobieństwo wektorowe

Embedding to gęsty wektor liczbowy o stałym wymiarze. Reprezentuje znaczenie obiektu (słowa, zdania, obrazu, użytkownika) tak, ż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 pęknię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.

Dalej: 05 Metryki ewaluacji: precision, recall, F1, AUC i pułapka accuracy

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

na egzaminie

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: 990 przypadków klasy 'ok' i 10 klasy 'defekt'. Model, który zawsze przewiduje 'ok', nigdy nie wykrywa defektu. Ma 99% accuracy, choć jest bezużyteczny. Precision, recall i F1 dla klasy mniejszościowej ('defekt') od razu pokazują recall 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. Zidentyfikuj koszt każdego typu błędu Ile kosztuje fałszywy alarm, ile kosztuje przeoczenie.
  2. Sprawdź balans klas Jeśli klasa mniejszościowa poniżej ~10-20%, accuracy jest niewiarygodne.
  3. Wybierz metrykę zgodną z kosztem Recall gdy przeoczenie jest drogie, precision gdy fałszywy alarm jest drogi, F1 gdy oba porównywalne.
  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.

Dalej: 06 Architektura transformera: mechanizm uwagi i zmierzch RNN

Architektura transformera: mechanizm uwagi i zmierzch RNN

na egzaminie

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. Każdy token 'patrzy' na wszystkie inne tokeny naraz (mechanizm uwagi, attention), a nie krok po kroku.

Termin kluczowy

Self-attention: Mechanizm, w którym każdy token w sekwencji oblicza ważoną sumę reprezentacji wszystkich innych tokenów. Wagi zależą od tego, jak bardzo tokeny są 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 równolegle kilka niezależnych 'głów'. Każda uczy 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ę token po tokenie. To uniemożliwia pełną równoległość na GPU podczas treningu. Przez to zależności odległe w sekwencji zanikają (vanishing gradient) mimo mechanizmów bramkujących LSTM/GRU.

Fakt na test

Transformer oblicza uwagę dla całej sekwencji jednym mnożeniem macierzy. Dobrze skaluje się na GPU/TPU i umożliwił trening modeli rzędu miliardów parametrów. Te modele 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ć.

Dalej: 07 Realistyczne granice obecnej AI: kiedy NIE sięgać po model

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). Nie mają wbudowanego mechanizmu odróżniania faktu od prawdopodobnego brzmienia zdania.

Fakt na test

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 reguła albo zapytanie do bazy danych, to częsty przypadek resume-driven development. Rozwiązanie dobiera się pod technologię do CV, a nie pod problem. Utrzymanie modelu (retraining, monitoring, dryf) zawsze kosztuje więcej niż utrzymanie 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. Zdefiniuj problem bez wspominania o ML Jeśli da się go rozwiązać regułą lub zapytaniem, zrób to.
  2. Oceń dostępność i jakość danych Brak wystarczających, reprezentatywnych danych dyskwalifikuje ML niezależnie od architektury.
  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. 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 zaprojektuje się ją w architekturze aplikacji. 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ą.

Dalej: 08 Jakość danych ponad architekturę i wdrożenie produkcyjne

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

na egzaminie

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 to: poprawa etykiet i usunięcie szumu zwykle poprawia model bardziej 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.

Fakt na test

Gdy jakość danych jest wąskim gardłem, czas inżyniera lepiej zainwestować w audyt etykiet, deduplikację i pokrycie przypadków brzegowych. Mniej opłaca się kolejna iteracja strojenia hiperparametrów.

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 relacji między cechami a etykietą w czasie. Model wytrenowany na starej relacji traci trafność, nawet gdy rozkład cech się nie zmienia. Przykład: po zmianie procesu produkcyjnego te same odczyty czujników oznaczają 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. Pierwszym sygnałem problemu bywa skarga klienta, a nie alert z systemu monitoringu.

  1. Walidacja danych przed treningiem Automatyczne sprawdzenie schematu, zakresów wartości i braków danych.
  2. Shadow deployment Nowy model liczy predykcje równolegle z produkcyjnym, bez wpływu na decyzje, do porównania metryk.
  3. Canary release Stopniowe przekierowanie małego procenta ruchu na nowy model przed pełnym wdrożeniem.
  4. Monitoring ciągły Śledzenie dryfu danych, latencji, kosztu i metryk jakości predykcji w czasie.
  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.

Sprawdź się

20 z 24 pytań, losowo, z wyjaśnieniem po każdym. Wynik zostaje na tym urządzeniu.

Rozpocznij quiz

Fiszki: Podstawy AI i ML

Pytanie

O tym demo

Działające demo kursów napisanych przez Tenzan Logic. Wyniki zostają na tym urządzeniu, bez konta.

Każdy kurs, pytanie i fiszkę napisał Tenzan Logic, po polsku i od zera. Jeśli chcesz taki zestaw dla swojego zespołu, z Twoimi procedurami i Twoim słownictwem, napisz.

Napisz do Tenzan Logic

Jak to działa

100% czas (dni) bez powtórek 1 3 7 21 z powtórkami
Schemat idei, nie dane pomiarowe (Ebbinghaus 1885; Cepeda i in. 2006).
  • Odstępy

    1·3·7·21 dni do powtórki

    Fiszka z „Umiem” wraca po 1, 3, 7 i 21 dniach.

    Badanie

    Powtórki z przerwami dają trwalszą pamięć niż jedna po drugiej. Cepeda i in. 2006, Psychological Bulletin 132(3): 354-380

  • Przypominanie

    ukryta odpowiedź fiszki

    Najpierw odpowiedz z pamięci, potem odwróć.

    Badanie

    Próba przypomnienia dała lepszą pamięć po dwóch dniach i po tygodniu niż ponowne czytanie. Roediger i Karpicke 2006, Psychological Science 17(3): 249-255

  • Dwa kody

    4 kolory bloków

    Fakt, termin, mnemonik i pułapka mają swój kolor.

    Badanie

    Teoria: słowo i obraz zapisują się osobno. To teoria, nie gwarancja wyniku. Paivio 1991, Canadian Journal of Psychology 45(3): 255-287

  • Porcje

    167 krótkich sekcji

    Jedna sekcja to jedna porcja do zapamiętania.

    Badanie

    Pamięć robocza mieści około czterech porcji (Miller 1956: siedem, Cowan 2001: cztery). Cowan 2001, Behavioral and Brain Sciences 24(1): 87-114

  • Skróty

    134 zielone bloki

    Mnemonik zbiera kilka elementów w jeden, np. „SUR”.

    Badanie

    Skrót zbiera kilka elementów w jeden; przykład „SUR” jest w kursie o podstawach AI. Opis funkcji aplikacji, bez cytowanego badania

  • Testy

    20 z 24 pytań w quizie

    Po każdej odpowiedzi widzisz wyjaśnienie.

    Badanie

    Ćwiczenie, nie sprawdzian: pytania są w losowej kolejności i uzupełniają fiszki, nie zastępują ich. Efekt testowania: zob. „Przypominanie”

Szukaj

Postęp

Brak wyników. Rozwiąż pierwszy quiz.

Tu zbiera się Twój postęp: rekord i medal każdego quizu, seria dni i pytania do powtórki.

Gdzie jest zapis
Tylko w pamięci tej przeglądarki. Konta nie ma i wyniki nigdzie nie są wysyłane. Inna przeglądarka lub inne urządzenie zaczyna od zera.
Jak wyczyścić
W quizie: Historia, potem Wyczyść historię. Fiszki i serię dni usuniesz razem z danymi witryny w ustawieniach przeglądarki.
Wybierz quiz

Progi medali

Medal liczy się z najlepszego wyniku quizu: Brąz od 60%, Srebro od 75%, Złoto od 90%, Platyna przy 100%.