Вчера я набросал в статье пару мыслей о нейронных сетях (далее — НС) и имел неосторожность назвать её не совсем аккуратно, что не ускользнуло от прозорливого взгляда почитателей моего таланта, которые обвинили меня в том, что я хитростью и громким заголовком завлёк их почитать свой шедевр. Поэтому дабы компенсировать горечь от неоправдавшихся ожиданий в данной статье я представляю на суд строгой, но справедливой публики размышления о некоторых областях применения НС.

image

Итак, области применения НС. Мне думается, что и этот заголовок через некоторое время будет выглядеть как «области применения математики» в том смысле, что, во-первых, область применения математики крайне широка, а во-вторых, не конкретизировано, о каком именно подразделе математики идёт речь. Нейронные сети будут применяться в бесчисленном множестве сфер, будет множество вариаций их архитектур и решать они смогут все те же задачи, что и наш мозг, поскольку построены на похожем принципе.

В последнем пункте я ничего не говорил о том, за какое время они смогут решать эти задачи и при каких характеристиках компьютеров. Даже если производительность НС будет равна производительности мозга (что по мнению Рея Курцвейла, вопрос десятилетий), всё равно мы не знаем, как именно работает мозг и не предобучены ли его части заранее. Здесь я имею в виду «генетическую память», сформированную миллионами лет эволюции. То есть структура связей и их сила (читай – веса в НС) у нейронов в человеческом мозге могут быть заданы сразу при рождении, а в течение жизни происходит их адаптация под конкретную среду. Например, Ноам Чомски (известный лингвист) считает, что некоторая грамматика языка (базового класса языка в терминах ООП, если угодно) уже есть в голове при рождении. Но давайте рассматривать менее отдаленное будущее и даже настоящее.

Нейронные сети относят к технологиям машинного обучения, видимо, из-за того, что неотъемлемой частью является обучение (настройка параметров) на данных. Соответственно, нейронные сети могут решать задачи, которые относят к машинному обучению, а именно: классификация, регрессия, кластеризация. НС можно также применять в задачах обучения с подкреплением. Такие техники используются в системах принятия решений. Например, компания DeepBrain, которую купила Google, как раз и научила НС играть в видеоигры. Вернее, их НС научилась самостоятельно, просто глядя на экран. Похожие НС могут водить машину. Но про всё это много написано, а пересказывать чужие мысли я не вижу смысла.

Области применения НС я хочу описать в зависимости от того, с какого рода данными работает эта НС: числа, изображения, текст, звуки, речь, видео.

С разными данными хорошо работают разные архитектуры сети. Например, для изображений применяются свёрточные сети, для распознавания речи – рекуррентные. Они используются и для обработки естественного языка: в задачах машинного перевода, диалоговых системах. Для типа данных «число» в задачах прогнозирования, аппроксимации, регрессии (всё это, говоря неформально, сводится к тому, что есть некоторая функция, которая моделируется с помощью НС) можно использовать стандартный многослойный персептрон.

Давайте мы сегодня ограничимся только областями применения НС для обработки изображений, многие аналогии можно провести и для других типов данных.
image

Итак,

  1. Вы можете использовать НС для того, чтобы определить что-либо на изображении (задача классификации). Это может быть рукописная цифра, кошка, собака, лицо или опухоль – НС всё равно. Соответственно, можно применять в любых областях, где у Вас есть изображения (фотографии) и интересующий Вас объект. Распознавание эмоций, распознавание дорожных знаков, автомобильных номеров, секретных объектов на картах, что угодно.

  2. НС может стилизовать изображение. Пример можно посмотреть на КДПВ. Обучить НС на картинах известных художников, а потом изменить свою фотографию под выбранный стиль. Например, Prizma делает это (интересно, мне заплатят за рекламу?). Что-то похожее для видео – MSQRD, который купил Facebook. Для речи можно представить себе её искажение. Ну и для звуков – стилизацию музыки.

  3. НС может искать среди других изображений объекты, похожие на тот, который есть на Вашем. Например, FindFace.ru. Как я понимаю, в нём работает Наталья Ефремова, которая сделала доклад о НС и статья которой есть на Хабре.

  4. НС может генерировать новые изображения. Писать новые тексты, создавать музыкальные произведения. Идея проста и элегантна: Вы обучаете НС, а после инвертируете выход с входом.

    image

    Картинка уже не так актуальна.

  5. НС может понимать, что именно изображено на фотографии, то есть определять сематику – смысл. Так НС может не просто сказать, что на фотографии человек, но и описать словами всю сценку: девушка в красной блузе гладит кошку.

Нейронные сети могут работать как память, они запоминают признаки, части изображений. Это можно использовать для сжатия данных или в качестве хэш-функций. И говоря о хэш-функциях, нельзя не упомянуть применения НС в криптографии. НС можно применять для зашифрования данных. Я не знаю, есть ли существующие реализации или идеи, но я как-то думал, что НС можно даже применять и для криптоанализа: обучить её на наборе зашифрованный текст – открытый текст, а потом дать ей новый зашифрованный текст и hopefully получить расшифровку, потому что она внутри себя аппроксимирует работу алгоритма зашифрования с параметрами ключа.

Это были некоторые (не все) области применения НС.
Спасибо за внимание!
Поделиться с друзьями
-->

Комментарии (15)


  1. maaGames
    08.03.2017 09:27

    Не совсем по теме поста, но в тему НС.
    Недавно была статья про то, что гугл использует НС для апскейла изображений — тренирует сеточку для восстановления утерянной при масштабировании информации.
    Вот у меня закралась мысль, а можно ли сделать такое же, для сжатия музыки? Например, сжимаем в mp3 128 кб/с и тренируем сеть для передискретизации или типа того… Сам я почти ни одной работающей нейронной сети не запрограммировал, поэтому столь сложную задачу для проверки гипотезы реализовать не смогу.


    1. Sadler
      08.03.2017 11:12

      Лично я восстанавливал ВЧ для заранее известного голоса, сначала снижая частоту дискретизации до 8kHz, а затем восстанавливая при 44.1kHz. В силу того, что учил на проце, получилось не очень качественно, но вполне неплохо восстанавливало. С mp3 не пробовал.


      1. maaGames
        08.03.2017 12:05

        Как я понимаю, результат будет зависеть от количества входов/выходов (т.е.количества отсчётов в передискретизируемом сэмпле) и количества слоёв в сети. Т.е. я уверен, что можно получить полное или почти полное совпадение с оригиналом, но размер сети будет сопоставим с размером wav файла. А вот если зазипованная сеть занимает килобайт 200-500, то вот интересно, насколько качественный результат будет. Разумеется, сеть обучается только на одном сжимаемом файле и сохраняется с ним.


        1. Sadler
          08.03.2017 12:15

          Это как раз наименее интересный сценарий. Для качественной обработки крошечная сеть бесполезна, большая же может скачиваться один раз под весь сжимаемый материал. Объём сети зависит в основном не от числа входов-выходов, а от конфигурации скрытых слоёв. Я в своей работе оперирую сетями начиная с нескольких миллионов параметров.


          1. maaGames
            08.03.2017 12:22

            Если миллион double на всю сеть, то это уже 8 мегабайт. Учитывая «случайность» она вряд ли пожмётся существенно. Значит, сразу дополнительно 8 мегабайт на файл. flac или mp3-320 дадут такой же или меньший размер файлов. Если миллион параметров на слое, то вообще огромный размер будет…
            А если тренировать сеть на целый альбом, то даже нельзя отдельно песню перенести. В общем, может технически и не интересно, но с практической точки зрения важен именно минимальный размер сети, прилагаемой к каждому отдельному файлу.
            Например, тот же mp3 низкого битрейта и там же в контейнер записана сеть. Можно любым плеером воспроизвести файл, а если плеер поддерживает НС, то он может её использовать для улучшения качества. Как бы и переносимость и профит… Если такое реализуемо, конечно. Если навскидку прикинуть, то сохранённые в файл параметры сети должны быть не более 1-2 мегабайт, иначе смысла в таком сжатии не будет. Т.е sizeof(flac) > sizeof( mp3-128 + NN), тогда есть практический смысл.


            1. Sadler
              08.03.2017 12:48

              Ваш наивный метод не сработает. Тренировать надо не на альбом/песню/группу, а целиком на весь спектр материала, который будет сжиматься кодеком, только в таком случае это может быть оправдано.


              1. maaGames
                08.03.2017 12:50

                Гугл же тренирует на каждую конкретную картинку (если я правильно ту статью понял). Потому и предположил, что подобное возможно и для аудио. Жаль, что нет.


                1. Sadler
                  08.03.2017 13:04

                  Тренировать на единственной картинке не очень продуктивно, хотя и работает, скажем, для переноса стиля, как в КДПВ этой статьи. Конечно, можно использовать Deep Autoencoder, чтобы сжимать данные таким образом, но, так уж выходит, сам Autoencoder будет намного больше сжимаемых данных, потому передавать его вместе с данными нет никакого смысла. Что же касаемо гугла, я сейчас просмотрел статью про их superresolution, не увидел в ней ничего про тренировку на единственном изображении.


              1. redpax
                09.03.2017 16:12

                8 битную музыку можно «восстановить» до оркестровой симфонии, в теории? Вот например так https://youtu.be/kcKurvm_0oE


                1. Sadler
                  09.03.2017 16:18

                  Это уже больше про Style Transfer, ибо восьмибитная музыка предполагает не просто запись с определённым уровнем искажений, а вполне себе отдельный набор инструментов с характерным звучанием. По переносу стиля в музыке тоже есть работы, но я ими не особо интересуюсь, так что касательно их способностей ничего определённого сказать не могу.


    1. killik
      09.03.2017 05:04

      Или лучше пусть НС новую песню пишет, в стиле той же группы, при каждом запуске плеера. Кошмар правоторговцев )


      1. maaGames
        09.03.2017 14:06
        +1

        А такое уже есть. Почти такое. Начинаешь на пианине играть, а НС допианинивает дальше.


  1. savostin
    08.03.2017 11:08

    А можно тоже самое про числа? Хоть списочком…


    1. holyhope
      09.03.2017 13:41

      Спасибо, но, видимо, своё я тут уже отписал :)
      Справедливо, значит, литература — не моё призвание.
      Может, кто-то ещё напишет. Я бы почитал.


  1. zigrus
    13.03.2017 11:11

    можно ли посмотреть на простую нейронную сеть которая будет выдавать сумму двух чисел?
    я много читал. смотрел исходный код. кое что уже выстраивается в голове. но четкого представления принципов нет.