美文网首页深度学习笔记
吴恩达深度学习(20)-激活函数的导数和神经网络的梯度下降

吴恩达深度学习(20)-激活函数的导数和神经网络的梯度下降

作者: 极客Array | 来源:发表于2018-12-06 21:59 被阅读53次

    激活函数的导数(Derivatives of activation functions)

    在神经网络中使用反向传播的时候,你真的需要计算激活函数的斜率或者导数。

    针对以下四种激活,求其导数如下:

    1)sigmoid activation function

    其具体的求导如下(如果你学过微积分,那么这个求导对于你来说其实并不难): 

    公式1:

    注:

    当z = 10或z=-10  d/dz g(z)≈0

    当z= 0 d/dz g(z)=g(z)(1-g(z))=1/4

    在神经网络中

    a=g(z);

    g(z)'=d/dz g(z)=a(1-a)

    2) Tanh activation function

    其具体的求导如下: 

    公式2: g(z)=tanh(z)=(e^z-e^(-z))/(e^z+e^(-z) )

    在神经网络中;

    3)Rectified Linear Unit (ReLU)

     g(z)=max(0,z)

    注:通常在z= 0的时候给定其导数1,0;当然z=0的情况很少

    4)Leaky linear unit (Leaky ReLU)

    与ReLU类似

    注:通常在z=0的时候给定其导数1,0.01;当然z=0的情况很少

    神经网络的梯度下降(Gradient descent for neural networks)

    下面会给你实现反向传播或者说梯度下降算法的方程。

    你的单隐层神经网络会有W^([1]),b^([1]),W^([2]),b^([2])这些参数,

    还有个n_x表示输入特征的个数,n^([1])表示隐藏单元个数,n^([2])表示输出单元个数。

    在我们的例子中,我们只介绍过的这种情况,那么参数:

    矩阵W^([1])的维度就是(n^([1]),n^([0])),

    b^([1])就是n^([1])维向量,可以写成(n^([1]),1),就是一个的列向量。

    矩阵W^([2])的维度就是(n^([2]),n^([1])),

    b^([2])的维度就是(n^([2]),1)维度。

    你还有一个神经网络的成本函数,假设你在做二分类任务,那么你的成本函数等于:

    Cost function: 

    公式2:

    loss function和之前做logistic回归完全一样。

    训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初始化成全零(对的,如果全部初始化成0,这个就和我们之前说的那个为什么用非线性激活函数一个道理,其实都没有什么意义了,因为大家都是0)。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:

    公式3: dW^([1])=dJ/(dW^([1]) ),db^([1])=dJ/(db^([1]) ) 

    公式4: dW^([2])=dJ/(dW^([2]) ),db^([2])=dJ/(db^([2]) )

    其中

    公式5: W^([1])⟹W^([1])-adW^([1]),b^([1])⟹b^([1])-adb^([1])

    公式6: W^([2])⟹W^([2])-adW^([2]),b^([2])⟹b^([2])-adb^([2])

    正向传播方程如下(之前讲过):

     forward propagation:

    (1) z^([1])=W^([1]) x+b^([1]) 

    (2) a^([1])=σ(z^([1]))

    (3) z^([2])=W^([2]) a^([1])+b^([2]) 

    (4) a^([2])=g^([2]) (z^([z]))=σ(z^([2]))

    反向传播方程如下:

    back propagation: 

    dW^([1])=1/m dz^([1]) x^T 

    ((db^([1]))┬⏟)┬((n^([1]),1))=1/m np.sum(dz^([1]),axis=1,keepdims=True)

    上述是反向传播的步骤,

    注:这些都是针对所有样本进行过向量化,Y是1×m的矩阵;

    这里np.sum是python的numpy命令,

    axis=1表示水平相加求和,

    keepdims是防止python输出那些古怪的秩数(n,),加上这个确保阵矩阵db^([2])这个向量输出的维度为(n,1)这样标准的形式。 

    目前为止,我们计算的都和Logistic回归十分相似,但当你开始计算反向传播时,你需要计算,是隐藏层函数的导数,输出在使用sigmoid函数进行二元分类。

    这里是进行逐个元素乘积,因为W^([2]T) dz^([2])和(z^([1]))这两个都为(n^([1]),m)矩阵;

    还有一种防止python输出奇怪的秩数,需要显式地调用reshape把np.sum输出结果写成矩阵形式。

    以上就是正向传播的4个方程和反向传播的6个方程

    相关文章

      网友评论

        本文标题:吴恩达深度学习(20)-激活函数的导数和神经网络的梯度下降

        本文链接:https://www.haomeiwen.com/subject/hmdgcqtx.html