Практический уровень для улучшения DNN (а) глубины обучения

1, L регуляризации слой нейронной сети:

(1) L2 регуляризации:

 

(2) Почему регуляризация, чтобы избежать чрезмерной подгонки?

 Когда лямбда достаточно велико, J сведено к минимуму, так что матрица весов W будет близка к нулю, упрощенная нейронная сеть является состоянием высокого смещения:

 лямбда было больше, чем вес, г = ш * а + б, г мала, чтобы функции TANH в качестве примера:

Когда г меньше ступени, функция г (г) близка к линейной. Если линейный подход каждый слой, сеть представляет собой линейную сеть, ситуация не будет соответствовать через.

 

(3) отсев регуляризации (случайная инактивация):

 Каждый узел нейронной сети содержит вероятность деактивация р, следующим образом:

 

Упростить подключение, получить узел меньше, меньший масштаб сеть:

Коды являются следующими:

Для третьего слоя случайной инактивация, 0,8 keep_prob = (вероятность скрытого блока, чтобы сохранить, то есть, что исключает вероятность скрытого блока составляет 0,2), keep_prob различных слоев могут быть разными.

d3 = np.random.rand (a3.shape [0], a3.shape [1]) <keep_prob

а3 = np.multiply (а3, d3) # фильтруют инактивированный узел

а3 = а3 / keep_prob # составляют 20% от отфильтровывают, таким образом, что ожидаемое значение константы а3

 

(4) Другой метод регуляризации:

① расширить набор данных;

② досрочное прекращение итерации:

 

 

(5) Input регуляризации:

① с нулевым средним:

μ = 1 / м * Σx (я)

х = х - м

 

② дисперсии нормализации:

σ² = 1 / м * Σ (х (I) ) ²

х = х / с²

③ Почему вход регуляризация?

Non регуляризация может вызывать функции ввода изображения стоимости являются несколькими удлинены, а значения x1 до 1000, но только после 0-1. Регуляризаций входного значения x2, стоимостная функция выглядит более симметричными.

Фиг увидеть не-регуляризованный градиентный спуск является более извилистым, и регуляризованным градиент быстро уменьшается. 

 

2, Исчезновение / Взрывающиеся градиенты (градиент взрыв рассеивает градиент):

(1), описанные в качестве примера:

 

假设:g(z) = z; b[l] = 0.

y = w[L]w[L-1]w[L-2] ... w[2]w[1]x

 

(2)解决方案:权重初始化

由 z = w1x1 + w2x2 + ... + wnxn

随着 n 的增大,期望的 w[l] 越小,由此设置 Var(w[l]) = 1/n 或者 2/n(效果更好),即:

w[l] = np.random.randn(shape) * np.sqrt(2/n[l-1])

 

3、梯度检验:

(1)梯度的数值逼近:

双边误差公式更准确,可以用来判断 g(θ) 是否实现了函数 f 的偏导.

 

(2)神经网络的梯度检验:

① 将 W[1],b[1],...,W[L],b[L] 从矩阵转为一个向量 θ;

② 将 dW[1],db[1],...,dW[L],db[L] 从矩阵转为一个向量 dθ;

③ J = J(θ1, θ2, ..., θi, ...)

for each i :

  dθapprox[i] = (J(θ1, θ2, ..., θ+ ε, ...) - J(θ1, θ2, ..., θ- ε, ...)) / (2 * ε)

  check dθapprox[i] ≈ dθ[i] by calculate || dθapprox[i] - dθ[i] ||2  / (|| dθapprox[i] ||2 + || dθ[i] ||2)  < 10^-7(或其他误差阈值)

 

(3)梯度检验注意点:

① 检测完关闭梯度检验;

② 检查是否完成了正则化;

③ 不适用于dropout;

④ 检查是否进行了随机初始化.

рекомендация

отwww.cnblogs.com/orangecyh/p/11810840.html