Tiefere Einblicke in meine KI-Projekte. Code, Architektur, Lernfortschritt und Roadmaps.
Projekte erkundenKlassisches Pong, aber der Gegner ist eine KI die von Null lernt. Keine vortrainierten Modelle, keine Libraries für Machine Learning – nur Python, Tkinter und mathematische Grundprinzipien des Reinforcement Learning.
Novi startet komplett ahnungslos. Sie weiß nicht, dass sie den Ball treffen muss. Sie weiß nicht, dass sie punkten soll. Sie weiß nur: Es gibt einen Zustand (Ball-Position, eigene Position) und eine Aktion (hoch, runter, stehen bleiben). Durch Trial-and-Error baut sie eine Q-Table auf und lernt, welche Aktionen in welchen Zuständen Belohnung bringen.
class NoviAgent:
def __init__(self):
self.q_table = {} # State-Action Werte
self.alpha = 0.1 # Learning rate
self.gamma = 0.95 # Discount factor
self.epsilon = 1.0 # Exploration rate
def get_action(self, state):
if random.random() < self.epsilon:
return random.choice(['UP', 'DOWN', 'STAY'])
return self.q_table.get(state, {}).argmax()
def update(self, state, action, reward, next_state):
old_value = self.q_table[state][action]
next_max = self.q_table[next_state].max()
# Q-Learning Formel
new_value = old_value + self.alpha * (reward + self.gamma * next_max - old_value)
self.q_table[state][action] = new_value
Es werden die Koordinaten von beiden Schlägern und dem Ball sowie die Geschwindigkeit des Balls an das neuronale Netzwerk gesendet.
Novi wird immer sicherer mit ihren Entscheidungen. Sie lernt, wie sie auf bestimmte Situationen reagieren soll.
Wenn der Ball getroffen wird, gibt es einen Punkt. Wenn nicht, und der Ball geht bei Novi ins Aus, gibt es zehn Punkte Abzug. Wenn der Ball beim Gegner ins Aus geht, gibt es zehn Punkte. Novi will immer nur mehr Punkte. Sie reagiert auf gewisse Situationen nur so, dass sie die meisten Punkte bekommt.
Sie können Novi, das Model, das Sie trainieren, als Binärdatei speichern und nach Lust und Laune weiter trainieren oder nur spielen lassen.
Warum GPT-4 nutzen, wenn man selbst tainiren kann? Novi Chat ist ein kleines Language Model, trainiert auf meinen eigenen Documenten. Es soll nicht die Welt ersetzen, sondern lernen.
2.1 Millionen Parameter. Kein MoE, kein RLHF, kein Alignment. Nur ein simpler Decoder-only Transformer, der versucht, den nächsten Token vorherzusagen. Das sind Ideen für ein Weiteres Projekt in bau.
class NoviTransformer(nn.Module):
def __init__(self, vocab_size, d_model=256, n_layers=8):
super().__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.pos_encoding = PositionalEncoding(d_model)
self.blocks = nn.ModuleList([
TransformerBlock(d_model, n_heads=4)
for _ in range(n_layers)
])
self.norm = nn.LayerNorm(d_model)
self.lm_head = nn.Linear(d_model, vocab_size)
def forward(self, x):
x = self.embedding(x) + self.pos_encoding(x)
for block in self.blocks:
x = block(x)
return self.lm_head(self.norm(x))
15MB reiner Text. Meine Notizen seit 2020, Chat-Exports, Tagebucheinträge. Persönlich, aber anonymisiert.
Standard CrossEntropy, aber mit Label Smoothing (0.1). Verhindert Overconfidence in frühen Epochen.
AdamW, lr=3e-4, cosine decay, warmup 100 steps. Gradient clipping bei 1.0.
Alle 1000 steps ein Checkpoint. Training läuft auf meiner RTX 3060, ~2h pro Epoch.
Hast du nicht Gebrauchte Rechenleistung? Teile sie und Lasse LLM (AI Sprachmodele) aus deinem Gerät Berechen Für andere. Und wenn Du keine hast nutze diese von anderen.
class NoviNet:
def backward(self, X, y, learning_rate):
m = X.shape[0]
# Output layer gradients
dZ3 = self.A3 - y
dW3 = (self.A2.T @ dZ3) / m
db3 = np.sum(dZ3, axis=0, keepdims=True) / m
# Hidden layer 2
dA2 = dZ3 @ self.W3.T
dZ2 = dA2 * relu_derivative(self.Z2)
dW2 = (self.A1.T @ dZ2) / m
# Hidden layer 1
dA1 = dZ2 @ self.W2.T
dZ1 = dA1 * relu_derivative(self.Z1)
dW1 = (X.T @ dZ1) / m
# Update weights (Gradient Descent)
self.W1 -= learning_rate * dW1
self.W2 -= learning_rate * dW2
self.W3 -= learning_rate * dW3
Keine Abhängigkeiten außer NumPy für Matrix-Operationen. Alles andere ist pure Python.
Implementiert mit velocity-Termen. Beschleunigt Konvergenz um ~30%.
Gewichte werden mit sqrt(2/n_in) initialisiert. Verhindert vanishing gradients.
Matplotlib-Integration zeigt Loss-Curve und erste-layer weights während des Trainings.
Haben Sie zu viele Fotos, die Sie nicht sortiert haben? Novi Vision hilft Ihnen dabei. Die Software erkennt Motive auf den Bildern und erstellt Ordner mit passenden Namen und Unterordnern.
Es ist noch nicht perfekt, aber es funktioniert: Das KI-System ist mit LLM Studio und dem LLM Minestrl 3 14b mit Vision verbunden, sodass es Bilder erkennt, Namen und Ordner erstellt. Das Script, das die Ordner erstellt, ist mit der API von LLM Studio verbunden.
Zum Erkennen der Fotos wird Minestralai-3 14b Reasoning verwendet, ein kleines, aber sehr zuverlässiges Modell unter 10 GB..
Novi Vision erstellt Ordner für alles, was sie im Bild erkennt, z. B. eine Katze. Dann geht das in den Ordner „Tiere” und dort in den Unterordner „Katzen”.
Da alles lokal berechnet wird, sind Ihre Fotos immer auf Ihrem Rechner sicher gespeichert. Wenn Sie das Skript jedoch mit einer anderen API als der von LM Studio verwenden, werden Ihre Fotos in ein Rechenzentrum gesendet.
Wenn Sie die Cloud-Option wählen, muss Ihnen bewusst sein, dass Ihre Bilder und Fotos in einem Rechenzentrum verarbeitet werden. Diese Option wurde im Moment noch nicht getestet.
Diffusion Model für simple Zeichnungen. Input: Doodle. Output: Vervollständigtes, ästhetisches Bild. Denke "Scribble to Image" aber selbst gebaut.
Reading: DDPM Paper, Ho et al. 2020
Generative Audio für Events. Input: Stimmung (energetic, chill, romantic). Output: 30-sekündiger Soundscape, lizenzfrei, passend zur Lichtshow.
Researching: AudioLDM, Jukebox