- 非线性激活函数
若选取线性激活函数,得到的输出与输入只能是线性函数,隐藏层毫无意义。非线性激活函数可以发挥深层神经网络的优势,计算更有趣的函数。
线性激活函数只可以应用在输出层或回归问题。
sigmod函数和tanh函数的导数均小于1,容易造成梯度消失的问题,当z很大或很小时,函数的斜率会很小,接近于0,这样会拖慢梯度下降速率。所以更多使用relu或leaky relu函数。
sigmod函数
tanh函数
Relu函数
Leaky Relu函数
- 权重
随机初始化权重:np.random.randn((row,column))*0.01(100?),若权重初始值过大,容易造成梯度饱和,学习速率缓慢。初始w不能全为0,否则每个神经单元将计算同样的函数,没有意义。
神经网络中参数过多易导致过拟合问题。 - 学习速率
a.如果α较小,则达到收敛所需要迭代的次数就会非常高;
b.如果α较大,则每次迭代可能不会减小代价函数的结果,甚至会超过局部最小值导致无法收敛。如下图所示情况
学习速率适中
学习速率过大导致迭代缓慢
通常可以设置学习率衰减提高迭代效率
一是通过人为经验进行设定,如到达多少轮后,设定具体的学习率为多少; 二是随着迭代轮数的增加学习率自动发生衰减,这类有比较常用的指数型衰退,具体算法参考:(https://www.jianshu.com/p/8971adfc2d67)