【c2w1】- 吴恩达深度学习作业
文章目录
1.Initialization
1-zero 初始化
2-随机初始化
3-He 初始化
2 dimension of the previous layer \sqrt{\frac{2}{\text{dimension of the previous layer}}} dimension of the previous layer2''' 1.不同的初始化导致不同结果 2.初始化的值不要太大 3.he 初始化和ReLU激活函数一起表现的很好 4.随机初始化用于打破对称性,并确保不同的隐藏单元可以学习不同的东西 --------------------------------------------------------------------------------- ''' # zero初始化 parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1])) # 随机初始化 parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10 # he 初始化 parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / layers_dims[l - 1])
2.Regularization
1.L2 regularization
lamba 是一个超参数
L2 正则使得边界更加平滑,如果 lamba 过大也可能“过平滑”
L2 依赖的假设是——具有小权重的模型比具有大权重的模型更简单,因此可以通过惩罚代价函数中权重的平方值,可以将所有权重驱动为更小的值
$\color{Red}在加入L2 正则的反向传播过程中也需要加入 正则项 \frac{d}{dW} ( \frac{1}{2}\frac{\lambda}{m} W^2) = \frac{\lambda}{m} W $
2.Dropout
'''前向传播过程中使用drop'''
D1 = np.random.rand(3,2) # Step 1: 初始化矩阵 D1 = np.random.rand(,)
D1 = D1 < keep_prob # Step 2: 将矩阵D1 转化为0 or 1 (keep_prob 作为阈值)
A1 = A1 * D1 # Step 3: 关闭 A1 的一些神经元
A1 = A1 / keep_prob # Step 4: 缩放未关闭的神经元
'''--------------------------------------------------------------------------------------反向传播
'''
dA2 = dA2 * D2 # Step 1: 关闭与前向传播相同的神经元
dA2 = dA2 / keep_prob # Step 2: 缩放未关闭的神经元
- 仅 在 训 练 中 使 用 \color{Red}仅在训练中使用 仅在训练中使用
- 代价函数不再被明确定义