Vídeo: Mas o Que é uma Rede Neural?

Grant Sanderson • 3Blue1Brown • Boclips

Mas o Que é uma Rede Neural?

17:44

Transcrição do vídeo

Este é um três. Ele foi escrito e transmitido com uma resolução extremamente baixa de 28 por 28 pixels. Mas seu cérebro não tem dificuldade em reconhecê-lo como um três. E quero que você dedique um momento para apreciar o quão louco é que o cérebro possa fazer isso com tanta facilidade. Quero dizer isso, isso e isso também são reconhecíveis como três, mesmo que os valores específicos de cada pixel sejam muito diferentes de uma imagem para a seguinte. As células sensíveis à luz em seu olho que estão disparando quando você vê esses três são muito diferentes daquelas que são disparadas quando você vê esses três. Mas algo nesse seu córtex visual inteligente e louco resolve isso como representando a mesma ideia. Ao mesmo tempo, reconhecendo outras imagens como suas próprias ideias distintas.

Mas se eu lhe dissesse: “Ei! Sente-se e escreva para mim um programa que ocupa uma grade de 28 por 28 pixels como esta e gera um único número entre zero e 10, dizendo o que ele acha que é o algarismo.” Bem, a tarefa vai de comicamente trivial a assustadoramente difícil. A menos que você esteja vivendo sob uma rocha, acho que dificilmente preciso motivar a relevância e a importância do aprendizado de máquina e das redes neurais para o presente e o futuro. Mas o que eu quero fazer aqui é mostrar o que realmente é uma rede neural, assumindo que não há histórico. E para ajudar a visualizar o que está fazendo, não como um chavão, mas como uma peça de matemática. Minha esperança é que você saia sentindo que a estrutura em si é motivada. E para sentir que sabe o que significa quando lê ou ouve falar de uma rede neural, indicando ou não, aprendizado.

Este vídeo será dedicado ao componente de estrutura. E o seguinte abordará o aprendizado. O que faremos é montar uma rede neural que possa aprender a reconhecer algarismos manuscritos. Este é um exemplo clássico para a introdução do tópico. E estou feliz em manter o status quo aqui. Porque no final dos dois vídeos, quero apontar alguns bons recursos para você aprender mais. E onde você pode baixar o código que faz isso e jogar com ele no seu próprio computador. Existem muitas variantes de redes neurais. E, nos últimos anos, houve um boom nas pesquisas sobre essas variantes. Mas nesses dois vídeos introdutórios, você e eu vamos ver a forma mais simples, sem frescuras. Esse é um pré-requisito necessário para entender qualquer uma das variantes modernas mais poderosas. E confie em mim, ainda há muita complexidade para envolvermos nossas mentes.

Mas mesmo desta forma mais simples, ela pode aprender a reconhecer algarismos manuscritos, o que é uma coisa muito legal para um computador poder fazer. E, ao mesmo tempo, você verá como fica aquém de algumas esperanças que possamos ter para isso. Como o nome sugere, as redes neurais são inspiradas pelo cérebro. Mas vamos quebrar isso. Quais são os neurônios e em que sentido eles estão ligados? Agora, quando digo neurônio, tudo o que quero que você pense é algo que contém um número, especificamente um número entre zero e um. Realmente não é mais do que isso. Por exemplo, a rede começa com um monte de neurônios correspondentes a cada um dos 28 vezes 28 pixels da imagem de entrada, ou seja, 784 neurônios no total. Cada um deles possui um número que representa o valor da escala de cinza do pixel correspondente, variando de zero para pixels pretos até um para pixels brancos.

Esse número dentro do neurônio é chamado de ativação. E a imagem que você pode ter em mente aqui é que cada neurônio é iluminado quando sua ativação é um número alto. Então todos esses 784 neurônios compõem a primeira camada da nossa rede. Agora pulando para a última camada, isso tem 10 neurônios cada um representando um dos algarismos. A ativação desses neurônios, novamente um número entre zero e um, representa o quanto o sistema pensa que uma determinada imagem corresponde a um determinado algarismo. Existem também algumas camadas chamadas camadas ocultas, que por enquanto devem ser apenas um ponto de interrogação gigante sobre como esse processo de reconhecimento de algarismos será tratado. Nesta rede, escolhi duas camadas ocultas, cada uma com 16 neurônios. E é certo que esse é um tipo de escolha arbitrária. Para ser sincero, escolhi duas camadas com base em como quero motivar a estrutura em apenas um momento. E 16? Bem, esse foi apenas um bom número para caber na tela.

Na prática, há muito espaço para experimentos com uma estrutura específica aqui. Da maneira como a rede opera, as ativações em uma camada determinam as ativações da próxima camada. E, é claro, o coração da rede como mecanismo de processamento de informações se resume exatamente a como essas ativações de uma camada provocam ativações na próxima camada. Ele deve ser vagamente análogo ao modo como, em redes biológicas de neurônios, alguns grupos de neurônios disparando fazem com que outros disparem. Agora, a rede que estou mostrando aqui já foi treinada para reconhecer algarismos. E deixe-me mostrar o que quero dizer com isso. Isso significa que, se você alimentar uma imagem que ilumina todos os 784 neurônios da camada de entrada, de acordo com o brilho de cada pixel da imagem. Esse padrão de ativações causa algum padrão muito específico na próxima camada, o que causa algum padrão na camada seguinte. O que finalmente fornece algum padrão na camada de saída. E o neurônio mais brilhante dessa camada de saída é a escolha da rede, por assim dizer, para qual algarismo essa imagem representa.

E antes de começar a matemática sobre como uma camada influencia a próxima ou como o treinamento funciona, vamos apenas falar sobre porque é razoável esperar que uma estrutura em camadas como essa se comporte de maneira inteligente. O que estamos esperando aqui? Qual é a melhor esperança para o que essas camadas intermediárias podem estar fazendo? Bem, quando você ou eu reconhecemos algarismos, reunimos vários componentes. Um nove tem um laço no topo e uma linha à direita. Um oito também tem um loop em cima, mas é emparelhado com outro loop embaixo. Um quatro basicamente se divide em três linhas específicas, e coisas assim. Agora, em um mundo perfeito, podemos esperar que cada neurônio na penúltima camada corresponda a um desses subcomponentes. Sempre que você alimenta uma imagem com, digamos, um loop no topo como um nove ou um oito, há um neurônio específico cuja ativação será próxima de um.

E não quero dizer esse loop específico de pixels. A esperança seria que qualquer padrão geralmente em loop no topo desencadeie esse neurônio. Dessa forma, passar da terceira camada para a última exige apenas aprender qual combinação de subcomponentes corresponde a quais algarismos. Obviamente, isso apenas chuta o problema para debaixo do caminho. Porque, como você reconheceria esses subcomponentes ou até aprenderia quais deveriam ser os subcomponentes certos? E ainda nem falei sobre como uma camada influencia a próxima. Mas corra comigo por um momento. O reconhecimento de um loop também pode ser dividido em subproblemas. Uma maneira razoável de fazer isso seria primeiro reconhecer as várias pequenas arestas que o compõem.

Da mesma forma, uma linha longa como a que você pode ver nos algarismos um, quatro ou sete, bem, isso é realmente apenas uma borda longa. Ou talvez você pense nisso como um certo padrão de várias arestas menores. Talvez nossa esperança seja que cada neurônio na segunda camada da rede corresponda às várias pequenas arestas relevantes. Talvez quando uma imagem como essa apareça, acenda todos os neurônios associados a cerca de oito a dez pequenas arestas específicas. O que, por sua vez, ilumina os neurônios associados ao loop superior e a uma longa linha vertical. E esses acendem o neurônio associado a nove. Se é isso que a nossa rede final realmente faz é outra questão. Uma que voltarei assim que vermos como treinar a rede.

Mas é uma esperança que possamos ter, um tipo de objetivo com uma estrutura em camadas como essa. Além disso, você pode imaginar como ser capaz de detectar bordas e padrões como esse seria realmente útil para outras tarefas de reconhecimento de imagem. E mesmo além do reconhecimento de imagem, existem todos os tipos de coisas inteligentes que você pode querer fazer que se dividem em camadas de abstração. Analisar a fala, por exemplo, envolve pegar o áudio bruto e escolher sons distintos que se combinam para formar certas sílabas. Que se combinam para formar palavras, que se combinam para formar frases e pensamentos mais abstratos, etc. Mas voltando a como isso realmente funciona, imagine-se agora projetando como exatamente as ativações em uma camada podem determinar as ativações na próxima. O objetivo é ter algum mecanismo que possa combinar pixels em arestas ou arestas em padrões ou padrões em algarismos.

E para ampliar um exemplo muito específico, digamos que a esperança é que um neurônio em particular na segunda camada compreenda se a imagem tem uma borda nesta região aqui. A questão em questão é: quais parâmetros a rede deve ter? Quais mostradores e botões você deve ajustar para que seja expressivo o suficiente para capturar esse padrão ou qualquer outro padrão de pixel? Ou o padrão em que várias arestas podem fazer um loop e outras coisas assim? Bem, o que faremos é atribuir um peso a cada uma das conexões entre nosso neurônio e os neurônios da primeira camada. Esses pesos são apenas números. Em seguida, pegue todas essas ativações da primeira camada e calcule sua soma ponderada de acordo com esses pesos.

Acho útil pensar nesses pesos como sendo organizados em uma pequena grade própria. E usarei pixels verdes para indicar pesos positivos e vermelhos para indicar pesos negativos, onde o brilho desse pixel é uma representação solta do valor do peso. Agora, se fizermos com que os pesos associados a quase todos os pixels sejam zero, com exceção de alguns pesos positivos nessa região que nos interessam. Tomar a soma ponderada de todos os valores de pixel realmente significa somar os valores do pixel apenas na região com a qual nos preocupamos. E, se você realmente quiser saber se há uma vantagem aqui, o que você pode fazer é ter alguns pesos negativos associados aos pixels circundantes. A soma é maior quando os pixels do meio são claros, mas os pixels ao redor são mais escuros.

Quando você calcula uma soma ponderada como essa, pode aparecer com qualquer número. Mas para essa rede, o que queremos é que as ativações tenham algum valor entre zero e um. Portanto, uma coisa comum a se fazer é bombear essa soma ponderada para alguma função que compense a linha do número real no intervalo entre zero e um. E uma função comum que faz isso é chamada de função sigmoide, também conhecida como curva logística. Basicamente, entradas muito negativas acabam perto de zero, entradas muito positivas acabam perto de um. E isso aumenta constantemente em torno do zero de entrada. Portanto, a ativação do neurônio aqui é basicamente uma medida de quão positiva é a soma ponderada relevante.

Mas talvez você não queira que o neurônio acenda quando a soma ponderada for maior que zero. Talvez você só queira que ele esteja ativo quando a soma for maior que, digamos, 10. Ou seja, você deseja que haja algum viés para que ela fique inativa. O que faremos então é adicionar outro número como menos 10 a essa soma ponderada antes de substituí-lo à função esmagada sigmoide. Esse número adicional é chamado de viés. Portanto, os pesos indicam o padrão de pixel que este neurônio na segunda camada está captando. E o viés indica o quão alto deve ser a soma ponderada antes que o neurônio comece a ficar significativamente ativo. E isso é apenas um neurônio. Todos os outros neurônios nesta camada serão conectados a todos os 784 pixels da primeira camada. E cada uma dessas 784 conexões tem seu próprio peso associado. Além disso, cada um tem algum viés, outro número que você adiciona à soma ponderada antes de esmagá-la com o sigmoide.

E isso é muito para se pensar! Com essa camada oculta de 16 neurônios, são 784 vezes 16 pesos, além de 16 vieses. E tudo isso são apenas as conexões da primeira camada para a segunda. As conexões entre as outras camadas também têm vários pesos e desvios associados a elas. Tudo dito e feito, essa rede possui quase exatamente 13000 pesos e desvios totais, 13000 botões e mostradores que podem ser ajustados e girados para fazer com que essa rede se comporte de maneiras diferentes. Portanto, quando falamos de aprendizado, o que se refere é fazer com que o computador encontre uma configuração válida para todos esses muitos e muitos números. Para que ele realmente resolva o problema em questão.

Um experimento mental que é ao mesmo tempo divertido e meio horripilante é imaginar sentar e definir todos esses pesos e viés à mão. Ajustar propositadamente os números para que a segunda camada apareça nas bordas. A terceira camada retoma os padrões, etc. Pessoalmente, acho isso satisfatório, em vez de apenas ler a rede como uma caixa preta total. Porque quando a rede não tem o desempenho esperado. Se você construiu um pouco de relação com o que esses pesos e tendências realmente significam, você tem um ponto de partida para experimentar como alterar a estrutura para melhorar. Ou, quando a rede funciona, mas não pelos motivos que você poderia esperar. Investigar o que os pesos e viés estão fazendo é uma boa maneira de desafiar suas suposições e realmente expor todo o espaço de possíveis soluções.

A propósito, a função real aqui é um pouco complicada de escrever, você não acha? Então, deixe-me mostrar uma maneira mais compacta de observar essas conexões. É assim que você vê se optar por ler mais sobre redes neurais. Organize todas as ativações de uma camada em uma coluna como um vetor. Em seguida, organize todos os pesos como uma matriz, onde cada linha dessa matriz corresponde às conexões entre uma camada e um neurônio específico na próxima camada. O que isso significa é que calcular a soma ponderada das ativações na primeira camada de acordo com esses pesos corresponde a um dos termos no produto vetorial de matriz de tudo o que temos à esquerda aqui.

A propósito, grande parte do aprendizado de máquina se resume a ter uma boa compreensão da álgebra linear. Portanto, para qualquer um de vocês que queira uma boa compreensão visual para matrizes e o que significa multiplicação de vetores matriciais, dê uma olhada nas séries que fiz na álgebra linear, especialmente no capítulo três. Voltando à nossa expressão, em vez de falar sobre adicionar o viés a cada um desses valores independentemente. Representamos isso organizando todos esses vieses em um vetor e adicionando o vetor inteiro ao produto vetorial da matriz anterior. Como passo final, enrolarei um sigmoide por fora aqui. E o que isso deve representar é que você aplicará a função sigmoide a cada componente específico dentro do vetor resultante.

Então, depois de escrever essa matriz de peso e esses vetores como seus próprios símbolos. Você pode comunicar a transição completa das ativações de uma camada para a seguinte em uma pequena expressão extremamente firme e clara. E isso torna o código relevante muito mais simples e muito mais rápido, pois muitas bibliotecas otimizam a multiplicação de matrizes. Lembra-se de como eu disse anteriormente que esses neurônios são simplesmente coisas que contêm números? Bem, é claro que os números específicos que eles contêm dependem da imagem que você alimenta. Portanto, é realmente mais preciso pensar em cada neurônio como uma função. Um que capta as saídas de todos os neurônios da camada anterior e devolve um número entre zero e um.

Realmente, toda a rede é apenas uma função, que recebe 784 números como entrada e devolve 10 números como saída. É uma função absurdamente complicada. Uma que envolve 13000 parâmetros nas formas desses pesos e viés que captam certos padrões. E isso envolve a iteração de muitos produtos vetoriais matriciais e a função esmagada sigmoide. Mas é apenas uma função, no entanto. E de certa forma, é meio tranquilizador que pareça complicado. Quero dizer, se fosse mais simples, que esperança teríamos de enfrentar o desafio de reconhecer algarismos? E como ela aceita esse desafio? Como essa rede aprende os pesos e vieses apropriados apenas olhando os dados? Bem, é isso que vou mostrar no próximo vídeo.

Para encerrar as coisas, tenho comigo Lisha Li, que fez seu doutorado no lado teórico do aprendizado profundo. E quem atualmente trabalha em uma empresa de capital de risco chamada Amplify Partners, que gentilmente forneceu parte do financiamento para este vídeo. Então, Lisha, uma coisa que acho que devemos mencionar rapidamente é essa função sigmoide. Pelo que entendi, as redes iniciais usavam isso para compactar a soma ponderada relevante nesse intervalo entre zero e um. Você sabe, meio que motivado por essa analogia biológica dos neurônios, sendo inativos ou ativos.

LISHA: Exatamente.

LOCUTOR: Mas relativamente poucas redes modernas realmente não usam mais sigmoides. É um pouco da velha escola, certo?

LISHA: Sim, ou melhor, ReLU parece ser muito mais fácil de treinar.

LOCUTOR: E ReLU significa unidade linear retificada.

LISHA: Sim, é esse tipo de função em que você está usando um máximo de zero e 𝑎, onde 𝑎 é dado pelo que você estava explicando no vídeo. E o que isso motivou foi, em parte, uma analogia biológica de como os neurônios seriam ativados ou não. E assim, se ele ultrapassar um certo limite, seria a função de identidade. Mas se isso não acontecesse, simplesmente não seria ativado, portanto, seria zero. Então é uma simplificação. O uso de sigmoides não ajudou no treinamento. Ou, foi muito difícil treinar em algum momento, e as pessoas apenas experimentaram o ReLU. E isso funcionou muito bem para essas redes neurais incrivelmente profundas.

LOCUTOR: Ok! Obrigado Lisha.

A Nagwa usa cookies para garantir que você tenha a melhor experiência em nosso site. Saiba mais sobre nossa Política de privacidade.