美文网首页深度学习笔记
吴恩达深度学习(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