Inicialização de pesos, também chamada de inicialização de parâmetros, é a etapa de pré-treinamento em aprendizado profundo que atribui valores iniciais aos parâmetros treináveis de uma rede neural, como pesos e vieses. Esses parâmetros são modificados durante o treinamento, e a escolha do método de inicialização afeta a velocidade de convergência, a escala das ativações, a escala dos sinais de gradiente durante a retropropagação e a qualidade final do modelo. A inicialização adequada é necessária para evitar problemas como gradientes vanishing ou exploding e a saturação da função de ativação.
Em um perceptron multicamadas (MLP), cada camada contém uma matriz de pesos e um vetor de vieses. O método de inicialização determina os valores iniciais desses parâmetros. Embora o artigo se concentre nos pesos, os vieses também são treináveis e são tipicamente inicializados separadamente. Para redes neurais convolucionais (CNNs), os mesmos princípios se aplicam aos kernels e vieses.
Inicialização Constante
A forma mais simples é a inicialização zero, onde todos os pesos e vieses são definidos como zero. Isso raramente é usado para pesos porque leva à simetria: todos os neurônios em uma camada calculam saídas e gradientes idênticos, então eles aprendem as mesmas características. A inicialização zero é comumente usada para vieses, mas os pesos exigem valores aleatórios para quebrar a simetria.
Os vieses são geralmente inicializados como zero, mas há exceções. Em unidades multiplicativas, como o portão de esquecimento de um LSTM, definir o viés como 1 pode melhorar o fluxo de gradiente através do portão. Para neurônios ReLU, um pequeno viés positivo (por exemplo, 0,1) pode prevenir o problema do ReLU morto, garantindo gradientes não nulos na inicialização.
Redes neurais recorrentes (RNNs) frequentemente usam funções de ativação limitadas, como sigmoide ou tanh, para evitar valores explosivos. Algumas pesquisas, como as de Le, Jaitly e Hinton em 2015, sugeriram inicializar os pesos recorrentes com a matriz identidade e os vieses com zero, o que se assemelha a conexões residuais e LSTMs sem portão de esquecimento.
Inicialização Aleatória
A inicialização aleatória amostra pesos de uma distribuição normal ou uniforme, tipicamente de forma independente. A escolha da distribuição e sua variância é crítica para manter a propagação do sinal através da rede.
Inicialização de LeCun
A inicialização de LeCun, popularizada por Yann LeCun e colegas em 1998, visa preservar a variância das ativações durante a passagem direta. Ela amostra cada peso de uma distribuição com média zero e variância 1/n_in, onde n_in é o número de entradas da camada (fan-in). Para uma distribuição uniforme, isso corresponde a U(±√(3/n_in)). Este método funciona bem com funções de ativação como tanh, mas pode ser subótimo para ReLU.
Inicialização de Glorot
A inicialização de Glorot, também conhecida como inicialização de Xavier, foi proposta por Xavier Glorot e Yoshua Bengio. Ela equilibra dois objetivos: preservar a variância das ativações na passagem direta e preservar a variância dos gradientes na passagem reversa. Para inicialização uniforme, os pesos são amostrados de U(±√(6/(n_in + n_out))), onde n_out é o número de saídas (fan-out). Este método é eficaz para ativações sigmoide ou tanh, mas pode causar problemas com ReLU devido à sua natureza assimétrica.
Inicialização de He
A inicialização de He, introduzida por Kaiming He e colegas em 2015, é projetada para ativações ReLU. Ela define a variância como 2/n_in, levando em conta que o ReLU zera metade das ativações. Para distribuição uniforme, os pesos são amostrados de U(±√(6/n_in)). Este método ajuda a prevenir gradientes vanishing em redes profundas com ReLU.
Preservação de Variância e Fluxo de Gradiente
O principal objetivo da inicialização é manter a variância das ativações e gradientes estável entre as camadas. Se os pesos forem muito pequenos, as ativações encolhem, levando a gradientes vanishing. Se forem muito grandes, as ativações crescem, causando gradientes exploding. As inicializações de Glorot e He fornecem uma maneira fundamentada de definir a variância com base no fan-in e fan-out.
Para redes profundas, o produto das matrizes de pesos entre as camadas pode causar crescimento ou decaimento exponencial. A inicialização adequada garante que o sinal inicial se propague sem escalonamento extremo, permitindo treinamento eficaz desde o início.
Impacto na Dinâmica de Treinamento
A inicialização afeta não apenas a velocidade de convergência, mas também a qualidade do modelo final. Uma inicialização ruim pode levar a treinamento lento, mínimos locais ou falha na convergência. Por exemplo, a inicialização zero causa simetria, enquanto pesos excessivamente grandes podem saturar funções de ativação, levando a gradientes pequenos.
Na prática, a inicialização é frequentemente combinada com outras técnicas, como normalização em lote, que pode reduzir a sensibilidade à inicialização. No entanto, uma boa inicialização continua sendo importante, especialmente para redes muito profundas ou quando a normalização não é usada.
Arquiteturas Especializadas
Diferentes arquiteturas exigem estratégias de inicialização adaptadas. Para CNNs, os kernels são inicializados de forma semelhante aos pesos de MLP, mas o fan-in e fan-out são calculados com base no tamanho do kernel e no número de canais. Para transformers, que usam normalização de camada e conexões residuais, a inicialização frequentemente usa desvios padrão menores, como 0,02, como visto em modelos como BERT.
Para modelos de linguagem de grande escala, a inicialização é um fator crítico na estabilidade do treinamento. Muitos modelos modernos usam variações das inicializações de He ou Glorot, às vezes com escalonamento adicional baseado na profundidade do modelo.
Considerações Práticas
Na maioria dos frameworks de aprendizado profundo, métodos de inicialização padrão são fornecidos, mas os praticantes podem personalizá-los. Por exemplo, PyTorch e TensorFlow oferecem funções para inicialização uniforme, normal e ortogonal. A inicialização ortogonal, que define matrizes de pesos como ortogonais, é às vezes usada para RNNs para preservar normas de gradiente.
Ao treinar redes muito profundas, é comum usar conexões residuais e inicialização cuidadosa para evitar degradação. A escolha da inicialização deve estar alinhada com a função de ativação e a arquitetura da rede.
Contexto Histórico
O estudo da inicialização de pesos remonta aos primeiros trabalhos em redes neurais. O artigo de LeCun de 1998 sobre aprendizado baseado em gradiente aplicado ao reconhecimento de documentos introduziu a inicialização que preserva a variância. O artigo de Glorot e Bengio de 2010, "Understanding the difficulty of training deep feedforward neural networks", destacou a importância da inicialização para redes profundas. O artigo de He et al. de 2015 sobre aprendizado residual profundo refinou ainda mais os métodos para redes ReLU.
Esses trabalhos fundamentais moldaram a prática moderna, e a inicialização continua sendo uma área ativa de pesquisa, especialmente para modelos extremamente profundos ou de grande escala.
Conclusão
A inicialização de pesos é uma etapa fundamental no treinamento de redes neurais. Métodos como inicialização zero, aleatória, de LeCun, de Glorot e de He têm casos de uso específicos e trade-offs. A escolha da inicialização pode impactar significativamente a dinâmica de treinamento, a convergência e o desempenho final. Compreender esses métodos é essencial para praticantes que trabalham com modelos de aprendizado profundo, desde MLPs simples até arquiteturas complexas de transformers.