k-tree
Электронный учебник

Нейросети и глубокое обучение

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

В настоящее время используют для:

  • Вместо всех возможных алгоритмов
  • Определения объектов на фото и видео
  • Распознавания и синтеза речи
  • Обработки изображений, переноса стиля
  • Машинного перевода

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

Под связями понимаются каналы, через которые нейронами посылаются цифры. У каждой связи существует вес – это единственный параметр, который возможно условно представить, как прочность связи. Когда через связь весом 0,5 проходит число 20, оно превращается в 10. А нейрон не разбирается, что именно к нему пришло, он суммирует всё подряд, чтобы управлять, на какие входы ему нужно реагировать, а на какие нет.

Для того, чтобы связь не превращалась в хаотичную функцию, нейроны связали по слоям. Внутри одного слоя нейроны не связаны, но соединяются с нейронами следующего и предыдущего слоя. Данным этой сети следуют строго в одном направлении – от входов первого слоя к выходам последнего.

При создании достаточного количества слоёв и правильной расстановки веса в такой сети, мы получаем результат, к которому стремимся.

В программировании не прописывают нейроны, всё представляется матрицами и считается матричными произведениями, так как необходима скорость. Работой с матрицами занимается раздел линейная алгебра.

Когда построена сеть, главной задачей является правильно расставить веса, для того чтобы нейроны могли реагировать на нужные сигналы.

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

Через сотню таких циклов есть надежды, что веса в сети откорректируются таким образом, что бы результат был с минимальной ошибкой. Научно данный подход называется Backpropagation или «Метод обратного распространения ошибки». Чтобы открыть данный подход, ученым понадобилось двадцать лет, до открытий нейросети обучали, как могли.

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

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

Когда в 2012 году свёрточная нейросеть показала себя на конкурсе ImageNet, в мире все внезапно вспомнили о методах глубокого обучения, которые были описаны ещё в 90-х года 20 века.

Отличия глубокого обучения от классических нейросетей были в новых методах обучения, которые начали справляться с большими размерами сетей. При этом сегодня только теоретики разделяют, какое именно обучение можно считать глубоким, а какое нет. На практике используются библиотеки такие как: Keras, TensorFlow и PyTorch. Данные библиотеки удобнее всего того, что существовало раньше. На практике их просто называют нейросетями.

Существуют две главные нейросети на сегодняшний день - свёрточные и рекуррентные.

Свёрточные нейросети (CNN)

Свёрточные сети находятся на пике популярности. Их используют для поиска объектов на фотографиях и видео, для распознавания лиц, или переноса стиля. CNN применяется везде, где присутствуют фотографии или видео.

При этом с изображениями есть проблема и она заключается в том, что непонятно, каким образом выделять на них признаки. Если текст, возможно, разбить по предложениям, взять свойства слов из словарей, то с изображениями приходилось делать разметку вручную, объясняя машине, где тот или иной предмет на фотографии. Данный подход был назван «handcrafting признаков».

У «handcrafting признаков» существует ряд проблем:

Во-первых, если на фотографии предмет повернут или немного закрыт, то нейросеть уже ничего не видит.

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

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

Когда через нейросеть проходит множество признаков, она автоматически выделяет те сочетания, которые увидела чаще всего. И машине не важно, прямая это линия, либо сложный геометрический объект, что-то обязательно будет ярко активироваться.

В итоге получается, что машина будет видеть, какие сочетания активировались и анализировать для какого предмета, животного или явления они характерны.

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

Рекуррентные нейросети (RNN)

Рекуррентные нейросети являются второй по популярности архитектурой на сегодняшний день. Благодаря им существуют такие полезные вещи, как машинный перевод текстов, а также компьютерный синтез речи. С помощью них решаются все задачи, связанные с последовательностями.

Ранее существовал такой голосовой синтезатор из Windows XP под названием Microsoft Sam. А сегодня существуют гораздо более продвинутые программы, такие как Алиса от «Яндекса», либо Alexa от «Amazon». Они не просто произносят слова без ошибок, они умеют расставлять акценты в предложении.

Всё дело в том, что современных голосовых помощников учат говорить не буквами, а фразами. При этом невозможно сразу заставить нейросеть выдавать фразы целиком, так как ей придётся в таком случае запоминать все фразы в языке, а это масштабные размеры. И в таком случае приходит на помощь тот факт, что текст, речь или музыка – это всё последовательности. Все слова или звуки – самостоятельные единицы, но они зависят от предыдущих. Когда такая связь теряется, всё рушится.

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

При этом, так как перцептрон не запоминает, что он генерировал ранее, отсутствует последовательность. Каждый запуск для него, это как первый раз. Когда придумали добавить к каждому нейрону память, то были придуманы рекуррентные сети, в которых все нейроны запоминали свои предыдущие ответы. И когда по-новому запускались, они использовали информацию, которую запомнили, как дополнительный вход. Получается нейрон мог дать себе команду в будущее, что то или иное действие необходимо делать по другому.

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

Изначально решили это проблему так – у нейронов была отрезана память, но в последующем было придумано в качестве «памяти» использовать специальные ячейки, которые похожи на память компьютера или регистры процессора.

При такой работе каждая ячейка могла записать в себя цифру, прочитать или сбросить – их назвали ячейки долгой и краткосрочной памяти (LSTM).

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

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

Чтобы получить более подробную информацию, можно прочитать статью Neural Network Zoo, в ней собраны все типы нейронных сетей.


Вам понравилась статья? /

Просмотров: 88