На этом шаге мы дадим превоначальную оценку сложности построения нейронных сетей.
Наиболее важными параметрами являются ряде слоев и число скрытых блоков в одном слое. Вы должны начать с одной или двумя скрытыми слоями, и, возможно, расширить оттуда. Количество узлов на скрытом уровне часто аналогично числу входных функций, но редко выше, чем в низких до средних тысяч.
Полезным показателем, позволяющим судить о сложности нейронной сети, является количество вычисляемых в ходе обучения весов или коэффициентов. Если вы работаете с 2-классовым набором данных, содержащим 100 признаков, и используете нейронную сеть, состоящую из 100 скрытых элементов, то между входным и первым скрытым слоем будет 100 * 100 = 10000 весов. Кроме того, между скрытым слоем и выходным слоем будет 100 * 1 = 100 весов, что в итоге даст около 10100 весов. Если использовать второй скрытый слой размером 100 скрытых элементов, то 100 * 100 = 10000 весов из первого скрытого слоя добавятся ко второму скрытому слою, что в итоге составит 20100 весов. Если вместо этого вы будете использовать один слой из 1000 скрытых элементов, вы вычислите 100 * 1000 = 100000 весов на пути от входного слоя к скрытому слою и 1000 * 1 весов на пути из скрытого слоя к выходному слою, всего 101000 весов. Если использовать второй скрытый слой, вы добавите еще 1000 * 1000 = 1000000 весов, получив колоссальную цифру 1101000, что в 50 раз больше количества весов, вычисленных для модели с двумя скрытыми слоями по 100 элементов в каждом.
Общераспространенный способ настройки параметров в нейронной сети - сначала построить сеть достаточно большого размера, чтобы она обучилась. Затем, убедившись в том, что сеть может обучаться, сжимаете веса сети или увеличиваете alpha, чтобы добавить регуляризацию, которая улучшит обобщающую способность.
В наших экспериментах мы сосредоточились главным образом на спецификации модели: количестве слоев и узлов в слое, регуляризации и нелинейных функциях активации. Эти параметры задают модель, которую мы хотим обучить. Кроме того, встает вопрос о том, как обучить модель или алгоритм, который используется для вычисления весов и задается с помощью параметра solver. Существует два простых в использовании алгоритма. Алгоритм 'adam', выставленный по умолчанию, дает хорошее качество в большинстве ситуаций, но весьма чувствителен к масштабированию данных (поэтому важно отмасштабировать ваши данные так, чтобы каждая характиристика имела среднее 0 и дисперсию 1). Другой алгоритм 'lbfgs' вполне надежен, но может занять много времени в случае больших моделей или больших массивов данных. Существует также более продвинутая опция 'sgd', которая используется многими специалистами по глубокому обучению. Опция 'sgd' имеет большее количество дополнительных параметров, которые нужно настроить для получения наилучших результатов. Вы можете найти описания всех этих параметров в руководстве пользователя. Начиная работать с MLP, придерживайтесь алгоритмов 'adam' и 'l-bfgs'.
Важное свойство моделей scikit-learn заключается в том, что вызов метода fit всегда будет сбрасывать все, чему модель обучилась ранее. Таким образом, если вы построите модель на одном наборе данных, а затем вызовете метод fit снова для другого набора данных, модель "забудет" все, чему обучилась на первом наборе данных. Вы можете без ограничений вызывать метод fit для модели и результат будет таким, как если бы вы вызвали его для "новой" модели.
На следующем шаге мы рассмотрим оценки неопределенности для классификаторов.