Eu estava lendo o documento de normalização em lote [1] e tinha uma seção em que é apresentado um exemplo, tentando mostrar por que a normalização deve ser feita com cuidado. Sinceramente, não consigo entender como o exemplo funciona e estou genuinamente muito curioso para entender que eles são tão importantes quanto eu. Primeiro deixe-me citar aqui:
Por exemplo, considere uma camada com a entrada u que adiciona o viés b aprendido, e normaliza o resultado subtraindo a média da activação calculado sobre os dados de em que x = u + b , X = { x 1 . . . N } é o conjunto de valores de x sobre o conjunto de treinamento e E [ x ] = ∑ N i = 1 x i. Se um passo de descida de gradiente ignora a dependência de em b , ele atualiza b ← b + Δ > b , onde Δ b ∝ - ∂ l . Entãou+(b+Δb)-E[u+(b+Δb)]=u+b-E[u+b]. Assim, a combinação da atualização parabesubsequente mudança na normalização não levou a nenhuma alteração na saída da camada nem, consequentemente, à perda.
Acho que entendi a mensagem de que, se não se faz a normalização adequadamente, pode ser ruim. Eu simplesmente não sei como o exemplo que eles estão usando retrata isso.
Estou ciente de que é difícil ajudar alguém se eles não são mais específicos sobre o que os confunde, por isso fornecerei na próxima seção as coisas que estão me confundindo com a explicação deles.
Acho que a maioria das minhas confusões pode ser notacional, então vou esclarecer.
Primeiro, acho que uma das coisas que mais me confunde é o que significa para os autores ter uma unidade na rede e o que é uma ativação. Normalmente, penso em uma ativação como:
onde são os vetores de recursos brutos da primeira camada de entrada.
Além disso, acho que uma das primeiras coisas que me confunde (devido à razão anterior) é qual é realmente o cenário que eles estão tentando explicar. Diz:
normaliza o resultado subtraindo a média da activação calculado através dos dados de em que x = u + b
Eu acho que o que eles estão tentando dizer é que, em vez de usar as ativações calculadas pelo passe para frente, alguém realiza algum tipo de "normalização" subtraindo a ativação média:
e depois passa isso para o algoritmo de retropropagação. Ou pelo menos é o que faria sentido para mim.
Em relação a isso, acho que o que eles chamam de é talvez x ( l ) ? É o que eu acho que eles chamam de "input" e têm a equação x = u + b (acho que eles estão usando a unidade de ativação de identidade / linear para sua rede neural? Talvez).
Para mais me confundem, eles definem como algo proporcional à derivada parcial, mas a derivada parcial é calculado em relação à x , que parece realmente bizarro para mim. Geralmente, as derivadas parciais ao usar descida de gradiente são relativas aos parâmetros da rede. No caso de uma compensação, eu teria pensado:
faz mais sentido do que tomar a derivada de com relação às ativações normalizadas. Eu estava tentando entender por que eles levaria a derivada em relação à x e eu pensei que talvez eles estavam se referindo aos deltas quando escreveram ∂ l desde, geralmente, que é a única parte do algoritmo volta-hélice que tem um derivado com respeito à pré-activações uma vez que a equação de delta é:
Outra coisa que me confunde é:
Então .
eles realmente não dizem o que estão tentando calcular na equação acima, mas eu inferiria que eles estão tentando calcular a ativação normalizada atualizada (para a primeira camada?) depois que é atualizado para b + Δ b ? Não tenho certeza se comprei o argumento deles, porque acho que a equação correta deveria ter sido:
Não tenho certeza se esse é o entendimento correto, mas pensei um pouco no exemplo deles. Parece que o exemplo deles não possui uma unidade de ativação não linear (usa a identidade) e eles estão falando apenas da primeira camada de entrada? Como eles deixaram de fora muitos detalhes e a notação não é muito clara, não posso deduzir exatamente do que eles estão falando. Alguém sabe como expressar este exemplo com uma notação que expressa o que está acontecendo em cada camada? Alguém entende o que realmente está acontecendo com esse exemplo e deseja compartilhar sua sabedoria comigo?
[1]: Ioffe S. e Szegedy C. (2015),
"Normalização de lotes: acelerando o treinamento em rede profunda reduzindo a mudança de Covariate Interna",
Anais da 32ª Conferência Internacional sobre Aprendizado de Máquina , Lille, França, 2015.
Journal of Machine Learning Pesquisa: W&CP volume 37
fonte
Respostas:
Portanto, eles fizeram a descida do gradiente ciente da normalização em seu método.
Em relação às suas perguntas
Pode ser útil dar uma olhada em algumas implementações de código aberto da normalização de lotes, por exemplo, em Lasanha e Keras .
Há outra pergunta que pode parecer relacionada: por que calcular o gradiente dos momentos (média e variância) ao usar a Normalização de lotes em uma rede neural?
fonte