{"id":14562,"date":"2025-04-10T18:12:29","date_gmt":"2025-04-10T18:12:29","guid":{"rendered":"https:\/\/cheesecakelabs.com\/blog\/construindo-redes-neurais-do-zero\/"},"modified":"2026-08-15T06:58:59","modified_gmt":"2026-08-15T06:58:59","slug":"construindo-redes-neurais-do-zero","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/","title":{"rendered":"Construindo redes neurais do zero"},"content":{"rendered":"\n<p>Redes neurais s\u00e3o algoritmos de <a href=\"https:\/\/cheesecakelabs.com\/blog\/machine-learning-por-que-importa\/\" id=\"13425\" target=\"_blank\" rel=\"noreferrer noopener\">machine learning<\/a> poderosos, que j\u00e1 transformaram in\u00fameros setores. Elas sustentam desde detec\u00e7\u00e3o de fraude e previs\u00e3o de demanda at\u00e9 recomenda\u00e7\u00f5es personalizadas e sistemas aut\u00f4nomos, e s\u00e3o um bom caminho para levar decis\u00f5es mais inteligentes para dentro das suas aplica\u00e7\u00f5es.&nbsp;<\/p>\n\n\n\n<p>Neste guia, voc\u00ea vai percorrer os fundamentos das redes neurais, das primeiras representa\u00e7\u00f5es do neur\u00f4nio artificial at\u00e9 a implementa\u00e7\u00e3o do seu pr\u00f3prio modelo de regress\u00e3o linear.&nbsp;<\/p>\n\n\n\n<p>Prepare-se para explorar todo o potencial das redes neurais e come\u00e7ar sua jornada em <a href=\"https:\/\/cheesecakelabs.com\/blog\/o-que-e-inteligencia-artificial\/\" id=\"13722\" target=\"_blank\" rel=\"noreferrer noopener\">intelig\u00eancia artificial.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Redes neurais como algoritmo de machine learning<\/strong><\/h2>\n\n\n\n<p>Redes neurais s\u00e3o um tipo de algoritmo de machine learning inspirado na <strong>estrutura e no funcionamento <\/strong>do c\u00e9rebro humano. Elas s\u00e3o formadas por n\u00f3s interconectados, os \u201cneur\u00f4nios\u201d, que aprendem a executar tarefas espec\u00edficas analisando grandes volumes de dados.<\/p>\n\n\n\n<p>Redes neurais t\u00eam muitas aplica\u00e7\u00f5es: reconhecimento de imagem, processamento de linguagem natural, reconhecimento de fala e an\u00e1lise preditiva. Elas s\u00e3o muito boas em identificar padr\u00f5es e tomar decis\u00f5es complexas, o que as torna uma ferramenta valiosa em v\u00e1rios setores.<\/p>\n\n\n\n<p><strong>Redes neurais<\/strong> s\u00e3o bastante flex\u00edveis e se adaptam a uma variedade de problemas. Elas aprendem com os dados e melhoram seu desempenho ao longo do tempo, o que as torna ferramentas poderosas para enfrentar desafios complexos do mundo real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Tarefa, modelo, medi\u00e7\u00e3o de desempenho e experi\u00eancia<\/strong><\/h2>\n\n\n\n<p>Para construir uma rede neural eficaz, voc\u00ea precisa considerar alguns componentes que definem seu desenvolvimento e seu sucesso. Entre eles est\u00e3o identificar com clareza a tarefa que a rede vai executar, escolher um modelo adequado, estabelecer crit\u00e9rios de medi\u00e7\u00e3o de desempenho e acumular experi\u00eancia por meio dos dados de treinamento.&nbsp;<\/p>\n\n\n\n<p>Cada elemento tem um papel decisivo em qu\u00e3o bem a rede neural aprende e generaliza para dados novos. Veja o que cada um faz e por que importa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tarefa &#8211; <\/strong>O primeiro passo para construir uma rede neural \u00e9 definir a tarefa que voc\u00ea quer que ela execute. Pode ser desde classifica\u00e7\u00e3o de imagens at\u00e9 processamento de linguagem natural. Definir a tarefa ajuda a desenhar a arquitetura de rede adequada e a escolher os dados de treinamento certos.<\/li>\n\n\n\n<li><strong>Modelo &#8211; <\/strong>A escolha do modelo \u00e9 um aspecto importante da constru\u00e7\u00e3o de uma rede neural. Tipos diferentes de modelo de rede neural (como redes feedforward, redes convolucionais e redes recorrentes) servem para tarefas diferentes. Escolher o modelo certo melhora o desempenho da rede e sua capacidade de resolver o problema desejado.<\/li>\n\n\n\n<li><strong>Medi\u00e7\u00e3o de desempenho<\/strong> &#8211; Depois de definir a tarefa, voc\u00ea precisa determinar como medir o desempenho da rede neural. As m\u00e9tricas podem incluir acur\u00e1cia, precis\u00e3o, recall ou F1-score, dependendo do problema espec\u00edfico que voc\u00ea quer resolver.<\/li>\n\n\n\n<li><strong>Experi\u00eancia<\/strong> &#8211; O passo final \u00e9 fornecer dados de treinamento \u00e0 rede neural, permitindo que ela aprenda e melhore seu desempenho ao longo do tempo. Essa fase de experi\u00eancia \u00e9 decisiva para construir um modelo de alto desempenho, capaz de generalizar bem para dados novos, nunca vistos.<\/li>\n<\/ul>\n\n\n\n<p>Neste post, o foco \u00e9 o primeiro modelo de neur\u00f4nio artificial, ent\u00e3o vamos definir a tarefa como um problema de regress\u00e3o linear.&nbsp;<\/p>\n\n\n\n<p>O problema de regress\u00e3o linear \u00e9 aquele em que usamos o neur\u00f4nio artificial para representar fun\u00e7\u00f5es. Em vez de usar uma fun\u00e7\u00e3o como <strong>y = mx + b<\/strong>, apresentamos os dados ao neur\u00f4nio artificial e deixamos que ele descubra os valores adequados dos coeficientes <em>m<\/em> e <em>b <\/em>que representam o problema. Voltamos a isso na Se\u00e7\u00e3o 4.<\/p>\n\n\n\n<p>Na pr\u00f3xima se\u00e7\u00e3o, vamos descrever a modelagem do neur\u00f4nio artificial. N\u00e3o se assuste com a matem\u00e1tica: n\u00e3o vamos entrar muito fundo nela, prometo!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Leia tamb\u00e9m: <\/strong><a href=\"https:\/\/cheesecakelabs.com\/blog\/glossario-ia-machine-learning\/\" id=\"13280\" target=\"_blank\" rel=\"noreferrer noopener\">Gloss\u00e1rio de IA e machine learning: termos-chave para empresas modernas<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. A primeira representa\u00e7\u00e3o de um neur\u00f4nio artificial (Perceptron)<\/strong><\/h2>\n\n\n\n<p>A base das redes neurais modernas remonta \u00e0 primeira representa\u00e7\u00e3o matem\u00e1tica de um neur\u00f4nio artificial, conhecida como <a href=\"https:\/\/www.geeksforgeeks.org\/what-is-perceptron-the-simplest-artificial-neural-network\/\" target=\"_blank\" rel=\"noreferrer noopener\">Perceptron<\/a>. Apresentado por Warren McCulloch e Walter Pitts em 1943, esse modelo simples e poderoso imita a forma como neur\u00f4nios biol\u00f3gicos processam informa\u00e7\u00e3o. <\/p>\n\n\n\n<p>Ao receber entradas ponderadas, aplicar um bias e passar o resultado por uma fun\u00e7\u00e3o de ativa\u00e7\u00e3o, o perceptron se torna o bloco fundamental de arquiteturas de rede neural mais avan\u00e7adas.&nbsp;<\/p>\n\n\n\n<p>Esta se\u00e7\u00e3o explora os componentes principais do perceptron e como cada um contribui para sua capacidade de decidir.&nbsp;<\/p>\n\n\n\n<p>A Equa\u00e7\u00e3o 1 \u00e9 o modelo matem\u00e1tico do neur\u00f4nio artificial:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1013\" height=\"135\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/formula1.png\" alt=\"F\u00f3rmula matem\u00e1tica da sa\u00edda de um neur\u00f4nio artificial\" class=\"wp-image-12558\" style=\"width:328px;height:auto\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/formula1.png 1013w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/formula1-600x80.png 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/formula1-768x102.png 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/formula1-760x101.png 760w\" sizes=\"(max-width: 1013px) 100vw, 1013px\" \/><\/figure>\n\n\n\n<p>Onde:&nbsp;<\/p>\n\n\n\n<p><em>y<\/em> \u00e9 a sa\u00edda,<\/p>\n\n\n\n<p>phi \u00e9 a fun\u00e7\u00e3o de ativa\u00e7\u00e3o,<\/p>\n\n\n\n<p><em>X<\/em> \u00e9 o vetor que cont\u00e9m todas as entradas,<\/p>\n\n\n\n<p><em>W<\/em> \u00e9 o vetor que cont\u00e9m todos os pesos,<\/p>\n\n\n\n<p><em>b<\/em> \u00e9 o bias<\/p>\n\n\n\n<p>Da \u00e1lgebra linear, podemos descrever o produto vetorial como:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1192\" height=\"322\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.17.57.png\" alt=\"Representa\u00e7\u00e3o gr\u00e1fica do Perceptron, o primeiro neur\u00f4nio artificial\" class=\"wp-image-12630\" style=\"width:539px;height:auto\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.17.57.png 1192w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.17.57-600x162.png 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.17.57-768x207.png 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.17.57-760x205.png 760w\" sizes=\"(max-width: 1192px) 100vw, 1192px\" \/><\/figure>\n\n\n\n<p>Onde:&nbsp;<\/p>\n\n\n\n<p><em>n<\/em> \u00e9 o n\u00famero total de entradas e pesos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Entradas &#8211; <\/strong>A primeira representa\u00e7\u00e3o de um neur\u00f4nio artificial, proposta por McCulloch e Pitts, recebe um conjunto de entradas (<em>x<\/em><em><sub>1<\/sub><\/em>, <em>x<\/em><em><sub>2<\/sub><\/em>, &#8230;, <em>x<\/em><em><sub>n<\/sub><\/em>) e atribui um peso (<em>w<\/em><em><sub>1<\/sub><\/em>, <em>w<\/em><em><sub>2<\/sub><\/em>, &#8230;, <em>w<\/em><em><sub>n<\/sub><\/em>) a cada uma delas.<\/li>\n\n\n\n<li><strong>Soma ponderada &#8211; <\/strong>O neur\u00f4nio ent\u00e3o calcula a soma ponderada das entradas, ou seja, a soma dos produtos de cada entrada pelo peso correspondente, como mostra a Equa\u00e7\u00e3o 2.<\/li>\n\n\n\n<li><strong>Bias &#8211; <\/strong>O bias, representado pelo par\u00e2metro <em>b<\/em>, \u00e9 somado \u00e0 soma ponderada antes da aplica\u00e7\u00e3o da fun\u00e7\u00e3o de ativa\u00e7\u00e3o. Isso permite que o neur\u00f4nio desloque seu limiar de ativa\u00e7\u00e3o, viabilizando fronteiras de decis\u00e3o mais complexas.<\/li>\n\n\n\n<li><strong>Fun\u00e7\u00e3o de ativa\u00e7\u00e3o &#8211; <\/strong>Por fim, o neur\u00f4nio aplica uma fun\u00e7\u00e3o de ativa\u00e7\u00e3o \u00e0 soma ponderada, como a fun\u00e7\u00e3o degrau ou a sigmoide, para determinar sua sa\u00edda. Falamos sobre fun\u00e7\u00f5es de ativa\u00e7\u00e3o mais adiante.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"512\" height=\"284\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/neuron.png\" alt=\"Esquema de um neur\u00f4nio artificial com entradas, pesos e sa\u00edda\" class=\"wp-image-12543\" style=\"width:712px;height:auto\" \/><figcaption class=\"wp-element-caption\"> Representa o neur\u00f4nio que McCulloch e Pitts usaram como inspira\u00e7\u00e3o para desenvolver o modelo do Perceptron. <\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"512\" height=\"263\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/equation-with-artificial-neuron.png\" alt=\"Equa\u00e7\u00e3o do neur\u00f4nio artificial com pesos e vi\u00e9s\" class=\"wp-image-12545\" style=\"width:710px;height:auto\" \/><figcaption class=\"wp-element-caption\">Representa\u00e7\u00e3o visual da Equa\u00e7\u00e3o 1, que facilita a compara\u00e7\u00e3o com um neur\u00f4nio real.&nbsp;&nbsp;<\/figcaption><\/figure>\n<\/div>\n\n\n<p>A seguir, vamos descrever como usar esse modelo para resolver um problema de regress\u00e3o linear. Tamb\u00e9m mostramos como medir o erro do modelo e trein\u00e1-lo para reduzir esse erro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. O problema de regress\u00e3o<\/strong><\/h2>\n\n\n\n<p>Como descrito na Se\u00e7\u00e3o 2, a primeira tarefa que vamos atribuir ao nosso neur\u00f4nio artificial \u00e9 um problema de regress\u00e3o. Para simplificar a representa\u00e7\u00e3o, podemos remover a fun\u00e7\u00e3o de ativa\u00e7\u00e3o e manter apenas uma entrada.&nbsp;<br><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"512\" height=\"294\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/simplification.png\" alt=\"Simplifica\u00e7\u00e3o da equa\u00e7\u00e3o usada no problema de regress\u00e3o\" class=\"wp-image-12547\" \/><figcaption class=\"wp-element-caption\">Representa\u00e7\u00e3o simplificada de um neur\u00f4nio artificial<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Antes de aprofundar em regress\u00e3o linear, vale responder algumas perguntas:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O que \u00e9 regress\u00e3o linear?<\/strong><\/h3>\n\n\n\n<p>Regress\u00e3o linear \u00e9 um algoritmo fundamental de machine learning, usado para modelar a rela\u00e7\u00e3o entre uma vari\u00e1vel dependente e uma ou mais vari\u00e1veis independentes. O objetivo \u00e9 encontrar a reta que melhor se ajusta aos dados, minimizando a dist\u00e2ncia entre os pontos e a linha.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Quais s\u00e3o as aplica\u00e7\u00f5es da regress\u00e3o linear?<\/strong><\/h3>\n\n\n\n<p>A regress\u00e3o linear tem muitas aplica\u00e7\u00f5es: prever vendas, projetar pre\u00e7os de a\u00e7\u00f5es e analisar a rela\u00e7\u00e3o entre diversos fatores em estudos sociais e econ\u00f4micos. \u00c9 uma ferramenta poderosa para entender e quantificar as rela\u00e7\u00f5es entre vari\u00e1veis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como implementar regress\u00e3o linear?<\/strong><\/h3>\n\n\n\n<p>Para implementar regress\u00e3o linear, precisamos definir a equa\u00e7\u00e3o do modelo, na forma <em>y = mx + b<\/em>, em que <em>y<\/em> \u00e9 a vari\u00e1vel dependente, <em>x<\/em> \u00e9 a vari\u00e1vel independente, <em>m<\/em> \u00e9 o coeficiente angular e <em>b<\/em> \u00e9 o ponto em que a reta corta o eixo y. Depois usamos t\u00e9cnicas de otimiza\u00e7\u00e3o para encontrar os valores de <em>m<\/em> e <em>b<\/em> que melhor se ajustam aos dados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Quais s\u00e3o as limita\u00e7\u00f5es da regress\u00e3o linear?<\/strong><\/h3>\n\n\n\n<p>Apesar de ser um algoritmo pr\u00e1tico, a regress\u00e3o linear tem limita\u00e7\u00f5es. Ela pressup\u00f5e uma rela\u00e7\u00e3o linear entre as vari\u00e1veis, o que nem sempre \u00e9 verdade. Tamb\u00e9m \u00e9 sens\u00edvel a outliers e pode ter desempenho ruim diante de rela\u00e7\u00f5es complexas e n\u00e3o lineares.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Leia tamb\u00e9m:<\/strong> <a href=\"https:\/\/cheesecakelabs.com\/blog\/regressao-em-ia-tipos-e-aplicacoes\/\" target=\"_blank\" rel=\"noreferrer noopener\">Usando regress\u00e3o no desenvolvimento de IA.<\/a><\/p>\n<\/blockquote>\n\n\n\n<p>Definimos a tarefa e o modelo com que vamos trabalhar, mas faltam dois passos para tudo se encaixar. Vamos ver como medir os resultados do modelo e como trein\u00e1-lo.&nbsp;<\/p>\n\n\n\n<p>Existem diferentes m\u00e9todos e algoritmos para medir e treinar neur\u00f4nios artificiais. Eles ficam mais complexos conforme os problemas que enfrentamos ficam mais dif\u00edceis. Mas, para entender como tudo se conecta, vamos usar o Mean Square Error (MSE) e o algoritmo de backpropagation para resolver nosso problema.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4.1 Medindo o erro<\/strong><\/h3>\n\n\n\n<p>Para medir o erro do modelo, usamos uma fun\u00e7\u00e3o de perda ou de custo que quantifica a diferen\u00e7a entre os valores previstos e os valores reais da vari\u00e1vel dependente. O objetivo \u00e9 minimizar essa fun\u00e7\u00e3o ajustando o coeficiente angular e o ponto de intercepta\u00e7\u00e3o em y. A fun\u00e7\u00e3o de perda mais usada em regress\u00e3o linear \u00e9 o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mean_squared_error\" target=\"_blank\" rel=\"noreferrer noopener\">Mean Squared Error (MSE)<\/a>, que calcula a m\u00e9dia das diferen\u00e7as ao quadrado entre valores previstos e reais, como descrito na Equa\u00e7\u00e3o 3.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"393\" height=\"143\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.20.10.png\" alt=\"F\u00f3rmula do erro quadr\u00e1tico m\u00e9dio usada para medir o erro do modelo\" class=\"wp-image-12632\" style=\"width:343px;height:auto\" \/><\/figure>\n\n\n\n<p>Onde: Y \u00e9 o valor previsto e \u0176 \u00e9 o valor de refer\u00eancia do conjunto de dados de treinamento. <strong><br>Certo, e o que fazemos com o valor do MSE?<\/strong><\/p>\n\n\n\n<p>Usamos esse valor para ajustar o peso e o bias do modelo, o que o leva a prever valores mais pr\u00f3ximos do valor de refer\u00eancia do conjunto de dados. Para isso, usamos o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Backpropagation\" target=\"_blank\" rel=\"noreferrer noopener\">algoritmo de backpropagation<\/a> e uma s\u00e9rie de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Hyperparameter_(machine_learning)\" target=\"_blank\" rel=\"noreferrer noopener\">hiperpar\u00e2metros<\/a> que ajudam a treinar o modelo.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4.2 Treinando o modelo<\/strong><\/h3>\n\n\n\n<p><strong>Neur\u00f4nios artificiais <\/strong>s\u00e3o treinados pelo ajuste dos pesos e dos bias associados a eles, em um processo chamado backpropagation. Durante o treinamento, os dados de entrada passam pela rede neural e a sa\u00edda \u00e9 comparada com a sa\u00edda desejada.<\/p>\n\n\n\n<p>A diferen\u00e7a entre as duas \u00e9 usada para calcular a perda e, em seguida, os pesos e os bias s\u00e3o ajustados para minimiz\u00e1-la com algoritmos de otimiza\u00e7\u00e3o como o gradiente descendente. Esse processo se repete de forma iterativa at\u00e9 a rede atingir uma acur\u00e1cia satisfat\u00f3ria.<\/p>\n\n\n\n<p>O algoritmo <a href=\"https:\/\/en.wikipedia.org\/wiki\/Gradient_descent\" target=\"_blank\" rel=\"noreferrer noopener\">Gradient Descent<\/a> em machine learning serve para minimizar a fun\u00e7\u00e3o de custo e encontrar o conjunto \u00f3timo de pesos, seguindo a descida mais \u00edngreme na dire\u00e7\u00e3o negativa do gradiente.&nbsp;<\/p>\n\n\n\n<p>A cada itera\u00e7\u00e3o, os par\u00e2metros s\u00e3o atualizados subtraindo o gradiente multiplicado por uma learning rate, um hiperpar\u00e2metro que determina o tamanho do passo. O processo se repete at\u00e9 os crit\u00e9rios de converg\u00eancia serem atendidos.&nbsp;<\/p>\n\n\n\n<p>A equa\u00e7\u00e3o do gradiente descendente aparece na Equa\u00e7\u00e3o 4, em que \ud835\udefb<em>F(y)<\/em> \u00e9 o gradiente da fun\u00e7\u00e3o de custo, \u00e9 a learning rate e <em>w<\/em> \u00e9 o peso do modelo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"350\" height=\"85\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.24.16.png\" alt=\"F\u00f3rmula de atualiza\u00e7\u00e3o dos pesos durante o treinamento da rede neural\" class=\"wp-image-12634\" style=\"width:334px;height:auto\" \/><\/figure>\n\n\n\n<p>A Figura 4 apresenta o processo de converg\u00eancia do peso para um valor m\u00ednimo usando o gradiente descendente. Vale destacar alguns pontos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Learning rate<\/strong>: o hiperpar\u00e2metro learning rate n\u00e3o tem um valor exato. Ele precisa ser escolhido empiricamente, testando valores diferentes e observando qual entrega o melhor resultado. Uma dica \u00e9 usar valores bem pequenos, como 0.0001 ou 0.00001, porque valores altos fazem o algoritmo passar longe do m\u00ednimo local, pular o valor \u00f3timo do peso e explodir rapidamente.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Epochs<\/strong>: o n\u00famero de epochs \u00e9 a quantidade de vezes que queremos que o algoritmo de backpropagation percorra o modelo para ajustar os pesos e o bias. As epochs s\u00e3o outro hiperpar\u00e2metro que precisa ser escolhido por quem desenvolve o modelo. A dica aqui \u00e9 testar: se o treinamento for curto e o n\u00famero de epochs for baixo, o modelo n\u00e3o aprende bem e n\u00e3o generaliza as sa\u00eddas corretamente (fen\u00f4meno conhecido como underfit do modelo). J\u00e1 se o n\u00famero de epochs for alto demais, o modelo fica especializado demais nos dados de treinamento e perde a capacidade de generalizar (o que leva ao fen\u00f4meno conhecido como overfit do modelo).<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"512\" height=\"319\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/Gradient-Descendent.png\" alt=\"Gr\u00e1fico do gradiente descendente convergindo para o m\u00ednimo da fun\u00e7\u00e3o de erro\" class=\"wp-image-12551\" style=\"width:512px;height:auto\" \/><figcaption class=\"wp-element-caption\"><em>Representa\u00e7\u00e3o gr\u00e1fica do algoritmo Gradient Descendent aplicado a um modelo para encontrar o valor m\u00ednimo de peso que otimiza a fun\u00e7\u00e3o de custo.<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Hoje j\u00e1 existem algoritmos que ajudam a escolher os melhores valores de hiperpar\u00e2metros para Perceptrons. Aqui, no entanto, apresentamos um exemplo desenvolvido do zero, sem a ajuda de nenhum framework ou biblioteca. Esse processo \u00e9 essencial para entender como treinamos redes neurais maiores. Os algoritmos s\u00e3o mais sofisticados na hora de reduzir o tempo de treinamento, mas o processo \u00e9 o mesmo.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Leia tamb\u00e9m: <\/strong><a href=\"https:\/\/cheesecakelabs.com\/blog\/decisoes-de-arquitetura-de-dados\/\" id=\"13571\" target=\"_blank\" rel=\"noreferrer noopener\">As decis\u00f5es de arquitetura de dados que realmente importam<\/a><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4.3 Mostre o c\u00f3digo<\/strong><\/h3>\n\n\n\n<p>Depois de toda essa teoria e matem\u00e1tica, vamos ao c\u00f3digo para entender como desenvolver um neur\u00f4nio artificial simplificado que resolve uma tarefa de regress\u00e3o linear. Todo o c\u00f3digo apresentado aqui est\u00e1 dispon\u00edvel <a href=\"https:\/\/github.com\/paulormnas\/neuralNetFromScratch\/tree\/main\" target=\"_blank\" rel=\"noreferrer noopener\">neste reposit\u00f3rio<\/a>.<br><br>Este c\u00f3digo em Python implementa uma rede neural simples, com um \u00fanico neur\u00f4nio, capaz de aprender uma rela\u00e7\u00e3o linear entre entradas e sa\u00eddas. Ele inclui m\u00e9todos para propaga\u00e7\u00e3o direta, c\u00e1lculo da perda e treinamento com gradiente descendente. Vamos destrinchar passo a passo.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" style=\"padding-top:0;padding-right:var(--wp--preset--spacing--80);padding-bottom:0;padding-left:var(--wp--preset--spacing--80)\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> random\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">NeuralNetwork<\/span>:<\/span>\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n    \t  <span class=\"hljs-comment\"># Random initialize weight<\/span>\n    \t  self.weight = random.random()\n    \t  self.bias = random.random()\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">forward<\/span><span class=\"hljs-params\">(self, _input: float | int)<\/span>:<\/span>\n    \t  <span class=\"hljs-comment\"># Calculate the weighted sum<\/span>\n    \t  output = self.weight * _input + self.bias\n    \t  <span class=\"hljs-keyword\">return<\/span> output\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">predict<\/span><span class=\"hljs-params\">(self, X: &#91;float])<\/span> -&gt; &#91;float]:<\/span>\n    \t  Y_predicted = &#91;]\n    \t  <span class=\"hljs-keyword\">for<\/span> x <span class=\"hljs-keyword\">in<\/span> X:\n          prediction = self.forward(x)\n          Y_predicted.append(prediction)\n    \t  <span class=\"hljs-keyword\">return<\/span> Y_predicted\n\n<span class=\"hljs-meta\">\t@staticmethod<\/span>\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_loss<\/span><span class=\"hljs-params\">(predicted_output: float, target: float)<\/span> -&gt; float:<\/span>\n    \t  <span class=\"hljs-comment\"># In this example we used Mean Square Error (MSE)<\/span>\n    \t  <span class=\"hljs-keyword\">return<\/span> (predicted_output - target) ** <span class=\"hljs-number\">2<\/span>\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_total_loss<\/span><span class=\"hljs-params\">(self, targets: &#91;float], predicted_outputs: &#91;float])<\/span> -&gt; float:<\/span>\n    \t  <span class=\"hljs-comment\"># In this example we used Mean Square Error (MSE)<\/span>\n    \t  total_loss = <span class=\"hljs-number\">0<\/span>\n    \t  <span class=\"hljs-keyword\">for<\/span> target, predicted_output <span class=\"hljs-keyword\">in<\/span> zip(targets, predicted_outputs):\n          total_loss += (predicted_output - target) ** <span class=\"hljs-number\">2<\/span>\n\n    \t  <span class=\"hljs-keyword\">return<\/span> total_loss\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_loss_derivative<\/span><span class=\"hljs-params\">(self, predicted_output: float, target: float)<\/span> -&gt; float:<\/span>\n    \t  <span class=\"hljs-keyword\">return<\/span> (predicted_output - target) * <span class=\"hljs-number\">2<\/span>\n\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">train<\/span><span class=\"hljs-params\">(self, training_sample: &#91;float], learning_rate=<span class=\"hljs-number\">0.01<\/span>, epochs=<span class=\"hljs-number\">1000<\/span>)<\/span>:<\/span>\n    \t  <span class=\"hljs-keyword\">for<\/span> epoch <span class=\"hljs-keyword\">in<\/span> range(<span class=\"hljs-number\">1<\/span>, epochs + <span class=\"hljs-number\">1<\/span>):\n          total_loss = <span class=\"hljs-number\">0<\/span>\n\n          <span class=\"hljs-keyword\">for<\/span> _input, target <span class=\"hljs-keyword\">in<\/span> training_sample:\n            <span class=\"hljs-comment\"># Forward Pass<\/span>\n            predicted_output = self.forward(_input)\n            <span class=\"hljs-comment\"># print(_input, target, predicted_output)<\/span>\n\n            <span class=\"hljs-comment\"># Calculate Loss<\/span>\n            loss = self.compute_loss(predicted_output, target)\n            total_loss += loss\n\n            <span class=\"hljs-comment\"># Backward Pass (Calculate gradients)<\/span>\n            loss_derivative_value = self.compute_loss_derivative(predicted_output, target)\n            gradient = loss_derivative_value * _input\n            bias_gradient = loss_derivative_value\n\n            <span class=\"hljs-comment\"># Update Weights and Bias<\/span>\n            self.weight -= learning_rate * gradient\n            self.bias -= learning_rate * bias_gradient\n\n          <span class=\"hljs-comment\"># Print loss every 100 epochs<\/span>\n          <span class=\"hljs-keyword\">if<\/span> epoch % <span class=\"hljs-number\">100<\/span> == <span class=\"hljs-number\">0<\/span>:\n            print(<span class=\"hljs-string\">f\"Epoch: <span class=\"hljs-subst\">{epoch}<\/span>, Loss: <span class=\"hljs-subst\">{total_loss:<span class=\"hljs-number\">.4<\/span>f}<\/span>, Weight: <span class=\"hljs-subst\">{self.weight:<span class=\"hljs-number\">.4<\/span>f}<\/span>, Bias: <span class=\"hljs-subst\">{self.bias:<span class=\"hljs-number\">.4<\/span>f}<\/span>\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A classe<code> NeuralNetwork<\/code> come\u00e7a com um construtor <code>(__init__),<\/code> que inicializa um peso e um bias. Esses valores s\u00e3o atribu\u00eddos aleatoriamente com <code>random.random()<\/code>, garantindo que o modelo comece com par\u00e2metros diferentes de zero.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> random\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">NeuralNetwork<\/span>:<\/span>\n\t<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span><span class=\"hljs-params\">(self)<\/span>:<\/span>\n    \t <span class=\"hljs-comment\"># Randomly initialize weight and bias<\/span>\n    \t self.weight = random.random()\n    \t self.bias = random.random()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A fun\u00e7\u00e3o <code>forward<\/code> executa um forward pass pelo neur\u00f4nio. Ela calcula a soma ponderada da entrada e adiciona o bias.<br><\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">forward<\/span><span class=\"hljs-params\">(self, _input: float | int)<\/span>:<\/span>\n\t<span class=\"hljs-comment\"># Calculate the weighted sum<\/span>\n\toutput = self.weight * _input + self.bias\n\t<span class=\"hljs-keyword\">return<\/span> output<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>O m\u00e9todo <code>predict<\/code> recebe uma lista de entradas e devolve as sa\u00eddas correspondentes. Ele apenas aplica a fun\u00e7\u00e3o <code>forward<\/code> a cada valor de entrada.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">predict<\/span><span class=\"hljs-params\">(self, X: &#91;float])<\/span> -&gt; &#91;float]:<\/span>\n\tY_predicted = &#91;]\n\t <span class=\"hljs-keyword\">for<\/span> x <span class=\"hljs-keyword\">in<\/span> X:\n    \t  prediction = self.forward(x)\n    \t  Y_predicted.append(prediction)\n\t<span class=\"hljs-keyword\">return<\/span> Y_predicted<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A <code>compute_loss function<\/code> calcula o Mean Squared Error (MSE) para uma \u00fanica previs\u00e3o. A diferen\u00e7a ao quadrado garante que os erros sejam sempre positivos e penaliza desvios maiores com mais peso.<br><\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-meta\">@staticmethod<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_loss<\/span><span class=\"hljs-params\">(predicted_output: float, target: float)<\/span> -&gt; float:<\/span>\n\t<span class=\"hljs-keyword\">return<\/span> (predicted_output - target) ** <span class=\"hljs-number\">2<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A fun\u00e7\u00e3o <code>compute_total_loss<\/code> calcula a perda total em um conjunto de dados somando os erros quadr\u00e1ticos individuais. Isso ajuda a acompanhar o desempenho do modelo ao longo de v\u00e1rios pontos.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_total_loss<\/span><span class=\"hljs-params\">(self, targets: &#91;float], predicted_outputs: &#91;float])<\/span> -&gt; float:<\/span>\n\ttotal_loss = <span class=\"hljs-number\">0<\/span>\n\t<span class=\"hljs-keyword\">for<\/span> target, predicted_output <span class=\"hljs-keyword\">in<\/span> zip(targets, predicted_outputs):\n    \ttotal_loss += (predicted_output - target) ** <span class=\"hljs-number\">2<\/span>\n\t<span class=\"hljs-keyword\">return<\/span> total_loss<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A fun\u00e7\u00e3o <code>compute_loss_derivative<\/code> calcula a derivada da fun\u00e7\u00e3o de perda em rela\u00e7\u00e3o \u00e0 sa\u00edda prevista. Como estamos usando MSE, a derivada \u00e9:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"503\" height=\"96\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/Captura-de-Tela-2025-04-10-as-14.28.35.png\" alt=\"Trecho de c\u00f3digo Python para treinar uma rede neural do zero\" class=\"wp-image-12636\" style=\"width:457px;height:auto\" \/><\/figure>\n\n\n\n<p>Essa derivada \u00e9 essencial para o gradiente descendente atualizar os par\u00e2metros do modelo.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">compute_loss_derivative<\/span><span class=\"hljs-params\">(self, predicted_output: float, target: float)<\/span> -&gt; float:<\/span>\n\t<span class=\"hljs-keyword\">return<\/span> (predicted_output - target) * <span class=\"hljs-number\">2<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Por fim, a fun\u00e7\u00e3o <code>train<\/code> treina o neur\u00f4nio artificial usando gradiente descendente:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Forward Pass<\/strong>: calcula previs\u00f5es para cada entrada.<\/li>\n\n\n\n<li><strong>C\u00e1lculo da perda<\/strong>: avalia o quanto as previs\u00f5es est\u00e3o distantes dos valores reais.<\/li>\n\n\n\n<li><strong>Backward Pass<\/strong>: usa a <strong>derivada da perda<\/strong> para calcular os gradientes.<\/li>\n\n\n\n<li><strong>Atualiza\u00e7\u00e3o dos par\u00e2metros<\/strong>: ajusta <code>weight<\/code> e <code>bias<\/code> usando a <strong>learning rate<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>A perda \u00e9 impressa a cada 100 epochs para acompanhar o progresso do treinamento.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">train<\/span><span class=\"hljs-params\">(self, training_sample: &#91;float], learning_rate=<span class=\"hljs-number\">0.01<\/span>, epochs=<span class=\"hljs-number\">1000<\/span>)<\/span>:<\/span>\n\t<span class=\"hljs-keyword\">for<\/span> epoch <span class=\"hljs-keyword\">in<\/span> range(<span class=\"hljs-number\">1<\/span>, epochs + <span class=\"hljs-number\">1<\/span>):\n    \ttotal_loss = <span class=\"hljs-number\">0<\/span>\n\n    \t<span class=\"hljs-keyword\">for<\/span> _input, target <span class=\"hljs-keyword\">in<\/span> training_sample:\n        \t<span class=\"hljs-comment\"># Forward Pass<\/span>\n        \tpredicted_output = self.forward(_input)\n\n        \t<span class=\"hljs-comment\"># Calculate Loss<\/span>\n        \tloss = self.compute_loss(predicted_output, target)\n        \ttotal_loss += loss\n\n        \t<span class=\"hljs-comment\"># Backward Pass (Calculate gradients)<\/span>\n        \tloss_derivative_value = self.compute_loss_derivative(predicted_output, target)\n        \tgradient = loss_derivative_value * _input\n        \tbias_gradient = loss_derivative_value\n\n        \t<span class=\"hljs-comment\"># Update Weights and Bias<\/span>\n        \tself.weight -= learning_rate * gradient\n        \tself.bias -= learning_rate * bias_gradient\n\n    \t<span class=\"hljs-comment\"># Print loss every 100 epochs<\/span>\n    \t<span class=\"hljs-keyword\">if<\/span> epoch % <span class=\"hljs-number\">100<\/span> == <span class=\"hljs-number\">0<\/span>:\n        \tprint(<span class=\"hljs-string\">f\"Epoch: <span class=\"hljs-subst\">{epoch}<\/span>, Loss: <span class=\"hljs-subst\">{total_loss:<span class=\"hljs-number\">.4<\/span>f}<\/span>, Weight: <span class=\"hljs-subst\">{self.weight:<span class=\"hljs-number\">.4<\/span>f}<\/span>, Bias: <span class=\"hljs-subst\">{self.bias:<span class=\"hljs-number\">.4<\/span>f}<\/span>\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Vamos a um exemplo para deixar claro como usar essa classe. O c\u00f3digo abaixo foi extra\u00eddo do mesmo reposit\u00f3rio, e a vers\u00e3o completa est\u00e1 no Jupyter Notebook linear_regression.ipynb.<br><br>Para ilustrar o processo de regress\u00e3o linear, o notebook gera dados sint\u00e9ticos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Valores de entrada (<\/strong><strong>X<\/strong><strong>)<\/strong>: um conjunto de valores aleat\u00f3rios.<\/li>\n\n\n\n<li><strong>Valores de sa\u00edda (Y)<\/strong>: gerados a partir de uma rela\u00e7\u00e3o linear com <code>X<\/code>, normalmente na forma <code>Y = mX + b + noise<\/code>, em que m \u00e9 o coeficiente angular, b \u00e9 o intercepto e<code> noise<\/code> adiciona variabilidade para simular dados do mundo real.<\/li>\n<\/ul>\n\n\n\n<p>Esses dados sint\u00e9ticos funcionam como um ambiente controlado para demonstrar a mec\u00e2nica da regress\u00e3o linear. Adicionamos ru\u00eddo aleat\u00f3rio para criar dispers\u00e3o entre os valores. Sem isso, ter\u00edamos apenas uma reta ascendente com coeficiente angular igual a 5.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">regression_function<\/span><span class=\"hljs-params\">(samples=<span class=\"hljs-number\">100<\/span>)<\/span> -&gt; (&#91;int], &#91;float]):<\/span>\n    X = &#91;]\n    Y = &#91;]\n    <span class=\"hljs-keyword\">for<\/span> x <span class=\"hljs-keyword\">in<\/span> range(samples):\n        <span class=\"hljs-comment\"># y = 5 * x + 1<\/span>\n        y = <span class=\"hljs-number\">5<\/span> * x + random.uniform(<span class=\"hljs-number\">-100<\/span>, <span class=\"hljs-number\">100<\/span>)\n        X.append(x)\n        Y.append(y)\n\n    <span class=\"hljs-keyword\">return<\/span> X, Y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"512\" height=\"383\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/03\/synthetic-data-.png\" alt=\"Gr\u00e1fico dos dados sint\u00e9ticos usados para treinar a rede neural\" class=\"wp-image-12554\" \/><figcaption class=\"wp-element-caption\">Mostra o gr\u00e1fico dos dados sint\u00e9ticos gerados, para entender de onde o neur\u00f4nio artificial vai aprender.<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Em seguida, instanciamos um neur\u00f4nio artificial e enviamos alguns dados para verificar se ele consegue prever a sa\u00edda. A Figura 6 mostra o resultado, com a linha vermelha formada pelos valores de sa\u00edda, ou previs\u00e3o, do neur\u00f4nio artificial. <\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> perceptron.linear_regression <span class=\"hljs-keyword\">import<\/span> NeuralNetwork\n\nnn = NeuralNetwork()\nY_predicted = nn.predict(X)\nprint_prediction_function(X, Y, Y_predicted)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"552\" height=\"413\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/image14.png\" alt=\"Gr\u00e1fico da reta ajustada pela rede neural sobre os dados de treino\" class=\"wp-image-12640\" \/><\/figure>\n<\/div>\n\n\n<p>Como voc\u00ea pode ver, a linha vermelha n\u00e3o reflete a realidade dos dados de treinamento, o que significa que precisamos treinar o neur\u00f4nio artificial. O pr\u00f3ximo passo \u00e9 chamar o m\u00e9todo train com epochs = 100000 e learning_rate = 0.00001. Isso aplica o algoritmo de backpropagation 100000 vezes e atualiza o peso e o bias com um passo muito pequeno, o que ajuda o modelo a convergir para valores \u00f3timos que representam os dados. Os valores finais obtidos ap\u00f3s o treinamento foram:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Epoch: 100000,&nbsp;<\/li>\n\n\n\n<li>Loss: 367628.9078,&nbsp;<\/li>\n\n\n\n<li>Weight: 5.4246,&nbsp;<\/li>\n\n\n\n<li>Bias: -18.1625<\/li>\n<\/ul>\n\n\n\n<p>Vale notar que o valor de Loss \u00e9 acumulado ao longo do processo de treinamento. Nos primeiros passos, o erro \u00e9 enorme, mas, conforme o neur\u00f4nio atualiza seu peso e seu bias, o erro se estabiliza.<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">population = &#91;*zip(X, Y)]\ntraining_sample = &#91;*zip(X, Y)]\nlearning_rate = <span class=\"hljs-number\">0.00001<\/span>\nepochs = <span class=\"hljs-number\">100000<\/span>\nnn.train(training_sample, learning_rate, epochs)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A Figura 7 apresenta o resultado final depois que o neur\u00f4nio artificial treinado prev\u00ea os valores. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"552\" height=\"413\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/image16.png\" alt=\"Curva de perda ao longo das \u00e9pocas de treinamento da rede neural\" class=\"wp-image-12642\" style=\"width:533px;height:auto\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Para fechar<\/strong><\/h2>\n\n\n\n<p>Agora podemos usar esse neur\u00f4nio artificial treinado para prever novos valores. D\u00e1 para expandir o exemplo para uma tarefa de previs\u00e3o de pre\u00e7o de im\u00f3veis, com dezenas ou centenas de vari\u00e1veis de entrada. Precisamos us\u00e1-las para definir o valor final de uma casa a partir de seus atributos.&nbsp;<\/p>\n\n\n\n<p>Vale destacar que n\u00e3o cobrimos aspectos importantes do processo de treinamento, como separar 80% dos dados para treino, usar os <strong>20% restantes para valida\u00e7\u00e3o<\/strong> ou limpar e padronizar os dados. Esse tipo de t\u00e9cnica ajuda no desenvolvimento do modelo e tem suas armadilhas.<\/p>\n\n\n\n<p>Mas voc\u00ea pode contar com o time da <a href=\"https:\/\/cheesecakelabs.com\/\">Cheesecake Labs<\/a> para ajudar no desenvolvimento de modelos de rede neural. Temos engenheiros especializados prontos para mergulhar nos dados e criar modelos que resolvem os problemas do seu neg\u00f3cio.<br><br>Em um pr\u00f3ximo post, vamos olhar para o problema de classifica\u00e7\u00e3o. At\u00e9 l\u00e1, confira outros conte\u00fados e relat\u00f3rios que explicam nossa abordagem para machine learning e <a href=\"https:\/\/cheesecakelabs.com\/services\/ai-development\" target=\"_blank\" rel=\"noreferrer noopener\">desenvolvimento de aplica\u00e7\u00f5es com IA<\/a> na Cheesecake Labs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cheesecakelabs.com\/blog\/regressao-em-ia-tipos-e-aplicacoes\/\" target=\"_blank\" rel=\"noreferrer noopener\">Como usar regress\u00e3o com IA para criar aplica\u00e7\u00f5es melhores<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cheesecakelabs.com\/blog\/classificacao-com-ia-apps-eficientes\/\" target=\"_blank\" rel=\"noreferrer noopener\">Como usar classifica\u00e7\u00e3o com IA para criar apps mais eficientes<\/a><\/li>\n<\/ul>\n\n\n\n<p>Se voc\u00ea tem uma ideia de projeto que se beneficiaria de uma rede neural, <a href=\"https:\/\/cheesecakelabs.com\/contact\/\" target=\"_blank\" rel=\"noreferrer noopener\">mande uma mensagem<\/a> e vamos conversar. Vai ser um prazer ajudar a tirar suas ideias do papel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cheesecakelabs.com\/contact\/\"><img decoding=\"async\" width=\"1200\" height=\"544\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-1200x544.png\" alt=\"agende uma conversa com os especialistas da cheesecake labs\" class=\"wp-image-12795\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-1200x544.png 1200w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-600x272.png 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-768x348.png 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-1536x697.png 1536w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs-760x345.png 760w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/05\/cheesecake-labs.png 1924w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Redes neurais s\u00e3o algoritmos de machine learning poderosos, que j\u00e1 transformaram in\u00fameros setores. Elas sustentam desde detec\u00e7\u00e3o de fraude e previs\u00e3o de demanda at\u00e9 recomenda\u00e7\u00f5es personalizadas e sistemas aut\u00f4nomos, e s\u00e3o um bom caminho para levar decis\u00f5es mais inteligentes para dentro das suas aplica\u00e7\u00f5es.&nbsp; Neste guia, voc\u00ea vai percorrer os fundamentos das redes neurais, das [&hellip;]<\/p>\n","protected":false},"author":92,"featured_media":12644,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_title":"Construindo redes neurais do zero: guia para come\u00e7ar","_yoast_wpseo_metadesc":"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.","_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_canonical":"","ai_summary":"Redes neurais s\u00e3o algoritmos de machine learning inspirados no c\u00e9rebro humano, formados por neur\u00f4nios interconectados que aprendem a partir de grandes volumes de dados, com aplica\u00e7\u00f5es como reconhecimento de imagem, processamento de linguagem natural e an\u00e1lise preditiva.\nConstruir uma rede neural eficaz envolve quatro componentes: definir a tarefa, escolher o modelo, estabelecer m\u00e9tricas de desempenho (como acur\u00e1cia, precis\u00e3o, recall ou F1-score) e fornecer experi\u00eancia por meio dos dados de treinamento.\nO Perceptron, proposto por McCulloch e Pitts em 1943, \u00e9 a primeira representa\u00e7\u00e3o matem\u00e1tica do neur\u00f4nio artificial e combina entradas ponderadas, bias e fun\u00e7\u00e3o de ativa\u00e7\u00e3o, servindo de base para arquiteturas mais avan\u00e7adas.\nO guia aplica o neur\u00f4nio artificial a um problema de regress\u00e3o linear, usando o Mean Squared Error (MSE) para medir o erro e backpropagation com gradiente descendente para treinar o modelo, destacando a escolha emp\u00edrica de hiperpar\u00e2metros como learning rate e epochs para evitar underfit e overfit.","ai_summary_en":"","ai_summary_pt-br":"Redes neurais s\u00e3o algoritmos de machine learning inspirados no c\u00e9rebro humano, formados por neur\u00f4nios interconectados que aprendem a partir de grandes volumes de dados, com aplica\u00e7\u00f5es como reconhecimento de imagem, processamento de linguagem natural e an\u00e1lise preditiva.\nConstruir uma rede neural eficaz envolve quatro componentes: definir a tarefa, escolher o modelo, estabelecer m\u00e9tricas de desempenho (como acur\u00e1cia, precis\u00e3o, recall ou F1-score) e fornecer experi\u00eancia por meio dos dados de treinamento.\nO Perceptron, proposto por McCulloch e Pitts em 1943, \u00e9 a primeira representa\u00e7\u00e3o matem\u00e1tica do neur\u00f4nio artificial e combina entradas ponderadas, bias e fun\u00e7\u00e3o de ativa\u00e7\u00e3o, servindo de base para arquiteturas mais avan\u00e7adas.\nO guia aplica o neur\u00f4nio artificial a um problema de regress\u00e3o linear, usando o Mean Squared Error (MSE) para medir o erro e backpropagation com gradiente descendente para treinar o modelo, destacando a escolha emp\u00edrica de hiperpar\u00e2metros como learning rate e epochs para evitar underfit e overfit.","footnotes":"","ckl_wpml_lang":"br","ckl_wpml_source_id":12542,"ckl_wpml_status":"ok: lang=br trid=54535 source=12542 at 2026-08-14 17:04:26"},"categories":[1422,432,471],"tags":[305,1148,1150,54,1199],"class_list":["post-14562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-implementation","category-engineering","category-engenharia","tag-tag-development","tag-tag-development-br","tag-tag-mobile-app-development-br","tag-tag-mobile-app-development","tag-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Construindo redes neurais do zero: guia para come\u00e7ar<\/title>\n<meta name=\"description\" content=\"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo redes neurais do zero: guia para come\u00e7ar\" \/>\n<meta property=\"og:description\" content=\"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-10T18:12:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-15T06:58:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1921\" \/>\n\t<meta property=\"og:image:height\" content=\"861\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\"},\"author\":{\"name\":\"Diana Martins\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9\"},\"headline\":\"Construindo redes neurais do zero\",\"datePublished\":\"2025-04-10T18:12:29+00:00\",\"dateModified\":\"2026-08-15T06:58:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\"},\"wordCount\":3024,\"publisher\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg\",\"keywords\":[\"development\",\"development\",\"mobile app development\",\"mobile app development\",\"software development\"],\"articleSection\":[\"AI Implementation\",\"Engineering\",\"Engenharia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\",\"name\":\"Construindo redes neurais do zero: guia para come\u00e7ar\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg\",\"datePublished\":\"2025-04-10T18:12:29+00:00\",\"dateModified\":\"2026-08-15T06:58:59+00:00\",\"description\":\"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg\",\"width\":1921,\"height\":861,\"caption\":\"cover (9) | | Cheesecake Labs\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Construindo redes neurais do zero\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/br\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Empresa de desenvolvimento e design de aplicativos mobile &amp; web que est\u00e1 reinventando o desenvolvimento de produtos com times remotos. N\u00f3s desenvolvemos aplicativos iOS, Android e aplica\u00e7\u00f5es Web com as melhores empresas dos EUA, do Brasil e do mundo.\",\"publisher\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/br\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#organization\",\"name\":\"Cheesecake Labs\",\"alternateName\":\"Cheesecake Labs Inc\",\"url\":\"https:\/\/cheesecakelabs.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cheesecakelabs.com\/#logo\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png\",\"caption\":\"Cheesecake Labs\",\"inLanguage\":\"br\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/cheesecakelabs.com\/#primary-image\",\"url\":\"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp\",\"contentUrl\":\"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp\",\"width\":1920,\"height\":1080,\"caption\":\"Cheesecake Labs \u2014 AI, Data & Blockchain software development services\",\"inLanguage\":\"br\"},\"sameAs\":[\"https:\/\/www.facebook.com\/cheesecakelabs\",\"https:\/\/x.com\/cheesecakelabs\",\"https:\/\/www.instagram.com\/cheesecakelabs\/\",\"https:\/\/www.linkedin.com\/company\/cheesecake-labs\/\",\"https:\/\/www.youtube.com\/channel\/UCdGEQ5AHJcmIlaOaI5fGGVA\",\"https:\/\/clutch.co\/profile\/cheesecake-labs\",\"https:\/\/www.behance.net\/cheesecakelabs\",\"https:\/\/dribbble.com\/cheesecakelabs\",\"https:\/\/www.designrush.com\/agency\/profile\/cheesecake-labs\",\"https:\/\/www.g2.com\/products\/cheesecake-labs\/reviews\"],\"description\":\"Cheesecake Labs is a software development studio that designs and builds custom digital products \u2014 web, mobile, and platforms \u2014 combining product design and high-performance engineering.\",\"foundingDate\":\"2013\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9\",\"name\":\"Diana Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g\",\"caption\":\"Diana Martins\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Construindo redes neurais do zero: guia para come\u00e7ar","description":"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/","og_locale":"pt_BR","og_type":"article","og_title":"Construindo redes neurais do zero: guia para come\u00e7ar","og_description":"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.","og_url":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2025-04-10T18:12:29+00:00","article_modified_time":"2026-08-15T06:58:59+00:00","og_image":[{"width":1921,"height":861,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg","type":"image\/jpeg"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Escrito por":null,"Est. tempo de leitura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/"},"author":{"name":"Diana Martins","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9"},"headline":"Construindo redes neurais do zero","datePublished":"2025-04-10T18:12:29+00:00","dateModified":"2026-08-15T06:58:59+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/"},"wordCount":3024,"publisher":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg","keywords":["development","development","mobile app development","mobile app development","software development"],"articleSection":["AI Implementation","Engineering","Engenharia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/","url":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/","name":"Construindo redes neurais do zero: guia para come\u00e7ar","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg","datePublished":"2025-04-10T18:12:29+00:00","dateModified":"2026-08-15T06:58:59+00:00","description":"Construindo redes neurais do zero: do perceptron ao modelo treinado, entenda tarefa, medi\u00e7\u00e3o de desempenho e experi\u00eancia em machine learning.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2025\/04\/cover-9.jpg","width":1921,"height":861,"caption":"cover (9) | | Cheesecake Labs"},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/construindo-redes-neurais-do-zero\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/br\/blog\/"},{"@type":"ListItem","position":2,"name":"Construindo redes neurais do zero"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/br\/","name":"Cheesecake Labs","description":"Empresa de desenvolvimento e design de aplicativos mobile &amp; web que est\u00e1 reinventando o desenvolvimento de produtos com times remotos. N\u00f3s desenvolvemos aplicativos iOS, Android e aplica\u00e7\u00f5es Web com as melhores empresas dos EUA, do Brasil e do mundo.","publisher":{"@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#organization","name":"Cheesecake Labs","alternateName":"Cheesecake Labs Inc","url":"https:\/\/cheesecakelabs.com\/","logo":{"@type":"ImageObject","@id":"https:\/\/cheesecakelabs.com\/#logo","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/06\/cheesecake-labs-1.png","caption":"Cheesecake Labs","inLanguage":"br"},"image":{"@type":"ImageObject","@id":"https:\/\/cheesecakelabs.com\/#primary-image","url":"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp","contentUrl":"https:\/\/ckl-website-v4-strapi-prod.s3.us-east-2.amazonaws.com\/ai_software_development_company_83fb512983.webp","width":1920,"height":1080,"caption":"Cheesecake Labs \u2014 AI, Data & Blockchain software development services","inLanguage":"br"},"sameAs":["https:\/\/www.facebook.com\/cheesecakelabs","https:\/\/x.com\/cheesecakelabs","https:\/\/www.instagram.com\/cheesecakelabs\/","https:\/\/www.linkedin.com\/company\/cheesecake-labs\/","https:\/\/www.youtube.com\/channel\/UCdGEQ5AHJcmIlaOaI5fGGVA","https:\/\/clutch.co\/profile\/cheesecake-labs","https:\/\/www.behance.net\/cheesecakelabs","https:\/\/dribbble.com\/cheesecakelabs","https:\/\/www.designrush.com\/agency\/profile\/cheesecake-labs","https:\/\/www.g2.com\/products\/cheesecake-labs\/reviews"],"description":"Cheesecake Labs is a software development studio that designs and builds custom digital products \u2014 web, mobile, and platforms \u2014 combining product design and high-performance engineering.","foundingDate":"2013"},{"@type":"Person","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/37fa2f0fa5f8d3cbaeb21b973fa5c4b9","name":"Diana Martins","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/cheesecakelabs.com\/blog\/br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d074fb633a22723051c9d98ffc13065a28f0b52bd30a4c0a832ee19820caa4ba?s=96&d=mm&r=g","caption":"Diana Martins"}}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/users\/92"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/comments?post=14562"}],"version-history":[{"count":3,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14562\/revisions"}],"predecessor-version":[{"id":15045,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/posts\/14562\/revisions\/15045"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/media\/12644"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/media?parent=14562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/categories?post=14562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/br\/wp-json\/wp\/v2\/tags?post=14562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}