1 神经网络概览
2 神经网络表示
其中g是激活函数,
,是用来与l-1的输出当作l层的输入做矩阵乘法得到l层的值,
的形状是(l层单元数,l-1层单元数),
的形状是(l层单元数,1),故
3 激活函数
隐藏层单元激活函数:tanh几乎总是优于sigmoid函数,因为tanh的输出介于(-1,1),激活函数的平均值更接近于0,在有些场景可能需要平移数据,让数据的均值为0,使用tanh也有类似数据中心化的效果,使得数据的均值更接近0,而非0.5,使下一层的学习更加方便。tanh和sigmoid有一个共同的缺点,当z很小或很大时,则其梯度非常小,会拖慢梯度下降算法。通常会使用Relu函数,当z小于0时,其梯度为0,但是实践中很少能碰到000000...的情况。
为什么要使用非线性激活函数,因为若使用线性激活函数或恒等激活函数,则神经网络只是将输入线性组合再输出,若使用线性激活函数或不使用激活函数,则无论神经网络有多少层一直只是做的线性组合,唯一可使用线性激活函数的就是输出层。举例如下,隐藏层和输出层均未使用激活函数,则输出依旧是输入的线性组合。
激活函数的导数
4 神经网络的梯度下降法
5 随机初始化
为何要随机初始化:举例如下,若将初始化为0,则由于全连接层,每个隐藏层单元的输入都是一样的,现在权重也一样,则隐藏层单元的输出也一样,即
,然后若
也初始化为0,则他们的梯度也一样,即
,以为这多次迭代后依旧
,相当于多个隐藏单元在计算相同的东西,故需要随机初始化。
其实,只要W数据类似下面这种情况,也就是所有行向量相等,则所有隐藏层单元就计算的是同样的东西
为什么要用比较小的随机值初始化,主要是怕遇到形如tanh和sigmoid的激活函数,若权重参数过大,则z很容易绝对值过大,即梯度很小,会拖慢梯度下降速度。