Κοινή χρήση τεχνολογίας

Μηχανικός Αλγορίθμου Τεχνητής Νοημοσύνης (Μεσαίο) Μάθημα 8-PyTorch Νευρωνικό Δίκτυο Βασικά Νευρωνικά Δίκτυα και Κώδικας Λεπτομερής Επεξήγηση

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Γεια σε όλους, είμαι η Wei Xue AI Σήμερα θα σας παρουσιάσω τη λεπτομερή εξήγηση της θεμελίωσης του νευρωνικού δικτύου και του κώδικα του μαθήματος Τεχνητής Νοημοσύνης Algorithm Engineer (Intermediate) 8-PyTorch Neural Network. Το νευρωνικό δίκτυο είναι ένα υπολογιστικό μοντέλο που μιμείται τη σύνδεση νευρώνων στον ανθρώπινο εγκέφαλο και χρησιμοποιείται ευρέως στην αναγνώριση εικόνων, την επεξεργασία φυσικής γλώσσας και άλλα πεδία. Αυτό το άρθρο θα εισαγάγει την έννοια, τη δομή, τα δείγματα, την εκπαίδευση και την αξιολόγηση των νευρωνικών δικτύων, μαζί με τον πλήρη κώδικα με δυνατότητα εκτέλεσης.

Λεπτομερής επεξήγηση των βασικών και του κώδικα νευρωνικών δικτύων

1. Έννοια του νευρωνικού δικτύου

Ένα νευρωνικό δίκτυο αποτελείται από μεγάλο αριθμό κόμβων (ή νευρώνων) και τις ακμές που συνδέουν αυτούς τους κόμβους. Κάθε κόμβος αντιπροσωπεύει έναν νευρώνα και κάθε άκρη αντιπροσωπεύει μια σύνδεση μεταξύ των νευρώνων. Η κύρια λειτουργία του νευρωνικού δικτύου είναι να εξάγει χρήσιμες πληροφορίες από τα δεδομένα μέσω σταθμισμένης άθροισης και μη γραμμικού μετασχηματισμού των δεδομένων εισόδου.

2. Δομή νευρωνικού δικτύου

Τα νευρωνικά δίκτυα συνήθως χωρίζονται σε στρώμα εισόδου, κρυφό στρώμα και στρώμα εξόδου. Το επίπεδο εισόδου λαμβάνει εξωτερικά δεδομένα, το κρυφό επίπεδο επεξεργάζεται τα δεδομένα και το επίπεδο εξόδου εξάγει το τελικό αποτέλεσμα. Οι κόμβοι σε κάθε επίπεδο συνδέονται με κόμβους στο επόμενο επίπεδο και κάθε σύνδεση έχει το αντίστοιχο βάρος.

2.1 Τύπος υπολογισμού νευρωνικών δικτύων

Η έξοδος του νευρωνικού δικτύου μπορεί να υπολογιστεί με τον ακόλουθο τύπο:
a ( l ) = f ( z ( l ) ) a^{(l)} = f(z^{(l)})ένα(μεγάλο)=φά(z(μεγάλο))
z ( l ) = w ( l ) a ( l − 1 ) + b ( l ) z^{(l)} = w^{(l)}a^{(l-1)} + b^{(l )}z(μεγάλο)=w(μεγάλο)ένα(μεγάλο1)+σι(μεγάλο)
σε, a ( l ) a^{(l)}ένα(μεγάλο) Υποδεικνύει το πρώτο llμεγάλο Η έξοδος του στρώματος, z ( l ) z^{(l)}z(μεγάλο) Υποδεικνύει το πρώτο llμεγάλο Το σταθμισμένο αποτέλεσμα άθροισης των επιπέδων, w ( l ) w^{(l)}w(μεγάλο) και b ( l ) b^{(l)}σι(μεγάλο) Αντίστοιχα αντιπροσωπεύουν το llμεγάλο βάρη στρώματος και προκαταλήψεις, f ( ⋅ ) f(cdot)φά() αντιπροσωπεύει τη λειτουργία ενεργοποίησης.
Εισαγάγετε την περιγραφή της εικόνας εδώ

2.2 Κωδικός με δυνατότητα εκτέλεσης

Ακολουθεί ένα παράδειγμα μιας απλής δομής νευρωνικού δικτύου:

import numpy as np
def sigmoid(x):
    return 1 / (1 + np.exp(-x))
def feedforward(X, weights, biases):
    a = X
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        a = sigmoid(z)
    return a
# 定义输入数据
X = np.array([[1, 2], [3, 4]])
# 定义权重和偏置
weights = [np.array([[0.1, 0.2], [0.3, 0.4]]), np.array([[0.5], [0.6]])]
biases = [np.array([0.1, 0.2]), np.array([0.3])]
# 计算输出
output = feedforward(X, weights, biases)
print(output)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. Δείγμα νευρωνικού δικτύου

Ένα δείγμα ενός νευρωνικού δικτύου περιλαμβάνει δεδομένα εισόδου και αντίστοιχες ετικέτες. Κατά τη διάρκεια της εκπαιδευτικής διαδικασίας, το νευρωνικό δίκτυο προσαρμόζει συνεχώς τα βάρη και τις προκαταλήψεις για να κάνει την έξοδο όσο το δυνατόν πιο κοντά στην ετικέτα.

3.1 Λειτουργία απώλειας

Ο στόχος εκπαίδευσης των νευρωνικών δικτύων είναι η ελαχιστοποίηση της συνάρτησης απώλειας Οι συνήθως χρησιμοποιούμενες συναρτήσεις απώλειας περιλαμβάνουν το μέσο τετραγωνικό σφάλμα (MSE) και την απώλεια διασταυρούμενης εντροπίας. Ο τύπος για το μέσο τετραγωνικό σφάλμα είναι ο ακόλουθος:
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ( i ) − a ( i ) ) 2 J(w, b) = frac{1}{2m}sum_{i=1}^{m }(y^{(i)} - a^{(i)})^2J(w,σι)=2Μ1Εγώ=1Μ(y(Εγώ)ένα(Εγώ))2
σε, mmΜ αντιπροσωπεύει τον αριθμό των δειγμάτων, y (i ) y^{(i)}y(Εγώ) και a (i) a^{(i)}ένα(Εγώ) Αντίστοιχα αντιπροσωπεύουν το iiΕγώ ετικέτες και προβλεπόμενες τιμές δειγμάτων.

3.2 Κωδικός με δυνατότητα εκτέλεσης

Ακολουθεί ένα απλό παράδειγμα δημιουργίας δείγματος και υπολογισμού απωλειών:

import numpy as np
def mse_loss(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)
# 定义标签
y_true = np.array([[1], [0]])
# 计算损失
loss = mse_loss(y_true, output)
print(loss)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4. Εκπαίδευση νευρωνικών δικτύων

Η διαδικασία εκπαίδευσης του νευρωνικού δικτύου περιλαμβάνει τη διάδοση προς τα εμπρός και την αντίστροφη διάδοση. Η μπροστινή διάδοση υπολογίζει την έξοδο του νευρωνικού δικτύου και η αντίστροφη διάδοση υπολογίζει την κλίση της συνάρτησης απώλειας σε σχέση με τα βάρη και τις προκαταλήψεις και ενημερώνει τα βάρη και τις προκαταλήψεις.

4.1 Πίσω διάδοση

Ο αλγόριθμος backpropagation υπολογίζει τις κλίσεις μέσω του κανόνα της αλυσίδας.Για τον πρώτο llμεγάλο βάρος στρώματος w ( l ) w^{(l)}w(μεγάλο), η κλίση του μπορεί να εκφραστεί ως:
∂ J ∂ w ( l ) = a ( l − 1 ) ⋅ ( f ′ ( z ( l ) ) ⋅ δ ( l ) ) frac{μερική J}{μερική w^{(l)}} = a^{( l-1)} cdot (f'(z^{(l)}) cdot delta^{(l)})w(μεγάλο)J=ένα(μεγάλο1)(φά(z(μεγάλο))δ(μεγάλο))
σε, δ ( l ) δέλτα^{(l)}δ(μεγάλο) Υποδεικνύει το πρώτο llμεγάλο σφάλμα στρώσης, f ′ ( ⋅ ) f'(cdot)φά() αντιπροσωπεύει την παράγωγο της συνάρτησης ενεργοποίησης.

4.2 Κώδικας για εκπαίδευση νευρωνικών δικτύων

Ακολουθεί ένα απλό παράδειγμα εκπαίδευσης νευρωνικών δικτύων:

import numpy as np
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))
def backpropagation(X, y_true, weights, biases):
    gradients_w = [np.zeros(w.shape) for w in weights]
    gradients_b = [np.zeros(b.shape) for b in biases]
    # 前向传播
    a = X
    activations = [a]
    zs = []
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        zs.append(z)
        a = sigmoid(z)
        activations.append(a)
    # 计算输出层误差
    delta = activations[-1] - y_true
    gradients_b[-1] = delta
    gradients_w[-1] = np.dot(activations[-2].T, delta)
    # 反向传播
    for l in range(2, len(weights) + 1):
        z = zs[-l]
        sp = sigmoid_derivative(z)
        delta = np.dot(delta, weights[-l + 1].T) * sp
        gradients_b[-l] = delta
        gradients_w[-l] = np.dot(activations[-l - 1].T, delta)
    return gradients_w, gradients_b
# 定义学习率
learning_rate = 0.1
# 进行一次梯度下降
gradients_w, gradients_b = backpropagation(X, y_true, weights, biases)
# 更新权重和偏置
for w, grad_w in zip(weights, gradients_w):
    w -= learning_rate * grad_w
for b, grad_b in zip(biases, gradients_b):
    b -= learning_rate * grad_b
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

5. Αξιολόγηση Νευρωνικών Δικτύων

Η αξιολόγηση των νευρωνικών δικτύων συνήθως γίνεται με τον υπολογισμό της τιμής της συνάρτησης ακρίβειας ή απώλειας στο σύνολο δοκιμής. Η ακρίβεια αναφέρεται στην αναλογία του αριθμού των δειγμάτων που προβλέπονται σωστά από το μοντέλο προς τον συνολικό αριθμό των δειγμάτων.

5.1 Ακρίβεια

Ο τύπος υπολογισμού για την ακρίβεια έχει ως εξής:
Ακρίβεια = Αριθμός σωστών προβλέψεων Συνολικός αριθμός προβλέψεων κείμενο{Accuracy} = frac{text{Αριθμός σωστών προβλέψεων}}{text{Συνολικός αριθμός προβλέψεων}}Ακρίβεια=Συνολικός αριθμός προβλέψεωνΑριθμός σωστών προβλέψεων

5.2 Εφαρμογή κώδικα

Ακολουθεί ένα απλό παράδειγμα αξιολόγησης νευρωνικών δικτύων:

def predict(X, weights, biases):
    a = X
    for w, b in zip(weights, biases):
        z = np.dot(a, w) + b
        a = sigmoid(z)
    return np.round(a)
# 定义测试数据
X_test = np.array([[2, 3], [4, 5]])
# 进行预测
predictions = predict(X_test, weights, biases)
print(predictions)
# 计算准确率
y_test = np.array([[1], [0]])
accuracy = np.mean(predictions == y_test)
print("Accuracy:", accuracy)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Συνοψίζω

Σε αυτό το άρθρο, εφαρμόσαμε ένα απλό νευρωνικό δίκτυο, που περιλαμβάνει τη διάδοση προς τα εμπρός, τη διάδοση προς τα πίσω, την κάθοδο κλίσης και τη διαδικασία αξιολόγησης. Αν και αυτό το δίκτυο είναι απλό, δείχνει τις βασικές αρχές και τις μεθόδους υλοποίησης των νευρωνικών δικτύων. Σε πρακτικές εφαρμογές, η δομή των νευρωνικών δικτύων θα είναι πιο περίπλοκη, περιλαμβάνοντας περισσότερα επίπεδα και κόμβους, καθώς και πιο προηγμένους αλγόριθμους βελτιστοποίησης και τεχνικές τακτοποίησης. Επιπλέον, τα σύγχρονα πλαίσια βαθιάς μάθησης (όπως το TensorFlow και το PyTorch) παρέχουν πιο αποτελεσματικές λειτουργίες υλοποίησης και αυτόματης διαφοροποίησης, κάνοντας την κατασκευή και την εκπαίδευση των νευρωνικών δικτύων πιο βολική.