Funções de Ativação Sigmoid vs. ReLU: O Custo de Inferência da Perda de Contexto Geométrico

Funções de Ativação Sigmoid vs. ReLU: O Custo de Inferência da Perda de Contexto Geométrico

Uma rede neural profunda pode ser entendida como um sistema geométrico, onde cada camada remodela o espaço de entrada para formar limites de decisão cada vez mais complexos. Para que isso funcione eficazmente, as camadas devem preservar informações espaciais significativas — particularmente o quão distante um ponto de dados está desses limites — já que essa distância permite que camadas mais profundas construam […] O post Funções de Ativação Sigmoid vs. ReLU

Uma rede neural profunda pode ser entendida como um sistema geométrico, onde cada camada remodela o espaço de entrada para formar limites de decisão cada vez mais complexos. Para que isso funcione eficazmente, as camadas devem preservar informações espaciais significativas — particularmente o quão distante um ponto de dados está desses limites — já que essa distância permite que camadas mais profundas construam representações ricas e não lineares. A Sigmoid perturba esse processo ao comprimir todas as entradas em um intervalo estreito entre 0 e 1. À medida que os valores se afastam dos limites de decisão, eles se tornam indistinguíveis, causando uma perda de contexto geométrico entre as camadas. Isso leva a representações mais fracas e limita a eficácia da profundidade. A ReLU, por outro lado, preserva a magnitude para entradas positivas, permitindo que a informação de distância flua pela rede. Isso permite que modelos mais profundos permaneçam expressivos sem exigir largura ou computação excessivas. Neste artigo, focamos nesse comportamento de passagem direta — analisando como Sigmoid e ReLU diferem na propagação de sinal e na geometria da representação usando um experimento de duas luas, e o que isso significa para a eficiência e escalabilidade da inferência. Configurando as dependências (Copy Code Copied Use a different Browser) import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from matplotlib.colors import ListedColormap from sklearn.datasets import make_moons from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split (Copy Code Copied Use a different Browser) plt.rcParams.update({
"font.family": "monospace",
"axes.spines.top": False,
"axes.spines.right": False,
"figure.facecolor": "white",
"axes.facecolor": "#f7f7f7",
"axes.grid": True,
"grid.color": "#e0e0e0",
"grid.linewidth": 0.6,
})
T = {
"bg": "white",
"panel": "#f7f7f7",
"sig": "#e05c5c",
"relu": "#3a7bd5",
"c0": "#f4a261",
"c1": "#2a9d8f",
"text": "#1a1a1a",
"muted": "#666666",
}
Criando o conjunto de dados Para estudar o efeito das funções de ativação em um ambiente controlado, primeiro geramos um conjunto de dados sintético usando make_moons do scikit-learn. Isso cria um problema não linear de duas classes onde limites lineares simples falham, tornando-o ideal para testar o quão bem as redes neurais aprendem superfícies de decisão complexas. Adicionamos uma pequena quantidade de ruído para tornar a tarefa mais realista e, em seguida, padronizamos os recursos usando StandardScaler para que ambas as dimensões estejam na mesma escala — garantindo um treinamento estável. O conjunto de dados é o

funções de ativaçãoredes neuraiscomputação