Pages

[Artigo]: Introduzindo a rede neural Multi-Layer-Perceptron (MLP)

Sunday, January 4, 2009

Neste post, apresentaremos alguns conceitos iniciais relacionados à solução de problemas linearmente não-separáveis com o Multi Layer Perceptron (MLP).

Será utilizado o mesmo tipo de problema que foi apresentado no post sobre a rede neural Perceptron. Pode-se notar que para esse conjunto de dados, não há como separá-los linearmente (classificação). Será necessário mais de 1 reta para uma classificação correta.


Linearly Non-Separable

A rede neural utilizada para resolver este problema está representada graficamente abaixo. Nesta rede neural, adicionaremos agora um coeficiente linear (bias) a mesma. Sem este coficiente, qualquer reta (ou hiper-plano) deverá passar sempre pela origem (0,0), o que é uma restrição considerada desnecessária.


Multi Layer Perceptron

O papel dos dois neurônios escondidos é dividir o espaço do conjunto de dados de entrada em diversas partições. Para atingir tal objetivo, baseado na figura acima, poderiamos plotar 2 retas arbitrárias, conforme o gráfico abaixo.

Input Space

Os valores dos coeficientes das equações correspondem diretamente aos pesos da rede neural (semelhante ao treinamento da rede Adaline). Entretanto, primeiramente é necessário fazer alguns ajustes nas equações a fim de que todos os termos estejam do mesmo lado, i.e. 0 = y + 0.36x - 0.85, etc. Logo, os pesos da rede serão estes a seguir:

wx1 = 0.36
wy1 = 1
wb1 = -0.85

wx2 = 1.92
wy2 = 1
wb2 = -0.70

Embora, nós tenhamos os pesos (valores) de uma rede que possa corretamente classificar os pontos de um problema não linearmente- separáveis, deparamos com algums problemas.

Como são 2 equações da reta, é necessário converter ou transformar o espaço amostral da entrada em um espaço que se possa ser linearmente separável a fim de que o neurônio de saída possam realizar corretamente a tarefa de classificação das entradas. Para isto, utilizamos a função de ativação apresentada em post anterior: Função Sigmóide com a introdução agora de uma variável lambda (λ).

Sigmoid Function

def function(output):

return 1 / (1 + math.exp(-lambda * output))


O Lambda permite que o gradiente da função sigmóide desloque o espaço dos dados entrada gerando um espaço distorcido. Usando, por exemplo, o lambda com valor igual a 6, o espaço de entrada poderia ser visto assim:

Feature Space with Lambda


Agora, os dados de entrada estão linearmente separáveis, e consequentemente o neurônio de saída pode classificar corretamente. Os valores representados pela equação equivalem diretamente aos pesos obtidos pelo treinamento da rede. Logo, os pesos na camada de saída da rede seriam:


wx1o = -0.73
wyh2o = 1
bo = 0.21

Embora, tenhamos obtido todos os pesos manualmente, é possível obter os valores desses pesos automaticamente. Para isto, é necessário de um algoritmo de treinamento, assim como foram deduzidos com o Adaline e Perceptron.
No próximo post, será introduzido o algoritmo de retro-propagação (Back-Propagation) com um exemplo prático desenvolvido em python.

Até lá,

Marcel P. Caraciolo

8 comments:

  1. Puxa, você só simplemente fez a tradução, e nem se quer citou a fonte do cara original que fez, e ainda por cima suprimiu os programas feitos em csharp pra falar que vai fazer em python. Que DROOOOOGA!!! Da próxima vez cria algo novo ou cita a fonte original para o pessoal ver quem fez de verdade o artigo.
    Segue os links de fonte original "John Wakefield"
    http://dynamicnotions.blogspot.com/2008/09/sigmoid-function-in-c.html
    http://dynamicnotions.blogspot.com/2008/09/training-neural-networks-using-back.html
    http://dynamicnotions.blogspot.com/search/label/Neural%20Network

    ReplyDelete
  2. hahaha. Isso mesmo ANONYMOUS

    ReplyDelete
  3. A falta de menção da referência não é motivo só de crítica. Parabéns pela iniciativa, pois somos carente de informações em português e nem todos nós dominamos o idioma inglês.

    ReplyDelete
  4. Embedded system training: Wiztech Automation Provides Excellent training in embedded system training in Chennai - IEEE Projects - Mechanical projects in Chennai. Wiztech provide 100% practical training, Individual focus, Free Accommodation, Placement for top companies. The study also includes standard microcontrollers such as Intel 8051, PIC, AVR, ARM, ARMCotex, Arduino, etc.

    Embedded system training in chennai
    Embedded system course in chennai
    VLSI trraining in chennai
    Final year projects in chennai

    ReplyDelete
  5. WIZTECH Automation, Anna Nagar, Chennai, has earned reputation offering the best automation training in Chennai in the field of industrial automation. Flexible timings, hands-on-experience, 100% practical. The candidates are given enhanced job oriented practical training in all major brands of PLCs (AB, Keyence, ABB, GE-FANUC, OMRON, DELTA, SIEMENS, MITSUBISHI, SCHNEIDER, and MESSUNG)

    PLC training in chennai
    Automation training in chennai
    Best plc training in chennai
    PLC SCADA training in chennai
    Process automation training in chennai
    Final year eee projects in chennai
    VLSI training in chennai

    ReplyDelete
  6. Embedded system training: Wiztech Automation Provides Excellent training in embedded system training in Chennai - IEEE Projects - Mechanical projects in Chennai Wiztech provide 100% practical training, Individual focus, Free Accommodation, Placement for top companies. The study also includes standard microcontrollers such as Intel 8051, PIC, AVR, ARM, ARMCotex, Arduino etc.

    Embedded system training in chennai
    Embedded Course training in chennai
    Matlab training in chennai
    Android training in chennai
    LabVIEW training in chennai
    Arduino training in chennai
    Robotics training in chennai
    Oracle training in chennai
    Final year projects in chennai
    Mechanical projects in chennai
    ece projects in chennai

    ReplyDelete