Это мой 10-й день ноябрьского испытания обновлений.
Веса и смещения выбираются в соответствии с независимыми гауссовскими случайными величинами, которые нормализованы, чтобы иметь среднее значение 0 и стандартное отклонение 1. Этот метод имеет очевидные недостатки.Предполагается, что вес первого скрытого слоя инициализируется с использованием нормализованного распределения Гаусса, а другие факторы игнорируются.В центре внимания находится вес соединения, как показано на следующем рисунке:
Гипотетический обучающий набор входных данных для упрощения задачиразмер, где половина входных значений нейронаравен 0, а другая половина равна 1. Взвешенные входные данные для нейронов, 500 из которых были устранены, осталось 500и. Значения этих 501 элементов подчиняются распределению Гаусса со средним значением 0 и стандартным отклонением 1, поэтомуЗначение будет представлять собой среднее значение 0 и стандартное отклонениеРаспределение Гаусса показано на следующем рисунке:
Как можно видетьможет быть намного больше или меньше 1, что влияет наЗначение близко к 1 или 0, то есть скрытые нейроны будут близки к насыщению, а скорость обучения будет снижаться, когда скрытые нейроны будут близки к насыщению, что также является причиной низкой скорости обучения.
Итак, для лучшей инициализациизначение, если предположитьвходных нейронов, используя среднее значение 0 и стандартное отклонениеРаспределение Гаусса для инициализации весов. В том же случае, что и в приведенном выше примере,Распределение становится средним значением 0 со стандартным отклонениемГауссово распределение , как показано на следующем рисунке:
В результате нейроны не могут быть насыщены, и проблема снижения скорости обучения снимается.
Упражнение:Предположим, естьвходных нейронов, используя среднее значение 0 и стандартное отклонениеРаспределение Гаусса инициализирует веса, а распределение Гаусса инициализирует смещение со средним значением 0 и стандартным отклонением 1. Предположим, набор входных данных для обученияразмер, где половина входных значений нейронаравен 0, а другая половина равна 1. проверятьСтандартное отклонение.
Подсказка: (а) дисперсия суммы независимых случайных величин равна сумме дисперсий каждой независимой случайной величины (б) дисперсия равна квадрату стандартного отклонения.
Исходя из вышеперечисленных условий, видно, чтоДисперсия:
следовательноСтандартное отклонение.
Реализация кода и сравнение
оригинальныйинициализация:
# 之前使用过比较简单的初始化方法用来比较两种初始化方法的区别
def large_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in list(zip(self.sizes[:-1], self.sizes[1:]))]
новыйМетод инициализации:
# 使用均值为0标准差为1的高斯分布来初始化偏差
# 使用均值为0标准差为sqrt(n)的高斯分布来初始化权重,n为输入神经元的数量
def default_weight_initializer(self):
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x) / np.sqrt(x)
for x, y in list(zip(self.sizes[:-1], self.sizes[1:]))]
Сравнительные результаты:
Видно, что этот усовершенствованный метод значительно повышает скорость обучения, ноне меняет конечную производительность сети.
Как выбрать HyperParameters для нейронной сети
для скорости обученияи параметры нормализацииНа практике очень сложно подобрать подходящее значение. В основном подбор гиперпараметров здесь основан на эвристических представлениях, и универсального правильного способа выбора не существует:
широкая стратегия
Не устанавливайте слишком сложную структуру сети в начале, вы можете использовать только простую трехуровневую архитектуру сети, чтобы проверить влияние изменений параметров на результаты, чтобы найти закон оптимизации параметров сети.
Регулировка скорости обучения
Проверьте влияние трех разных значений скорости обучения на обучение:
можно увидеть, когдаКогда колебания очень очевидны.Чтобы понять это явление, вернемся к принципу стохастического градиентного спуска:
Величина влияет на размер шага спуска,Если оно слишком большое, это может привести к тому, что алгоритм пересечет дно впадины и вызовет повторяющиеся колебания, когда оно будет близко к минимальному значению, поэтомуследует выбирать малым. (Но слишком маленький повлияет на скорость обучения)
Скорость обучения обычно устанавливается постоянной, но переменная скорость обучения может быть более эффективной. На ранней стадии обучения используйте большую скорость обучения, чтобы ускорить изменение весов, а затем уменьшите скорость обучения позже, чтобы можно было выполнять более сложные настройки. Как установить скорость обучения на основе этой идеи? Естественно думать о:
- держать сначалаявляется константой до тех пор, пока точность проверки не начнет ухудшаться
- уменьшить на определенный процент, например 10 или 2, повторить несколько раз, поканиже начального значенияЗавершить обучение
epoch использует раннюю остановку для определения количества эпох
Как упоминалось в разделе о переоснащении здесь, прекращайте обучение, когда точность проверочного набора больше не улучшается.
Выбор параметров нормализации
Сначала значение может быть неопределенным (т.),ЖдатьПосле подтверждения попробуйте изменитьзначение .
Выбор размера mini_batch
Как установить размер мини-пакета данных? Чтобы упростить задачу, мы можем сначала предположить, что данные мини-пакета размера 1 изучены, а изменение веса:
По сравнению со скоростью изменения веса для мини-партии размером 100:, веса мини-партии размера 1 изменяются в 100 раз быстрее. Но проблема в том, что небольшой пакет данных размером 1 обновляется очень часто (то есть для вычисления градиента необходимо использовать цикл), а небольшой пакет данных размером 100 может использовать матричную технологию для расчета градиента. для повышения скорости расчета.
Это также следует учитывать при выборе размера мини-пакетных данных: если он слишком мал, скорость обучения будет снижена, а если он слишком велик, количество обновлений весов будет слишком маленьким. К счастью, выбор размера мини-пакетных данных на самом деле является относительно независимым гиперпараметром (параметры вне общей сетевой архитектуры), поэтому нет необходимости оптимизировать другие параметры, чтобы найти хороший размер мини-пакетных данных.