Aprendizado de máquina e redes neurais - página 52

 

Outras métricas e a curva ROC (DL 20)



Outras métricas e a curva ROC (DL 20)

Esta é uma breve palestra sobre métricas alternativas para medir o sucesso em tarefas de classificação binária ao usar redes neurais.

Em uma tarefa de classificação binária, normalmente temos dois nós de saída em nossa rede neural e nossos vetores de destino são [1, 0] ou [0, 1]. Ao decodificar a saída da rede para um rótulo de categoria, existem quatro resultados possíveis:

  1. Verdadeiro Positivo: O alvo é [1, 0] e a saída decodificada concorda.
  2. Falso negativo: o alvo é [1, 0], mas a saída decodificada o rotula incorretamente como [0, 1].
  3. Verdadeiro Negativo: O alvo é [0, 1] e a saída decodificada concorda.
  4. Falso positivo: o alvo é [0, 1], mas a saída decodificada o rotula incorretamente como [1, 0].

Esses resultados podem ser usados para calcular diferentes métricas para avaliar o desempenho do modelo na classificação binária. Aqui estão algumas métricas alternativas a serem consideradas:

  1. Precisão: A fração de pontos de dados que o modelo rotula corretamente como positivos de todos os pontos de dados rotulados como positivos.
  2. Sensibilidade ou Recall: A fração de pontos de dados que deveriam ter sido rotulados como a primeira categoria que o modelo identifica corretamente como tal.
  3. Especificidade: A fração de pontos de dados que deveriam ter sido rotulados como a segunda categoria ou categoria negativa que o modelo identifica corretamente como tal.

A precisão, que mede a fração geral de rótulos corretos, pode nem sempre ser a métrica mais informativa. Diferentes situações, como a importância de falsos positivos ou falsos negativos, podem exigir foco em métricas específicas. Além disso, a distribuição de rótulos positivos e negativos no conjunto de dados pode influenciar fortemente a precisão.

Para entender as compensações entre as métricas, é comum visualizá-las usando técnicas como a curva Receiver Operating Characteristic (ROC). A curva ROC plota a taxa de falsos positivos em relação à taxa de verdadeiros positivos para diferentes limites de classificação.

Considerando os trade-offs entre falsos positivos e falsos negativos e analisando a curva ROC, podemos escolher o modelo e a métrica de avaliação mais adequados com base nos requisitos específicos do nosso problema.

Em vez de confiar apenas na precisão, é importante considerar a importância relativa de falsos positivos e falsos negativos e como diferentes modelos funcionam nesse aspecto. Portanto, ao trabalhar em seu projeto, é aconselhável avaliar as compensações entre as métricas e considerar as implicações para seu problema específico, em vez de confiar apenas na precisão geral.

Compreender as compensações entre diferentes métricas é crucial ao avaliar modelos de aprendizado de máquina. Em determinados cenários, a precisão pode não fornecer uma imagem abrangente do desempenho de um modelo, especialmente quando falsos positivos e falsos negativos carregam diferentes níveis de importância. Vamos explorar alguns casos em que métricas alternativas são mais apropriadas:

  1. Importância de falsos positivos e falsos negativos: Em domínios como o diagnóstico médico, as consequências de falsos positivos e falsos negativos podem variar significativamente. Por exemplo, na detecção de câncer, um falso negativo (ausência de um caso positivo) pode ter implicações graves, enquanto um falso positivo (diagnóstico incorreto de um caso negativo) pode levar a tratamentos desnecessários. Nesses casos, métricas como precisão e recall/sensibilidade podem oferecer informações valiosas sobre o desempenho de um modelo.

  2. Dados desequilibrados: quando os rótulos positivos e negativos são distribuídos de forma desigual no conjunto de dados, a precisão pode ser enganosa. Suponha que 95% dos pontos de dados pertençam à classe positiva. Nesse caso, um modelo que simplesmente prevê tudo como positivo atingiria uma alta precisão de 95% sem realmente aprender os padrões subjacentes. Métricas como precisão e recall podem ajudar a lidar com o viés e focar no desempenho do modelo em cada classe.

  3. Trade-off Precision-Recall: Os modelos de aprendizado de máquina geralmente exibem um trade-off entre precisão e recall. A precisão mede a capacidade de identificar corretamente exemplos positivos, enquanto a revocação mede a capacidade de capturar todos os exemplos positivos. Ao ajustar o limite do modelo ou o limite de decisão, podemos priorizar a precisão ou o recall. No entanto, alterar o limite para melhorar uma métrica geralmente prejudica a outra. Entender essa compensação é importante ao selecionar a métrica apropriada para um determinado problema.

  4. Curva ROC (Receiver Operating Characteristic): A curva ROC fornece uma representação gráfica do desempenho de um modelo de classificação binária plotando a taxa de falsos positivos em relação à taxa de verdadeiros positivos em vários limites de classificação. Um modelo que atinge altas taxas de verdadeiros positivos com baixas taxas de falsos positivos terá uma curva mais próxima do canto superior esquerdo, indicando melhor desempenho. A área sob a curva ROC (AUC-ROC) é comumente usada como uma métrica de resumo, com valores mais próximos de 1 indicando melhor desempenho.

Diferentes modelos de aprendizado de máquina podem ter diferentes compensações entre sensibilidade e especificidade ou precisão e revocação. É importante considerar os requisitos específicos do problema e a importância relativa de diferentes métricas. Ao avaliar essas compensações e entender como os modelos funcionam em várias métricas, podemos tomar decisões mais informadas e escolher o modelo mais adequado para nossa aplicação.

Em seu projeto, considere as compensações entre falsos positivos e falsos negativos e selecione métricas que se alinhem com os objetivos do problema. Em vez de confiar apenas na precisão, leve em consideração as necessidades e implicações específicas de sua tarefa para avaliar e comparar o desempenho de diferentes modelos com precisão.

Other Metrics and the ROC Curve (DL 20)
Other Metrics and the ROC Curve (DL 20)
  • 2020.10.12
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

O Adam Optimizer (DL 21)



O Adam Optimizer (DL 21)

O objetivo desta palestra é demonstrar como podemos abordar os pontos fracos do gradiente descendente estocástico (SGD) e apresentar o otimizador Adam, que tem sido amplamente utilizado para treinar redes neurais.

No SGD, atualizamos cada peso na rede neural subtraindo o produto da taxa de aprendizado e a derivada parcial da perda em relação a esse peso para cada lote em que treinamos. Este processo dá passos na direção do gradiente negativo da perda, minimizando-o gradativamente. No entanto, o SGD pode encontrar vários modos de falha que dificultam sua eficácia.

Para ilustrar essas questões, começamos com um exemplo unidimensional onde pretendemos minimizar a perda. Nesse caso, o SGD nos leva para baixo seguindo a direção do gradiente, aproximando-se gradativamente do mínimo. No entanto, há cenários em que o SGD não é útil. Se atingirmos um mínimo local, onde o gradiente é zero, não nos afastaremos desse ponto. Da mesma forma, estar em um platô da função de perda, onde o gradiente também é zero, impede o progresso. Embora a estocasticidade do treinamento em lotes diferentes às vezes possa ajudar a escapar de mínimos ou platôs locais, ela não resolve completamente esses problemas.

Em problemas de otimização de dimensão superior, como o treinamento de redes neurais com múltiplas dimensões de peso, surgem desafios adicionais. Os pontos de sela, onde existem mínimos e máximos locais em diferentes direções, podem fazer com que o gradiente seja zero, retardando o aprendizado. Além disso, discrepâncias nas escalas de derivadas parciais em diferentes dimensões podem levar a um comportamento em ziguezague durante a descida do gradiente, causando overshooting e convergência mais lenta.

O otimizador Adam aborda essas questões com duas ideias principais. O primeiro é o momentum, que favorece continuar na mesma direção quando vários passos foram dados nessa direção. Momentum ajuda a superar platôs e pode guiar o algoritmo para longe dos pontos de sela. A segunda ideia envolve a manutenção de uma média móvel das derivadas parciais e das derivadas parciais quadradas. Ao estimar o segundo momento (variância) das derivadas parciais, podemos normalizar os passos dados em cada dimensão, reduzindo o ziguezague e o overshooting.

A regra de atualização de Adam substitui o termo da derivada parcial na atualização do peso pela média móvel da derivada parcial (v) dividida pela raiz quadrada da média móvel da derivada parcial quadrada (s), junto com uma pequena constante (épsilon) para evitar a divisão por zero. Essa regra de atualização garante etapas mais equilibradas entre as dimensões e provou ser mais eficaz do que o SGD padrão para treinar redes neurais.

O otimizador Adam aborda as limitações do SGD incorporando o momento e mantendo as médias móveis das derivadas parciais. Essas modificações aprimoram a capacidade do otimizador de navegar por mínimos, platôs e pontos de sela locais, ao mesmo tempo em que reduzem o comportamento de ziguezague e o excesso. Como resultado, Adam tornou-se uma escolha popular para treinar redes neurais na prática.

The Adam Optimizer (DL 21)
The Adam Optimizer (DL 21)
  • 2020.11.05
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

Codificadores Automáticos (DL 22)



Codificadores Automáticos (DL 22)

Em muitos cenários de aprendizado profundo, geralmente encontramos a ideia de treinar uma rede neural em um conjunto de dados e usar uma camada oculta dessa rede para codificar dados que podem ser aplicados a outros problemas ou conjuntos de dados. Este conceito é conhecido como aprendizagem por transferência. Por exemplo, com redes residuais, o pré-treinamento envolve o aprendizado de técnicas úteis de processamento de imagens que podem ser posteriormente aplicadas a diferentes conjuntos de dados. Ao descartar as camadas de saída do modelo pré-treinado e adicionar novas camadas de saída para uma nova tarefa, basicamente criamos uma nova rede que processa os dados codificados produzidos pelo modelo pré-treinado.

As incorporações de palavras também servem ao propósito de codificação de dados, onde o objetivo é aprender uma representação que capture informações significativas nas camadas ocultas. Essa ideia também se estende a vários outros contextos. Um modelo notável que adota esse conceito é o autoencoder. Um autoencoder é treinado em dados não supervisionados, onde os dados de entrada e os dados de saída são os mesmos. Embora possa parecer trivial resolver esse problema de regressão usando regressão linear, o objetivo principal de um autoencoder é aprender uma representação mais compacta em suas camadas ocultas.

Ao reduzir progressivamente o tamanho das camadas ocultas, o autoencoder força a rede a aprender representações compactadas dos dados de entrada. Se a rede puder reproduzir consistentemente a entrada original dessa representação compactada, ela efetivamente aprenderá a compactação de dados. Por exemplo, se tivermos uma imagem de 200x200 pixels como entrada e a reduzirmos a uma camada oculta de 1.000 neurônios, que pode então se expandir para reproduzir uma aproximação da imagem original, obtemos uma taxa de compressão de 20:1.

No entanto, usar uma rede neural apenas para compactação de dados não é particularmente útil, pois existem algoritmos de compactação não baseados em aprendizado mais eficientes disponíveis. Em vez disso, o valor de um autoencoder está em usar a primeira metade da rede para gerar uma representação para transferência de aprendizado em outras tarefas de aprendizado profundo ou a segunda metade como um decodificador para gerar exemplos de dados do conjunto de entrada.

A aplicação inicial de um autoencoder para aprendizado por transferência foi proeminente nos primeiros dias do aprendizado profundo. No entanto, melhores abordagens para transferência de aprendizagem foram desenvolvidas desde então. Por outro lado, utilizar a parte do decodificador da rede para gerar amostras de dados tornou-se a base para muitos outros algoritmos de aprendizado profundo.

A abordagem mais simples envolve alcançar a compressão máxima possível minimizando o tamanho da camada oculta. Nesse cenário, qualquer vetor de entrada razoável fornecido ao decodificador deve gerar dados semelhantes à distribuição dos dados de entrada. No entanto, determinar o tamanho ideal da camada oculta é um desafio. Pode ser muito pequeno, tornando-o incapaz de reproduzir as entradas com precisão, ou muito grande, resultando na geração de dados irrealistas que não se assemelham ao conjunto de dados original.

Para resolver esse problema, podemos modificar a arquitetura para encorajar o autoencoder a aprender representações que se assemelham a vetores amostrados aleatoriamente. Essa modificação nos leva ao autoencoder variacional. Em um autoencoder variacional, o vetor oculto do meio é substituído por dois vetores que representam a média e a variância. O processo de treinamento envolve a geração de um vetor aleatório usando uma distribuição normal, que é então combinada com os vetores de codificação ocultos para criar a entrada para o decodificador. Além disso, a perda para a rede do codificador inclui um termo de divergência que incentiva a média e a variância a permanecerem próximas a uma distribuição normal. Isso ajuda a agrupar as representações em torno do centro do espaço, tornando-o mais confiável para amostragem aleatória. Assim, o autoencoder variacional nos permite gerar amostras que se assemelham muito à distribuição de dados aprendida pela rede.

Em resumo, o conceito de usar a camada oculta de uma rede neural como uma codificação de dados evoluiu para a capacidade de amostrar a partir de uma distribuição de probabilidade aprendida. Isso abre as portas para redes adversárias generativas e a geração de dados diversos e interessantes.

Auto-Encoders (DL 22)
Auto-Encoders (DL 22)
  • 2022.11.12
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Redes Adversárias Geradoras (DL 23)



Na última aula, cobrimos autoencoders variacionais, que são um tipo de abordagem de modelagem generativa. O principal objetivo do autoencoder é aprender variáveis latentes que podem ser usadas para amostragem da distribuição generativa. Outra maneira de pensar em gerar amostras de uma distribuição é por meio de geradores de números aleatórios computacionais.

Ao usar uma biblioteca aleatória na programação, amostras de distribuições aleatórias são geradas com base em uma sequência de bits aleatórios ou pseudo-aleatórios. O gerador de números aleatórios executa cálculos para transformar essa sequência de bits em amostras de uma distribuição diferente. Muitas distribuições são construídas sobre distribuições uniformes nesses geradores.

Essa abordagem alternativa para modelagem generativa envolve o treinamento de uma rede neural geradora. O gerador recebe ruído aleatório como entrada e o transforma em uma amostra aleatória de uma distribuição de dados. Por exemplo, se o conjunto de dados consistir em imagens de cachorros, o objetivo é treinar a rede neural para gerar imagens aleatórias de cachorros a partir de qualquer ruído de entrada.

Para treinar a rede do gerador, uma rede neural adicional chamada discriminador é usada. O discriminador obtém entradas de dados de treinamento reais ou da saída da rede do gerador e determina se a entrada é real ou falsa. A rede geradora visa produzir amostras que possam enganar o discriminador, enquanto o discriminador visa distinguir dados reais de dados falsos. Isso cria uma relação adversa entre as duas redes.

O processo de treinamento envolve treinar primeiro o discriminador, permitindo que ele aprenda a distribuição dos dados reais. Em seguida, o gerador é treinado para produzir saídas que se assemelham a dados reais e podem enganar o discriminador. O treinamento alterna entre o discriminador e o gerador para melhorar seu desempenho.

A função de perda para a rede do gerador pode ser o oposto da perda do discriminador ou uma função de perda completamente diferente. Os gradientes podem ser propagados de volta através do discriminador para a rede do gerador para atualizar seus pesos com base na função de perda. Isso permite que o gerador aprenda como melhorar sua função objetivo.

Diferentes funções de perda podem ser usadas para as redes geradoras e discriminadoras, especialmente quando o objetivo é gerar amostras para categorias específicas dentro da distribuição de dados. O gerador pode ser condicionado a informações adicionais, como rótulos, para produzir amostras que enganam o discriminador para gerar categorias específicas.

Ao treinar as redes adversárias, existem possíveis modos de falha a serem considerados. Um modo de falha é a rede do gerador simplesmente produzir amostras da distribuição de dados reais, o que não estaria minimizando sua função objetivo. O overfitting é outra preocupação, pois o gerador pode memorizar os dados reais em vez de gerar diversas amostras.

Para evitar o overfitting, é importante limitar a exposição do gerador aos dados reais e garantir que ele não tenha muitas oportunidades de memorizá-los. O conjunto de dados reais não é inserido diretamente na rede do gerador. O gerador aprende com os dados reais indiretamente quando influencia os pesos na rede discriminadora, que então afeta a perda repassada ao gerador.

Se bem-sucedida, uma rede geradora treinada pode gerar amostras que se assemelham aos dados reais, mas vão além deles. Isso pode ser útil para aumento de dados no treinamento de outras redes neurais e para fins artísticos. Exemplos de redes adversárias generativas sendo usadas para aumento de arte e dados foram discutidos na palestra.

Além disso, redes de geradores treinados podem ser valiosas em várias aplicações além de aumento de dados e arte. Uma dessas aplicações é na geração de dados sintéticos para melhorar o treinamento de redes neurais para resolução de outros problemas importantes.

Aproveitando a rede geradora, podemos gerar amostras de dados que são especificamente adaptadas para aprimorar o treinamento de redes neurais. Por exemplo, se tivermos um problema de classificação em que as classes são desequilibradas, podemos usar o gerador para gerar amostras adicionais para a classe sub-representada. Isso pode ajudar a equilibrar o conjunto de dados e melhorar a capacidade do modelo de aprender a classe minoritária.

Além disso, as redes adversárias generativas têm o potencial de gerar amostras que exploram o espaço entre diferentes categorias ou combinações de recursos. Por exemplo, se fornecermos ao gerador uma combinação de recursos como 0,5 cachorro e 0,5 gato, ele poderá produzir uma amostra que combine características de cães e gatos. Essa capacidade de interpolar entre diferentes categorias ou recursos abre possibilidades para saídas criativas e inovadoras.

As redes adversárias generativas encontraram aplicações em vários domínios. No campo da visão computacional, eles têm sido usados para gerar imagens realistas, melhorar a qualidade da imagem e até mesmo criar deep fakes. No processamento de linguagem natural, eles foram empregados para gerar texto realista, traduzir entre idiomas e até mesmo criar chatbots.

É importante observar que o treinamento de redes adversárias generativas pode ser uma tarefa desafiadora. Requer um ajuste cuidadoso de hiperparâmetros, selecionando funções de perda apropriadas e gerenciando o trade-off entre as redes do gerador e do discriminador. Além disso, garantir a estabilidade do treinamento e evitar o colapso do modo, onde o gerador produz apenas um conjunto limitado de amostras, são considerações importantes.

Apesar desses desafios, as redes adversárias generativas demonstraram capacidades impressionantes na geração de amostras realistas e diversificadas. A pesquisa em andamento continua avançando no campo, explorando novas arquiteturas, funções de perda e técnicas de treinamento para melhorar ainda mais o desempenho e a confiabilidade dessas redes.

Em conclusão, as redes adversárias generativas oferecem uma estrutura poderosa para modelagem generativa. Ao treinar uma rede geradora e discriminadora de maneira adversária, podemos aprender a gerar amostras que se assemelham à distribuição de dados real. Isso abre possibilidades empolgantes no aumento de dados, aplicativos criativos e aprimoramento do treinamento para várias tarefas de aprendizado de máquina.

 

AlphaGo e AlphaGo Zero (DL 24)



AlphaGo e AlphaGo Zero (DL 24)

AlphaGo e AlphaGo Zero são dois agentes go-play desenvolvidos pela subsidiária do Google, DeepMind. Esses sistemas combinam redes neurais convolucionais profundas com aprendizado por reforço de auto-execução para alcançar avanços significativos em algoritmos go-playing. Em 2016, o AlphaGo se tornou a primeira IA a derrotar um campeão mundial humano. Neste vídeo, exploraremos como a DeepMind criou esses sistemas e discutiremos as principais descobertas dos trabalhos de pesquisa publicados no AlphaGo e no AlphaGo Zero.

Go é um jogo para dois jogadores com regras simples: os jogadores se revezam colocando pedras pretas e brancas em uma interseção vazia do tabuleiro. As pedras ou grupos de pedras rodeados pelas peças do adversário são capturadas e retiradas do tabuleiro. O jogo termina quando ambos os jogadores passam, e a pontuação é determinada pelo número de pedras e interseções vazias cercadas.

Desenvolver um algoritmo de IA para go requer o planejamento de vários movimentos à frente. Mecanismos de xadrez como o Deep Blue conseguiram isso considerando todas as sequências de movimentos possíveis e avaliando as posições resultantes no tabuleiro. No entanto, avaliar a qualidade de uma posição no tabuleiro é mais desafiador devido à complexidade do jogo e ao maior fator de ramificação. Restringir o espaço de pesquisa a movimentos promissores e determinar a qualidade da posição do tabuleiro foram problemas significativos que o AlphaGo abordou usando o aprendizado profundo.

O AlphaGo resolveu esses problemas treinando redes neurais profundas para estimar o valor e a política dos estados do conselho. A rede de valor prevê a probabilidade de vitória de um determinado estado, enquanto a rede de políticas estima a qualidade do movimento. Esses modelos orientam o algoritmo de planejamento, restringindo a atenção a movimentos promissores e fornecendo estimativas de qualidade.

A arquitetura do AlphaGo e do AlphaGo Zero é diferente. O AlphaGo original usava redes separadas de política e valor, enquanto o AlphaGo Zero empregava uma única rede com cabeçotes separados para saídas de política e valor. Ambas as arquiteturas incorporam blocos residuais para extrair informações importantes sobre o estado da placa. Os dados de treinamento do AlphaGo incluíam jogos jogados por amadores de alto nível, enquanto o AlphaGo Zero usava dados exclusivamente de auto-jogo.

O treinamento da rede de valor é relativamente simples, usando representações de estado do tabuleiro e rótulos de ganho/perda. O treinamento da rede de políticas é mais complexo, pois requer a previsão da qualidade do movimento. O AlphaGo Zero aprimorou isso treinando a rede de políticas em estimativas de qualidade de movimento geradas pelo algoritmo de pesquisa durante as implementações. Com o tempo, a rede de políticas aprende a estimar a qualidade do movimento várias etapas no futuro.

Tanto o AlphaGo quanto o AlphaGo Zero usam o Monte Carlo Tree Search (MCTS) como algoritmo de planejamento. O MCTS realiza lançamentos para coletar informações sobre valores e incertezas da sequência de movimento. O algoritmo de busca usa as redes de política e valor para avaliar os estados do tabuleiro e estimar a qualidade do movimento. Por meio do aprendizado por reforço de autojogo, ambos os sistemas melhoram as estimativas de qualidade de suas redes e se tornam jogadores mais fortes.

No geral, o desenvolvimento do AlphaGo e do AlphaGo Zero representa um marco significativo na IA do go-play. Esses sistemas combinam aprendizado profundo com aprendizado por reforço e algoritmos de planejamento para obter desempenho notável e jogo estratégico no jogo de go.

AlphaGo & AlphaGo Zero (DL 24)
AlphaGo & AlphaGo Zero (DL 24)
  • 2022.11.20
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

Gráficos de computação (DL 25)



Gráficos de computação (DL 25)

Esta palestra se concentra em gráficos computacionais, que são representações visuais do fluxo de dados e da sequência de cálculos em um programa. Embora os gráficos computacionais sejam comumente usados para entender a propagação para frente e para trás em redes neurais, eles podem ser aplicados a qualquer programa. Ao tornar explícitas as operações implícitas em uma rede neural, os gráficos computacionais fornecem uma compreensão mais clara dos cálculos envolvidos.

Em um gráfico computacional, cada nó representa um cálculo, como multiplicar pesos por ativações, somar entradas ponderadas, computar funções de ativação ou calcular perdas. As conexões entre nós representam dependências entre variáveis no programa. Ao saber como obter a derivada de qualquer nó no grafo, podemos representar as etapas de propagação para frente e para trás em uma rede neural.

Para calcular as derivadas parciais necessárias para a descida do gradiente em uma rede neural, propagamos as derivadas para trás através da rede usando a regra da cadeia. A cada passo, multiplicamos a derivada da operação atual pela derivada do nó anterior. Quando um nó tem várias saídas, somamos as derivadas provenientes de cada saída.

O gráfico computacional nos permite calcular as saídas de uma rede neural e calcular as derivadas parciais da perda em relação a cada peso. Trabalhando para trás através de uma classificação topológica do gráfico e propagando as derivadas, podemos determinar as derivadas parciais para qualquer parâmetro na rede.

A palestra também fornece exemplos de gráficos computacionais, ilustrando como valores intermediários e derivados são calculados. Ao dividir as funções em cálculos menores e atribuir nomes a valores intermediários, podemos calcular as saídas das funções e suas derivadas parciais usando o gráfico computacional.

Além disso, os gráficos computacionais podem lidar não apenas com variáveis escalares, mas também com variáveis que representam vetores, matrizes ou tensores. Usando variáveis que correspondem a objetos de dimensões superiores, como vetores de ativação e matrizes de peso, podemos aplicar gráficos computacionais a redes neurais densamente conectadas e outros cálculos complexos.

Para estender o gráfico computacional para uma rede neural densamente conectada, podemos introduzir variáveis que correspondem a vetores de ativações ou matrizes de pesos. Vamos nomear o vetor de ativações em toda essa camada da rede como "a1", denotado por um símbolo de chapéu de vetor (^). Da mesma forma, podemos representar os pesos como uma matriz W1.

Neste gráfico estendido, a entrada para cada nó na camada é o produto escalar do vetor de ativações (a1) e a matriz de pesos correspondente (W1). Podemos representar esta operação como uma multiplicação de matrizes: a1 * W1.

Além disso, podemos introduzir um vetor de bias (b1) associado a cada nó da camada. O termo de viés é adicionado elemento a elemento ao produto escalar de ativações e pesos antes de aplicar uma função de ativação.

Em seguida, aplicamos uma função de ativação (como um sigmóide ou ReLU) elemento a elemento ao vetor resultante. Vamos denotar este vetor como "a2" (com um símbolo de chapéu), representando as ativações da próxima camada.

Podemos repetir esse processo para camadas subsequentes na rede neural, conectando os nós com arestas e propagando as ativações e pesos pelo grafo.

Para calcular a passagem direta neste gráfico computacional estendido, começaríamos com os valores de entrada (como intensidades de pixel para uma imagem) e os propagaríamos para frente através do gráfico, aplicando multiplicações de matrizes, adições elementares e funções de ativação em cada nó até obtermos o resultado final.

Quando se trata de retropropagação, o objetivo é calcular as derivadas parciais da função de perda em relação a cada peso da rede. Ao estender o gráfico computacional, podemos traçar o fluxo de gradientes para trás através da rede, permitindo-nos calcular eficientemente essas derivadas parciais usando a regra da cadeia.

Durante a retropropagação, começamos com a derivada da função de perda em relação à saída final e usamos a regra da cadeia para propagá-la para trás no gráfico. Em cada nó, multiplicamos a derivada de entrada pela derivada da operação correspondente (função de ativação, multiplicação de matriz, etc.) em relação às suas entradas.

Seguindo esse processo, podemos calcular os gradientes para cada peso na rede, o que nos permite atualizar os pesos usando algoritmos de otimização como gradiente descendente e suas variantes.

Em resumo, estender o gráfico computacional para representar uma rede neural densamente conectada nos permite visualizar e calcular as etapas de propagação para frente e para trás. Ele permite o cálculo eficiente dos gradientes e facilita a otimização da rede por meio de atualizações de peso.

Computation Graphs (DL 25)
Computation Graphs (DL 25)
  • 2020.09.29
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

Redes neurais do Coursera para aprendizado de máquina — Geoffrey Hinton - Palestra 1.1 — Por que precisamos de aprendizado de máquina



Aula 1.1 — Por que precisamos de aprendizado de máquina [Redes neurais para aprendizado de máquina]

Bem-vindo ao curso Coursera sobre redes neurais para aprendizado de máquina! Neste curso, exploraremos o fascinante campo das redes neurais e suas aplicações no aprendizado de máquina. Antes de mergulhar nas complexidades dos algoritmos de aprendizado de rede neural, vamos discutir a importância do aprendizado de máquina, seus usos e fornecer alguns exemplos para ilustrar seus recursos.

O aprendizado de máquina é necessário para resolver problemas complexos que são difíceis de resolver com abordagens de programação tradicionais. Por exemplo, reconhecer um objeto tridimensional de diferentes pontos de vista, sob condições de iluminação variadas e em cenas desordenadas é uma tarefa desafiadora. A complexidade reside no fato de que não entendemos completamente como nossos cérebros realizam esse reconhecimento, tornando desafiador escrever programas explícitos para resolver esses problemas. Mesmo se descobrirmos o programa subjacente, pode ser extremamente complicado implementá-lo com eficácia.

Outro exemplo é a detecção de transações fraudulentas com cartão de crédito. Os sistemas tradicionais baseados em regras lutam para capturar as complexidades dos padrões de fraude, pois exigem a combinação de várias regras não confiáveis que mudam constantemente com o tempo. O aprendizado de máquina oferece uma abordagem alternativa, aproveitando um grande número de exemplos que especificam as saídas corretas para determinadas entradas. Um algoritmo de aprendizado processa esses exemplos para produzir um programa que lida efetivamente com a tarefa. O programa resultante pode parecer diferente dos programas artesanais tradicionais, contendo potencialmente milhões de números ponderados. No entanto, se implementado corretamente, pode generalizar bem para novos casos e adaptar-se a mudanças de dados por meio de um novo treinamento em informações atualizadas.

O aprendizado de máquina se destaca no reconhecimento de padrões, como objetos em cenas reais, expressões faciais ou palavras faladas. Também é poderoso na identificação de anomalias, como sequências incomuns de transações com cartão de crédito ou leituras anormais de sensores em uma usina nuclear. Além disso, o aprendizado de máquina é valioso em tarefas de previsão, como prever preços de ações ou prever preferências do usuário com base em suas escolhas anteriores e no comportamento de outras pessoas.

Ao longo deste curso, usaremos o banco de dados MNIST de dígitos manuscritos como um exemplo padrão para explicar muitos algoritmos de aprendizado de máquina. Este banco de dados é amplamente utilizado e permite a comparação efetiva de diferentes métodos. Ao usar essas tarefas, podemos entender melhor os conceitos e princípios subjacentes do aprendizado de máquina.

Esses exemplos apenas arranham a superfície dos notáveis recursos de aprendizado de máquina e redes neurais. Com avanços tecnológicos e recursos computacionais prontamente disponíveis, modelos complexos de aprendizado de máquina podem ser treinados e implantados com eficiência. Esses modelos têm o potencial de lidar com tarefas cada vez mais complexas, ultrapassando os limites do que podemos alcançar com o aprendizado de máquina.

Neste curso, vamos nos aprofundar nas complexidades das redes neurais, discutindo suas arquiteturas, algoritmos de treinamento e técnicas práticas de implementação. Ao final do curso, você terá uma base sólida em redes neurais e estará preparado para aplicá-las a uma ampla gama de problemas.

Junte-se a nós nesta emocionante jornada ao mundo das redes neurais para aprendizado de máquina. Prepare-se para expandir seu conhecimento, aprimorar suas habilidades e liberar o potencial dessa tecnologia transformadora!

Lecture 1.1 — Why do we need machine learning [Neural Networks for Machine Learning]
Lecture 1.1 — Why do we need machine learning [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For more cool AI stuff, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton ...
 

Aula 1.2 — O que são redes neurais



Aula 1.2 — O que são redes neurais [Redes neurais para aprendizado de máquina]

Neste vídeo, discutirei neurônios reais no cérebro, que servem de base para as redes neurais artificiais que exploraremos neste curso. Embora não foquemos muito em neurônios reais durante a maior parte do curso, inicialmente gostaria de fornecer uma breve visão geral.

Existem várias razões para estudar como as redes de neurônios podem computar. Em primeiro lugar, ajuda-nos a compreender o funcionamento do cérebro. Embora a realização de experimentos diretamente no cérebro pareça lógico, é um órgão complexo e delicado que não resiste bem à manipulação. Portanto, simulações de computador são essenciais para compreender os resultados empíricos.

Em segundo lugar, o estudo de redes neurais nos permite compreender o conceito de computação paralela, inspirado na capacidade do cérebro de computar por meio de uma vasta rede de neurônios relativamente lentos. Entender esse estilo de computação paralela pode levar a avanços em computadores paralelos, que diferem significativamente dos processadores seriais convencionais. É particularmente eficaz para tarefas nas quais o cérebro se destaca, como visão, mas não é adequado para tarefas como multiplicação.

A terceira razão, relevante para este curso, envolve a resolução de problemas práticos usando algoritmos de aprendizagem inovadores inspirados no cérebro. Esses algoritmos podem ser altamente valiosos, mesmo que não imitem com precisão as operações do cérebro. Assim, embora não nos aprofundemos no funcionamento do cérebro, ele serve como fonte de inspiração, indicando que grandes redes paralelas de neurônios podem realizar cálculos complexos.

Neste vídeo, vou fornecer mais informações sobre o funcionamento do cérebro. Um neurônio cortical típico consiste em um corpo celular, um axônio para enviar mensagens a outros neurônios e uma árvore dendrítica para receber mensagens de outros neurônios. No ponto onde o axônio de um neurônio se conecta com a árvore dendrítica de outro neurônio, encontramos uma sinapse. Quando um pico de atividade viaja ao longo do axônio, ele injeta carga no neurônio pós-sináptico.

Um neurônio gera picos quando a carga recebida em sua árvore dendrítica despolariza uma região chamada colina axônica. Uma vez despolarizado, o neurônio transmite um pico ao longo de seu axônio, que é essencialmente uma onda de despolarização.

As próprias sinapses têm uma estrutura interessante. Eles contêm vesículas cheias de substâncias químicas transmissoras. Quando um pico atinge o axônio, ele desencadeia a migração e liberação dessas vesículas na fenda sináptica. Moléculas transmissoras se difundem através da fenda sináptica e se ligam a moléculas receptoras na membrana do neurônio pós-sináptico. Essa ligação altera a forma das moléculas, criando buracos na membrana que permitem que íons específicos fluam para dentro ou para fora do neurônio pós-sináptico, alterando assim seu estado de despolarização.

As sinapses são relativamente lentas em comparação com a memória do computador, mas possuem vantagens sobre a memória de acesso aleatório nos computadores. Eles são pequenos, de baixa potência e adaptáveis. A adaptabilidade é crucial, pois permite que as sinapses mudem seus pontos fortes, utilizando sinais disponíveis localmente. Essa adaptabilidade facilita o aprendizado e a capacidade de realizar cálculos complexos.

A questão então surge: como as sinapses decidem como mudar sua força? Quais são as regras para sua adaptação? Estas são considerações essenciais.

Para resumir, o cérebro funciona por meio de neurônios que recebem informações de outros neurônios. Apenas uma pequena fração dos neurônios recebe informações dos receptores sensoriais. Os neurônios se comunicam dentro do córtex transmitindo picos de atividade. O efeito de uma entrada em um neurônio depende de seu peso sináptico, que pode ser positivo ou negativo. Esses pesos sinápticos se adaptam, permitindo que toda a rede aprenda e execute vários cálculos, como reconhecimento de objetos, compreensão de linguagem, planejamento e controle motor.

O cérebro é composto por aproximadamente 10^11 neurônios, cada um com cerca de 10^4 pesos sinápticos. Consequentemente, o cérebro contém um imenso número de pesos sinápticos, muitos dos quais contribuem para computações contínuas em milissegundos. Isso fornece ao cérebro uma largura de banda superior para armazenar conhecimento em comparação com as estações de trabalho modernas.

Outro aspecto intrigante do cérebro é sua modularidade. Diferentes regiões do córtex acabam se especializando em diferentes funções. As entradas dos sentidos são direcionadas para regiões específicas geneticamente, influenciando sua funcionalidade final. Danos locais no cérebro resultam em efeitos específicos, como a perda da compreensão da linguagem ou do reconhecimento de objetos. A flexibilidade do cérebro é evidente no fato de que as funções podem se deslocar para outras partes do cérebro em resposta a danos precoces. Isso sugere que o córtex contém um algoritmo de aprendizado flexível e universal que pode se adaptar a tarefas específicas com base na experiência.

Em conclusão, o cérebro executa uma computação paralela rápida depois de aprender, combinada com uma flexibilidade notável. É semelhante a um FPGA, onde o hardware paralelo padrão é construído e as informações subsequentes determinam a computação paralela específica a ser executada. Os computadores convencionais obtêm flexibilidade por meio da programação sequencial, mas isso requer processos centrais rápidos para acessar as linhas do programa e realizar longos cálculos sequenciais.

Lecture 1.2 — What are neural networks [Neural Networks for Machine Learning]
Lecture 1.2 — What are neural networks [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...
 

Aula 1.3 — Alguns modelos simples de neurônios



Aula 1.3 — Alguns modelos simples de neurônios [Neural Networks for Machine Learning]

Descreverei alguns modelos simples de neurônios, incluindo neurônios lineares, neurônios limiares e modelos mais complexos. Esses modelos são mais simples que os neurônios reais, mas ainda nos permitem criar redes neurais para aprendizado de máquina. Ao entender sistemas complexos, precisamos simplificá-los e idealizá-los para entender seu funcionamento. Isso envolve a remoção de detalhes não essenciais e a aplicação de matemática e analogias. Embora seja importante não negligenciar as propriedades essenciais, pode ser valioso estudar modelos que são considerados incorretos, mas que ainda são úteis na prática. Por exemplo, as redes neurais costumam usar neurônios que comunicam valores reais em vez de picos discretos, embora os neurônios corticais reais se comportem de maneira diferente.

O tipo mais simples de neurônio é o neurônio linear, que tem limitações computacionais, mas fornece informações sobre neurônios mais complexos. Sua saída é determinada por um viés e pela soma ponderada das atividades de entrada. Um gráfico do viés mais atividades ponderadas forma uma linha reta. Em contraste, os neurônios limiares binários, introduzidos por McCulloch e Pitts, enviam um pico de atividade se a soma ponderada exceder um limiar. Esses picos representam valores de verdade que os neurônios combinam para produzir seu próprio valor de verdade. Enquanto a lógica já foi vista como o principal paradigma para a compreensão da mente, agora se pensa que o cérebro combina várias fontes de evidências não confiáveis, tornando a lógica menos adequada.

Neurônios limiares binários podem ser descritos por duas equações equivalentes. A entrada total é a soma das atividades de entrada multiplicada por pesos, e a saída é um se a entrada total estiver acima do limite. Alternativamente, a entrada total inclui um termo de polarização e a saída é um se a entrada total estiver acima de zero. Um neurônio linear retificado combina propriedades de neurônios lineares e neurônios limiares binários. Ele calcula uma soma ponderada linear, mas aplica uma função não linear para determinar a saída. A saída é zero se a soma estiver abaixo de zero e igual à soma se estiver acima de zero, resultando em uma saída não linear, mas linear acima de zero.

Neurônios sigmóides são comumente usados em redes neurais artificiais. Eles fornecem uma saída de valor real que é uma função suave e limitada da entrada total. A função logística é freqüentemente usada, onde a saída é um dividido por um mais o expoente negativo da entrada total. Para grandes entradas positivas, a saída é um, enquanto para grandes entradas negativas, a saída é zero. A função sigmoide possui derivadas suaves, facilitando o aprendizado em redes neurais.

Neurônios binários estocásticos usam as mesmas equações como unidades logísticas, mas em vez de produzir a probabilidade como um número real, eles tomam uma decisão probabilística e produzem um ou zero. A probabilidade representa a probabilidade de produzir um pico. Se a entrada for muito positiva, eles provavelmente produzirão um, enquanto uma entrada muito negativa provavelmente resultará em zero. As unidades lineares retificadas seguem um princípio semelhante, mas introduzem aleatoriedade na produção de picos. A saída de uma unidade linear retificada representa a taxa de produção de picos, e os tempos de pico reais são determinados por um processo aleatório de Poisson dentro da unidade.

Esses comportamentos estocásticos em neurônios binários e unidades lineares retificadas introduzem aleatoriedade intrínseca à rede neural. Embora a taxa de produção de picos seja determinística, o tempo real dos picos torna-se um processo aleatório. Essa aleatoriedade adiciona variabilidade e estocasticidade ao sistema.

Compreender esses diferentes modelos de neurônios nos fornece uma gama de capacidades computacionais. Neurônios lineares são computacionalmente limitados, mas podem oferecer insights sobre sistemas mais complexos. Neurônios de limite binário permitem a tomada de decisões com base em comparações de limite. Neurônios lineares retificados combinam linearidade e não linearidade, permitindo tomada de decisão e processamento linear simultaneamente. Os neurônios sigmóides fornecem saídas suaves e limitadas e são comumente usados em redes neurais devido à sua natureza diferenciável. Neurônios binários estocásticos e unidades lineares retificadas introduzem aleatoriedade no sistema, permitindo tomadas de decisão probabilísticas e introduzindo variabilidade.

Ao combinar diferentes tipos de neurônios em redes neurais, podemos criar modelos poderosos para tarefas de aprendizado de máquina. Essas redes podem aprender com os dados, adaptar seus pesos e vieses e fazer previsões ou classificações com base nos padrões aprendidos. Compreender os princípios e comportamentos desses modelos de neurônios nos ajuda a projetar e treinar redes neurais eficazes.

No entanto, é essencial lembrar que esses modelos de neurônios são abstrações simplificadas de neurônios reais no cérebro. O cérebro é um sistema incrivelmente complexo e dinâmico, e esses modelos servem como aproximações para capturar certos aspectos do processamento neural. Embora possam não capturar toda a complexidade dos neurônios reais, eles fornecem ferramentas úteis para construir modelos computacionais e alcançar capacidades impressionantes de aprendizado de máquina.

Estudar diferentes modelos de neurônios, incluindo neurônios lineares, neurônios limiares, neurônios lineares retificados, neurônios sigmóides e neurônios binários estocásticos, nos permite entender várias propriedades e comportamentos computacionais. Esses modelos formam a base para a construção de redes neurais e nos permitem realizar diversas tarefas de aprendizado de máquina. Embora simplificados, eles oferecem informações valiosas sobre o funcionamento dos sistemas neurais.

Lecture 1.3 — Some simple models of neurons [Neural Networks for Machine Learning]
Lecture 1.3 — Some simple models of neurons [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...
 

Aula 1.4 — Um exemplo simples de aprendizado



Aula 1.4 — Um exemplo simples de aprendizado [Redes neurais para aprendizado de máquina]

Neste exemplo de aprendizado de máquina, exploraremos uma rede neural simples que aprende a reconhecer dígitos. Ao longo do processo, você testemunhará a evolução dos pesos usando um algoritmo básico de aprendizado.

Nosso foco é treinar uma rede direta para identificar formas manuscritas. A rede consiste em duas camadas: neurônios de entrada representando intensidades de pixel e neurônios de saída representando classes. O objetivo é que o neurônio de saída correspondente a uma forma específica se torne ativo quando essa forma é apresentada.

Cada pixel ativo "vota" nas formas das quais faz parte, e esses votos têm intensidades variadas. A forma com mais votos vence, desde que haja competição entre as unidades de produção. Iremos nos aprofundar neste aspecto competitivo em uma palestra posterior.

Para visualizar os pesos, precisamos de um display que possa acomodar milhares de pesos. Em vez de escrever os pesos em conexões individuais entre unidades de entrada e saída, criaremos pequenos mapas para cada unidade de saída. Esses mapas representam a força das conexões de pixels de entrada usando blobs preto e branco. A área de cada blob indica a magnitude, enquanto a cor representa o sinal da conexão.

Inicialmente, os pesos recebem pequenos valores aleatórios. Para melhorar os pesos, vamos apresentar dados à rede e treiná-la para ajustar os pesos de acordo. Quando uma imagem é mostrada, incrementamos os pesos dos pixels ativos para a classe correta. No entanto, para evitar que os pesos se tornem excessivamente grandes, também diminuímos os pesos dos pixels ativos para a classe que a rede supõe. Essa abordagem de treinamento orienta a rede a tomar as decisões corretas, em vez de se ater às suas tendências iniciais.

Depois de mostrar à rede várias centenas de exemplos de treinamento, observamos os pesos novamente. Eles começam a formar padrões regulares. Com mais exemplos de treinamento, os pesos continuam a mudar e eventualmente se estabilizam. Neste ponto, os pesos se assemelham a modelos para as formas. Por exemplo, os pesos que vão para a unidade "um" servem como um modelo para identificá-los. Da mesma forma, os pesos que entram na unidade "nove" se concentram na discriminação entre noves e setes com base na presença ou ausência de recursos específicos.

Vale a pena notar que este algoritmo de aprendizagem, devido à simplicidade da rede, só consegue atingir uma capacidade limitada de discriminar formas. Os pesos aprendidos funcionam efetivamente como modelos, e a rede determina o vencedor com base na sobreposição entre o modelo e a tinta. No entanto, essa abordagem é insuficiente quando confrontada com a complexidade das variações nos dígitos manuscritos. Para resolver isso, precisamos extrair recursos e analisar seus arranjos, pois a correspondência simples de modelos de formas inteiras não pode resolver o problema adequadamente.

Em resumo, o exemplo demonstra o treinamento de uma rede neural simples para reconhecer dígitos. Enquanto os pesos da rede evoluem e se assemelham a modelos para as formas, as limitações dessa abordagem tornam-se aparentes quando confrontadas com as intrincadas variações de dígitos manuscritos.

Lecture 1.4 — A simple example of learning [Neural Networks for Machine Learning]
Lecture 1.4 — A simple example of learning [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...