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循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...
- 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中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...
- Deep Learning.ai学习笔记_第一门课_神经网络和深度学习
目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...
- TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN
前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...
随机推荐
- pywin32获得tkinter的Canvas窗口句柄,并在上面绘图
上一篇博文获得主窗口句柄使用的是root.frame或者通过子控件调用master.frame方法,但是子控件本身没有frame方法.那么怎么获得子控件的句柄呢?试过了很多办法,想过把Canvas当作 ...
- Tutorial: Create a Blinky ARM test project(创建一个闪灯的arm测试项目)
Background ref : Tutorial: Create a Blinky ARM test project If you are new to ARM development, it is ...
- Java 14 令人期待的 5 大新特性,打包工具终于要来了
随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. Java 13刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发 ...
- redis(一)----配置及安装
1. redis下载 根据自己操作系统平台下载适合的文件包: https://github.com/MSOpenTech/redis 2. redis安装 (1)解压, ...
- 基于python的arcgis底图添加(转)
本文翻译自:Qingkai‘s Blog 当使用python的Basemap库绘制地图时,选择一个漂亮的底图会为图片增色不少,但是使用map.bluemarble().map.etopo()或者map ...
- 关于python请求库Selenium安装所遇到的问题
今天,初次接触python,在网上买了一本关于爬虫的书,因为之前电脑上存在python,所以就对着书直接进行的请求库的安装,安装的时候,主要遇到了下边一个问题,在安装Selenium的时候,出现以下提 ...
- CMake命令之export
CMake中与export()相关的命令 (注:红色字体是标题,粉色是需要特别需要注意的地方) 总的来说,export()命令想要做的事情可以用一句话概括:Export targets from th ...
- thinkcmf面包屑制作
网站常有的功能面包屑,如图所示: 支持1级分类 list.html 首页 / {$name} article.html 首页 / {$term['name']} / {$post_title} 链接: ...
- JavaScript mixins
mixin 是一个类,该类的方法被添加,混合进另外一个类.一个基础类会包含mixin类的方法而不是继承它.这样你就可以使用不同的mixin类来增加或者增强基础类的功能. 这编内容包含怎么样使用java ...
- 第二季 第十一天 part2
const greeting = function() { // 注意,这个 this.name 取决于谁调用了 greeting() 函数 console.log('Hi, ', this.name ...