Deep Learning Note3
偏差与方差
欠拟合(在训练集中模型表现差): 偏差大。解决方案:
- 增加隐藏层数量
- 增加循环次数
过拟合(在训练集中模型表现好,但是在测试集中表现差):方差大解决方案:
- 获取更多数据
- 正则化
Regularization(正则化)
用于解决过拟合问题,加在损失函数上
正则表达式下标表示正则化类型
Frobenius norm正则化
$$
做反向传播时,w的导数为
$$
我们可以看出正则化相当于对原本的W做了衰减,弱化了W的权重,使得模型不会过分适配训练数据。
Dropout(随机失活)正则化
就是在神经网络的隐藏层,为每个神经元结点设置一个随机消除的概率,对保留下来的神经元进行训练,得到一个节点较少,规模较小的网络。
注意,是每次迭代
随机失活,所以每次迭代时的模型是变换的。因此,它的实质就是每次迭代尝试不同的模型进行训练。
怎么做到不直接变动a的情况下,实现随机失活的呢?需要额外定义一个维度等同a的数组,用0,1表示是否失活
keep_prob = 0.8 # 设置神经元保留概率 d3 = np.random.rand(a3.shape[0], a3.shape[1]) #随机失活概率矩阵初始化 d3= d3< keep_prob #大于0.8的设置为0,小于0.8的设置为1 a3 = np.multiply(a3, d3) #与输入值a相乘,得到了随机失活后的输入值 a3 /= keep_prob #为了不影响计算的Z值,需要除以一个keep_prob
反向传播
需要在正向传播时,缓存概率矩阵,反向传播时,用dA乘以概率矩阵。
思考:神经节点随机失活,为什么不将得到的概率矩阵乘以权重w,而是乘以了输入值a?
归一(正则)化输入
过程:
- 计算所有样本每个特征的均值
- 减去均值得到相对对称的分布
- 再将特征值归一(正则)化输入:
原因:
- 因为我们使用的激活函数的区间一般在[-1,1],而以tanh为例,但z位于[-1,1]区间时,下降梯度较为平稳。
- 使用了归一化,那么无论从哪个位置开始迭代,我们都能以相对很少的迭代次数找到全局最优解。
梯度爆炸和梯度消失
梯度消失的直观体现
$$
当范围在0~1之间时,不断相乘导致得到的dw越来越小。会引起梯度下降的程度指数级下降。
当范围在>1时,不断相乘导致得到的dw越来越小。会引起梯度下降的程度指数级上升。
利用初始化缓解梯度消失和爆炸问题
Min-Batch
将训练集分割为小一点的子训练集,步骤
- 对数据集进行随机洗牌,x要与y同步
- 切分数据集,可能数据集最后一部分无法分成等同大小
- 正常的正向反向传播,每次迭代一个min-batch
### 首先数据洗牌 ### permutation随机排列一个序列 permutation = list(np.random.permutation(m)) ### x[:,n]表示在全部数组(维)中取第n个数据, shuffled_X = X[:, permutation] shuffled_Y = Y[:, permutation].reshape((1,m)) ### math.floor()向下取整 num_complete_minibatches = math.floor(m/mini_batch_size) for k in range(0, num_complete_minibatches): mini_batch_X = shuffled_X[:, k*mini_batch_size : (k+1)*mini_batch_si***i_batch_Y = shuffled_Y[:, k*mini_batch_size : (k+1)*mini_batch_si***i_batch = (mini_batch_X, mini_batch_Y) mini_batches.append(mini_batch)
指数加权平均
即当前数据值加上一部分上一个数据值的权重,使得变化更加平稳
$$
v时加权后的前一个数据,θ时本身的数据
例:首先令,则,代表求平均天的温度,若,则相当于求平均50天的数据,而刚开始的几十天的没有这么多的数据,所以统计的均值图像会往右平移一点。
在统计学中被称为加权移动平均值,这个移动
就代表求取平均值的延迟
有一个式子:
$\frac{1}{0.9}=10\frac{1}{ε}*0.1$
指数加权平均的偏差修正
上一节讨论了加权均值存在延迟的问题,因为刚开始不存在那么多的数据,因此我们加强前几个数据的当日权重。
动量(Momentum)梯度下降法
在梯度下降的过程中,权重w的趋势往往是往最低方向逼近,而偏置量b则容易产生摆动。这时,如果设置教的的学习率,虽然可以加快w的下降逼近速度,但会导致b的震荡过大。而如果学习率国小,又会导致模型训练速度变慢。
基本思想就是计算梯度的指数加权平均数,并利用该梯度来更新权重。这种方式可以降低b的震荡,但不会加速w的下降。
$$
思考:既然w和b逼近最低点的形式和速度不同,为什么不能给w和b设置不同的学习率?
下面的RMSprop就是将w,b采用了不同的学习率
RMS(均方根)prop梯度下降法
为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对权重 W 和偏置 b 的梯度使用了微分平方加权平均数。
$$
ε是一个极小的值一般为,是为了防止分母过小
理解RMSprop作用:
实质是让w,b采用不同的学习率,因为db的平方很大,所以作为分母的会很大,使得db的学习率较小,而dW的平方较小,所以作为分母的会很大,使得db的学习率较大,下降速度会更快。
但是如何S的值无效趋近于0时,会导致学习率过大,因此会加上一个常数ε,稳定学习率
注意:此处为了方便理解,例举了w,b,其实这样的做法也可以消除高维度下w1,w2……wn的摆动
思考:有了平均值,为什么要采用均方根?
均方根能更有效的反应数据的离散性。例如w:3,4,5,平均值为4;而b:4,-1,9,平均值也为4,这样就无法有效区分b的震荡情况。但是我认为,由于存在正负,假如b:-3,4,-5,求得的均方根依旧和3,4,5一样。有待优化
Adam 优化算法
Adam 优化算法的基本思想就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。 Momentum
$$
衰减学习率
随着w,b的不断更新,变化和震动也越来越小,所需要的学习率也越来越小,所以选哟根据迭代次数,不断衰减学习率。一般常用的公式
$$