Оптимизация сети глубокого обучения — параметры инициализации
Влияние параметров
При обучении нейронной сети с использованием градиентного спуска необходимо инициализировать параметры. Для параметров w (весовых матриц) и параметров b (векторов смещения) использование различных стратегий инициализации может иметь очень большое влияние на результаты и эффективность обучения:
- Ускорить сходимость градиентного спуска
- Увеличьте вероятность сходимости градиентного спуска к меньшей ошибке обучения (и обобщения)
Схемы с разными параметрами:
- инициализирован до 0
- не может «нарушить симметрию»
- This means that every neuron in each layer will learn the same thing
for l in range(1, L):
parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1]))
parameters['b' + str(l)] = np.zeros((layers_dims[l],1))
- случайная инициализация
- success to "break symmetry",make sure different hidden units can learn different things
- Initializing weights to very large random values does not work well.
- плохая инициализация может привести к исчезновению/взрыву градиентов
for l in range(1, L):
parameters['W' + str(l)] = np.random.randn(layers_dims[l],layers_dims[l-1]) * 10
parameters['b' + str(l)] = np.zeros((layers_dims[l],1))
3. Пользовательская схема инициализации - He initialization (автор He et al., 2015)
for l in range(1, L + 1):
parameters['W' + str(l)] = np.random.randn(layers_dims[l],layers_dims[l-1]) * np.sqrt(2/layers_dims[l-1])
parameters['b' + str(l)] = np.zeros((layers_dims[l],1))
Суммировать:
- Different initializations lead to different results
- Random initialization is used to break symmetry and make sure different hidden units can learn different things
- Don't intialize to values that are too large
- He initialization works well for networks with ReLU activations.