Нейронные сети: история

Пятница, полдень. Вы на работе. Вы работали не покладая рук в течение последнего часа. Пришло время сделать перерыв. Вы берете телефон и подносите его к лицу. «Разблокировано», — говорится в нем. Затем вы проводите следующие 10 минут, прокручивая страницу в Instagram. Но вы начинаете задаваться вопросом: «Как телефон смог узнать меня и разблокировать себя?» Давай выясним.

Архитектура

Скорее всего, в вашем телефоне есть нейронная сеть, которая распознает вас. «Но что такое нейронная сеть?» - ты спрашиваешь. Ну, нейронная сеть — это биологически вдохновленный алгоритм, способный выполнять классификацию. "Что?" Классификация. Вы помните тот эпизод в Силиконовой долине, где Цзянь-Ян разработал печально известное приложение «Не хот-дог»? Ну, это классификация: процесс, в котором объекты распознаются, различаются и понимаются — Википедия. «Нет, нет… биологически вдохновленный алгоритм?» Ах хорошо. Итак, мы, люди, используем наш мозг для многих вещей: мышления и движения, дыхания и сна, а также для распознавания и понимания. Ученые в 40-х годах разработали математическую модель человеческого мозга. По мере того, как компьютеры становились все более и более совершенными, наконец стало возможным смоделировать такую ​​модель. Именно тогда были изобретены искусственные нейронные сети (у нас уже были биологические, хех). "Хммм ладно." — ты выглядишь растерянным. Видите ли, нейронная сеть — это ориентированный граф узлов. Информация проходит через этот график. На одном конце у нас есть вход — изображение. На другом у нас есть выход — бинарная переменная, значение которой решает, разблокировать телефон или нет. В середине... вот где происходит волшебство. «Магия?» Да, магия.

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

Вы слышали о глубоком обучении? — Хм, да. — подтверждаете вы. Что ж, глубокое обучение связано с созданием нейронных сетей с множеством скрытых слоев. И я имею в виду, добыча. "Это круто. Но что такое нейроны, о которых вы упоминали ранее? Отличный вопрос!

Помните, в начале я сказал: «Алгоритм, вдохновленный биологией?» Что ж, в нашем мозгу есть эти электрически возбудимые клетки — нейроны, ответственные за получение сенсорной информации из внешнего мира, за отправку моторных команд нашим мышцам, а также за преобразование и передачу электрических сигналов на каждом промежуточном этапе. Искусственные нейроны имитируют это поведение. Они получают выходные данные от всех нейронов предыдущего слоя, выполняют некоторые «сумасшедшие» вычисления и сами выводят значение. «Математика? Только не снова!» Не пугайтесь. Они не решают комплексный интеграл. Что они делают, так это вычисляют взвешенную сумму полученных значений. Это означает, что они умножают каждое значение на вес и складывают умноженные значения вместе (плюс они добавляют дополнительное значение — член смещения в конце, просто для удовольствия).

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

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

Обратите внимание, скрытые слои обычно используют один тип функции активации — ReLU, а выходной нейрон — другой — сигмовидный. Почему ты спрашиваешь? Ну, как мы уже говорили, цель сети — распознать, что лицо на изображении, если оно было, принадлежит вам. Это признание приходит в форме уверенности. Нейронная сеть может быть уверена на 98% или на 23%. Функция активации Sigmoid делает именно это. Для любого входного значения он выводит значение от 0 до 1. Вы можете масштабировать это значение, чтобы получить процент, но это только техническая деталь. Теперь, если значение больше 0,5, срабатывает выходной нейрон, и телефон разблокируется. Значение 0,5 — это то, что мы установили сами. Не поймите меня неправильно, мы можем использовать функцию активации Sigmoid где угодно. Однако мы используем ReLU для удобства.

"Хорошо, я понимаю. У вас есть изображение, происходит волшебство, затем срабатывает нейрон, и телефон разблокируется. Ура! Но как сеть получила возможность узнавать меня? Как оно… научилось? О, парень. Нас ждет поездка!

Обучение

Давайте еще раз посмотрим на изображение нейронной сети.

Видите линии, соединяющие нейроны между слоями? Эти линии имеют веса, связанные с ними. Как я уже говорил, нейрон умножает выходные данные нейронов предыдущего слоя на веса и складывает умноженные значения (плюс добавляется смещение, знаете ли… для забавы). Эти веса и смещения могут иметь любое значение. Буквально любое значение. Но как узнать, какие значения подходят для того, чтобы сеть различала ваше лицо и мое, или даже если на изображении есть лицо? Конечно, мы можем найти их вручную, но делать это по 5 миллионам параметров не так забавно, как кажется. Поэтому математики придумали решение. Они сформулировали это как проблему оптимизации: за каждое правильно классифицированное изображение сеть получает балл, а за каждое неверно классифицированное изображение сеть не получает балла. Очко, игра без очков. Цель состоит в том, чтобы оптимизировать параметры в целом, чтобы получить как можно больше очков. Но чтобы это работало, нам нужны… ДАННЫЕ. Тысячи и тысячи изображений. "Меня?! У меня едва ли есть 10 селфи на моем телефоне». — кричишь ты. Нет, не вас, а человеческих лиц. Видите ли, нейронные сети умны. Когда они узнают, что представляет собой лицо, они могут легко отличить ваше лицо от моего.

Как это все работает? Представьте, что вы нейронная сеть. Странно, да? Голый со мной. Представьте, что вы, нейросеть, стоите на горе. На улице темно, и вы ничего не видите вокруг себя. Вы в отчаянии и хотите домой, а дом идет под откос. Единственное, что у вас есть, это… ДАННЫЕ — тысячи и тысячи изображений, сложенных стопкой на ваших ладонях. Вы смотрите на первое изображение. Парень. Имбирь. Играет на гитаре и поет о любви и прочем. Луч света сверху освещает окружающее пространство, и вы начинаете видеть направление вниз по склону. «Это действительно странно». — думаешь ты про себя, направляясь домой. Однако снова сгущается тьма. Теперь взгляните на второе изображение. Девушка. Имеет зеленые волосы и выглядит подавленным. Луч освещает ваше окружение еще раз. Шаг за шагом, просмотрев все изображения, возможно, несколько раз, вы попадаете домой, и теперь вы — нейросеть, знаете, что представляет собой человеческое лицо.

Для технически подкованных мы оптимизируем функцию потерь (гора) — по оси X у нас есть параметры модели, а по оси Y у нас есть количество того, насколько хорошо работает сеть. Для бинарной классификации мы используем бинарную функцию кросс-энтропийных потерь (игра без очков). Идея состоит в том, чтобы найти значения по оси x, где количество минимально. Эта функция многомерна, поэтому точно определить минимум или даже найти его алгебраически невозможно, поэтому вместо этого мы используем итерационный метод — стохастический градиентный спуск (просматривая изображения одно за другим и спускаясь вниз). Этот метод работает в направлении, противоположном градиенту, где функция имеет наибольшую крутизну. Но вычисление градиента для нейронной сети не является вычислительно эффективной задачей. Он включает в себя дифференциацию. Однако очень умный канадский ученый нашел хитрый трюк, чтобы сделать это действительно эффективно. Вот и алгоритм обратного распространения.

Ах, чуть не забыл. Предвзятый термин! Вы знаете старое доброе уравнение прямой линии?

Где m — наклон, а b — точка пересечения с осью y? Если бы b не существовало, мы могли бы представить только те линии, которые проходят через начало координат. Добавив b к уравнению, мы можем представить любую линию. Термин предвзятости используется не только для развлечения. Термин смещения используется для расширения набора возможных моделей, которые мы можем изучить.

Фу! Это был полный рот. Но я бы солгал, если бы сказал, что мы в конце. В этой истории я смог рассказать о нейронных сетях и обучении гораздо больше. Вам интересно узнать больше? "Нет нет. Сейчас я в порядке, спасибо».

Подробнее читайте на www.symphony.is.