Visualizando MNIST: Uma Exploração de Redução de Dimensionalidade

– http://colah.github.io/posts/2014-10-Visualizing-MNIST/
Postado em 9 de outubro de 2014
MNIST, visualização de dados, aprendizagem automática de máquinas, incorporação de palavras, redes neurais, aprendizagem profunda

Em algum nível fundamental, ninguém entende a aprendizagem automática.
Não é uma questão de coisas muito complicadas. Quase tudo o que fazemos é fundamentalmente muito simples. Infelizmente, uma desvantagem humana inata interfere em nós, entendendo essas coisas simples.
Os humanos evoluíram para argumentar fluentemente cerca de duas e três dimensões. Com algum esforço, podemos pensar em quatro dimensões. A aprendizagem de máquinas muitas vezes exige que possamos trabalhar com milhares de dimensões – ou dezenas de milhares, ou milhões! Mesmo coisas muito simples tornam-se difíceis de entender quando você as faz em números muito altos de dimensões.
Raciocinar diretamente sobre esses grandes espaços dimensionais é apenas falta de esperança.
Como é frequentemente o caso, quando os seres humanos não conseguem fazer algo diretamente, construímos ferramentas para nos ajudar. Existe um campo inteiro, bem desenvolvido, denominado redução de dimensionalidade, que explora técnicas para traduzir dados de alta dimensão em dados dimensionais mais baixos. Também foi feito muito trabalho sobre o assunto intimamente relacionado de visualizar dados dimensionais elevados.
Essas técnicas são os blocos de construção básicos que precisaremos se quisermos visualizar a aprendizagem automática e a aprendizagem profunda especificamente. A minha esperança é que, através da visualização e observando mais diretamente o que realmente está a acontecer, podemos entender as redes neurais de maneira muito mais profunda e direta.
E assim, a primeira coisa na nossa agenda é familiarizar-nos com a redução da dimensionalidade. Para fazer isso, vamos precisar de um conjunto de dados para testar essas técnicas.

MNIST
MNIST é um conjunto simples de dados de visão por computador. Consiste em imagens de 28×28 pixels de dígitos manuscritos, tais como:

Cada ponto de dados MNIST, cada imagem, pode ser pensada como uma série de números que descrevem a escuridão de cada pixel. Por exemplo, podemos pensar em algo como:

Uma vez que cada imagem tem 28 por 28 pixels, obtemos uma matriz de 28×28. Podemos aplainar cada matriz em um vetor dimensional 28 * 28 = 784. Cada componente do vetor é um valor entre zero e um que descreve a intensidade do pixel. Assim, geralmente pensamos em MNIST como uma coleção de vetores de 784-dimensional.
Nem todos os vetores neste espaço dimensional 784 são dígitos MNIST. Os pontos típicos neste espaço são muito diferentes! Para ter uma noção de como se trata de um ponto típico, podemos escolher aleatoriamente alguns pontos e examiná-los. Em um ponto aleatório – uma imagem aleatória de 28×28 – cada pixel é aleatoriamente preto, branco ou algum tom de cinza. O resultado é que os pontos aleatórios parecem ruídos.

Imagens como MNIST digitas são muito raras. Enquanto os pontos de dados MNIST estão incorporados no espaço de 784 dimensões, eles vivem em um sub-espaço muito pequeno. Com alguns argumentos ligeiramente mais difíceis, podemos ver que eles ocupam um subespaço dimensional inferior.
As pessoas têm muitas teorias sobre o tipo de estrutura dimensional inferior MNIST, e dados semelhantes, têm. Uma das teorias populares entre pesquisadores de máquinas e aprendentes é a hipótese múltipla: MNIST é um colector dimensional baixo, varrendo e curvando-se através do seu espaço de encadernação de alta dimensão. Outra hipótese, mais associada à análise de dados topológicos, é que os dados como o MNIST consistem em manchas com protrusões semelhantes a tentáculos que se entrem no espaço circundante.
Mas ninguém realmente sabe, então vamos explorar!
O MNIST Cube
Podemos pensar nos pontos de dados MNIST como pontos suspensos em um cubo de 784 dimensões. Cada dimensão do cubo corresponde a um pixel particular. Os pontos de dados variam de zero a um de acordo com a intensidade de pixels. Em um lado da dimensão, existem imagens onde esse pixel é branco. Do outro lado da dimensão, existem imagens onde é preto. No meio, existem imagens onde é cinza.

Se pensarmos nessa maneira, ocorre uma questão natural. Como parece o cubo se olharmos para um rosto em duas dimensões? Como olhar para um globo de neve, vemos os pontos de dados projetados em duas dimensões, com uma dimensão correspondente à intensidade de um pixel particular e outra correspondente à intensidade de um segundo pixel. Examinar isso nos permite explorar MNIST de uma maneira muito crua.
Nesta visualização, cada ponto é um ponto de dados MNIST. Os pontos são coloridos com base em qual classe de dígito pertence o ponto de dados. Quando o rato passa sobre um ponto, a imagem desse ponto de dados é exibida em cada eixo. Cada eixo corresponde à intensidade de um pixel particular, como rotulado e visualizado como um ponto azul na imagem pequena ao lado dele. Ao clicar na imagem, você pode alterar qual pixel é exibido nesse eixo.

Explorando essa visualização, podemos ver alguns vislumbres da estrutura do MNIST. Olhando para os pixels p18,16 e p7,12 podemos separar muitos zeros para a parte inferior direita e um monte de noves para a parte superior esquerda. Olhando para os pixels p5,6 e p7,9 podemos ver um monte de dois no canto superior direito e três no canto inferior direito.
Apesar de pequenos sucessos como estes, não se pode realmente entender MNIST dessa maneira. As pequenas percepções parecem muito frágeis e parecem muito parecidos com sorte. A verdade é, simplesmente, que muito pouca estrutura da MNIST é visível nessas perspectivas. Você não consegue entender as imagens a olhar apenas dois pixels de cada vez.
Mas há muitas outras perspectivas das quais podemos observar o MNIST! Nessas perspectivas, ao invés de olhar um rosto diretamente, olhamos desde um ângulo.
O desafio é que precisamos escolher a perspectiva que queremos usar. Que ângulo queremos olhar horizontalmente? Que ângulo queremos olhar verticalmente? Felizmente, há uma técnica chamada Análise de Componentes Principais (ACP) que encontrará o melhor ângulo possível para nós. Com isso, queremos dizer que o ACP encontrará o ângulo que se espalha mais os pontos (captura a maior variedade possível).
Mas, o que significa um ângulo de um cubo de 784 dimensões? Bem, precisamos decidir para qual direção cada eixo do cubo deve inclinar-se: de um lado, para o outro ou em algum lugar intermediário?
Para ser concreto, as seguintes são imagens dos dois ângulos que a ACP escolhe. O vermelho representa a inclinação da dimensão de um pixel para um lado, azul para o outro.

Se um dígito MNIST destacar principalmente vermelho, ele acaba de um lado. Se ele destacar o azul, ele acaba em um lado diferente. O primeiro ângulo – o “primeiro componente principal” – será o nosso ângulo horizontal, empurrando uns (que destacam muito vermelho e pouco azul) para a esquerda e os zeros (que destacam muito azul e pouco vermelho) à direita.

Agora que sabemos qual é o melhor ângulo horizontal e vertical, podemos tentar olhar o cubo dessa perspectiva.
Esta visualização é muito parecida com a anterior, mas agora os eixos são fixos para exibir o primeiro e o segundo “componentes principais”, basicamente os ângulos de olhar os dados. Na imagem em cada eixo, o azul e vermelho são usados para denotar o que a “inclinação” é para esse pixel. A intensidade de pixels em regiões azuis empurra um ponto de dados para um lado, a intensidade de pixels nas regiões vermelhas nos empurra para o outro.

Visualizando MNIST com ACP
Embora muito melhor do que antes, ainda não é muito bom. Infelizmente, mesmo olhando os dados a partir do melhor ângulo, os dados MNIST não se encaixam bem para nós ver. É uma estrutura não trivial de alta dimensão, e esses tipos de projeções lineares simplesmente não vão cortá-lo.
Felizmente, temos algumas ferramentas poderosas para lidar com conjuntos de dados que são… não cooperativos.

Redução de Dimensionalidade Baseada em Otimização
O que consideramos um sucesso? O que significaria ter a visualização “perfeita” do MNIST? Qual deve ser nosso objetivo?
Uma propriedade realmente agradável seria se as distâncias entre os pontos na nossa visualização fossem as mesmas que as distâncias entre os pontos no espaço original. Se isso fosse verdade, estaríamos a capturar a geometria global dos dados.
Vamos ser um pouco mais precisos. Para quaisquer dois pontos de dados MNIST, xi e xj, existem duas noções de distância entre eles. Um é a distância entre eles no espaço original1 e um deles é a distância entre eles na nossa visualização. Usaremos di, j * para denotar a distância entre xi e xj no espaço original e di, j para denotar a distância entre xi e xj na nossa visualização. Agora podemos definir um custo:

Esse valor descreve o quão ruim é uma visualização. Basicamente diz: “É ruim que as distâncias não sejam as mesmas. Na verdade, é quadraticamente ruim. “Se é alto, isso significa que as distâncias são diferentes do espaço original. Se é pequeno, significa que eles são semelhantes. Se for zero, temos uma incorporação “perfeita”.
Isso soa como um problema de otimização! E os pesquisadores em profundidade sabem o que fazer com aqueles! Escolhemos um ponto de partida aleatório e aplicamos uma descida gradiente. 2

Visualizando MNIST com MDS
Esta técnica é chamada de dimensionamento multidimensional (ou MDS). Se você gosta, há uma descrição mais física do que está a acontecer. Primeiro, posicionamos aleatoriamente cada ponto em um plano. Em seguida, ligamos cada par de pontos com uma mola com o comprimento da distância original, d * i, j. Então, deixamos que os pontos se movam livremente e permitam que a física siga o curso!
Não conseguimos um custo de zero, é claro. Geralmente, as estruturas de alta dimensão não podem ser incorporadas em duas dimensões de forma a preservar as distâncias perfeitamente. Estamos a exigir o impossível! Mas, mesmo que não obtenhamos uma resposta perfeita, melhoramos bastante a incorporação aleatória original e chegamos a uma visualização decente. Podemos ver as diferentes classes começarem a se separar, especialmente aquelas.
Mapeamento de Sammon
Ainda assim, parece que devemos ser capazes de fazer muito melhor. Talvez devêssemos considerar as diferentes funções de custo? Existe um enorme espaço de possibilidades. Para começar, há muitas variações no MDS. Um tema comum são as funções de custo, enfatizando a estrutura local como mais importante para manter do que a estrutura global. Um exemplo muito simples disso é o Mapeamento de Sammon, definido pela função de custo:

No mapeamento de Sammon, nos esforçamos para preservar as distâncias entre os pontos próximos de entre aqueles que estão distantes. Se os dois pontos forem duas vezes mais próximos no espaço original que outros dois, é duas vezes mais importante manter a distância entre eles.

Visualizando MNIST com o Mapeamento de Sammon

Para MNIST, o resultado não é tão diferente. A razão tem a ver com uma propriedade bastante pouco intuitiva em relação a distâncias em dados de alta dimensão como o MNIST. Consideremos as distâncias entre alguns dígitos MNIST. Por exemplo, a distância entre os semelhantes, I e I, é:
d(I, I) = 4,53
Por outro lado, a diferença entre os pontos de dados muito diferentes, I e I, é:
d(9, 3) = 12,0
menos de três vezes d (I, I)!
Porque há tantas maneiras em que os pontos similares podem ser ligeiramente diferentes, a distância média entre os pontos similares é bastante alta. Por outro lado, à medida que você se afasta de um ponto, a quantidade de volume dentro dessa distância aumenta para um poder extremamente alto e, portanto, é provável que você encontre diferentes tipos de pontos. O resultado é que, no espaço de pixel, a diferença de distâncias entre pontos “semelhantes” e “diferentes” pode ser muito menor do que gostaríamos, mesmo em bons casos.

Visualização baseada em gráfico
Talvez, se o comportamento local é o que queremos que nossa incorporação preserve, devemos otimizar isso de forma mais explícita.
Considere um gráfico vizinho mais próximo do MNIST. Por exemplo, considere um gráfico (V, E) onde os nós são pontos de dados MNIST, e cada ponto está conectado aos três pontos mais próximos do espaço original.3 Esse gráfico é uma maneira simples para codificar a estrutura local e esquecer tudo o resto.
Dado esse gráfico, podemos usar algoritmos de layout de gráfico padrão para visualizar MNIST. Aqui, usaremos o desenho de gráfico direcionado por força: nós fingimos que todos os pontos estão a repelir partículas carregadas e que as bordas são molas. Isso nos dá uma função de custo:

O que minimizamos.

Visualizando MNIST como um gráfico

O gráfico descobre muita estrutura no MNIST. Em particular, parece encontrar as diferentes classes MNIST. Enquanto eles se sobrepõem, durante a otimização do layout do gráfico, podemos ver os conjuntos a deslizar uns sobre os outros. Eles são incapazes de evitar a sobreposição quando são incorporados no plano devido a conexões entre classes, mas a função de custo está pelo menos tentando separá-las.
Uma boa propriedade da visualização gráfica é que nos mostra explicitamente que pontos estão conectados aos outros pontos. Em visualizações anteriores, se vemos um ponto em um lugar estranho, não temos certeza se está apenas preso lá, ou se ele realmente deveria estar lá. A estrutura do gráfico evita isso. Por exemplo, se você olhar para o conjunto vermelho de zeros, você verá um único ponto azul, os seis, 6, entre eles. Você pode ver dos seus vizinhos que é suposto estar lá, e de olhar para ele, você pode ver que é, de fato, um artigo muito mal escrito seis que parece mais um zero.
Incorporação de vizinhança estocástica distribuída em t
A técnica final que desejo apresentar é a incorporação de vizinhança estocástica distribuída em t (t-SNE). Esta técnica é extremamente popular na comunidade de aprendizagem profunda. Infelizmente, a função de custo do t-SNE envolve alguma maquinaria matemática não trivial e exige algum esforço significativo para entender.
Mas, aproximadamente, o que o T-SNE tenta otimizar é preservar a topologia dos dados. Para cada ponto, ele constrói uma noção de que outros pontos são seus “vizinhos”, tentando fazer com que todos os pontos tenham o mesmo número de vizinhos. Então, tenta incorporá-los para que esses pontos tenham o mesmo número de vizinhos.
De certa forma, t-SNE é muito parecido com a visualização baseada em gráfico. Mas em vez de apenas ter pontos que são vizinhos (se houver uma vantagem) ou não vizinhos (se não houver uma vantagem), o T-SNE tem um espectro contínuo de ter pontos como vizinhos de diferentes extensões.
T-SNE muitas vezes é muito bem sucedido em revelar conjuntos e subclusões em dados.

Visualizando MNIST com t-SNE
O T-SNE faz um trabalho impressionante encontrando conjuntos e subclusões nos dados, mas é propenso a ficar preso em mínimos locais. Por exemplo, na seguinte imagem, podemos ver dois conjuntos de zeros (vermelhos) que não conseguem se juntar porque um conjunto de seis (azul) fica preso entre eles.

Uma série de truques podem nos ajudar a evitar esses mínimos mínimos. Em primeiro lugar, usar mais dados ajuda muito. Como essas visualizações são incorporadas em uma postagem de blog, elas só usam 1.000 pontos. Usar os pontos completos de 50.000 MNIST funciona muito melhor. Além disso, recomenda-se que um use recozimento simulado e selecione cuidadosamente uma série de hiperparamadores.
As parcelas T-SNE bem-feitas revelam muitos recursos interessantes do MNIST.

Um plano de MNIST de t-SNE
Um traço ainda mais legal pode se encontrar na página rotulada 2590, no papel t-SNE original, Maaten & Hinton (2008).
Não são apenas as classes que a T-SNE encontra. Olhemos mais de perto para aqueles.

Um enredo t-SNE dos MNIST
O agrupamento está esticado horizontalmente. À medida que olhamos os dígitos da esquerda para a direita, vemos um padrão consistente.

Eles se deslocam de encaminhados para frente, como I, em mais direto como I e, finalmente, ligeiramente para trás, inclinando-se, como I. Parece que em MNIST, o principal fator de variação em ambos está inclinando-se. Isso é provável porque o MNIST normaliza os dígitos de várias maneiras, centralizando-os e aumentando a escala. Depois disso, a maneira mais fácil de ser “distante” é girar e não se sobrepor muito.
Uma estrutura semelhante pode ser observada em outras classes, se você olhar o gráfico t-SNE novamente.
Visualização em três dimensões
Observando essas visualizações, às vezes há essa sensação de que eles estão implorando por outra dimensão. Por exemplo, observando a otimização de visualização do gráfico, pode-se ver que os conjuntos deslocam-se um do outro.
Na verdade, estamos a tentar comprimir essa estrutura de alta dimensão em duas dimensões. Parece natural pensar que haveria ganhos muito grandes de adicionar uma dimensão adicional. Se nada mais, pelo menos em três dimensões, uma linha que conecta dois conjuntos não divide o plano, impedindo outras conexões entre conjuntos.
Na seguinte visualização, construímos um gráfico vizinho mais próximo do MNIST, como anteriormente, e otimizamos a mesma função de custo. A única diferença é que agora existem três dimensões para colocá-lo dentro.

Visualizando o MNIST como um gráfico em 3D
(clique e arraste para girar)

A versão tridimensional, sem surpresa, funciona muito melhor. Os grupos estão bem separados e, enquanto estão emaranhados, não se sobrepõem.
Nesta visualização, podemos começar a ver por que é fácil conseguir uma precisão de 95% que classifica os dígitos MNIST, mas rapidamente se torna mais difícil depois disso. Você pode fazer um monte de pontos de classificação de terreno cortando as protrusões coloridas acima, os cachos de cada classe saindo. (Isso é mais ou menos o que uma máquina de vetor de suporte linear faz.4) Mas há algumas seções emaranhadas muito mais difíceis, especialmente no meio, que são difíceis de classificar.
Claro, poderíamos fazer qualquer uma das técnicas acima em 3D! Mesmo algo tão simples como o MDS é capaz de exibir um pouco em 3D.

Visualizando MNIST com MDS em 3D
(clique e arraste para girar)

Em três dimensões, o MDS faz um trabalho muito melhor separando as classes do que com duas dimensões.
E, claro, podemos fazer t-SNE em três dimensões.

Visualizando MNIST com t-SNE em 3D
(clique e arraste para girar)

Como o t-SNE coloca tanto espaço entre os grupos, beneficia muito menos da transição para três dimensões. Ainda é bastante bom, e torna-se muito mais com mais pontos.
Se você quiser visualizar dados dimensionais elevados, há, de fato, ganhos significativos para fazê-lo em três dimensões em cima de dois.
Conclusão
A redução da dimensão é uma área bem desenvolvida, e estamos apenas a arranhar a superfície aqui. Existem centenas de técnicas e variantes que não são mencionadas aqui. Encorajo-lhe a explorar!
É fácil entrar em uma mentalidade de pensar que uma dessas técnicas é melhor do que as outras, mas acho que elas são todas complementares. Não há como mapear dados de alta dimensão em baixas dimensões e preservar toda a estrutura. Então, uma abordagem deve fazer trade-offs, sacrificando uma propriedade para preservar outra. ACP tenta preservar a estrutura linear, a MDS tenta preservar a geometria global e t-SNE tenta preservar a topologia (estrutura de vizinhança).
Essas técnicas nos dão uma maneira de ganhar força na compreensão de dados de alta dimensão. Ao tentar diretamente compreender os dados de alta dimensão com a mente humana, é quase impossível, com essas ferramentas podemos começar a progredir.
Na próxima publicação, exploraremos a aplicação dessas técnicas a alguns tipos diferentes de dados – em particular, a visualizar representações de texto. Então, equipados com essas técnicas, mudaremos o nosso foco para a compreensão das próprias redes neurais, visualizando como elas transformam os dados de alta dimensão e técnicas de construção para visualizar o espaço das redes neurais. Se você estiver interessado, você pode inscrever-se no meu feed rss para que você veja essas postagens quando elas forem publicadas.
(Eu ficaria encantado de ouvir os seus comentários e pensamentos: você pode comentar a meio ou no final. Por erros de digitação, erros técnicos ou esclarecimentos que você gostaria de adicionar, você é livre para fazer um pedido de envio no github).

Reconhecimentos
Agradeço a hospitalidade do grupo de pesquisa de aprendizagem profunda do Google, que me fez como estagiário enquanto escrevi esse post e fiz o trabalho com que se baseou. Estou especialmente agradecido ao meu anfitrião de estágio, Jeff Dean.
Eu fui muito ajudado pelos comentários, conselhos e encorajamento de muitos Googlers, tanto no grupo de aprendizagem profunda quanto fora dele. Estes incluem: Greg Corrado, Jon Shlens, Matthieu Devin, Andrew Dai, Quoc Le, Anelia Angelova, Oriol Vinyals, Ilya Sutskever, Ian Goodfellow, Jutta Degener e Anna Goldie.
Fui fortemente influenciado pelos pensamentos, comentários e notas de Michael Nielsen, especialmente nas suas anotações sobre o trabalho de Bret Victor. Os pensamentos de Michael me convenceram de pensar seriamente sobre s visualizações interativas para entender a aprendizagem profunda.
Também fui ajudado pelo apoio de vários amigos não-Googlers, incluindo Yoshua Bengio, Dario Amodei, Eliana Lorch, Taren Stinebrickner-Kauffman e Laura Ball.
Esta publicação no blog foi possível graças a uma série de maravilhosas bibliotecas de Javascript, incluindo D3.js, MathJax, jQuery e três.js. Um grande agradecimento a todos que contribuíram para essas bibliotecas.

1. Temos uma série de opções para definir a distância entre esses vetores de alta dimensão. Para esta publicação, usaremos a distância L2,

2. Inicializamos as posições dos pontos por amostragem de um gaussiano em torno da origem. O nosso processo de otimização não é descendência de gradiente padrão. Em vez disso, usamos uma variante da descida gradiente momentum. Antes de adicionar o gradiente ao impulso, nós normalizamos o gradiente. Isso reduz a necessidade de ajuste de hiper parâmetros.
3. Observe que os pontos podem acabar conectados a mais, se eles são o vizinho mais próximo de muitos pontos.
4. Isso não é verdade. Uma SVM linear opera no espaço original. Esta é uma transformação não-linear do espaço original. Dito isto, isso sugere fortemente algo semelhante no espaço original, e então esperamos que algo parecido seja verdadeiro.

Sobre o autor

Sara Filipa

Comentar

por: Sara Filipa

Posts recentes

Comentários

Arquivos

Categorias

Meta