Вчера я набросал в статье пару мыслей о нейронных сетях (далее — НС) и имел неосторожность назвать её не совсем аккуратно, что не ускользнуло от прозорливого взгляда почитателей моего таланта, которые обвинили меня в том, что я хитростью и громким заголовком завлёк их почитать свой шедевр. Поэтому дабы компенсировать горечь от неоправдавшихся ожиданий в данной статье я представляю на суд строгой, но справедливой публики размышления о некоторых областях применения НС.
Итак, области применения НС. Мне думается, что и этот заголовок через некоторое время будет выглядеть как «области применения математики» в том смысле, что, во-первых, область применения математики крайне широка, а во-вторых, не конкретизировано, о каком именно подразделе математики идёт речь. Нейронные сети будут применяться в бесчисленном множестве сфер, будет множество вариаций их архитектур и решать они смогут все те же задачи, что и наш мозг, поскольку построены на похожем принципе.
В последнем пункте я ничего не говорил о том, за какое время они смогут решать эти задачи и при каких характеристиках компьютеров. Даже если производительность НС будет равна производительности мозга (что по мнению Рея Курцвейла, вопрос десятилетий), всё равно мы не знаем, как именно работает мозг и не предобучены ли его части заранее. Здесь я имею в виду «генетическую память», сформированную миллионами лет эволюции. То есть структура связей и их сила (читай – веса в НС) у нейронов в человеческом мозге могут быть заданы сразу при рождении, а в течение жизни происходит их адаптация под конкретную среду. Например, Ноам Чомски (известный лингвист) считает, что некоторая грамматика языка (базового класса языка в терминах ООП, если угодно) уже есть в голове при рождении. Но давайте рассматривать менее отдаленное будущее и даже настоящее.
Нейронные сети относят к технологиям машинного обучения, видимо, из-за того, что неотъемлемой частью является обучение (настройка параметров) на данных. Соответственно, нейронные сети могут решать задачи, которые относят к машинному обучению, а именно: классификация, регрессия, кластеризация. НС можно также применять в задачах обучения с подкреплением. Такие техники используются в системах принятия решений. Например, компания DeepBrain, которую купила Google, как раз и научила НС играть в видеоигры. Вернее, их НС научилась самостоятельно, просто глядя на экран. Похожие НС могут водить машину. Но про всё это много написано, а пересказывать чужие мысли я не вижу смысла.
Области применения НС я хочу описать в зависимости от того, с какого рода данными работает эта НС: числа, изображения, текст, звуки, речь, видео.
С разными данными хорошо работают разные архитектуры сети. Например, для изображений применяются свёрточные сети, для распознавания речи – рекуррентные. Они используются и для обработки естественного языка: в задачах машинного перевода, диалоговых системах. Для типа данных «число» в задачах прогнозирования, аппроксимации, регрессии (всё это, говоря неформально, сводится к тому, что есть некоторая функция, которая моделируется с помощью НС) можно использовать стандартный многослойный персептрон.
Давайте мы сегодня ограничимся только областями применения НС для обработки изображений, многие аналогии можно провести и для других типов данных.
Итак,
Нейронные сети могут работать как память, они запоминают признаки, части изображений. Это можно использовать для сжатия данных или в качестве хэш-функций. И говоря о хэш-функциях, нельзя не упомянуть применения НС в криптографии. НС можно применять для зашифрования данных. Я не знаю, есть ли существующие реализации или идеи, но я как-то думал, что НС можно даже применять и для криптоанализа: обучить её на наборе зашифрованный текст – открытый текст, а потом дать ей новый зашифрованный текст и hopefully получить расшифровку, потому что она внутри себя аппроксимирует работу алгоритма зашифрования с параметрами ключа.
Это были некоторые (не все) области применения НС.
Спасибо за внимание!
Итак, области применения НС. Мне думается, что и этот заголовок через некоторое время будет выглядеть как «области применения математики» в том смысле, что, во-первых, область применения математики крайне широка, а во-вторых, не конкретизировано, о каком именно подразделе математики идёт речь. Нейронные сети будут применяться в бесчисленном множестве сфер, будет множество вариаций их архитектур и решать они смогут все те же задачи, что и наш мозг, поскольку построены на похожем принципе.
В последнем пункте я ничего не говорил о том, за какое время они смогут решать эти задачи и при каких характеристиках компьютеров. Даже если производительность НС будет равна производительности мозга (что по мнению Рея Курцвейла, вопрос десятилетий), всё равно мы не знаем, как именно работает мозг и не предобучены ли его части заранее. Здесь я имею в виду «генетическую память», сформированную миллионами лет эволюции. То есть структура связей и их сила (читай – веса в НС) у нейронов в человеческом мозге могут быть заданы сразу при рождении, а в течение жизни происходит их адаптация под конкретную среду. Например, Ноам Чомски (известный лингвист) считает, что некоторая грамматика языка (базового класса языка в терминах ООП, если угодно) уже есть в голове при рождении. Но давайте рассматривать менее отдаленное будущее и даже настоящее.
Нейронные сети относят к технологиям машинного обучения, видимо, из-за того, что неотъемлемой частью является обучение (настройка параметров) на данных. Соответственно, нейронные сети могут решать задачи, которые относят к машинному обучению, а именно: классификация, регрессия, кластеризация. НС можно также применять в задачах обучения с подкреплением. Такие техники используются в системах принятия решений. Например, компания DeepBrain, которую купила Google, как раз и научила НС играть в видеоигры. Вернее, их НС научилась самостоятельно, просто глядя на экран. Похожие НС могут водить машину. Но про всё это много написано, а пересказывать чужие мысли я не вижу смысла.
Области применения НС я хочу описать в зависимости от того, с какого рода данными работает эта НС: числа, изображения, текст, звуки, речь, видео.
С разными данными хорошо работают разные архитектуры сети. Например, для изображений применяются свёрточные сети, для распознавания речи – рекуррентные. Они используются и для обработки естественного языка: в задачах машинного перевода, диалоговых системах. Для типа данных «число» в задачах прогнозирования, аппроксимации, регрессии (всё это, говоря неформально, сводится к тому, что есть некоторая функция, которая моделируется с помощью НС) можно использовать стандартный многослойный персептрон.
Давайте мы сегодня ограничимся только областями применения НС для обработки изображений, многие аналогии можно провести и для других типов данных.
Итак,
- Вы можете использовать НС для того, чтобы определить что-либо на изображении (задача классификации). Это может быть рукописная цифра, кошка, собака, лицо или опухоль – НС всё равно. Соответственно, можно применять в любых областях, где у Вас есть изображения (фотографии) и интересующий Вас объект. Распознавание эмоций, распознавание дорожных знаков, автомобильных номеров, секретных объектов на картах, что угодно.
- НС может стилизовать изображение. Пример можно посмотреть на КДПВ. Обучить НС на картинах известных художников, а потом изменить свою фотографию под выбранный стиль. Например, Prizma делает это (интересно, мне заплатят за рекламу?). Что-то похожее для видео – MSQRD, который купил Facebook. Для речи можно представить себе её искажение. Ну и для звуков – стилизацию музыки.
- НС может искать среди других изображений объекты, похожие на тот, который есть на Вашем. Например, FindFace.ru. Как я понимаю, в нём работает Наталья Ефремова, которая сделала доклад о НС и статья которой есть на Хабре.
- НС может генерировать новые изображения. Писать новые тексты, создавать музыкальные произведения. Идея проста и элегантна: Вы обучаете НС, а после инвертируете выход с входом.
Картинка уже не так актуальна.
- НС может понимать, что именно изображено на фотографии, то есть определять сематику – смысл. Так НС может не просто сказать, что на фотографии человек, но и описать словами всю сценку: девушка в красной блузе гладит кошку.
Нейронные сети могут работать как память, они запоминают признаки, части изображений. Это можно использовать для сжатия данных или в качестве хэш-функций. И говоря о хэш-функциях, нельзя не упомянуть применения НС в криптографии. НС можно применять для зашифрования данных. Я не знаю, есть ли существующие реализации или идеи, но я как-то думал, что НС можно даже применять и для криптоанализа: обучить её на наборе зашифрованный текст – открытый текст, а потом дать ей новый зашифрованный текст и hopefully получить расшифровку, потому что она внутри себя аппроксимирует работу алгоритма зашифрования с параметрами ключа.
Это были некоторые (не все) области применения НС.
Спасибо за внимание!
Поделиться с друзьями
Комментарии (15)
zigrus
13.03.2017 11:11можно ли посмотреть на простую нейронную сеть которая будет выдавать сумму двух чисел?
я много читал. смотрел исходный код. кое что уже выстраивается в голове. но четкого представления принципов нет.
maaGames
Не совсем по теме поста, но в тему НС.
Недавно была статья про то, что гугл использует НС для апскейла изображений — тренирует сеточку для восстановления утерянной при масштабировании информации.
Вот у меня закралась мысль, а можно ли сделать такое же, для сжатия музыки? Например, сжимаем в mp3 128 кб/с и тренируем сеть для передискретизации или типа того… Сам я почти ни одной работающей нейронной сети не запрограммировал, поэтому столь сложную задачу для проверки гипотезы реализовать не смогу.
Sadler
Лично я восстанавливал ВЧ для заранее известного голоса, сначала снижая частоту дискретизации до 8kHz, а затем восстанавливая при 44.1kHz. В силу того, что учил на проце, получилось не очень качественно, но вполне неплохо восстанавливало. С mp3 не пробовал.
maaGames
Как я понимаю, результат будет зависеть от количества входов/выходов (т.е.количества отсчётов в передискретизируемом сэмпле) и количества слоёв в сети. Т.е. я уверен, что можно получить полное или почти полное совпадение с оригиналом, но размер сети будет сопоставим с размером wav файла. А вот если зазипованная сеть занимает килобайт 200-500, то вот интересно, насколько качественный результат будет. Разумеется, сеть обучается только на одном сжимаемом файле и сохраняется с ним.
Sadler
Это как раз наименее интересный сценарий. Для качественной обработки крошечная сеть бесполезна, большая же может скачиваться один раз под весь сжимаемый материал. Объём сети зависит в основном не от числа входов-выходов, а от конфигурации скрытых слоёв. Я в своей работе оперирую сетями начиная с нескольких миллионов параметров.
maaGames
Если миллион double на всю сеть, то это уже 8 мегабайт. Учитывая «случайность» она вряд ли пожмётся существенно. Значит, сразу дополнительно 8 мегабайт на файл. flac или mp3-320 дадут такой же или меньший размер файлов. Если миллион параметров на слое, то вообще огромный размер будет…
А если тренировать сеть на целый альбом, то даже нельзя отдельно песню перенести. В общем, может технически и не интересно, но с практической точки зрения важен именно минимальный размер сети, прилагаемой к каждому отдельному файлу.
Например, тот же mp3 низкого битрейта и там же в контейнер записана сеть. Можно любым плеером воспроизвести файл, а если плеер поддерживает НС, то он может её использовать для улучшения качества. Как бы и переносимость и профит… Если такое реализуемо, конечно. Если навскидку прикинуть, то сохранённые в файл параметры сети должны быть не более 1-2 мегабайт, иначе смысла в таком сжатии не будет. Т.е sizeof(flac) > sizeof( mp3-128 + NN), тогда есть практический смысл.
Sadler
Ваш наивный метод не сработает. Тренировать надо не на альбом/песню/группу, а целиком на весь спектр материала, который будет сжиматься кодеком, только в таком случае это может быть оправдано.
maaGames
Гугл же тренирует на каждую конкретную картинку (если я правильно ту статью понял). Потому и предположил, что подобное возможно и для аудио. Жаль, что нет.
Sadler
Тренировать на единственной картинке не очень продуктивно, хотя и работает, скажем, для переноса стиля, как в КДПВ этой статьи. Конечно, можно использовать Deep Autoencoder, чтобы сжимать данные таким образом, но, так уж выходит, сам Autoencoder будет намного больше сжимаемых данных, потому передавать его вместе с данными нет никакого смысла. Что же касаемо гугла, я сейчас просмотрел статью про их superresolution, не увидел в ней ничего про тренировку на единственном изображении.
redpax
8 битную музыку можно «восстановить» до оркестровой симфонии, в теории? Вот например так https://youtu.be/kcKurvm_0oE
Sadler
Это уже больше про Style Transfer, ибо восьмибитная музыка предполагает не просто запись с определённым уровнем искажений, а вполне себе отдельный набор инструментов с характерным звучанием. По переносу стиля в музыке тоже есть работы, но я ими не особо интересуюсь, так что касательно их способностей ничего определённого сказать не могу.
killik
Или лучше пусть НС новую песню пишет, в стиле той же группы, при каждом запуске плеера. Кошмар правоторговцев )
maaGames
А такое уже есть. Почти такое. Начинаешь на пианине играть, а НС допианинивает дальше.