Kontrolni test: veštačka inteligencija
Test proverava gradivo celog kursa: šta je AI i kako je nastala, kako mašina uči, kako se AI programira, kako radi na uređajima i kakva su njena etička pitanja. Ima dva dela: test znanja sa 20 pitanja i dva praktična zadatka u Pythonu.
Šta treba znati
- razliku između običnog programa i mašinskog učenja; šta je model i šta su podaci za učenje i proveru
- važne trenutke iz istorije AI i šta proverava Tjuringov test
- vrste AI (uska i opšta, generativna) i kako rade četbotovi (predviđanje sledeće reči)
- kako uče neuronske mreže i zašto podaci mogu da budu pristrasni
- algoritam k najbližih suseda, perceptron i stablo odlučivanja
- zašto se na ESP32 i micro:bit-u koriste mali modeli (TinyML)
- svest, etika, lažni sadržaji, privatnost i budućnost poslova
Kako izgleda test
- Trajanje: dva školska časa – prvi za test znanja, drugi za praktične zadatke (ili kod kuće, kao vežba).
- Test znanja: 20 pitanja sa ponuđenim odgovorima, svako po 2 poena.
- Praktični zadaci: 2 zadatka po 10 poena. Za pun broj poena program mora da radi i da bude pregledan, sa komentarima.
| Poeni (od 60) | 0–23 | 24–32 | 33–42 | 43–51 | 52–60 |
|---|---|---|---|---|---|
| Ocena | 1 | 2 | 3 | 4 | 5 |
Skala je predlog za samostalnu proveru; nastavnik može da je prilagodi. Učenici koji nisu radili modul 3 mogu da rade samo test znanja (skala se tada deli na pola: 40 poena).
Test znanja (20 pitanja)
Za svako pitanje izaberi jedan odgovor i klikni „Proveri“. Svaki tačan odgovor nosi 2 poena.
Otvori test
Test znanja: veštačka inteligencija (20 pitanja)
1. Po čemu se mašinsko učenje razlikuje od običnog programa?
2. Ko je 1950. postavio pitanje „Mogu li mašine da misle?“
3. Šta proverava Tjuringov test?
4. Šta je „AI zima“?
5. Koji primer je uska (specijalizovana) AI?
6. Šta je model u mašinskom učenju?
7. Zašto se podaci dele na deo za učenje i deo za proveru?
8. Šta se dešava ako u podacima za učenje skoro nema primera jedne grupe?
9. Šta radi jedan veštački neuron?
10. Šta se menja dok neuronska mreža uči?
11. Kako četbot pravi odgovor?
12. Zašto četbot ponekad „izmišlja“?
13. Kako algoritam k-NN odlučuje?
14. Šta perceptron NE može da nauči sa jednim neuronom?
15. Zašto se za ESP32 često bira stablo odlučivanja?
16. Šta je TinyML?
17. Šta je deepfake?
18. Šta od ovoga ne treba pisati četbotu?
19. Da li to što četbot napiše „srećan sam“ dokazuje da oseća?
20. Ko je odgovoran kada AI sistem pogreši?
Praktični zadaci
Bodovanje: program radi 6 poena, tačan odgovor na pitanje uz zadatak 2 poena, pregledan kod sa komentarima 2 poena.
- k najbližih suseda (bez biblioteka). Date su liste:
Svaki primer je (sati učenja nedeljno, sati spavanja po noći) i da li je učenik položio test. Napiši funkcijuucenje = [ ((2, 6), "nije"), ((1, 7), "nije"), ((3, 5), "nije"), ((2, 8), "nije"), ((4, 6), "nije"), ((6, 8), "jeste"), ((7, 7), "jeste"), ((5, 9), "jeste"), ((8, 8), "jeste"), ((6, 7), "jeste"), ] provera = [((3, 7), "nije"), ((7, 9), "jeste"), ((5, 6), "jeste"), ((1, 9), "nije")]predvidi(tacka, k=3)koja vraća odgovor većine odknajbližih primera, i izračunaj tačnost na listiprovera. Pitanje: na kom primeru model greši i zašto? - Stablo odlučivanja za učionicu. Iz 13 merenja (temperatura, vlažnost → hladno, prijatno, toplo, zagušljivo) nauči stablo odlučivanja dubine najviše 3 i ispiši njegova pravila. Zatim:
- predvidi stanje za merenja (19,5 °C, 50 %), (22 °C, 76 %) i (26 °C, 40 %);
- prepiši naučeno stablo kao običnu funkciju
stanje(temperatura, vlaznost)saif–else(ko je radio modul 4, može i kao C++ funkciju za ESP32).
X = [[17.5, 50], [18.2, 45], [19.0, 60], [20.5, 48], [21.0, 52], [22.3, 47], [23.0, 55], [21.8, 74], [22.5, 78], [20.9, 80], [25.2, 50], [26.8, 45], [27.5, 60]] y = ["hladno", "hladno", "hladno", "prijatno", "prijatno", "prijatno", "prijatno", "zagušljivo", "zagušljivo", "zagušljivo", "toplo", "toplo", "toplo"]
Rešenje 1: k najbližih suseda
# Kontrolni test, zadatak 1: k-NN bez biblioteka
# Podaci: (sati učenja nedeljno, sati spavanja po noći) -> da li je učenik položio test
import math
ucenje = [
((2, 6), "nije"), ((1, 7), "nije"), ((3, 5), "nije"),
((2, 8), "nije"), ((4, 6), "nije"),
((6, 8), "jeste"), ((7, 7), "jeste"), ((5, 9), "jeste"),
((8, 8), "jeste"), ((6, 7), "jeste"),
]
provera = [((3, 7), "nije"), ((7, 9), "jeste"),
((5, 6), "jeste"), ((1, 9), "nije")]
def rastojanje(a, b):
"""Euklidsko rastojanje između dve tačke."""
return math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)
def predvidi(tacka, k=3):
"""Vrati odgovor koji ima većina od k najbližih primera."""
najblizi = sorted(ucenje, key=lambda p: rastojanje(tacka, p[0]))[:k]
glasovi = {}
for _, odgovor in najblizi:
glasovi[odgovor] = glasovi.get(odgovor, 0) + 1
return max(glasovi, key=glasovi.get)
tacno = 0
for tacka, stvarno in provera:
p = predvidi(tacka)
print(tacka, "predviđeno:", p, "| stvarno:", stvarno)
if p == stvarno:
tacno += 1
print("Tačnost:", tacno, "od", len(provera))
Ispis programa:
(3, 7) predviđeno: nije | stvarno: nije
(7, 9) predviđeno: jeste | stvarno: jeste
(5, 6) predviđeno: nije | stvarno: jeste
(1, 9) predviđeno: nije | stvarno: nije
Tačnost: 3 od 4
Odgovor na pitanje: model greši za (5, 6). Među tri najbliža primera dva su „nije“ ((4, 6) i (3, 5)), a samo jedan „jeste“ ((6, 7)), pa većina kaže „nije“. Tačka je na granici između grupa, a primera za učenje je malo – sa više podataka ili drugačijim k rezultat bi mogao da bude drugačiji.
Rešenje 2: stablo odlučivanja
# Kontrolni test, zadatak 2: stablo odlučivanja za učionicu
from sklearn.tree import DecisionTreeClassifier, export_text
# (temperatura u °C, vlažnost u %) -> stanje učionice
X = [[17.5, 50], [18.2, 45], [19.0, 60], [20.5, 48], [21.0, 52], [22.3, 47],
[23.0, 55], [21.8, 74], [22.5, 78], [20.9, 80], [25.2, 50], [26.8, 45], [27.5, 60]]
y = ["hladno", "hladno", "hladno", "prijatno", "prijatno", "prijatno",
"prijatno", "zagušljivo", "zagušljivo", "zagušljivo", "toplo", "toplo", "toplo"]
model = DecisionTreeClassifier(max_depth=3, random_state=0) # malo stablo – lako se čita
model.fit(X, y)
print(export_text(model, feature_names=["temperatura", "vlaznost"]))
for merenje in [[19.5, 50], [22.0, 76], [26.0, 40]]:
print(merenje, "->", model.predict([merenje])[0])
Ispis programa:
|--- vlaznost <= 67.00
| |--- temperatura <= 19.75
| | |--- class: hladno
| |--- temperatura > 19.75
| | |--- temperatura <= 24.10
| | | |--- class: prijatno
| | |--- temperatura > 24.10
| | | |--- class: toplo
|--- vlaznost > 67.00
| |--- class: zagušljivo
[19.5, 50] -> hladno
[22.0, 76] -> zagušljivo
[26.0, 40] -> toplo
Isto stablo, prepisano kao funkcija:
# Kontrolni test, zadatak 2b: stablo prepisano kao obična funkcija (if – else)
def stanje(temperatura, vlaznost):
if vlaznost <= 67:
if temperatura <= 19.75:
return "hladno"
elif temperatura <= 24.1:
return "prijatno"
else:
return "toplo"
else:
return "zagušljivo"
print(stanje(19.5, 50), stanje(22.0, 76), stanje(26.0, 40))
Ispis programa:
hladno zagušljivo toplo
Varijanta za ESP32 (C++):
// Kontrolni test, zadatak 2b (varijanta za ESP32): ista pravila kao C++ funkcija
const char* stanje(float temperatura, float vlaznost) {
if (vlaznost <= 67) {
if (temperatura <= 19.75) return "hladno";
else if (temperatura <= 24.1) return "prijatno";
else return "toplo";
}
return "zagušljivo";
}
Provera: funkcija daje isti odgovor kao naučeni model na 3 250 merenja (temperature od 15 do 30 °C, vlažnost od 30 do 94 %).
Odgovor na pitanje: stablo ima samo nekoliko poređenja, pa staje u malu memoriju ESP32 i radi trenutno; čovek može da ga pročita i proveri. Velika neuronska mreža ima hiljade težina i traži mnogo više memorije i računanja (vidi TinyML).
Posle testa
Ako si negde izgubio poene, ponovi tu lekciju:
- osnove i istorija – Šta je veštačka inteligencija, Istorija AI, Tjuringov test
- učenje i podaci – Kako mašina uči, Podaci – hrana za AI, Neuronske mreže, Kako rade četbotovi
- programiranje – k-NN, Perceptron, Model iz Pythona na ESP32
- društvo – Da li AI ima svest?, Etika i bezbednost AI, Budućnost AI
Čestitamo – završio si kurs! Sledeći korak je završni projekat, ako ga još nisi uradio.
