{"id":19934618,"url":"https://github.com/williamjardim/mlp-mini","last_synced_at":"2025-06-22T19:07:15.793Z","repository":{"id":257980977,"uuid":"873233041","full_name":"WilliamJardim/MLP-mini","owner":"WilliamJardim","description":"A Multilayer Perceptron built in TypeScript from scratch.","archived":false,"fork":false,"pushed_at":"2024-12-30T16:26:38.000Z","size":12914,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T19:06:32.322Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WilliamJardim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-15T20:23:37.000Z","updated_at":"2024-12-30T16:26:41.000Z","dependencies_parsed_at":"2024-10-20T21:40:31.241Z","dependency_job_id":null,"html_url":"https://github.com/WilliamJardim/MLP-mini","commit_stats":null,"previous_names":["williamjardim/mlp-mini"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/WilliamJardim/MLP-mini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamJardim%2FMLP-mini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamJardim%2FMLP-mini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamJardim%2FMLP-mini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamJardim%2FMLP-mini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WilliamJardim","download_url":"https://codeload.github.com/WilliamJardim/MLP-mini/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamJardim%2FMLP-mini/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261348748,"owners_count":23145312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2024-11-12T23:17:25.103Z","updated_at":"2025-06-22T19:07:10.782Z","avatar_url":"https://github.com/WilliamJardim.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n![Icone](./images/logo/logo256x256.png \"Icone\")\n\n# MLP - Implementação de Rede Neural Multicamadas (MLP) em JavaScript\nEste 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.\n\n## Visão Geral\nO 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.\n\nEsta 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).\n\n## Transparência\nConforme 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.\n\nDesde 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.\n\nO 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. \n\n## Características\n\n- Suporte para múltiplas camadas ocultas.\n- Função de ativação sigmoide e sua derivada.\n- Retropropagação (backpropagation) implementada para ajuste de pesos e vieses.\n- Treinamento e teste para resolver o problema lógico do XOR.\n- Não usa bibliotecas externas, tornando-o fácil de entender e modificar.\n- Código gerado com a assistência de IA, mantendo total independência da implementação.\n\n## Como Funciona\n\nA 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:\n\n```javascript\nconst mlp = new MLP({\n    layers: [\n        { type: LayerType.Input,  inputs: 2, units: 2 }, \n        { type: LayerType.Hidden, inputs: 2, units: 2 }, \n        { type: LayerType.Final,  inputs: 2, units: 1 }\n    ],\n    initialization: Initialization.Random\n});\n```\n\nA função `train` é usada para treinar a rede, e `estimate` é usada para realizar estimativas após o treinamento.\n\n## Exemplo: Problema XOR\n\nO 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.\n\n### Entradas e Saídas Esperadas\n\n| Entrada | Saída Esperada |\n|---------|----------------|\n| [0, 0]  | [0]            |\n| [0, 1]  | [1]            |\n| [1, 0]  | [1]            |\n| [1, 1]  | [0]            |\n\n### Uso\n\n1. Clone o repositório:\n    ```bash\n    git clone https://github.com/WilliamJardim/MLP-mini\n    ```\n\n2. Navegue até a pasta do projeto:\n    ```bash\n    cd MLP-mini/tests\n    ```\n\n3. Execute o arquivo JavaScript com `node`:\n    ```bash\n    node xor-test.js\n    ```\n\n    Ou então, acesse pelo navegador rodando o arquivo 'tests/xor-test.html'\n\n4. Veja as estimativas da rede para o problema XOR:\n\n    ```bash\n    estimativas:\n    Entrada: 0,0, Previsão: 0\n    Entrada: 0,1, Previsão: 1\n    Entrada: 1,0, Previsão: 1\n    Entrada: 1,1, Previsão: 0\n    ```\n\n## Explicação aprofundada de como o algoritmo dessa implantação funciona:\n- [Ler explicação](./docs/ANOTACOES_ALGORITMO.md)\n\n- [Ver slides](./docs/slides/INFORMACOES_SLIDES.md)\n\n## Estrutura do Código\n\n- **MLP**: Classe que representa a Rede Neural Multicamadas.\n  - `constructor(layers)`: Inicializa os pesos e vieses da rede.\n  - `forward(input)`: Realiza a passagem direta através da rede.\n  - `train(inputs, targets, learningRate, epochs)`: Treina a rede usando backpropagation.\n  - `estimate(input)`: Retorna estimativas (estimativas) para um dado conjunto de entradas.\n\n## Integridade dos arquivos do projeto\nEste 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.\nVocê poderá ler sobre esses testes aqui:\n\n  [Caminho para o arquivo do teste de integridade](./tests/classificacao/XOR/XOR_INTEGRY_TEST_15_10_verifed/detalhes_teste_integridade.md)\n  (ULTIMA VERIFICAÇÂO DE INTEGRIDADE 24/12/2024 21:40 PM)\n\n## Licença\n\nEste projeto está licenciado sob a licença MIT. Consulte o arquivo [LICENSE](LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamjardim%2Fmlp-mini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamjardim%2Fmlp-mini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamjardim%2Fmlp-mini/lists"}