Сегодня я работал на 3 неделе курса второй специализации Эндрю Нг. Я узнал о пакетной нормализации и регрессии softmax.
Настройка гиперпараметров
Традиционно у нас есть только несколько гиперпараметров для настройки. Можно было использовать сетку для поиска оптимальных гипераппараметров.
Однако чем больше гиперпараметров нам нужно настроить, тем менее эффективной будет сеточная система. Нам лучше случайным образом выбрать гиперпараметры и протестировать больше различных значений. Попробовав случайные значения, мы увидим, что есть область с хорошей производительностью. Затем мы уточним наш поиск гиперпараметров в этой области. Этот процесс называется от грубого до тонкого.
Допустим, мы хотим случайным образом выбрать значение 𝛼 в диапазоне от 0,0001 до 0,1. Как мы это делаем в Python? Вот в чем хитрость.
r = -3 * np.random.rand() - 1 # [-4, -1] 𝛼 = 10ʳ # [0.0001, 0.1]
Что, если нам нужно значение β от 0,9 до 0,999? Хитрость заключается в использовании 1-β.
r = -2 * np.random.rain() - 1 # [-3, -1] 1-β = 10ʳ # [0.001, 0.1] β = 1 - 10ʳ # [0.999, 0.9]
Пакетная нормализация
Пакетная нормализация — один из самых мощных методов оптимизации (точнее, метод адаптивной репараметризации). В то время как в исходной статье утверждается, что цель пакетной нормализации состоит в уменьшении так называемого внутреннего ковариатного сдвига (ICS), на Reddit есть несколько дискуссий и статья из Массачусетского технологического института, в которой ставится под сомнение обоснование того, почему пакетная нормализация работает. Вот мое понимание пакетной нормализации.
[Reference] Deep Learning Book by Ian Goodfellow chapter 8 Batch Normalization Lecture by Ian Goodfellow Intro to optimization in deep learning: Busting the myth about batch normalization How Does Batch Normalization Help Optimization? (MIT paper) Original Batch Norm paper A Medium Post about Batch Normalization
Мотивация
Помимо исчезающих/взрывающихся градиентов, есть еще одна проблема с градиентным спуском в глубокой нейронной сети.
Градиентный спуск изменяет веса, предполагая, что входные данные для каждого нейрона не изменятся. Проблема здесь в том, что как только мы меняем веса в слое, это изменяет входные данные для следующего слоя, что делает обновление, которое мы сделали в следующем слое, уже не оптимальным. Это может сильно замедлить обучение нашей сети, поскольку слой должен постоянно адаптироваться к изменениям по сравнению с предыдущими слоями.
Другая мотивация заключается в том, что мы хотим выполнить нормализацию среднего значения и для входных данных скрытых слоев. Напомним, мы можем ускорить обучение, нормализовав входные данные. Мы хотим сделать то же самое для каждого скрытого слоя.
Алгоритм
Вот алгоритм пакетной нормализации. Позже выясняется, что алгоритмы обучения обычно работают лучше, когда после нелинейных активаций выполняется пакетная нормализация. Но поскольку в исходной статье перед активацией выполнялась пакетная нормализация, здесь мы будем придерживаться этого.
Сначала мы выполняем среднюю нормализацию z. Затем масштабируйте его с помощью 𝛾 и β. Почему мы хотим масштабировать z с помощью 𝛾 и β? Как эта пакетная нормализация помогает каждому слою учиться более или менее независимо от других слоев? Вот объяснение Яна Гудфеллоу.
Нормализация среднего значения и стандартного отклонения единицы может уменьшить выразительную силу нейронной сети, содержащей эту единицу. Чтобы сохранить выразительную силу сети, обычно заменяют пакет скрытых активаций единиц H на γH + β, а не просто на нормализованную H. Переменные γ и β — это изученные параметры, которые позволяют новой переменной иметь любое среднее и среднеквадратичное отклонение. На первый взгляд это может показаться бесполезным — почему мы установили среднее значение равным 0, а затем ввели параметр, позволяющий вернуть его к любому произвольному значению β? Ответ заключается в том, что новая параметризация может представлять то же семейство входных функций, что и старая параметризация, но новая параметризация имеет другую динамику обучения. В старой параметризации среднее значение H определялось сложным взаимодействием между параметрами в слоях ниже H. В новой параметризации среднее значение γH+β определяется исключительно β. Новую параметризацию намного проще освоить с помощью градиентного спуска. (Книга глубокого наклонения, глава 8)
При наличии 𝛾 и β нейронная сеть может аппроксимировать сложную функцию без влияния на каждый слой предыдущих слоев. Вместо того, чтобы адаптировать изменение всех w, градиентному спуску теперь нужно адаптироваться только к изменению 𝛾 и β. Это позволяет весам в каждом слое сделать большой шаг в градиентном спуске, потому что они больше не оказывают огромного влияния на предыдущие слои. Другими словами, мы можем установить большую скорость обучения и, таким образом, сделать обучение сети намного быстрее.
Побочным эффектом пакетной нормализации является небольшая регуляризация. Когда мы вычисляем среднее значение z, мы делаем это по мини-пакету. Среднее значение, которое мы вычисляем, будет отличаться от истинного среднего значения всей обучающей выборки.
На этапе прогнозирования мы, вероятно, захотим предсказать одну выборку. Как получить среднее значение и дисперсию? Вместо этого мы будем использовать среднее значение и дисперсию, которые мы вычислили во время обучения.
Регрессия Softmax
Softmax — это метод многоклассовой классификации. При бинарной классификации мы использовали сигмовидную функцию в последнем слое сети. Для многоклассовой классификации мы будем использовать softmax.
[Reference] Proof that softmax(C=2) and sigmoid are same Why use exponential? 1 Why use exponential? 2
Мотивация
При многоклассовой классификации у нас есть более одного выхода на последнем слое сети. Мы хотим, чтобы каждый узел представлял вероятность, а сумма всех выходов была равна 1. Хотя сигмовидная функция выдает значение от 0 до 1, оно может превышать 1, когда у нас их много.
Софтмакс
Мы сопоставим выход z с экспоненциальной функцией.
Затем мы выполняем нормализацию, чтобы сумма была равна 1.
Функция стоимости
В регрессии softmax мы используем кросс-энтропию для функции потерь. Что такое энтропия, мы увидели в Дне 24. Кросс-энтори немного отличается от энтопии.
Кросс-энтропия обычно используется для количественной оценки разницы между двумя распределениями вероятностей. (Что такое кросс-энтропия?)
Это все на сегодня.