Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какие лучше – глубокие или неглубокие сети?

ТехнологииМашинное обучение+2
  · 726
Экс-преподаватель msu.ai, специалист образовательного центра Института ИИ при...  · 19 нояб 2021
Нейронные сети - метод машинного обучения, позволяющий в автоматическом режиме создавать и использовать сложные признаки, являющиеся комбинацией из входных признаков, описывающих интересующий нас объект (к примеру, пикселей изображения или же фактов о том или ином человеке). Если для классических (статистических) методов машинного обучения (таких как дерево решений, SVM или неких других) feature engeneering ложится на плечи разработчика, то в случае с нейронными сетями сама модель берёт на себя этот труд.
Однако в этом есть определённая опасность - есть шанс, что нейронная сеть переобучится в процессе автоматического создания признаков - научится создавать признаки, которые позволят ей достичь идеального результата на обучающей выборке, однако сталкиваясь с новыми данными она не сможет предсказать правильный ответ. Чем сложнее автоматически сгенерированные признаки, тем выше шанс переобучения модели. С другой стороны, если сгенерированные признаки слишком просты, то модель может столкнуться с недообучением. Необходимо найти некий баланс, чтобы нейронная сеть хорошо работала как на обучающей выборке, так и на незнакомых данных.
Для начала, давайте поймём, от чего зависит сложность автоматически генерируемых признаков.
  1. В первую очередь, сложность признаков явно зависит от глубины нейронной сети - каждый скрытый слой нейронной сети отвечает за создание новых признаков на основе входящих признаков. Итого, каждый слой нейронной сети позволяет создавать всё более сложные признаки.
  2. Дополнительно, сложность признаков неявно зависит от размера скрытых слоёв нейронной сети - поскольку каждый новый слой комбинирует признаки, полученные на предыдущем слое нейронной сети, увеличение размера слоя увеличивает сложность признаков, генерируемых на следующем слое (так как на следующем слое каждый из признаков будет создаваться из большего количества сложных признаков).
То есть, в общем случае неглубокие (и узкие*) нейронные сети способны генерировать несложные признаки, тогда как глубокие нейронные сети способны генерировать сложные признаки.
Сложные признаки позволяют найти сложные структуры в данных. Если данные простые (условно, уровня x1 + x2 = y), то сложные признаки могут привести к переобучению. То есть, глубокие нейронные сети в общем случае не стоит применять на простых данных (малое количество информации о каждом из объектов, а также малое количество объектов).
Несложные признаки же не позволяют заметить некие важные и очень сложные структуры в непростых данных (к примеру, изображениях или текстах). В результате, модель не может достичь подобающей точности даже на обучающей выборке. То есть, неглубокие нейронные сети в общем случае не стоит применять на сложных данных (когда имеется большое количество сложных данных).
* - важная ремарка к мысли, располагающейся два абзаца выше: в общем случае, имея два очень широких скрытых слоя в нейронной сети, можно достичь сколь угодно (с поправкой на байесовскую ошибку) хорошей точности на обучающей выборке, обгоняя даже очень глубокие, но узкие нейронные сети. Потому когда говорится об извлечении несложных признаков неглубокими нейронными сетями, стоит также уточнять, что речь именно про узкие сети.
P.s. как и было сказано, неглубокие нейронные сети лучше применять на простых, нежели на сложных данных. К тому же, они подходят для работы с простыми данными лучше, чем глубокие нейронные сети. Однако, на практике, неглубокие нейронные сети лучше не использовать вообще. Причина заключается в том, что большая часть "простых данных" имеют табличную структуру, а с ней гораздо лучше работают ранее упомянутые классические методы машинного обучения. Если Вы работаете с табличными данными, ознакомьтесь с различными реализациями градиентного бустинга - скорее всего, результат будет лучше, чем при использовании неглубоких нейронных сетей.