Parámetros del perceptrón multicapa

Revisemos los parámetros principales de las clase MLPClassifier:

hidden_layer_sizes

Ya hemos visto aparecer este parámetro en el ejemplo anterior: se trata de una tupla conteniendo el número de neuronas en cada capa oculta: (5,) haría referencia a una capa oculta de 5 neuronas y (50, 20, 10) haría referencia a tres capas ocultas de 50, 20 y 10 neuronas artificiales respectivamente.

activation

Función de activación para las neuronas artificiales de las capas ocultas (en Scikit-Learn no es posible establecer funciones de activación distintas para cada capa). Hay cuatro opciones disponibles:

  • identity, función identidad que devuelve el mismo valor que recibe: f(x) = x
  • logistic, función logística: f(x) = 1 / (1 + exp(-x))
  • tanh, función tangente hiperbólica: f(x) = tanh(x)
  • relu, (opción por defecto) función "rectified linear unit": f(x) = max(0, x)

Obsérvese que, a pesar del nombre de las clases (Multilayer Perceptron), no se incluye como opción la función escalón (usada en el perceptrón de Frank Rosenblatt) -es decir, no es posible simular un perceptrón con esta clase-.

solver

El parámetro solver determina el optimizador a utilizar para el cálculo del mínimo de la función de coste. Tres opciones disponibles:

  • lbfgs, optimizador de la familia de los métodos casi-Newton
  • sgd, descenso de gradiente estocástico
  • adam (opción por defecto)

max_iter

El parámetro max_iter determina el número máximo de epochs durante las que se va a entrenar el modelo. El valor por defecto es 200. Si el modelo converge antes de este número de iteraciones, se detiene el aprendizaje.

learning_rate

Tasa de aprendizaje usada durante la actualización de los pesos. Se ofrecen tres opciones:

  • constant, valor constante especificado por el parámetro learning_rate_init, aplicable solo cuando el solver es "sgd" o "adam".
  • invscaling, tasa de aprendizaje gradualmente decreciente usando, en cada paso t, la siguiente función:
Fórmula que define el learning_rate tipo invscaling

Este método solo es aplicable cuando el solver es "sgd". El valor de power_t en la anterior función viene dado por el parámetro homólogo, power_t, que, por defecto, toma el valor 0.5

  • adaptative. Este método mantiene la tasa de aprendizaje constante e igual a learning_rate_init mientras se confirme una reducción en el valor de la función de coste durante el entrenamiento. Si durante 2 epochs consecutivas no se produce una reducción de, al menos, un valor mínimo dado por el parámetro tol, o -si se está utilizando parada temprana- no se produce un aumento del score (métrica de bondad del modelo) que corresponda en el conjunto de validación, la tasa de aprendizaje se divide por 5.

shuffle

Este parámetro determina si las muestras se desordenan antes de cada epoch o no. Solo se considera si el solver es "sgd" o "adam".

alpha

El parámetro alpha determina la penalización L2 a aplicar sobre los pesos que ponderan los valores de entrada de las neuronas. Un valor de alpha más elevado supondrá pesos menores y una menor varianza (frecuente en entornos de sobreentrenamiento).

tol y n_iter_no_change

Cuando la función de coste no mejore por lo menos tol durante n_iter_no_change epochs (valor dado por el parámetro homónimo), -salvo que se esté entrenando la red con una tasa de aprendizaje adaptativa- se considerará que la red neuronal ha sido entrenada y se parará el proceso de entrenamiento.

momentum y nesterovs_momentum

Trabajando con el optimizador "sgd" (Stochastic Gradient Descent) es posible configurarlo de forma que se aplique momentum de Nesterov (de forma que las actualizaciones del algoritmo Gradient Descent se calculen como combinación lineal del nuevo vector y la última actualización).

early_stopping y validation_fraction

Si el parámetro early_stopping se fija con el valor True, se reservará el 10% de los datos de entrenamiento como conjunto de validación y se dará fin al entrenamiento en cuanto la mejora del modelo en dicho conjunto no sea, al menos, de tol en n_iter_no_change epochs consecutivas. Solo se considerará si el solver es "sgd" o "adam". El porcentaje de datos a reservar como conjunto de validación puede configurarse con el parámetro validation_fraction.