3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授


←上一篇↓↑下一篇→
3.8 激活函数的导数回到目录3.10 直观理解反向传播

神经网络的梯度下降法 (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 )维度。

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

Cost function: 公式: J ( W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 m L ( y ^ , y ) J(W^{[1]},b^{[1]},W^{[2]},b^{[2]})=\frac1m\sum_{i=1}^mL(\hat{y},y) J(W[1],b[1],W[2],b[2])=m1i=1mL(y^,y) loss function和之前做logistic回归完全一样。

训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值: y ^ , ( i = 1 , 2 , . . . , m ) \hat{y},(i=1,2,...,m) y^,(i=1,2,...,m)

公式3.28: d W [ 1 ] = d J d W [ 1 ] , d b [ 1 ] = d J d b [ 1 ] dW^{[1]}=\frac{dJ}{dW^{[1]}},db^{[1]}=\frac{dJ}{db^{[1]}} dW[1]=dW[1]dJ,db[1]=db[1]dJ
公式3.29: d W [ 2 ] = d J d W [ 2 ] , d b [ 2 ] = d J d b [ 2 ] dW^{[2]}=\frac{dJ}{dW^{[2]}},db^{[2]}=\frac{dJ}{db^{[2]}} dW[2]=dW[2]dJ,db[2]=db[2]dJ

其中

公式3.30: W [ 1 ] ⇒ W [ 1 ] − α d W [ 1 ] , b [ 1 ] ⇒ b [ 1 ] − α d b [ 1 ] W^{[1]}\Rightarrow W^{[1]}-\alpha dW^{[1]},b^{[1]}\Rightarrow b^{[1]}-\alpha db^{[1]} W[1]W[1]αdW[1],b[1]b[1]αdb[1]
公式3.31: W [ 2 ] ⇒ W [ 2 ] − α d W [ 2 ] , b [ 2 ] ⇒ b [ 2 ] − α d b [ 2 ] W^{[2]}\Rightarrow W^{[2]}-\alpha dW^{[2]},b^{[2]}\Rightarrow b^{[2]}-\alpha db^{[2]} W[2]W[2]αdW[2],b[2]b[2]αdb[2]

正向传播(forward propagation)方程如下:

(1) z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=W^{[1]}x+b^{[1]} z[1]=W[1]x+b[1]
(2) a [ 1 ] = σ ( z [ 1 ] ) a^{[1]}=\sigma(z^{[1]}) a[1]=σ(z[1])
(3) z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]}=W^{[2]}a^{[1]}+b^{[2]} z[2]=W[2]a[1]+b[2]
(4) a [ 2 ] = g [ 2 ] ( z [ 2 ] ) = σ ( z [ 2 ] ) a^{[2]}=g^{[2]}(z^{[2]})=\sigma(z^{[2]}) a[2]=g[2](z[2])=σ(z[2])

反向传播(backward propagation)方程如下:

公式3.32: d z [ 2 ] = A [ 2 ] − Y , Y = [ y [ 1 ] y [ 2 ] ⋯ y [ m ] ] dz^{[2]}=A^{[2]}-Y,Y=\left[\begin{matrix}y^{[1]} & y^{[2]} & \cdots & y^{[m]}\end{matrix}\right] dz[2]=A[2]Y,Y=[y[1]y[2]y[m]]
公式3.33: d W [ 2 ] = 1 m d z [ 2 ] A [ 1 ] T dW^{[2]}=\frac1mdz^{[2]}A^{[1]T} dW[2]=m1dz[2]A[1]T
公式3.34: 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 r u e ) db^{[2]}=\frac1mnp.sum(dz^{[2]},axis=1,keepdims=True) db[2]=m1np.sum(dz[2],axis=1,keepdims=True)
公式3.35: d z [ 1 ] = W [ 2 ] T d z [ 2 ] ⏟ ( n [ 1 ] , m ) ∗ g [ 1 ] ′ ⏟ a c t i v a t i o n   f u n c t i o n   o f   h i d d e n   l a y e r ∗ ( z [ 1 ] ) ⏟ ( n [ 1 ] , m ) dz^{[1]}=\underbrace{W^{[2]T}dz^{[2]}}_{(n^{[1]},m)}*\underbrace{g^{[1]'}}_{activation\ function\ of\ hidden\ layer}*\underbrace{(z^{[1]})}_{(n^{[1]},m)} dz[1]=(n[1],m) W[2]Tdz[2]activation function of hidden layer g[1](n[1],m) (z[1])
公式3.36: d W [ 1 ] = 1 m d z [ 1 ] x T dW^{[1]}=\frac1mdz^{[1]}x^T dW[1]=m1dz[1]xT
公式3.37: 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 ) \underbrace{db^{[1]}}=\frac1mnp.sum(dz^{[1]},axis=1,keepdims=True) db[1]=m1np.sum(dz[1],axis=1,keepdims=True)

上述是反向传播的步骤,注:这些都是针对所有样本进行过向量化, Y Y Y 1 ∗ m 1*m 1m 的矩阵;这里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) 矩阵;

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

以上就是正向传播的4个方程和反向传播的6个方程,这里我是直接给出的,在下个视频中,我会讲如何导出反向传播的这6个式子的。如果你要实现这些算法,你必须正确执行正向和反向传播运算,你必须能计算所有需要的导数,用梯度下降来学习神经网络的参数;你也可以许多成功的深度学习从业者一样直接实现这个算法,不去了解其中的知识。

课程PPT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


←上一篇↓↑下一篇→
3.8 激活函数的导数回到目录3.10 直观理解反向传播

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值