Les funcions d'activació són components essencials en les xarxes neuronals, ja que introdueixen no-linealitat en el model, permetent que la xarxa aprengui relacions complexes entre les dades d'entrada i les sortides. Sense funcions d'activació, una xarxa neuronal seria simplement una combinació lineal de les seves entrades, limitant la seva capacitat per resoldre problemes complexos.
Tipus de Funcions d'Activació
- Funció Sigmoide
La funció sigmoide és una de les funcions d'activació més antigues i utilitzades. Converteix qualsevol valor real en un valor entre 0 i 1.
Equació: \[ \sigma(x) = \frac{1}{1 + e^{-x}} \]
Propietats:
- Sortida entre 0 i 1.
- Bona per a problemes de classificació binària.
- Pot patir el problema del gradient desaparegut.
Exemple de codi:
import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.linspace(-10, 10, 100) y = sigmoid(x) plt.plot(x, y) plt.title('Funció Sigmoide') plt.xlabel('x') plt.ylabel('sigmoid(x)') plt.grid(True) plt.show()
- Funció Tanh (Tangens Hiperbòlic)
La funció tanh és similar a la sigmoide, però la seva sortida està escalada entre -1 i 1.
Equació: \[ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]
Propietats:
- Sortida entre -1 i 1.
- Sovint preferida sobre la sigmoide perquè la seva sortida està centrada en zero.
- També pot patir el problema del gradient desaparegut.
Exemple de codi:
def tanh(x): return np.tanh(x) y = tanh(x) plt.plot(x, y) plt.title('Funció Tanh') plt.xlabel('x') plt.ylabel('tanh(x)') plt.grid(True) plt.show()
- Funció ReLU (Rectified Linear Unit)
La funció ReLU és actualment una de les funcions d'activació més populars en xarxes neuronals profundes.
Equació: \[ \text{ReLU}(x) = \max(0, x) \]
Propietats:
- Sortida entre 0 i ∞.
- Resol el problema del gradient desaparegut.
- Pot patir el problema de "neurones mortes" (valors negatius esdevenen zero permanentment).
Exemple de codi:
def relu(x): return np.maximum(0, x) y = relu(x) plt.plot(x, y) plt.title('Funció ReLU') plt.xlabel('x') plt.ylabel('ReLU(x)') plt.grid(True) plt.show()
- Funció Leaky ReLU
La funció Leaky ReLU és una variant de la ReLU que permet un petit gradient per a valors negatius.
Equació:
\[ \text{Leaky ReLU}(x) = \begin{cases}
x & \text{si } x > 0
\alpha x & \text{si } x \leq 0
\end{cases} \]
Propietats:
- Sortida entre -∞ i ∞.
- Redueix el problema de "neurones mortes".
- \(\alpha\) és un petit valor positiu (per exemple, 0.01).
Exemple de codi:
def leaky_relu(x, alpha=0.01): return np.where(x > 0, x, alpha * x) y = leaky_relu(x) plt.plot(x, y) plt.title('Funció Leaky ReLU') plt.xlabel('x') plt.ylabel('Leaky ReLU(x)') plt.grid(True) plt.show()
- Funció Softmax
La funció Softmax és utilitzada principalment en la capa de sortida per a problemes de classificació multiclasse.
Equació: \[ \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} \]
Propietats:
- Converteix un vector de valors en un vector de probabilitats.
- La suma de les sortides és 1.
Exemple de codi:
def softmax(x): e_x = np.exp(x - np.max(x)) return e_x / e_x.sum(axis=0) x = np.array([1.0, 2.0, 3.0]) y = softmax(x) print("Softmax:", y)
Exercicis Pràctics
Exercici 1: Implementar Funcions d'Activació
Implementa les funcions d'activació Sigmoide, Tanh, ReLU i Leaky ReLU en Python i ploteja les seves gràfiques.
Exercici 2: Aplicar Funcions d'Activació en una Xarxa Neuronal
Construeix una xarxa neuronal simple utilitzant TensorFlow i aplica diferents funcions d'activació a les capes ocultes. Observa com afecta el rendiment del model.
Solució de l'Exercici 1:
import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x) def relu(x): return np.maximum(0, x) def leaky_relu(x, alpha=0.01): return np.where(x > 0, x, alpha * x) x = np.linspace(-10, 10, 100) plt.figure(figsize=(12, 8)) plt.subplot(2, 2, 1) plt.plot(x, sigmoid(x)) plt.title('Funció Sigmoide') plt.grid(True) plt.subplot(2, 2, 2) plt.plot(x, tanh(x)) plt.title('Funció Tanh') plt.grid(True) plt.subplot(2, 2, 3) plt.plot(x, relu(x)) plt.title('Funció ReLU') plt.grid(True) plt.subplot(2, 2, 4) plt.plot(x, leaky_relu(x)) plt.title('Funció Leaky ReLU') plt.grid(True) plt.tight_layout() plt.show()
Solució de l'Exercici 2:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # Generar dades sintètiques x_train = np.random.rand(1000, 20) y_train = np.random.randint(2, size=(1000, 1)) # Construir el model model = Sequential([ Dense(64, input_dim=20, activation='relu'), Dense(64, activation='relu'), Dense(1, activation='sigmoid') ]) # Compilar el model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # Entrenar el model model.fit(x_train, y_train, epochs=10, batch_size=32) # Avaluar el model loss, accuracy = model.evaluate(x_train, y_train) print(f'Pèrdua: {loss}, Precisió: {accuracy}')
Conclusió
Les funcions d'activació són crucials per al rendiment de les xarxes neuronals, ja que introdueixen no-linealitat i permeten que el model aprengui patrons complexos. Hem explorat diverses funcions d'activació, incloent Sigmoide, Tanh, ReLU, Leaky ReLU i Softmax, i hem vist com implementar-les i utilitzar-les en models de TensorFlow. En el proper tema, ens endinsarem en les funcions de pèrdua i els optimitzadors, components essencials per entrenar xarxes neuronals de manera efectiva.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres