[深度学习]吴恩达笔记——第二周

一、神经网络表示

在这里插入图片描述

1. w [ 1 ] w^{[1]} w[1]是(4,3)的原因:第一层 a [ 1 ] a^{[1]} a[1]有4个节点,输入有3个特征

2. w [ 2 ] w^{[2]} w[2]是(1,4)的原因:输出层只有1个节点, a [ 1 ] a^{[1]} a[1]层有4个节点

二、神经网络的输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入单个特征向量 x x x,得到神经网络的预测输出

三、多个样本的向量化

在这里插入图片描述

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

四、激活函数

1.sigmoid函数

在这里插入图片描述
a = 1 1 + e − z a=\frac{1}{1+e^{-z}} a=1+ez1

2.tanh函数(双曲正切函数)

在这里插入图片描述
a = t a n h ( z ) = e z − e − z e z + e − z a=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} a=tanh(z)=ez+ezezez
对于隐藏层神经元来说,激活函数选用tanh函数的效果往往比sigmoid函数的效果要好,因为这使得函数的输出介于-1和1之间,导致输出的平均值更接近0。而在有些时候,是可能需要通过平移所有数据,使得数据的均值为0的。使用tanh函数同样导致了类似的数据中心化的效果,这使得下一层的学习更方便。

对于输出层神经元来说,激活函数选用sigmoid函数的效果更好,因为如果输出结果想要表示一个概率的大小,输出的值处于0到1之间显然更合理

sigmoid函数和tanh函数共有的缺点:

当输入值(z)非常大或非常小时,函数的梯度会变得非常小(梯度消失),会导致梯度下降算法的速度变慢。

3.ReLU函数(修正线性单元函数)

一个解决梯度消失问题的选择就是ReLU函数
在这里插入图片描述
a = m a x ( 0 , z ) a=max(0,z) a=max(0,z)
只要输入值为正时,函数的导数永远都是1;当输入值为负时,函数的导数为0
当输入值为0时,函数的导数是没有定义的,但在实际编程中,z=0.00000000000…出现的概率是很低的。在实际中可以直接给z=0时的函数的导数赋值为1或者0。

现如今,ReLU函数已成为大多数情况下激活函数的默认选择,当不清楚隐藏层神经元该选用什么激活函数时,大多数人会选用ReLU函数

ReLU函数的缺点:

当输入值为负时,函数的导数全为0。但在实际中,有足够多的神经元的输入值是大于0,所以ReLU函数对于大多数训练样本来说,训练速度还是快的

4.Leaky ReLU函数

在这里插入图片描述
a = m a x ( 0.01 z , z ) a=max(0.01z,z) a=max(0.01z,z)
对于常数0.01来说,可以设成学习函数的另一个参数,通过训练得到最优值

五、激活函数为什么需要是非线性的?

在这里插入图片描述
如果激活函数是线性的,那神经网络的输出就只是输入的线性组合,那么无论神经网络的隐藏层有多少层,都将变得没有意义。

只有一个情况下可以使用线性激活函数: a = z a=z a=z
在回归问题中,预测的输出值是一个实数,比如说预测房地产价格,那么输出层神经元的激活函数或许可以选用线性激活函数
在这里插入图片描述

六、激活函数的导数

1.sigmoid函数

在这里插入图片描述

2.tanh函数

在这里插入图片描述

3.ReLU函数

在这里插入图片描述

4.Leaky ReLU

在这里插入图片描述

七、神经网络的梯度下降法

在这里插入图片描述

正向传播的公式:

在这里插入图片描述

反向传播的公式:

在这里插入图片描述
keepdims=true用于防止python输出(n,)类型的数组,保证python输出的是矩阵。这个工作也可以通过reshape来实现。

八、反向传播公式的推导过程

1.Logistic回归

在这里插入图片描述
L ( a , y ) = − y l o g a − ( 1 − y ) l o g ( 1 − a ) L(a,y)=-yloga-(1-y)log(1-a) L(a,y)=yloga(1y)log(1a)
d a = d L d a = − y 1 a + ( 1 − y ) 1 1 − a = − y a + 1 − y 1 − a da=\frac{dL}{da}=-y\frac{1}{a}+(1-y)\frac{1}{1-a}=-\frac{y}{a}+\frac{1-y}{1-a} da=dadL=ya1+(1y)1a1=ay+1a1y
当激活函数选用sigmoid函数时:
a = s i g m o i d ( z ) = 1 1 + e − z a=sigmoid(z)=\frac{1}{1+e^{-z}} a=sigmoid(z)=1+ez1
于是:
d a d z = − 1 ( 1 + e − z ) 2 ( 1 + e − z ) ′ = − 1 ( 1 + e − z ) 2 ( − e − z ) = e − z ( 1 + e − z ) 2 = 1 1 + e − z e − z 1 + e − z = 1 1 + e − z 1 + e − z − 1 1 + e − z = 1 1 + e − z ( 1 − 1 1 + e − z ) = a ( 1 − a ) \frac{da}{dz}=-\frac{1}{(1+e^{-z})^2}(1+e^{-z})' \\ \\=-\frac{1}{(1+e^{-z})^2}(-e^{-z}) \\ \\=\frac{e^{-z}}{(1+e^{-z})^2} \\ \\=\frac{1}{1+e^{-z}}\frac{e^{-z}}{1+e^{-z}} \\ =\frac{1}{1+e^{-z}}\frac{1+e^{-z}-1}{1+e^{-z}} \\ =\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) \\ =a(1-a) dzda=(1+ez)21(1+ez)=(1+ez)21(ez)=(1+ez)2ez=1+ez11+ezez=1+ez11+ez1+ez1=1+ez1(11+ez1)=a(1a)
d z = d L d z = d L d a d a d z = ( − y a + 1 − y 1 − a ) [ a ( 1 − a ) ] = a − y dz=\frac{dL}{dz}=\frac{dL}{da}\frac{da}{dz}=(-\frac{y}{a}+\frac{1-y}{1-a})[a(1-a)]=a-y dz=dzdL=dadLdzda=(ay+1a1y)[a(1a)]=ay
d w = d L d a d a d z d z d w = ( a − y ) x = d z ⋅ x dw=\frac{dL}{da}\frac{da}{dz}\frac{dz}{dw}=(a-y)x=dz·x dw=dadLdzdadwdz=(ay)x=dzx
d b = d L d a d a d z d z d b = ( a − y ) = d z db=\frac{dL}{da}\frac{da}{dz}\frac{dz}{db}=(a-y)=dz db=dadLdzdadbdz=(ay)=dz

2.双层神经网络

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

最后一层输出层的激活函数是sigmoid函数,与Logistics回归类似,因此反向传播也与Logistics回归类似,请注意,最后一层输出层的输入 x x x 实际上是前一层的输出 a [ 1 ] a^{[1]} a[1]
d z [ 2 ] = a [ 2 ] − y dz^{[2]}=a^{[2]}-y dz[2]=a[2]y
d W [ 2 ] = d z [ 2 ] ⋅ a [ 1 ] T dW^{[2]}=dz^{[2]}·a^{[1]^T} dW[2]=dz[2]a[1]T
d b [ 2 ] = d z [ 2 ] db^{[2]}=dz^{[2]} db[2]=dz[2]
而前一层的导数根据链式法则进行求解:
d z [ 1 ] = d L d a [ 2 ] d a [ 2 ] d z [ 2 ] d z [ 2 ] d a [ 1 ] d a [ 1 ] d z [ 1 ] dz^{[1]}=\frac{dL}{da^{[2]}}\frac{da^{[2]}}{dz^{[2]}}\frac{dz^{[2]}}{da^{[1]}}\frac{da^{[1]}}{dz^{[1]}} dz[1]=da[2]dLdz[2]da[2]da[1]dz[2]dz[1]da[1]
= d z [ 2 ] ⋅ d z [ 2 ] d a [ 1 ] ⋅ d a [ 1 ] d z [ 1 ] =dz^{[2]}·\frac{dz^{[2]}}{da^{[1]}}·\frac{da^{[1]}}{dz^{[1]}} =dz[2]da[1]dz[2]dz[1]da[1]
= W [ 2 ] T d z [ 2 ] ∗ g [ 1 ] ′ ( z [ 1 ] ) , ∗ 意味着矩阵逐元素相乘得到新的矩阵 =W^{[2]^T}dz^{[2]}*g^{[1]'}(z^{[1]}),*意味着矩阵逐元素相乘得到新的矩阵 =W[2]Tdz[2]g[1](z[1])意味着矩阵逐元素相乘得到新的矩阵
d W [ 1 ] = d z [ 1 ] ⋅ x T dW^{[1]}=dz^{[1]}·x^T dW[1]=dz[1]xT
d b [ 1 ] = d z [ 1 ] db^{[1]}=dz^{[1]} db[1]=dz[1]
需要注意各矩阵间的维度关系

九、L2正则化

正则化是为了防止神经网络过拟合
在这里插入图片描述

λ 2 m ∑ l = 1 L ∣ ∣ w [ l ] ∣ ∣ F 2 = λ 2 m ( ∣ ∣ w [ 1 ] ∣ ∣ F 2 + ∣ ∣ w [ 2 ] ∣ ∣ F 2 + . . . + ∣ ∣ w [ L ] ∣ ∣ F 2 ) \frac{\lambda}{2m}\sum_{l=1}^{L}||w^{[l]}||_F^2=\frac{\lambda}{2m}(||w^{[1]}||_F^2+||w^{[2]}||_F^2+...+||w^{[L]}||_F^2) 2mλl=1L∣∣w[l]F2=2mλ(∣∣w[1]F2+∣∣w[2]F2+...+∣∣w[L]F2)
这块东西对 w [ 1 ] w^{[1]} w[1] 求导,除 w [ 1 ] w^{[1]} w[1] 外全为0了:
∂ λ 2 m ∣ ∣ w [ 1 ] ∣ ∣ F 2 ∂ w [ 1 ] = λ 2 m ∂ w [ 1 ] T w [ 1 ] ∂ w [ 1 ] = λ 2 m 2 w [ 1 ] = λ m w [ 1 ] \frac{\partial \frac{\lambda}{2m}||w^{[1]}||_F^2}{\partial w^{[1]}}=\frac{\lambda}{2m}\frac{\partial w^{[1]^{T}}w^{[1]}}{\partial w^{[1]}}=\frac{\lambda}{2m}2w^{[1]}=\frac{\lambda}{m}w^{[1]} w[1]2mλ∣∣w[1]F2=2mλw[1]w[1]Tw[1]=2mλ2w[1]=mλw[1]

参考矩阵求导:
∂ x T x ∂ x = 2 x \frac{\partial x^Tx}{\partial x}=2x xxTx=2x
在这里插入图片描述
从直觉上来看,正则化参数 λ \lambda λ 使得权重矩阵 w [ l ] w^{[l]} w[l] 被设置为接近0的值,基本上使得某些隐藏层的神经元的影响降低,从而将这个大规模的过拟合的神经网络简化成了深度大但每层神经元数量小的网络,使得其偏向于高偏差状态,但 λ \lambda λ 还可以取到中间值,使这个网络达到中间刚好的状态。

在这里插入图片描述
z z z 相对变小, 使得激活函数会相对呈现更接近线性的性质,使整个神经网络会更接近线性函数而不是一个极度复杂的非线性函数,因此不会发生过拟合。

十、dropout正则化

在这里插入图片描述
a [ 3 ] a^{[3]} a[3] 再除以 keep-prob 的原因: a [ 3 ] a^{[3]} a[3] 中有20%的元素被归零了,为了不影响 z [ 4 ] z^{[4]} z[4] 的期望值

dropout的缺点:成本函数 J J J 不再被明确定义,不再能通过 p l o t plot plot 成本函数 J J J 的数值变化曲线来观察每次迭代后成本函数是否有在下降。
解决方法:先关闭dropout,运行代码,plot成本函数,确保它在每次迭代都单调递减。再加入dropout。

十一、成本函数优化算法

1.batch梯度下降法

2.随机梯度下降法

永远不会收敛,会一直在最小值附近波动

3.mini-batch梯度下降法

在这里插入图片描述

4.动量梯度下降法(Momentum)

在这里插入图片描述
V d w = β V d w + ( 1 − β ) d w V_{dw}=\beta V_{dw}+(1-\beta)dw Vdw=βVdw+(1β)dw
V d b = β V d b + ( 1 − β ) d b V_{db}=\beta V_{db}+(1-\beta)db Vdb=βVdb+(1β)db
W : = W − α V d w W:=W-\alpha V_{dw} W:=WαVdw
b : = b − α V d b b:=b-\alpha V_{db} b:=bαVdb

4.RMSprop(root,mean,square)

在这里插入图片描述
S d w = β S d w + ( 1 − β ) ( d w ) 2 S_{dw}=\beta S_{dw}+(1-\beta)(dw)^2 Sdw=βSdw+(1β)(dw)2
S d b = β S d b + ( 1 − β ) ( d b ) 2 S_{db}=\beta S_{db}+(1-\beta)(db)^2 Sdb=βSdb+(1β)(db)2
W : = W − α d w S d w W:=W-\alpha \frac{dw}{\sqrt{S_{dw}}} W:=WαSdw dw
b : = b − α d b S d b b:=b-\alpha \frac{db}{\sqrt{S_{db}}} b:=bαSdb db

5.Adam(Adapt moment estimation)

RMSprop和Adam优化算法是少有的被证明适用于不同的深度学习结构的算法

Adam算法实际上是将Momentum算法和RMSprop算法结合在一起
在这里插入图片描述
Momentum部分:
V d w = β 1 V d w + ( 1 − β 1 ) d w V_{dw}=\beta_1 V_{dw}+(1-\beta_1)dw Vdw=β1Vdw+(1β1)dw
V d b = β 1 V d b + ( 1 − β 1 ) d b V_{db}=\beta_1 V_{db}+(1-\beta_1)db Vdb=β1Vdb+(1β1)db
RMSprop部分:
S d w = β 2 S d w + ( 1 − β 2 ) ( d w ) 2 S_{dw}=\beta_2 S_{dw}+(1-\beta_2)(dw)^2 Sdw=β2Sdw+(1β2)(dw)2
S d b = β 2 S d b + ( 1 − β 2 ) ( d b ) 2 S_{db}=\beta_2 S_{db}+(1-\beta_2)(db)^2 Sdb=β2Sdb+(1β2)(db)2
偏差修正:
V d w c o r r e c t e d = V d w 1 − β 1 t V_{dw}^{corrected}=\frac{V_{dw}}{1-\beta_1^t} Vdwcorrected=1β1tVdw
V d b c o r r e c t e d = V d b 1 − β 1 t V_{db}^{corrected}=\frac{V_{db}}{1-\beta_1^t} Vdbcorrected=1β1tVdb
S d w c o r r e c t e d = S d w 1 − β 2 t S_{dw}^{corrected}=\frac{S_{dw}}{1-\beta_2^t} Sdwcorrected=1β2tSdw
S d b c o r r e c t e d = S d b 1 − β 2 t S_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t} Sdbcorrected=1β2tSdb
权重更新:
W : = W − α V d w c o r r e c t e d S d w c o r r e c t e d + ϵ W:=W-\alpha \frac{V_{dw}^{corrected}}{\sqrt{S_{dw}^{corrected}}+\epsilon} W:=WαSdwcorrected +ϵVdwcorrected
b : = b − α V d b c o r r e c t e d S d b c o r r e c t e d + ϵ b:=b-\alpha \frac{V_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon} b:=bαSdbcorrected +ϵVdbcorrected
超参数:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值