Estou demorando um pouco para tentar entender os cálculos e a mecânica dos algoritmos de aprendizado de máquina que uso no meu dia-a-dia.
Estudando a literatura de retropropagação no curso CS231n, quero ter certeza de que entendi a regra da cadeia corretamente antes de continuar meu estudo.
Digamos que tenho a função sigmóide:
neste caso,
Podemos escrever esta função como um gráfico computacional (ignorando os valores coloridos por enquanto):
Podemos agrupar os nós modularizados para calcular o gradiente do sigmóide e sua entrada em uma única derivação:
Primeiro, realizamos a propagação direta para obter as saídas em cada unidade:
w = [2,-3,-3]
x = [-1, -2]
# Compute the forward pass
product = [w[0]*x[0]+w[1]*x[1]+w[2]]
activation = 1 / 1 + math.exp(-product)
Para calcular o gradiente da ativação, podemos usar a fórmula acima:
grad_product = (1 - activation) * activation
Onde eu sinto que posso estar ficando confuso, ou, pelo menos menos intuitivo, é calcular o gradiente para x
e w
:
grad_x = [w[0] * activation + w[2] * activation]
grad_w = [x[0] * activation + x[1] * activation + 1 * activation]
Mais concretamente, estou confuso sobre o motivo pelo qual aplicamos 1 * activation
ao calcular o gradiente w.
Pode ajudar o leitor a identificar minha dificuldade teórica se tentar raciocinar os cálculos dos gradientes de x e de w ...
O gradiente de cada é dado pelo correspondente sob a regra da multiplicação: se então . Em seguida, usando a regra da cadeia, multiplicamos esses gradientes locais pelo gradiente do nó sucessivo (para cada caminho de ) para obter seu gradiente na saída da função. Isso explica o cálculo da computação .
O gradiente de é dado exatamente da mesma maneira (inversa), como explicado acima, com o adicional . Eu acredito que esta expressão adicional é proveniente de ? O gradiente local de uma unidade de adição é sempre 1 para todas as entradas e a multiplicação com é o resultado de encadear o gradiente à saída da função?1 * activation
activation
Estou parcialmente confiante com meu entendimento atual, mas gostaria que alguém esclarecesse minha intuição atual sobre os cálculos envolvidos nos gradientes de computação.