[{"data":1,"prerenderedAt":3176},["ShallowReactive",2],{"lang-switch-post-\u002F":3,"home-playlists-pt":4,"home-latest-posts-pt":237,"home-latest-timeline-pt":3077},null,[5,40,97,168,196],{"id":6,"title":7,"body":8,"cover":3,"description":30,"extension":31,"meta":32,"navigation":33,"order":34,"path":35,"seo":36,"status":37,"stem":38,"__hash__":39},"playlists\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Findex.md","Machine Learning Specialization (Andrew Ng)",{"type":9,"value":10,"toc":26},"minimark",[11,20,23],[12,13,14,15,19],"p",{},"Essa playlist é o meu caderno de anotações público enquanto estudo a ",[16,17,18],"strong",{},"Machine Learning Specialization",", do Andrew Ng (DeepLearning.AI \u002F Stanford), provavelmente o curso mais recomendado pra quem tá começando em ML.",[12,21,22],{},"A ideia aqui não é só \"resolver o notebook e seguir\". Cada lab do curso vira um post onde eu reconto o que entendi, com metáfora, exemplo do dia a dia, e claro, o nome técnico certo, porque isso você vai precisar quando for procurar mais coisa sobre o assunto depois.",[12,24,25],{},"Começamos pelo começo: representar o modelo mais simples que existe, a regressão linear com uma variável.",{"title":27,"searchDepth":28,"depth":28,"links":29},"",2,[],"Meus estudos passo a passo pela especialização de Machine Learning do Andrew Ng (DeepLearning.AI \u002F Stanford), curso por curso, lab por lab.","md",{},true,1,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization",{"title":7,"description":30},"published","pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Findex","E9Okc28mL6OITzVoZv3DkKW9sSyof7S1q6TRo9ovEso",{"id":41,"title":42,"body":43,"cover":3,"description":91,"extension":31,"meta":92,"navigation":33,"order":28,"path":93,"seo":94,"status":37,"stem":95,"__hash__":96},"playlists\u002Fpt\u002Fplaylists\u002Fpattern-recognition\u002Findex.md","Reconhecimento de Padrões",{"type":9,"value":44,"toc":89},[45,58,71,81],[12,46,47,48,51,52,57],{},"Essa playlist é o caderno de anotações da matéria de Reconhecimento de Padrões que eu cursei, dada pelo ",[16,49,50],{},"Dr. Francisco Boldt",". Ele é fera, literalmente coda os modelos na mão, ao vivo, na aula, sem slide de fórmula pronta, e agora tá me lecionando ",[53,54,56],"a",{"href":55},"\u002Fplaylists\u002Fneural-networks","redes neurais também",". Se você caiu aqui vindo de uma aula dele, já sabe do que eu tô falando.",[12,59,60,61,65,66,70],{},"Diferente da ",[53,62,64],{"href":63},"\u002Fplaylists\u002Fmachine-learning-specialization","playlist da especialização do Andrew Ng",", aqui os notebooks das aulas são bem mais enxutos: pouquíssima célula de markdown, é o professor codando ao vivo e a gente acompanhando. Então o trabalho de esmiuçar o \"por quê\" por trás de cada linha de código é maior, e pra isso eu uso como referência teórica o livro ",[67,68,69],"em",{},"Pattern Recognition and Machine Learning",", do Christopher Bishop (2006), praticamente uma bíblia da área.",[12,72,73,74,80],{},"Os notebooks vêm do repositório da matéria, ",[53,75,79],{"href":76,"rel":77},"https:\u002F\u002Fgithub.com\u002Fpablobelmiro\u002Faulasml\u002Ftree\u002F2026-1",[78],"nofollow","pablobelmiro\u002Faulasml",", um fork do repositório original do próprio Dr. Boldt, onde ele publica o código de cada aula. Nos posts dessa playlist, quem \"faz\" o código é sempre ele, o professor; a explicação de fundamento, com a metáfora, a analogia torta e o tom de colega do lado, essa é a minha.",[12,82,83,84,88],{},"Cada aula da matéria vira um post aqui. Começamos pelo começo: o mesmo problema de ",[53,85,87],{"href":86},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Flab02-model-representation","regressão linear que já vimos na outra playlist",", só que agora com o código sendo escrito na cara do quadro.",{"title":27,"searchDepth":28,"depth":28,"links":90},[],"Minhas anotações da disciplina de Reconhecimento de Padrões, aula por aula, com o livro do Bishop como base teórica.",{},"\u002Fpt\u002Fplaylists\u002Fpattern-recognition",{"title":42,"description":91},"pt\u002Fplaylists\u002Fpattern-recognition\u002Findex","XpBRgaSNS0YRRtovdqN7u3MdAmbF-PKEJQoOiyOjl-M",{"id":98,"title":99,"body":100,"cover":3,"description":161,"extension":31,"meta":162,"navigation":33,"order":163,"path":164,"seo":165,"status":37,"stem":166,"__hash__":167},"playlists\u002Fpt\u002Fplaylists\u002Fneural-networks\u002Findex.md","Redes Neurais",{"type":9,"value":101,"toc":159},[102,112,129,143],[12,103,104,105,107,108,111],{},"Segunda playlist com o ",[16,106,50],{}," (a primeira foi ",[53,109,42],{"href":110},"\u002Fplaylists\u002Fpattern-recognition","), agora na disciplina de Redes Neurais. Mesmo estilo de sempre: código na mão, ao vivo, na aula, sem slide de fórmula pronta. Se você já leu a playlist anterior, sabe exatamente o que esperar.",[12,113,114,115,118,119,123,124,128],{},"O livro de referência muda: aqui eu uso ",[67,116,117],{},"Neural Networks and Deep Learning: A Textbook",", do Charu Aggarwal (2018), pra fazer o papel que o Bishop fazia na playlist passada, encher de fundamento o que o notebook só mostra em código. Boa parte do assunto também conecta direto com o que eu já vi antes: ",[53,120,122],{"href":121},"\u002Fplaylists\u002Fpattern-recognition\u002Flinear-regression-estimator","regra delta e regressão linear já apareceram lá no Reconhecimento de Padrões",", e ",[53,125,127],{"href":126},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Floss-functions","funções de custo já apareceram na especialização do Andrew Ng",", então sempre que der eu vou puxar esses fios em vez de reensinar do zero.",[12,130,73,131,136,137,142],{},[53,132,135],{"href":133,"rel":134},"https:\u002F\u002Fgithub.com\u002Fpablobelmiro\u002Faulasann",[78],"pablobelmiro\u002Faulasann",", um fork do repositório original do próprio Dr. Boldt, ",[53,138,141],{"href":139,"rel":140},"https:\u002F\u002Fgithub.com\u002Ffboldt\u002Faulasann",[78],"fboldt\u002Faulasann",", onde ele publica o código de cada aula. Mesma convenção da playlist anterior: quem \"faz\" o código é sempre ele, o professor; a explicação de fundamento é minha.",[12,144,145,146,149,150,153,154,158],{},"Um detalhe importante dessa vez: essa disciplina está sendo dada ",[16,147,148],{},"agora",", ao vivo, e o repositório só tem o começo do curso até este momento (perceptron, Adaline, funções de custo, multiclasse, o limite do XOR, o MLP que finalmente resolve esse limite (primeiro com pesos escondidos escolhidos na mão, depois sorteados via ELM), e por fim a camada escondida aprendendo de verdade via backpropagation, generalizada pra qualquer profundidade). Diferente da playlist de Reconhecimento de Padrões, que eu comecei só depois que a matéria inteira já tinha acabado, essa aqui é uma ",[16,151,152],{},"playlist viva",": cresce toda vez que o professor publica uma aula nova, e eu volto pra continuar. Começamos pelo começo de tudo: ",[53,155,157],{"href":156},"\u002Fplaylists\u002Fneural-networks\u002Fmcculloch-pitts-perceptron","o neurônio mais simples que existe",".",{"title":27,"searchDepth":28,"depth":28,"links":160},[],"Minhas anotações da disciplina de Redes Neurais, aula por aula, com o livro do Aggarwal como base teórica. Playlist viva, crescendo junto com o curso.",{},3,"\u002Fpt\u002Fplaylists\u002Fneural-networks",{"title":99,"description":161},"pt\u002Fplaylists\u002Fneural-networks\u002Findex","RIjoOK4faAFco6cqQei2nH1bhWesb87V_2WNWz55RCM",{"id":169,"title":170,"body":171,"cover":3,"description":189,"extension":31,"meta":190,"navigation":33,"order":191,"path":192,"seo":193,"status":37,"stem":194,"__hash__":195},"playlists\u002Fpt\u002Fplaylists\u002Fpapers\u002Findex.md","Artigos",{"type":9,"value":172,"toc":187},[173,176,179],[12,174,175],{},"As outras três playlists daqui são estudo de verdade: notebook de aula, livro-texto do lado, cada linha de código esmiuçada até doer. Essa aqui é outra vibe. De vez em quando eu leio um artigo ou survey que me deixa empolgado, geralmente na diagonal, sem ler cada página com lupa, e queria um lugar pra falar sobre ele sem toda a cerimônia de uma aula.",[12,177,178],{},"É isso que essa playlist é: eu conto o que achei mais maneiro do artigo, com metáfora torta, uma zoeira aqui e ali, e sempre que der, um código Python simples e um gráfico só pra dar aquela visão. Não espera rigor de notebook nem cobertura seção-por-seção, o objetivo aqui é papo reto sobre uma ideia interessante, não um resumo acadêmico.",[12,180,181,182,186],{},"Primeiro da série é sobre um assunto que não dá pra fugir hoje em dia: ",[53,183,185],{"href":184},"\u002Fplaylists\u002Fpapers\u002Fagentic-reasoning-for-large-language-models","raciocínio agêntico em modelos de linguagem",", um survey gigante que tenta organizar tudo que virou moda chamar de \"agente de IA\".",{"title":27,"searchDepth":28,"depth":28,"links":188},[],"Leitura diagonal de artigos e surveys que eu achei maneiros, sem a pretensão de virar aula. Código simples, gráfico pra dar uma visão, e a conversa de sempre com você.",{},4,"\u002Fpt\u002Fplaylists\u002Fpapers",{"title":170,"description":189},"pt\u002Fplaylists\u002Fpapers\u002Findex","vdbQsWX-nWs5oIGxtPjwUJoPdxwWZJza7ld2fNeGb0o",{"id":197,"title":198,"body":199,"cover":3,"description":230,"extension":31,"meta":231,"navigation":33,"order":232,"path":233,"seo":234,"status":37,"stem":235,"__hash__":236},"playlists\u002Fpt\u002Fplaylists\u002Fhow-to-build-and-finetune-slm\u002Findex.md","Modelos Pequenos de Linguagem",{"type":9,"value":200,"toc":228},[201,212,225],[12,202,203,204,211],{},"Essa playlist nasce de um livro, não de aula ao vivo nem de notebook de curso: ",[53,205,208],{"href":206,"rel":207},"https:\u002F\u002Fleanpub.com\u002Fhowtobuildandfine-tuneasmalllanguagemodel",[78],[67,209,210],{},"How to Build and Fine-Tune a Small Language Model",", do J. Paul Liu. É um livro enxuto, mais um roteiro de projeto prático com código do que um tijolo teórico, e isso é elogio: cada capítulo já vem com estimativa de custo em dólar, tempo de treino, hardware mínimo. Ver um livro de ML te dizer \"isso aqui custa 50 dólares e leva uma hora\" antes de te jogar num mar de matemática é raro, e eu queria puxar esse fio com você.",[12,213,214,215,219,220,224],{},"O plano do livro inteiro é ambicioso, 12 capítulos que vão de \"por que treinar seu próprio modelo\" até deploy em produção com ética e tudo. Por enquanto eu tô cobrindo os dois primeiros: o ",[53,216,218],{"href":217},"\u002Fplaylists\u002Fhow-to-build-and-finetune-slm\u002Fsmall-vs-giant-language-models","Capítulo 1",", que é a fundamentação de por que um modelo pequeno especializado ganha de um gigante generalista em boa parte dos casos reais, e o ",[53,221,223],{"href":222},"\u002Fplaylists\u002Fhow-to-build-and-finetune-slm\u002Fbuilding-gpt-from-scratch-dom-casmurro","Capítulo 2",", que constrói um GPT character-level do zero, o mesmo exercício clássico do vídeo \"Let's Build GPT\" do Andrej Karpathy (o próprio livro credita isso, sem rodeio). Se render post sobre os capítulos seguintes eu volto aqui, mas por ora é isso.",[12,226,227],{},"Um detalhe engraçado antes de começar: o sumário do livro abre com uma seção chamada \"AI Use Disclaimer\". Ou seja, o autor usou IA pra ajudar a escrever um livro ensinando você a construir IA, e eu uso o tio Claudinho pra escrever esse blog sobre o livro. É IA até debaixo d'água, mas pelo menos ninguém aqui tá fingindo o contrário.",{"title":27,"searchDepth":28,"depth":28,"links":229},[],"Capítulo a capítulo do livro \"How to Build and Fine-Tune a Small Language Model\", do J. Paul Liu. Por que treinar seu próprio modelo em vez de terceirizar tudo pra API, e como montar um GPT do zero até ele imitar Machado de Assis.",{},5,"\u002Fpt\u002Fplaylists\u002Fhow-to-build-and-finetune-slm",{"title":198,"description":230},"pt\u002Fplaylists\u002Fhow-to-build-and-finetune-slm\u002Findex","_exzbaqHjh6UlxGo74Puc6U-Cy4Z12bmsP9snCJ9OUo",[238,440,2801],{"id":239,"title":240,"body":241,"cover":3,"date":427,"description":428,"extension":31,"meta":429,"navigation":33,"order":430,"path":431,"playlist":432,"seo":433,"status":37,"stem":434,"tags":435,"__hash__":439},"posts\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fcourse-wrap-up.md","Do Primeiro wx+b até Aqui: Fechando o Curso",{"type":9,"value":242,"toc":421},[243,259,264,271,357,364,368,387,391,398,410,414],[12,244,245,246,249,250,254,255,258],{},"Vinte posts atrás, ",[53,247,248],{"href":86},"o primeiro lab dessa playlist"," era só isso: ",[251,252,253],"code",{},"f(x) = wx + b",", o modelo mais simples que existe. Terminei agora o primeiro curso da especialização, ",[16,256,257],{},"Supervised Machine Learning: Regression and Classification",", e antes de seguir pro próximo, vale parar e olhar pra trás: o que realmente ficou de pé de tudo isso?",[260,261,263],"h2",{"id":262},"o-fio-que-atravessa-a-playlist-inteira","O fio que atravessa a playlist inteira",[12,265,266,267,270],{},"Se tem uma coisa que eu não esperava quando comecei, é o quanto ",[16,268,269],{},"pouca coisa nova"," eu realmente precisei aprender depois do meio do curso. Repara no padrão:",[272,273,274,299,323,341],"ul",{},[275,276,277,280,281,285,286,290,291,294,295,298],"li",{},[16,278,279],{},"Gradiente descendente"," apareceu ",[53,282,284],{"href":283},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Flab04-gradient-descent","pela primeira vez pra regressão linear",", e quando ",[53,287,289],{"href":288},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent","voltou pra classificação",", o loop era ",[16,292,293],{},"byte a byte o mesmo",". Só a derivada de dentro mudou, porque ",[251,296,297],{},"f"," trocou de reta pra sigmoide.",[275,300,301,304,305,308,309,312,313,317,318,322],{},[16,302,303],{},"Features polinomiais",", o truque de tratar ",[251,306,307],{},"x²",", ",[251,310,311],{},"x³"," como se fossem variáveis novas, apareceu ",[53,314,316],{"href":315},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw2-lab04-feature-engineering","na regressão"," e voltou, sem mudar a ideia central, ",[53,319,321],{"href":320},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting","na classificação",", só que agora curvando uma fronteira de decisão em vez de uma curva de ajuste.",[275,324,325,328,329,332,333,336,337,340],{},[16,326,327],{},"Overfitting e regularização"," também não são conceitos exclusivos de um tipo de problema: ",[53,330,331],{"href":315},"a mesma decoreba que estraga uma curva de regressão"," estraga ",[53,334,335],{"href":320},"uma fronteira de classificação"," do mesmo jeito, e a mesma penalidade ",[251,338,339],{},"+ (lambda\u002F2m) * soma(w²)"," resolve os dois.",[275,342,343,346,347,351,352,356],{},[16,344,345],{},"O scikit-learn"," ficou esperando no fundo o tempo inteiro. Toda vez que eu terminava de construir alguma coisa à mão, o próximo lab mostrava a mesma coisa em três linhas, ",[53,348,350],{"href":349},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw2-lab05-scikit-learn","pra regressão"," e ",[53,353,355],{"href":354},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn","pra classificação",", sempre com aquele detalhe a mais (regularização por padrão) que só fazia sentido depois de eu já ter sentido a falta dela.",[12,358,359,360,363],{},"Isso muda como eu penso no curso inteiro: não foram \"regressão\" e \"classificação\" como dois assuntos separados, foi ",[16,361,362],{},"um conjunto pequeno de ferramentas"," (gradiente descendente, mapeamento de features, regularização) que eu vi funcionar em dois problemas diferentes. Aprender a ferramenta uma vez rendeu duas vezes.",[260,365,367],{"id":366},"o-que-eu-levo-desse-curso","O que eu levo desse curso",[12,369,370,371,375,376,351,379,382,383,386],{},"A regressão linear com uma variável parece brinquedo de tão simples, mas foi ali que apareceu toda a maquinaria que sustentou o resto: função de custo, derivada parcial, taxa de aprendizado, convergência. Quando a classificação chegou ",[53,372,374],{"href":373},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab01-classification","na Semana 3",", a única coisa genuinamente nova foi a sigmoide amassando a saída entre ",[251,377,378],{},"0",[251,380,381],{},"1",", tudo o mais era a mesma maquinaria rodando por baixo. E o curso termina exatamente onde eu esperava menos: ",[16,384,385],{},"overfitting não é bug, é o preço de dar flexibilidade demais pro modelo",", e regularização não é mágica, é só um jeito de dizer \"confia nos dados, mas não confia demais\".",[260,388,390],{"id":389},"o-certificado","O certificado",[12,392,393],{},[394,395],"img",{"alt":396,"src":397},"Certificado de conclusão do curso Supervised Machine Learning: Regression and Classification, emitido pela Coursera em nome de Pablo Matheus Sattamini Belmiro, DeepLearning.AI em parceria com Stanford Online, assinado por Andrew Ng","\u002Fimages\u002Fposts\u002Fmachine-learning-specialization\u002Fcourse-wrap-up\u002Fcertificado.jpg",[12,399,400,404,405],{},[53,401,403],{"href":402},"\u002Fdocuments\u002Fmachine-learning-specialization\u002Fcertificado.pdf","Baixar o PDF"," · ",[53,406,409],{"href":407,"rel":408},"https:\u002F\u002Fcoursera.org\u002Fverify\u002FSS92QX8BV68Q",[78],"Verificar na Coursera",[260,411,413],{"id":412},"e-agora","E agora",[12,415,416,417,420],{},"Essa playlist fecha aqui por enquanto, mas a especialização do Andrew Ng continua (Redes Neurais e Árvores de Decisão vêm no próximo curso, Aprendizado Não Supervisionado e Sistemas de Recomendação no terceiro). Se eu seguir estudando, tem post novo. Enquanto isso, valeu por acompanhar até aqui, ",[53,418,419],{"href":373},"desde a reta que não bastava pra classificar câncer de mama"," até a fronteira regularizada que fechou o curso.",{"title":27,"searchDepth":28,"depth":28,"links":422},[423,424,425,426],{"id":262,"depth":28,"text":263},{"id":366,"depth":28,"text":367},{"id":389,"depth":28,"text":390},{"id":412,"depth":28,"text":413},"2026-09-09","20 posts depois, o primeiro curso da especialização (Regressão e Classificação Supervisionada) acabou. Uma revisão do que ficou de pé, o certificado, e o que essa playlist me ensinou sobre reaproveitar a mesma ferramenta em vez de aprender uma nova a cada capítulo.",{},21,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fcourse-wrap-up","machine-learning-specialization",{"title":240,"description":428},"pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fcourse-wrap-up",[436,437,438],"revisao","regressao-linear","regressao-logistica","SmQYnDP-SdiD-8u2kVbifaVaAf0LUF2N1-1CyfjON88",{"id":441,"title":442,"body":443,"cover":3,"date":2790,"description":2791,"extension":31,"meta":2792,"navigation":33,"order":2793,"path":2794,"playlist":432,"seo":2795,"status":37,"stem":2796,"tags":2797,"__hash__":2800},"posts\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent.md","O Gradiente Descendente Não Precisou Aprender Nada de Novo",{"type":9,"value":444,"toc":2782},[445,467,471,1034,1046,2232,2253,2257,2350,2397,2407,2427,2442,2446,2513,2535,2542,2564,2575,2587,2594,2598,2609,2624,2639,2647,2654,2658,2711,2715,2731,2737,2778],[12,446,447,448,452,453,456,457,460,461,464,465,298],{},"Lá na Semana 1, gradiente descendente pra regressão linear era: calcula o gradiente, dá um passo, repete. ",[53,449,451],{"href":450},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab05-cost-function","O código dessa vez"," já tem sigmoide, fronteira de decisão, perda e custo logísticos prontos. Falta uma coisa: rodar gradiente descendente em cima desse custo novo pra achar o ",[251,454,455],{},"w"," e o ",[251,458,459],{},"b"," que minimizam ele. E aqui vem a parte satisfeita do capítulo: o loop que dá os passos é ",[16,462,463],{},"literalmente o mesmo",". Só a conta de dentro do loop (o gradiente) muda, porque ",[251,466,297],{},[260,468,470],{"id":469},"o-loop-não-muda-só-o-que-ele-deriva","O loop não muda, só o que ele deriva",[12,472,473],{},[474,475,478,598],"span",{"className":476},[477],"katex",[474,479,482],{"className":480},[481],"katex-mathml",[483,484,486],"math",{"xmlns":485},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[487,488,489,593],"semantics",{},[490,491,492,501,505,511,514,517,555,559,561,563,565,567,569],"mrow",{},[493,494,495,498],"msub",{},[496,497,455],"mi",{},[496,499,500],{},"j",[502,503,504],"mo",{},"=",[493,506,507,509],{},[496,508,455],{},[496,510,500],{},[502,512,513],{},"−",[496,515,516],{},"α",[518,519,520,545],"mfrac",{},[490,521,522,526,529,533,536,540,542],{},[496,523,525],{"mathvariant":524},"normal","∂",[496,527,528],{},"J",[502,530,532],{"stretchy":531},"false","(",[496,534,455],{"mathvariant":535},"bold",[502,537,539],{"separator":538},"true",",",[496,541,459],{},[502,543,544],{"stretchy":531},")",[490,546,547,549],{},[496,548,525],{"mathvariant":524},[493,550,551,553],{},[496,552,455],{},[496,554,500],{},[556,557],"mspace",{"width":558},"2em",[496,560,459],{},[502,562,504],{},[496,564,459],{},[502,566,513],{},[496,568,516],{},[518,570,571,587],{},[490,572,573,575,577,579,581,583,585],{},[496,574,525],{"mathvariant":524},[496,576,528],{},[502,578,532],{"stretchy":531},[496,580,455],{"mathvariant":535},[502,582,539],{"separator":538},[496,584,459],{},[502,586,544],{"stretchy":531},[490,588,589,591],{},[496,590,525],{"mathvariant":524},[496,592,459],{},[594,595,597],"annotation",{"encoding":596},"application\u002Fx-tex","w_j = w_j - \\alpha \\frac{\\partial J(\\mathbf{w},b)}{\\partial w_j} \\qquad b = b - \\alpha \\frac{\\partial J(\\mathbf{w},b)}{\\partial b}",[474,599,602,682,740,915,934],{"className":600,"ariaHidden":538},[601],"katex-html",[474,603,606,611,671,675,679],{"className":604},[605],"base",[474,607],{"className":608,"style":610},[609],"strut","height:0.7167em;vertical-align:-0.2861em;",[474,612,615,620],{"className":613},[614],"mord",[474,616,455],{"className":617,"style":619},[614,618],"mathnormal","margin-right:0.0269em;",[474,621,624],{"className":622},[623],"msupsub",[474,625,629,662],{"className":626},[627,628],"vlist-t","vlist-t2",[474,630,633,657],{"className":631},[632],"vlist-r",[474,634,638],{"className":635,"style":637},[636],"vlist","height:0.3117em;",[474,639,641,646],{"style":640},"top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;",[474,642],{"className":643,"style":645},[644],"pstrut","height:2.7em;",[474,647,653],{"className":648},[649,650,651,652],"sizing","reset-size6","size3","mtight",[474,654,500],{"className":655,"style":656},[614,618,652],"margin-right:0.0572em;",[474,658,661],{"className":659},[660],"vlist-s","​",[474,663,665],{"className":664},[632],[474,666,669],{"className":667,"style":668},[636],"height:0.2861em;",[474,670],{},[474,672],{"className":673,"style":674},[556],"margin-right:0.2778em;",[474,676,504],{"className":677},[678],"mrel",[474,680],{"className":681,"style":674},[556],[474,683,685,689,729,733,737],{"className":684},[605],[474,686],{"className":687,"style":688},[609],"height:0.8694em;vertical-align:-0.2861em;",[474,690,692,695],{"className":691},[614],[474,693,455],{"className":694,"style":619},[614,618],[474,696,698],{"className":697},[623],[474,699,701,721],{"className":700},[627,628],[474,702,704,718],{"className":703},[632],[474,705,707],{"className":706,"style":637},[636],[474,708,709,712],{"style":640},[474,710],{"className":711,"style":645},[644],[474,713,715],{"className":714},[649,650,651,652],[474,716,500],{"className":717,"style":656},[614,618,652],[474,719,661],{"className":720},[660],[474,722,724],{"className":723},[632],[474,725,727],{"className":726,"style":668},[636],[474,728],{},[474,730],{"className":731,"style":732},[556],"margin-right:0.2222em;",[474,734,513],{"className":735},[736],"mbin",[474,738],{"className":739,"style":732},[556],[474,741,743,747,751,899,903,906,909,912],{"className":742},[605],[474,744],{"className":745,"style":746},[609],"height:1.5523em;vertical-align:-0.5423em;",[474,748,516],{"className":749,"style":750},[614,618],"margin-right:0.0037em;",[474,752,754,759,896],{"className":753},[614],[474,755],{"className":756},[757,758],"mopen","nulldelimiter",[474,760,762],{"className":761},[518],[474,763,765,887],{"className":764},[627,628],[474,766,768,884],{"className":767},[632],[474,769,772,835,846],{"className":770,"style":771},[636],"height:1.01em;",[474,773,775,779],{"style":774},"top:-2.655em;",[474,776],{"className":777,"style":778},[644],"height:3em;",[474,780,782],{"className":781},[649,650,651,652],[474,783,785,789],{"className":784},[614,652],[474,786,525],{"className":787,"style":788},[614,652],"margin-right:0.0556em;",[474,790,792,795],{"className":791},[614,652],[474,793,455],{"className":794,"style":619},[614,618,652],[474,796,798],{"className":797},[623],[474,799,801,826],{"className":800},[627,628],[474,802,804,823],{"className":803},[632],[474,805,808],{"className":806,"style":807},[636],"height:0.3281em;",[474,809,811,815],{"style":810},"top:-2.357em;margin-left:-0.0269em;margin-right:0.0714em;",[474,812],{"className":813,"style":814},[644],"height:2.5em;",[474,816,820],{"className":817},[649,818,819,652],"reset-size3","size1",[474,821,500],{"className":822,"style":656},[614,618,652],[474,824,661],{"className":825},[660],[474,827,829],{"className":828},[632],[474,830,833],{"className":831,"style":832},[636],"height:0.2819em;",[474,834],{},[474,836,838,841],{"style":837},"top:-3.23em;",[474,839],{"className":840,"style":778},[644],[474,842],{"className":843,"style":845},[844],"frac-line","border-bottom-width:0.04em;",[474,847,849,852],{"style":848},"top:-3.485em;",[474,850],{"className":851,"style":778},[644],[474,853,855],{"className":854},[649,650,651,652],[474,856,858,861,865,868,873,877,880],{"className":857},[614,652],[474,859,525],{"className":860,"style":788},[614,652],[474,862,528],{"className":863,"style":864},[614,618,652],"margin-right:0.0962em;",[474,866,532],{"className":867},[757,652],[474,869,455],{"className":870,"style":872},[614,871,652],"mathbf","margin-right:0.016em;",[474,874,539],{"className":875},[876,652],"mpunct",[474,878,459],{"className":879},[614,618,652],[474,881,544],{"className":882},[883,652],"mclose",[474,885,661],{"className":886},[660],[474,888,890],{"className":889},[632],[474,891,894],{"className":892,"style":893},[636],"height:0.5423em;",[474,895],{},[474,897],{"className":898},[883,758],[474,900],{"className":901,"style":902},[556],"margin-right:2em;",[474,904,459],{"className":905},[614,618],[474,907],{"className":908,"style":674},[556],[474,910,504],{"className":911},[678],[474,913],{"className":914,"style":674},[556],[474,916,918,922,925,928,931],{"className":917},[605],[474,919],{"className":920,"style":921},[609],"height:0.7778em;vertical-align:-0.0833em;",[474,923,459],{"className":924},[614,618],[474,926],{"className":927,"style":732},[556],[474,929,513],{"className":930},[736],[474,932],{"className":933,"style":732},[556],[474,935,937,941,944],{"className":936},[605],[474,938],{"className":939,"style":940},[609],"height:1.355em;vertical-align:-0.345em;",[474,942,516],{"className":943,"style":750},[614,618],[474,945,947,950,1031],{"className":946},[614],[474,948],{"className":949},[757,758],[474,951,953],{"className":952},[518],[474,954,956,1022],{"className":955},[627,628],[474,957,959,1019],{"className":958},[632],[474,960,962,979,987],{"className":961,"style":771},[636],[474,963,964,967],{"style":774},[474,965],{"className":966,"style":778},[644],[474,968,970],{"className":969},[649,650,651,652],[474,971,973,976],{"className":972},[614,652],[474,974,525],{"className":975,"style":788},[614,652],[474,977,459],{"className":978},[614,618,652],[474,980,981,984],{"style":837},[474,982],{"className":983,"style":778},[644],[474,985],{"className":986,"style":845},[844],[474,988,989,992],{"style":848},[474,990],{"className":991,"style":778},[644],[474,993,995],{"className":994},[649,650,651,652],[474,996,998,1001,1004,1007,1010,1013,1016],{"className":997},[614,652],[474,999,525],{"className":1000,"style":788},[614,652],[474,1002,528],{"className":1003,"style":864},[614,618,652],[474,1005,532],{"className":1006},[757,652],[474,1008,455],{"className":1009,"style":872},[614,871,652],[474,1011,539],{"className":1012},[876,652],[474,1014,459],{"className":1015},[614,618,652],[474,1017,544],{"className":1018},[883,652],[474,1020,661],{"className":1021},[660],[474,1023,1025],{"className":1024},[632],[474,1026,1029],{"className":1027,"style":1028},[636],"height:0.345em;",[474,1030],{},[474,1032],{"className":1033},[883,758],[12,1035,1036,1037,1040,1041,351,1043,1045],{},"Essa é a receita de sempre: pega o gradiente, dá um passo do tamanho ",[251,1038,1039],{},"alpha"," na direção contrária (atualizando ",[251,1042,455],{},[251,1044,459],{}," ao mesmo tempo), repete até parar de melhorar. E as derivadas parciais também têm a mesma cara de sempre:",[12,1047,1048],{},[474,1049,1051,1289],{"className":1050},[477],[474,1052,1054],{"className":1053},[481],[483,1055,1056],{"xmlns":485},[487,1057,1058,1286],{},[490,1059,1060,1088,1090,1098,1121,1123,1135,1137,1151,1153,1155,1168,1170,1184,1186,1188,1212,1214,1220,1240,1242,1254,1256,1268,1270,1272,1284],{},[518,1061,1062,1078],{},[490,1063,1064,1066,1068,1070,1072,1074,1076],{},[496,1065,525],{"mathvariant":524},[496,1067,528],{},[502,1069,532],{"stretchy":531},[496,1071,455],{"mathvariant":535},[502,1073,539],{"separator":538},[496,1075,459],{},[502,1077,544],{"stretchy":531},[490,1079,1080,1082],{},[496,1081,525],{"mathvariant":524},[493,1083,1084,1086],{},[496,1085,455],{},[496,1087,500],{},[502,1089,504],{},[518,1091,1092,1095],{},[1093,1094,381],"mn",{},[496,1096,1097],{},"m",[1099,1100,1101,1104,1113],"msubsup",{},[502,1102,1103],{},"∑",[490,1105,1106,1109,1111],{},[496,1107,1108],{},"i",[502,1110,504],{},[1093,1112,378],{},[490,1114,1115,1117,1119],{},[496,1116,1097],{},[502,1118,513],{},[1093,1120,381],{},[502,1122,532],{"stretchy":531},[493,1124,1125,1127],{},[496,1126,297],{},[490,1128,1129,1131,1133],{},[496,1130,455],{"mathvariant":535},[502,1132,539],{"separator":538},[496,1134,459],{},[502,1136,532],{"stretchy":531},[1138,1139,1140,1143],"msup",{},[496,1141,1142],{"mathvariant":535},"x",[490,1144,1145,1147,1149],{},[502,1146,532],{"stretchy":531},[496,1148,1108],{},[502,1150,544],{"stretchy":531},[502,1152,544],{"stretchy":531},[502,1154,513],{},[1138,1156,1157,1160],{},[496,1158,1159],{},"y",[490,1161,1162,1164,1166],{},[502,1163,532],{"stretchy":531},[496,1165,1108],{},[502,1167,544],{"stretchy":531},[502,1169,544],{"stretchy":531},[1099,1171,1172,1174,1176],{},[496,1173,1142],{},[496,1175,500],{},[490,1177,1178,1180,1182],{},[502,1179,532],{"stretchy":531},[496,1181,1108],{},[502,1183,544],{"stretchy":531},[502,1185,539],{"separator":538},[556,1187],{"width":558},[518,1189,1190,1206],{},[490,1191,1192,1194,1196,1198,1200,1202,1204],{},[496,1193,525],{"mathvariant":524},[496,1195,528],{},[502,1197,532],{"stretchy":531},[496,1199,455],{"mathvariant":535},[502,1201,539],{"separator":538},[496,1203,459],{},[502,1205,544],{"stretchy":531},[490,1207,1208,1210],{},[496,1209,525],{"mathvariant":524},[496,1211,459],{},[502,1213,504],{},[518,1215,1216,1218],{},[1093,1217,381],{},[496,1219,1097],{},[1099,1221,1222,1224,1232],{},[502,1223,1103],{},[490,1225,1226,1228,1230],{},[496,1227,1108],{},[502,1229,504],{},[1093,1231,378],{},[490,1233,1234,1236,1238],{},[496,1235,1097],{},[502,1237,513],{},[1093,1239,381],{},[502,1241,532],{"stretchy":531},[493,1243,1244,1246],{},[496,1245,297],{},[490,1247,1248,1250,1252],{},[496,1249,455],{"mathvariant":535},[502,1251,539],{"separator":538},[496,1253,459],{},[502,1255,532],{"stretchy":531},[1138,1257,1258,1260],{},[496,1259,1142],{"mathvariant":535},[490,1261,1262,1264,1266],{},[502,1263,532],{"stretchy":531},[496,1265,1108],{},[502,1267,544],{"stretchy":531},[502,1269,544],{"stretchy":531},[502,1271,513],{},[1138,1273,1274,1276],{},[496,1275,1159],{},[490,1277,1278,1280,1282],{},[502,1279,532],{"stretchy":531},[496,1281,1108],{},[502,1283,544],{"stretchy":531},[502,1285,544],{"stretchy":531},[594,1287,1288],{"encoding":596},"\\frac{\\partial J(\\mathbf{w},b)}{\\partial w_j}  = \\frac{1}{m} \\sum\\limits_{i = 0}^{m-1} (f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) - y^{(i)})x_{j}^{(i)}, \\qquad \\frac{\\partial J(\\mathbf{w},b)}{\\partial b}  = \\frac{1}{m} \\sum\\limits_{i = 0}^{m-1} (f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) - y^{(i)})",[474,1290,1292,1433,1706,1929,2184],{"className":1291,"ariaHidden":538},[601],[474,1293,1295,1298,1424,1427,1430],{"className":1294},[605],[474,1296],{"className":1297,"style":746},[609],[474,1299,1301,1304,1421],{"className":1300},[614],[474,1302],{"className":1303},[757,758],[474,1305,1307],{"className":1306},[518],[474,1308,1310,1413],{"className":1309},[627,628],[474,1311,1313,1410],{"className":1312},[632],[474,1314,1316,1370,1378],{"className":1315,"style":771},[636],[474,1317,1318,1321],{"style":774},[474,1319],{"className":1320,"style":778},[644],[474,1322,1324],{"className":1323},[649,650,651,652],[474,1325,1327,1330],{"className":1326},[614,652],[474,1328,525],{"className":1329,"style":788},[614,652],[474,1331,1333,1336],{"className":1332},[614,652],[474,1334,455],{"className":1335,"style":619},[614,618,652],[474,1337,1339],{"className":1338},[623],[474,1340,1342,1362],{"className":1341},[627,628],[474,1343,1345,1359],{"className":1344},[632],[474,1346,1348],{"className":1347,"style":807},[636],[474,1349,1350,1353],{"style":810},[474,1351],{"className":1352,"style":814},[644],[474,1354,1356],{"className":1355},[649,818,819,652],[474,1357,500],{"className":1358,"style":656},[614,618,652],[474,1360,661],{"className":1361},[660],[474,1363,1365],{"className":1364},[632],[474,1366,1368],{"className":1367,"style":832},[636],[474,1369],{},[474,1371,1372,1375],{"style":837},[474,1373],{"className":1374,"style":778},[644],[474,1376],{"className":1377,"style":845},[844],[474,1379,1380,1383],{"style":848},[474,1381],{"className":1382,"style":778},[644],[474,1384,1386],{"className":1385},[649,650,651,652],[474,1387,1389,1392,1395,1398,1401,1404,1407],{"className":1388},[614,652],[474,1390,525],{"className":1391,"style":788},[614,652],[474,1393,528],{"className":1394,"style":864},[614,618,652],[474,1396,532],{"className":1397},[757,652],[474,1399,455],{"className":1400,"style":872},[614,871,652],[474,1402,539],{"className":1403},[876,652],[474,1405,459],{"className":1406},[614,618,652],[474,1408,544],{"className":1409},[883,652],[474,1411,661],{"className":1412},[660],[474,1414,1416],{"className":1415},[632],[474,1417,1419],{"className":1418,"style":893},[636],[474,1420],{},[474,1422],{"className":1423},[883,758],[474,1425],{"className":1426,"style":674},[556],[474,1428,504],{"className":1429},[678],[474,1431],{"className":1432,"style":674},[556],[474,1434,1436,1440,1510,1514,1596,1599,1651,1654,1694,1697,1700,1703],{"className":1435},[605],[474,1437],{"className":1438,"style":1439},[609],"height:2.4788em;vertical-align:-0.9777em;",[474,1441,1443,1446,1507],{"className":1442},[614],[474,1444],{"className":1445},[757,758],[474,1447,1449],{"className":1448},[518],[474,1450,1452,1499],{"className":1451},[627,628],[474,1453,1455,1496],{"className":1454},[632],[474,1456,1459,1473,1481],{"className":1457,"style":1458},[636],"height:0.8451em;",[474,1460,1461,1464],{"style":774},[474,1462],{"className":1463,"style":778},[644],[474,1465,1467],{"className":1466},[649,650,651,652],[474,1468,1470],{"className":1469},[614,652],[474,1471,1097],{"className":1472},[614,618,652],[474,1474,1475,1478],{"style":837},[474,1476],{"className":1477,"style":778},[644],[474,1479],{"className":1480,"style":845},[844],[474,1482,1484,1487],{"style":1483},"top:-3.394em;",[474,1485],{"className":1486,"style":778},[644],[474,1488,1490],{"className":1489},[649,650,651,652],[474,1491,1493],{"className":1492},[614,652],[474,1494,381],{"className":1495},[614,652],[474,1497,661],{"className":1498},[660],[474,1500,1502],{"className":1501},[632],[474,1503,1505],{"className":1504,"style":1028},[636],[474,1506],{},[474,1508],{"className":1509},[883,758],[474,1511],{"className":1512,"style":1513},[556],"margin-right:0.1667em;",[474,1515,1519],{"className":1516},[1517,1518],"mop","op-limits",[474,1520,1522,1587],{"className":1521},[627,628],[474,1523,1525,1584],{"className":1524},[632],[474,1526,1529,1550,1563],{"className":1527,"style":1528},[636],"height:1.5011em;",[474,1530,1532,1535],{"style":1531},"top:-2.1223em;margin-left:0em;",[474,1533],{"className":1534,"style":778},[644],[474,1536,1538],{"className":1537},[649,650,651,652],[474,1539,1541,1544,1547],{"className":1540},[614,652],[474,1542,1108],{"className":1543},[614,618,652],[474,1545,504],{"className":1546},[678,652],[474,1548,378],{"className":1549},[614,652],[474,1551,1553,1556],{"style":1552},"top:-3em;",[474,1554],{"className":1555,"style":778},[644],[474,1557,1558],{},[474,1559,1103],{"className":1560},[1517,1561,1562],"op-symbol","small-op",[474,1564,1566,1569],{"style":1565},"top:-3.95em;margin-left:0em;",[474,1567],{"className":1568,"style":778},[644],[474,1570,1572],{"className":1571},[649,650,651,652],[474,1573,1575,1578,1581],{"className":1574},[614,652],[474,1576,1097],{"className":1577},[614,618,652],[474,1579,513],{"className":1580},[736,652],[474,1582,381],{"className":1583},[614,652],[474,1585,661],{"className":1586},[660],[474,1588,1590],{"className":1589},[632],[474,1591,1594],{"className":1592,"style":1593},[636],"height:0.9777em;",[474,1595],{},[474,1597,532],{"className":1598},[757],[474,1600,1602,1606],{"className":1601},[614],[474,1603,297],{"className":1604,"style":1605},[614,618],"margin-right:0.1076em;",[474,1607,1609],{"className":1608},[623],[474,1610,1612,1643],{"className":1611},[627,628],[474,1613,1615,1640],{"className":1614},[632],[474,1616,1619],{"className":1617,"style":1618},[636],"height:0.3361em;",[474,1620,1622,1625],{"style":1621},"top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;",[474,1623],{"className":1624,"style":645},[644],[474,1626,1628],{"className":1627},[649,650,651,652],[474,1629,1631,1634,1637],{"className":1630},[614,652],[474,1632,455],{"className":1633,"style":872},[614,871,652],[474,1635,539],{"className":1636},[876,652],[474,1638,459],{"className":1639},[614,618,652],[474,1641,661],{"className":1642},[660],[474,1644,1646],{"className":1645},[632],[474,1647,1649],{"className":1648,"style":668},[636],[474,1650],{},[474,1652,532],{"className":1653},[757],[474,1655,1657,1660],{"className":1656},[614],[474,1658,1142],{"className":1659},[614,871],[474,1661,1663],{"className":1662},[623],[474,1664,1666],{"className":1665},[627],[474,1667,1669],{"className":1668},[632],[474,1670,1673],{"className":1671,"style":1672},[636],"height:0.888em;",[474,1674,1676,1679],{"style":1675},"top:-3.063em;margin-right:0.05em;",[474,1677],{"className":1678,"style":645},[644],[474,1680,1682],{"className":1681},[649,650,651,652],[474,1683,1685,1688,1691],{"className":1684},[614,652],[474,1686,532],{"className":1687},[757,652],[474,1689,1108],{"className":1690},[614,618,652],[474,1692,544],{"className":1693},[883,652],[474,1695,544],{"className":1696},[883],[474,1698],{"className":1699,"style":732},[556],[474,1701,513],{"className":1702},[736],[474,1704],{"className":1705,"style":732},[556],[474,1707,1709,1713,1752,1755,1822,1825,1828,1831,1920,1923,1926],{"className":1708},[605],[474,1710],{"className":1711,"style":1712},[609],"height:1.4578em;vertical-align:-0.413em;",[474,1714,1716,1720],{"className":1715},[614],[474,1717,1159],{"className":1718,"style":1719},[614,618],"margin-right:0.0359em;",[474,1721,1723],{"className":1722},[623],[474,1724,1726],{"className":1725},[627],[474,1727,1729],{"className":1728},[632],[474,1730,1732],{"className":1731,"style":1672},[636],[474,1733,1734,1737],{"style":1675},[474,1735],{"className":1736,"style":645},[644],[474,1738,1740],{"className":1739},[649,650,651,652],[474,1741,1743,1746,1749],{"className":1742},[614,652],[474,1744,532],{"className":1745},[757,652],[474,1747,1108],{"className":1748},[614,618,652],[474,1750,544],{"className":1751},[883,652],[474,1753,544],{"className":1754},[883],[474,1756,1758,1761],{"className":1757},[614],[474,1759,1142],{"className":1760},[614,618],[474,1762,1764],{"className":1763},[623],[474,1765,1767,1813],{"className":1766},[627,628],[474,1768,1770,1810],{"className":1769},[632],[474,1771,1774,1789],{"className":1772,"style":1773},[636],"height:1.0448em;",[474,1775,1777,1780],{"style":1776},"top:-2.4231em;margin-left:0em;margin-right:0.05em;",[474,1778],{"className":1779,"style":645},[644],[474,1781,1783],{"className":1782},[649,650,651,652],[474,1784,1786],{"className":1785},[614,652],[474,1787,500],{"className":1788,"style":656},[614,618,652],[474,1790,1792,1795],{"style":1791},"top:-3.2198em;margin-right:0.05em;",[474,1793],{"className":1794,"style":645},[644],[474,1796,1798],{"className":1797},[649,650,651,652],[474,1799,1801,1804,1807],{"className":1800},[614,652],[474,1802,532],{"className":1803},[757,652],[474,1805,1108],{"className":1806},[614,618,652],[474,1808,544],{"className":1809},[883,652],[474,1811,661],{"className":1812},[660],[474,1814,1816],{"className":1815},[632],[474,1817,1820],{"className":1818,"style":1819},[636],"height:0.413em;",[474,1821],{},[474,1823,539],{"className":1824},[876],[474,1826],{"className":1827,"style":902},[556],[474,1829],{"className":1830,"style":1513},[556],[474,1832,1834,1837,1917],{"className":1833},[614],[474,1835],{"className":1836},[757,758],[474,1838,1840],{"className":1839},[518],[474,1841,1843,1909],{"className":1842},[627,628],[474,1844,1846,1906],{"className":1845},[632],[474,1847,1849,1866,1874],{"className":1848,"style":771},[636],[474,1850,1851,1854],{"style":774},[474,1852],{"className":1853,"style":778},[644],[474,1855,1857],{"className":1856},[649,650,651,652],[474,1858,1860,1863],{"className":1859},[614,652],[474,1861,525],{"className":1862,"style":788},[614,652],[474,1864,459],{"className":1865},[614,618,652],[474,1867,1868,1871],{"style":837},[474,1869],{"className":1870,"style":778},[644],[474,1872],{"className":1873,"style":845},[844],[474,1875,1876,1879],{"style":848},[474,1877],{"className":1878,"style":778},[644],[474,1880,1882],{"className":1881},[649,650,651,652],[474,1883,1885,1888,1891,1894,1897,1900,1903],{"className":1884},[614,652],[474,1886,525],{"className":1887,"style":788},[614,652],[474,1889,528],{"className":1890,"style":864},[614,618,652],[474,1892,532],{"className":1893},[757,652],[474,1895,455],{"className":1896,"style":872},[614,871,652],[474,1898,539],{"className":1899},[876,652],[474,1901,459],{"className":1902},[614,618,652],[474,1904,544],{"className":1905},[883,652],[474,1907,661],{"className":1908},[660],[474,1910,1912],{"className":1911},[632],[474,1913,1915],{"className":1914,"style":1028},[636],[474,1916],{},[474,1918],{"className":1919},[883,758],[474,1921],{"className":1922,"style":674},[556],[474,1924,504],{"className":1925},[678],[474,1927],{"className":1928,"style":674},[556],[474,1930,1932,1935,2003,2006,2079,2082,2131,2134,2172,2175,2178,2181],{"className":1931},[605],[474,1933],{"className":1934,"style":1439},[609],[474,1936,1938,1941,2000],{"className":1937},[614],[474,1939],{"className":1940},[757,758],[474,1942,1944],{"className":1943},[518],[474,1945,1947,1992],{"className":1946},[627,628],[474,1948,1950,1989],{"className":1949},[632],[474,1951,1953,1967,1975],{"className":1952,"style":1458},[636],[474,1954,1955,1958],{"style":774},[474,1956],{"className":1957,"style":778},[644],[474,1959,1961],{"className":1960},[649,650,651,652],[474,1962,1964],{"className":1963},[614,652],[474,1965,1097],{"className":1966},[614,618,652],[474,1968,1969,1972],{"style":837},[474,1970],{"className":1971,"style":778},[644],[474,1973],{"className":1974,"style":845},[844],[474,1976,1977,1980],{"style":1483},[474,1978],{"className":1979,"style":778},[644],[474,1981,1983],{"className":1982},[649,650,651,652],[474,1984,1986],{"className":1985},[614,652],[474,1987,381],{"className":1988},[614,652],[474,1990,661],{"className":1991},[660],[474,1993,1995],{"className":1994},[632],[474,1996,1998],{"className":1997,"style":1028},[636],[474,1999],{},[474,2001],{"className":2002},[883,758],[474,2004],{"className":2005,"style":1513},[556],[474,2007,2009],{"className":2008},[1517,1518],[474,2010,2012,2071],{"className":2011},[627,628],[474,2013,2015,2068],{"className":2014},[632],[474,2016,2018,2038,2048],{"className":2017,"style":1528},[636],[474,2019,2020,2023],{"style":1531},[474,2021],{"className":2022,"style":778},[644],[474,2024,2026],{"className":2025},[649,650,651,652],[474,2027,2029,2032,2035],{"className":2028},[614,652],[474,2030,1108],{"className":2031},[614,618,652],[474,2033,504],{"className":2034},[678,652],[474,2036,378],{"className":2037},[614,652],[474,2039,2040,2043],{"style":1552},[474,2041],{"className":2042,"style":778},[644],[474,2044,2045],{},[474,2046,1103],{"className":2047},[1517,1561,1562],[474,2049,2050,2053],{"style":1565},[474,2051],{"className":2052,"style":778},[644],[474,2054,2056],{"className":2055},[649,650,651,652],[474,2057,2059,2062,2065],{"className":2058},[614,652],[474,2060,1097],{"className":2061},[614,618,652],[474,2063,513],{"className":2064},[736,652],[474,2066,381],{"className":2067},[614,652],[474,2069,661],{"className":2070},[660],[474,2072,2074],{"className":2073},[632],[474,2075,2077],{"className":2076,"style":1593},[636],[474,2078],{},[474,2080,532],{"className":2081},[757],[474,2083,2085,2088],{"className":2084},[614],[474,2086,297],{"className":2087,"style":1605},[614,618],[474,2089,2091],{"className":2090},[623],[474,2092,2094,2123],{"className":2093},[627,628],[474,2095,2097,2120],{"className":2096},[632],[474,2098,2100],{"className":2099,"style":1618},[636],[474,2101,2102,2105],{"style":1621},[474,2103],{"className":2104,"style":645},[644],[474,2106,2108],{"className":2107},[649,650,651,652],[474,2109,2111,2114,2117],{"className":2110},[614,652],[474,2112,455],{"className":2113,"style":872},[614,871,652],[474,2115,539],{"className":2116},[876,652],[474,2118,459],{"className":2119},[614,618,652],[474,2121,661],{"className":2122},[660],[474,2124,2126],{"className":2125},[632],[474,2127,2129],{"className":2128,"style":668},[636],[474,2130],{},[474,2132,532],{"className":2133},[757],[474,2135,2137,2140],{"className":2136},[614],[474,2138,1142],{"className":2139},[614,871],[474,2141,2143],{"className":2142},[623],[474,2144,2146],{"className":2145},[627],[474,2147,2149],{"className":2148},[632],[474,2150,2152],{"className":2151,"style":1672},[636],[474,2153,2154,2157],{"style":1675},[474,2155],{"className":2156,"style":645},[644],[474,2158,2160],{"className":2159},[649,650,651,652],[474,2161,2163,2166,2169],{"className":2162},[614,652],[474,2164,532],{"className":2165},[757,652],[474,2167,1108],{"className":2168},[614,618,652],[474,2170,544],{"className":2171},[883,652],[474,2173,544],{"className":2174},[883],[474,2176],{"className":2177,"style":732},[556],[474,2179,513],{"className":2180},[736],[474,2182],{"className":2183,"style":732},[556],[474,2185,2187,2191,2229],{"className":2186},[605],[474,2188],{"className":2189,"style":2190},[609],"height:1.138em;vertical-align:-0.25em;",[474,2192,2194,2197],{"className":2193},[614],[474,2195,1159],{"className":2196,"style":1719},[614,618],[474,2198,2200],{"className":2199},[623],[474,2201,2203],{"className":2202},[627],[474,2204,2206],{"className":2205},[632],[474,2207,2209],{"className":2208,"style":1672},[636],[474,2210,2211,2214],{"style":1675},[474,2212],{"className":2213,"style":645},[644],[474,2215,2217],{"className":2216},[649,650,651,652],[474,2218,2220,2223,2226],{"className":2219},[614,652],[474,2221,532],{"className":2222},[757,652],[474,2224,1108],{"className":2225},[614,618,652],[474,2227,544],{"className":2228},[883,652],[474,2230,544],{"className":2231},[883],[12,2233,2234,2235,2238,2239,2241,2242,2245,2246,2249,2250,2252],{},"Se você olhar rápido, essa fórmula é indistinguível da de regressão linear. A pegadinha (boa) é que ela ",[16,2236,2237],{},"é igual",", byte a byte. O que muda é o que ",[251,2240,297],{}," significa: na regressão linear, ",[251,2243,2244],{},"f = w·x + b","; aqui, ",[251,2247,2248],{},"f = sigmoid(w·x + b)",". É essa troca, escondida dentro de ",[251,2251,297],{},", que faz o resto da conta se comportar diferente sem precisar reescrever uma linha da fórmula do gradiente.",[260,2254,2256],{"id":2255},"o-código-linha-a-linha","O código, linha a linha",[2258,2259,2263],"pre",{"className":2260,"code":2261,"language":2262,"meta":27,"style":27},"language-python shiki shiki-themes github-light github-dark","def compute_gradient_logistic(X, y, w, b):\n    m, n = X.shape\n    dj_dw = np.zeros((n,))\n    dj_db = 0.\n\n    for i in range(m):\n        f_wb_i = sigmoid(np.dot(X[i], w) + b)\n        err_i = f_wb_i - y[i]\n        for j in range(n):\n            dj_dw[j] = dj_dw[j] + err_i * X[i, j]\n        dj_db = dj_db + err_i\n    dj_dw = dj_dw \u002F m\n    dj_db = dj_db \u002F m\n\n    return dj_db, dj_dw\n","python",[251,2264,2265,2271,2276,2281,2286,2291,2297,2303,2309,2315,2321,2327,2333,2339,2344],{"__ignoreMap":27},[474,2266,2268],{"class":2267,"line":34},"line",[474,2269,2270],{},"def compute_gradient_logistic(X, y, w, b):\n",[474,2272,2273],{"class":2267,"line":28},[474,2274,2275],{},"    m, n = X.shape\n",[474,2277,2278],{"class":2267,"line":163},[474,2279,2280],{},"    dj_dw = np.zeros((n,))\n",[474,2282,2283],{"class":2267,"line":191},[474,2284,2285],{},"    dj_db = 0.\n",[474,2287,2288],{"class":2267,"line":232},[474,2289,2290],{"emptyLinePlaceholder":33},"\n",[474,2292,2294],{"class":2267,"line":2293},6,[474,2295,2296],{},"    for i in range(m):\n",[474,2298,2300],{"class":2267,"line":2299},7,[474,2301,2302],{},"        f_wb_i = sigmoid(np.dot(X[i], w) + b)\n",[474,2304,2306],{"class":2267,"line":2305},8,[474,2307,2308],{},"        err_i = f_wb_i - y[i]\n",[474,2310,2312],{"class":2267,"line":2311},9,[474,2313,2314],{},"        for j in range(n):\n",[474,2316,2318],{"class":2267,"line":2317},10,[474,2319,2320],{},"            dj_dw[j] = dj_dw[j] + err_i * X[i, j]\n",[474,2322,2324],{"class":2267,"line":2323},11,[474,2325,2326],{},"        dj_db = dj_db + err_i\n",[474,2328,2330],{"class":2267,"line":2329},12,[474,2331,2332],{},"    dj_dw = dj_dw \u002F m\n",[474,2334,2336],{"class":2267,"line":2335},13,[474,2337,2338],{},"    dj_db = dj_db \u002F m\n",[474,2340,2342],{"class":2267,"line":2341},14,[474,2343,2290],{"emptyLinePlaceholder":33},[474,2345,2347],{"class":2267,"line":2346},15,[474,2348,2349],{},"    return dj_db, dj_dw\n",[272,2351,2352,2363,2369,2384,2390],{},[275,2353,2354,2357,2358,2362],{},[251,2355,2356],{},"f_wb_i = sigmoid(...)",": ",[53,2359,2361],{"href":2360},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab03-decision-boundary","a mesma combinação linear de sempre",", espremida pela sigmoide pra virar probabilidade.",[275,2364,2365,2368],{},[251,2366,2367],{},"err_i = f_wb_i - y[i]",": o erro desse paciente, previsão menos rótulo real.",[275,2370,2371,2372,2375,2376,2379,2380,2383],{},"o ",[251,2373,2374],{},"for j"," interno multiplica esse erro por cada variável ",[251,2377,2378],{},"X[i,j]"," e acumula em ",[251,2381,2382],{},"dj_dw[j]",", a mesma mecânica de \"erro vezes entrada\" que a regressão linear já fazia.",[275,2385,2386,2389],{},[251,2387,2388],{},"dj_db"," acumula só o erro puro, sem multiplicar por nada, também igual à regressão linear.",[275,2391,2392,2393,2396],{},"no fim, os dois viram média (",[251,2394,2395],{},"\u002F m",").",[12,2398,2399,2400,308,2403,2406],{},"Conferindo com ",[251,2401,2402],{},"w=[2,3]",[251,2404,2405],{},"b=1"," no dataset de sempre:",[2258,2408,2410],{"className":2260,"code":2409,"language":2262,"meta":27,"style":27},"dj_db_tmp, dj_dw_tmp = compute_gradient_logistic(X_tmp, y_tmp, w_tmp, b_tmp)\nprint(f\"dj_db: {dj_db_tmp}\")\nprint(f\"dj_dw: {dj_dw_tmp.tolist()}\")\n",[251,2411,2412,2417,2422],{"__ignoreMap":27},[474,2413,2414],{"class":2267,"line":34},[474,2415,2416],{},"dj_db_tmp, dj_dw_tmp = compute_gradient_logistic(X_tmp, y_tmp, w_tmp, b_tmp)\n",[474,2418,2419],{"class":2267,"line":28},[474,2420,2421],{},"print(f\"dj_db: {dj_db_tmp}\")\n",[474,2423,2424],{"class":2267,"line":163},[474,2425,2426],{},"print(f\"dj_dw: {dj_dw_tmp.tolist()}\")\n",[2428,2429,2430],"blockquote",{},[12,2431,2432,2435,2436,404,2439],{},[16,2433,2434],{},"Saída:"," ",[251,2437,2438],{},"dj_db: 0.49861806546328574",[251,2440,2441],{},"dj_dw: [0.498333393278696, 0.49883942983996693]",[260,2443,2445],{"id":2444},"o-loop-de-fora-esse-sim-é-cópia-e-cola","O loop de fora, esse sim, é cópia e cola",[2258,2447,2449],{"className":2260,"code":2448,"language":2262,"meta":27,"style":27},"def gradient_descent(X, y, w_in, b_in, alpha, num_iters):\n    w = copy.deepcopy(w_in)\n    b = b_in\n\n    for i in range(num_iters):\n        dj_db, dj_dw = compute_gradient_logistic(X, y, w, b)\n        w = w - alpha * dj_dw\n        b = b - alpha * dj_db\n\n        if i % math.ceil(num_iters \u002F 10) == 0:\n            print(f\"Iteration {i:4d}: Cost {compute_cost_logistic(X, y, w, b)}\")\n\n    return w, b\n",[251,2450,2451,2456,2461,2466,2470,2475,2480,2485,2490,2494,2499,2504,2508],{"__ignoreMap":27},[474,2452,2453],{"class":2267,"line":34},[474,2454,2455],{},"def gradient_descent(X, y, w_in, b_in, alpha, num_iters):\n",[474,2457,2458],{"class":2267,"line":28},[474,2459,2460],{},"    w = copy.deepcopy(w_in)\n",[474,2462,2463],{"class":2267,"line":163},[474,2464,2465],{},"    b = b_in\n",[474,2467,2468],{"class":2267,"line":191},[474,2469,2290],{"emptyLinePlaceholder":33},[474,2471,2472],{"class":2267,"line":232},[474,2473,2474],{},"    for i in range(num_iters):\n",[474,2476,2477],{"class":2267,"line":2293},[474,2478,2479],{},"        dj_db, dj_dw = compute_gradient_logistic(X, y, w, b)\n",[474,2481,2482],{"class":2267,"line":2299},[474,2483,2484],{},"        w = w - alpha * dj_dw\n",[474,2486,2487],{"class":2267,"line":2305},[474,2488,2489],{},"        b = b - alpha * dj_db\n",[474,2491,2492],{"class":2267,"line":2311},[474,2493,2290],{"emptyLinePlaceholder":33},[474,2495,2496],{"class":2267,"line":2317},[474,2497,2498],{},"        if i % math.ceil(num_iters \u002F 10) == 0:\n",[474,2500,2501],{"class":2267,"line":2323},[474,2502,2503],{},"            print(f\"Iteration {i:4d}: Cost {compute_cost_logistic(X, y, w, b)}\")\n",[474,2505,2506],{"class":2267,"line":2329},[474,2507,2290],{"emptyLinePlaceholder":33},[474,2509,2510],{"class":2267,"line":2335},[474,2511,2512],{},"    return w, b\n",[12,2514,2515,2516,2435,2519,2522,2523,2526,2527,2530,2531,2534],{},"Compara com o ",[251,2517,2518],{},"gradient_descent",[53,2520,2521],{"href":283},"da Semana 1",": a única diferença de verdade é qual função de custo entra no ",[251,2524,2525],{},"print"," de acompanhamento. O ",[251,2528,2529],{},"for",", a atualização ",[251,2532,2533],{},"w = w - alpha * dj_dw",", tudo igual.",[12,2536,2537,2538,2541],{},"Rodando no dataset de seis pacientes de sempre, ",[251,2539,2540],{},"alpha=0.1",", 10 mil iterações:",[2428,2543,2544,2548,2556],{},[12,2545,2546],{},[16,2547,2434],{},[2258,2549,2554],{"className":2550,"code":2552,"language":2553},[2551],"language-text","Iteration    0: Cost 0.6846\nIteration 1000: Cost 0.1591\nIteration 2000: Cost 0.0846\nIteration 3000: Cost 0.0571\nIteration 4000: Cost 0.0429\nIteration 5000: Cost 0.0343\nIteration 6000: Cost 0.0286\nIteration 7000: Cost 0.0245\nIteration 8000: Cost 0.0214\nIteration 9000: Cost 0.0190\n","text",[251,2555,2552],{"__ignoreMap":27},[12,2557,2558,308,2561],{},[251,2559,2560],{},"w: [5.2812, 5.0782]",[251,2562,2563],{},"b: -14.2224",[12,2565,2566,2567,2570,2571,2574],{},"O custo despenca no começo (de ",[251,2568,2569],{},"0.68"," pra ",[251,2572,2573],{},"0.16"," só nas primeiras mil voltas) e depois vai afinando devagar, a mesma curva de \"aprende rápido no início, refina depois\" que já apareceu em toda superfície de custo convexa que treinamos até aqui.",[2576,2577],"classification-boundary-comparison-chart",{":boundaries":2578,":classes":2579,":points":2580,":x-max":2581,":x-min":378,":y-max":2582,":y-min":378,"negative-label":2583,"positive-label":2584,"x-label":2585,"y-label":2586},"[{\"w\":[5.2812,5.0782],\"bias\":-14.2224,\"label\":\"fronteira depois de 10k passos\"}]","[-1,-1,-1,1,1,1]","[[0.5,1.5],[1,1],[1.5,0.5],[3,0.5],[2,2],[1,2.5]]","4","3.5","y=0","y=1","x0","x1",[12,2588,2589,2590,2593],{},"A fronteira separa os seis pacientes sem errar nenhum, exatamente como ",[53,2591,2592],{"href":2360},"a versão treinada à mão que eu já tinha mostrado antes",", só que dessa vez eu vi o gradiente descendente chegar lá passo a passo, em vez de receber os pesos prontos.",[260,2595,2597],{"id":2596},"andando-morro-abaixo-ao-vivo","Andando morro abaixo, ao vivo",[12,2599,2600,2601,2604,2605,2608],{},"O dataset acima tem duas variáveis, então a superfície de custo mora num espaço de 4 dimensões (",[251,2602,2603],{},"w0, w1, b, custo",") que não dá pra desenhar. Pra ver gradiente descendente andando de verdade, volto pra um dataset de uma variável só, os mesmos seis pacientes ",[53,2606,2607],{"href":373},"do primeiro lab da semana",":",[2258,2610,2612],{"className":2260,"code":2611,"language":2262,"meta":27,"style":27},"x_train = np.array([0., 1, 2, 3, 4, 5])\ny_train = np.array([0,  0, 0, 1, 1, 1])\n",[251,2613,2614,2619],{"__ignoreMap":27},[474,2615,2616],{"class":2267,"line":34},[474,2617,2618],{},"x_train = np.array([0., 1, 2, 3, 4, 5])\n",[474,2620,2621],{"class":2267,"line":28},[474,2622,2623],{},"y_train = np.array([0,  0, 0, 1, 1, 1])\n",[12,2625,2626,2627,351,2629,2631,2632,2635,2636,2638],{},"Com só ",[251,2628,455],{},[251,2630,459],{},", o custo logístico vira uma superfície 3D de verdade, a mesma tigela convexa que ",[53,2633,2634],{"href":450},"o lab passado já tinha comparado contra a tentativa \"custo errado\""," (aquela, sim, cheia de vales falsos). Mexe no ",[251,2637,1039],{},", clica em \"Rodar\" e repara a bolinha vermelha descendo até o fundo, sempre pelo mesmo caminho que o formato convexo garante:",[2640,2641],"gradient-descent-simulator",{":b-range":2642,":w-range":2643,":x-train":2644,":y-train":2645,"b-label":459,"fn":2646,"w-label":455},"[-14,1]","[-1,7]","[0,1,2,3,4,5]","[0,0,0,1,1,1]","logistic",[12,2648,2649,2650,2653],{},"Repara que os controles são os mesmos que você já usou ",[53,2651,2652],{"href":283},"nos posts de regressão linear",": alpha, passo a passo, rodar em lote, trocar entre 2D\u002F3D\u002Fparábola. Gradiente descendente não fica mais esperto nem mais burro por trabalhar com um custo diferente, ele só desce a superfície que você entrega pra ele.",[260,2655,2657],{"id":2656},"fechando","Fechando",[2659,2660,2661,2675],"table",{},[2662,2663,2664],"thead",{},[2665,2666,2667,2672],"tr",{},[2668,2669,2671],"th",{"align":2670},"left","O que eu já sabia",[2668,2673,2674],{"align":2670},"O que essa aula assentou",[2676,2677,2678,2695,2703],"tbody",{},[2665,2679,2680,2689],{},[2681,2682,2683,2684,351,2686,2688],"td",{"align":2670},"Gradiente descendente atualiza ",[251,2685,455],{},[251,2687,459],{}," na direção contrária ao gradiente",[2681,2690,2691,2692,2694],{"align":2670},"A fórmula do gradiente é idêntica à da regressão linear, só que ",[251,2693,297],{}," agora é a sigmoide, não a reta",[2665,2696,2697,2700],{},[2681,2698,2699],{"align":2670},"O custo logístico é convexo",[2681,2701,2702],{"align":2670},"Isso garante que gradiente descendente sempre acha o mesmo fundo de vale, não importa de onde começa",[2665,2704,2705,2708],{},[2681,2706,2707],{"align":2670},"Eu via a fronteira treinada pronta",[2681,2709,2710],{"align":2670},"Agora eu vi ela nascer passo a passo, o mesmo loop que já rodou pra regressão linear",[260,2712,2714],{"id":2713},"aplicação-prática","Aplicação Prática",[12,2716,2717,2718,2722,2723,2726,2727,2730],{},"Reaproveito ",[53,2719,2721],{"href":2720},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab02-sigmoid-function","a mesma variável real que a playlist já vem usando"," (",[251,2724,2725],{},"worst concave points",", normalizada por z-score), agora com a amostra de 60 pacientes ",[53,2728,2729],{"href":2360},"do lab da fronteira de decisão",", e rodo o gradiente descendente eu mesmo em vez de receber os pesos prontos:",[2640,2732],{":b-range":2733,":w-range":2734,":x-train":2735,":y-train":2736,"b-label":459,"fn":2646,"w-label":455},"[-3,1]","[-1,6]","[-0.32,-0.488,1.029,-1.323,-1.107,0.028,1.357,-0.482,0.645,2.438,-0.216,0.423,0.592,-1.75,-0.581,-0.006,-0.409,2.699,0.097,2.365,0.635,1.917,-1.357,-0.144,1.455,0.537,-1.09,-0.456,-0.343,-0.464,-0.231,-1.29,-1.608,-0.191,0.42,-0.617,-0.135,-0.45,-1.015,-0.397,-0.473,1.894,0.495,-0.289,2.369,-1.004,2.196,-0.095,0.816,0.888,0.406,-0.785,-0.251,0.497,-1.385,-0.185,0.955,1.487,-0.842,0.986]","[1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1]",[12,2738,2739,2740,2743,2744,2747,2748,2751,2752,2755,2756,2759,2760,2765,2766,2769,2770,2773,2774,2777],{},"Rodando com ",[251,2741,2742],{},"alpha=0.5",", o custo cai de ",[251,2745,2746],{},"0.6931"," (a pior chute possível, ",[251,2749,2750],{},"-log(0.5)",") pra ",[251,2753,2754],{},"0.2372"," e converge por volta de ",[251,2757,2758],{},"w=4.175, b=-1.094",", valores bem parecidos com ",[53,2761,2371,2762],{"href":2720},[251,2763,2764],{},"w=3.9565, b=-1.1326"," que os labs anteriores citam pro conjunto de treino completo (essa amostra aqui é só 60 pacientes, o modelo cheio viu bem mais gente). Acurácia nessa amostra: ",[251,2767,2768],{},"0.90",", no mesmo patamar dos ",[251,2771,2772],{},"0.91","-",[251,2775,2776],{},"0.93"," que os labs anteriores já reportavam. O mesmo loop que rodou em cima de seis pontos de brinquedo, agora rodando em cima de pacientes reais, sem precisar mudar uma linha de código, só o dado que entra.",[2779,2780,2781],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":27,"searchDepth":28,"depth":28,"links":2783},[2784,2785,2786,2787,2788,2789],{"id":469,"depth":28,"text":470},{"id":2255,"depth":28,"text":2256},{"id":2444,"depth":28,"text":2445},{"id":2596,"depth":28,"text":2597},{"id":2656,"depth":28,"text":2657},{"id":2713,"depth":28,"text":2714},"2026-09-08","Semana 3, Lab 6: depois de sigmoide, fronteira de decisão, perda e custo logísticos, falta só uma peça pra treinar de verdade. E a notícia boa é que essa peça já existe desde a Semana 1: o mesmo loop de gradiente descendente, só que descendo um morro diferente.",{},17,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent",{"title":442,"description":2791},"pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent",[2798,438,2799],"classificacao","gradiente-descendente","Qpa6rnoMQ4TDnPzEeqNfsZ2AQUORP4tP9EMlm13SHVA",{"id":2802,"title":2803,"body":2804,"cover":3,"date":2790,"description":3068,"extension":31,"meta":3069,"navigation":33,"order":3070,"path":3071,"playlist":432,"seo":3072,"status":37,"stem":3073,"tags":3074,"__hash__":3076},"posts\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn.md","O Que Levou Seis Labs, o Scikit-Learn Faz em Três Linhas",{"type":9,"value":2805,"toc":3062},[2806,2813,2817,2841,2861,2876,2885,2894,2903,2909,2913,2916,2925,2934,2952,2954,2995,2997,3006,3030,3042,3060],[12,2807,2808,2809,2812],{},"Seis labs pra chegar até aqui: sigmoide, fronteira de decisão, perda logística, custo, gradiente descendente, tudo escrito à mão, fórmula por fórmula. Esse lab é o mais curto da semana, e é assim de propósito: mostrar que tudo isso ",[53,2810,2811],{"href":349},"já existe pronto"," numa biblioteca, exatamente como já vimos pro lado da regressão linear.",[260,2814,2816],{"id":2815},"o-código-inteiro","O código inteiro",[2258,2818,2820],{"className":2260,"code":2819,"language":2262,"meta":27,"style":27},"from sklearn.linear_model import LogisticRegression\n\nlr_model = LogisticRegression()\nlr_model.fit(X, y)\n",[251,2821,2822,2827,2831,2836],{"__ignoreMap":27},[474,2823,2824],{"class":2267,"line":34},[474,2825,2826],{},"from sklearn.linear_model import LogisticRegression\n",[474,2828,2829],{"class":2267,"line":28},[474,2830,2290],{"emptyLinePlaceholder":33},[474,2832,2833],{"class":2267,"line":163},[474,2834,2835],{},"lr_model = LogisticRegression()\n",[474,2837,2838],{"class":2267,"line":191},[474,2839,2840],{},"lr_model.fit(X, y)\n",[12,2842,2843,2846,2847,2850,2851,2854,2855,2854,2858,2860],{},[251,2844,2845],{},"LogisticRegression()"," cria o modelo, ",[251,2848,2849],{},".fit(X, y)"," treina ele. Sem escrever ",[251,2852,2853],{},"sigmoid",", sem escrever ",[251,2856,2857],{},"compute_gradient_logistic",[251,2859,2518],{},". Por baixo do capô, o sklearn faz todo o trabalho que os últimos seis labs destrincharam linha a linha.",[2258,2862,2864],{"className":2260,"code":2863,"language":2262,"meta":27,"style":27},"y_pred = lr_model.predict(X)\nprint(\"Previsão no conjunto de treino:\", y_pred)\n",[251,2865,2866,2871],{"__ignoreMap":27},[474,2867,2868],{"class":2267,"line":34},[474,2869,2870],{},"y_pred = lr_model.predict(X)\n",[474,2872,2873],{"class":2267,"line":28},[474,2874,2875],{},"print(\"Previsão no conjunto de treino:\", y_pred)\n",[2428,2877,2878],{},[12,2879,2880,2435,2882],{},[16,2881,2434],{},[251,2883,2884],{},"Previsão no conjunto de treino: [0 0 0 1 1 1]",[2258,2886,2888],{"className":2260,"code":2887,"language":2262,"meta":27,"style":27},"print(\"Acurácia no conjunto de treino:\", lr_model.score(X, y))\n",[251,2889,2890],{"__ignoreMap":27},[474,2891,2892],{"class":2267,"line":34},[474,2893,2887],{},[2428,2895,2896],{},[12,2897,2898,2435,2900],{},[16,2899,2434],{},[251,2901,2902],{},"Acurácia no conjunto de treino: 1.0",[12,2904,2905,2906,158],{},"No dataset de seis pacientes de sempre, acerta todo mundo. Nada surpreendente, ",[53,2907,2908],{"href":288},"a fronteira treinada à mão no lab passado já fazia isso",[260,2910,2912],{"id":2911},"o-detalhe-que-o-sklearn-esconde-por-enquanto","O detalhe que o sklearn esconde (por enquanto)",[12,2914,2915],{},"Se eu espiar os pesos que o sklearn achou:",[2258,2917,2919],{"className":2260,"code":2918,"language":2262,"meta":27,"style":27},"print(\"coeficientes:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\n",[251,2920,2921],{"__ignoreMap":27},[474,2922,2923],{"class":2267,"line":34},[474,2924,2918],{},[2428,2926,2927],{},[12,2928,2929,2435,2931],{},[16,2930,2434],{},[251,2932,2933],{},"coeficientes: [[0.9041 0.7359]] intercepto: [-2.3337]",[12,2935,2936,2937,2940,2941,2944,2945,2947,2948,2951],{},"Repara que esses números ",[16,2938,2939],{},"não batem"," com o ",[251,2942,2943],{},"w=[5.2812, 5.0782], b=-14.2224"," que o gradiente descendente puro achou no lab passado, mesmo os dois acertando os seis pacientes igual. Isso não é bug de ninguém: o ",[251,2946,2845],{}," do sklearn, por padrão, já vem com um freio embutido que penaliza pesos grandes demais (o assunto que fecha essa semana, regularização). Ele resolve um problema ",[16,2949,2950],{},"ligeiramente diferente"," do gradiente descendente cru que eu implementei, por isso o resultado é parecido na decisão final mas diferente nos números. Guarda esse estranhamento, ele vai fazer sentido completo daqui a dois labs.",[260,2953,2657],{"id":2656},[2659,2955,2956,2964],{},[2662,2957,2958],{},[2665,2959,2960,2962],{},[2668,2961,2671],{"align":2670},[2668,2963,2674],{"align":2670},[2676,2965,2966,2987],{},[2665,2967,2968,2971],{},[2681,2969,2970],{"align":2670},"Construí sigmoide, custo e gradiente descendente do zero",[2681,2972,2973,2974,2977,2978,2977,2981,308,2984],{"align":2670},"O sklearn empacota tudo isso em ",[251,2975,2976],{},"fit","\u002F",[251,2979,2980],{},"predict",[251,2982,2983],{},"score",[53,2985,2986],{"href":349},"igual já vimos pra regressão linear",[2665,2988,2989,2992],{},[2681,2990,2991],{"align":2670},"Os pesos que eu treinei à mão resolvem o problema sem penalidade nenhuma",[2681,2993,2994],{"align":2670},"Os pesos do sklearn são diferentes por padrão, porque ele já regulariza sem eu pedir",[260,2996,2714],{"id":2713},[12,2998,2999,3000,2722,3003,3005],{},"Mesmo dataset real ",[53,3001,3002],{"href":288},"do lab passado",[251,3004,2725],{},", amostra de 60 pacientes, normalizada por z-score):",[2258,3007,3009],{"className":2260,"code":3008,"language":2262,"meta":27,"style":27},"lr_model = LogisticRegression()\nlr_model.fit(X_train_z, y_train)\nprint(\"coeficiente:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\nprint(\"acurácia:\", lr_model.score(X_train_z, y_train))\n",[251,3010,3011,3015,3020,3025],{"__ignoreMap":27},[474,3012,3013],{"class":2267,"line":34},[474,3014,2835],{},[474,3016,3017],{"class":2267,"line":28},[474,3018,3019],{},"lr_model.fit(X_train_z, y_train)\n",[474,3021,3022],{"class":2267,"line":163},[474,3023,3024],{},"print(\"coeficiente:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\n",[474,3026,3027],{"class":2267,"line":191},[474,3028,3029],{},"print(\"acurácia:\", lr_model.score(X_train_z, y_train))\n",[2428,3031,3032],{},[12,3033,3034,2435,3036,404,3039],{},[16,3035,2434],{},[251,3037,3038],{},"coeficiente: [[2.4562]] intercepto: [-0.8278]",[251,3040,3041],{},"acurácia: 0.9",[12,3043,3044,3045,3047,3048,3051,3052,3055,3056,3059],{},"Mesma acurácia (",[251,3046,2768],{},") que o gradiente descendente puro achou nesse exato dataset, mas o coeficiente do sklearn (",[251,3049,3050],{},"2.4562",") é bem menor que o ",[251,3053,3054],{},"w≈4.175"," que ",[53,3057,3058],{"href":288},"rodei à mão",". Duas fronteiras diferentes, mesma decisão final nesses 60 pacientes: essa é a cara da regularização em ação, encolhendo o peso sem perder acurácia. Assunto de dois labs a partir daqui.",[2779,3061,2781],{},{"title":27,"searchDepth":28,"depth":28,"links":3063},[3064,3065,3066,3067],{"id":2815,"depth":28,"text":2816},{"id":2911,"depth":28,"text":2912},{"id":2656,"depth":28,"text":2657},{"id":2713,"depth":28,"text":2714},"Semana 3, Lab 7: sigmoide, fronteira de decisão, perda, custo e gradiente descendente, tudo escrito à mão nos últimos seis labs, vira import, fit, predict. E a comparação com o sklearn de verdade entrega um spoiler do próximo assunto da matéria.",{},18,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn",{"title":2803,"description":3068},"pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn",[2798,438,3075],"scikit-learn","da9CgMI3uM8we53ZWWhxyTTxFKnf7cxRB0_HqCD8hp4",[3078,3109,3138],{"id":3079,"title":3080,"body":3081,"date":3094,"description":3085,"extension":31,"meta":3095,"navigation":33,"path":3096,"photos":3097,"seo":3102,"status":37,"stem":3103,"tags":3104,"__hash__":3108},"timeline\u002Fpt\u002Ftimeline\u002F2026-08-28-vim-coursera-e-grafana-caseiro.md","Vim, Coursera e um Grafana caseiro",{"type":9,"value":3082,"toc":3092},[3083,3086,3089],[12,3084,3085],{},"Foto 1: voltei pro curso de Machine Learning Specialization do Andrew Ng no Coursera, dessa vez no módulo de regressão logística. Tava vendo a aula de fronteira de decisão, a função sigmoide g(z) = 1\u002F(1+e^-z) aplicada em cima de w·x + b. É matéria-prima pros próximos posts da playlist Machine Learning Specialization aqui do blog, então tô revendo com calma antes de trazer pra cá.",[12,3087,3088],{},"Foto 2: essa semana enjoei de ficar preso nas IDEs \"modernas\" e voltei pro LazyVim (Neovim com uma configuração pronta em cima). Monitor da esquerda com o código PHP\u002FLaravel de um projeto direto no terminal, monitor da direita com uma sessão do Claude Code rodando ao lado. Sinto falta do mouse de vez em quando, mas o ganho de velocidade editando texto compensa.",[12,3090,3091],{},"Fotos 3 e 4: montei um serviço de monitoramento caseiro pras VPS que administro. Cada servidor só tem SSH e MySQL\u002FPostgres rodando, nada instalado nele. Na minha máquina local um autossh mantém um túnel sempre aberto até a porta do banco de cada servidor, e um script collector.py por servidor entra via SSH (numa conexão multiplexada, sem abrir sessão nova a cada vez) de tempos em tempos pra rodar um top e checar se a porta do túnel responde, salvando CPU, memória, load e disponibilidade num SQLite próprio de cada servidor. O Grafana roda sempre ligado, em Docker com network_mode: host pra enxergar os túneis no loopback, lê esses SQLites pros dashboards históricos de sistema (foto 3), e também tem um datasource nativo de banco por servidor, apontando direto pro túnel, usado pros dashboards \"ao vivo\" tipo processlist do MySQL ou pg_stat_activity do Postgres (foto 4). Métrica de banco nunca passa pelo collector, quem consulta é o próprio Grafana direto através do túnel.",{"title":27,"searchDepth":28,"depth":28,"links":3093},[],"2026-08-28",{},"\u002Fpt\u002Ftimeline\u002F2026-08-28-vim-coursera-e-grafana-caseiro",[3098,3099,3100,3101],"\u002Fimages\u002Ftimeline\u002F20260828\u002F1.jpeg","\u002Fimages\u002Ftimeline\u002F20260828\u002F2.jpeg","\u002Fimages\u002Ftimeline\u002F20260828\u002F3.jpeg","\u002Fimages\u002Ftimeline\u002F20260828\u002F4.jpeg",{"title":3080,"description":3085},"pt\u002Ftimeline\u002F2026-08-28-vim-coursera-e-grafana-caseiro",[432,3105,3106,3107],"neovim","grafana","cotidiano","Rjg8G8CVfSeEeQcBbodtG64y1-5ZWjy5bOYk8GNU3TI",{"id":3110,"title":3111,"body":3112,"date":3125,"description":3116,"extension":31,"meta":3126,"navigation":33,"path":3127,"photos":3128,"seo":3132,"status":37,"stem":3133,"tags":3134,"__hash__":3137},"timeline\u002Fpt\u002Ftimeline\u002F2026-08-25-aula-redes-neurais-e-visita-chongqing.md","Do quadro do Boldt até uma visita lá de Chongqing",{"type":9,"value":3113,"toc":3123},[3114,3117,3120],[12,3115,3116],{},"Semana cheia por aqui. As duas primeiras fotos são da aula de Redes Neurais do Boldt, a matéria que devo virar playlist nova aqui no blog assim que tiver conteúdo suficiente pra virar posto. Na primeira ele tava derivando a equação normal do ADALINE no quadro: parte do custo quadrático médio (MSE), zera o gradiente e chega numa solução fechada usando pseudo-inversa, em vez de ficar iterando com gradiente descendente. Bonito ver a conta \"pura\" antes de virar código.",[12,3118,3119],{},"Na segunda deu pra flagrar um erro ao vivo, o próprio Boldt tentando plotar o hiperplano de decisão do perceptron e tomando um AttributeError na frente de todo mundo. Fica registrado que até professor apanha de matplotlib de vez em quando. No canto de baixo dá pra ver meu tablet aberto no notebook original do repositório dele no GitHub, acompanhando linha por linha.",[12,3121,3122],{},"Já a terceira foto é de outro dia: recebemos no IFES uma comitiva de duas universidades chinesas, a Chongqing University e a Chongqing Technology and Business University, numa palestra sobre parceria de pesquisa entre as instituições. Sala cheia, tradução simultânea, aquele clima de \"o mundo é pequeno\" mesmo.",{"title":27,"searchDepth":28,"depth":28,"links":3124},[],"2026-08-25",{},"\u002Fpt\u002Ftimeline\u002F2026-08-25-aula-redes-neurais-e-visita-chongqing",[3129,3130,3131],"\u002Fimages\u002Ftimeline\u002F20260825\u002Fifes_rnn_1.jpeg","\u002Fimages\u002Ftimeline\u002F20260825\u002Fifes_rnn_2.jpeg","\u002Fimages\u002Ftimeline\u002F20260825\u002Fifes_rnn_3.jpeg",{"title":3111,"description":3116},"pt\u002Ftimeline\u002F2026-08-25-aula-redes-neurais-e-visita-chongqing",[3135,3136,3107],"redes-neurais","ifes","OaQaoqKdPJ3CYWSvb2oYirLfWI9mTLP-2Z4i1f4W7X4",{"id":3139,"title":3140,"body":3141,"date":3161,"description":3162,"extension":31,"meta":3163,"navigation":33,"path":3164,"photos":3165,"seo":3170,"status":37,"stem":3171,"tags":3172,"__hash__":3175},"timeline\u002Fpt\u002Ftimeline\u002F2026-08-19-estudando-go.md","Tomando um sacode de Go",{"type":9,"value":3142,"toc":3159},[3143,3150,3153,3156],[12,3144,3145,3146,3149],{},"Ando estudando bastante Go essas últimas semanas, e não é força de expressão: peguei o livro ",[67,3147,3148],{},"A Linguagem de Programação Go"," (o clássico do Donovan e Kernighan) até na praia. Entre uma onda e outra, deu pra ler bastante coisa.",[12,3151,3152],{},"Tô tomando um sacode danado pra me adaptar ao \"way of Go\". Depois de anos acostumado com Python, a cabeça precisa reaprender um jeito de pensar bem mais explícito: erro tratado na mão em vez de exception, tipagem estática, concorrência que é parte da linguagem e não um framework por cima. Nada absurdo, só um jeito diferente de resolver o mesmo problema.",[12,3154,3155],{},"E o entusiasmo é grande. Tô sentindo bastante vontade de ir migrando pra Golang aos poucos, principalmente pela robustez: o compilador pega um monte de erro bobo antes mesmo de rodar, e a performance é de outro patamar. Infelizmente ainda falta bastante lib madura pro lado de Machine Learning e IA no ecossistema Go hoje, então não dá pra trocar tudo de uma vez. Mas acho que no longo prazo a linguagem tem tudo pra virar uma peça importante nessa área, principalmente pra servir modelo em produção.",[12,3157,3158],{},"E sim, o gato resolveu aparecer numa das fotos também. Ele não estuda Go comigo, só supervisiona.",{"title":27,"searchDepth":28,"depth":28,"links":3160},[],"2026-08-19","Ando estudando bastante Go essas últimas semanas, e não é força de expressão: peguei o livro A Linguagem de Programação Go (o clássico do Donovan e Kernighan) até na praia. Entre uma onda e outra, deu pra ler bastante coisa.",{},"\u002Fpt\u002Ftimeline\u002F2026-08-19-estudando-go",[3166,3167,3168,3169],"\u002Fimages\u002Ftimeline\u002F20260819\u002Fgolang_book.jpeg","\u002Fimages\u002Ftimeline\u002F20260819\u002Fgolang_cup.jpeg","\u002Fimages\u002Ftimeline\u002F20260819\u002Fgolang_learn.jpeg","\u002Fimages\u002Ftimeline\u002F20260819\u002Fmy_cat.jpeg",{"title":3140,"description":3162},"pt\u002Ftimeline\u002F2026-08-19-estudando-go",[3173,3174],"golang","go","miisWLO8OEtn3EfDAQ-2h-9V2pr1LKdz3pcO52hK9xI",1788965095502]