Introducció

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 sortida. 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ó

  1. Sigmoide

La funció sigmoide és una de les funcions d'activació més antigues i es defineix com:

\[ \sigma(x) = \frac{1}{1 + e^{-x}} \]

Característiques:

  • Sortida en el rang (0, 1).
  • Bona per a problemes de classificació binària.
  • Problemes de gradient desaparegut en xarxes profundes.

Exemple en Python:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Exemple d'ús
x = np.array([-1.0, 0.0, 1.0])
print(sigmoid(x))

  1. Tanh (Tangens hiperbòlic)

La funció tanh és una altra funció d'activació popular, definida com:

\[ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]

Característiques:

  • Sortida en el rang (-1, 1).
  • Sovint preferida sobre la sigmoide perquè la seva sortida està centrada en zero.
  • També pateix del problema de gradient desaparegut.

Exemple en Python:

def tanh(x):
    return np.tanh(x)

# Exemple d'ús
x = np.array([-1.0, 0.0, 1.0])
print(tanh(x))

  1. ReLU (Rectified Linear Unit)

La funció ReLU és actualment una de les funcions d'activació més utilitzades:

\[ \text{ReLU}(x) = \max(0, x) \]

Característiques:

  • Introduïda per primera vegada en 2011.
  • No pateix del problema de gradient desaparegut com la sigmoide i tanh.
  • Pot patir del problema de "neurones mortes" si moltes sortides són zero.

Exemple en Python:

def relu(x):
    return np.maximum(0, x)

# Exemple d'ús
x = np.array([-1.0, 0.0, 1.0])
print(relu(x))

  1. Leaky ReLU

La funció Leaky ReLU és una variant de la ReLU que intenta solucionar el problema de les "neurones mortes":

\[ \text{Leaky ReLU}(x) = \begin{cases} x & \text{si } x > 0
\alpha x & \text{si } x \leq 0 \end{cases} \]

On \(\alpha\) és un petit valor positiu (per exemple, 0.01).

Característiques:

  • Permet un petit gradient quan l'entrada és negativa.
  • Redueix el risc de neurones mortes.

Exemple en Python:

def leaky_relu(x, alpha=0.01):
    return np.where(x > 0, x, alpha * x)

# Exemple d'ús
x = np.array([-1.0, 0.0, 1.0])
print(leaky_relu(x))

  1. Softmax

La funció softmax es fa servir principalment en la capa de sortida per a problemes de classificació multiclasse:

\[ \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} \]

Característiques:

  • Converteix un vector de valors en una distribució de probabilitats.
  • La suma de les sortides és 1.

Exemple en Python:

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum(axis=0)

# Exemple d'ús
x = np.array([1.0, 2.0, 3.0])
print(softmax(x))

Exercicis Pràctics

Exercici 1: Implementació de Funcions d'Activació

Implementa les funcions d'activació següents en Python: Sigmoide, Tanh, ReLU, Leaky ReLU i Softmax. Prova-les amb un conjunt de dades d'exemple.

Exercici 2: Comparació de Funcions d'Activació

Crea un gràfic que compari les sortides de les funcions d'activació Sigmoide, Tanh, ReLU i Leaky ReLU per a valors d'entrada en el rang [-10, 10].

Solució:

import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 100)

plt.plot(x, sigmoid(x), label='Sigmoid')
plt.plot(x, tanh(x), label='Tanh')
plt.plot(x, relu(x), label='ReLU')
plt.plot(x, leaky_relu(x), label='Leaky ReLU')
plt.legend()
plt.xlabel('Input')
plt.ylabel('Output')
plt.title('Comparació de Funcions d\'Activació')
plt.show()

Conclusió

Les funcions d'activació són crucials per a les xarxes neuronals, ja que introdueixen no-linealitat i permeten que el model aprengui patrons complexos. Cada funció té els seus avantatges i inconvenients, i la selecció de la funció d'activació adequada pot dependre del problema específic que s'està intentant resoldre.

© Copyright 2024. Tots els drets reservats