https://github.com/williamjardim/mlp-mini
A Multilayer Perceptron built in TypeScript from scratch.
https://github.com/williamjardim/mlp-mini
backpropagation backpropagation-algorithm binaryclassification classification data-science deep-learning feedforward linear-regression logistic-regression machine-learning mlp multilayer-perceptron multilayer-perceptron-network neural-networks nonlinear-regression perceptron regression xor-problem
Last synced: 5 months ago
JSON representation
A Multilayer Perceptron built in TypeScript from scratch.
- Host: GitHub
- URL: https://github.com/williamjardim/mlp-mini
- Owner: WilliamJardim
- License: mit
- Created: 2024-10-15T20:23:37.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-30T16:26:38.000Z (11 months ago)
- Last Synced: 2025-06-22T19:06:32.322Z (5 months ago)
- Topics: backpropagation, backpropagation-algorithm, binaryclassification, classification, data-science, deep-learning, feedforward, linear-regression, logistic-regression, machine-learning, mlp, multilayer-perceptron, multilayer-perceptron-network, neural-networks, nonlinear-regression, perceptron, regression, xor-problem
- Language: JavaScript
- Homepage:
- Size: 12.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

# MLP - Implementação de Rede Neural Multicamadas (MLP) em JavaScript
Este repositório contém uma implementação independente de uma Rede Neural Multicamadas (MLP) em JavaScript, gerada com a ajuda de Inteligência Artificial. A rede foi implementada sem o uso de bibliotecas de aprendizado de máquina ou notação matricial. Ela pode ser configurada para suportar múltiplas camadas e unidades, sendo aplicada ao problema clássico do XOR.
## Visão Geral
O MLP é uma rede neural feedforward totalmente conectada com uma ou mais camadas ocultas. Este código usa a função de ativação sigmoide e implementa o algoritmo de retropropagação (backpropagation) para ajustar os pesos da rede durante o treinamento.
Esta implementação foi desenvolvida de forma independente para ser simples e didática, realizando os cálculos elemento a elemento (em vez de usar operações matriciais).
## Transparência
Conforme mencionado acima, este código foi inicialmente gerado em Outubro de 2024, por uma interação com um assistente de IA (ChatGPT). A ideia era criar uma implementação manual de uma rede neural MLP para resolver o problema do XOR, oferecendo suporte a múltiplas camadas e unidades. O objetivo principal era consolidar meu entendimento sobre o funcionamento do backpropagation, utilizando uma base gerada por IA como ponto de partida, baseada em conceitos de domínio público.
Desde então, o código foi significativamente modificado e expandido para atender aos requisitos específicos do projeto, refletindo minha compreensão do tema e meu esforço em desenvolver uma implementação independente. Essa abordagem permitiu explorar e aprofundar meu conhecimento, garantindo que as soluções fossem personalizadas e alinhadas às boas práticas de aprendizado.
O processo de desenvolvimento está documentado para promover transparência e aprendizado colaborativo. Para acessar a conversa original que deu início a este projeto, clique aqui: **[Link para o Chat](https://chatgpt.com/share/676de54b-3614-8004-8f8f-9dfa2558f7e0)**. Note que o link foi gerado em 26 de dezembro de 2024, mas a conversa original ocorreu em Outubro de 2024.
## Características
- Suporte para múltiplas camadas ocultas.
- Função de ativação sigmoide e sua derivada.
- Retropropagação (backpropagation) implementada para ajuste de pesos e vieses.
- Treinamento e teste para resolver o problema lógico do XOR.
- Não usa bibliotecas externas, tornando-o fácil de entender e modificar.
- Código gerado com a assistência de IA, mantendo total independência da implementação.
## Como Funciona
A estrutura da rede é definida por um array onde cada elemento indica o número de unidades em cada camada. Por exemplo, a rede para o problema XOR possui 2 unidades na camada de entrada, 2 na camada oculta e 1 unidade na camada de saída:
```javascript
const mlp = new MLP({
layers: [
{ type: LayerType.Input, inputs: 2, units: 2 },
{ type: LayerType.Hidden, inputs: 2, units: 2 },
{ type: LayerType.Final, inputs: 2, units: 1 }
],
initialization: Initialization.Random
});
```
A função `train` é usada para treinar a rede, e `estimate` é usada para realizar estimativas após o treinamento.
## Exemplo: Problema XOR
O problema XOR é um problema lógico clássico que não pode ser resolvido com um único perceptron, mas pode ser resolvido com uma rede neural com uma camada oculta.
### Entradas e Saídas Esperadas
| Entrada | Saída Esperada |
|---------|----------------|
| [0, 0] | [0] |
| [0, 1] | [1] |
| [1, 0] | [1] |
| [1, 1] | [0] |
### Uso
1. Clone o repositório:
```bash
git clone https://github.com/WilliamJardim/MLP-mini
```
2. Navegue até a pasta do projeto:
```bash
cd MLP-mini/tests
```
3. Execute o arquivo JavaScript com `node`:
```bash
node xor-test.js
```
Ou então, acesse pelo navegador rodando o arquivo 'tests/xor-test.html'
4. Veja as estimativas da rede para o problema XOR:
```bash
estimativas:
Entrada: 0,0, Previsão: 0
Entrada: 0,1, Previsão: 1
Entrada: 1,0, Previsão: 1
Entrada: 1,1, Previsão: 0
```
## Explicação aprofundada de como o algoritmo dessa implantação funciona:
- [Ler explicação](./docs/ANOTACOES_ALGORITMO.md)
- [Ver slides](./docs/slides/INFORMACOES_SLIDES.md)
## Estrutura do Código
- **MLP**: Classe que representa a Rede Neural Multicamadas.
- `constructor(layers)`: Inicializa os pesos e vieses da rede.
- `forward(input)`: Realiza a passagem direta através da rede.
- `train(inputs, targets, learningRate, epochs)`: Treina a rede usando backpropagation.
- `estimate(input)`: Retorna estimativas (estimativas) para um dado conjunto de entradas.
## Integridade dos arquivos do projeto
Este projeto é cuidadosamente testado em detalhes, isso pode ser notado nos arquivos de teste de integridade que introduzi a partir do dia 16.10.2024, garantindo a integridade do comportamento dos arquivos do dia 15.10.2024 (data inicial do projeto) para com as futuras versões.
Você poderá ler sobre esses testes aqui:
[Caminho para o arquivo do teste de integridade](./tests/classificacao/XOR/XOR_INTEGRY_TEST_15_10_verifed/detalhes_teste_integridade.md)
(ULTIMA VERIFICAÇÂO DE INTEGRIDADE 24/12/2024 21:40 PM)
## Licença
Este projeto está licenciado sob a licença MIT. Consulte o arquivo [LICENSE](LICENSE) para mais detalhes.