一、神经网络表示

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+e−z1​

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+e−zez−e−z​
对于隐藏层神经元来说,激活函数选用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−(1−y)log(1−a)
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​+(1−y)1−a1​=−ay​+1−a1−y​
当激活函数选用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+e−z1​
于是:
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+e−z)21​(1+e−z)′=−(1+e−z)21​(−e−z)=(1+e−z)2e−z​=1+e−z1​1+e−ze−z​=1+e−z1​1+e−z1+e−z−1​=1+e−z1​(1−1+e−z1​)=a(1−a)
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​=dadL​dzda​=(−ay​+1−a1−y​)[a(1−a)]=a−y
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=dadL​dzda​dwdz​=(a−y)x=dz⋅x
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=dadL​dzda​dbdz​=(a−y)=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]dL​dz[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=1∑L​∣∣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 ∂x∂xTx​=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​=β1​Vdw​+(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​=β1​Vdb​+(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​=β2​Sdw​+(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​=β2​Sdb​+(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−β1t​Vdw​​
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−β1t​Vdb​​
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−β2t​Sdw​​
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−β2t​Sdb​​
权重更新:
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. 深度学习-吴恩达-笔记-3-浅层神经网络

    目录 神经网络概述 神经网络的表示 计算一个神经网络的输出 多样本向量化 向量化实现的解释 激活函数 为什么需要非线性激活函数 激活函数的导数 神经网络的梯度下降 直观理解反向传播 随机初始化 [此为 ...

  2. 深度学习-吴恩达-笔记-7-超参数调试、Batch正则化和程序框架

    目录 调试处理 为超参数选择合适的范围 超参数调试实践: Pandas VS Caviar 归一化网络的激活函数 将 Batch Norm 拟合进神经网络 Batch Norm 为什么奏效? 测试时的 ...

  3. 深度学习-吴恩达-笔记-6-优化算法

    目录 Mini-batch 梯度下降 理解 mini-batch 梯度下降法 指数加权平均数 理解指数加权平均数 指数加权平均的偏差修正 动量梯度下降法 ( Gradient descent with ...

  4. 深度学习-吴恩达-笔记-5-深度学习的实践层面

    目录 训练.验证.测试集 偏差.方差 机器学习基础 正则化 为什么正则化有利于预防过拟合 dropout正则化 理解dropout 其它正则化方法 归一化输入 梯度消失/梯度爆炸 神经网络的权重初始化 ...

  5. 深度学习-吴恩达-笔记-4-深层神经网络

    目录 深层神经网络 前向传播和反向传播 深层网络中的前向传播 核对矩阵的维数 为什么使用深层表示 搭建神经网络块 参数 VS 超参数 深度学习和大脑的关联性 [此为本人学习吴恩达的深度学习课程的笔记记 ...

  6. 深度学习-吴恩达-笔记-2-神经网络的编程基础

    目录 二分类 逻辑回归 逻辑回归的代价函数 梯度下降法 导数 计算图 使用计算图求导 逻辑回归中的梯度下降 m个样本的梯度下降 向量化 向量化的更多例子 向量化逻辑回归 向量化逻辑回归的梯度输出 Py ...

  7. 深度学习-吴恩达-笔记-1-深度学习引言

    目录 什么是神经网络 神经网络的监督学习 为什么深度学习会兴起 [此为本人学习吴恩达的深度学习课程的笔记记录,有错误请指出!] 什么是神经网络 让我们从一个房价预测的例子开始讲起,如根据房子面积来预测 ...

  8. 【深度学习-吴恩达】L1-4 深层神经网络 作业

    L1 深度学习概论 4 深层神经网络 作业链接:吴恩达<深度学习> - Heywhale.com 0 作业任务 构建一个任意层数的深度神经网络 实现构建深度神经网络所需的所有函数 使用这些 ...

  9. (一,1NN-QI)神经网络与深度学习——吴恩达深度学习配套笔记

    从神经网络基础到量化投资应用 疫情当前,国难当头,当灾难来临的时候才深刻的感觉到了自己的弱小,对国家,对亲人,是这么的无能为力,希望做点什么,可是却什么也做不了.不过庆幸的是我们还年轻,现在也不是自怜 ...

最新文章

  1. IP地址规划和路由实验
  2. 10-Python与设计模式--享元模式
  3. 【SIS-OAS 1.52.0】【C03-测试报告】常规版本回归测试报告-------回归测试报告模板...
  4. 我的世界1.7.10java32位_我的世界1.7.10中文版
  5. 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
  6. 输入数字自动找规律的软件_WPS2019 填充柄的顺序式填充、复制式填充、规律填充、自定义填充...
  7. java us ascii_java – 为什么US-ASCII编码接受非US-ASCII字符?
  8. MyBatis缓存机制详解
  9. 2000坐标系xy坐标几位_2000坐标系(2000坐标系x和y坐标几位数)
  10. TC8:IPv4_REASSEMBLY_01-13
  11. Redis基础篇(一)
  12. 快门光圈感光度口诀_光圈快门感光度口诀是什么?
  13. ASEMI快恢复二极管SFF806A的压降是多少
  14. 神棍节献礼之——TJU1111 MPI Maelstrom(最短路)
  15. SDRAM中的DQM
  16. 密码分析之单表代换原理详解与算法实现
  17. latex 多张子图,横栏/双栏
  18. 非负大整数加法---网易校招附加题
  19. 高考查询系统 (完善中)
  20. BEA-090403 Authentication for user admin denied

热门文章

  1. 学历对计算机专业的人很重要吗?
  2. Linux 安装pip
  3. 布谷鸟优化算法C++
  4. Java 实现数据库导出Word
  5. 几步制作高清ICO图标
  6. git连接远程仓库(github)
  7. IDEA学习篇——IDEA刷新项目/清除项目缓存
  8. 图形学 平行投影与透视投影
  9. 实战:电商平台如何重新定义目标用户?
  10. 实验室清洗玻璃仪器小窍门,一篇管够!