Introducció

La regularització és una tècnica essencial en el deep learning per prevenir el sobreajustament (overfitting) i millorar la capacitat de generalització dels models. En aquesta secció, explorarem diverses tècniques de regularització i altres estratègies per millorar el rendiment dels models de deep learning.

Objectius d'Aprenentatge

Al final d'aquest tema, hauràs après:

  • Què és la regularització i per què és important.
  • Diferents tècniques de regularització com la regularització L1 i L2, Dropout, i Data Augmentation.
  • Estratègies addicionals per millorar el rendiment dels models de deep learning.

  1. Què és la Regularització?

La regularització és un conjunt de tècniques utilitzades per reduir l'error de generalització d'un model de deep learning, és a dir, l'error que el model comet quan es troba amb dades noves i no vistes durant l'entrenament. Això es fa afegint informació addicional o restriccions al model per evitar que s'ajusti massa a les dades d'entrenament.

1.1. Importància de la Regularització

  • Prevenció del sobreajustament: El sobreajustament ocorre quan un model aprèn massa bé les dades d'entrenament, incloent-hi el soroll i les anomalies, i per tant, no generalitza bé a noves dades.
  • Millora de la capacitat de generalització: Un model ben regularitzat és capaç de capturar els patrons subjacents de les dades sense ajustar-se massa a les particularitats de les dades d'entrenament.

  1. Tècniques de Regularització

2.1. Regularització L1 i L2

Regularització L1 (Lasso)

La regularització L1 afegeix la suma dels valors absoluts dels pesos al terme de pèrdua. Això tendeix a produir models amb molts pesos iguals a zero, resultant en models més simples i esparsos.

Funció de pèrdua amb regularització L1: \[ \text{Loss} = \text{Loss}{\text{original}} + \lambda \sum{i} |w_i| \]

Regularització L2 (Ridge)

La regularització L2 afegeix la suma dels quadrats dels pesos al terme de pèrdua. Això tendeix a produir models amb pesos petits però no necessàriament iguals a zero.

Funció de pèrdua amb regularització L2: \[ \text{Loss} = \text{Loss}{\text{original}} + \lambda \sum{i} w_i^2 \]

Exemple de codi en Python:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.regularizers import l1, l2

model = Sequential([
    Dense(64, input_dim=100, activation='relu', kernel_regularizer=l1(0.01)),
    Dense(64, activation='relu', kernel_regularizer=l2(0.01)),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

2.2. Dropout

El Dropout és una tècnica de regularització que consisteix a desactivar aleatòriament un percentatge de neurones durant l'entrenament. Això ajuda a prevenir que les neurones es basin massa en altres neurones específiques, promovent una millor generalització.

Exemple de codi en Python:

from tensorflow.keras.layers import Dropout

model = Sequential([
    Dense(64, input_dim=100, activation='relu'),
    Dropout(0.5),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

2.3. Data Augmentation

El Data Augmentation és una tècnica que consisteix a generar noves mostres de dades d'entrenament a partir de les existents mitjançant transformacions com rotacions, translacions, i canvis d'escala. Això ajuda a augmentar la diversitat de les dades d'entrenament i millorar la capacitat de generalització del model.

Exemple de codi en Python:

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

# Suposem que 'x_train' i 'y_train' són les dades d'entrenament
datagen.fit(x_train)

model.fit(datagen.flow(x_train, y_train, batch_size=32), epochs=50)

  1. Estratègies Addicionals per Millorar el Rendiment

3.1. Early Stopping

L'early stopping és una tècnica que consisteix a parar l'entrenament del model quan el rendiment en les dades de validació deixa de millorar. Això ajuda a prevenir el sobreajustament.

Exemple de codi en Python:

from tensorflow.keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5)

model.fit(x_train, y_train, validation_split=0.2, epochs=50, callbacks=[early_stopping])

3.2. Batch Normalization

La Batch Normalization és una tècnica que normalitza les sortides de cada capa per lot (batch) durant l'entrenament. Això ajuda a accelerar l'entrenament i millorar la robustesa del model.

Exemple de codi en Python:

from tensorflow.keras.layers import BatchNormalization

model = Sequential([
    Dense(64, input_dim=100, activation='relu'),
    BatchNormalization(),
    Dense(64, activation='relu'),
    BatchNormalization(),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Resum

En aquesta secció, hem explorat diverses tècniques de regularització i estratègies per millorar el rendiment dels models de deep learning. Hem après sobre la regularització L1 i L2, el Dropout, el Data Augmentation, l'early stopping i la batch normalization. Aquestes tècniques són fonamentals per construir models robustos i capaços de generalitzar bé a noves dades.

En el pròxim mòdul, explorarem les eines i frameworks més populars per implementar models de deep learning, com TensorFlow i PyTorch.

© Copyright 2024. Tots els drets reservats