Overview sobre Deep Neural Networks (Redes Neurais Artificiais em Profundidade)

No Random Ponderings tem um overview (que já é quase uma introdução completa) sobre Redes Neurais Artificiais em Profundidade.

Esse tema não é relativamente novo, mas tem tomado um grande espaço na literatura atual devido ao fato que essa técnica vem solucionando importantes problemas ligados à classificação, principalmente em relação à aproximação por imagens.

Essas redes nada mais são do que redes em que os parâmetros de entrada na rede são codificados em que não é somente o atributo é modelado, mas sub-conjuntos de atributo-valor são introduzidos na rede; e posteriormente entre 20-60 camadas escondidas (camadas intermediárias) são introduzidas para treinamento da rede e ajuste do calculo dos pesos.

Abaixo algumas heurísticas de como treinar as RNA’s em Profundidade:

  • Get the data: Make sure that you have a high-quality dataset of input-output examples that is large, representative, and has relatively clean labels. Learning is completely impossible without such a dataset.
  • Preprocessing: it is essential to center the data so that its mean is zero and so that the variance of each of its dimensions is one. Sometimes, when the input dimension varies by orders of magnitude, it is better to take the log(1 + x) of that dimension. Basically, it’s important to find a faithful encoding of the input with zero mean and sensibly bounded dimensions. Doing so makes learning work much better. This is the case because the weights are updated by the formula: change in wij \propto xidL/dyj (w denotes the weights from layer x to layer y, and L is the loss function). If the average value of the x’s is large (say, 100), then the weight updates will be very large and correlated, which makes learning bad and slow. Keeping things zero-mean and with small variance simply makes everything work much better.
  • Minibatches: Use minibatches. Modern computers cannot be efficient if you process one training case at a time. It is vastly more efficient to train the network on minibatches of 128 examples, because doing so will result in massively greater throughput. It would actually be nice to use minibatches of size 1, and they would probably result in improved performance and lower overfitting; but the benefit of doing so is outweighed the massive computational gains provided by minibatches. But don’t use very large minibatches because they tend to work less well and overfit more. So the practical recommendation is: use the smaller minibatch that runs efficiently on your machine.
  • Gradient normalization: Divide the gradient by minibatch size. This is a good idea because of the following pleasant property: you won’t need to change the learning rate (not too much, anyway), if you double the minibatch size (or halve it).
  • Learning rate schedule: Start with a normal-sized learning rate (LR) and reduce it towards the end.
    • A typical value of the LR is 0.1. Amazingly, 0.1 is a good value of the learning rate for a large number of neural networks problems. Learning rates frequently tend to be smaller but rarely much larger.
    • Use a validation set —- a subset of the training set on which we don’t train — to decide when to lower the learning rate and when to stop training (e.g., when error on the validation set starts to increase).
    • A practical suggestion for a learning rate schedule: if you see that you stopped making progress on the validation set, divide the LR by 2 (or by 5), and keep going. Eventually, the LR will become very small, at which point you will stop your training. Doing so helps ensure that you won’t be (over-)fitting the training data at the detriment of validation performance, which happens easily and often. Also, lowering the LR is important, and the above recipe provides a useful approach to controlling via the validation set.
  • But most importantly, worry about the Learning Rate. One useful idea used by some researchers (e.g., Alex Krizhevsky) is to monitor the ratio between the update norm and the weight norm. This ratio should be at around 10-3. If it is much smaller then learning will probably be too slow, and if it is much larger then learning will be unstable and will probably fail.
  • Weight initialization. Worry about the random initialization of the weights at the start of learning.
    • If you are lazy, it is usually enough to do something like 0.02 * randn(num_params). A value at this scale tends to work surprisingly well over many different problems. Of course, smaller (or larger) values are also worth trying.
    • If it doesn’t work well (say your neural network architecture is unusual and/or very deep), then you should initialize each weight matrix with the init_scale / sqrt(layer_width) * randn. In this case init_scale should be set to 0.1 or 1, or something like that.
    • Random initialization is super important for deep and recurrent nets. If you don’t get it right, then it’ll look like the network doesn’t learn anything at all. But we know that neural networks learn once the conditions are set.
    • Fun story: researchers believed, for many years, that SGD cannot train deep neural networks from random initializations. Every time they would try it, it wouldn’t work. Embarrassingly, they did not succeed because they used the “small random weights” for the initialization, which works great for shallow nets but simply doesn’t work for deep nets at all. When the nets are deep, the many weight matrices all multiply each other, so the effect of a suboptimal scale is amplified.
    • But if your net is shallow, you can afford to be less careful with the random initialization, since SGD will just find a way to fix it.

    You’re now informed. Worry and care about your initialization. Try many different kinds of initialization. This effort will pay off. If the net doesn’t work at all (i.e., never “gets off the ground”), keep applying pressure to the random initialization. It’s the right thing to do.

  • If you are training RNNs or LSTMs, use a hard constraint over the norm of the gradient (remember that the gradient has been divided by batch size). Something like 15 or 5 works well in practice in my own experiments. Take your gradient, divide it by the size of the minibatch, and check if its norm exceeds 15 (or 5). If it does, then shrink it until it is 15 (or 5). This one little trick plays a huge difference in the training of RNNs and LSTMs, where otherwise the exploding gradient can cause learning to fail and force you to use a puny learning rate like 1e-6 which is too small to be useful.
  • Numerical gradient checking: If you are not using Theano or Torch, you’ll be probably implementing your own gradients. It is easy to make a mistake when we implement a gradient, so it is absolutely critical to use numerical gradient checking. Doing so will give you a complete peace of mind and confidence in your code. You will know that you can invest effort in tuning the hyperparameters (such as the learning rate and the initialization) and be sure that your efforts are channeled in the right direction.
  • If you are using LSTMs and you want to train them on problems with very long range dependencies, you should initialize the biases of the forget gates of the LSTMs to large values. By default, the forget gates are the sigmoids of their total input, and when the weights are small, the forget gate is set to 0.5, which is adequate for some but not all problems. This is the one non-obvious caveat about the initialization of the LSTM.
  • Data augmentation: be creative, and find ways to algorithmically increase the number of training cases that are in your disposal. If you have images, then you should translate and rotate them; if you have speech, you should combine clean speech with all types of random noise; etc. Data augmentation is an art (unless you’re dealing with images). Use common sense.
  • Dropout. Dropout provides an easy way to improve performance. It’s trivial to implement and there’s little reason to not do it. Remember to tune the dropout probability, and to not forget to turn off Dropout and to multiply the weights by (namely by 1-dropout probability) at test time. Also, be sure to train the network for longer. Unlike normal training, where the validation error often starts increasing after prolonged training, dropout nets keep getting better and better the longer you train them. So be patient.
  • Ensembling. Train 10 neural networks and average their predictions. It’s a fairly trivial technique that results in easy, sizeable performance improvements. One may be mystified as to why averaging helps so much, but there is a simple reason for the effectiveness of averaging. Suppose that two classifiers have an error rate of 70%. Then, when they agree they are right. But when they disagree, one of them is often right, so now the average prediction will place much more weight on the correct answer. The effect will be especially strong whenever the network is confident when it’s right and unconfident when it’s wrong.


Overview sobre Deep Neural Networks (Redes Neurais Artificiais em Profundidade)

Redes Neurais Disjuntivas

O paper é seminal (ou seja precisa ser revisado com um pouco mais de cautela), mas representa um bom avanço na utilização das RNAs, tendo em vista que as Random Forests (Florestas Aleatórias) e as Support Vector Machines (Máquinas de Vetor de Suporte) estão apresentando resultados bem melhores, academicamente falando.

Abaixo o resumo do artigo:

Artificial neural networks are powerful pattern classifiers; however, they have been surpassed in accuracy by methods such as support vector machines and random forests that are also easier to use and faster to train. Backpropagation, which is used to train artificial neural networks, suffers from the herd effect problem which leads to long training times and limit classification accuracy. We use the disjunctive normal form and approximate the boolean conjunction operations with products to construct a novel network architecture. The proposed model can be trained by minimizing an error function and it allows an effective and intuitive initialization which solves the herd-effect problem associated with backpropagation. This leads to state-of-the art classification accuracy and fast training times. In addition, our model can be jointly optimized with convolutional features in an unified structure leading to state-of-the-art results on computer vision problems with fast convergence rates. A GPU implementation of LDNN with optional convolutional features is also available.


Redes Neurais Disjuntivas

Aprendizado de Máquina com Docker


O Docker é uma plataforma aberta para desenvolvimento e compartilhamento de plataformas distribuídas que podem servir desde para simular implementações de aplicativos ou software; ou mesmo para emular máquinas virtuais.

Esta biblioteca do jetpack contém uma série de scripts para implementação de aprendizado de máquina utilizando a engine do Docker.

Aprendizado de Máquina com Docker

O segredo de Luiza – Uma análise de dados antológica

Este post é uma das análises de dados mais antológicas que eu já vi na blogosfera. Os comentários são sensacionais e mostra que os dados serão sempre mais consistentes que vieses, ideologias, achismo, palpiterismo, etc.

O segredo de Luiza – Uma análise de dados antológica

Estudo Randomizado Controlado: Poderoso, mas apenas se usado da forma correta.

Apesar desse artigo do Jon Jachimowicz falar essencialmente de Economia Comportamental, grande parte do que foi dito sobre ensaio clínico randomizado aplica-se à mineração de dados, especialmente tratando-se de amostragem e Uplift Modeling.

O autor enfatiza três elementos desse tipo de estudo que são (a) uma necessidade de maior sofisticação dos grupos de controle, (b) mais cautela na consideração de outros comportamentos que afetem o estudo, e (c) uma melhor conceitualização dos efeitos de longo prazo.

Os ensaios utilizando esta metodologia apresentam uma robustez relativamente alta, particularmente no que diz respeito à minimização do efeito da aleatoriedade no resultado final dos estudos.

Essa robustez foi tratada pelo Médico José Carlos Souto do blog da Dieta Paleolítica e Low-Carb, em relação aos graus de evidência científica:

  • A evidência que tem menor valor é a opinião pessoal. Afinal, opinião todo mundo tem, e o papel aceita qualquer coisa. Quando, porém, não há outros dados na literatura médica, aceita-se a opinião de um especialista como uma evidência provisória.
  • A seguir, vêm os relatos de caso. Consistem no relato de uma série de casos, a fim de que se possam extrair dados estatísticos sobre determinada doença/circunstância. Qual a idade média das pessoas com aquela doença, qual o sexo e a etnia das pessoas?
  • A seguir, vêm os estudos de caso-controle, nos quais o investigador pega um grupo de pessoas com determinada doença e compara com outro grupo de pessoas que não tenham a doença.
  • A seguir, vêm os estudos de coorte, na qual se obtém dados (exames, questionários, etc) de um grande número de pessoas, e os acompanha por vários anos a fim de identificar quem desenvolve doenças, de forma a identificar possível fatores de risco no passado.
  • A seguir, vem o ensaio clínico randomizado, o padrão-ouro da evidência em medicina, no qual um grande número de pessoas é “randomizada” (isto é, sorteada) para dois ou mais grupos; em geral, um grupo é submetido a uma intervenção (um remédio, uma dieta), e o outro grupo serve como controle. O sorteio garante que os grupos sejam semelhantes entre si em TUDO, exceto na variável sendo testada. Este é o único tipo de estudo capaz de sugerir fortemente relações de causa e efeito. É este o grau de evidência dos estudos que provam que a redução da gordura na dieta não traz benefício (clique aqui).
  • Por fim, no topo da cadeia alimentar da evidência científica, vem a revisão sistemática de ensaios clínicos randomizados. Afinal, por puro acaso, um ensaio clínico randomizado pode achar um resultado que não seja real – uma flutuação estatística aleatória. Mas quando você tem, digamos, DEZ ensaios clínicos randomizados que tratam sobre o mesmo tema, uma revisão sistemática e metanálise pode combinar matematicamente os dados de TODOS eles, o que empresta a esta análise um peso superior ao dos estudos isolados. Por este motivo, a revisão sistemática epitomiza o mais alto nível de evidência científica.

Screenshot 2013-09-04 at 21.23.28

Nem é preciso ver muito longe pra ver que essas definições são importantes para o Data Miner devido ao simples fato de que em muitos dos estudos de natureza contrastiva (e.g. comparação de produtos, estudos de ações de marketing por canal para mensuração real de efetividade, influências de variáveis específicas em personas em uma base de clientes) sem uma metodologia nem algoritmos, nem técnicas, nem pré-processamento de dados vão conseguir obter um resultado próximo da realidade.

Sobre a forma de realizar esses estudos o autor diz:

One of the key elements of an RCT is the comparison between an intervention group and a control group. That is, when researchers hypothesize that one group is going to benefit from a given intervention, they compare the behavior of that intervention group to that of a group that did not receive the intervention. Although this rationale carries intuitive appeal, it overlooks the fact that a difference from the no-intervention group does not necessarily suggest that the intervention was successful. Take the case of medicinal research, where the intervention group is often instead compared to a placebo (a sugar pill) because extensive research shows that merely giving a patient a pill carries positive intervention effects. In fact, much medicinal research goes a step further, additionally comparing an intervention condition to the best currently known intervention. If an intervention remains better than these two control conditions, then one can be much more confident in claiming that it truly is effective. A no-intervention condition is therefore not a good control condition on its own. In particular, to be more certain about the validity of an approach, the intervention condition should be compared to three adequate control conditions, consisting of a no-intervention group, a placebo group, and a best-currently-available-intervention group.

Em outras palavras: nas basta saber se a solução é boa, mas sim se ela é boa comparada com as demais soluções já existentes.

Este parágrafo fala a respeito da consideração de outros efeitos no comportamento do grupo de controle:

Consequently, we need to think more about what other behaviors may be affected by an intervention and then determine the appropriate design to best measure the effects.

Pegando o gancho do que o autor colocou, um dos erros mais crassos em relação à análise de dados é a não-observância de outros fatores que possam ter influenciado o resultado como estacionariedade, aspectos ligados a sazonalidade (que pode ser cíclica ou não cíclica como essa análise sensacional mostrou), ou ate mesmo aspectos exógenos (que estão além do estudo como uma outra posologia ou questões de terapias auxiliares no caso dos casos clínicos) que podem conduzir a uma tomada de decisão ruim, ou mesmo fortalecer vieses cognitivos como o viés de confirmação que decorre de uma associação ilusória.

Desta forma qualquer experimento ou estudo que for conduzido usando ensaio clínico randomizado, ou metodologia que simule esse design de experimentos deve levar em consideração um rigor no acompanhamento dos resultados e no contraste das soluções ou resultados encontrados.

Estudo Randomizado Controlado: Poderoso, mas apenas se usado da forma correta.

Caudas longas, curtose e risco

O Matt Bogard escreve um pequeno post com essas questões, e aponta algumas referências.

O entendimento do que é Curtose (que é proveniente da estatística) é de fundamental importância em estudos para mensuração de amplitude de valores de uma variável específica; especialmente se esses estudos forem ligados a questões ligadas a probabilidade.

They recommend that kurtosis be defined as “the location- and scale-free movement of probability mass from the shoulders of a distribution into its center and tails. In particular, this definition implies that peakedness and tail weight are best viewed as components [emphasis mine] of kurtosis…. This definition is necessarily vague because the movement can be formalized in many ways” (p. 116). In other words, the peaks and tails of a distribution contribute to the value of the kurtosis, but so do other features.

The tail of the distribution is the most important contributor. Although Balanda and MacGillivray do not mention it, the kurtosis is a non-robust statistic that can be severely influenced by the value of a single outlier. For example, if you choose 999 observations from a normal distribution, the sample kurtosis will be close to 0. However, if you add a single observation that has the value 100, the sample kurtosis jumps to more than 800!

Caudas longas, curtose e risco

Lições da competição Kaggle inClass

Muito já foi falado do Kaggle aqui, mas um aspecto que eu acho extremamente positivo neste site de competições em aprendizado de máquina é que sempre há algumas formas bem criativas de resolução de problemas ligados à predição e de modelos classificadores.

Neste post do No Free Hunch um time vencedor postou alguns de seus métodos, e a lição principal que fica é a mesma que o Frank Harrell fala em seu excelente livro  que é de sempre olhar os dados.

A seguir alguns pontos fortes da entrevista sobre os métodos utilizados.

Sobre os métodos de processamento inicial dos dados

[…]From the very beginning, our top priority was to develop useful features. Knowing that we would learn more powerful statistical learning methods as our Stanford course progressed, we made sure that we had the features ready so we would be able apply various models to them quickly and easily. […]

[…]When we later applied the boosted decision trees model, we derived additional predictors that expressed the variance in the number of subscriptions bought – theorizing that the decision tree would be more easily able to separate “stable” accounts from “unstable” ones.

We created 277 features in the end, which we applied in different combinations. Surprisingly, our final model used only 18 of them.[…]

Sobre os métodos de aprendizado supervisionado utilizados

[…]Most importantly – and from the very beginning – we used 10-fold cross validation error as the metric to compare different learning methods and for optimization within models.

We started with multiple linear regression models. These simple models helped us become familiar with the data while we concentrated our initial efforts on preparing features for later use.[…]

Sobre o que foi utilizado como técnica

[…]We didn’t have much luck with SVM, BART and KNN. Perhaps we did not put enough effort into that, but since we already had very good results from using boosted trees, the bar was already quite high. Our biggest effort soon turned to tuning the boosted regression tree model parameters.

Using cross validation error, we tuned the following parameters: number of trees, bagfrac, shrinkage, and depth. We then tuned the minobinsnode parameter – we saw significant improvements when adjusting the parameter downwards from its default setting.

Our tuning process was both manual and automated. We wrote R scripts that randomly changed the parameters and set of predictors as then computed the 10-fold cross-validation error on each permutation. But these scripts were usually used only as a guide for approaches that we then further investigated manually. We used this as a kind of modified forward selection process.[…]

Lições da competição Kaggle inClass

Diferença entre Data Mining (Mineração de Dados) e Machine Learning (Aprendizado de Máquina)

Neste post do ARE os autores fazem uma tabela que se não representa 100% do que são essas duas disciplinas tão interligadas, ajuda ao menos colocar um pouco de luz na discussão.

Parâmetro Data Mining (Mineração de Dados) Machine Learning (Aprendizado de Máquina)
Definição Processo de extração de informação de um conjunto de dados e transformação de uma estrutura entendível para posterior uso. Tem como objetivo a construção e estudo de sistemas que podem aprender com os dados.
Foco Tem o foco na descoberta de propriedades desconhecidas dos nos dados. Tem foco na predição, baseado em características conhecidas e aprendidas pelos dados de treinamento.
Tamanho da Base de Dados É um processo automático ou semi-automático para performar em bases com grandes quantidades de dados. É geralmente performada em bases de dados pequenas para o aumento da acurácia.
Tipos Regras de Associação, Classificação,  Clustering (Agrupamento), Padrões Sequenciais, Sequência de Similaridade Supervisionado, Não-Supervisionado, Reforço
Relacionamento A Mineração de Dados usa diversas técnicas provenientes de Aprendizado de Máquina, mas com objetivos distintos. O Aprendizado de Máquina também usa técnicas de mineração de dados como “Aprendizado Não-Supervisonado” ou como “Passo de Pré-Processamento” para melhoria do modelo de aprendizado.
Aplicações Previsão, Classificação, Associação, Clustering (Agrupamento), Geração de Sequências Automação de Controle de Acesso de Funcionários, Proteção da Fauna, Predição de tempo de espera em salas de emergência, Identificação de falha cardíaca
Exemplos de Softwares Carrot2, GATE, UIMA, Weka, NLTK, Torch etc. Apache Mahout ,ELKI, H2O, OpenCV, OpenNN, Weka, MATLAB etc.


Diferença entre Data Mining (Mineração de Dados) e Machine Learning (Aprendizado de Máquina)

Comparação entre R e Python utilizando Florestas Aleatórias e Classificação

Neste post do blog do Yhat tem o código, os dados e os resultados.

Pessoalmente gosto muito da abordagem dos autores em comparação de classificadores usando as métricas de Acurácia, Erro Quadrático Médio e  para regressão e tempo de treinamento.

Para projetos curtos de avaliação de uma série de classificadores essas medidas são suficientes para dar uma linha de base. Essas medidas podem auxiliar na escolha de quais modelos estão com melhor convergência e podem indicar um melhor tratamento dos dados em termos de quais variáveis são pertinentes ao modelo escolhido.



Comparação entre R e Python utilizando Florestas Aleatórias e Classificação