Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Первая нейронная сеть
В этом упражнении мы обучим нашу первую маленькую нейронную сеть. Нейронные сети дадут нам возможность изучать нелинейные модели без использования явных скрещиваний признаков.
Задача 1: Данная модель объединяет две наши входные функции в один нейрон. Изучит ли эта модель какие-либо нелинейности? Запустите его, чтобы подтвердить свою догадку.
Задача 2: Попробуйте увеличить количество нейронов в скрытом слое с 1 до 2, а также попробуйте перейти от линейной активации к нелинейной активации, такой как ReLU. Можете ли вы создать модель, которая может изучать нелинейности? Может ли он эффективно моделировать данные?
Задача 3: Попробуйте увеличить количество нейронов в скрытом слое с 2 до 3, используя нелинейную активацию, например ReLU. Может ли он эффективно моделировать данные? Как качество модели меняется от запуска к запуску?
Задача 4: Продолжайте экспериментировать, добавляя или удаляя скрытые слои и нейроны для каждого слоя. Также не стесняйтесь изменять скорость обучения, регуляризацию и другие настройки обучения. Какое наименьшее количество нейронов и слоев вы можете использовать, чтобы получить потери при тестировании 0,177 или ниже?
Улучшает ли увеличение размера модели подгонку или насколько быстро она сходится? Изменяется ли это, как часто он сходится к хорошей модели? Например, попробуйте следующую архитектуру:
Первый скрытый слой с 3 нейронами.
Второй скрытый слой с 3 нейронами.
Третий скрытый слой с 2 нейронами.
(Ответы находятся сразу под упражнением.)
Щелкните значок плюса для ответа на Задание 1.
Активация установлена на Linear , поэтому эта модель не может изучать какие-либо нелинейности. Потери очень велики, и мы говорим, что модель не соответствует данным.
Щелкните значок плюса для ответа на Задание 2.
Нелинейная функция активации может изучать нелинейные модели. Однако один скрытый слой с двумя нейронами не может отразить все нелинейности в этом наборе данных и будет иметь большие потери даже без шума: он все равно не соответствует данным. Эти упражнения недетерминированы, поэтому некоторые прогоны не изучат эффективную модель, в то время как другие прогоны сделают довольно хорошую работу. Лучшая модель может иметь не ту форму, которую вы ожидаете!
Щелкните значок плюса для ответа на Задание 3.
В этом упражнении ярко проявляется недетерминированный характер игровой площадки. Одного скрытого слоя с 3 нейронами достаточно для моделирования набора данных (отсутствие шума), но не все прогоны сходятся к хорошей модели.
3 нейронов достаточно, потому что функция XOR может быть выражена как комбинация 3 полуплоскостей (активация ReLU). Вы можете увидеть это, взглянув на изображения нейронов, которые показывают выходные данные отдельных нейронов. В хорошей модели с 3 нейронами и активацией ReLU будет 1 изображение с почти вертикальной линией, обнаруживающее, что X 1 является положительным (или отрицательным; знак может быть изменен), 1 изображение с почти горизонтальной линией, определяющее знак X 2 и 1 изображение с диагональной линией, обнаруживающее их взаимодействие.
Однако не все прогоны сходятся к хорошей модели. Некоторые прогоны будут не лучше, чем модель с двумя нейронами, и в этих случаях вы можете увидеть повторяющиеся нейроны.
Щелкните значок плюса, чтобы получить ответ на задание 4.
Один скрытый слой с 3 нейронами может моделировать данные, но в нем нет избыточности, поэтому при многих запусках он фактически потеряет нейрон и не получит хорошую модель. Один слой с более чем 3 нейронами имеет большую избыточность и, следовательно, с большей вероятностью сойдется к хорошей модели.
Как мы видели, один скрытый слой всего с двумя нейронами не может хорошо моделировать данные. Если вы попробуете, то увидите, что все элементы в выходном слое могут быть только фигурами, состоящими из линий из этих двух узлов. В этом случае более глубокая сеть может моделировать набор данных лучше, чем один только первый скрытый слой: отдельные нейроны во втором слое могут моделировать более сложные формы, такие как правый верхний квадрант, путем объединения нейронов в первом слое. Хотя добавление этого второго скрытого слоя по-прежнему может моделировать набор данных лучше, чем только первый скрытый слой, может иметь смысл добавить больше узлов к первому слою, чтобы позволить большему количеству линий быть частью набора, из которого второй слой строит свои формы. .
Однако модель с 1 нейроном в первом скрытом слое не может обучить хорошую модель, какой бы глубокой она ни была. Это связано с тем, что выходные данные первого слоя различаются только по одному измерению (обычно по диагонали), чего недостаточно для хорошего моделирования этого набора данных. Более поздние слои не могут компенсировать это, какими бы сложными они ни были; информация во входных данных была безвозвратно утеряна.
Что, если вместо того, чтобы пытаться создать небольшую сеть, у нас будет много слоев с большим количеством нейронов для такой простой задачи, как эта? Что ж, как мы видели, первый слой будет иметь возможность попробовать множество различных наклонов линий. И второй слой будет иметь возможность накапливать их во множество различных форм, с большим количеством форм на последующих слоях.
Позволив модели учитывать так много разных форм через такое множество разных скрытых нейронов, вы создали достаточно места для того, чтобы модель начала легко подгонять шум в тренировочном наборе, позволяя этим сложным формам соответствовать недостаткам тренировочных данных. а не обобщенная основная истина. В этом примере более крупные модели могут иметь сложные границы для соответствия точным точкам данных. В крайних случаях большая модель может изучить остров вокруг отдельной точки шума, что называется запоминанием данных. Позволив модели быть намного больше, вы увидите, что на самом деле она часто работает хуже , чем более простая модель с достаточным количеством нейронов для решения проблемы.
Инициализация нейронной сети
В этом упражнении снова используются данные XOR, но рассматривается повторяемость обучения нейронных сетей и важность инициализации.
Задача 1: Запустите модель четыре или пять раз. Перед каждым испытанием нажимайте кнопку « Сбросить сеть» , чтобы получить новую случайную инициализацию. (Кнопка « Сброс сети» — это круглая стрелка сброса слева от кнопки «Воспроизвести».) Пусть каждая пробная версия выполняется не менее чем на 500 шагов, чтобы обеспечить конвергенцию. К какой форме сходится выход каждой модели? Что это говорит о роли инициализации в невыпуклой оптимизации?
Задача 2: Попробуйте немного усложнить модель, добавив слой и пару дополнительных узлов. Повторите испытания из Задания 1. Добавляет ли это дополнительную стабильность результатам?
(Ответы находятся сразу под упражнением.)
Щелкните значок плюса для ответа на Задание 1.
Выученная модель имела разные формы при каждом прогоне. Потери в конвергентном тесте варьировались почти в 2 раза от самого низкого до самого высокого.
Щелкните значок плюса для ответа на Задание 2.
Добавление слоя и дополнительных узлов дало более воспроизводимые результаты. При каждом прогоне результирующая модель выглядела примерно одинаково. Кроме того, потеря конвергентного теста показала меньшую дисперсию между запусками.
Спираль нейронной сети
Этот набор данных представляет собой зашумленную спираль. Очевидно, что линейная модель здесь не работает, но даже определенные вручную пересечения признаков могут быть трудными для построения.
Задача 1: Обучите лучшую из возможных моделей, используя только X 1 и X 2 . Не стесняйтесь добавлять или удалять слои и нейроны, изменять настройки обучения, такие как скорость обучения, скорость регуляризации и размер пакета. Какую максимальную потерю при тестировании вы можете получить? Насколько гладкой является выходная поверхность модели?
Задача 2. Даже при использовании нейронных сетей для достижения наилучшей производительности часто требуется некоторый объем разработки функций. Попробуйте добавить дополнительные функции перекрестного произведения или другие преобразования, такие как sin(X 1 ) и sin(X 2 ). У вас есть лучшая модель? Является ли выходная поверхность модели более гладкой?
(Ответы находятся сразу под упражнением.)
Щелкните значок плюса для возможных ответов.
В следующем видеоролике показано, как выбрать гиперпараметры в Playground для обучения модели спиральным данным, чтобы свести к минимуму потери при тестировании.