Objectius del Tema
En aquesta secció, aprendràs:
- Què són les xarxes neuronals.
- La inspiració biològica darrere de les xarxes neuronals.
- Els components bàsics d'una xarxa neuronal.
- Com funcionen les xarxes neuronals a nivell conceptual.
Què són les Xarxes Neuronals?
Les xarxes neuronals són un tipus de model d'aprenentatge automàtic inspirat en el cervell humà. Són especialment útils per a tasques com la classificació d'imatges, el reconeixement de veu i la traducció automàtica.
Inspiració Biològica
Les xarxes neuronals estan inspirades en la manera com les neurones del cervell humà processen la informació. Cada neurona rep senyals d'altres neurones, processa aquesta informació i envia un senyal de sortida a altres neurones.
Components Bàsics d'una Xarxa Neuronal
Una xarxa neuronal artificial (ANN) està composta per diverses capes de neurones artificials, també conegudes com a nodes o unitats. Les capes principals són:
- Capa d'Entrada (Input Layer): Rep les dades d'entrada.
- Capes Ocultes (Hidden Layers): Processen les dades d'entrada a través de múltiples transformacions.
- Capa de Sortida (Output Layer): Proporciona el resultat final.
Funcionament d'una Xarxa Neuronal
El funcionament d'una xarxa neuronal es pot desglossar en els següents passos:
-
Propagació Endavant (Forward Propagation):
- Les dades d'entrada es passen a través de la xarxa capa per capa.
- Cada neurona aplica una funció d'activació a la seva entrada ponderada per generar una sortida.
-
Funció de Pèrdua (Loss Function):
- La sortida de la xarxa es compara amb la sortida desitjada per calcular l'error o pèrdua.
-
Propagació Enrere (Backpropagation):
- L'error es propaga enrere a través de la xarxa per ajustar els pesos de les connexions.
- Aquest procés es repeteix fins que la pèrdua es minimitza.
Exemple Pràctic: Xarxa Neuronal Simple amb PyTorch
A continuació, crearem una xarxa neuronal simple utilitzant PyTorch.
Instal·lació de PyTorch
Si encara no tens PyTorch instal·lat, pots fer-ho amb la següent comanda:
Codi d'Exemple
import torch
import torch.nn as nn
import torch.optim as optim
# Definim la xarxa neuronal
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(2, 2) # Capa d'entrada a capa oculta
self.fc2 = nn.Linear(2, 1) # Capa oculta a capa de sortida
def forward(self, x):
x = torch.sigmoid(self.fc1(x))
x = torch.sigmoid(self.fc2(x))
return x
# Creem una instància de la xarxa
net = SimpleNN()
# Definim una funció de pèrdua i un optimitzador
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# Dades d'exemple
inputs = torch.tensor([[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]])
targets = torch.tensor([[0.0], [1.0], [1.0], [0.0]])
# Entrenament de la xarxa
for epoch in range(10000):
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
# Prova de la xarxa
print("Sortides després de l'entrenament:")
print(net(inputs))Explicació del Codi
-
Definició de la Xarxa:
SimpleNNés una classe que hereta denn.Module.__init__defineix les capes de la xarxa.forwarddefineix el flux de dades a través de la xarxa.
-
Instància de la Xarxa:
net = SimpleNN()crea una instància de la xarxa.
-
Funció de Pèrdua i Optimitzador:
criterion = nn.MSELoss()defineix la funció de pèrdua com l'error quadràtic mitjà.optimizer = optim.SGD(net.parameters(), lr=0.01)defineix l'optimitzador com el descens de gradient estocàstic.
-
Entrenament:
- En cada època, es calcula la sortida de la xarxa, es calcula la pèrdua, es fa la propagació enrere i s'actualitzen els pesos.
-
Prova:
- Després de l'entrenament, es mostren les sortides de la xarxa per a les dades d'entrada.
Exercici Pràctic
Crea una xarxa neuronal amb una capa d'entrada de 3 neurones, una capa oculta de 4 neurones i una capa de sortida de 1 neurona. Utilitza la funció d'activació ReLU per a la capa oculta i la funció d'activació Sigmoid per a la capa de sortida. Entrena la xarxa amb dades d'exemple i mostra les sortides després de l'entrenament.
Solució
import torch
import torch.nn as nn
import torch.optim as optim
# Definim la xarxa neuronal
class CustomNN(nn.Module):
def __init__(self):
super(CustomNN, self).__init__()
self.fc1 = nn.Linear(3, 4) # Capa d'entrada a capa oculta
self.fc2 = nn.Linear(4, 1) # Capa oculta a capa de sortida
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.sigmoid(self.fc2(x))
return x
# Creem una instància de la xarxa
net = CustomNN()
# Definim una funció de pèrdua i un optimitzador
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# Dades d'exemple
inputs = torch.tensor([[0.0, 0.0, 0.0], [0.0, 1.0, 1.0], [1.0, 0.0, 1.0], [1.0, 1.0, 0.0]])
targets = torch.tensor([[0.0], [1.0], [1.0], [0.0]])
# Entrenament de la xarxa
for epoch in range(10000):
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
# Prova de la xarxa
print("Sortides després de l'entrenament:")
print(net(inputs))Resum
En aquesta secció, hem introduït les xarxes neuronals, la seva inspiració biològica i els components bàsics. També hem vist com crear una xarxa neuronal simple amb PyTorch i hem proporcionat un exercici pràctic per reforçar els conceptes apresos. En la següent secció, aprendrem a crear una xarxa neuronal simple amb PyTorch.
PyTorch: De Principiant a Avançat
Mòdul 1: Introducció a PyTorch
- Què és PyTorch?
- Configuració de l'Entorn
- Operacions Bàsiques amb Tensor
- Autograd: Diferenciació Automàtica
Mòdul 2: Construcció de Xarxes Neuronals
- Introducció a les Xarxes Neuronals
- Creació d'una Xarxa Neuronal Simple
- Funcions d'Activació
- Funcions de Pèrdua i Optimització
Mòdul 3: Entrenament de Xarxes Neuronals
- Càrrega i Preprocessament de Dades
- Bucle d'Entrenament
- Validació i Prova
- Desament i Càrrega de Models
Mòdul 4: Xarxes Neuronals Convolucionals (CNNs)
- Introducció a les CNNs
- Construcció d'una CNN des de Zero
- Aprenentatge per Transferència amb Models Preentrenats
- Ajust Fi de les CNNs
Mòdul 5: Xarxes Neuronals Recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN des de Zero
- Xarxes de Memòria a Llarg i Curt Termini (LSTM)
- Unitats Recurrents Gated (GRUs)
Mòdul 6: Temes Avançats
- Xarxes Generatives Adversàries (GANs)
- Aprenentatge per Reforç amb PyTorch
- Desplegament de Models PyTorch
- Optimització del Rendiment
