Compressão de Modelos LSTM
A implantação de modelos de inteligência artificial em ambientes de varejo pode enfrentar restrições práticas. Esses ambientes incluem sistemas de nível de loja, dispositivos de borda e configurações com orçamento limitado, especialmente para empresas de varejo de pequeno e médio porte. Um dos principais casos de uso é a previsão de demanda para gerenciamento de estoque ou otimização de prateleiras, o que exige que o modelo implantado seja pequeno, rápido e preciso. É exatamente isso que vamos trabalhar aqui. Neste artigo, vamos percorrer três técnicas de compressão passo a passo. Vamos começar construindo um modelo LSTM de referência, medir seu tamanho e precisão, e então aplicar cada técnica de compressão uma a uma para ver como ela altera o modelo. No final, vamos reunir tudo em uma comparação lado a lado.
À medida que tudo está se movendo para a borda, o varejo também está se movendo em direção a aplicativos móveis de nível de loja, dispositivos e sensores IoT, que podem executar os modelos e prever a previsão localmente, em vez de chamar as APIs de nuvem a cada vez. Um modelo de previsão executado em um dispositivo de loja ou aplicativo móvel, como um sensor de prateleira ou scanner, pode enfrentar restrições como memória limitada, bateria limitada e requer baixa latência de rede. Mesmo para implantações em nuvem, se o tamanho do modelo for menor, pode reduzir os custos. Especialmente quando se está executando milhares de previsões diárias em um grande catálogo de produtos. Um modelo com tamanho de 4KB custa significativamente menos do que um modelo com tamanho de 64KB. Além do custo, a velocidade de inferência também afeta as decisões em tempo real. Uma previsão de modelo mais rápida pode beneficiar a otimização de estoque e alertas de reabastecimento.
Para o experimento, utilizei o conjunto de dados de previsão de demanda de itens do Kaggle em nível de loja. Os dados são distribuídos ao longo de 5 anos de vendas diárias em 10 lojas e 50 itens. Esse conjunto de dados público tem um padrão de varejo com sazonalidade semanal, tendências e ruído. Para isso, usei dados de amostra de 5 lojas, 10 itens e criei 50 séries temporais separadas. Cada combinação de loja e item gera suas próprias sequências, o que resulta em um total de 72.000 dados de treinamento. O modelo irá prever os dados de vendas do dia seguinte com base na história de vendas dos 14 dias anteriores, o que é uma configuração comum para previsão de demanda. O experimento foi executado 3 vezes e média para resultados confiáveis.
Antes de comprimir qualquer coisa, precisamos de um ponto de referência. Nossa referência é um modelo LSTM padrão com 64 unidades ocultas treinadas no conjunto de dados descrito acima. O modelo LSTM-64 é de 66,25KB de tamanho com um erro de previsão de 15,92%. Cada técnica de compressão abaixo será medida contra esses números. Nesta abordagem, reduzimos a capacidade do modelo reduzindo o número de unidades ocultas. Em vez de um modelo LSTM de 64 unidades, treinamos um modelo de 32/16 unidades do zero e vemos como ele se sai. Essa é uma abordagem mais simples entre as três.
O modelo LSTM-16 é 14,5 vezes menor do que o modelo de 64 bits (4,57KB vs 66,25KB), enquanto o erro de previsão aumenta apenas 0,82%. Para muitas aplicações de varejo, essa diferença é mínima, enquanto o modelo LSTM 32 oferece um meio-termo com compressão de 3,9 vezes, tendo uma perda de precisão de 0,3%. A poda é a técnica de remoção de pesos de baixa importância do treinamento do modelo. A ideia central é que as contribuições de muitas conexões de rede neural são mínimas e podem ser ignoradas ou definidas como zero. Após a poda, o modelo é ajustado finamente para recuperar a precisão. Com a poda de magnitude em 50% de esparsidade, o tamanho do modelo caiu para 8,56KB com apenas 0,28% de perda de precisão em comparação com a referência. Mesmo com 70% de poda, o erro de previsão estava abaixo de 17%.
A quantização lida com a conversão de pesos de ponto flutuante de 32 bits para inteiros de 8 bits após o treinamento, o que reduz o tamanho do modelo por 4 vezes sem perder muita precisão. Para implantação em produção, é recomendado usar a quantização integrada do TensorFlow Lite. A quantização INT8 reduziu o tamanho do modelo para 4,28KB, de 66,25KB (compressão de 15,5 vezes), com um aumento de 0,29% na precisão. Esse é o modelo mais pequeno com precisão comparável ao modelo LSTM 32 não podado. Especialmente para implantações, a inferência INT8 é suportada e é a melhor entre as 3 técnicas. Aqui está como cada técnica se compara com a referência LSTM-64:
Cada uma das técnicas acima vem com suas próprias compensações. O dimensionamento da arquitetura pode reduzir o tamanho do modelo, mas requer o treinamento do modelo. A poda preserva a arquitetura, mas filtra as conexões. A quantização pode ser rápida, mas requer ajustes finos. Com base nos resultados do experimento, podemos concluir que a quantização INT8 é a técnica de compressão mais eficaz, seguida pela poda de magnitude e, por fim, pelo dimensionamento da arquitetura. No entanto, é importante notar que a escolha da técnica de compressão depende do caso de uso específico e dos requisitos do modelo. Além disso, é fundamental realizar experimentos e aval