Eliminé el 74% de las neuronas de una red neuronal. Redujo la precisión en solo un 0,50%. Aquí hay un desglose (con código):
Una red neuronal entrenada siempre tiene neuronas que no contribuyen sustancialmente al rendimiento. Pero todavía consumen memoria. Estos se pueden eliminar sin comprometer significativamente la precisión. ¡Veamos cómo identificarlos!
Estos son los pasos: Paso 1) Entrene la red neuronal como de costumbre. Paso 2) Pase el conjunto de validación a través de la red entrenada y, para cada neurona en capas ocultas, calcule: - La activación promedio - La varianza de las activaciones (si las activaciones pueden ser -ve) Mira esto👇
Paso 3) Pode las neuronas que tienen una media de activación y una varianza cercanas a cero, ya que tienen poco impacto en la salida del modelo. Idealmente, trace el rendimiento en varios umbrales de poda para seleccionar el modelo que se ajuste a sus compensaciones de tamaño frente a precisión. Mira esto 👇
Veamos el código. Comenzamos definiendo una red neuronal simple y la entrenamos. Dado que calcularemos las activaciones a nivel de neurona más adelante para la poda, devolvemos todas las activaciones intermedias en el paso hacia adelante. Mira esto👇
A continuación, definimos dos listas con tres elementos: - Uno almacenará el medio de las activaciones - Otro almacenará std dev de activaciones Pasamos el conjunto de validación a través de nuestro modelo para calcular estas estadísticas para cada capa oculta. Mira esto 👇
En este punto, creemos un gráfico de distribución de estadísticas a nivel de neurona que generamos anteriormente. Como se muestra a continuación, las activaciones promedio de la mayoría de las neuronas y su desarrollo estándar están fuertemente distribuidas alrededor de valores cercanos a cero. Intentemos podarlos a continuación.
Para la poda, iteramos sobre una lista de umbrales y: - Cree una nueva red y transfiera pesos que superen el umbral. - Evalúe la nueva red y calcule los parámetros totales. - Anexa los resultados a una lista. Mira esto 👇
En esta tabla se compara la precisión y la reducción de tamaño del modelo podado en varios umbrales en relación con el modelo original. En la media = 0.1 y std-dev = 0.4: - La precisión del modelo cae un 0,08%. - El tamaño del modelo se reduce en un 62%. Esa es una gran reducción. Mira esto 👇
Aquí hay otro resultado interesante. En media = 0.5 y std-dev = 1: - La precisión del modelo se reduce en un 0,5%. - El tamaño del modelo se reduce en un 74%. Entonces, esencialmente, obtenemos un rendimiento casi similar para 1/4 de los parámetros. Mira esto 👇
Por supuesto, existe una compensación entre precisión y tamaño. A medida que reducimos el tamaño, su precisión disminuye (mira el video). Pero en la mayoría de los casos, la precisión no es la única métrica que optimizamos. En cambio, varias métricas operativas como la eficiencia, la memoria, etc., son los factores clave.
48.61K