{"id":10053,"date":"2023-12-12T11:33:10","date_gmt":"2023-12-12T14:33:10","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=10053"},"modified":"2023-12-26T09:52:45","modified_gmt":"2023-12-26T12:52:45","slug":"quando-recorrer-a-redes-neurais-uma-transcricao","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/quando-recorrer-a-redes-neurais-uma-transcricao\/","title":{"rendered":"Quando Recorrer a Redes Neurais: Uma Transcri\u00e7\u00e3o"},"content":{"rendered":"\n<p>Como profissional da \u00e1rea de desenvolvimento de software, vejo todos os dias a import\u00e2ncia de ter um profundo entendimento de algoritmos, estruturas de dados e as diversas ferramentas de intelig\u00eancia artificial dispon\u00edveis, como as redes neurais. Dessa forma, podemos n\u00e3o s\u00f3 enfrentar desafios complexos, mas tamb\u00e9m construir solu\u00e7\u00f5es inovadoras e eficazes. Entender quando e como utilizar essas ferramentas \u00e9 um conhecimento fundamental que destaca um desenvolvedor no mercado. Vamos mergulhar um pouco mais fundo nesse tema?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reconhecendo o Problema e Escolhendo o Caminho Certo<\/h2>\n\n\n\n<p>O primeiro passo para a escolha da ferramenta correta \u00e9 sempre a compreens\u00e3o do problema. Caso estejamos lidando com problemas cujas solu\u00e7\u00f5es s\u00e3o claras e diretas, o foco deve estar nos algoritmos e estruturas de dados apropriados para uma execu\u00e7\u00e3o eficiente. Por exemplo, em uma simples busca de dados, podemos aproveitar os benef\u00edcios de uma <em>HashTable<\/em> levando em conta sua complexidade O(1) para inser\u00e7\u00e3o e busca.<\/p>\n\n\n\n<p>Quando o problema \u00e9 intrat\u00e1vel e n\u00e3o pode ser resolvido por algoritmos polinomiais \u2014 pense em otimiza\u00e7\u00f5es de rotas complexas ou em criptografia \u2014, t\u00e9cnicas como heur\u00edsticas ou metaheur\u00edsticas como algoritmos gen\u00e9ticos se tornam nossos aliados. Estas abordagens, embora n\u00e3o garantam a melhor solu\u00e7\u00e3o, s\u00e3o pr\u00e1ticas e proporcionam respostas suficientemente boas em tempo h\u00e1bil, o que \u00e9 fundamental no mundo real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Redes Neurais: Al\u00e9m De Algoritmos e Heur\u00edsticas<\/h2>\n\n\n\n<p>Entretanto, h\u00e1 problemas cuja complexidade extrapola os limites da programa\u00e7\u00e3o convencional, como o reconhecimento de padr\u00f5es em imagens ou som. \u00c9 aqui que as redes neurais apresentam seu verdadeiro valor. Inspiradas no funcionamento do c\u00e9rebro humano, s\u00e3o capazes de aprender a partir de grandes volumes de dados e generalizar conhecimento para casos novos.<\/p>\n\n\n\n<p>Um dos exemplos mais marcantes da utilidade das redes neurais \u00e9 a sua aplica\u00e7\u00e3o no reconhecimento de imagens. As redes convolucionais (CNNs) t\u00eam sido aplicadas com sucesso em desafios como o ImageNet, onde a tarefa \u00e9 classificar com precis\u00e3o entre milhares de categorias de imagens. Mas a aplica\u00e7\u00e3o das CNNs vai al\u00e9m, sendo utilizadas at\u00e9 na an\u00e1lise de exames m\u00e9dicos, identificando padr\u00f5es que podem indicar a presen\u00e7a de doen\u00e7as.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementando Redes Neurais em C<\/h2>\n\n\n\n<p>Para aqueles interessados em como essas redes podem ser implementadas, aqui est\u00e1 um exemplo simplificado de uma rede neural em C#. Este c\u00f3digo n\u00e3o \u00e9 completo, mas d\u00e1 uma no\u00e7\u00e3o de como uma rede neural pode ser estruturada em um ambiente .NET.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"public class NeuralNetwork\n{\n    private Matrix CalculateOutput(Matrix inputs)\n    {\n        \/\/ C\u00e1lculo simplificado da sa\u00edda de uma camada da rede neural.\n        \/\/ A matriz 'weights' representa os pesos sin\u00e1pticos.\n        \/\/ A fun\u00e7\u00e3o 'Sigmoid' aplica a fun\u00e7\u00e3o de ativa\u00e7\u00e3o sigmoidal.\n        Matrix output = Sigmoid(Matrix.DotProduct(inputs, weights));\n        return output;\n    }\n\n    private Matrix Sigmoid(Matrix matrix)\n    {\n        \/\/ Aplica\u00e7\u00e3o da fun\u00e7\u00e3o sigmoidal para ativa\u00e7\u00e3o dos neur\u00f4nios.\n        for (int i = 0; i < matrix.RowCount; i++)\n        {\n            for (int j = 0; j < matrix.ColumnCount; j++)\n            {\n                matrix[i, j] = 1.0 \/ (1.0 + Math.Exp(-matrix[i, j]));\n            }\n        }\n        return matrix;\n    }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">NeuralNetwork<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> Matrix <\/span><span style=\"color: #88C0D0\">CalculateOutput<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Matrix inputs<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ C\u00e1lculo simplificado da sa\u00edda de uma camada da rede neural.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ A matriz &#39;weights&#39; representa os pesos sin\u00e1pticos.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ A fun\u00e7\u00e3o &#39;Sigmoid&#39; aplica a fun\u00e7\u00e3o de ativa\u00e7\u00e3o sigmoidal.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        Matrix output <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Sigmoid<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Matrix<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">DotProduct<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">inputs<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">weights<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">output<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> Matrix <\/span><span style=\"color: #88C0D0\">Sigmoid<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Matrix matrix<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Aplica\u00e7\u00e3o da fun\u00e7\u00e3o sigmoidal para ativa\u00e7\u00e3o dos neur\u00f4nios.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">matrix<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">RowCount<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #81A1C1\">++<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> j <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">j<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">matrix<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">ColumnCount<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">j<\/span><span style=\"color: #81A1C1\">++<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">matrix<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">j<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1.0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1.0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Math<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Exp<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">matrix<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">j<\/span><span style=\"color: #ECEFF4\">]))<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">matrix<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Lembre-se, ajustar os pesos sin\u00e1pticos dessa rede seria feito pelo processo de <em>backpropagation<\/em>, outro conceito fundamental ao treinar redes neurais.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Dominar a arte de escolher a ferramenta certa para o problema certo \u00e9 uma habilidade que nos define como desenvolvedores de excel\u00eancia. Seja otimizando processos com algoritmos cl\u00e1ssicos, encontrando solu\u00e7\u00f5es pr\u00e1ticas com heur\u00edsticas ou quebrando barreiras com redes neurais, nossa capacidade de solucionar problemas \u00e9 vasta e poderosa. E quando falamos de redes neurais, o potencial \u00e9 t\u00e3o vasto quanto a complexidade dos desafios que podemos enfrentar; sua aplica\u00e7\u00e3o vai desde a vis\u00e3o computacional at\u00e9 o processamento de linguagem natural e al\u00e9m.<\/p>\n\n\n\n<p>Estes assuntos, incluindo aprofundamentos em algoritmos, estruturas de dados e redes neurais, s\u00e3o explorados em meus grupos de estudos e mentorias, onde colocamos a teoria \u00e0 prova com problemas reais e an\u00e1lises cr\u00edticas para fortalecer nosso entendimento e habilidades pr\u00e1ticas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dependendo da complexidade do problema, devemos escolher entre algoritmos otimizados, estruturas de dados apropriadas, heur\u00edsticas ou redes neurais.<\/li>\n\n\n\n<li>Heur\u00edsticas e metaheur\u00edsticas s\u00e3o solu\u00e7\u00f5es pr\u00e1ticas para problemas complexos que n\u00e3o requerem uma solu\u00e7\u00e3o perfeita e polinomial.<\/li>\n\n\n\n<li>Redes neurais s\u00e3o poderosas em tarefas de reconhecimento de padr\u00f5es e, atrav\u00e9s de exemplos pr\u00e1ticos e c\u00f3digos em C#, podemos ver sua aplicabilidade em problemas reais.<\/li>\n<\/ol>\n","protected":false},"featured_media":10032,"parent":0,"template":"","cursos":[5],"class_list":["post-10053","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-algortimos"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/10053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/10032"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=10053"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=10053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}