Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Convoluções em Deep Learning - Aplicativo de demonstração interativo
Convoluções em Deep Learning - Aplicativo de demonstração interativo
Bem-vindo à demonstração do Steeplezer com Mandy. Neste episódio, exploraremos o aplicativo de demonstração de convolução interativa em deeplister.com para aprimorar nossa compreensão das operações de convolução usadas em redes neurais.
As operações de convolução são componentes cruciais em redes neurais convolucionais para mapear entradas para saídas usando filtros e uma janela deslizante. Temos um episódio dedicado que explica a operação de convolução e seu papel nas redes neurais para uma compreensão mais fundamental. Agora, vamos nos concentrar em como podemos utilizar o aplicativo de demonstração de convolução interativa em deeplister.com para aprofundar nossa compreensão dessa operação. Na página do aplicativo, vemos inicialmente a parte superior e, posteriormente, rolaremos para baixo para visualizar a parte inferior. O aplicativo de demonstração nos permite testemunhar a operação de convolução em ação em uma determinada entrada e observar como a saída é derivada. Temos várias opções para trabalhar na demonstração. Em primeiro lugar, podemos alternar entre o modo de tela cheia. Em segundo lugar, podemos selecionar o conjunto de dados e escolher o dígito com o qual queremos trabalhar, variando de 0 a 9, já que estamos usando MNIST.
Em camadas convolucionais de redes neurais, os valores do filtro são aprendidos durante o processo de treinamento para detectar vários padrões, como arestas, formas ou texturas. Nesta demonstração, podemos escolher entre diferentes conjuntos de filtros, como filtros de borda, para observar convoluções de exemplo. Para nosso primeiro exemplo, selecionaremos o filtro de borda esquerda para aplicá-lo a uma imagem de um dígito 9 do conjunto de dados MNIST. Ao configurar essas opções, estamos prontos para prosseguir com a demonstração. A imagem de entrada do dígito 9 é exibida, com cada pequeno quadrado representando um pixel e seu valor. Focamos em um bloco de pixels 3x3 e no filtro de borda esquerda selecionado. A operação de convolução envolve a multiplicação elementar dos valores de entrada e filtro, seguida pela soma para obter a saída final.
Ao passar o mouse sobre cada pixel, podemos observar a multiplicação acontecendo entre os valores de entrada e filtro. Depois de somar todos os produtos, armazenamos a saída resultante na parte inferior, representando a imagem inteira após a convolução. Ao clicar no botão de passo, movemos o bloco de entrada um pixel para a direita (passo de 1) e executamos a operação de convolução novamente. Este processo continua até chegarmos ao resultado final. Também podemos reproduzir a demonstração para automatizar essas operações e pausá-la para inspecionar pixels específicos.
A saída representa ativações positivas como pixels laranja ou vermelho, indicando bordas esquerdas detectadas pelo filtro. As ativações negativas são mostradas como pixels azuis, representando as bordas direitas. Uma função de ativação de valor é normalmente aplicada à saída da convolução, mantendo valores positivos e definindo valores negativos como zero. Ao passar o mouse sobre os valores de saída, podemos correlacioná-los com os valores de entrada e filtro correspondentes. A saída resultante é uma coleção de ativações positivas representando bordas esquerdas. Podemos reproduzir o resto da demonstração para ver o resultado final. Para demonstrar o efeito oposto, mudamos para um filtro de borda direita, que resulta na mesma saída com os pixels positivos e negativos trocados.
Como outro exemplo, mudamos para o conjunto de dados Fashion MNIST e selecionamos uma imagem de camiseta. Aplicando um filtro de borda "superior", podemos observar a detecção de bordas superiores e inferiores.
Sinta-se à vontade para explorar os vários exemplos na demonstração em deeplister.com para aprofundar sua compreensão das operações de convolução. Obrigado por assistir e considere conferir nosso segundo canal, "The Blizzard Vlog", no YouTube para mais conteúdo. Não se esqueça de visitar beeplezer.com para a postagem de blog correspondente e considere ingressar no Deep Blizzard Hive Mind para vantagens e recompensas exclusivas.
O que é Aprendizado Profundo? (DL 01)
O que é Aprendizado Profundo? (DL 01)
Bem-vindo ao aprendizado profundo! Meu nome é Bryce e estou ansioso para ajudá-lo a aprender sobre esse tema polêmico da ciência da computação. O aprendizado profundo está em toda parte em nossas vidas diárias. Os algoritmos que reconhecem seu rosto, entendem sua fala e recomendam conteúdo em sua plataforma favorita são todos baseados em aprendizado profundo.
Mas o que exatamente é aprendizagem profunda? Envolve o uso de redes neurais e programação diferenciável para aprendizado de máquina. As redes neurais são modelos computacionais inspirados no comportamento dos neurônios no cérebro. Eles consistem em nós que representam neurônios e arestas direcionadas que representam conexões entre eles, com cada aresta tendo um peso indicando sua força. Os neurônios podem somar as entradas ponderadas de seus vizinhos para determinar se eles são ativados.
O aprendizado de máquina, que se encontra na interseção da inteligência artificial e da ciência de dados, trata de fazer inferências inteligentes automaticamente a partir dos dados. Ao contrário da ciência da computação tradicional, onde os algoritmos são projetados para resolver problemas diretamente, o aprendizado de máquina permite que os exemplos de dados definam as entradas e saídas do problema. Em seguida, implementamos algoritmos que inferem a solução a partir do conjunto de dados.
Os problemas de aprendizado de máquina podem ser categorizados como regressão ou classificação. A regressão envolve inferir uma função que mapeia entradas contínuas para saídas contínuas, como a regressão linear. A classificação, por outro lado, atribui rótulos discretos a pontos de entrada, como inferir limites de decisão.
O aprendizado profundo nos permite resolver problemas complexos que combinam aspectos de regressão e classificação. Por exemplo, o reconhecimento de objetos envolve o aprendizado de uma função que recebe uma imagem como entrada e gera caixas delimitadoras e rótulos para objetos dentro da imagem.
Para treinar uma rede neural, usamos gradiente descendente, uma técnica que minimiza uma função seguindo seu gradiente. Isso requer diferenciar as ativações da rede neural. Funções de ativação como funções degrau não são adequadas para diferenciação, então usamos aproximações suaves como a função sigmoide.
Os princípios de treinamento de redes neurais e programação diferenciável vão além do aprendizado profundo. Podemos pensar nos neurônios como programas simples de computação que realizam somas ponderadas e aplicam funções de ativação. Isso leva ao conceito de programação diferenciável, onde funções que podem ser operadas matematicamente e diferenciadas podem ser incorporadas em modelos de aprendizado profundo.
Neste curso, começaremos com redes neurais simples para entender os fundamentos do aprendizado de máquina e da descida de gradiente estocástico. Adicionaremos complexidade gradualmente, explorando redes neurais profundas e programação diferenciável geral. Ao longo do caminho, praticaremos o uso de bibliotecas de aprendizado profundo, discutiremos limitações e desvantagens e prepararemos você para projetar, aplicar, avaliar e criticar modelos de aprendizado profundo para problemas do mundo real.
No final do semestre, você estará preparado para enfrentar desafios emocionantes com aprendizado profundo e terá uma compreensão abrangente de suas aplicações e implicações.
Pré-requisitos de Deep Learning (DL 02)
Pré-requisitos de Deep Learning (DL 02)
Para ter sucesso em um curso de aprendizado profundo, você precisa ter experiência em ciência da computação e matemática. Especificamente, você deve ter feito cursos de estruturas de dados, álgebra linear e cálculo multivariável. Vamos explorar a importância de cada um desses pré-requisitos com mais detalhes.
Ter um histórico de programação é crucial para este curso de graduação em ciência da computação de nível superior. As estruturas de dados servem como um pré-requisito para garantir que você tenha experiência de programação suficiente. Compreender conceitos relacionados à eficiência algorítmica encontrada em estruturas de dados também será útil.
Neste curso, meus vídeos usam principalmente pseudocódigo ou cálculos expressos matematicamente. No entanto, as atribuições exigirão programação em Python e Julia. O Python é amplamente usado para bibliotecas de aprendizagem profunda como TensorFlow e PyTorch, então você ganhará prática com essas ferramentas. Julia, por outro lado, é excelente para fazer a ponte entre a matemática e a computação, facilitando a compreensão do funcionamento interno das redes neurais.
Do ponto de vista matemático, utilizaremos conceitos de álgebra linear e cálculo multivariável. No entanto, os conceitos específicos nos quais focaremos são apenas uma fração do que normalmente é ensinado nesses cursos. Se você fez apenas um desses cursos, poderá aprender os conceitos necessários do outro com relativa rapidez.
Em álgebra linear, é essencial estar confortável com a notação matricial. O aprendizado profundo envolve operações em vetores, matrizes e matrizes de dimensão superior (tensores). Será necessário ser proficiente em produtos matriciais-vetoriais, aplicando funções a matrizes e vetores e operações como produtos escalares e normas.
O cálculo multivariável é crucial para a compreensão dos gradientes, um conceito-chave usado ao longo do curso. Você deve se sentir confortável avaliando gradientes e obtendo derivadas parciais usando regras aprendidas em cálculo básico, como a regra do produto e a regra do quociente.
Se você se sentir inseguro sobre seu conhecimento em álgebra linear ou cálculo multivariável, fornecerei uma lista de reprodução de vídeos de Grant Sanderson para ajudá-lo a aprimorar esses tópicos. Os vídeos destacados na lista de reprodução abrangem os conceitos específicos que usaremos no curso.
Ao garantir que você tenha uma sólida formação nesses assuntos de pré-requisito, você estará bem preparado para enfrentar as atividades e atribuições na primeira semana do curso e ter sucesso no aprendizado profundo.
O que um único neurônio pode computar? (DL 03)
O que um único neurônio pode computar? (DL 03)
As redes neurais consistem em numerosos nós com um grande número de conexões. Para entendê-los melhor, vamos nos concentrar em um neurônio individual e explorar suas capacidades, os tipos de modelos que ele pode representar e como esses modelos podem ser treinados.
Um nó em uma rede neural recebe entradas e executa uma computação simples para gerar uma saída numérica. Esse cálculo envolve dois estágios: primeiro, as entradas são multiplicadas pelos pesos correspondentes e somadas; então, a soma das entradas ponderadas passa por uma função de ativação para produzir a saída.
Matematicamente, a saída é obtida pela aplicação de uma função de ativação (denotada como f) à soma das entradas ponderadas. Assim, a saída é o resultado da aplicação da função de ativação à soma de cada peso multiplicado por sua entrada correspondente, mais um viés.
A polarização permite que a soma seja diferente de zero, mesmo que todas as entradas sejam zero. Podemos pensar no viés como outro peso e representá-lo com uma seta adicional entrando no nó. Cada neurônio executa uma soma ponderada sobre suas entradas, mas diferentes neurônios podem ter diferentes funções de ativação.
Para um único modelo de neurônio, duas funções de ativação notáveis são funções lineares e degrau. A função de ativação linear permite que o neurônio realize a regressão, enquanto a função degrau permite que ele execute a classificação.
No caso de um neurônio com uma única entrada, a soma ponderada das entradas é calculada multiplicando a entrada pelo peso e adicionando o viés. A função de ativação linear escolhida, y = x, nos permite expressar qualquer função linear de x1 usando os parâmetros peso (w1) e viés (b). Assim, este neurônio pode computar qualquer função linear com uma entrada unidimensional (x1) e uma saída unidimensional (y).
Se o neurônio tiver mais entradas, o mapeamento se estende para entradas multidimensionais, mas permanece uma função linear adequada para regressão. No entanto, visualizar a função torna-se um desafio à medida que a dimensão de entrada aumenta.
No caso de um neurônio com duas entradas, a função degrau é usada como ativação. A soma ponderada das entradas ainda é calculada e a ativação muda de zero para um quando a soma se torna positiva. A ativação pode ser descrita usando uma função por partes, e o limite de decisão entre as entradas resultando em uma saída 0 ou 1 é onde a soma ponderada das entradas é igual a zero. Esta configuração é adequada para tarefas de classificação, onde as entradas são rotuladas como 0 ou 1 com base na saída do neurônio.
Para executar a regressão ou classificação usando neurônios únicos, precisamos de um conjunto de dados que consiste em pares de entrada-saída. A função de ativação escolhida depende se a saída é binária (0 ou 1) ou contínua. A dimensionalidade dos exemplos de entrada determina o número de entradas e pesos no modelo de neurônio único.
O treinamento de uma rede neural ou de um único neurônio envolve a definição de uma função de perda que quantifica o desvio do modelo em relação aos dados. Para tarefas de regressão, a soma dos erros quadrados pode ser usada, enquanto tarefas de classificação com saídas binárias podem empregar outras funções de perda adequadas.
O objetivo do treinamento é atualizar os parâmetros (pesos e vieses) de forma a minimizar a perda e melhorar a precisão do modelo. A descida do gradiente é uma técnica de otimização comum usada para atualizar os parâmetros e reduzir a perda.
No próximo vídeo, vamos nos aprofundar no conceito de gradiente descendente e como ele facilita as atualizações de parâmetros para melhorar o desempenho do modelo.
Como treinar seu neurônio (DL 04)
Como treinar seu neurônio (DL 04)
Em nosso vídeo anterior, exploramos a computação de um único neurônio. Aprendemos que um neurônio calcula tomando uma soma ponderada de entradas, adicionando um viés e aplicando uma função de ativação. Usar uma função degrau para ativação nos dá um classificador binário, enquanto uma função linear nos dá um regressor.
Também discutimos a medição da perda de um modelo em seu conjunto de dados usando a soma dos erros quadrados e treinando o modelo usando o gradiente da função de perda. A função de perda depende dos parâmetros do modelo, nomeadamente dos pesos e do bias. O erro quadrático médio é comumente usado como uma função de perda em cálculos.
Para entender como a função de perda depende dos parâmetros e como podemos modificá-los para reduzir a perda, calculamos a perda em um pequeno conjunto de dados de regressão. Ao somar as diferenças quadradas entre as saídas corretas e previstas, obtivemos o valor da perda.
Em seguida, nos concentramos em encontrar o gradiente da função de perda. Derivamos as derivadas parciais da perda em relação a cada parâmetro. Essas derivadas parciais formam o gradiente, que nos orienta na diminuição da perda. Ao atualizar os parâmetros na direção oposta do gradiente, podemos minimizar a perda e melhorar a representação do nosso modelo do conjunto de dados.
Visualizamos a função de perda como uma superfície no espaço de parâmetros e discutimos como o gradiente indica a direção do aumento mais acentuado na perda. Ao dar pequenos passos na direção oposta do gradiente, podemos diminuir iterativamente a perda e refinar nosso modelo.
Para tarefas de classificação, encontramos um desafio ao calcular a derivada da ativação da função degrau. Para superar isso, substituímos a função degrau por uma aproximação suave chamada função sigmoide. Explicamos o comportamento da função sigmóide e sua capacidade de produzir saídas probabilísticas entre 0 e 1.
Aplicamos a função sigmóide a um exemplo de classificação e demonstramos como calcular a perda e o gradiente usando a nova ativação. O processo de atualização dos parâmetros e melhoria do modelo permanece o mesmo da regressão.
Por fim, enfatizamos que os conceitos discutidos podem ser estendidos para dimensões superiores aplicando as mesmas fórmulas a vários pesos e pontos de dados. Os princípios gerais de calcular a perda, calcular o gradiente e atualizar os parâmetros são válidos independentemente da dimensionalidade da entrada.
No geral, entender a computação de um único neurônio, a função de perda e o gradiente fornece a base para treinar redes neurais e melhorar seu desempenho.
O pipeline de análise de dados (DL 05)
O pipeline de análise de dados (DL 05)
Em nossa aula de aprendizado profundo, vamos nos aprofundar no estudo de redes neurais. No entanto, é importante lembrar que uma rede neural ou qualquer modelo de aprendizado de máquina é apenas uma parte de um sistema maior. Antes que os dados possam ser alimentados em uma rede neural, eles precisam ser coletados e processados em um formato que a rede possa entender. Da mesma forma, as saídas de uma rede neural geralmente requerem pós-processamento ou análise adicional.
Ao longo do semestre, será útil ter em mente a metáfora de um pipeline de análise de dados. Essa analogia enfatiza que nosso objetivo no aprendizado de máquina é transformar observações do mundo em previsões sobre o mundo, e a rede neural é apenas uma etapa desse processo. O pipeline nos lembra de considerar os estágios pelos quais nossos dados passam e como cada estágio contribui para o próximo.
Diferentes problemas requerem diferentes estágios no pipeline. Embora conjuntos de dados padronizados ou simulados possam nos permitir pular certos estágios, as aplicações de aprendizado profundo no mundo real exigem que consideremos os aspectos práticos da análise de dados.
Vamos discutir alguns aspectos importantes dos pipelines de análise de dados com mais detalhes. A primeira etapa é a coleta de dados. Embora conjuntos de dados pré-existentes possam ser usados em alguns casos, se quisermos resolver um novo problema com aprendizado profundo, devemos determinar quais dados são adequados para treinar nosso modelo. Ao coletar dados, precisamos garantir que tenhamos uma quantidade suficiente, considerando que os sucessos recentes do aprendizado profundo dependem de grandes conjuntos de dados. No entanto, também existe excesso de dados, especialmente quando os recursos computacionais são limitados. Em certos casos, trabalhar com uma quantidade limitada de dados pode ser benéfico, principalmente durante a exploração e descoberta de problemas. É crucial garantir que o conjunto de dados que usamos para treinamento seja representativo do problema que pretendemos resolver. Isso envolve considerar fatores como a representação de todas as classes desejadas em uma tarefa de classificação e não ignorar outliers importantes que o modelo deve reconhecer.
Outro desafio é identificar vieses sistemáticos em conjuntos de dados. Os vieses podem surgir de várias maneiras, como uma super-representação de imagens tiradas em dias ensolarados, levando a dificuldades para um classificador de imagens em condições nubladas. Os vieses também podem afetar as previsões relacionadas à saúde ou à educação, atribuindo fatores individuais a estruturas sociais mais amplas. É essencial estar atento a possíveis vieses durante a coleta de dados. No entanto, abordar e corrigir vieses é um problema complexo que requer pesquisas contínuas de aprendizado profundo.
Depois de coletar dados, muitas vezes precisamos limpá-los antes de aplicar aprendizado de máquina ou outras técnicas de processamento. Esta etapa envolve o tratamento de dados ausentes, decidindo quais dimensões dos dados são relevantes e lidando com diferentes dimensionalidades nos exemplos. A rotulagem adequada dos dados é crucial para o aprendizado supervisionado. A obtenção de rótulos apropriados pode ser desafiadora, principalmente ao transcrever a linguagem de sinais ou ao lidar com inconsistências de fala para texto. Os rótulos devem representar com precisão os aspectos dos dados que queremos que nosso modelo aprenda.
Em seguida, devemos transformar os dados em um formato numérico adequado para treinar nossa rede neural ou modelo de aprendizado de máquina. As redes neurais esperam entrada numérica na forma de vetores ou matrizes. O processo de codificação numérica varia em dificuldade, dependendo do problema. Por exemplo, o processamento de dados de imagem é relativamente direto devido à representação baseada em pixels já usada por computadores. No entanto, lidar com dados de texto codificados no formato ASCII requer representações alternativas. Transformar a representação de dados ou mesmo a dimensionalidade torna-se cada vez mais importante à medida que os problemas se tornam mais complexos.
Além disso, pode ser benéfico normalizar os dados, especialmente se as redes neurais tendem a gerar valores na faixa de zero a um. A normalização envolve dimensionar o intervalo de valores de dados, garantindo que as entradas para a rede neural estejam mais próximas. Após a saída da rede neural, podemos precisar executar etapas de pós-processamento. Isso inclui a decodificação da saída da rede no formato de previsão desejado, transmitindo a confiança da previsão e considerando o aplicativo ou algoritmo que usará as previsões do modelo.
Depois de processar os dados e treinar nossa rede neural, podemos passar para a etapa de avaliação e ajuste. É aqui que avaliamos o desempenho do nosso modelo e fazemos melhorias. A avaliação envolve o uso do conjunto de teste que separamos anteriormente. Ao aplicar a rede neural treinada a esses dados não vistos, podemos medir o quão bem ela generaliza para novos exemplos. Normalmente usamos métricas como exatidão, precisão, recall e pontuação F1 para avaliar o desempenho de nosso modelo. Essas métricas fornecem informações sobre a eficácia com que a rede neural está fazendo previsões.
Com base nos resultados da avaliação, podemos identificar áreas em que o modelo pode apresentar desempenho inferior ou apresentar limitações. Essas informações nos orientam a fazer os ajustes e melhorias necessários. Podemos iterar na arquitetura do modelo, hiperparâmetros ou até mesmo coletar dados adicionais, se necessário. O objetivo é refinar o desempenho do modelo e garantir que ele atinja a precisão e a confiabilidade desejadas.
Durante o processo de ajuste, experimentamos diferentes configurações e configurações para otimizar o desempenho do modelo. Isso inclui o ajuste de hiperparâmetros, como taxa de aprendizado, tamanho do lote e técnicas de regularização. Por meio de exploração e experimentação sistemáticas, pretendemos encontrar a melhor combinação de configurações que maximize a eficácia da rede neural.
Além de ajustar o próprio modelo, também consideramos o contexto mais amplo de sua aplicação. Levamos em conta o problema específico que estamos tentando resolver e as implicações do mundo real das previsões do modelo. Isso envolve examinar os aspectos sociais, éticos e legais da implantação do modelo na prática. É crucial garantir que o modelo seja justo, imparcial e alinhado com os valores e requisitos do domínio do problema.
Como praticantes de aprendizado profundo, nossa responsabilidade vai além do desenvolvimento de modelos precisos. Devemos analisar e interpretar criticamente os resultados, levando em consideração possíveis vieses ou limitações. Revisitar e reavaliar regularmente o desempenho do modelo é necessário para manter sua eficácia ao longo do tempo.
Estudar redes neurais em uma aula de aprendizado profundo envolve entender que elas fazem parte de um sistema maior. O pipeline de análise de dados, desde a coleta de dados até o pré-processamento, treinamento e avaliação, abrange vários estágios que requerem consideração cuidadosa. Ao estar atento a todo o processo e melhorar continuamente nossos modelos, podemos aproveitar efetivamente o poder do aprendizado profundo para fazer previsões precisas e resolver problemas do mundo real.
Validação fora da amostra (DL 06)
Validação fora da amostra (DL 06)
No aprendizado de máquina, avaliar um modelo envolve fazer novas previsões e testá-las em dados não vistos. Nesta discussão, exploraremos como usar efetivamente nossos dados para validar e melhorar nossos modelos de aprendizado de máquina.
O processo de seleção de modelos começa com a identificação das opções disponíveis para resolver um determinado problema. Isso nos leva ao conceito de espaço de hipóteses de um modelo, que define os tipos de funções que o modelo pode representar. O espaço de hipóteses é limitado por fatores como a representação de entrada escolhida e o tipo de saída requerido.
Depois de escolher um modelo específico ou algoritmo de aprendizado de máquina, há vários aspectos do modelo que podem ser ajustados. Isso inclui ajustar os parâmetros do modelo, como pesos e vieses, que são treinados usando os dados. Adicionalmente, outros aspectos, como a taxa de aprendizado ou número de iterações, podem ser considerados como hiperparâmetros que influenciam o desempenho do modelo.
Para explorar e testar diferentes opções de forma eficaz, contamos com a validação experimental. Isso envolve dividir nosso conjunto de dados em conjuntos de treinamento e teste. O conjunto de treinamento é usado para treinar o modelo, enquanto o conjunto de teste é usado para avaliar seu desempenho em dados não vistos. Ao comparar diferentes modelos ou hiperparâmetros no conjunto de teste, podemos determinar quais são mais eficazes na generalização para novos dados.
A generalização é um aspecto crítico do aprendizado de máquina, pois nosso objetivo é desenvolver modelos que possam fazer previsões precisas sobre dados novos e invisíveis. O overfitting, onde um modelo se torna muito específico para os dados de treinamento, é um desafio comum para alcançar uma boa generalização. Ao separar uma parte dos dados para validação fora da amostra, podemos avaliar se um modelo está superajustado ou generalizando com sucesso.
Ao explorar vários hiperparâmetros, podemos variar sistematicamente seus valores ou amostrar aleatoriamente de um intervalo plausível. A randomização nos permite explorar uma gama mais ampla de valores de forma eficiente. No entanto, se a experimentação extensiva levar ao superajuste do conjunto de teste, pode ser necessária uma separação adicional dos dados em conjuntos de treinamento, validação e teste ou o uso de validação cruzada.
A validação cruzada envolve dividir os dados em vários subconjuntos e treinar e testar iterativamente o modelo em diferentes combinações desses subconjuntos. Essa abordagem fornece uma estimativa mais robusta do desempenho do modelo e da capacidade de generalização.
A ideia-chave no aprendizado de máquina é validar experimentalmente nossos modelos, separando dados de treinamento e teste. Isso nos permite avaliar seu desempenho em exemplos não vistos e tomar decisões informadas sobre a seleção de modelos e o ajuste de hiperparâmetros.
Redes Neurais Feed-Forward (DL 07)
Redes Neurais Feed-Forward (DL 07)
As redes neurais, ao contrário dos neurônios individuais, consistem em várias camadas e realizam cálculos por meio de nós. Cada nó calcula a soma ponderada das entradas e aplica uma função de ativação. Em uma rede neural, a entrada de um nó pode vir de ativações de nó anteriores e sua ativação computada pode ser passada para nós posteriores.
Por exemplo, o neurônio 8 em uma rede recebe entradas dos neurônios 5, 6 e 7. A soma ponderada das entradas realizadas pelo neurônio 8 é a soma das ativações desses neurônios multiplicada pelos pesos correspondentes, mais o viés. A função de ativação é então aplicada à soma ponderada. A saída do neurônio 8 é usada como entrada para os nós 11 e 12. Diferentes funções de ativação podem ser usadas em uma rede neural, como a tangente hiperbólica e a unidade linear retificadora (ReLU).
Para realizar cálculos usando uma rede neural para fazer previsões, começamos definindo as ativações dos nós da camada de entrada com base nos dados de entrada. Os nós da camada de entrada simplesmente armazenam os valores do vetor de entrada. O tamanho das camadas de entrada e saída depende da dimensionalidade dos dados e da previsão desejada. Os neurônios ocultos na rede, organizados em camadas, realizam cálculos entre as entradas e saídas. Calculando as ativações para cada camada, podemos passar as entradas para a próxima camada, referenciando as ativações anteriores. Essas ativações também são necessárias para descida de gradiente durante atualizações de peso. A presença de camadas ocultas em uma rede neural fornece a capacidade de usar funções de ativação não lineares. As ativações lineares não oferecem nenhuma vantagem em redes multicamadas. As funções de ativação não lineares, como a função sigmóide, permitem a representação de várias funções.
Neurônios que representam operações lógicas como AND, OR e NOT podem ser construídos usando classificadores de função degrau. Ao aproximar essas operações lógicas usando ativações sigmoides, uma rede neural pode representar qualquer função booleana. Para treinar uma rede neural, usamos o gradiente descendente para atualizar os pesos e vieses. Os parâmetros da rede incluem todos os pesos e vieses de toda a rede. A função de perda em uma rede com vários neurônios de saída pode ser o erro quadrático médio somado em todos os neurônios de saída. O objetivo é reduzir a perda atualizando os parâmetros iterativamente.
A descida do gradiente é realizada calculando os gradientes da perda em relação aos parâmetros, dando passos na direção oposta dos gradientes para minimizar a perda. Esse processo é conhecido como retropropagação e permite que a rede aprenda e melhore suas previsões. No próximo vídeo, vamos nos aprofundar nos detalhes do algoritmo de retropropagação, que é usado para realizar atualizações de gradiente descendente em uma rede neural. A retropropagação permite o cálculo eficiente dos gradientes da perda em relação aos parâmetros da rede.
O processo começa calculando o gradiente da função de perda em relação às ativações de saída. Este gradiente representa a sensibilidade da perda a mudanças nas ativações de saída. Pode ser obtido aplicando a regra da cadeia, pois a perda depende das ativações da saída através da função de ativação e da diferença quadrada com os valores alvo. Uma vez que o gradiente da perda em relação às ativações de saída é calculado, ele é propagado para trás através da rede. Em cada camada, os gradientes são multiplicados pela derivada da função de ativação em relação à soma ponderada das entradas. Esta derivada captura a sensibilidade da ativação às mudanças na soma ponderada.
Ao propagar os gradientes para trás, podemos calcular os gradientes da perda em relação às ativações da camada anterior. Esses gradientes indicam o quanto cada ativação na camada anterior contribui para a perda. Usando os gradientes da perda em relação às ativações, podemos então calcular os gradientes da perda em relação aos pesos e bias em cada camada. Esses gradientes são obtidos multiplicando a ativação da camada anterior pelo gradiente correspondente da função de ativação. Finalmente, com os gradientes da perda em relação aos parâmetros, podemos atualizar os pesos e vieses usando o algoritmo de descida do gradiente. Ao dar passos na direção oposta aos gradientes, otimizamos gradativamente os parâmetros da rede para minimizar a perda.
Este processo iterativo de propagação para frente, propagação para trás e atualizações de parâmetros é repetido por um certo número de épocas ou até que a perda convirja para um valor satisfatório. Por meio desse processo de treinamento, a rede neural aprende a fazer previsões melhores ajustando seus pesos e vieses com base nos dados de treinamento fornecidos.
As redes neurais utilizam várias camadas e funções de ativação não lineares para realizar cálculos complexos e fazer previsões. Ao empregar o algoritmo de retropropagação e a descida do gradiente, as redes neurais podem aprender com os dados e otimizar seus parâmetros para melhorar suas capacidades preditivas.
Retropropagação de Rede Neural (DL 08)
Retropropagação de Rede Neural (DL 08)
Neste vídeo, derivaremos o algoritmo de retropropagação, que é usado para treinar uma rede neural por meio de uma etapa de descida de gradiente estocástico. O algoritmo consiste em três etapas principais.
Primeiro, realizamos uma passagem de feedforward para fazer previsões em um ponto de dados. Essas previsões determinam a perda, que representa o erro entre as saídas previstas e as saídas reais. Em seguida, realizamos uma passagem reversa para calcular as derivadas parciais da perda. Calculamos uma quantidade chamada "delta" para cada neurônio nas camadas de saída e oculta. Delta representa a derivada parcial da perda em relação à soma ponderada das entradas naquele neurônio. Aplicando a regra da cadeia, podemos calcular delta para cada neurônio considerando seu impacto na perda.
Para calcular delta para os neurônios da camada de saída, usamos a derivada da função de ativação e a diferença entre o alvo e a ativação. Este cálculo considera a relação entre a perda e a soma ponderada dos insumos. Para os neurônios da camada oculta, consideramos seu impacto nos neurônios da próxima camada e recursivamente calculamos o delta somando as contribuições dos nós da próxima camada, multiplicados pelos pesos e pela derivada de ativação. Uma vez calculados os deltas para todos os neurônios, podemos usá-los para calcular as derivadas parciais dos pesos e vieses.
A derivada parcial para cada peso é o produto do delta correspondente e a ativação do neurônio da camada anterior. Da mesma forma, a derivada parcial para cada viés é igual ao seu delta correspondente.
Para realizar a descida do gradiente, calculamos a média das derivadas parciais sobre um subconjunto dos pontos de dados, chamado de lote. Essa abordagem é conhecida como descida de gradiente estocástico. Ao atualizar os pesos e vieses com as derivadas parciais médias multiplicadas por uma taxa de aprendizado, movemos os parâmetros na direção que minimiza a perda.
Na prática, em vez de calcular os deltas e derivadas parciais para cada ponto de dados, geralmente usamos gradiente descendente estocástico com lotes aleatórios. Amostramos aleatoriamente um subconjunto dos dados, calculamos a perda média e seu gradiente nesse subconjunto e realizamos as atualizações de parâmetros de acordo. Isso acelera o processo de treinamento, especialmente para grandes conjuntos de dados.
O algoritmo de retropropagação combina passagens para frente e para trás para calcular os deltas e as derivadas parciais, que são então usadas para atualizações estocásticas do gradiente descendente. Ao atualizar iterativamente os parâmetros, a rede neural aprende a minimizar a perda e melhorar suas previsões.
Melhor Ativação e Perda para Classificação: Softmax e Crossentropia Categórica (DL 09)
Melhor Ativação e Perda para Classificação: Softmax e Crossentropia Categórica (DL 09)
Ao realizar a classificação multiclasse usando uma rede neural com neurônios sigmóides, surgem certas limitações. Anteriormente, ao lidar com apenas duas classes, um único neurônio poderia produzir 0 ou 1. No entanto, quando vários rótulos estão envolvidos, como classificar dígitos manuscritos de 0 a 9, uma representação diferente é necessária.
Uma abordagem comum é codificar os rótulos como um vetor único, onde cada rótulo tem sua própria dimensão e apenas uma dimensão é ativada por vez. Por exemplo, um vetor de cinco dimensões pode indicar cinco rótulos possíveis, com a dimensão quatro sendo ativada para representar o quarto rótulo. Embora uma camada de saída baseada em neurônios sigmoides possa potencialmente produzir esse tipo de saída, existem problemas práticos.
A primeira questão é que a camada sigmóide pode produzir valores relativamente grandes para vários rótulos, dificultando a interpretação da previsão. Idealmente, gostaríamos que a camada de saída produzisse zeros e uns ou algo que refletisse a confiança em diferentes rótulos possíveis. O segundo problema surge durante o treinamento da camada de saída sigmoide. Quando o alvo é um vetor one-hot, a descida do gradiente é usada para empurrar a ativação para um para o rótulo correto e para zero para os outros rótulos. No entanto, devido à natureza da função sigmóide, os neurônios com erros maiores podem ter deltas menores, dificultando a correção de previsões erradas com segurança.
Um problema semelhante, conhecido como problema do gradiente de fuga, também ocorre ao usar ativações sigmoides para neurônios ocultos. No entanto, neste vídeo, focamos em uma combinação alternativa de ativações de saída e função de perda para resolver esses problemas. Em vez de ativações sigmoides, introduzimos ativações softmax para a camada de saída. As ativações do Softmax são computadas em toda a camada, ampliando as diferenças entre as entradas e normalizando as ativações para somar uma. Isso resulta em saídas que são mais interpretáveis como previsões e podem ser vistas como a confiança da rede em cada rótulo possível.
Para usar efetivamente as ativações softmax, nós as associamos à função categórica de perda de entropia cruzada. A perda de entropia cruzada calcula o logaritmo negativo da ativação para o neurônio alvo, o que simplifica para o logaritmo da ativação ao usar vetores one-hot. Essa combinação permite atualizações de descida de gradiente eficazes. Para calcular os deltas para a camada de saída, derivamos as derivadas parciais da perda em relação às ativações. Para o neurônio alvo, a derivada é -1 dividida pela ativação. Para os outros neurônios, as derivadas são zero. Devido à interdependência das ativações softmax, mesmo que apenas o neurônio alvo tenha uma derivada diferente de zero, deltas diferentes de zero são obtidos para todas as entradas.
Usando essas fórmulas, podemos calcular os deltas tanto para o neurônio alvo quanto para os outros neurônios na camada de saída. O delta para o neurônio-alvo é fácil de calcular, pois é a ativação menos um. Os deltas para os outros neurônios simplificam para a própria ativação negativa.
Com essa combinação de ativações softmax e perda categórica de entropia cruzada, alcançamos saídas significativas para problemas de classificação e obtemos gradientes que empurram eficientemente as saídas para previsões corretas. O uso de ativações softmax e perda categórica de entropia cruzada nos fornece uma estrutura poderosa para classificação multiclasse. Vamos nos aprofundar em como esses componentes funcionam juntos para permitir o treinamento eficaz de redes neurais.
Uma vez calculados os deltas para a camada de saída, esses deltas servem como ponto de partida para retropropagação, onde propagamos os gradientes de erro para trás através da rede para atualizar os pesos. Para atualizar os pesos que conectam a camada de saída à camada anterior, podemos usar os valores delta e aplicar o algoritmo de descida do gradiente. A atualização do peso é determinada multiplicando o delta de cada neurônio de saída pela ativação de entrada do peso correspondente e ajustando o peso por uma taxa de aprendizado.
Ao retropropagar os deltas através da rede, os gradientes para os pesos nas camadas ocultas também podem ser calculados. Isso nos permite atualizar os pesos nas camadas ocultas de acordo, refinando ainda mais o desempenho da rede. É importante observar que, ao usar ativações softmax e perda categórica de entropia cruzada, precisamos garantir que softmax seja aplicado apenas à camada de saída. Para as camadas ocultas, é aconselhável usar funções de ativação como ReLU (Rectified Linear Unit) ou tanh. As ativações do Softmax nos permitem obter resultados que são interpretáveis como probabilidades ou pontuações de confiança para cada classe. Os valores no vetor de saída somam 1, permitindo-nos avaliar a confiança da rede em suas previsões. Um valor mais alto indica maior confiança para uma determinada classe.
A perda de entropia cruzada categórica complementa as ativações softmax medindo efetivamente a discrepância entre as probabilidades previstas e os rótulos verdadeiros. Ele encoraja a rede a minimizar a diferença entre as probabilidades previstas e o vetor de destino codificado one-hot, empurrando assim a rede para previsões mais precisas.
Combinando ativações softmax e perda categórica de entropia cruzada, obtemos vários benefícios. Obtemos saídas significativas e interpretáveis, permitindo-nos entender as previsões da rede e os níveis de confiança para diferentes classes. Os gradientes derivados da perda de entropia cruzada categórica orientam as atualizações de peso de uma forma que leva a um aprendizado mais eficaz e a uma precisão aprimorada. Vale ressaltar que existem outras funções de ativação e funções de perda disponíveis, cada uma adequada para diferentes tipos de problemas. No entanto, as ativações softmax com perda categórica de entropia cruzada provaram ser uma combinação bem-sucedida para tarefas de classificação multiclasse, oferecendo interpretabilidade e dinâmica de treinamento eficaz.
Em resumo, o uso de ativações softmax e perda categórica de entropia cruzada em redes neurais de classificação multiclasse nos permite obter previsões significativas, interpretar níveis de confiança e realizar atualizações de descida de gradiente eficientes. Essa combinação desempenha um papel crucial na obtenção de resultados precisos e confiáveis em várias tarefas de classificação.