Сегодня я работал на 3 неделе первого курса от Coursera DL. Я узнал о мелкой нейронной сети. В основном это был обзор Coursera ML, но были и кое-что новое, чего я не знал.

Мелкая нейронная сеть

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

Прямое распространение

Мы можем выполнить прямое распространение следующим образом:

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

Обратите внимание, что каждый образец хранится в матрицах по столбцам.

Функция активации

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

Сигмовидная функция

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

Функция Тан

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

Функция ReLU

ReLU расшифровывается как Rectified Linear Unit. Недавние исследования показали, что это сходится примерно в 6 раз быстрее, чем активация tanh. Эта функция решает проблему исчезающего градиента. Недостаток известен как умирающий ReLU. Этот ответ более подробно объясняет проблему. По сути, это говорит о том, что как только все обучающие примеры дают z меньше 0 для определенного узла, у узла нет шансов снова активироваться, потому что градиент навсегда равен нулю. Но вероятность того, что это произойдет, довольно мала при надлежащей предварительной обработке данных, такой как нормализация среднего. На практике функция ReLU достаточно хороша. Leaky ReLU может полностью избежать этой проблемы.

Дырявый ReLU

Leaky ReLU решает проблему «умирающего ReLU». Это оставляет шанс для повторной активации узла.

Производные каждой функции активации

Обратное распространение

Мы уже доказали формулу обратного распространения на День 32, поэтому не будем повторяться в доказательстве. (Честно говоря, я уже забыл, как делал доказательство.) Здесь мы просто взглянем на векторизованную реализацию обратного распространения.

Случайная инициализация

В отличие от логистической регрессии, мы не можем просто установить все наши параметры равными нулю. Если мы это сделаем, каждый узел в конечном итоге продолжит вычисление одной и той же функции и, таким образом, уменьшит сложность функции, которую мы можем представить. Мы будем случайным образом инициализировать значения весов около нуля, скажем, между -0,01 и 0,01. Зачем ставить около нуля? Если для начала мы установим w в несколько больших значений, выход z, который он производит, тоже будет большим. Если z велико, градиент вокруг этой точки будет небольшим, что означает, что обучение будет медленным. Теперь мы можем просто установить b равным нулю, поскольку рандомизации w уже достаточно для решения проблемы нарушения симметрии.

Это все на сегодня.