5.机器学习的实用层面

训练,验证,测试集

训练神经网络时,我们需要做出很多决策,比如:层数,每层的隐含单元数,学习速率,各层的激活函数等
但是,不可能一开始就准确预测出这些超参。

从一个领域或者应用领域得来的直觉经验,通常无法转移到其他应用领域

  1. 训练集上执行算法
  2. 通过验证集简单交叉验证集选择最好的模型
  3. 测试集上进行评估

训练集,验证集和测试集的比例随着数据的样本量增长是要变化的。
总体趋势是:训练集占比变,验证集和测试集变,因为验证集起选择作用,测试集起评估作用,本质上来说就是在验证一个算法的性能,只需要少量样本就可以做到了。

!!验证集和测试集要来自于同一分布

若没有明确需求,没有测试集也不要紧,训练后通过验证集选取适合的模型就可以了。


偏差和方差

高偏差-拟合
高方差-拟合

吴恩达老师的话说就是:

训练集误差较大:高偏差-拟合

验证集误差比训练集误差大的多:高方差-拟合

换言之就是泛化性能和拟合性能的问题,验证集要尽量和测试集同一分布的,代表的是实际场景的表现。

误差是训练集和真值的比较,代表的是拟合能力。

为何如此?
就要看公式了,方差与预测值期望比较,偏差与真值比较。

这地方看不懂的可以点一下标题看看这篇博文。看着公式更好理解一些。


机器学习基础

如果偏差的确很高,甚至无法拟合数据,那么要做的就是选择一个的网络。

正则化

过拟合问题–高方差

可以通过正则化和准备更多数据来解决

\frac{\lambda}{2m}W^TW2mλ​WTW,W^TW是欧几里得范数(2范数)的平方,此方法称为L2正则化。

为什么不正则化b?
因为W通常是一个高维参数矢量,而b只是单个数字,W已经覆盖了绝大多数参数。解决了W导致的过拟合问题通常也就解决了整个模型的过拟合问题。

L1范式:\frac{\lambda}{m}\sum_{j=1}^{n_x}\vert{W}\vertmλ​∑j=1nx​​∣W∣

如果使用L1正则化,W最终会是稀疏的,W向量中会有很多0。也不会减少存储模型所占用的内存。所以一般情况人们在训练网络时,越来越倾向于使用L2正则化

\lambdaλ是正则化参数,通常使用验证集或交叉验证集来配置这个参数,要考虑训练集之间的权衡,把参数设置为较小值

lambda是一个保留字,在编程时写成lambd

如何在神经网络中实现L2正则化?

正则项为\frac{\lambda}{2m}\sum_1^L\vert{w^{[l]}\vert}^22mλ​∑1L​∣w[l]∣2,

L是神经网络的总层数

J(W^{[1]},W^{[2]},...,W^{[L]})=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum_1^L\vert{w^{[l]}\vert}^2J(W[1],W[2],...,W[L])=m1​∑i=1m​L(y^​(i),y(i))+2mλ​∑1L​∣w[l]∣2

\vert{W^{[l]}}\vert^2_F=\sum_{i=1}^{n^{[l]}}\sum_{j=1}^{n^{[l-1]}}(w_{ij})^2∣W[l]∣F2​=∑i=1n[l]​∑j=1n[l−1]​(wij​)2

i和j的上界原因:
W是一个n^{[l]}\times{n{[l-1]}}n[l]×n[l−1]的多维矩阵。

W{[l]}=(1-\frac{\alpha\lambda}{m})W^{l}-\alpha(formbackprop)W[l]=(1−mαλ​)Wl−α(formbackprop)

(1-\frac{\alpha\lambda}{m})(1−mαλ​)往往小于1,因此L2范式正则化也被称为权重衰减。

左图是高偏差,右图是高方差,中间是刚刚好。

如果正则化\lambdaλ设置的足够大,权重矩阵W被设置为接近于0的值,就是把多隐藏单元的权重设为0,相当于变成了一个很小的网络. (相当于一个逻辑回归单元,但是深度却很大),使这个网络从过度拟合的状态更接近左图的高偏差状态。

但是\lambdaλ会有一个中间值,于是又一个接近Just Right的中间状态。

W更接近于0,隐藏单元的影响变小了。


dropout正则化

Dropout正则化–又叫随机失活,解决过拟合问题

  1. 设置消除神经网络中结点的概率
  2. 每个结点按设计的概率进行淘汰
  3. 删除掉与选中被淘汰的结点进出的连线
  4. 对每一层的每一个结点迭代的执行上述过程
  5. 最后得到一个结点更少的网络
  6. backprop进行训练。

dropout的一种方法–反向随机失活(inverted dropout)

L=3L=3神经网络

d3代表的是第三层的dropout向量

d3 = np.random.rand(a3.shape[0],a3.shape[1])
然后看它是否小于,这个数称之为keep-prob,表示保留某个隐藏单元的概率

a^{[3]}=a[3]=np.multiply(a3,d3)

最后,向外扩展a^{[3]}a[3]:
a3 = a3 / keep-prob

这样做的原因是为了修正被删除的那(1-keep-prob),而不去影响下一层的期望值。

在测试阶段没有必要添加尺度参数(譬如a3 = a3 / keep-prob)


dropout不依赖于任何特征,因为任何特征都是有可能被随机消除的。
不愿意将某一个输入给予过高的权重,所以传播所有权重,将产生收缩权重的平方范数效果。

与L2范式不同的是:L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小.

总结:dropout的功能类似于L2正则化,但适用于不同输入范围

从单个神经元入手,选择好keep-prob(不同层可变),

w^{[1]}w[1]:(3,7)
w^{[2]}w[2]:(7,7)
w^{[3]}w[3]:(7,3)
w^{[4]}w[4]:(3,2)
w^{[5]}w[5]:(2,1)

W^{[2]}W[2]是最大的权重矩阵,为了预防矩阵的过拟合,可以让这一层(2)的keep-prob小一些,对于其它层,过拟合程度没那么严重,可以高一些,比如keep-prob为0.7。

w^{[4]}w[4]:(3,2)
w^{[5]}w[5]:(2,1)
这两个也许不用担心它们的过拟合问题,所以keep-prob设置为1,意味着保留所有单元

最后设置好的神经网络如下

总结:

  1. 对于W权重矩阵规模较大的,设置较小的keep-prob,反之较大
  2. 除非算法过拟合,不然不用dropout方法.
  3. 主要在计算机视觉领域

keep-prob是可以应用于输入层的,但其值一般接近于1(经验法则)

  1. 更容易过拟合的设置keep-prob低一些,缺点:为了交叉验证,要搜索更多的超级参数
  2. 在一些层上应用dropout,在有些层不用,应用dropout的层只含有一个超参,keep-prob

dropout的一大缺点就是代价函数JJ不再被明确定义,每次迭代,都会随机移除一些结点,所以很难进行复查.

所以一般会:

  1. 选择关闭dropout函数,将keep-prob设置为1
  2. 运行代码,确保JJ单调递减
  3. 然后打开dropout.

其他正则化方法:

数据扩增

  1. 收集更多猫咪的图片
  2. 翻转图片
  3. 裁剪图片
  4. 识别数字还可以扭曲数字

early stopping

绘制训练误差
绘制代价函数J的优化过程
绘制验证集误差

在验证集上升的转折点提早停止迭代过程

用一组工具优化代价函数JJ,机器学习会变得简单很多.
在重点优化JJ时,只留意W,b使J小.其他不必担心.

预防过拟合还有其他任务:减少方差

early stopping的主要缺点就是不能独立的处理这两个问题.
提早停止了,JJ的值就可能不够小,同时解决梯度下降和减少方差的问题.考虑的东西就变得复杂.

early stopping的优点是,只运行一次梯度下降,你就可以找出w的较小值,中间值和较大值,而无需尝试L2正则化超参\lambdaλ的许多值


归一化输入

  1. 零均值化

\mu=\frac{1}{m}\sum_{i=1}^mx^{[i]}μ=m1​∑i=1m​x[i]
x = x - \mux=x−μ

  1. 归一化方差

delta^2=\frac{1}{m}\sum_{i=1}^m x^{(i)2}delta2=m1​∑i=1m​x(i)2

x = \frac{x}{\delta^2 }x=δ2x​

用相同的\delta和\muδ和μ来归一化测试

因为我们希望测试集和训练集尽可能的作相同的变换。

假设x_1x1​的取值范围是1-1000
x_2x2​的取值范围是0-1

它们的权重矩阵会非常不同,作图会像上图一样,房屋一个狭长的碗

但归一化过后,代价函数就看起来更对称一些,犹如下右图

在作图这种情况,学习率就要很小,因为可能梯度下降需要迭代很多次。

而更对称一些就可以更快更直接一些。

总结;输入特征范围差别较大时,零均值和归一化后有利于优化。


梯度消失/梯度爆炸

假设所有层激活函数都是线性激活函数g(z)=zg(z)=z

y = W^{[l]}W^{[l-1]}W^{[l-2]}...W^{[l]}Xy=W[l]W[l−1]W[l−2]...W[l]X

假设每个权重矩阵W{[l]}=\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \end{bmatrix}W[l]=[1.50​01.5​]

最后一项有不同的维度,它就是余下的权重矩阵
y=W^{[1]}\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \end{bmatrix}^{(L-1)}xy=W[1][1.50​01.5​](L−1)x

L值比较大,那么\hat{y}y^​也很大,因为它呈指数级增长(1.5^L1.5L)

相反,如果y=W^{[1]}\begin{bmatrix} 0.5 & 0 \\ 0 & 0.5 \end{bmatrix}^{(L-1)}xy=W[1][0.50​00.5​](L−1)x

那么\hat{y}y^​也很大,因为它呈指数级缩小(0.5^L0.5L)

这会导致训练难度上升


神经网络的权重初始化

有四个输入特征,从w^1到w^4w1到w4,
KaTeX parse error: Unexpected character: '�' at position 1: �̲�=?_1?_1+?_2…

为了预防z值过大或过小,所以n越大,希望w_iwi​越小,因为其是求和形式

所以要设置的就是:
w^{[l]}w[l]=np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}}n[l−1]1​),n^{[l-1]}n[l−1]是喂给第l层神经单元的数量

如果是Relu激活函数,方差设置为\sqrt{\frac{2}{n^{[l-1]}}}n[l−1]2​​更好

如果是tanh激活函数,为\sqrt{\frac{1}{n^{[l-1]}}}n[l−1]1​​

 

若激活函数的输入特征被零均值和标准方差化,方差是1,z也会调整到响应范围,这就没解决梯度消失和梯度爆炸问题。


梯度的数值逼近

梯度校验:确保backprop正确进行。

f(\theta)=\theta^3f(θ)=θ3

\theta=1,\varepsilon=0.01θ=1,ε=0.01
\theta+\varepsilon=1.01θ+ε=1.01
\theta-\varepsilon=0.99θ−ε=0.99

\frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2\varepsilon}2εf(θ+ε)−f(θ−ε)​
这更接近导数值,因为同时考虑了双边小三角形

在此处,计算值为3.0001

  1. 把W^{[1]},b^{[1]},...,W^{[L]},b^{[L]}W[1],b[1],...,W[L],b[L]连接在一起放入\thetaθ中
  2. 把dW^{[1]},db^{[1]},...,dW^{[L]},db^{[L]}dW[1],db[1],...,dW[L],db[L]连接在一起放入d\thetadθ中

计算d\theta_{approx}^{[i]}=\frac{J(\theta_i+\varepsilon)-J(\theta_i-\varepsilon)}{2\varepsilon}(i=1,2,...,L)dθapprox[i]​=2εJ(θi​+ε)−J(θi​−ε)​(i=1,2,...,L),其计算值应该逼近于d\theta^{[i]}dθ[i]

计算欧几里得范数

\frac{\Vert{d\theta_{approx}-d\theta}\Vert_2}{\Vert{d\theta_{approx}}\Vert_2+\Vert{d\theta}\Vert_2}∥dθapprox​∥2​+∥dθ∥2​∥dθapprox​−dθ∥2​​
其计算值小于\varepsilonε就比较好

\Vert{d\theta_{approx}-d\theta}\Vert_2=\sqrt{\sum_{i=1}^L (d\theta_{approx}^i-d\theta^i)}∥dθapprox​−dθ∥2​=∑i=1L​(dθapproxi​−dθi)​


梯度校验的注意事项

  1. 不要在训练中使用梯度校验,它只用于DEBUG.
  2. 如果梯度校验失败,要检查所有项,并试着找出bug
  3. 在执行梯度校验时,如果使用正则化,请注意正则项
  4. 梯度校验不能与dropout同时使用。
  5. 在随机初始化过程中,运行梯度校验,再训练网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值