Vou começar a fazer uma lista aqui das que aprendi até agora. Como @marcodena disse, prós e contras são mais difíceis, porque na maioria das vezes são apenas heurísticas aprendidas ao tentar essas coisas, mas acho que pelo menos ter uma lista do que elas são não pode machucar.
Primeiro, definirei a notação explicitamente para que não haja confusão:
Notação
Esta notação é do livro de Neilsen .
Uma Rede Neural Feedforward é formada por várias camadas de neurônios conectados. Ele recebe uma entrada e, em seguida, ela entra pela rede e a rede neural retorna um vetor de saída.
Mais formalmente, chamar a activação (aka saída) do j t h neurónio no i t h camada, em que um 1 j é o j t h elemento no vector de entrada.umaEujjt hEut huma1jjt h
Em seguida, podemos relacionar a entrada da próxima camada com a anterior por meio da seguinte relação:
umaEuj= σ( ∑k( wEuj k⋅ ai - 1k) + bEuj)
Onde
- é a função de ativação,σ
- é o peso doneurônio k t h nacamada ( i - 1 ) t h para oneurônio j t h nacamada i t h ,WEuj kkt h( i - 1 )t hjt hEut h
- é o viés doneurônio j t h nacamada i t h , ebEujjt hEut h
- representa o valor de ativação do j t h neurônio nacamada i t h .umaEujjt hEut h
Às vezes, escrevemos para representar ∑ k ( w i j k ⋅ a i - 1 k ) + b i j , em outras palavras, o valor de ativação de um neurônio antes de aplicar a função de ativação.zEuj∑k( wEuj k⋅ ai - 1k) + bEuj
Para uma notação mais concisa, podemos escrever
umaEu= σ( wEu× ai - 1+ bEu)
Para utilizar esta fórmula para calcular a saída de uma rede de alimentação de entrada para alguma entrada , definir um 1 = I , em seguida, calcular um 2 , um 3 , ... , um m , em que m é o número de camadas.Eu∈ Rnuma1= Iuma2, um3, … , Ummm
Funções de Ativação
(a seguir, escreveremos vez de e x para facilitar a leitura)exp( X )ex
Identidade
Também conhecida como função de ativação linear.
umaEuj= σ( zEuj) = zEuj
Degrau
umaEuj= σ( zEuj) = { 01se zEuj< 0se zEuj> 0
Linear por partes
xminxmax
umaEuj= σ( zEuj) = ⎧⎩⎨⎪⎪⎪⎪0 0m zEuj+ b1se zEuj< xminse xmin≤ zEuj≤ xmaxse zEuj> xmax
Onde
m = 1xmax- xmin
e
b = - m xmin= 1 - m xmax
Sigmoid
umaEuj=σ( zEuj) = 11 +exp( - zEuj)
Log-log complementar
umaEuj= σ( zEuj) = 1 - exp( -exp( zEuj) ))
Bipolar
umaEuj= σ( zEuj) = { - 1 1se zEuj< 0se zEuj> 0
Sigmoide bipolar
umaEuj= σ( zEuj) = 1 - exp( - zEuj)1 + exp( - zEuj)
Tanh
umaEuj= σ( zEuj) = tanh( zEuj)
LeCun's Tanh
Consulte Backprop eficiente .
umaEuj= σ( zEuj) = 1,7159 tanh( 23zEuj)
Escalado:
Hard Tanh
umaEuj= σ( zEuj) = max( -1,min(1,zEuj) ))
Absoluto
umaEuj= σ( zEuj) = | ZEuj∣
Retificador
Também conhecida como Unidade Linear Retificada (ReLU), Max ou Função de Rampa .
umaEuj= σ( zEuj) = max ( 0 , zEuj)
Modificações do ReLU
Estas são algumas funções de ativação com as quais eu tenho tocado que parecem ter um desempenho muito bom para o MNIST por razões misteriosas.
umaEuj= σ( zEuj) = max ( 0 , zEuj) + cos( zEuj)
Escalado:
umaEuj= σ( zEuj) = max ( 0 , zEuj) + sin( zEuj)
Escalado:
Retificador Suave
Também conhecida como Unidade linear retificada suave, Smooth Max ou Soft plus
umaEuj= σ( zEuj) = log( 1+exp( zEuj) ))
Logit
umaEuj= σ( zEuj) = log( zEuj( 1 - zEuj))
Escalado:
Probit
umaEuj= σ( zEuj) = 2-√erf- 1( 2 zEuj- 1 )
.
Onde é a função de erro . Não pode ser descrito por meio de funções elementares, mas você pode encontrar maneiras de aproximar sua inversão nessa página da Wikipedia e aqui .erf
Alternativamente, pode ser expresso como
umaEuj= σ(zEuj) = ϕ ( zEuj)
.
Onde é a função de distribuição cumulativa (CDF). Veja aqui meios de aproximar isso.ϕ
Escalado:
Cosine
Veja Pias de cozinha aleatórias .
umaEuj= σ( zEuj) = cos( zEuj)
.
Softmax
Também conhecido como Exponencial Normalizado.
umaEuj= exp( zEuj)∑kexp( zEuk)
Este é um pouco estranho, porque a saída de um único neurônio depende dos outros neurônios nessa camada. Também fica difícil calcular, pois pode ser um valor muito alto; nesse caso, provavelmente . Da mesma forma, se for um valor muito baixo, ele ficará abaixo e se tornará .zEujexp( zEuj)zEuj0 0
Para combater isso, calcularemos . Isso nos dá:registro( aEuj)
registro( aEuj) = log⎛⎝⎜exp( zEuj)∑kexp( zEuk)⎞⎠⎟
registro( aEuj) = zEuj- log( ∑kexp( zEuk) ))
Aqui precisamos usar o truque log-sum-exp :
Digamos que estamos computando:
registro( e2+ e9+ e11+ e- 7+ e- 2+ e5)
Primeiro, ordenaremos nossos exponenciais por magnitude, por conveniência:
registro( e11+ e9+ e5+ e2+ e- 2+ e- 7)
Então, como é o mais alto, multiplicamos por :e11e- 11e- 11
registro( e- 11e- 11( e11+ e9+ e5+ e2+ e- 2+ e- 7) ))
registro( 1e- 11( e0 0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18) ))
registro( e11( e0 0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18) ))
registro( e11) + log( e0 0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18)
11 + log( e0 0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18)
Podemos então calcular a expressão à direita e registrar o log. Não há problema em fazer isso porque essa soma é muito pequena em relação a , portanto, qualquer sub-fluxo para 0 não seria significativo o suficiente para fazer diferença de qualquer maneira. O estouro não pode acontecer na expressão à direita, porque temos a garantia de que, após multiplicar por , todos os poderes serão .registro( e11)e- 11≤ 0
Formalmente, chamamos . Então:m = max ( zEu1, zEu2, zEu3, . . . )
registro( ∑kexp( zEuk) ) = m + log( ∑kexp( zEuk- m ) )
Nossa função softmax passa a ser:
umaEuj= exp( log( aEuj) ) = exp( zEuj- m - log( ∑kexp( zEuk- m ) ) )
Também como nota lateral, a derivada da função softmax é:
dσ( zEuj)dzEuj= σ′( zEuj) = σ( zEuj) ( 1 - σ( zEuj) ))
Maxout
Este também é um pouco complicado. Essencialmente, a idéia é que dividamos cada neurônio em nossa camada máxima em muitos sub-neurônios, cada um com seus próprios pesos e preconceitos. Em seguida, a entrada de um neurônio vai para cada um dos seus sub-neurônios, e cada sub-neurônio simplesmente gera seus (sem aplicar nenhuma função de ativação). O desse neurônio é então o máximo de todas as saídas de seu sub-neurônio.zumaEuj
Formalmente, em um único neurônio, digamos que temos sub-neurônios. Entãon
umaEuj= maxk ∈ [ 1 , n ]sEuj k
Onde
sEuj k= ai - 1∙ wEuj k+ bEuj k
( é o produto escalar )∙
Para nos ajudar a pensar sobre isso, considere a matriz de pesos para a camada de uma rede neural que está usando, digamos, uma função de ativação sigmóide. é uma matriz 2D, em que cada coluna é um vetor para o neurônio contém um peso para cada neurônio na camada anterior .WEuEuºWEuWEujji - 1
Se tivermos sub-neurônios, precisaremos de uma matriz de pesos 2D para cada neurônio, pois cada sub-neurônio precisará de um vetor que contenha um peso para cada neurônio na camada anterior. Isso significa que é agora uma matriz de peso 3D, onde cada é a matriz de peso 2D para um único neurônio . E então é um vetor para o sub-neurônio no neurônio que contém um peso para cada neurônio na camada anterior .WEuWEujjWEuj kkji - 1
Da mesma forma, em uma rede neural que novamente usa, digamos, uma função de ativação sigmóide, é um vetor com um viés para cada neurônio na camada .bEubEujjEu
Para fazer isso com sub-neurônios, precisamos de uma matriz de viés 2D para cada camada , onde é o vetor com viés para cada subneurônio no neurônio.bEuEubEujbEuj kkjº
Ter uma matriz de pesos e um vetor de viés para cada neurônio torna as expressões acima muito claras, é simplesmente aplicar os pesos de cada sub-neurônio às saídas de camada , aplicando seus desvios e obtendo o máximo deles.WEujbEujWEuj kumai - 1i - 1bEuj k
Redes de funções de base radial
As Redes de funções de base radial são uma modificação das redes neurais feedforward, onde, em vez de usar
umaEuj= σ( ∑k( wEuj k⋅ ai - 1k) + bEuj)
temos um peso por nó na camada anterior (como normal) e também um vetor médio e um vetor de desvio padrão para cada nó em a camada anterior.WEuj kkμEuj kσEuj k
Então chamamos nossa função de ativação para evitar confundi-la com os vetores de desvio padrão . Agora, para calcular , primeiro precisamos calcular um para cada nó na camada anterior. Uma opção é usar a distância euclidiana:ρσEuj kumaEujzEuj k
zEuj k= ∥ ( ai - 1- μEuj k∥-----------√= ∑ℓ( ai - 1ℓ- μEuj k ℓ)2-------------√
Onde é o elemento de . Este não usa o . Alternativamente, há a distância de Mahalanobis, que supostamente tem um desempenho melhor:μEuj k ℓℓºμEuj kσEuj k
zEuj k= ( ai - 1- μEuj k)TΣEuj k( ai - 1- μEuj k)----------------------√
onde é a matriz de covariância , definida como:ΣEuj k
ΣEuj k= diag ( σEuj k)
Em outras palavras, é a matriz diagonal com como elementos diagonais. Definimos e como vetores de coluna aqui, porque essa é a notação normalmente usada.ΣEuj kσEuj kumai - 1μEuj k
Eles estão realmente dizendo que a distância de Mahalanobis é definida como
zEuj k= ∑ℓ( ai - 1ℓ- μEuj k ℓ)2σEuj k ℓ--------------⎷
Onde é o elemento de . Observe que deve sempre ser positivo, mas esse é um requisito típico para o desvio padrão; portanto, isso não é tão surpreendente.σEuj k ℓℓºσEuj kσEuj k ℓ
Se desejado, a distância de Mahalanobis é suficientemente geral para que a matriz de covariância possa ser definida como outras matrizes. Por exemplo, se a matriz de covariância é a matriz de identidade, nossa distância de Mahalanobis se reduz à distância euclidiana. é bastante comum e é conhecida como distância euclidiana normalizada .ΣEuj kΣEuj k= diag ( σEuj k)
De qualquer forma, uma vez que nossa função de distância tenha sido escolhida, podemos calcular viaumaEuj
umaEuj= ∑kWEuj kρ ( zEuj k)
Nessas redes, eles optam por se multiplicar por pesos após aplicar a função de ativação por motivos.
Isso descreve como criar uma rede com função de base radial de várias camadas; no entanto, geralmente há apenas um desses neurônios e sua saída é a saída da rede. Ele é desenhado como múltiplos neurônios porque cada vetor médio e cada vetor de desvio padrão desse neurônio único é considerado um "neurônio" único e, depois de todas essas saídas, existe outra camada que leva a soma desses valores calculados vezes os pesos, assim como acima. Dividi-lo em duas camadas com um vetor "soma" no final parece estranho para mim, mas é o que eles fazem.μEuj kσEuj kumaEuj
Veja também aqui .
Função de base radial Funções de ativação de rede
Gaussiano
ρ ( zEuj k) = exp( -12( zEuj k)2)
Multiquadratic
Escolha algum ponto . Então calculamos a distância de a :( x , y)( zEuj, 0 )( x , y)
ρ ( zEuj k) = ( zEuj k- x )2+ y2------------√
Isto é da Wikipedia . Não é limitado e pode ter qualquer valor positivo, embora eu esteja me perguntando se existe uma maneira de normalizá-lo.
Quando , isso é equivalente a absoluto (com um deslocamento horizontal ).y= 0x
Multiquadratic Inverso
O mesmo que quadrático, exceto invertido:
ρ ( zEuj k) = 1( zEuj k- x )2+ y2------------√
* Gráficos dos gráficos da intmath usando SVG .