1. 训练集,验证集,测试集
当数据量较小时,可以分别占60%, 20%, 20%,当数据集规模很大时,验证集和测试集所占比例可以很小。
2.偏差和方差
2.1判断
我们可以根据训练集误差,判断数据拟合情况,判断是否有偏差问题。之后根据验证集误差,判断方差是否过高。
2.2 解决
针对高偏差(欠拟合):使用更复杂网络,花费更多时间训练算法或者是用优化算法,(或者采用新架构)
针对高方差(过拟合):采用更多数据,正则化,(新架构)
3.正则化
3.1 正则化预防过拟合的原因
正则化参数λ变大时,W变小,Z变小,激活函数会相对呈线性,整个神经网络会计算离线性网络近的值(神经网络会变简单,所以避免了过拟合)。
3.2 正则化方法
L2
L1
dropout
在不便引入新的数据时将图片翻转或剪裁(数据扩增),
early stopping。绘制验证集误差
4.梯度消失与梯度爆炸
5. 作业
1. 初始化参数:不同的初始化参数导致不同结果
将所有W初始化为0 ,这将导致"break symmetry", 例子中识别准确率50%
所有参数随机初始化并将规模*10,导致梯度下降缓慢,迭代次数过多,识别准确率83%
He初始化(推荐激活函数为relu的层使用),在随机初始化的规模设为sqrt(2./layers_dims[l-1]),识别准确率99%
Xavier initialization :sqrt(1./layers_dims[l-1])
2.正则化
2.1 L2正则化
正向:$$J_{regularized} = small underbrace{-frac{1}{m} sumlimits_{i = 1}^{m} large{(}small y^{(i)}logleft(a^{[L](i)} ight) + (1-y^{(i)})logleft(1- a^{[L](i)} ight) large{)} }_ ext{cross-entropy cost} + underbrace{frac{1}{m} frac{lambda}{2} sumlimits_lsumlimits_ksumlimits_j W_{k,j}^{[l]2} }_ ext{L2 regularization cost} ag{2}$$
反向:$frac{d}{dW} ( frac{1}{2}frac{lambda}{m} W^2) = frac{lambda}{m} W$
2.2 dropout步骤:
正向:1. 随机初始化D矩阵
2.将D转换为0/1矩阵
3.将 $A^{[1]}$ 转换为 $A^{[1]} * D^{[1]}$
4.将 $A^{[1]}$ 除以 `keep_prob`
反向:1. dAl = dAl * Dl
2. dAl = dAl / keep_prob
3.梯度检测
梯度检测的步骤:
1.初始化:将梯度和参数化成向量
2.针对每一个参数循环
计算$J^{+}_i$
1.Set $ heta^{+}$ to `np.copy(parameters_values)`
2. Set $ heta^{+}_i$ to $ heta^{+}_i + varepsilon$
3. Calculate $J^{+}_i$ using to `forward_propagation_n(x, y, vector_to_dictionary(`$ heta^{+}$ `))
计算$J^{-}_i$
计算梯度
3.得到一个梯度序列,与原梯度对比