Przejdź do treści
coden

Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne

Uczenie nadzorowane, nienadzorowane, półnadzorowane, samonadzorowane i przez wzmacnianie — z dokładnymi definicjami, wyjaśnieniem prostym językiem i animacjami prawdziwych algorytmów.

15 minut Matěj Žalmánek 2026-10-15

Seria Podstawy AI Część 42 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Pięć rodzajów uczenia maszynowego według tego, jaki sygnał model dostaje podczas nauki.
  • Dlaczego może wystarczyć kilka etykiet i dużo nieoznaczonych danych — i jak uczą się modele językowe.
  • Jak agent uczy się działać wyłącznie na podstawie nagród i kar.

Warto wiedzieć wcześniej: Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje, Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory

„Model się tego nauczył.” To zdanie brzmi za każdym razem tak samo, ale oznacza bardzo różne rzeczy. Raz model uczył się z tysięcy zdjęć, przy których ktoś napisał, co na nich jest. Innym razem dostał tylko stos danych bez ani jednej etykiety i miał znaleźć w nich porządek. A jeszcze innym razem uczył się jak pies na placu szkoleniowym — próbował, a za dobre kroki dostawał nagrodę.

Dlatego uczenie maszynowe dzieli się według tego, jaki sygnał model otrzymuje podczas nauki. Przejdziemy przez główne rodzaje, od uczenia nadzorowanego aż po uczenie przez wzmacnianie. Przy każdym znajdziesz dokładną definicję, wyjaśnienie prostym językiem i wykres, który jest prawdziwym wynikiem algorytmu — nic nie jest rysowane ręcznie.

1. Co znaczy, że maszyna się uczy

Definicja — uczenie (T. Mitchell, 1997)

Program uczy się z doświadczenia E względem klasy zadań T i miary wydajności P, jeżeli jego wydajność w zadaniach z T, mierzona za pomocą P, poprawia się wraz z doświadczeniem E.

Mówiąc prościej

Uczy się to, co staje się lepsze dzięki praktyce. Zadaniem T może być „rozpoznać spam”, miarą P „ile e-maili przydzieli poprawnie”, a doświadczeniem E „tysiąc e-maili, które ktoś już posortował”. Rodzaje uczenia różnią się głównie tym, jak wygląda to doświadczenie E.

Definicja — model i parametry

Model to funkcja fθ : 𝒳 → 𝒴 z przestrzeni wejść 𝒳 do przestrzeni wyjść 𝒴, wyznaczona przez parametry θ ∈ ℝp.

Uczenie (trening) to szukanie parametrów θ, które minimalizują funkcję celu J(θ) obliczoną z danych — zwykle metodą spadku gradientu θ ← θ − η ∇J(θ).

Mówiąc prościej

Model to maszyna z mnóstwem pokręteł — parametrów. Uczenie to kręcenie pokrętłami tak długo, aż maszyna robi to, czego chcemy. Funkcja celu to liczba, która mówi, jak bardzo maszyna wciąż się myli; spadek gradientu kręci pokrętłami zawsze w tę stronę, w której myli się najmniej.

Główne rodzaje uczenia w pigułce — różnią się tym, co jest dostępne w danych:

Nadzorowanewejście + poprawna odpowiedź

Nauczyć się odpowiadać jak nauczyciel.

Nienadzorowanetylko wejścia

Znaleźć w danych strukturę.

Półnadzorowanekilka odpowiedzi + dużo wejść

Wykorzystać też dane bez etykiet.

Samonadzorowaneodpowiedzi wytworzone z danych

Tak uczą się modele językowe.

Przez wzmacnianienagroda za działania

Nauczyć się działać.

2. Uczenie nadzorowane (supervised learning)

Definicja — uczenie nadzorowane

Dany jest zbiór treningowy D = {(xi, yi)}i=1n par wejście–etykieta, wylosowanych niezależnie z nieznanego rozkładu P(X, Y), oraz funkcja straty L(ŷ, y) ≥ 0.

Szukamy modelu, który minimalizuje ryzyko empiryczne: θ* = argminθ (1/n) ∑i=1n L(fθ(xi), yi).

Celem nie jest jednak zbiór treningowy — model ma dobrze działać na nowych danych z tego samego rozkładu (generalizacja). Dlatego wydajność mierzy się na odłożonym zbiorze testowym.

Mówiąc prościej

Jak dziecko z książeczką obrazkową: przy każdym obrazku jest napisane „pies” albo „kot”. Model patrzy na przykłady z poprawną odpowiedzią i dostraja się tak, żeby trafiać. Funkcja straty to kara za każdy błąd. A egzamin zdaje na obrazkach, których nigdy wcześniej nie widział — odpowiedzi wykute na pamięć się nie liczą.

W zależności od tego, czym jest etykieta y, rozróżniamy dwa zadania.

Klasyfikacja

Definicja — klasyfikacja

Etykiety pochodzą ze skończonego zbioru klas: y ∈ {1, …, K}. Typową stratą jest entropia krzyżowa L = −∑k [y = k] log pθ(k | x).

Regresja logistyczna dla dwóch klas: p(y = 1 | x) = σ(w⊤x + b), gdzie σ(z) = 1 / (1 + e−z). Granica decyzyjna to prosta w⊤x + b = 0.

Mówiąc prościej

Klasyfikacja odpowiada na pytanie „do której szufladki to należy”: spam czy nie? Pies, kot czy papuga? Regresja logistyczna przeciąga między klasami linię i o każdym punkcie mówi, z jaką pewnością leży po której stronie.

Na wykresie jest 60 punktów z dwóch klas. Granica celowo zaczyna źle, a spadek gradientu przesuwa ją epoka po epoce, aż rozdzieli klasy:

cecha x₁ (bez jednostki) cecha x₂ (bez jednostki)
Regresja logistyczna uczy się rozdzielać dwie klasy epok: 60 dokładność na danych treningowych: 100 %

Regresja

Definicja — regresja

Etykiety są liczbami rzeczywistymi: y ∈ ℝ. Typową stratą jest błąd średniokwadratowy MSE = (1/n) ∑i (f(xi) − yi)2.

Dla regresji liniowej f(x) = ax + b minimum MSE ma postać zamkniętą: a = ∑(xi − x̄)(yi − ȳ) / ∑(xi − x̄)2, b = ȳ − ax̄ (metoda najmniejszych kwadratów).

Mówiąc prościej

Regresja odpowiada na pytanie „ile”: ile będzie kosztować mieszkanie, jaka będzie jutro temperatura. Regresja liniowa prowadzi przez punkty prostą tak, aby suma kwadratów pionowych odległości — na rysunku przerywanych — była jak najmniejsza.

powierzchnia (znormalizowana 0–1) cena (znormalizowana 0–1)
Regresja liniowa: cena mieszkania według powierzchni

Uczenie nadzorowane napędza większość praktycznych zastosowań: filtry spamu, rozpoznawanie twarzy, diagnostykę ze zdjęć rentgenowskich, wycenę nieruchomości. Ma jednak jeden kosztowny warunek — ktoś musi dane oznaczyć. A to bywa najdroższa część całego projektu.

3. Uczenie nienadzorowane (unsupervised learning)

Definicja — uczenie nienadzorowane

Dany jest tylko zbiór wejść D = {xi}i=1n ⊂ 𝒳, bez etykiet. Szukamy struktury rozkładu P(X): skupień, reprezentacji niskowymiarowej albo samej gęstości p(x).

Mówiąc prościej

Dostajesz pudełko zdjęć bez podpisów i masz je posortować. Nikt ci nie powie, według czego — sam zauważysz, że niektóre są znad morza, a inne z gór. Model szuka podobieństw i wzorców, które są w danych, nawet jeśli nikt ich nie nazwał.

Klasteryzacja: k-średnich

Definicja — k-średnich (k-means)

Podziel punkty na k skupień C1, …, Ck ze środkami μ1, …, μk tak, aby wewnątrzskupieniowa suma kwadratów była minimalna:

J = ∑j=1k ∑x ∈ Cj ‖x − μj‖2.

Algorytm Lloyda przeplata dwa kroki: (1) przypisz każdy punkt do najbliższego środka, (2) przesuń każdy środek do średniej jego punktów. Żaden krok nie zwiększa J, więc algorytm się kończy — ale tylko w minimum lokalnym.

Mówiąc prościej

Stawiasz w pokoju trzy flagi. Każdy człowiek staje przy najbliższej. Potem przenosisz każdą flagę na środek jej gromadki. Ludzie znowu się przegrupowują, flagi znowu się przesuwają — i po kilku rundach nic się już nie zmienia. Gromadki to skupienia.

cecha x₁ (bez jednostki) cecha x₂ (bez jednostki)
k-średnich znajduje trzy skupienia (k = 3) iteracji: 4

Środki (krzyżyki) celowo zaczynają wszystkie w lewym dolnym rogu. Już po pierwszej iteracji rozjeżdżają się do swoich grup, a po czterech iteracjach przestają się ruszać.

Inne zadania uczenia nienadzorowanego: redukcja wymiaru (na przykład PCA rzutuje dane na kilka kierunków, w których różnią się najbardziej — przydatne do wizualizacji i kompresji), wykrywanie anomalii (to, co nie przypomina niczego, co już znamy — oszukańcza płatność, awaria maszyny) i estymacja gęstości.

4. Uczenie półnadzorowane (semi-supervised learning)

Definicja — uczenie półnadzorowane

Dany jest mały oznaczony zbiór DL = {(xi, yi)}i=1l i duży nieoznaczony DU = {xj}j=l+1l+u, gdzie u ≫ l. Cel jest taki sam jak w uczeniu nadzorowanym, ale do jego osiągnięcia wykorzystuje się również DU.

Działa to tylko przy którymś z założeń:

  • gładkość — bliskie punkty mają tę samą etykietę,
  • skupienia — punkty z jednego skupienia mają tę samą etykietę, granica klas biegnie przez rzadkie obszary,
  • rozmaitość — dane leżą na niskowymiarowej powierzchni i odległość należy mierzyć wzdłuż niej.
Mówiąc prościej

Masz dziesięć tysięcy zdjęć, ale opisać zdążyłeś tylko dziesięć. Nieoznaczone zdjęcia mimo to pomagają: pokazują, jak dane „wyglądają” — gdzie są gromadki i którędy między nimi biegnie pustka. Etykiety rozchodzą się potem po gromadkach same.

Propagacja etykiet po grafie

Zbuduj graf, w którym każdy punkt jest połączony ze swoimi k najbliższymi sąsiadami (tutaj k = 4). W każdej rundzie każdy nieoznaczony punkt, który ma oznaczonego sąsiada, dostaje etykietę większości oznaczonych sąsiadów. Powtarzaj, dopóki są nieoznaczone punkty.

Dane to dwa „księżyce” po 40 punktów. Etykietę mają tylko dwa punkty — po jednym w każdym księżycu, wyróżnione obrysem. Pozostałe są szare:

cecha x₁ (bez jednostki) cecha x₂ (bez jednostki)
Propagacja etykiet z dwóch oznaczonych punktów rund: 10 poprawnie oznaczone: 100 %

Etykiety rozchodzą się po księżycach jak pożar po suchej trawie i po 10 rundach wszystkie punkty są oznaczone poprawnie. Gdybyśmy zignorowali nieoznaczone dane i przydzielili każdy punkt tylko według tego, do którego z dwóch oznaczonych punktów ma bliżej, poprawnie byłoby tylko 84%: końce księżyców leżą bliżej obcego oznaczonego punktu niż własnego. Różnicę robi właśnie kształt danych, który znamy tylko dzięki nieoznaczonym punktom.

Podobnie działają pseudoetykiety (self-training): model wytrenowany na małym oznaczonym zbiorze oznacza te nieoznaczone dane, co do których jest najpewniejszy, i uczy się dalej również z nich.

5. Uczenie samonadzorowane (self-supervised learning)

Definicja — uczenie samonadzorowane

Dane są nieoznaczone, D = {xi}, ale z każdego x automatycznie tworzy się parę (x̃, t) = g(x): x̃ to część lub uszkodzona wersja wejścia, a t to, czego w niej brakuje. Model uczy się w sposób nadzorowany na tym zadaniu pretekstowym (pretext task).

Przewidywanie następnego tokenu — tak wstępnie trenuje się duże modele językowe. Tekst to ciąg tokenów x1, …, xT, a maksymalizuje się

∑t=1T log pθ(xt | x1, …, xt−1).

Mówiąc prościej

Nauczyciel tu jest, ale nikt nie musiał mu płacić: odpowiedzi są ukryte wprost w danych. Zakrywasz słowo w zdaniu, a model zgaduje, jakie tam było. Tekst z internetu sam się w ten sposób sprawdza — a model po drodze musi przyswoić sobie gramatykę, fakty i kawałek rozumowania, inaczej zgadywałby źle.

Uczenie samonadzorowane to technicznie uczenie nadzorowane, ale etykiety kosztują zero złotych — i dlatego można je zastosować do całego internetu. Dla obrazów stosuje się podobną sztuczkę: model dostaje dwa różne wycinki tego samego zdjęcia i uczy się, że należą do siebie (uczenie kontrastowe). Wynik, tak zwany model bazowy, dostraja się potem do konkretnego zadania na niewielkiej ilości oznaczonych danych.

6. Uczenie przez wzmacnianie (reinforcement learning)

Definicja — proces decyzyjny Markowa

Środowisko to piątka (S, A, P, R, γ): stany S, akcje A, prawdopodobieństwo przejścia P(s′ | s, a), nagroda R(s, a, s′) i współczynnik dyskontowania γ ∈ [0, 1).

Agent wybiera akcje według polityki π(a | s). Celem jest maksymalizacja oczekiwanego zwrotu G = ∑t≥0 γt rt.

Q-learning uczy się wartości Q(s, a) — oczekiwanego zwrotu po akcji a w stanie s — według reguły

Q(s, a) ← Q(s, a) + α [r + γ maxa′ Q(s′, a′) − Q(s, a)].

Mówiąc prościej

Nikt nie mówi agentowi, jaki ruch jest właściwy. Próbuje, a świat za każdy krok oddaje mu nagrodę albo karę. Stopniowo zapamiętuje, które ruchy gdzie się opłacają — w tym te, które opłacą się dopiero dziesięć kroków później. Współczynnik dyskontowania γ mówi, jak bardzo zależy mu na przyszłych nagrodach w porównaniu z natychmiastowymi.

Agent (pomarańczowy) porusza się po siatce. Każdy krok kosztuje −1, cel daje +10, a pułapka −10; na ściany nie da się wejść. Na początku nic nie wie. Po 600 epizodach Q-learningu (α = 0,5, γ = 0,95, z losową eksploracją w 20% kroków) strzałki pokazują najlepszą wyuczoną akcję w każdym polu:

+10 −10
Wyuczona polityka i droga agenta od startu kroków: 10 zwrot: 1

Agent idzie najkrótszą drogą do celu i omija pułapkę. To, jak się uczył, widać po średnim zwrocie: w pierwszych 50 epizodach wynosił −11,1 (agent błądził i wpadał w pułapkę), w ostatnich 50 już −1,8 — różnicę względem optimum robi losowa eksploracja, której agent podczas treningu nie wyłącza.

0 −20 epizod (numer) średni zwrot (punkty nagrody)
Krzywa uczenia — średni zwrot z ostatnich 25 epizodów

Uczenie przez wzmacnianie stoi za programami, które pokonały mistrzów świata w go, za sterowaniem robotami — a także za dostrajaniem modeli językowych: RLHF (uczenie przez wzmacnianie na podstawie informacji zwrotnej od ludzi) używa jako nagrody modelu wytrenowanego na tym, które odpowiedzi ludzie ocenili lepiej.

7. Inne sposoby podziału

Rodzaj nauczyciela nie jest jedynym kryterium. Kilka innych, które spotkasz:

Definicja — uczenie transferowe (transfer learning)

Parametry θ0 wyuczone na zadaniu źródłowym służą jako start dla zadania docelowego: θ* = argminθ Jcel(θ), szukane od θ0, często tylko w niewielkiej części parametrów (dostrajanie, fine-tuning).

Mówiąc prościej

Kto umie jeździć na rowerze, szybciej nauczy się jeździć na motocyklu. Model, który już „widział świat”, wystarczy douczyć na kilkuset przykładach z twojego zadania.

Definicja — uczenie aktywne

Model sam wybiera, które x ∈ DU dać do oznaczenia — zwykle te o największej niepewności, na przykład o najwyższej entropii H(pθ(· | x)).

Mówiąc prościej

Zamiast żeby człowiek opisywał wszystko, model pyta tylko o to, czego nie rozumie. Ten sam wynik za ułamek pracy.

Definicja — modele generatywne i dyskryminacyjne

Model dyskryminacyjny uczy się bezpośrednio p(y | x) albo granicy decyzyjnej. Model generatywny uczy się rozkładu danych p(x), ewentualnie p(x, y), i potrafi z niego próbkować nowe dane.

Mówiąc prościej

Model dyskryminacyjny odróżni psa od kota. Model generatywny wie, jak wygląda pies, tak dobrze, że potrafi go narysować. Modele językowe i generatory obrazów są generatywne.

A do tego uczenie wsadowe vs. przyrostowe (model trenuje się raz na wszystkich danych albo uczy się na bieżąco z każdego nowego przykładu) oraz modele parametryczne vs. nieparametryczne (stała liczba parametrów jak w regresji logistycznej albo model, który rośnie wraz z danymi, jak k najbliższych sąsiadów).

8. Porównanie

Rodzaj uczeniaDaneSygnałTypowe zadaniaPrzykładowe algorytmy
Nadzorowane(x, y)poprawna odpowiedźklasyfikacja, regresjaregresja logistyczna, drzewa decyzyjne, sieci neuronowe
Nienadzorowanexbrakklasteryzacja, redukcja wymiaru, anomaliek-średnich, PCA, autoenkodery
Półnadzorowanemało (x, y) + dużo xkilka odpowiedziklasyfikacja z drogimi etykietamipropagacja etykiet, pseudoetykiety
Samonadzorowanexwytworzony z danychwstępne trenowanie modeli bazowychprzewidywanie tokenu, maskowanie, uczenie kontrastowe
Przez wzmacnianieinterakcja ze środowiskiemnagrodagry, roboty, sterowanie, RLHFQ-learning, policy gradient, PPO

9. Podsumowanie

  • Rodzaje uczenia różnią się tym, jakie doświadczenie E dostaje model: poprawne odpowiedzi, same dane, trochę jednego i drugiego, odpowiedzi wytworzone z danych albo nagrody za działania.
  • Uczenie nadzorowane jest najprostsze, ale potrzebuje drogich etykiet.
  • W uczeniu nienadzorowanym szuka się struktury; w półnadzorowanym nieoznaczone dane pomagają rozszerzyć kilka etykiet na wszystko.
  • Uczenie samonadzorowane wytwarza etykiety z samych danych — na nim opierają się dzisiejsze modele językowe.
  • Uczenie przez wzmacnianie uczy działać: próbować, zbierać nagrody i myśleć naprzód.

W praktyce rodzaje się łączy. Duży model językowy jest wstępnie trenowany w sposób samonadzorowany, dostrajany w sposób nadzorowany na przykładowych odpowiedziach, a na koniec przez wzmacnianie według ocen ludzi. Trzy rodzaje uczenia w jednym modelu — z którym być może właśnie piszesz.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu