Шаг 98.
Задачи ComputerScience на Python.
Простейшие нейронные сети. Проблемы и расширения нейронных сетей

    На этом шаге мы перечислим проблемы, возникающие при использовании нейронных сетей.

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

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

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

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

    Одним из приятных нюансов является то, что в вычислительном отношении обучение обходится намного дороже, чем использование сети. Некоторые приложения не требуют постоянного обучения. В этих случаях обученную сеть можно просто вставить в приложение для решения задачи. Например, первая версия платформы Apple Core ML даже не поддерживает обучение. Она только помогает разработчикам приложений запускать предварительно обученные модели нейронных сетей в своих приложениях. Разработчик, создающий приложение для обработки фотографий, может загрузить модель классификации изображений с открытой лицензией, вставить ее в Core ML и сразу же начать задействовать эффективное машинное обучение в своем приложении.

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

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

    На следующем шаге мы подведем некоторые итоги.




Предыдущий шаг Содержание Следующий шаг