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:

  1. Capa d'Entrada (Input Layer): Rep les dades d'entrada.
  2. Capes Ocultes (Hidden Layers): Processen les dades d'entrada a través de múltiples transformacions.
  3. 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:

  1. 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.
  2. Funció de Pèrdua (Loss Function):

    • La sortida de la xarxa es compara amb la sortida desitjada per calcular l'error o pèrdua.
  3. 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:

pip install torch

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

  1. Definició de la Xarxa:

    • SimpleNN és una classe que hereta de nn.Module.
    • __init__ defineix les capes de la xarxa.
    • forward defineix el flux de dades a través de la xarxa.
  2. Instància de la Xarxa:

    • net = SimpleNN() crea una instància de la xarxa.
  3. 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.
  4. 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.
  5. 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.

© Copyright 2024. Tots els drets reservats