¡Solución completa de red neuronal convolucional! ¡Introducción completa a la estructura, capacitación y optimización de CNN!

Tabla de contenido

Este artículo analiza exhaustivamente la red neuronal convolucional CNN, el análisis en profundidad de los antecedentes y la importancia, la definición y la introducción del nivel, el entrenamiento y la optimización, el análisis detallado de su capa convolucional, la función de activación, la capa de agrupación, la capa de normalización y finalmente enumera un número de tecnologías clave para su entrenamiento y optimización: preparación y mejora de conjuntos de entrenamiento, función de pérdida, optimizador, ajuste de tasa de aprendizaje, técnicas de regularización y ajuste de evaluación de modelos. Su objetivo es proporcionar una guía completa para los estudiosos de la inteligencia artificial para utilizar la red neuronal convolucional CNN.

El autor, TechLead, tiene más de 10 años de experiencia en arquitectura de servicios de Internet, desarrollo de productos de IA y gestión de equipos. Es un maestro de Fudan de la Universidad de Tongji, miembro del Fudan Robot Intelligence Laboratory, arquitecto senior certificado por Alibaba Cloud, un profesional de gestión de proyectos y un ingreso de IA de mil millones de dólares.

I. Introducción

La complejidad y flexibilidad de las redes neuronales convolucionales (CNN) las convierten en uno de los temas centrales de investigación en el campo del aprendizaje profundo. En esta sección introductoria, profundizaremos en los antecedentes históricos, la justificación, la importancia y el impacto de las CNN en los campos de la ciencia y la industria.
archivo

1.1 Antecedentes e importancia

Las redes neuronales convolucionales están inspiradas en el sistema visual humano, específicamente en la estructura neuronal en la corteza visual. Esta idea ha provocado una oleada de investigación y desarrollo desde el trabajo pionero de Hubel y Wiesel en 1962.

  1. Desarrollo temprano : LeNet-5, desarrollado por Yann LeCun y otros a fines de la década de 1980 y principios de la de 1990, se considera la primera red neuronal convolucional exitosa. LeNet-5 logra resultados impresionantes en el reconocimiento de dígitos escritos a mano.
  2. Ascenso moderno : con el rápido progreso del hardware y la aparición de big data, CNN comenzó a crecer nuevamente a principios del siglo XXI y logró avances en varios campos.

Las CNN son importantes no solo por su precisión y eficiencia, sino también por sus conocimientos teóricos. Por ejemplo, la capa convolucional reduce la cantidad de parámetros al compartir pesos, lo que ayuda a entrenar el modelo de manera más eficiente y también mejora la comprensión del modelo de la invariancia de traducción.

1.2 Descripción general de las redes neuronales convolucionales

La red neuronal convolucional es un tipo de red neuronal de avance, sus neuronas artificiales pueden responder al área local de las unidades circundantes, de modo que pueda reconocer algunas características estructurales del espacio visual. Los siguientes son los componentes clave de una red neuronal convolucional:

  1. Capa de convolución : detecta características locales de imágenes a través de operaciones de convolución.
  2. Función de activación : introduce la no linealidad para aumentar la capacidad expresiva del modelo.
  3. Capa de agrupación : reduce la dimensión de la característica y aumenta la robustez del modelo.
  4. Capa completamente conectada : después de procesar las características espaciales, la capa completamente conectada se usa para clasificación o regresión.

Estos componentes de una red neuronal convolucional funcionan juntos para permitir que las CNN aprendan automáticamente jerarquías de características significativas a partir de píxeles sin procesar. Al aumentar la profundidad, estas características se abstraen gradualmente de formas y texturas básicas a representaciones complejas de objetos y escenas.

Una ventaja única de las redes neuronales convolucionales es su capacidad para automatizar muchas partes de la ingeniería de características que requieren intervención humana en el aprendizaje automático tradicional. Esto no solo le permite lograr un rendimiento superior en muchas tareas, sino que también estimula una amplia gama de intereses académicos e industriales.


2. Introducción a las capas de redes neuronales convolucionales

Una red neuronal convolucional consta de múltiples capas, cada una con un propósito y una función específicos. Esta parte explorará los conceptos básicos de operaciones de convolución, funciones de activación, capas de agrupación y capas de normalización.

2.1 Operación de convolución

La operación de convolución es el núcleo de la red neuronal convolucional e involucra muchos conceptos y detalles complejos. Los presentaremos uno por uno.
archivo

Kernel de convolución y mapa de características

Un kernel de convolución es una pequeña matriz que se desliza sobre la entrada para generar un mapa de características. Cada kernel de convolución puede capturar diferentes características, como bordes, esquinas, etc.

Tamaño del kernel de convolución

archivo
El tamaño del kernel de convolución afecta la escala de las características que puede capturar. Los kernels de convolución más pequeños pueden capturar características más finas, mientras que los kernels de convolución más grandes pueden capturar características más amplias.

# 使用3x3的卷积核
conv_layer_small = nn.Conv2d(3, 64, 3)
# 使用5x5的卷积核
conv_layer_large = nn.Conv2d(3, 64, 5)

convolución multicanal

La convolución se realiza bajo la entrada multicanal, cada canal de entrada se convoluciona con un kernel de convolución y luego se agregan todos los resultados. Esto permite que el modelo capture diferentes características de diferentes canales.

zancada y relleno

El paso y el relleno controlan las propiedades geométricas de la operación de convolución.

Numero de pie

El paso define qué tan rápido se mueve el kernel sobre la entrada. Un tamaño de paso más grande reduce el tamaño de la salida, mientras que un tamaño de paso más pequeño mantiene el tamaño constante.

# 使用步长2
conv_layer_stride2 = nn.Conv2d(3, 64, 3, stride=2)

relleno

El relleno controla las dimensiones de la salida agregando ceros a los bordes de la entrada. Esto ayuda a controlar la pérdida de información en la operación de convolución.

# 使用填充1,使得输出尺寸与输入尺寸相同(假设步长为1)
conv_layer_padding1 = nn.Conv2d(3, 64, 3, padding=1)

Convolución dilatada

La convolución atrosa es un método para expandir el campo receptivo de un núcleo de convolución mediante la inserción de espacios en blanco entre los elementos del núcleo de convolución. Esto permite que la red capture una gama más amplia de información sin aumentar el tamaño del kernel o el cálculo.

# 使用空洞率2的卷积核
conv_layer_dilated = nn.Conv2d(3, 64, 3, dilation=2)

Convolución agrupada

Las circunvoluciones agrupadas amplían la operación de convolución al agrupar los canales de entrada y usar un kernel diferente para cada grupo. Esto aumenta la capacidad del modelo y le permite aprender representaciones más complejas.

# 使用2个分组
conv_layer_grouped = nn.Conv2d(3, 64, 3, groups=2)

2.2 Función de activación

archivo
Las funciones de activación juegan un papel vital en las redes neuronales. Aumentan la no linealidad del modelo, lo que le permite aprender y aproximar funciones complejas.

Función de activación ReLU

ReLU (Unidad lineal rectificada) es una de las funciones de activación más populares en el aprendizaje profundo moderno. Es no lineal, pero computacionalmente muy eficiente.

Ventajas y desventajas

Las principales ventajas de ReLU son la eficiencia computacional y la facilitación de activaciones escasas. Sin embargo, puede conducir a un fenómeno de "ReLU muerto" en el que algunas neuronas nunca se activan.

# 使用PyTorch定义ReLU激活函数
relu = nn.ReLU()

ReLU con fugas

Leaky ReLU es una variante de ReLU que permite pequeñas pendientes positivas para valores de entrada negativos. Esto ayuda a aliviar el problema de "ReLU muerto".

# 使用PyTorch定义Leaky ReLU激活函数
leaky_relu = nn.LeakyReLU(0.01)

Función de activación sigmoidea

La función de activación sigmoide puede comprimir cualquier valor entre 0 y 1.

Ventajas y desventajas

Sigmoid puede representar probabilidad cuando se usa en la capa de salida, pero puede causar el problema de la desaparición del gradiente en la capa oculta.

# 使用PyTorch定义Sigmoid激活函数
sigmoid = nn.Sigmoid()

Función de activación de Tanh

Tanh es otra función de activación similar a sigmoid, pero aplasta la salida entre -1 y 1.

Ventajas y desventajas

Tanh es generalmente mejor que Sigmoid porque tiene un rango de salida más grande, pero aún puede hacer que desaparezcan los gradientes.

# 使用PyTorch定义Tanh激活函数
tanh = nn.Tanh()

Función de activación de chasquido

Swish es una función de activación adaptativa que puede ajustar automáticamente su forma para adaptarse a un problema particular.

# 使用PyTorch定义Swish激活函数
class Swish(nn.Module):
    def forward(self, x):
        return x * torch.sigmoid(x)

otras funciones de activación

Hay muchas otras funciones de activación, como Softmax, Mish, ELU, etc., cada una con sus propias ventajas y escenarios aplicables.

La elección de la función de activación.

La elección de la función de activación depende de muchos factores, como la arquitectura del modelo, el tipo de datos y los requisitos de una tarea específica. A través de la experimentación y el ajuste, se puede encontrar la mejor función de activación para un problema en particular.

2.3 Capa de agrupación

archivo
La capa de agrupación (Pooling Layer) juega un papel importante en la red neuronal convolucional y generalmente se usa para reducir la dimensionalidad del mapa de características, lo que reduce los requisitos computacionales y aumenta el campo receptivo del detector de características.

Agrupación máxima

La agrupación máxima es una de las técnicas de agrupación más utilizadas. Reduce la dimensión del mapa de características seleccionando el valor máximo en la ventana.

# 使用PyTorch定义2x2的最大池化层
max_pooling = nn.MaxPool2d(2)

Ventajas y desventajas

La principal ventaja de la agrupación máxima es que conserva las características más destacadas de la ventana. Sin embargo, pierde algunos detalles.

Agrupación promedio

A diferencia de la agrupación máxima, la agrupación promedio utiliza el promedio de todos los valores en la ventana.

# 使用PyTorch定义2x2的平均池化层
average_pooling = nn.AvgPool2d(2)

Ventajas y desventajas

La agrupación promedio puede aliviar el problema de enfatizar demasiado algunas características que puede causar la agrupación máxima, pero puede restar importancia a algunas características importantes.

Agrupación promedio global

La agrupación de promedio global es una estrategia de agrupación más compleja que calcula el promedio de todo el mapa de características. Esto se usa a menudo en la última capa de la red, directamente para la clasificación.

# 使用PyTorch定义全局平均池化层
global_average_pooling = nn.AdaptiveAvgPool2d(1)

Agrupación de tamaño de ventana y zancada

El tamaño y el paso de la ventana de agrupación afectan directamente el tamaño de la salida. Las ventanas y zancadas más grandes reducen el tamaño de forma más espectacular.

Alternativas a la agrupación

Ha habido algunas alternativas modernas a la agrupación de capas, como el uso de capas convolucionales con un paso mayor que 1 o el uso de convoluciones dilatadas. Estos métodos pueden proporcionar una mejor conservación de las características.

La elección de la capa de agrupación

La elección de un tipo específico de capa de agrupación depende de los requisitos de la tarea y las características específicas de los datos. Una comprensión profunda de cómo funcionan varias técnicas de agrupación puede proporcionar información sobre cómo afectan el rendimiento del modelo.

2.4 Capa de normalización

archivo
La capa de normalización juega un papel clave en el entrenamiento de redes neuronales profundas y se utiliza principalmente para mejorar la estabilidad y la velocidad del entrenamiento. Al escalar los datos de entrada a un rango adecuado, la capa de normalización ayuda a aliviar los problemas de explosión y desaparición de gradientes durante el entrenamiento.

Normalización por lotes

La normalización por lotes escala la entrada a la media cero y la varianza de la unidad mediante la normalización de la entrada para cada canal de características.

# 使用PyTorch定义批量归一化层
batch_norm = nn.BatchNorm2d(num_features=64)

Ventajas y desventajas

  • Ventajas : permite mayores tasas de aprendizaje, proporciona algunos efectos de regularización y, en general, da como resultado un entrenamiento más rápido.
  • Desventaja : la estimación estadística en lotes pequeños puede generar inconsistencias entre el entrenamiento y la inferencia.

Normalización de capas

La normalización de capas es una variante que normaliza todas las características en una sola muestra. Es especialmente popular en el procesamiento de oraciones y redes neuronales recurrentes.

# 使用PyTorch定义层归一化
layer_norm = nn.LayerNorm(normalized_shape=64)

Normalización de instancias

La normalización de instancias se utiliza principalmente para tareas de transferencia de estilo, y la normalización se realiza de forma independiente en cada canal de cada muestra.

# 使用PyTorch定义实例归一化
instance_norm = nn.InstanceNorm2d(num_features=64)

Normalización de grupos

La normalización de grupos es un compromiso entre la normalización por lotes y la normalización de capas, donde los canales se dividen en diferentes grupos y se normalizan dentro de cada grupo.

# 使用PyTorch定义组归一化
group_norm = nn.GroupNorm(num_groups=32, num_channels=64)

La elección de la capa de normalización.

La elección de la capa de normalización debe basarse en la tarea específica y la arquitectura del modelo. Por ejemplo, en tareas de visión, puede preferirse la normalización por lotes, mientras que en tareas de NLP, la normalización de capas puede ser más útil.


3. Entrenamiento y optimización

archivo
El entrenamiento y la optimización de las redes neuronales convolucionales implica muchos componentes y técnicas clave, que juntos determinan el rendimiento y la usabilidad del modelo. Estos aspectos se describen en detalle a continuación.

3.1 Preparación y mejora del conjunto de entrenamiento

Los datos de entrenamiento efectivos son la base para el éxito del aprendizaje profundo. Para que las redes neuronales convolucionales aprendan de manera efectiva, la selección y el aumento del conjunto de entrenamiento son cruciales.

Preprocesamiento de datos

El preprocesamiento es un paso clave en la preparación del conjunto de entrenamiento, que incluye:

  • Normalizar : escala la entrada al rango 0-1.
  • Centrado : Resta la media para centrar los datos alrededor de 0.
  • Limpieza de datos : Elimina datos inconsistentes y erróneos.

aumento de datos

El aumento de datos es una técnica que aumenta la cantidad de datos mediante la aplicación de transformaciones aleatorias, lo que aumenta la capacidad de generalización del modelo.

Técnicas comunes de mejora

  • Rotación, escalado y recorte de imágenes
  • difuminado de color
  • adición de ruido aleatorio
# 使用PyTorch进行多种图像增强
from torchvision import transforms
transform = transforms.Compose([
    transforms.RandomRotation(10),
    transforms.RandomResizedCrop(224),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1)
])

conjunto de entrenamiento dividido

Es común dividir los datos en conjuntos de entrenamiento, validación y prueba para garantizar que el modelo no se ajuste en exceso.

3.2 Función de pérdida

La función de pérdida mide la distancia entre la predicción del modelo y el objetivo real. La elección de una función de pérdida adecuada es un paso fundamental para optimizar el rendimiento del modelo.

tarea de retorno

Para pronósticos de valor continuo, es común usar:

  • Error cuadrático medio (MSE) : mide la diferencia cuadrática entre el valor predicho y el valor real.
# 使用PyTorch定义MSE损失
mse_loss = nn.MSELoss()
  • Smooth L1 Loss : reduce el efecto de los valores atípicos.

tarea de clasificación

Para la predicción de clases, las funciones de pérdida comunes incluyen:

  • Pérdida de entropía cruzada : mide la diferencia entre la distribución de probabilidad predicha y la distribución real.
# 使用PyTorch定义交叉熵损失
cross_entropy_loss = nn.CrossEntropyLoss()
  • Pérdida de entropía cruzada binaria : especialmente para tareas de clasificación binaria.
  • Pérdida de etiquetas múltiples : adecuado para la clasificación de etiquetas múltiples.

Optimizar la función de pérdida

La elección de una función de pérdida adecuada depende no solo del tipo de tarea, sino también de la arquitectura del modelo, la distribución de datos y las métricas comerciales específicas. A veces, puede ser necesaria una función de pérdida personalizada para capturar los desafíos centrales de un problema en particular.

3.3 Optimizador

El optimizador se utiliza para actualizar los pesos de la red neuronal para minimizar la función de pérdida. Cada optimizador tiene sus principios matemáticos y escenarios de aplicación específicos.

Descenso de gradiente estocástico (SGD)

SGD es el algoritmo de optimización más básico.

  • SGD básico : actualice los pesos en la dirección de los gradientes negativos.
  • SGD con impulso : introduzca un término de impulso para acumular gradientes anteriores para una convergencia más suave.
# 使用PyTorch定义带动量的SGD优化器
optimizer_sgd_momentum = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

optimizador adaptativo

El optimizador adaptativo puede ajustar automáticamente la tasa de aprendizaje.

  • Adam : Combinando las ventajas de Momentum y RMSProp.
# 使用PyTorch定义Adam优化器
optimizer_adam = torch.optim.Adam(model.parameters(), lr=0.001)
  • Adagrad, RMSprop, etc .: tienen diferentes tasas de aprendizaje para diferentes parámetros.

Consideraciones de selección del optimizador

  • Dependencia de tareas : diferentes optimizadores pueden tener diferentes efectos en diferentes tareas y datos.
  • Ajuste de hiperparámetros : es posible que sea necesario ajustar la tasa de aprendizaje, el impulso, etc.

3.4 Ajuste de la tasa de aprendizaje

La tasa de aprendizaje es un hiperparámetro clave en el optimizador y su ajuste tiene un profundo impacto en el entrenamiento del modelo.

tasa de aprendizaje fija

La forma más fácil es usar una tasa de aprendizaje fija. Pero tal vez no lo suficientemente flexible.

Programación de la tasa de aprendizaje

Un enfoque más sofisticado es ajustar dinámicamente la tasa de aprendizaje durante el entrenamiento.

ajuste programado

  • step drop : Disminuye la tasa de aprendizaje en un paso fijo.
  • Recocido de coseno : ajusta periódicamente la tasa de aprendizaje.
# 使用PyTorch定义余弦退火调度器
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_adam, T_max=50)

ajuste adaptativo

  • ReduceLROnPlateau : reduce la tasa de aprendizaje en función de la pérdida de validación.

Calentamiento de la tasa de aprendizaje

Aumente gradualmente la tasa de aprendizaje al comienzo del entrenamiento.

  • Calentamiento lineal : la tasa de aprendizaje aumenta linealmente en la etapa inicial.

3.5 Técnicas de regularización

La regularización es una técnica clave para evitar el sobreajuste y mejorar la capacidad de generalización del modelo.

Regularización L1 y L2

  • Regularización L1 : tiende a producir pesos escasos, lo que es útil para la selección de características.
  • Regularización L2 : reducir el peso para suavizar el modelo.
# 使用PyTorch添加L1和L2正则化
l1_lambda = 0.0005
l2_lambda = 0.0001
loss = loss + l1_lambda * torch.norm(weights, 1) + l2_lambda * torch.norm(weights, 2)

Abandonar

Apague aleatoriamente algunas neuronas para hacer que el modelo sea más robusto.

  • Abandono ordinario : soltar neuronas al azar.
  • Eliminación espacial : suelte aleatoriamente mapas de características completos en capas convolucionales.

Normalización por lotes

Acelere el entrenamiento y alivie la sensibilidad de inicialización al normalizar las entradas de capa.

aumento de datos

Como se mencionó anteriormente, el aumento de datos es un medio importante de regularización.

3.6 Evaluación y ajuste del modelo

La evaluación del modelo es el proceso de medir el rendimiento del modelo, mientras que el ajuste es el proceso de mejorar el rendimiento.

Validación cruzada

Utilice la validación cruzada para estimar la capacidad de generalización del modelo.

  • Validación cruzada de K-fold : divide los datos en k partes y usa una de ellas como el conjunto de validación a su vez.

Habilidades de afinación

  • Búsqueda en cuadrícula : Pruebe diferentes combinaciones de hiperparámetros.
  • Búsqueda aleatoria : seleccione aleatoriamente hiperparámetros, lo que es más eficiente.

técnica de parada anticipada

Si la pérdida de validación ya no disminuye, detenga el entrenamiento para evitar el sobreajuste.

integración modelo

Mejore el rendimiento combinando varios modelos.

  • Embolsado : entrene varios modelos y promedie las predicciones.
  • Impulso : entrenar un nuevo modelo sobre los errores de los modelos anteriores.
  • Apilamiento : use un nuevo modelo para combinar predicciones de otros modelos.

4. Resumen

archivo
Este artículo analiza exhaustivamente la red neuronal convolucional CNN, el análisis en profundidad de los antecedentes y la importancia, la definición y la introducción del nivel, el entrenamiento y la optimización, el análisis detallado de su capa convolucional, la función de activación, la capa de agrupación, la capa de normalización y finalmente enumera un número de tecnologías clave para su entrenamiento y optimización: preparación y mejora de conjuntos de entrenamiento, función de pérdida, optimizador, ajuste de tasa de aprendizaje, técnicas de regularización y ajuste de evaluación de modelos. Su objetivo es proporcionar una guía completa para los estudiosos de la inteligencia artificial para utilizar la red neuronal convolucional CNN.

El autor, TechLead, tiene más de 10 años de experiencia en arquitectura de servicios de Internet, desarrollo de productos de IA y gestión de equipos. Es un maestro de Fudan de la Universidad de Tongji, miembro del Fudan Robot Intelligence Laboratory, arquitecto senior certificado por Alibaba Cloud, un profesional de gestión de proyectos y un ingreso de IA de mil millones de dólares.

Supongo que te gusta

Origin blog.csdn.net/magicyangjay111/article/details/132357329
Recomendado
Clasificación