[Música] olá bem-vindos ao terceiro vídeo aula do curso de aprendizado profundo nós estamos finalizando a primeira semana do curso com apresentação dos principais frameworks é utilizados para o desenvolvimento dos modelos de aprendizado profundo então nessa aula nós vamos primeiro introduzir o que que são os frameworks é para que que eles servem Quais são suas principais vantagens para o desenvolvimento de modelos profundos algumas questões com relação ao custo computacional curso de desenvolvimento dentre outros na sequência nós vamos introduzir o que que são os gráficos computacionais que são utilizados como base desse frameworks para definição da estrutura
da rede oral que está sendo desenvolvida apresentar os principais frameworks definir detalhar mostrar exemplos de código de alguns deles e por fim é ilustrar como que a gente Poderia gerar uma regeneral simples tanto em que elas quanto em pytótipo vai ser dois frameworks ao longo dessa disciplina bom que que são os frameworks computacionais que eles definem pra gente em Alto Nível blocos como se fosse um bloco de Lego para montar redes neurais Profundas sem que necessariamente nós precisamos de maneira explícita codificar o que que é cada neurônio o que que é cada função de ativação
o que que é cada parte da rede então esses arcabouço eles vão fornecer pra gente rotinas blocos de tal forma que a gente possa compor esses blocos criando estruturas complexas sem necessariamente implementar detalhes do que que tá dentro de cada parte desses blocos de implementar cada um desses neurônios esses diversos modelos de redes então a gente não precisa implementar passo a passo os detalhes relacionados à rede natural a gente vai simplesmente compor as funções existentes algumas vantagens adicionais né primeiro o desenvolvedor quem tá fazendo a implementação do modelo de Regional se a gente pensar na
implementação monolítica utilizada especificamente do zero gerada a partir do zero prazo momento de uma rede neurônios precisarem considerar todos os passos todas as características todos os quilômetros é a questão de paralisação do modelo a utilização de GPU dentre outras características que poderiam dificultar bastante o desenvolvimento desse modelo já com a utilização dos frameworks basicamente tira isso do programador ou se a gente vai desenvolver em Alto Nível utilizando aqueles blocos definidos e todo acesso a GPU processo paralelização as derivações o algoritmo de propagação vão ser definidas de forma automática a partir da utilização desses blocos então
com isso a gente consegue com essa padronização com essa estrutura de blocos a gente consegue facilitar tanto reproveitamento de código quanto a criação de equipes e substituição de membros de equipes que trabalham com determinado Framework por exemplo só tem um grupo de cinco pessoas de repente um um dos Engenheiros um dos desenvolvedores daquele projeto específico sai do desenvolvimento eu consigo rapidamente repor aquela pessoa se essa pessoa que está sendo reposta possuir um conhecimento daquele Framework está sendo utilizado se a gente pensar que cada Engenheiro faz seu código de maneira própria maneira utilizando ferramentas específicas e
não um Framework estabelecido pela empresa por exemplo esse processo de substituição de um de um dado programador seria bem mais complicado é Outra vantagem grande maioria desses acabou-se eles possuem código aberto e possuem ou são feitos em linguagem Python ou possuem uma interface com a linguagem Python para que a gente possa criar um modelo de regeneral ou seja com catenara aqueles blocos em linguagem Python uma das limitações que a gente pode elencado utilização de frameworks é que eles podem se tornar mais lento mais lentos em comparação ao modelo que foi implementado de maneira monolítica ou
seja se eu criar um código do zero lá em linguagem C é para implementar uma rede Multilaser incorporar todas aspectos de Treinamento paralelizado uso de gpuse etc Possivelmente esse código vai ser mais rápido do que utilizar um Framework Mas claro que tem um custo de desenvolvimento muito superior quando a gente pensa na versão monolítica né então em resumo o que que os frameworks fornecem para a gente é rotinas de acesso ao hardware a GPU de maneira automática ou seja o cria um modelo Regional jogo essa região GPU Ela vai rodar na GPU sem que eu
preciso de maneira explícita É programar encuda programar em detalhes da paralisação na própria GPU acesso a camada padrão da região oral é gerenciamento do gráfico computacional que a gente vai ver na sequência rotinas para treinamento do modelo diversos algoritmos para treinamentos modelo a gente consegue parametrizar diversos algoritivos trocar parâmetros trocar características criar o nosso próprio algoritmo e colocar ele como sendo um novo bloco do nosso Framework implementação de diversos modelos combinação de modelos distintos rotinas para testes dos modelos a rotinas para inferência ou seja uma vez que o modelo tá treinado utilizar esse modelo para
fazer predição em cenários reais e também mecanismo de diferenciação ou derivação automática associado a propagação Então não preciso explicitamente calcular as derivadas utilizadas durante a fase de retropropagação o próprio modelo uma vez que eu defini as funções de ativação ele já faz essa diferenciação automática das funções consideradas bom que que são os gráficos computacionais Primeiro eles provém para a gente uma descrição funcional de uma rede neural basicamente ele vai definir a partir da entrada da rede como que acontece a computação passo a passo unidade unidade Até chegar na saída do modelo para isso a gente
vai ter duas dois tipos de vértices dentro desse gráfico Primeiro as variáveis que representam vértices que podem ser escalares vetores tensores Lembrando que tensores são vetores com múltiplas dimensões então tensor de ordem zero seriam escalar um tensor de ordem 1 seria um vetor sensor de ordem 2 seria uma atriz e assim sucessivamente e as respectivas operações também representadas por vértice então poderia pegar dois escalares somar dois escalares então teria dois escalares representados por vértice um outro vértice representando a soma Ou seja a operação aplicada sobre os dois escalares gerando uma saída do modelo e eles
podem ser utilizados para representar o fluxo de informação em dois tipos de duas formas de propagação tanto a propagação direta onde eu vou partir da entrada até a saída que a gente chama de propagação do sinal e a propagação inversa o reto propagação onde eu vou sair da saída do modelo e Reto propagar esse sinal pelo gráfico Até chegar na entrada com o objetivo de treinar esse modelo então o gráfico ele pode ser utilizado para essas duas rotinas tanto a propagação quanto reto propagação aqui um exemplo bastante simples de um gráfico computacional onde nós temos
aqui na base da árvore quatro escalares um representando a b e c e d e qual que é o nosso objetivo é utilizando esses escalares eu quero compor resolver essa equação onde eu tenho aqui o z vai ser igual a + B multiplicado por C menos Z Então como que deixa explícito no gráfico a gente vai criar uma variável x aqui que é nosso vértice de operação onde essa operação vai ser dada a partir da soma de A + B E esse valor vai ser atribuído ao versus que vai representar esse novo vértice aqui do
lado direito nós temos um vértice escalar de um escalar C um vértice de escalar d e Nós criamos uma nova variável Y que recebe a subtração de C menos Z aí uma vez utilizando a adição de a + b representada por x e a subtração de C menos D representada por y a gente consegue compor o valor de Z que a multiplicação dos dois sinais da do verbo ser anterior do gráfico então a gente consegue passo a passo definir como que aquela conta acontece isso vale tanto para um gráfico simples como esse daqui a um
gráfico com muitas neurônios com muitas camadas com 500 camadas de profundidade Ou seja a gente pode ter Graças bastante complexos é dado tipo de processamento que é realizado por cada neurônio e Dada quantidade de neurônios quantidade de camadas fluxo de informação que acontece na rede alguns exemplos de arcabouços de frameworks que são disponíveis na literatura nós temos uma variedade tensor Flow Cash o próprio matlab que é uma ferramenta paga mas desde a década de 90 é bastante utilizada para alimentação de redes sociais antes do Advento das redes Profundas ela gera bastante utilizadas para implementação dezenais
o cntk da Microsoft o Deep learn forjai o café teano dentre outros é importante destacar que alguns desses Framework já estão descontrados algumas empresas alguns grupos continuam utilizando Mas ele já não recebe mais atualizações como ter ano e o café dois eles foram basicamente incorporados por outros frameworks e Estão continuados eles não apresentam mais uma forma de atualização constante por outro lado o pai torte eu tenho sua flor eles podem se destacados aí como os dois principais frameworks é que nós temos na na literatura são utilizados tanto na indústria quanto em pesquisas dentro da academia
tá eu quero que na verdade nem é um Framework ele é uma interface é mais acessível para desenvolvimento de redes orais criadas sobre um Framework específico no caso a gente vai ver o próprio tensor então o que que eu quero como eu falei ele não necessariamente ele é um Framework ele é um api uma interface escrito em Python é criada sobre alguns frameworks ela foi inicialmente definida de maneira genérica que poderia ser utilizada tanto com o cnpk tensor Flow teano dentre outras porém a partir da versão 2.4 ela foi incorporada o tensor from e passou
a funcionar como interface apenas para esse esse Framework específico tá e qual que é a vantagem dessa dessa P aí para o desenvolvimento redes neurais como a gente vai ver nos códigos daqui a pouco a gente consegue criar modelos lesionais com poucas linhas de código e de maneira bastante facilitada então o objetivo deles é o seguinte é depilary for Yours ou seja aprendizado profundo para humanos eu não quero que o programador entra em detalhes no modelo de regeneral eu quero que ele implemente da forma mais alto nível possível quase como se tivesse escrevendo em português
ou seja cria uma rede com a primeira camada de 10 neurônios acrescente uma segunda camada de 20 neurônios e assim sucessivamente então uma vez que ela é uma interface bastante e bastante acessível ela a gente consegue desenvolver modelos de aprendizado de máquina profundo uma certa facilidade com uma certa rapidez utilizando essa interface tá o tensor Flow ele já foi desenvolvido lá pelo Google Brain em 2015 ele possui interface com várias linguagens não apenas Python mais Python Java c++ dentre outras ele possui diversas rotinas e implementação em baixo nível implementação em C e implementação em linguagens
eficientes c++ para tratamento das funções mais custosas tanto de propagação quanto reto propagação dos modelos ele foi o primeiro Framework é utilizar as tpus que são gpus específicas para o processamento paralelo de tensores multiplicações matriciais e ela trabalha na sua versão tradicional com gráficos estáticos ou seja antes de treinar antes de utilizar o modelo eu preciso estabelecer o gráfico eu não posso alterar o gráfico em tempo de treinamento em tempo de uso embora a gente pode utilizar o tensor fold para suportar para possibilitar a implementação de gráficos dinâmicos ele já foi desenvolvido pelo grupo de
ado Facebook lá em 2017 ele tem diversas versões também ele possui algumas características bastante importantes ela é fácil de ser usado não tão fácil como que eras como a gente vai ver ou seja ele é um Framework é assim de comprar qualquer de baixo nível Claro que ele é um primeiro de alto nível mas o que eras ele é altíssimo nível então ele acaba sendo mais complexo do que eu quero ele possui um uso bastante eficiente de memória ele consegue gerenciar a memória CPU de GPU associado a CPU associada da GPU de maneira bastante eficiente
ele é rápido em comparação ao que elas por exemplo Bora compatível com o tensor ele suporta gráficos dinâmicos Ou seja eu posso criar redes que ao longo do processo de propagação posso definir para esse padrão específico eu quero utilizar essa essa esse ramo de esse fluxo na rede não quero utilizar esse outro para um outro tipo de informação eu consigo utilizar um outro fluxo da rede a gente consegue definir o gráfico computacional é de maneira dinâmica e ele é bastante utilizado para pesquisa em contraponto ao tensor from que é mais utilizado na indústria embora as
diferenças não são tão significativas assim o pai do Arthur também é utilizado em indústria e o transtorno também muito utilizado na academia se a gente pensar de maneira geral em números tensor tende a ser mais utilizado na indústria e o pai do Art um pouco mais na academia mas como eu falei as duas ferramentas são bastante eficientes e permitem o desenvolvimento de redes complexas redes neurais bastante elaboradas aí é de maneira mais simples que uma implementação do zero aqui para ilustrar a como nós poderíamos implementar uma rede neural nesse primeiro momento bastante simplória apenas ilustrativa
Vamos considerar o conjunto de dados Iris que é um conjunto de dados de flores bastante utilizado na área de aprendizado de máquina ele é um data 7 pequeno conjunto pequeno com 150 exemplos cada exemplo ele é composto de quatro atributos que representa pra gente a largura e comprimento da pétala largura e comprimento da sépala dessas flores Iris e três classes nós temos três classes de flores eles Então qual o objetivo desse texto sete objetivo desse do modelo de aprendizado de máquina treinado com 707 é mapear cada exemplo formado por quatro atributos e uma das três
classes então para isso a gente vai definir topologias é uma topologia de rede neural Multilaser contendo quatro camadas que vai receber pra gente os quatro atributos e três neurônios da camada de saída que vão representar as três classes Então pensa em sair dela tem três neurônios binários 001 por exemplo indicando que aquele padrão da classe 3 ou 100 indicando o primeiro neurônio ativo segundo alternativo terceiro tativo representando que o problema da classe 1 e assim por diante e como camada o culto nós vamos utilizar uma camada primeira camada oculta com 20 neurônios e uma segunda
camada oculta com 10 neurônios eu vou implementar essa rede em dois duas formas distintas utilizando o que eras eu utilizando pythot para a gente fazer um comparativo das diferenças do desse Framework Lembrando que o que elas não é um Framework ele é uma interface É sobre o Framework Então tá aqui o que eras basicamente o modelo nosso tá aqui ó como eu falei o modelo bastante simples eu falo quero criar um modelo utilizando a bibliotecas abordagem sequencial que que é sequencial eu vou adicionando camada camada de acordo com a necessidade de modelo então vou lá
meu modelo eu adiciono uma camada densa com 20 neurônios e entrada de cada um desses neurônios vai ter o tamanho 4 que aquilo que a gente quer para tratar o deita 7 Ilhas Eu tenho quatro atributos então tem 20 neurônios que é alimentado por quatro entradas depois eu adiciono uma segunda camada com 10 minutos e por fim eu adiciono uma terceira camada com três neurônios claro que isso aqui é uma versão bastante simples desse processo de criação a gente poderia adicionar a cada um desses comandos outras informações por exemplo Qual que é o tipo de
função de ativação que eu tô utilizando existe regularização não existe regularização nessa rede a gente poderia agregar outras informações aqui eu só tô ilustrando uma forma bastante direta da gente experimentar uma rede com duas camadas ocultas quatro entradas 20 neurônios 10 neurônios e três neurônios da camada de saída essa mesma rede ela pode se implementada utilizando abordagem funcional Qual que é a ideia eu vou criar camada camada de maneira independente e vou concatenando essas camadas ao longo da criação então primeiro cria uma camada de entrada que é uma camada que era assim com quatro características
ou seja exatamente que a gente fez aqui em cima aí na sequência vou criar a segunda camada que é uma camada densa com 20 neurônios que recebe como entrada a camada de entrada depois eu vou criar uma camada 3 densa com 10 neurônios sobre a camada 2 ou seja com catenada a camada 2 por fim eu vou criar uma camada final de poodler também uma camada densa com três neurônios com catenadas sobre a camada 3 que essa camada anterior a mais que eu tenho essas camadas definidas eu vou criar um modelo para isso a gente
chama o que era esse modo que vai receber uma vai criar uma rede da entrada até a saída das camadas definidas então tu define que essa aqui é minha camada de entrada Se eu quisesse criar um modelo que vai dar entrada até a camada a layer 3 aqui que essa camada com 10 neurônios bastaria colocar o layer 3 aqui nessa nessa posição então a gente teria uma rede que agora em vez dela e dar entrada até a saída ela vai dar entrada e a saída da rede passa a ser essa camada com 10 Heróis o
comando com o pai o que que ele vai fazer ele vai preparar o modelo para o treinamento é que eu tô reformando ó eu vou utilizar o otimizador Adam e vou utilizar a função de custo de entropia cruzada categórica então ou seja bastante simples para a gente definir a estrutura do modelo como que a gente vai treinar nesse modelo se eu quiser ao invés de utilizar o otimizador Adam na sua forma padrão eu poderia utilizar essa outra função do que elas e definir parâmetros específicos esse algoritmo Ah eu quero utilizar a taxa de aprendizagem maior
menor do que a sua abordagem padrão então a gente poderia definir o otimizador e depois ao invés de passar o Adam como nós passamos aqui a gente passa o próprio otimizador criado nessa linha aqui tá bom aí uma vez que eu defini isso estabelecia o modelo eu posso treinar o modelo para isso a gente chama o comando Fit ou seja não preciso criar laço não preciso me preocupar com a execução das épocas eu só chamo o modo Fit passo a entrada e a saída desejada os parâmetros por exemplo número de época o tamanho do lote
se eu tô ou não embaralhando esses dados ao longo do processo treinamento e por fim o conjunto de validação que eu vou utilizar para verificar se o modelo tá tendo ou não Ou seja são poucas linhas de código nesse caso aqui só tem uma linha né só tá des membrada em várias para desenvolver o modelo para estabelecer o gráfico e para treinar o modelo quando a gente pensa no pythot já é um pouquinho mais elaborado a gente vai ter uma classe agora a gente vai definir uma classe específica com o modelo que a gente está
criando estabelecer o modelo camada camada especificando Qual que é a função de ativação então por exemplo tô falando eu tenho uma camada primeira camada linear que ela tem quatro entradas e é composta por 20 neurônios e a saída dela vai ser uma tangente parabólica na sequência eu tenho uma outra camada que recebe 20 entradas que são provenientes da camada anterior é um modelo sequencial com 10 neurônios por sua vez esses 10 neurônios alimenta uma vez que ele passou pela função tangente pebólica ele alimenta essa última camada que tem uma função de ativação do tipo sigmoide
e por fim eu tenho que definir a função four que vai definir como que a informação se propaga nesse gráfico definido aqui em cima então como eu falei esse gráfico poderia ser dinâmica Inclusive a gente poderia ter um folder que pode ir para um lado esquerdo no lado direito essa rede tiver é diversos caminhos por exemplo para treinar o modelo diferente do que elas onde eu tenho simplesmente aquela função Fit agora a gente vai ter que criar uma função um laço de Treinamento onde dentro desse laço de Treinamento eu vou definir para o número definido
de épocas eu vou ter que pegar o otimizador zerar os gradientes otimizador calcular a saída do modelo com base nas suas respectivas entradas calcular explicitamente a função de custo entre os resultados obtidos e os resultados desejados fazer a reto propagação do sinal e por fim aplicar o método de otimização ou seja corrigir os parâmetros de acordo com os gradientes calculados na fase backboard e para validação a mesma coisa a gente apresenta o conjunto de vedação para o modelo a gente tem um resultado de validação calcula los para validação e por fim a gente só mostra
os resultados obtidos ou seja ao invés de utilizar apenas aquele comando Fit eu preciso de maneira explícita definir passo a passo como que acontece o loop de Treinamento tá uma vez que eu defini então modelo e definir a o nosso conjunto treinamento a gente cria a definir aquela classe mlp Na verdade eu tô criando o modelo com base naquela classe MP definida tô falando que minha função de custo vai ser uma função erro quadrática médio otimizador vai ser um Adam por exemplo com algum parâmetro específico aí eu chamo o algoritmo de Treinamento passando otimizador função
de custo os dados de treino validação e assim por diante ou seja ele é mais flexível consigo é trabalhar características mais específicas do modelo porém ele acaba se tornando mais complexo do que eu quero tem uma comparação bastante alto nível aqui a gente tem que o que elas ele possui uma UTI de alto nível o tensor for alto e baixo o pai torte mais baixo nível quando a gente compara com elas né arquitetura do que eras ela é mais simples tanto do transferword elas são mais complexas em geral o que eras ele é bastante utilizado
para dentro certos menores não para Big Data já o tensor for e o pai do Art podem ser utilizados como base de dados grandes o processo de bugging ou seja encontrar erros desses desses frameworks no que elas é mais simples foi complexo no pyth ele é mais simples também tem diversas rotinas que auxiliam esse processo modelos treinados ou seja aqueles modelos que a gente pode utilizar Como transformar tem diversos modelos disponíveis em todas as plataformas velocidade que elas tende a ser mais lento possuem alta performance aquela linguagem de programação dos dois portanto atacar que o
lua ela foi utilizada para desenvolvimento Toddy que é a base do pai Toddy hoje em dia era utilizado bastante ser e pai então para o desenvolvimento é bom qual utilizar né Qual o Framework que a gente pode utilizar É uma questão bastante pessoal e depende muito da empresa que você vai trabalhar se a empresa exige o tensor frontal definido Você vai trabalhar que tem offlow sem empresa exige pai torch você vai trabalhar com Toddy Isso é uma questão pessoal é tanto faz tanto transfer show como parto eles fornecem todo tudo que é necessário para criação
de modelos profundos e num primeiro momento pode pensar e utilizar o que eras pensando no nível de abstração mais alto ou seja facilitar o processo de aprendizado dos modelos para depois pensar na confecção de modelos mas elaborados utilizando os frameworks padrões aqui bom o que que nós vimos nessa aula então Nós aprendemos compreendemos a importância dos frameworks para o desenvolvimento dos modelos de redes neurais Profundas e conhecemos alguns dos frameworks utilizados na literatura e ilustrando a especificamente no ano que vem a gente vai começar com modelos específicos trabalhar com as redes convolucionais conhecer os principais
modelos disponíveis na literatura e é isso agradeço a atenção de todos e até a próxima aula [Música] [Música]