deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记
1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i])。
其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量;
A[i-1]是第i-1层的神经元,形状是n[i-1]*p,p是样本数量;
B[i]形状是n[i]*p,B[i]的每一列都是一样的,所以其实有效的参数只是n[i]个,python里直接用n[i]*1的b[i]然后boradcasting成n[i]*p方便做加法。
A[0]对应输入层,n[0]是单个输入样本的特征数量。f[i]()是第i层的激活函数。
Notation:a4[2](12)表示第2层,第12个样本,第4个神经元。
2. 永远不要用sigmoid函数, 唯一的例外是二元分类问题的输出层,因为这需要输出是0或1。
tanh(z) = (e^z-e^(-z))/(e^z+e^(-z)) 作为激活函数几乎总比sigmoid函数效果好,直观地说是因为tanh的中心店是0而不像sigmoid是0.5,于是对于下一层有中心化数据的作用。
tanh和sigmoid函数的共同缺点是当输入很大或者很小时,函数会饱和,梯度为0。
ReLU是现在的默认选择,f(z) = max(0, z)。ReLU的收敛速度比tanh和sigmoid都要快得多。Leaky ReLU ( max(0.01z, z) )的表现更好一点,但是不明显,所以还是ReLU用的更多。
3. 为什么激活函数是必须的?如果没有激活函数,系统就成了只对输入做线性运算,内部的隐含层一点用也没有,网络层数再多也没用,因为线性函数的组合也是线性函数。
4. sigmoid σ(z) = 1/(1+e^(-z)),σ'(z) = σ(z)(1-σ(z)).
tanh g(z) = (e^z-e^(-z))/(e^z+e^(-z)) ,g'(z) = 1-(g(z))^2.
ReLU g(z) = max(0, z),g'(z) = { 0 , if z<0;
{ 1, if z>0;
{ undefined, if z = 0. 实际使用中可以把这个点的导数设为0或者1,都无所谓。
5. 训练神经网络时,随机初始化权重W非常重要,全部设为0的话会使得梯度下降法无效,b可以初始化为0。
w[i] = np.random.randn((n[i],n[i-1]))*0.01. 乘以0.01是为了把它初始化成很小的随机数,因为对于tanh、sigmoid类似的函数,权重太大容易饱和。如果不用tanh、sigmoid,用ReLU,那么问题不大,但如果最终是个二分类问题,最后一个输出还是用了sigmoid,那么还会遇到这个问题。所以干脆全部初始化成很小的随机数吧。对于浅层神经网络,一般这种初始化方法就ok了。但对于很深的神经网络,有时候要挑选0.01以外的常数。
b[i] = np.zero((n[i], 1))。
但对于Logistic回归来说,并没有隐含层,所以是可以把W和b都初始化为0的。这样初始化的时候,第一次前向计算的输出确实是0,但是反向传播计算的梯度值是和输入相关的,所以不同的神经元会有不同的值,破坏了对称性,所以算法有效。
6. 神经网络算法的一般流程:
1)定义神经网络的结构:输入的大小,隐藏层层数,每层神经元的数量,等等。
2)初始化参数,W初始化为小随机数,b初始化为0。
3)循环:
a)前向传播,对于第[i]层网络,已知前一层传进来的输入A[i-1],和这一层的参数W[i]、b[i],以及激活函数,计算出Z[i]和A[i],并且把Z[i]、A[i]、W[i]保存起来为反向传播的计算做准备。
b)计算loss。
c)反向传播得到梯度,对于第[i]层网络,已知后一层传来的输入dA[i],从cache中取出Z[i]、A[i]、W[i],计算出dW[i]、db[i]、dA[i-1]。
d)更新参数。
deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记的更多相关文章
- deeplearning.ai 神经网络和深度学习 week3 浅层神经网络
1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...
- [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)
觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...
- deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II 听课笔记
1. 误差分析(Error analysis) 误差分析的目的是找到不同误差源的比重,从而指引我们接下来往哪个方向努力改进.NG建议手工统计随机100个错误的误差源,比如对于猫分类器,错误的照片可能是 ...
- deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I 听课笔记
这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)
=================第2周 神经网络基础=============== ===2.1 二分分类=== ===2.2 logistic 回归=== It turns out, whe ...
- [DeeplearningAI笔记]神经网络与深度学习2.1-2.4神经网络基础
觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.1 二分分类 在二分分类问题中,目标是训练出一个分类器,它以图片的特征向量x作为输入,预测输出的结果标签y是1还是0.在图像识别猫图片的例子 ...
- 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF
随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...
- Deeplearning.ai课程笔记-神经网络和深度学习
神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多. 这篇笔记记录了Week4+5中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...
随机推荐
- 《微软的软件测试之道》【PDF】下载
<微软的软件测试之道>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382291 内容简介 书的第三部分探讨某些我们工作中使用过的 ...
- 53、css补充
css其余问题补充 一.默认的高度和宽度问题 1.父子都是块级元素 <!DOCTYPE html> <html> <head> <title>...&l ...
- 【java】io流之字符输出流:java.io.Writer类及子类的子类java.io.FileWriter
package 文件操作; import java.io.File; import java.io.FileWriter; import java.io.IOException; import jav ...
- SpringJDBC的JdbcTemplate在MySQL5.7下不支持子查询的问题
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [ SELECT ...
- Java之路第一步——第一行Java代码
main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法. 名字必须是main: 必须是public static void 类型的: 必须接收一 ...
- ES6 函数的扩展2
8.2 rest参数 ES6引入rest参数(形式为"-变量名"),用于获取函数的多余参数,这样就不需要使用arguments对象了. arguments对象并没有数组的方法,re ...
- 如何减轻ajax定时触发对服务器造成的压力和带宽的压力?ajax-长轮训
AJAX长轮询的方法来解决频繁对后台的请求,进一步减小压力 在实现过程发现AJAX的多次请求会出现多线程并发的问题又使用线程同步来解决该问题 个人对ajax长轮询的一点愚见 ajax请示后台时,后台程 ...
- js基础:对DOM进行操作,删除、添加元素
<body> <div id="div1"> <p id="p1">第一段</p> <p id=" ...
- 深入理解 Python 异步编程(上)
http://python.jobbole.com/88291/ 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知 ...
- Vuex- Action的 { commit }
Vuex 中 使用 Action 处理异步请求时,常规写法如下: getMenuAction:(context) =>{ context.commit('SET_MENU_LIST',['承保2 ...