• 06/08/2021

Я только что закончил третью неделю изучения нейронных сетей и глубокого обучения на Coursera. Я собираюсь обобщить некоторые моменты, которые я узнал сегодня, но это может быть не совсем точным/правильным.

На этой неделе пытались представить нейронную сеть со скрытым слоем, включая нелинейную функцию активации (сигмоид, танх, ReLu, Leaky ReLu), как реализовать прямое/обратное распространение для прогнозирования значения и улучшения параметра модели и объяснить нулевая/случайная инициализация параметров. Наконец, задача программирования состоит в том, чтобы построить модель классификации, вычислив весь процесс нейронной сети.

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

Также часто будет использоваться другая нелинейная активация ReLu/Leaky ReLu (max(0,z)/max(0.01z, z)). Если z>0, производная будет равна единице, так как это линейная функция, когда z>0. Если z ‹=0, производная будет равна нулю, и обучение для следующего слоя будет медленным, но все будет в порядке, поскольку компьютер примет 0 за 0,00000000001, и обучение может продолжаться. Если вы не уверены, что использовать для своего скрытия, ReLu будет хорошим выбором в качестве функции активации по умолчанию. Преимущество ReLu заключается в том, что он может обучаться намного быстрее по сравнению с сигмоидой и тангенсом, потому что у него будет меньше шансов, что наклон станет равным нулю.

Для прямого/обратного распространения использовалась двухслойная демонстрация нейронной сети (скрытый слой и выходной слой). Во-первых, он просто представляет, как вычислить вес, смещение для каждого слоя и какова форма для параметров каждого слоя (df.shape поможет). Векторизация также очень полезна вместо выполнения цикла for по всей обучающей выборке. Это помогает вычислить весь выборочный набор одновременно. Выполняя градиентный спуск (W1 = W1 — Learning_rate * dW1), использовалось обратное распространение для получения производной каждого параметра в каждом слое. Это объяснило, как мы можем получить все эти производные с частной производной. Это не важно знать, поскольку вы все равно можете вычислить его с помощью кода, но я думаю, что это очень поможет понять, как это работает.

Инициализация также является важной функцией, которую нам нужно учитывать для всей нейронной сети. Обычно используется случайная инициализация, поскольку она может решить проблему симметрии параметров и предотвратить остановку градиентного спуска. Можно использовать случайную инициализацию для логистической регрессии, поскольку у нее нет скрытого слоя, а значения веса будут разными на каждой итерации. Для нейронной сети не следует использовать нулевую инициализацию, так как это вызовет симметричную производную параметров и сделает все скрытым как одну и ту же функцию. Следовательно, эти параметры не могут быть улучшены независимо от количества скрытых слоев. Кроме того, попробуйте реализовать небольшое случайное значение для сигмовидной/тангенциальной функции, поскольку большое инициализированное значение замедлит градиентный спуск.

Последнее задание по программированию просто пыталось помочь мне создать функцию кодирования для каждого шага нейронной сети. Это помогло мне лучше понять, как работает нейронная сеть на каком-то примере, и я могу попробовать применить ее к некоторому набору данных, найденному в Kaggle. Также поясняется, что большое количество скрытых слоев вызовет проблему переобучения, а точность нейросетей будет низкой. Поэтому нам может потребоваться повторение/настройка количества скрытых слоев для получения наилучшей точности.

Пожалуйста, оставьте комментарий, если есть какие-либо ошибки/отсутствия или просто обсудите, как вы будете работать над этими шагами для создания нейронной сети. Спасибо за просмотр. Хаста Луего!