神经网络的前向后向及更新

前向目的:得到输出值 \small y_{}^{*}(即\small a^{L}

后向目的:得到dz,dw,db(此处都是指dL/d...,损失函数对对应项的微分),进而得到梯度更新。(其中由于链式法则,dz,dw,db中都有y项)

权重w(a,b): 维度a指本层的神经元个数,维度b指输入层X特征向量包含元素个数。

a=\small \varphi(z), a:active function.

程序实现时:每一个样本可以使用矩阵运算代替for循环,但是样本间的迭代还是需要for循环。

当|z|很大时,激活函数的梯度很小,因此在这个区域内,梯度下降算法运行得很慢。实际应用中应尽量避免z落在这个区域,应使|z|尽可能限定在零值附近,从而提高梯度下降算法运算速度。因此ReLU激活函数出现了(缺点:Z<0,梯度为0),以及改进的Leaky ReLU函数。(因此在应用sigmoid函数或tanh函数,权重初始化时乘上一个小数如0.01)

如果是分类问题:一般隐藏层采用ReLU激活函数或Leaky ReLU函数,输出层采用sigmoid函数。

如果激活函数采用线型激活函数:则最终输出值依然是变量X的线性组合,神经网络与直接使用线性模型就没什么不同了。因此隐藏层必须是非线性的。(回归预测y连续值问题:输出层可以使用线性激活函数)

权重必须随机初始化:如果全部初始化为0,则每个神经元的权重完全相同,隐藏层设置多个神经元失去意义。

但是参数b可以全部初始化为0.

原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725341.html