Skip to content

Что такое нейросети и как они работают.

Первое что слышит человек, который только попадает в мл о нейросетях: Neuron Network is a black box – черный ящик с намеком на то, что непонятно как они работают. Нейросеть получает данные, далее что-то происходит внутри модели - того самого пресловутого black box и далее нейросеть предсказывает или генерирует что-то прикольное и полезное.
Второй уровень понимания ... тех, кто начинает работать с нейросетями, когда встречает фразу - “нейросеть – это универсальный стохастический апроксиматор”. Данное определение понимается примерно следующим образом.
Нейросети используются по-разному, но можно выделить такую цель как желание получить generalization свойство нейросети обученной на “относительно небольшом” датасете к генеральной совокупности соответствующего качества решения какой-либо задачи. Второе значение термина апроксиматора> в контексте нейросети может включать смысл, что решение будет примерное за счет того, что получить точное единственно верное решение очень сложно на ряде задач, например, из-за того, что нужно огромное число нейронов или это в принципе невозможно. Архитектура нейросети может быть меньше необходимого по числу нейронов, за счет чего текущее число нейронов недостаточно для того, чтобы выучить/запомнить все элементы генеральной совокупности.
“Универсальный” – достаточно общее слово и в этом его смысл в данном определении. Его наличие говорит о том, что нейросети можно применять к различным задачам и обучать на различных данных.
Под “стохастичностью” также понимается его прямое значение. Оно говорит о том, что в процессе обучения присутствует элемент рандома. Рандомность в процессе обучения нейросети может быть на разных уровнях. На уровне данных – шафлинг бачей данных. Рандомность на уровне инициализации весов или регуляризации посредством дропаута нейронов.
Плюс рандомность на уровне архитектуры сети, гиперпараметров, оптимизатора, размер батча и различных препроцессингов данных, произведенных специалистом. По большому счету все то, что придет в голову специалисту, который ее обучает, тоже в своем роде рандом, но обычно он выносится за скобки данного определения. В данном случае рандом можно считать разумным, за счет того, что рандом начинается с перебора бест практисов, где цель найти минимум/максимум на некоторой поверхности целевой функции ошибок.

Процесс работы с нейросетью.

Нейросеть на вход получает цифры, сама нейросеть состоит из цифр-весов и набора математических правил (операций), из которых получаются output (выходы).
Пример задач, которые может решать нейросеть это предсказание числа – температура в задаче предсказания температуры или вероятность того, что на картинке присутствует кошка в задаче классификации или номер действия, которое должен совершить агент в задаче Reinforcement Leaning или генерация текста картинок или аудио.
Нейросеть после обучения представляет из себя всего лишь один файлик, в котором записаны веса и описана сама архитектура сети. Этот файлик потом можно загрузить где-нибудь на сервере и через интерфейс браузера общаться/взаимодействовать с ней, например, как с СhatGPT.
В процессе обучения нейросети выделяют две стадии forward pass и backward pass. В процессе обучения осуществляется поиск оптимального набора параметров (весов), который бы минимизировали Loss (ошибку) или максимизировали награду (Reward) агента нейросети. Это некий промежуточный критерий, который говорит нам об успешности или неуспешности работы нейросети на текущем этапе применительно к решаемой задаче. По Loss значению мы решаем достаточно ли хороша работает нейросеть и можем ли мы прекратить процесс обучения или еще потренировать немного.
Веса нейросети обновляются за счет градиентов, посчитанных при помощи частных производных функции ошибки и пропускания данных через forward пасс нейросети и последующего backward вызова функции от функции Loss. Это удобно делать с помощью фреймворков для deep learning, которые осуществляют процесс расчетов градиентов автоматически сами за нас. На уровне forward pass Фреймворки строят динамически или статически графы вычислений, запоминая математических операции, через которые данные прошли и далее рассчитывают градиенты на шаге backward. Следующий шаг - по определенному правилу веса корректируются с помощью learning rate и текущих значений весов и посчитанных градиентов. Данная итерация повторяется несколько раз до тех пор, пока один из критериев останова не сработает. Таким образом устроен training loop.
Forward pass и в процессе обучения и процессе использования уже обученной нейросети представляет из себя набор простых математических линейных операций умножения строчек и столбцов матриц весов, а также нелинейных операций внутри функций активации.
Вне контекста нейросетей, линейные функции сами по себе позволяют работать только с простым данными, которые имеют линейные зависимости. В контексте нейронных сетей при добавления нелинейных функций активации между линейным слоями нейросети могут работать с более сложными не линейными данными такими как картинки и много чего еще.
Слоев в нейросети обычно несколько, также как и в торте. Они стакаются один за другим и их обычно много. Отсюда и пошел термин deep learning, где глубина (deep) достигается за счет числа слоев нейросети. Процессы backward и forward (оба) используются при обучении нейросети. В процессе использования обученной нейросети остается только forward процесс, где Inference time обозначают время за которое нейросеть произведет все математические операции и выдаст итоговый результат в процессе Forward прохода.

Что происходит внутри black box?

В процессе работы нейросеть из входных данных фичей формирует на каждом слое новые сложные зачастую непонятные человеку фичи, которые сложно интерпретировать и понять. В этом смысле и используется понятие black box, а не в том, как именно работают нейросети. Интерпретация внутренних фичей задачка действительно непростая и сейчас активно ведутся работы о том, чтобы понять ризонинг новых hidden фичей, почему нейросеть сформировала именно такие фичи и что они значат.
Все хотят работать с интерпретируемыми моделями и получать качество как на нейронках (это будет сложно сделать за счет того, что классические модели имеют ряд ограничений) или (альтернатива) научиться интерпретировать нейронки. Обе эти задачки на текущий момент остаются под вопросиком.
Работу нейросети можно описать как работа с пространствами (тут хотелось написать на плоскости, но тут я призадумался и написал измерениями) и измерениями и hidden представлениями новых сформированной нейросетью новых фичей. Они меняются, сжимаются и разжимаются. Сама работа обученной нейросети похожа и сравнима для меня по аналогии с оригами, где на вход подается листок (данные), далее идет процесс неких манипуляций с листом за счет hidden фичей и сворачивания и разворачивания листа бумаги и где на выходе получается какая нить лягушка или что еще посложнее и поинтереснее.


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