
Se você gosta de tecnologias de redes neurais há muito tempo, provavelmente encontrou uma opinião brevemente concluída na pergunta retórica: "Como você explica a uma pessoa quando uma rede neural acredita que ela tem câncer?" E se, na melhor das hipóteses, tais pensamentos fazem você duvidar do uso de redes neurais em áreas suficientemente
responsáveis , na pior das hipóteses você pode perder todo o seu interesse.
Encontrei a melhor opção - aceitei calmamente essa limitação e, sem pensar muito, continuei usando as tecnologias de redes neurais no campo da visão computacional.
Desafio
Recentemente, uma tarefa recaiu sobre mim - criar rapidamente um detector viável de emoções. As condições foram definidas claramente - uma pessoa localizada frontalmente com uma resolução de 100x100. Em busca de um conjunto de dados concluído, passei algumas horas e percebi que praticamente nada me convinha. Ou mesmo para "fins de pesquisa", era muito difícil acessar o conjunto de dados. A saída foi encontrada rapidamente - para tirar uma dúzia de longas-metragens e simplesmente percorrer a cascata Haar para descarregar todos os rostos. Durante a noite, mais de (!) 30k imagens foram recebidas. Além disso, as imagens recebidas foram classificadas por 5 emoções principais (feliz, triste, neutra, zangada, surpresa). Obviamente, longe de todas as imagens, e como resultado, 400 a 500 imagens de rosto se enquadravam em cada categoria.
Então tudo começou com o tópico de explicar os resultados das redes neurais. Mesmo com o aumento de dados personalizado de alta qualidade, esse conjunto de dados parecia obviamente insuficiente. Ao treinar uma rede com base em blocos de rede, os seguintes números foram obtidos para as métricas:

A reciclagem é evidente no contexto de um número insuficiente de exemplos, mas, devido à falta de tempo, era urgente garantir que a rede funcionasse pelo menos de maneira satisfatória e que não dependesse, por exemplo, da determinação de emoções.
Eu costumava trabalhar com ferramentas como Lime e Keras-Vis, mas era aqui que elas podiam se tornar uma pedra filosófica que transforma uma caixa preta em algo mais transparente. A essência de ambas as ferramentas é aproximadamente a mesma - para determinar as áreas da imagem de origem que dão a maior contribuição para a solução de rede final. Para o teste, gravei um vídeo que imitava várias emoções. Tendo descarregado expressões faciais correspondentes a várias emoções, corri as ferramentas acima
Os seguintes resultados foram obtidos no Lime:

Infelizmente, mesmo alterando vários parâmetros de funções, o Lime não conseguiu uma exibição legível por humanos. Por alguma razão, a metade direita do rosto afeta o pertencimento à classe "zangada". A única coisa para “feliz” é a área lógica da boca e as covinhas típicas de um sorriso.
Além disso, todas as mesmas imagens foram executadas no Keras-Vis e no bingo:

Happy está procurando a localização dos olhos e o formato da boca. Triste se concentra em sobrancelhas e pálpebras caídas. Neutro tenta olhar para todo o rosto como um todo e para os inocentes cantos inferiores da imagem. "Irritado" logicamente se concentra nas sobrancelhas trocadas, mas esquece o formato da boca e, por algum motivo, procura por recursos no canto inferior direito. E "Surpreso" olha para o formato da boca e da pálpebra esquerda (!) Levantada - é hora de começar a reconhecer também a correta.
Os resultados agradaram e possibilitaram ver os pontos fortes e fracos da rede resultante. Tendo sentido fraquezas na classificação das classes Surprised e Angry, encontrei forças para aumentar levemente a amostra e adicionei mais uma gota de abandono. Na próxima iteração, foram obtidos os seguintes resultados:

Observa-se que as regiões de ativação foram mais localizadas. A atenção da rede para o segundo plano no caso de "Angry" desapareceu. Obviamente, a rede ainda tem suas desvantagens, esquecendo a sobrancelha de um lado e assim por diante. Mas essa abordagem tornou possível entender melhor o que e por que o modelo resultante faz. Essa abordagem é ideal nos casos em que temos dúvidas sobre a convergência correta da rede.
Conclusões
As redes neurais continuam sendo a solução para o complexo problema de otimização. Mas mesmo as placas de atenção de rede mais simples trazem alguma transparência a essa selva. Essa abordagem pode ser usada juntamente com a orientação usual para a função de perda, o que permitirá obter redes ainda mais conscientes.
Se recordarmos a pergunta retórica desde o início do artigo, podemos dizer que o uso de cartões de atenção junto com a resposta final da rede já traz uma certa explicação clara que faltava.
Visualize, visualize e visualize novamente!