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.forward
defineix 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