1、initialize_parameters_zeros: # 零初始化
核心代码如下:
# 经典机器学习
parameters["W"] = np.zeros((m, n)) # 根据自己的输入数据维度确定权重矩阵维度
# 深度学习
parameters["W"+str(l)] = np.zeros((layers_dims[l], layers_dims[l-1]))
parameters["b"+str(l)] = np.zeros((layers_dims[l],1))
优点:结构简单,初始化后的参数全部为零,入门时经常使用;
缺点:迭代计算到最优值的时间较长,深度学习时,输入的X是对称数据的话,学习可能无法打破对称性,不能进行有效的学习。
2、def initialize_parameters_random: # 随机初始化
核心代码如下:
机器学习
parameters['W'] = np.random.randn(m, n) * 10
深度学习
parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * 10
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
优点:可轻微减少学习时间,在一定程度上可以打破输入数据的对称性,K-mean算法中较好用;
缺点:可能导致初始化的权重过大或过小,深度学习梯度下降过程中导致梯度爆炸或消失,结构较为零活,初学不易掌握。
3、def initialize_parameters_xavier: # 梯度抑制初始化
对于tanh激活函数,核心代码如下:
# 深度学习
parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(1 / layers_dims[l - 1])
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
对于Relu激活函数,核心代码如下:
# 深度学习
parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) * np.sqrt(2 / (layers_dims[l - 1] + layers_dims[l]))
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
优点:可以有效抑制梯度爆炸和梯度消失,减少一定的学习时间;
缺点:结构零活多变。
-----------------待续-----------------------