Como usar o RBM para classificação?

12

No momento, estou jogando com Restricted Boltzmann Machines e, como estou nisso, gostaria de tentar classificar dígitos manuscritos com ele.

O modelo que criei agora é um modelo generativo bastante sofisticado, mas não sei como ir mais longe.

Em este artigo a palavra autor, que depois de criar um bom modelo generativo, um " então treina um classificador discriminativo (ie, classificador linear, Support Vector Machine) no topo da RBM utilizando as amostras rotuladas " e estados furtherly " desde que você propagar o vetores de dados para as unidades ocultas do modelo RBM para obter vetores de unidades ocultas ou uma representação de nível superior dos dados ". O problema é que não tenho certeza se entendi direito.

Isso significa que tudo o que preciso fazer é propagar a entrada para as unidades ocultas e aí tenho meu recurso RBM para classificação?

Alguém pode me explicar esse processo?

Nome em Exibição
fonte
A máquina restrita de Boltzmann é um dos primeiros componentes usados ​​para o aprendizado profundo. De fato, o primeiro trabalho importante em DNN foi realizado por Hinton é que a rede de crenças profundas foi baseada no RBM. Pesquise este artigo (rede de crenças profundas, 2007, para Hinton) para obter mais informações. Em seu site, você pode encontrar recursos muito importantes, bem como um experimento de demonstração cs.toronto.edu/~hinton/digits.html
Bashar Haddad
@hbaderts Comecei a brincar com o RBM. A resposta aceita foi fácil de ler. Eu queria pedir esclarecimentos, a camada oculta do RBM é aleatória após a amostragem da distribuição binária. Para classificação, as probabilidades de unidades ocultas são usadas ou as unidades ocultas amostradas de uma distribuição binária (1 e 0) são passadas para o classificador?
M3tho5 11/10/1918

Respostas:

15

Revisão de Máquinas Boltzmann Restritas

Uma máquina Boltzmann restrita (RBM) é um modelo generativo , que aprende uma distribuição de probabilidade sobre a entrada. Isso significa que, após ser treinado, o RBM pode gerar novas amostras a partir da distribuição de probabilidade aprendida. A distribuição de probabilidade sobre as unidades visíveis é dada por p ( vh ) = V i = 0 p ( v ih ) , onde p ( v ih ) = σ ( a i + Hv

p(vh)=Eu=0 0Vp(vEuh),
eσé a função sigmóide,umié a tendência para o nó visíveli, eWjié o peso a partir dehjavi. A partir dessas duas equações, segue-se quep(vh)depende apenas dos estados ocultosh. Isso significa que as informações sobre como uma amostra visívelvé gerada devem ser armazenadas nas unidades ocultas, nos pesos e nos desvios.
p(vEuh)=σ(umaEu+j=0 0HWjEuhj)
σumaEuEuWjEuhjvEup(vh)hv

Usando RBMs para classificação

h

Esse vetor oculto é apenas uma versão transformada dos dados de entrada - isso não pode classificar nada por si só. Para fazer uma classificação, você treinaria qualquer classificador (classificador linear, SVM, uma rede neural de feedforward ou qualquer outra coisa) com o vetor oculto em vez dos dados de treinamento "brutos" como entradas.

Se você estiver construindo uma rede de crenças profundas (DBN) - que foi usada para pré-treinar redes neurais profundas de feed-forward de uma maneira não supervisionada - você pegaria esse vetor oculto e o usaria como entrada para um novo RBM, que você empilha no topo disso. Dessa forma, você pode treinar a rede camada por camada até atingir o tamanho desejado, sem precisar de dados rotulados. Por fim, você adicionaria, por exemplo, uma camada softmax ao topo e treinaria toda a rede com retropropagação em sua tarefa de classificação.

hbaderts
fonte
Obrigado pela edição @ Seanny123, isso facilita muito a leitura.
Hbaderts
5

@hbaderts descreveu todo o fluxo de trabalho perfeitamente. No entanto, pode não fazer sentido se você é completamente novo nessa idéia. Portanto, vou explicá-lo da maneira leiga (portanto, omitirei detalhes):

Pense nas redes profundas como uma função para transformar seus dados. Exemplos de transformações incluem normalização, registro de dados etc. As redes profundas que você está treinando têm várias camadas. Cada uma dessas camadas é treinada usando algum tipo de algoritmo de aprendizado. Para a primeira camada, você passa os dados originais como entrada e tenta obter uma função que retornará esses "mesmos dados originais" que a saída. No entanto, você não obtém a saída perfeita. Portanto, você está obtendo uma versão transformada de sua entrada como a saída da primeira camada.

Agora, para a segunda camada, você pega esses "dados transformados" e os passa como entrada e repete todo o processo de aprendizado. Você continua fazendo isso para todas as camadas da sua rede profunda.

Na última camada, o que você obtém é uma "versão transformada" dos seus dados de entrada originais. Isso pode ser pensado na abstração de nível superior dos dados de entrada originais. Observe que você ainda não usou as etiquetas / saída em sua rede profunda. Portanto, tudo até este ponto é aprendizado não supervisionado. Isso é chamado de pré-treinamento em camadas.

Agora, você deseja treinar um modelo de classificador / regressão e esse é um problema de aprendizado supervisionado. A maneira como você alcança esse objetivo é pegar a "versão final transformada" da sua entrada original da última camada da sua rede profunda e usá-las como entrada para qualquer classificador (por exemplo, classificador knn / classificador softmax / regressão logística etc.). Isso é chamado de empilhamento.

Ao treinar esse classificador / aluno da última etapa, você propaga todo o seu aprendizado em toda a rede. Isso garante que você possa aprender com os rótulos / saídas e modificar os parâmetros em camadas aprendidos de acordo.

Portanto, depois de treinar seu modelo generativo, pegue a saída do seu modelo generativo e use-o como entrada para um classificador / aluno. Deixe o erro fluir por toda a rede enquanto o aprendizado continua, para que você possa modificar o parâmetro em camadas aprendido nas etapas anteriores.

Sal
fonte