Cancelamento de Ruído Ativo Neural Recorrente

RNN prevê um ruído estruturado para suprimi-lo em um ambiente acústico complexo

Mikhail Baranov Segue 24 de fev · 3 min ler Flickr , CC BY-NC 2.0

No meu post anterior eu contei sobre o meu sistema de Cancelamento de Ruído Ativo baseado na rede neural. Aqui eu delinear meus experimentos com previsão de som com redes neurais recursivas que fiz para melhorar meu denoiser.

A previsão do som do ruído pode se tornar importante para os sistemas de cancelamento de ruído ativo, pois ruídos não estacionários são difíceis de suprimir por abordagens clássicas como o FxLMS. É por isso que tentei o perceptron simples de duas camadas antes e por que tentei a rede recursiva para este momento.

O trabalho é simples: desafiei a tarefa de prever as amostras adiante e uso a Polka de Leva como cobaia. A tarefa requer muito poder computacional, então eu diminuo a música para os primeiros 5 segundos para poder treinar a RNN no meu laptop sem a GPU.

Waybackprop

Imagem do blog Magenta

A idéia central da arquitetura de rede foi derivada do post no blog do projeto Magenta. O autor trouxe um espírito de processamento de sinal de várias velocidades no domínio RNN. O post descreve a ideia perfeitamente, tem até ilustrações lúcidas, então não vou competir com ela. Embora, eu estou dando uma breve descrição da ideia aqui.

Música ou áudio em geral tem processos subjacentes de longo prazo, portanto, o modelo precisa ser aprendido com exemplos tão longos. Nesse experimento, fiz NN com 400 amostras de largura de entrada. São apenas 50 ms, outras informações que o NN tirou das saídas anteriores.

O principal problema com RNN no problema de predição musical (ou geração) é a complexidade da aprendizagem. A retropropagação truncada desenrola o histórico de amostras de entrada e estados de entrada em dezenas ou centenas de vezes. Isso significa que o caminho de feed forward é dezenas ou centenas de vezes mais rápido para computar que o caminho de feedback.

A idéia principal é construir várias camadas de células comuns de redes neurais recursivas, geralmente compreendem células que tomam o estado do estágio anterior e inserem valores e retornam o próximo estado e saída.

Implementação

Como no experimento anterior, eu usei o python 3.4, tensorflow 1.0, Linux Mint 17.2, mas nenhum experimento em tempo real foi conduzido devido a extensos requisitos computacionais.

Eu fiz uma rede neural profunda de três camadas de células GRU . Células GRU foram implementadas por mim também porque são mais simples de integrar em todo o sistema. Cada camada recebe entradas de:

  • a saída da camada abaixo, que é mais rápida uma (maior taxa de amostragem);
  • se produção anterior;
  • saída da camada acima.

A primeira camada leva amostras cruas com 8 kHz de taxa de amostragem, a largura da entrada é de 1 amostra. O estado interno é vetor de 64 valores.

Esboço

Eu também tentei minhas próprias células feitas de perceptrons simples, e funcionou também, mas o desempenho das células GRU foi melhor e eu parei nelas. A camada mais superior não deu valor suficiente nesse experimento, mas deixei de qualquer maneira.

Resultados

A parte da música usada para o experimento:

As amostras originais e reproduzidas (em cima) e seu espectro:

Outra parte:

A norma alvo era erro quadrado médio, a primeira época tem a norma de erro 0.0176689 e a última 800 tem a norma 0.000453576.

Não há patentes sobre esse problema, nem eu tenho planos comerciais até agora. No entanto, eu adoraria ter um trabalho em tempo integral dedicado a esse tema, e é por isso que eu não coloco o código-fonte no github.com. No entanto, pode ser que algum dia eu os liberte.