Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Modeltraining | Neuraal Netwerk Vanaf Nul
Introductie tot Neurale Netwerken met Python

Modeltraining

Veeg om het menu te tonen

Het trainen van een neuraal netwerk omvat een iteratief proces waarbij het model zich geleidelijk verbetert door zijn gewichten en biases aan te passen om de verliesfunctie te minimaliseren. Dit proces staat bekend als gradient-based optimization en volgt een gestructureerd algoritme.

Algemeen algoritme

De dataset wordt eerst meerdere keren door het netwerk gehaald in een lus, waarbij elke volledige doorgang een epoch wordt genoemd. Tijdens elke epoch worden de gegevens geschud om te voorkomen dat het model patronen leert op basis van de volgorde van de trainingsvoorbeelden. Schudden helpt om willekeur te introduceren, wat leidt tot een robuuster model.

Voor elk trainingsvoorbeeld voert het model forward propagation uit, waarbij invoer laag voor laag door het netwerk gaat en een output wordt geproduceerd. Deze output wordt vervolgens vergeleken met de werkelijke doelwaarde om het verlies te berekenen.

Schudden en forward propagation

Vervolgens past het model backpropagation toe en werkt het de gewichten en biases in elke laag bij om het verlies te verminderen.

Dit proces wordt herhaald gedurende meerdere epochs, waardoor het netwerk zijn parameters geleidelijk kan verfijnen. Naarmate de training vordert, leert het netwerk steeds nauwkeurigere voorspellingen te doen. Het zorgvuldig afstemmen van hyperparameters zoals de learning rate is echter cruciaal om stabiele en efficiënte training te waarborgen.

Epoch

De learning rate (α\alpha) bepaalt de stapgrootte bij het bijwerken van de gewichten. Als deze te hoog is, kan het model de optimale waarden overschrijden en niet convergeren. Als deze te laag is, verloopt de training traag en kan het model vastlopen in een suboptimale oplossing. Het kiezen van een geschikte learning rate zorgt voor een balans tussen snelheid en stabiliteit tijdens de training. Typische waarden liggen tussen 0.001 en 0.1, afhankelijk van het probleem en de grootte van het netwerk.

De onderstaande grafiek laat zien hoe een geschikte learning rate ervoor zorgt dat het verlies gestaag afneemt in een optimaal tempo:

Verschillende leersnelheden

Tot slot speelt stochastische gradient descent (SGD) een cruciale rol in de efficiëntie van het trainen. In plaats van gewichtsaanpassingen te berekenen na verwerking van de volledige dataset, werkt SGD de parameters bij na elk individueel voorbeeld. Dit maakt het trainen sneller en introduceert kleine variaties in de updates, wat het model kan helpen lokale minima te ontwijken en tot een betere algehele oplossing te komen.

De fit()-methode

De fit()-methode in de Perceptron-klasse is verantwoordelijk voor het trainen van het model met behulp van stochastische gradient descent.

def fit(self, training_data, labels, epochs, learning_rate):
    # Iterating over multiple epochs
    for epoch in range(epochs):
        # Shuffling the data  
        indices = np.random.permutation(training_data.shape[0])
        training_data = training_data[indices]
        labels = labels[indices]
        # Iterating through each training example
        for i in range(training_data.shape[0]):
            inputs = training_data[i, :].reshape(-1, 1)
            target = labels[i, :].reshape(-1, 1)

            # Forward propagation
            output = ...

            # Computing the gradient of the loss function w.r.t. output
            da = ...

            # Backward propagation through all layers
            for layer in self.layers[::-1]:
                da = ...
Codebeschrijving
expand arrow
for epoch in range(epochs):

Doorloopt het trainingsproces voor het opgegeven aantal epochs. Elke epoch staat voor één volledige doorgang door de dataset.

indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]

Schudt de trainingsdata en bijbehorende labels door elkaar vóór elke epoch. Dit voorkomt dat het model patronen leert op basis van de volgorde van de data.

for i in range(training_data.shape[0]):

Itereert door elk trainingsvoorbeeld. Omdat SGD wordt gebruikt, worden de gewichten bijgewerkt na het verwerken van elk individueel voorbeeld.

inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)

Haalt het i-de trainingsvoorbeeld en het bijbehorende label op. Vormt deze om tot een n x 1 matrix zodat matrixbewerkingen correct werken.

output = ...

Voert forward propagatie uit om de voorspelde output te berekenen.

da = ...

Berekent de gradiënt van de verliesfunctie ten opzichte van de outputactivatie. Dit dient als de startgradiënt voor backpropagatie.

for layer in self.layers[::-1]:
    da = ...

Voert backward propagatie uit door alle lagen in omgekeerde volgorde. Elke laag werkt zijn gewichten en biases bij met behulp van gradient descent.

question mark

Hoe wordt één volledige doorgang door de gehele trainingsdataset genoemd?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 9

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 2. Hoofdstuk 9
some-alt