Младший консультант
GDPR DPP, GDPR DPM, DPT, CIPP/E
Разгадка тайн нейронных сетей
- 23 мая, 2024
- AI, Обработка данных
Нейросети играют важную роль в нашей жизни, но их внутреннее устройство зачастую остается тайной. В этой статье мы погрузимся в мир нейросетей, чтобы понять, как они работают. В качестве примера возьмем нейросеть для распознавания изображений и разберёмся как AI анализирует изображения, находит на них различные признаки и принимает решения.
Содержание
Подкаст "Про Приватность"
Открытая площадка, где прайваси-эксперты обсуждают актуальные вопросы из сферы приватности.
Яндекс.Музыка | Spotify | Google Podcasts | Castbox | Mave
Строительные блоки нейронных сетей
Нейросети состоят из связанных узлов, иногда называемых “нейроны” (в англоязычной литературе часто используется термин nodes). Эти “нейроны” служат фундаментальными вычислительными единицами, которые обрабатывают и передают информацию по всей нейросети. Подобно биологическим нейронам в нашем мозге, искусственные “нейроны” работают совместно для решения сложных задач. Давайте разберем их работу на примере.
Пример: Представим, что у нас есть “нейрон”, который пытается определить цену за одну ночь в отеле на основе нескольких факторов, таких как расстояние до центра города, рейтинг отеля и количество звезд. Каждый из этих факторов является входным значением для нашего нейрона, то есть информацией, которую он получает. У каждого входа есть свой вес, который представляет собой важность этого фактора для принятия решения. Например, если нейрон посчитает, что рейтинг — самый важный фактор, то ему будет присвоен бОльший вес, чем другим входам, и он будет больше влиять на цену отеля, чем другие факторы. Допустим, рейтинг имеет вес 0.6, расстояние — 0.3, а количество звезд — 0.4. Кроме того, у нашего нейрона есть смещение, которое можно рассматривать как некий уровень чувствительности нейрона. Если смещение высокое, “нейрон” будет более склонен к принятию положительного решения при небольших входных значениях. Напротив, низкое смещение означает, что нейрон будет активироваться только при более значительных входных значениях. В нашем примере смещение можно представить как минимальную цену, ниже которой отель арендовать невозможно. Эта цена будет прибавляться к каждому выходному значению. Теперь, когда у нас есть веса и смещение, “нейрон” суммирует произведения весов и входных значений, добавляет смещение и передает эту сумму функции активации. Так, если общая сумма ниже определенного порога, “нейрон” может решить, что цену определить невозможно и передаст 0. Таким образом, наш “нейрон” анализирует различные факторы (входные значения), учитывая их важность (веса) и изначальные значения (смещение), чтобы принять решение о цене отеля.
Выход = Функция активации (сумма входов, каждый из которых умножен на свой вес + смещение)
Слои: Организация нейронов в функциональные единицы
Каждый “нейрон” передает свое выходное значение следующему, который делает свой вывод, уже основываясь на выходе предыдущего. Например, если бы целью нашей нейросети было сделать вывод о том, стоит ли строить отель в определенном месте, то следующий нейрон использовал бы информацию о примерной цене за ночь в отеле, чтобы сделать свой вывод о рентабельности отеля. “Нейроны” объединяются в группы, которые анализируют какие-то конкретные характеристики, а группы “нейронов” — в слои, каждый из которых выполняет определенную задачу в процессе обработки информации. В нейросетях существует три основных типа слоев:
1. Входной слой: Это начальный слой, на котором сеть получает внешние данные. Каждый нейрон в этом слое представляет характеристику или атрибут входных данных. Таким образом, если нейросеть получает на вход фотографию, “нейроны” на входном слое разбивают ее на кусочки, которые потом будут анализироваться.
2. Скрытые слои: Это слои между входным и выходным слоями, где происходят фактические вычисления. Количество скрытых слоев и нейронов в них может варьироваться, что позволяет нейронным сетям моделировать сложные взаимосвязи в данных.
3. Выходной слой: Это финальный слой, который выдает прогнозы или классификации сети на основе обработанных входных данных. Количество “нейронов” в этом слое обычно соответствует количеству возможных выходов.
Часто также выделяют отдельно сверточные слои (convolution layers): Когда фотография проходит через сверточный слой, происходит что-то похожее на сканирование изображения. Нейросеть на этом слое ищет определенные узоры или фигуры, например, края, углы, или текстуры, которые помогают понять, что на картинке изображено. После сверточного слоя фотография разбивается на кусочки из найденных объектов, которые будут меньше размером и их легче будет анализировать.
На иллюстрации ниже вы можете увидеть пример нейросети, которая анализирует цену за отель, основываясь на площади номера, количестве спален, расстоянии до города и возрасте клиента (на случай скидок для пенсионеров). — вообще, лучше нарисовать свою схему на предыдущем примере:
Путешествие данных через нейронную сеть
Представьте себе нейронную сеть, которой поручено проанализировать Вашу фотографию, и сделать выводы относительно ее содержания. Например, какого пола человек изображен на фотографии, во что он одет и сколько ему лет. По мере того, как Ваша фотография начинает свое путешествие по этой нейронной сети, она проходит ряд сложных вычислений.
Распространение вперед
Чтобы визуализировать, что «видит» нейросеть, на какие вещи она обращает внимание, можно использовать технику, называемую визуализацией признаков (feature visualization). Эта техника позволяет воссоздать изображения, которые максимально активируют определенные нейроны в нейросети.
Процесс визуализации признаков начинается со случайного изображения или шума, которое затем подвергается оптимизации, чтобы максимизировать активацию конкретного “нейрона” или группы “нейронов” в определенном слое нейросети. Это достигается путем изменения пикселей изображения таким образом, чтобы они максимально активировали выбранные “нейроны”.
После нескольких итераций оптимизации получается изображение, которое максимально стимулирует выбранные “нейроны”. Это изображение можно интерпретировать как визуализацию того, что «видит» нейросеть в данных.
Для начала нейросеть получает Вашу фотографию, которая для нее выглядит как таблица, каждая ячейка которой содержит код, обозначающий цвет одного пикселя. Например, черный цвет имеет код #000000.
По мере того, как она проходит через сеть, она подвергается ряду преобразований, которые постепенно расшифровывают ее особенности, нюансы и закономерности.
Ниже вы видите иллюстрацию того, как нейросеть на более поздних слоях “видит” характеристики одного участка фотографии. Сбоку показано значение функции активации каждого выхода. Таким образом, что нейросеть “видит”, что выбранный участок похож на шею человека или нижнюю часть лица.
Обратное распространение: Учимся на ошибках
Так как чаще всего для обучения нейросетей, распознающих изображения, используется обучение “с учителем” (подробнее о видах обучения можете посмотреть в моей предыдущей статье), когда путешествие фотографии по сети достигает своей кульминации на выходном слое, прогнозы сети сравниваются с реальным содержанием фотографии, анализируя расхождение. Именно здесь в игру вступает обратное распространение, позволяя сети учиться на своих ошибках и уточнять свое понимание фотографии.
Вычисление градиентов
Обратное распространение включает в себя расчет градиентов разными методами, которые представляют собой скорость изменения ошибки сети по отношению к ее весам и смещениям (на графике ниже градиент выглядит как угол наклона стрелочки: чем больше разница между желаемым и полученным результатом, тем больше угол наклона). По сути, этот шаг определяет, какой вклад вносит каждый параметр в общую ошибку предсказания, чтобы потом изменить его и приблизиться к желаемому значению.
Обновление весов и смещений
Вооружившись градиентами, сеть обновляет свои веса и смещения с помощью алгоритмов оптимизации, таких как градиентный спуск, направляя их в сторону минимизации ошибок. Именно этот процесс и позволяет сети учиться.
Примечание: В нашей статье мы будем рассматривать градиентный спуск в классическом виде, однако следует заметить, что когда речь идет об анализе изображений в виду большой размерности градиентный спуск в изначальном виде может быть невозможен, поэтому приходится использовать приближенные к нему методы, которые руководствуются похожей логикой.
На графике ниже можно увидеть этот процесс более подробно. Значение W0 — это желаемый результат вычислений. Это те значения, которые разработчик дает нейросети в конце, говоря “На фотографии с вероятностью 100% был изображен мужчина”. А We1 — результат, полученный изначально нейросетью: “На фотографии с вероятностью 80% изображена женщина”. С помощью градиентного спуска, нейросеть меняет свои веса таким образом, чтобы приблизится к W0. Она вычислит, какой именно фактор повлиял на ошибку и изменит его вес. Например, нейросеть изначально могла “решить”, что у всех женщин острый подбородок, и поэтому у этого признака был суммарно большой вес. После того, как в нейросеть поступит фотография мужчины с острым подбородком, она уменьшит вес этого признака, чтобы он не искажал результат.
После обновления весов и перерасчета, она получает значение We2, которое лежит ближе к желаемому: “На фотографии с вероятностью 60% женщина”.
Далее процесс обучения будет повторяться до тех пор, пока разработчик не будет удовлетворен результатом работы нейросети.
Погружение вглубь нейросети
Когда фотография проходит через нейронную сеть, каждый последующий слой как правило анализирует ее более сложные признаки.
Так, например, первые скрытые слои могут отвечать за распознавание базовых характеристик изображения, таких как грани, текстуры и цвета. “Нейроны” в первом слое могут реагировать на вертикальные или горизонтальные линии на изображении, а другие могут определять области с определенным цветом.
По мере продвижения изображения через сеть, промежуточные слои начинают агрегировать базовые характеристики, обнаруженные в предыдущих слоях, для распознавания более сложных паттернов. Например, нейроны в этих слоях могут начать формировать комбинации граней для определения более сложных текстур, таких как кожа или волосы.
Последние слои обычно отвечают за распознавание более абстрактных и сложных понятий, таких как форма лица, расположение глаз и рта, чтобы сделать окончательное предсказание о том, содержит ли изображение объект, который обучалась распознавать сеть, например, лицо.
Так, на иллюстрации ниже, крайний слева слой анализирует точечные характеристики изображения, пытается определить цвет и текстуру в конкретном месте фотографии, а крайний справа обобщает характеристики и пытается распознать более общие закономерности.
Но почему то, что “видит” нейросеть так сильно отличается от изначальной фотографии?
На более поздних слоях нейросети, изображения становятся менее похожими на исходные фотографии, потому что на этапе обработки нейросеть сосредотачивается на абстрактных и сложных признаках и понятиях, которые она выучила из тренировочных данных. Вот почему это происходит:
1. Пулинг: Пулинговые слои уменьшают размер изображения, сохраняя только важные характеристики (например, для определения, изображен ли на фотографии человек, нейросеть может решить, что ей не важен фон фотографии и “размыть его”). В результате изображение становится менее детализированным, но сохраняет основные признаки. Можно сказать, что это «обобщенная» версия изображения, которая помогает упростить обработку для нейронной сети, не теряя важной информации.
2. Абстракция: Нейросеть стремится к абстракции, выделяя особенности, которые ей кажутся важными для различения между классами объектов. Это может привести к тому, что изображения становятся все более абстрактными и трудно интерпретируемыми для человеческого восприятия. То, какие именно особенности ей покажутся важными, во многом зависит от данных, на которых нейросеть обучалась. Например, если все мужчины, которых нейросеть “видела”, были в черных очках, то нейросеть первым делом научится распознавать на фотографии черные очки, а остальные признаки, такие как форма лица или волосы на лице, она будет опускать.
В итоге, хотя нейросети могут быть эффективными в распознавании и классификации изображений, их способность «видеть» мир может быть очень отличной от того, как это делает человек.
Как мы можем понять, что “видит” нейросеть?
Данные, которые «видит» нейросеть, хранятся в ее весах и смещениях. Обучение нейросети заключается в том, чтобы настроить эти веса и смещения таким образом, чтобы они лучше всего соответствовали задаче классификации или распознавания объектов. Когда нейросеть “видит” какой-то признак, который она уже обучена распознавать, определенная группа “нейронов” в ней “загораются”: подобно связям в мозгу, через которые проходит сигнал. То, насколько сильно нейросеть “реагирует” на какое-то изображение, можно увидеть по значениям функций активаций: чем они больше, тем активнее “нейроны” реагируют на изображения, а значит, они его “узнают”.
Как эти данные оттуда извлечь?
Чтобы визуализировать, что «видит» нейросеть, на какие вещи она обращает внимание, можно использовать технику, называемую визуализацией признаков (feature visualization). Эта техника позволяет воссоздать изображения, которые максимально активируют определенные нейроны в нейросети.
Процесс визуализации признаков начинается со случайного изображения или шума, которое затем подвергается оптимизации, чтобы максимизировать активацию конкретного “нейрона” или группы “нейронов” в определенном слое нейросети. Это достигается путем изменения пикселей изображения таким образом, чтобы они максимально активировали выбранные “нейроны”.
После нескольких итераций оптимизации получается изображение, которое максимально стимулирует выбранные “нейроны”. Это изображение можно интерпретировать как визуализацию того, что «видит» нейросеть в данных.
Может ли нейросеть хранить персональные данные?
Когда нейросеть обучается на данных, она стремится извлечь наиболее важные признаки из этой информации, которые помогут ей делать точные прогнозы или принимать решения в будущем. Однако в процессе этого обобщения она может «помнить» определенные детали обучающих данных в своих весах и смещениях.
Вот как это может происходить: представим, что у нас есть набор фотографий человека для обучения нейросети. Этот набор может содержать различные фотографии с разных углов, в разном освещении и с разными выражениями лица. Нейросеть старается выделить общие черты лица, которые помогут ей распознавать человека на других изображениях. Однако, если в обучающей выборке были какие-то уникальные особенности этого человека, которые не были представлены в достаточном количестве, нейросеть может «запомнить» эти детали и использовать их для классификации в будущем. В таком случае, если мы визуализируем то, что “видит” нейросеть, на экране будет кусочек фотографии этих деталей в первоначальном виде, так как его значение было сохранено в весах и смещениях, а значит именно он будет наибольшим образом активировать “нейроны”, а не усредненное значение всех обучающих фотографий.
Это может быть проблемой в случае недостаточного или неполного представления разнообразия объектов в обучающих данных.
Одной из основных проблем здесь является то, что разработчики могут не замечать недостатков в обучающей выборке из-за ее большого объема. Представьте, что у вас есть тысячи фотографий, используемых для обучения нейросети. В таких больших объемах данных легко пропустить какие-то мелкие детали или недостатки, особенно если обучение проводится автоматически или с использованием больших наборов данных.
Важно понимать, что после завершения обучения нейросеть и все связанные с ней параметры, включая итоговые веса и смещения, сохраняются в файле, который отправляется заказчику. Таким образом, данные, которые были использованы для обучения нейросети, фактически сохраняются (правда, в преобразованном виде) внутри файла и будут отправлены дальше.
Заключение
Понимание того, как работают нейронные сети на уровне их внутренних механизмов, является ключом к раскрытию их потенциала и применению в различных областях, а также к возможным проблемам. Мы рассмотрели основные концепции функционирования нейросетей, включая процесс обучения, вычисление градиентов и работу нейронов. Нейросети могут быть успешно применены в различных задачах, от распознавания изображений до автономного управления. Однако важно помнить о необходимости бережного анализа и интерпретации результатов, а также о постоянном совершенствовании методов работы с нейронными сетями. Следует также учитывать вопросы приватности и этики при разработке и применении подобных технологий.