C1 - week3 - part6 神经网络的梯度下降 Gradient descent for neural networks

一、梯度下降

我们之前介绍的的单层神经网络会有 W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] W^{[1]},b^{[1]}, W^{[2]},b^{[2]} W[1],b[1],W[2],b[2]这些参数,还有 n x n_{x} nx表示输入特征的个数, n [ 1 ] n_{[1]} n[1]表示隐藏单元个数, n [ 2 ] n^{[2]} n[2]表示输出单元个数。

矩阵 W [ 1 ] W^{[1]} W[1]的维度就是 ( n [ 1 ] , n [ 0 ] ) (n^{[1]}, n^{[0]}) (n[1],n[0]) b [ 1 ] b^{[1]} b[1]就是 n [ 1 ] n^{[1]} n[1]维列向量,可以写成 ( n [ 1 ] , 1 ) (n^{[1]}, 1) (n[1],1)。矩阵 W [ 2 ] W^{[2]} W[2]的维度就是 ( n [ 2 ] , n [ 1 ] ) (n^{[2]}, n^{[1]}) (n[2],n[1]) b [ 2 ] b^{[2]} b[2]的维度就是 ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1)维。

神经网络还有一个成本函数,假设你在做二分类任务,那么你的成本函数等于
C o s t F u n c t i o n : J ( W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 m L ( y ^ , y ) Cost Function:J(W^{[1]}, b^{[1]}, W^{[2]}, b^{[2]})=\frac{1}{m}\sum_{i=1}^{m}L(\hat{y}, y) CostFunction:J(W[1],b[1],W[2],b[2])=m1i=1mL(y^,y)
训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是全部初始化为零。当你参数初始化完成后,每次梯度下降都会循环计算以下预测值:
y ^ [ i ] , ( i = 1 , 2 , ⋯   , m ) d W [ 1 ] = d J d W [ 1 ] , d b [ 1 ] = d J d b [ 1 ] d W [ 2 ] = d J d W [ 2 ] , d b [ 1 ] = d J d b [ 2 ] \hat{y}^{[i]},(i = 1, 2, \cdots, m) \\ dW^{[1]} = \frac{dJ}{dW^{[1]}}, db^{[1]} = \frac{dJ}{db^{[1]}} \\ dW^{[2]} = \frac{dJ}{dW^{[2]}}, db^{[1]} = \frac{dJ}{db^{[2]}} \\ y^[i],(i=1,2,,m)dW[1]=dW[1]dJ,db[1]=db[1]dJdW[2]=dW[2]dJ,db[1]=db[2]dJ
然后更新参数
W [ 1 ] = W [ 1 ] − α d W [ 1 ] , b [ 1 ] = b [ 1 ] − α d b [ 1 ] W [ 2 ] = W [ 2 ] − α d W [ 2 ] , b [ 2 ] = b [ 2 ] − α d b [ 2 ] W^{[1]} = W^{[1]} - \alpha dW^{[1]}, b^{[1]} = b^{[1]} - \alpha db^{[1]} \\ W^{[2]} = W^{[2]} - \alpha dW^{[2]}, b^{[2]} = b^{[2]} - \alpha db^{[2]} W[1]=W[1]αdW[1],b[1]=b[1]αdb[1]W[2]=W[2]αdW[2],b[2]=b[2]αdb[2]
正向传播方程如下:
F o r w a r d P r o p a g a t i o n ( 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 [ 2 ] ) = σ ( z [ 2 ] ) Forward Propagation \\ (1)z^{[1]} = W^{[1]}x+b^{[1]} \\ (2)a^{[1]} = \sigma(z^{[1]}) \\ (3)z^{[2]} = W^{[2]}a^{[1]} + b^{[2]} \\ (4)a^{[2]} = g^{[2]}(z^{[2]}) = \sigma(z^{[2]}) ForwardPropagation(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[2])=σ(z[2])
反向传播方程如下:
( 1 ) d z [ 2 ] = A [ 2 ] − Y , Y = [ y [ 1 ] , y [ 2 ] , . . . , y [ m ] ] ( 2 ) d W [ 2 ] = 1 m d z [ 2 ] A [ 1 ] T ( 3 ) d b [ 2 ] = 1 m n p . s u m ( d z [ 2 ] , a x i s = 1 , k e e p d i m s = T u r e ) ( 4 ) d z [ 1 ] = W [ 2 ] T d z [ 2 ] ∗ g [ 1 ] ′ ∗ z [ 1 ] ( 5 ) d W [ 1 ] = 1 m d z [ 1 ] x T ( 6 ) d b [ 1 ] = 1 m n p . s u m ( d z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) (1)dz^{[2]} = A^{[2]} - Y, Y = [y^{[1]}, y^{[2]}, ..., y^{[m]}] \\ (2)dW^{[2]} = \frac{1}{m}dz^{[2]}A^{[1]T} \\ (3)db^{[2]} = \frac{1}{m}np.sum(dz[2], axis = 1, keepdims = Ture) \\ (4)dz^{[1]} = W^{[2]T}dz^{[2]} * g^{[1]'}*z^{[1]} \\ (5)dW^{[1]} = \frac{1}{m}dz^{[1]}x^T \\ (6)db^{[1]} = \frac{1}{m}np.sum(dz^{[1]}, axis = 1, keepdims = True) (1)dz[2]=A[2]Y,Y=[y[1],y[2],...,y[m]](2)dW[2]=m1dz[2]A[1]T(3)db[2]=m1np.sum(dz[2],axis=1,keepdims=Ture)(4)dz[1]=W[2]Tdz[2]g[1]z[1](5)dW[1]=m1dz[1]xT(6)db[1]=m1np.sum(dz[1],axis=1,keepdims=True)
上述为反向传播的步骤。注:所有样本进行过向量化, Y Y Y 1 × m 1 \times m 1×m的矩阵,这里 np.sumpythonnumpy命令,axis = 1表示水平相加求和, keepdims是防止python输出那些古怪的秩数 ( n , ) (n,) (n,),加上这个确保矩阵 d b [ 2 ] db^{[2]} db[2]这个向量输出的维度为 ( n , 1 ) (n, 1) (n,1)这样标准的形式。

目前为止,我们计算的都和Logistic回归十分相似,但当你开始计算反向传播时,你需要计算隐藏层函数的导数,输出在使用sigmoid函数进行二元分类,这里是进行逐个元素乘积,因为 W [ 2 ] T d z [ 2 ] W^{[2]T}dz^{[2]} W[2]Tdz[2] ( z [ 1 ] ) (z^{[1]}) (z[1])这两个都为 ( n [ 1 ] , m ) (n^{[1]}, m) (n[1],m)矩阵。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值