Я пытаюсь использовать ИНС для определения высоты звука музыкальных нот. Сеть представляет собой простой двухуровневый MLP, входы которого в основном представляют собой ДПФ (усредненное и логарифмически распределенное), а 12 выходов соответствуют 12 нотам определенной октавы.
Сеть обучается с использованием нескольких выборок из этих 12 нот, сыгранных каким-либо инструментом (по одной ноте за раз), и нескольких выборок «тишины».
Результаты действительно хорошие. Сеть способна точно определять ноты, сыгранные разными инструментами, они относительно не подвержены шуму и даже не теряют своего здравого смысла при проигрывании песни.
Однако цель состоит в том, чтобы уметь распознавать полифонический звук. Таким образом, когда две или более ноты играются вместе, срабатывают два соответствующих нейрона. Удивительно то, что сеть на самом деле уже делает это в некоторой степени (обучаясь только монофоническим семплам), однако менее последовательно и менее точно, чем для монофонических нот. Мой вопрос: как я могу улучшить его способность распознавать полифнические звуки?
Проблема в том, что я не совсем понимаю, почему это на самом деле уже работает. Различные ноты (или их ДПФ) в основном представляют собой разные точки в пространстве, для которых обучается сеть. Итак, я понимаю, почему он распознает похожие звуки (близлежащие точки), но не то, как он «завершает» вывод для комбинации нот (которые образуют удаленную точку от каждого из обучающих примеров). Таким же образом не ожидается, что сеть И, обученная по (0,0) (0,1) (1,0) = (0), «заключит», что (1,1) = (1).
Грубый подход к этому состоит в том, чтобы обучить сеть как можно большим количеством полифонических семплов. Однако, поскольку сеть каким-то образом смутно уловила идею монофонических сэмплов, здесь, вероятно, есть что-то более важное.
Есть указатели? (извините за длину, кстати :).