深度学习笔记(8) 实践层面(三)
1. 归一化 / 标准化输入
训练神经网络,特征必须要在0到1之间
此时就只能加速训练的方法就是归一化输入:
在使用正则化的情况下,必须使用标准化:
因为不用正则时,损失函数只是仅仅在度量预测与真实的差距
加上正则后,损失函数除了要度量上面的差距外,还要度量参数值是否足够小
而参数值的大小程度或者说大小的级别是与特征的数值范围相关的
标准化需要两个步骤:零均值和归一化方差
希望无论是训练集和测试集都是通过相同的
μ
μ
μ 和
σ
σ
σ2 定义的数据转换,这两个是由训练集得出来的
- 零均值化:
它是一个向量, x x x 等于每个训练数据 x x x 减去 μ μ μ ,即移动训练集,直到完成零均值化 - 归一化方差:
它也是一个向量,每个特征都有相似的方差,此时已零均值化, x x x 2就是方差
归一化特征后直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是从1到1000,0到1的范围,而是在-1到1范围内或相似偏差,这使得代价函数J优化起来更简单快速
如果假设特征x1范围在0-1之间,x2的范围在-1到1之间,x3范围在1-2之间,相似范围,所以也会表现得很好
2. 权重初始化
训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸
也就是导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度
假设所有权重矩阵都是1.5倍的单位矩阵,计算结果就是
y
^
\hat{y}
y^ ,也就是等于 1.5(L-1)
x
x
x
如果对于一个深度神经网络来说L值较大,那么
y
^
\hat{y}
y^ 的值也会非常大
实际上呈指数级增长的,增长的比率是1.5L
因此对于一个深度神经网络,y的值将爆炸式增长
假设所有矩阵都是0.5倍的单位矩阵,计算结果就是
y
^
\hat{y}
y^
也就是等于0.5L
x
x
x ,激活函数的值将以指数级下降
为了预防z值过大或过小,可以看到神经元的输入特征数量n越大,希望wi越小,因为z是wi xi的和
如果把很多此类项相加,希望每项值更小,最合理的方法就是设置wi = 1 / n
实际上,要做的就是设置某层权重矩阵w[l] = np.random.randn(shape) * np.sqrt(1 / n[l-1])
n[l-1]就是喂给第
l
l
l 层神经单元的数量(即第
l
l
l -1层神经元数量)
如果是用的是Relu激活函数,而不是1/n,方差设置为2/n,效果会更好
其余的tanh函数等依然是 √(1/n[l-1])
3. 梯度检验
梯度检验(grad check)可以帮助调试节省了很多时间
也可以帮助发现backprop实施过程中的bug
但只用于调试
假设
h
h
hθ
(
x
)
(x)
(x) =
θ
θ
θ0 +
θ
θ
θ1
x
x
x1 +
θ
θ
θ2
x
x
x2 +
θ
θ
θ3
x
x
x3 + ⋯ +
θ
θ
θn
x
x
xn
因为计算所有 i 值的权重导数
d
θ
dθ
dθapprox
[
i
]
[i]
[i] 是一个非常漫长的计算过程,不能与dropout同时使用
首先,要清楚
J
J
J 是权重θ的一个函数,也可以将J函数展开为
J
J
J(θ1,θ2,θ3,……)
不论权重θ的维度是多少,为了实施梯度检验,要做的就是循环执行
从而对每个i也就是对每个θ组成元素计算
d
θ
dθ
dθapprox
[
i
]
[i]
[i] 的值,使用双边误差,也就是
只对 θi 增加ε,ε的值很小,如0.01,其它项保持不变
另一边一样,只不过是减去ε,θ其它项全都保持不变
这个值(
d
θ
dθ
dθapprox
[
i
]
[i]
[i] )应该逼近代价函数的偏导数
d
θ
[
i
]
dθ[i]
dθ[i] = ∂J / ∂θi(注意代价添加正则项)需要验证
计算这两个向量的距离,
d
θ
dθ
dθapprox
[
i
]
[i]
[i] -
d
θ
[
i
]
dθ[i]
dθ[i] 的欧几里得范数,误差平方之和,然后求平方根,得到欧式距离
然后向量长度归一化,使用向量长度的欧几里得范数,分母用于预防这些向量太小或太大,使得方程式变成比率
实际执行方程式时ε可能为10-7 ,如果发现计算的值为10-7 或更小,导数逼近很有可能是正确的
在10-5 范围内,再次检查这个向量的所有项,查找不同的 i 值,确保没有一项误差过大
在10-3 范围内,需要检查所有θ项
想要降低预测误差,即提高预测精度,往往会采用这些手段:
手段 | 效果 |
---|---|
采集更多的样本 | 错误的认为样本越多越好,其实数据多并不是越好 |
降低特征维度 | 可能去掉了有用的特征 |
采集更多的特征 | 增加了计算负担,也可能导致过拟合 |
进行高次多项式回归 | 过高的多项式可能造成过拟合 |
调试正规化参数 λ,增大或者减少 λ | 增大或者减少都是凭感觉 |
参考:
相关推荐:
深度学习笔记(7) 实践层面(二)
深度学习笔记(6) 实践层面(一)
深度学习笔记(5) 深层神经网络
深度学习笔记(4) 浅层神经网络
深度学习笔记(3) 向量化逻辑回归
谢谢!