机器学习基础---神经网络(调试优化)(随机初始化、梯度检测)
一:随机初始化 当我们使用梯度下降法或者其他高级优化算法时,我们需要对参数θ选取一些初始值。对于高级优化算法,会默认认为我们已经为变量θ设置了初始值: 同样,对于梯度下降法,我们也需要对θ进行初始化。之后我们可以一步一步通过梯度下降来最小化代价函数J,那么如何来对θ进行初始化值呢? (一)将θ全部设置为0---神经网络中不适用 尽管在逻辑回归中,可以这样使用。但是在实际神经网络训练中起不到作用。 如果我们初始化所有θ全为0(全部相等): 那么对于每个隐藏单元的输入基本都是一样的: 所以求得的偏导也是一致的, 当我们只是设置了一个步长,那么对于每次参数的更新以后。各个隐藏单元的权重还是一致的。 这就意味着这个神经网络计算不出很好的函数,当我们有很多的隐藏单元时,所有的隐藏单元都在计算相同的特征,都在以相同的函数作为输入。---高度冗余。所以无论后面有几个输出单元,最终只能得到一个特征,这种情况阻止了神经网络学习有趣的东西 (二)随机初始化---解决上面所有权重都相等的问题(对称问题) (三)代码实现 def rand_initiation(l_in,l_out): #对于相邻两层 w = np.zeros((l_out,l_in+ 1) ) #需要加上前面一层的偏执单元权重 eps_init = 0.12 #接近0,保持在- ε到ε之间 w = np.random.rand(l