Traballar con redes neuronais: lista de verificación para a depuración

Traballar con redes neuronais: lista de verificación para a depuración

O código dos produtos de software de aprendizaxe automática adoita ser complexo e bastante confuso. Detectar e eliminar erros nel é unha tarefa que require moitos recursos. Mesmo o máis sinxelo redes neuronais de avance requiren un enfoque serio da arquitectura de rede, a inicialización de pesos e a optimización da rede. Un pequeno erro pode levar a problemas desagradables.

Este artigo trata sobre un algoritmo para depurar as túas redes neuronais.

Skillbox recomenda: Curso práctico Desenvolvedor Python desde cero.

Recordámolo: para todos os lectores de "Habr" - un desconto de 10 rublos ao inscribirse en calquera curso de Skillbox usando o código promocional "Habr".

O algoritmo consta de cinco etapas:

  • inicio doado;
  • confirmación de perdas;
  • comprobación de resultados e conexións intermedios;
  • diagnóstico de parámetros;
  • control do traballo.

Se algo che parece máis interesante que o resto, podes ir inmediatamente a estas seccións.

Inicio fácil

Unha rede neuronal cunha arquitectura complexa, regularización e un programador de taxa de aprendizaxe é máis difícil de depurar que unha normal. Estamos sendo un pouco complicados aquí, xa que o punto en si está indirectamente relacionado coa depuración, pero esta non deixa de ser unha recomendación importante.

Un comezo sinxelo é crear un modelo simplificado e adestralo nun conxunto (punto) de datos.

Primeiro creamos un modelo simplificado

Para comezar rapidamente, creamos unha pequena rede cunha única capa oculta e comprobamos que todo funciona correctamente. Despois imos complicando pouco a pouco o modelo, comprobando cada novo aspecto da súa estrutura (capa adicional, parámetro, etc.) e seguimos adiante.

Adestramos o modelo nun único conxunto (punto) de datos

Como verificación rápida da cordura do teu proxecto, podes utilizar un ou dous puntos de datos de formación para confirmar se o sistema funciona correctamente. A rede neuronal debe mostrar unha precisión do 100 % no adestramento e nas probas. Se non é o caso, o modelo é demasiado pequeno ou xa tes un erro.

Aínda que todo estea ben, prepara o modelo para unha ou varias épocas antes de seguir adiante.

Avaliación de perdas

A estimación de perdas é a principal forma de refinar o rendemento do modelo. Debe asegurarse de que a perda é adecuada ao problema e de que as funcións de perda estean clasificadas na escala correcta. Se utilizas máis dun tipo de perda, asegúrate de que todas teñen a mesma orde e que se escalan correctamente.

É importante estar atento ás perdas iniciais. Comprobe o quão preto está o resultado real do resultado esperado se o modelo comezou cunha suposición aleatoria. EN O traballo de Andrey Karpathy suxire o seguinte:: "Asegúrate de obter o resultado que esperas cando comeces cun pequeno número de parámetros. É mellor comprobar inmediatamente a perda de datos (co grao de regularización establecido en cero). Por exemplo, para CIFAR-10 cun clasificador Softmax, esperamos que a perda inicial sexa 2.302 porque a probabilidade difusa esperada é 0,1 para cada clase (xa que hai 10 clases) e a perda Softmax é a probabilidade logarítmica negativa da clase correcta. como − ln (0.1) = 2.302.”

Para o exemplo binario, simplemente faise un cálculo similar para cada unha das clases. Aquí, por exemplo, están os datos: 20% 0 e 80% 1. A perda inicial esperada será de ata –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Se o resultado é superior a 1, pode indicar que os pesos da rede neuronal non están equilibrados correctamente ou que os datos non están normalizados.

Comprobación de resultados intermedios e conexións

Para depurar unha rede neuronal, é necesario comprender a dinámica dos procesos dentro da rede e o papel das capas intermedias individuais a medida que se conectan. Aquí tes os erros comúns que podes atopar:

  • expresións incorrectas para actualizacións de gradle;
  • as actualizacións de peso non se aplican;
  • gradientes explosivos.

Se os valores do gradiente son cero, isto significa que a taxa de aprendizaxe no optimizador é demasiado lenta ou que estás atopando unha expresión incorrecta para actualizar o gradiente.

Ademais, é necesario controlar os valores das funcións de activación, pesos e actualizacións de cada unha das capas. Por exemplo, a magnitude das actualizacións de parámetros (pesos e sesgos) debe ser 1-e3.

Hai un fenómeno chamado "Morrer ReLU" ou "problema de gradiente que desaparece", cando as neuronas ReLU sairán cero despois de coñecer un gran valor de sesgo negativo para os seus pesos. Estas neuronas nunca se disparan de novo en ningún momento dos datos.

Podes utilizar a comprobación do gradiente para identificar estes erros aproximando o gradiente mediante un enfoque numérico. Se está preto dos gradientes calculados, entón a retropropagación implementouse correctamente. Para crear unha comprobación de degradado, consulta estes excelentes recursos de CS231 aquí и aquíasí como lección Andrew Nga sobre este tema.

Faizan Sheikh indica tres métodos principais para visualizar unha rede neuronal:

  • Os preliminares son métodos sinxelos que nos mostran a estrutura xeral do modelo adestrado. Estes inclúen a saída de formas ou filtros das capas individuais da rede neuronal e os parámetros dentro de cada capa.
  • Baseado na activación. Neles, desciframos as activacións de neuronas individuais ou de grupos de neuronas para comprender as súas funcións.
  • Baseado en gradientes. Estes métodos tenden a manipular os gradientes que se forman a partir dos pases adiante e atrás do adestramento do modelo (incluíndo mapas de relevancia e mapas de activación de clases).

Existen varias ferramentas útiles para visualizar as activacións e conexións de capas individuais, p. ConX и Placa tensor.

Traballar con redes neuronais: lista de verificación para a depuración

Diagnóstico de parámetros

As redes neuronais teñen moitos parámetros que interactúan entre si, o que complica a optimización. En realidade, esta sección é obxecto de investigación activa por parte de especialistas, polo que as suxestións a continuación deben considerarse só como consellos, puntos de partida para construír.

Tamaño do paquete (tamaño do lote): se quere que o tamaño do lote sexa o suficientemente grande como para obter estimacións precisas do gradiente de erro, pero o suficientemente pequeno para que o descenso do gradiente estocástico (SGD) regularice a súa rede. Os pequenos tamaños de lotes levarán a unha rápida converxencia debido ao ruído durante o proceso de adestramento e, posteriormente, ás dificultades de optimización. Isto descríbese con máis detalle aquí.

Taxa de aprendizaxe - demasiado baixo provocará unha converxencia lenta ou o risco de quedar atrapado nos mínimos locais. Ao mesmo tempo, unha alta taxa de aprendizaxe provocará unha diverxencia de optimización porque corre o risco de saltar pola parte profunda pero estreita da función de perda. Proba a usar a programación de velocidade para reducila mentres adestras a rede neuronal. Actualizado con CS231n hai unha gran sección dedicada a este problema.

Recorte de degradado  — Recortar os gradientes de parámetros durante a retropropagación ao valor máximo ou á norma marxinal. Útil para solucionar problemas de gradientes explosivos que poidas atopar no punto tres.

Normalización de lotes - utilízase para normalizar os datos de entrada de cada capa, o que nos permite resolver o problema do desprazamento covariable interno. Se está a usar Dropout e Batch Norma xuntos, consulta este artigo.

Descenso de gradiente estocástico (SGD) — Existen varias variedades de SGD que usan o impulso, as taxas de aprendizaxe adaptativas e o método Nesterov. Non obstante, ningún deles ten unha clara vantaxe tanto en canto á eficiencia da aprendizaxe como á xeneralización (detalles aquí).

Regularización - é fundamental para construír un modelo xeneralizable, xa que engade unha penalización pola complexidade do modelo ou os valores extremos dos parámetros. Esta é unha forma de reducir a varianza do modelo sen aumentar significativamente o seu sesgo. Máis información detallada - aquí.

Para avaliar todo vostede mesmo, cómpre desactivar a regularización e comprobar o gradiente de perda de datos.

Abandonando é outro método para optimizar a súa rede para evitar a conxestión. Durante o adestramento, o abandono realízase só mantendo a actividade da neurona cunha certa probabilidade p (hiperparámetro) ou poñéndoa a cero no caso contrario. Como resultado, a rede debe utilizar un subconxunto diferente de parámetros para cada lote de adestramento, o que reduce os cambios en determinados parámetros que se fan dominantes.

Importante: se utiliza tanto a normalización de abandono como a normalización por lotes, teña coidado coa orde destas operacións ou incluso utilícelas xuntas. Todo isto aínda está sendo discutido e complementado activamente. Aquí hai dúas discusións importantes sobre este tema en Stackoverflow и Arquivo.

Control do traballo

Trátase de documentar fluxos de traballo e experimentos. Se non documentas nada, podes esquecer, por exemplo, o índice de aprendizaxe ou os pesos de clase que se utilizan. Grazas ao control, podes ver e reproducir facilmente experimentos anteriores. Isto permítelle reducir o número de experimentos duplicados.

Non obstante, a documentación manual pode converterse nunha tarefa difícil no caso dun gran volume de traballo. Aquí é onde entran ferramentas como Comet.ml para axudarche a rexistrar automaticamente conxuntos de datos, cambios de código, historial experimental e modelos de produción, incluíndo información clave sobre o teu modelo (hiperparámetros, métricas de rendemento do modelo e información ambiental).

Unha rede neuronal pode ser moi sensible a pequenos cambios, e isto levará a unha caída no rendemento do modelo. Rastrexar e documentar o teu traballo é o primeiro paso que podes dar para estandarizar o teu ambiente e modelado.

Traballar con redes neuronais: lista de verificación para a depuración

Espero que esta publicación poida ser un punto de partida para que comeces a depurar a túa rede neuronal.

Skillbox recomenda:

Fonte: www.habr.com

Engadir un comentario