Шаг 62.
Основы создания нейросети на Python. Создаем нейронную сеть на Python. Набор рукописных цифр MNIST. Изменение конфигурации сети

    На этом шаге мы рассмотрим влияние изменения конфигурации сети на результаты обучения.

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

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

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

    Что, если бы у нас было 10 тысяч скрытых узлов? Ну да, в таком случае способности к обучению вполне хватило бы, но мы могли бы столкнуться с трудностями обучения сети, поскольку число маршрутов обучения было бы непомерно большим. Не исключено, что для тренировки такой сети понадобилось бы 10 тысяч эпох.

    Выполним эксперименты и посмотрим, что получится.

    Как видите, при небольшом количестве узлов результаты хуже, чем при больших количествах. Это совпадает с нашими ожиданиями. Однако даже для всего лишь пяти скрытых узлов показатель эффективности составил 0,7001. Это удивительно, поскольку при столь малом количестве узлов, в которых происходит собственно обучение сети, она все равно дает 70% правильных ответов. Вспомните, что до этого мы выполняли тесты, используя сто скрытых узлов. Но даже десять скрытых узлов обеспечивают точность 0,8998, или 90%, что тоже впечатляет.

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

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

    Мы также установили новый рекорд точности: 0,9751 при 200 скрытых узлах. Длительный расчет с 500 узлами обеспечил точность 0,9762. Это действительно неплохо по сравнению с результатами эталонных тестов, опубликованными на сайте Лекуна по адресу http://yann.lecun.com/exdb/mnist/.

    Возвращаясь к графикам, можно заметить, что неподдающийся ранее предел точности 97% был преодолен за счет изменения конфигурации сети.

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




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