Neural Tangent Kernel (NTK)
O núcleo tangente neural (NTK) mede como as previsões da rede respondem a alterações nos parâmetros, estabelecendo uma ligação entre o treino de redes neurais e os métodos de kernel.
O núcleo tangente neural (NTK) é uma função de similaridade que mede como as saídas da rede neural para duas entradas respondem às mesmas pequenas alterações nos parâmetros do modelo. As previsões para entradas têm forte acoplamento quando os gradientes dos parâmetros estão alinhados. Isso estabelece uma ligação entre o treino de redes neurais e os métodos de kernel, que aprendem por meio de similaridades entre pares de exemplos.
Arthur Jacot, Franck Gabriel e Clément Hongler introduziram o termo em 2018 em Núcleo Tangente Neural: Convergência e Generalização em Redes Neurais, estabelecendo uma estrutura matemática para analisar como as previsões evoluem durante o treino.
Como funciona o núcleo tangente neural#
Para uma rede neural com saída escalar, calcula-se a derivada da saída em relação a cada parâmetro treinável. Essas derivadas formam um vetor gradiente que descreve a sensibilidade da previsão aos pesos do modelo. O NTK entre duas entradas é o produto escalar dos respetivos vetores gradiente.
Num conjunto de dados, esses valores aos pares formam uma matriz de kernel, também chamada matriz de Gram. A diagonal mede a sensibilidade de cada previsão às alterações nos parâmetros; os elementos fora da diagonal descrevem o acoplamento entre exemplos diferentes. Para várias saídas, cada par de entradas produz um bloco que contém as interações entre as coordenadas de saída, como no cálculo do NTK empírico.
Durante a descida do gradiente, o kernel determina como a redução do erro de previsão de um exemplo altera as previsões dos restantes. Os gradientes relevantes são derivadas das saídas da rede; a retropropagação fornece os mecanismos de diferenciação. A função de perda determina então a direção e a intensidade das atualizações que corrigem o erro.
Largura infinita, convergência e generalização#
A largura de uma rede é o número de unidades ocultas, ou canais numa camada convolucional. Com a parametrização NTK e pressupostos adequados de inicialização e treino, o aumento das larguras das camadas ocultas em direção ao infinito produz um kernel limite determinístico que permanece constante durante o treino. O NTK empírico de uma rede finita é avaliado nos parâmetros reais da rede e pode mudar à medida que o treino avança.
No regime de kernel constante, o treino segue a aproximação de primeira ordem da rede em torno da inicialização. Trata-se de uma rede linearizada: as previsões dependem linearmente das alterações nos parâmetros, mantendo uma dependência não linear das entradas. O termo relacionado treino preguiçoso descreve um regime em que as características tangentes mudam pouco. A aprendizagem de características envolve uma evolução substancial dessas características durante a otimização.
Para a perda quadrática sob fluxo de gradiente com kernel constante — o limite em tempo contínuo de pequenos passos de gradiente — os erros diminuem mais rapidamente ao longo dos autovetores do kernel com valores próprios maiores. Os autovetores identificam padrões entre exemplos, e os valores próprios determinam a velocidade com que esses padrões são aprendidos. Isso explica por que a paragem antecipada funciona como regularização: limita o ajuste de componentes aprendidas mais lentamente, incluindo componentes associadas ao ruído e ao sobreajuste. As previsões para entradas não vistas dependem das respetivas similaridades de kernel com os dados de treino.
Aplicações e conceitos relacionados#
Os métodos NTK permitem a regressão por kernel e a análise da classificação de imagens. O NTK convolucional (CNTK) estende esta construção às redes neurais convolucionais. Sanjeev Arora e colegas usaram o cálculo exato do CNTK para a classificação no CIFAR-10, oferecendo uma alternativa baseada em kernel ao treino de redes convolucionais finitas.
O kernel de processo gaussiano de rede neural (NNGP) descreve a covariância entre as saídas de redes inicializadas aleatoriamente no limite de largura infinita. O NTK descreve a dinâmica de treino impulsionada pelo gradiente. De forma semelhante, a sondagem linear treina um classificador linear com representações congeladas; a linearização NTK usa derivadas em relação aos parâmetros treináveis selecionados como características.
A seleção de parâmetros altera, portanto, o kernel tangente que rege o treino. No ajuste fino do Ultralytics YOLO26, o argumento freeze argumento mantém fixas as camadas selecionadas, pelo que os respetivos parâmetros não contribuem com direções de atualização para o kernel de treino efetivo.
Calcular um NTK empírico#
Este exemplo de PyTorch calcula o kernel para duas imagens de dígitos manuscritos do conjunto de dados digits incluído no scikit-learn. Instala as dependências com pip install torch scikit-learn.
import torch
from sklearn.datasets import load_digits
from torch import nn
torch.manual_seed(0)
digits = load_digits()
inputs = torch.tensor(digits.data[:2], dtype=torch.float32) / 16
model = nn.Sequential(nn.Linear(64, 8), nn.Tanh(), nn.Linear(8, 1))
parameters = tuple(model.parameters())
outputs = model(inputs)
# Cada linha da Jacobiana contém as derivadas dos parâmetros de uma saída.
rows = []
for output in outputs[:, 0]:
gradients = torch.autograd.grad(output, parameters, retain_graph=True)
rows.append(torch.cat([gradient.flatten() for gradient in gradients]))
jacobian = torch.stack(rows)
kernel = jacobian @ jacobian.T
print(kernel)A matriz 2 x 2 apresentada contém as duas sensibilidades próprias e o acoplamento entre exemplos. A sua construção como jacobian @ jacobian.T torna o NTK empírico de saída escalar simétrico e semidefinido positivo, com posto limitado tanto pelo número de exemplos como pelo número de parâmetros treináveis.










