吴恩达【深度学习工程师】学习笔记(四)
来源:互联网 发布:ubuntu 设置apt源 编辑:程序博客网 时间:2024/06/02 03:18
吴恩达【深度学习工程师】专项课程包含以下五门课程:
1、神经网络和深度学习;
2、改善深层神经网络:超参数调试、正则化以及优化;
3、结构化机器学习项目;
4、卷积神经网络;
5、序列模型。
今天介绍《神经网络与深度学习》系列第四讲:浅层(shallow)神经网络。
主要内容:1、描述神经网络的结构;
2、以计算图的方式推导神经网络的前向传播;
3、详细介绍了不同的激活函数;
4、介绍了神经网络的反向传播过程以及各个参数的求导细节;
5、介绍了权重初始化。
1、神经网络概述
仅含一个隐藏层的神经网络就是浅层神经网络。
神经网络的结构与逻辑回归类似,稍微不同的是,浅层神经网络比逻辑回归多了一层,其中,中间那层被称为隐藏层。因此,前向传播过程分为两层,第一层是输入层到隐藏层,用上标[1]来表示:
第二层是隐藏层到输出层,用上标[2]来表示:
ps:方括号上标[i]表示当前所处的层数,圆括号上标(i)表示第i个样本。
反向传播过程也分成两层,第一层是输出层到隐藏层,第二层是隐藏层到输入层。
结构上分成三层:输入层(Input layer),隐藏层(Hidden layer)和输出层(Output layer)。
2、计算神经网络的输出
逻辑回归的正向计算可以分解成计算z和a的两部分:
对于两层神经网络,从输入层到隐藏层对应一次逻辑回归运算;从隐藏层到输出层对应一次逻辑回归运算。
从隐藏层到输出层的计算公式为:
其中
引入向量化运算后,上述表达式变为:
ps:
对于m个训练样本,我们使用向量化的方式来运算:
ps:
矩阵的行表示神经元个数,矩阵的列表示样本数目m。
3、激活函数
以下是几个常用的激活函数:
- sigmoid函数
- tanh函数
- ReLU函数
- Leaky ReLU函数
比较sigmoid函数和tanh函数:
1)、对于隐藏层的激活函数,tanh函数要比sigmoid函数表现更好一些。因为tanh函数的取值范围在[-1, 1]之间,隐藏层的输出被限定在[-1, 1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化(均值为0)的效果;
2)、对于输出层的激活函数,因为二分类问题的输出取值为{0, 1},所以一般会选择sigmoid作为激活函数。
sigmoid函数和tanh函数都有一个问题,就是当|z|很大的时候,激活函数的梯度接近0。因此,在这个区域内,梯度下降算法会运行得比较慢。
ReLU激活函数在z大于零时梯度始终为1,在z小于零时梯度始终为0。z等于零时的梯度可以当成1也可以当成0,实际应用中并不影响。对于隐藏层,选择ReLU作为激活函数能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。但当z小于零时,存在梯度为0的问题,在实际应用中,这个影响不是很大。
为了避免这个问题,出现了Leaky ReLU激活函数,能够保证z小于零是梯度不为0。
激活函数不能全部使用线性函数,原因是:
假设所有的激活函数都是线性的,为了简化计算,我们直接令激活函数
我们对上式中
经过推导我们发现
这表明,使用神经网络与直接使用线性模型的效果并没有什么两样。隐藏层的作用就消失了。
sigmoid函数的导数:
tanh函数的导数:
ReLU函数的导数:
Leaky ReLU函数的导数:
4、梯度计算
神经网络中如何进行梯度计算?
上面这个浅层神经网络,包含的参数为
该神经网络前向传播过程为:
其中,
反向传播是计算导数(梯度)的过程,这里先列出来Cost function对各个参数的梯度:
我们使用计算图的方式来推导反向传播过程:
含一个隐藏层神经网络中,m个样本的前向传播和反向传播过程分别包含了6个表达式,其向量化形式如下图所示:
5、随机初始化
神经网络模型中的参数权重W是不能全部初始化为零的。
举个简单的例子,一个浅层神经网络包含两个输入,隐藏层包含两个神经元。如果权重
这样使得隐藏层第一个神经元的输出等于第二个神经元的输出,即
因此我们将W进行随机初始化(b可初始化为零)。
python里可以使用如下语句进行W和b的初始化:
- 1
- 2
- 3
- 4
这里将
- 吴恩达【深度学习工程师】学习笔记(四)
- 吴恩达【深度学习工程师】学习笔记(一)
- 吴恩达【深度学习工程师】学习笔记(二)
- 吴恩达【深度学习工程师】学习笔记(三)
- 吴恩达【深度学习工程师】学习笔记(五)
- 吴恩达【深度学习工程师】学习笔记(六)
- 吴恩达【深度学习工程师】学习笔记(七)
- 吴恩达【深度学习工程师】学习笔记(八)
- 吴恩达【深度学习工程师】学习笔记(九)
- 吴恩达【深度学习工程师】学习笔记(十)
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达(Andrew Ng)深度学习工程师笔记
- 吴恩达深度学习课程四:卷积神经网络(学习笔记)
- 深度学习笔记(四)VGG14
- 吴恩达深度学习笔记(四)week1卷积神经网络
- React native 界面跳转原生Android界面
- QT sql 链接
- Java学习路线规划
- dubbo 的使用
- 利用ssh-keygen生成git公密钥 实现git无密码登录
- 吴恩达【深度学习工程师】学习笔记(四)
- webview加载网页
- Android5.0之NavigationView的使用
- Redis探索之旅(5)- 在Linux下将Redis注册成服务
- HTTP协议详解(真的很经典)
- POJ3624 0-1 背包问题
- leetcode 258. Add Digits
- 使用BeautifulSoup中的find()和findAll()函数时关键字参数的注意事项
- C语言文件操作相关函数