Добавить в корзинуПозвонить
Найти в Дзене
Порция DataScience

Скрытые слои нейронной сети, взгляд изнутри

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

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

Рис. 1
Рис. 1

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

Линейность и нелинейность

Для начала давайте поймем, чем линейные преобразования отличаются от нелинейных:

  • Линейное преобразование — это когда изменение происходит «пропорционально» и «без сюрпризов». Если входные данные умножить на два, то и результат увеличивается в два раза.
  • Нелинейное преобразование — это когда результат не пропорционален входу, и могут появляться «неожиданные эффекты». Удвоение значения входа не обязательно удваивает значение на выходе.

Преобразования внутри скрытого слоя

Ниже представлен упрощенный пример скрытого слоя нейронной сети, данные попадая на него, подвергаются сначала линейному, а потом нелинейному преобразованию и так происходит на каждом скрытом слое:

Рис. 2
Рис. 2
  • Входные данные поступающие на скрытый слой сначала преобразуются линейно (W*a+b), веса умножаются на входные значения и добавляется смещение, где W-вес, a-входные данные, b-смещение
  • Затем, к комбинации W*a+b применяется функция активации σ(W*a+b) и это уже нелинейное преобразование, где σ может быть любой функцией активации - ReLU, Sigmoid, Tanh и т.д.

Зачем нужны эти преобразования

Давайте представим «абстрактную» нейронную сеть, состоящую из двух скрытых слоев. Когда сеть производит линейные преобразования (W*a), она линейно смещает входное значение в пространстве (в нашем упрощенном случае по оси Х), но, когда производится нелинейное преобразование F(W*a), сеть пытается это смещенное значения перенести в какое-то отдельное пространство (см. Рис. 3 / Space). С каждой такой итерацией (по мере прохождения через скрытые слои), данные со схожими признаками постепенно группируются между собой, сначала в пространства с условно «размытыми границами», а затем в пространства с все более «четкими границами».

Рис. 3
Рис. 3

Что поступает на выходной слой

Вернемся к ранее обсуждаемому Рис. 2, предположим, что описанные преобразование данных произошли на самом последнем скрытом слое нейронной сети. Как только это произошло, данные попадают на последний выходной слой сети для последнего преобразования (см. Рис. 4). Поскольку наша сеть бинарная, то на последнем слое она должна выдать ответ, черное это или белое, кошка это или собака. На последнем выходном слое вроде бы происходит все тоже самое, что и на скрытых слоях, сначала происходит линейное преобразование (W*a+b), а затем нелинейное Sigmoid(W*a+b), но по факту, на выходном слое, функция активации уже не изучает «нелинейности», она просто выполняет классификацию.

Рис. 4
Рис. 4

Если последний выходной слой не занимается изучением «нелинейности», то данные, которые на него поступают от скрытых слоев, должны быть уже разделены. Таким образом, для получения точных прогнозов, данные полученные выходным слоем от последнего скрытого слоя, ДОЛЖНЫ БЫТЬ линейно разделенными.

Давайте проверим это экспериментально и поймем, что на самом деле поступает на вход выходного слоя. Для этого можно перед выходным слоем добавить фиктивный скрытый слой, состоящий всего лишь из двух нейронов (Рис. 5 / выделен желтым цветом) и снова обучить нейронную сеть.

Рис. 5
Рис. 5

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