Removi 74% dos neurônios de uma rede neural. Isso reduziu a precisão em apenas 0,50%. Aqui está uma análise (com código):
Uma rede neural treinada tem sempre neurônios que não contribuem substancialmente para o desempenho. Mas eles ainda consomem memória. Estes podem ser removidos sem comprometer significativamente a precisão. Vamos ver como identificá-los!
Aqui estão os passos: Passo 1) Treine a rede neural como de costume. Passo 2) Passe o conjunto de validação pela rede treinada e, para cada neurônio nas camadas ocultas, calcule: - A ativação média - A variância das ativações (se as ativações puderem ser -ve) Verifique isto👇
Passo 3) Corte os neurônios que têm uma média e variância de ativação próximas de zero, pois têm pouco impacto na saída do modelo. Idealmente, plote o desempenho em vários limiares de poda para selecionar o modelo que se ajusta ao seu equilíbrio entre tamanho e precisão. Verifique isto 👇
Vamos olhar para o código. Começamos por definir uma rede neural simples e treiná-la. Como iremos calcular as ativações a nível de neurônios mais tarde para poda, retornamos todas as ativações intermediárias na passagem direta. Verifique isto👇
Em seguida, definimos duas listas com três elementos: - Uma armazenará a média das ativações - Outra armazenará o desvio padrão das ativações Passamos o conjunto de validação pelo nosso modelo para calcular essas estatísticas para cada camada oculta. Verifique isto 👇
Neste ponto, vamos criar um gráfico de distribuição das estatísticas a nível de neurônios que gerámos acima. Como mostrado abaixo, a maioria das ativações médias dos neurônios e o seu desvio padrão estão fortemente distribuídos em torno de valores próximos de zero. Vamos tentar podá-los a seguir.
Para a poda, iteramos sobre uma lista de limiares e: - Criamos uma nova rede e transferimos os pesos que passam o limiar. - Avaliamos a nova rede e calculamos o total de parâmetros. - Adicionamos os resultados a uma lista. Verifique isto 👇
Esta tabela compara a precisão do modelo podado e a redução de tamanho em vários limiares em relação ao modelo original. Com média=0.1 e desvio-padrão=0.4: - A precisão do modelo cai em 0.08%. - O tamanho do modelo reduz em 62%. Isso é uma enorme redução. Verifique isto 👇
Aqui está outro resultado interessante. Com média=0.5 e desvio-padrão=1: - A precisão do modelo cai em 0.5%. - O tamanho do modelo reduz em 74%. Portanto, essencialmente, obtemos um desempenho quase semelhante para 1/4 dos parâmetros. Verifique isto 👇
Claro que há um compromisso entre precisão e tamanho. À medida que reduzimos o tamanho, a precisão diminui (veja o vídeo). Mas na maioria dos casos, a precisão não é a única métrica que otimizamos. Em vez disso, várias métricas operacionais, como eficiência, memória, etc., são os fatores chave.
40,99K