Pages

Funções de ativação para redes Neurais

Tuesday, December 30, 2008

Nos posts anteriores, discutiu-se sobre as redes neurais diretas (feedFoward) Perceptron e Adaline e suas limitações em relação à solução de problemas não linearmente separáveis. Se é necessário resolver este tipo de problema, então precisa-se de uma rede neural mais sofisticada, isto é, precisa-se de uma rede neural com mais camadas de neurônios. Entretanto, se realmente for utilizar desse artifício, como treinamos este tipo de rede multi-camadas ?

Até agora, foram utilizados apenas erros observados pelas saídas dos neurônios através do ajustes sucessivos dos pesos entre a camada de entrada e a de saída (2 camadas apenas). Mas, se for adicionada mais uma camada intermediaria entre elas, uma camada escondida ?

Bom, de toda maneira ainda é necessário ter o processo de retro-alimentação do erro de volta à rede neural, de forma que possam ser ajustados os pesos. E aí está o problema.


Multi Layer Perceptron


Atualmente, o neurônio ou está "ligado" ou "desligado", o que significa que a sua função de ativação é controlada por um limiar que determina a mudança dos estados do neurônio.

Threshold Function

def function(output):
if output >= 0:
return 1
else:
return -1

Plotando o gráfico representando a função acima, pode-se ver as linhas vermelha (representando a sua derivada) e a linha azul (representando a função).


Threshold Graph


Quaisquer ajustes feitos nos pesos que alimentam a camada escondida com uso desta função terão efeitos não tão eficientes e limitados, devido a sua descontinuidade acentuada . É necessário trocar a função de limiar (threeshold function) por algo melhor, que tenha uma transição mais suave. Pode-se utilizar então, a função sigmóide representada pela equação abaixo:


Sigmoid Function


def sigmoid(output):
return 2/ (1 + math.exp(-2 * output))

E sua derivada:

f'(x) = 1 - f(x)2


def sigmoidDerivative(output):

x = sigmoid(output)

return 1 - (math.pow(x,2))



Plotando os gráficos das funções acima representadas, temos:

Sigmoid Graph

Pode-se observar que a transição agora entre os valores 1 e -1 é mais suave e contínua e sua derivada tende ao infinito. Esta função é muito popular entre diversos desenvolvedores de redes neurais, porém alguns utilizam uma versão modificada deste. Variando os limites da função de 0 até 1 (em vez de -1 a 1) tem o benefício de ser computacionalmente menos custoso e interessante quando aplicado em redes neurais de grande dimensão.


Para isso, utiliza-se a função:


Sigmoid Function

def sigmoid(output):
return 2/ (1 + math.exp(-output))

E sua derivada:

f'(x) = f(x)(1 - f(x))


def sigmoidDerivative(output):

x = sigmoid(output)

return x * ( 1 - x)



Plotando-se o gráfico, obtemos:


Sigmoid Graph

No próximo post, será utilizada esta função sigmóide como função de ativação no desenvolvimento e aplicação de uma rede neural Perceptron de múltiplas camadas (Multi Layer Perceptron - MLP) treinada com o algoritmo Back Propagation.

7 comments:


  1. for preparing bank exam and group exam , we are providing an online test model questions papers

    Bank Exam Questions and Answers

    Group Exam Questions and Answers

    ReplyDelete
  2. Quando se usa a derivada da sigmoid?

    ReplyDelete
  3. Acho que é no backpropagation...quando faz o caminho inverso para corrigir os pesos.

    ReplyDelete
  4. This professional hacker is absolutely reliable and I strongly recommend him for any type of hack you require. I know this because I have hired him severally for various hacks and he has never disappointed me nor any of my friends who have hired him too, he can help you with any of the following hacks:

    -Phone hacks (remotely)
    -Credit repair
    -Bitcoin recovery (any cryptocurrency)
    -Make money from home (USA only)
    -Social media hacks
    -Website hacks
    -Erase criminal records (USA & Canada only)
    -Grade change
    -funds recovery

    Email: onlineghosthacker247@ gmail .com

    ReplyDelete
  5. It is choosing the right one is crucial for efficient gradient propagation, ultimately impacting the model's accuracy and convergence. How Get Better Understanding their dynamics is essential for effective network design.

    ReplyDelete