Deeplearning.ai课程笔记-神经网络和深度学习
神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多。
这篇笔记记录了Week4+5中没有的内容。
参考笔记:深度学习笔记
神经网络和深度学习
- 结构化数据:如数据库里的数据
- 非结构化数据:hard to understand:如图像、文本
一. 深度学习的优势
算法、硬件计算能力的提高使神经网络运行速度变快
大数据(带labels的)使得神经网络精确度更高
在数据集不多的时候深度学习的优势并不是很明显,但是在大数据的情况下,辅助以好的算法和强计算能力,会使神经网络的运行速度和精确度大大提高。
二. Numpy
1. 广播broadcast
两个多维度向量加减乘除时,只要两个向量columns或者ranks有一个相等,即行数相等或者列数相等则可以在相应的位置上进行运算。如果没有哪一个对应相等,则不可以运算。
(m*n)数组 与 (m*1)/(1*n)数组都可以进行+-*/。
运算时(m*1)/(1*n)自动扩充至(m*n)
同理:
(1*m) 与 k也可以运算
注意:如果列数等于行数不可以进行运算!唯一的特例:(1,n)与(n,1)之间可以运算,结果为(n,n)维向量
2. 乘法使用
元素乘法:np.multiply(a,b)
矩阵乘法:np.dot(a,b) 或 np.matmul(a,b) 或 a.dot(b)
唯独注意:*,在 np.array 中重载为元素乘法,在 np.matrix 中重载为矩阵乘法!
元素乘法可以用利用broadcast;而矩阵乘法必须要满足(m*n)(n*k)
3. 定义矩阵时的建议
shape: (n,) 与 (1,n) 区别:
例: (4,) [1,2,3,4]
(1,4) [[1,2,3,4]]
1.不要使用rank 1array!
如下:
不要使用:
a = np.arange(100)
a = np.random.randn(5)
用(1,n)(n,1)等来代替
a = np.arange(100).reshape(1,100)
a = np.random.randn(1,5)
2.经常使用np.reshape来使向量理想化
三. 激活函数
Activation Function:之前神经网络里不同层之间的运算一般都是“加权和+sigmoid函数”。sigmoid函数就是激活函数。还有其他非线性函数可以选择
激活函数大多都是非线性函数:只有输出层可能会有线性函数
以下是四个激活函数:
sigmoid激活函数:除了输出层是一个二分类问题基本不会用它。
tanh激活函数:tanh是非常优秀的,几乎适合所有场合。
ReLu激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用ReLu或者Leaky ReLu。
四. 随机初始化
\(W^{[1]}\)=np.random.randn(2,2)(生成高斯分布),通常再乘上一个小的数,比如0.01,这样把它初始化为很小的随机数。然后\(b^{[1]}\)可以初始化为0。因为只要随机初始化你就有不同的隐含单元计算不同的东西,因此不会有symmetry breaking问题了。相似的,对于\(W^{[2]}\)可以随机初始化,\(b^{[2]}\)可以初始化为0。
五. 深层神经网络
L代表层数,输入层为第0层(l=0)。
一个n层神经网络有n-1层隐藏层((n-1)+1层输出层=n层)
每一层神经网络都有输出,记作\(a^{[l]}\)
输入层输入的特征记作\(x\),但是\(x\)同样也是0层的激活函数,所以\(x=a^{[0]}\)。
最后一层的激活函数,所以\(a^{[L]}\)是等于这个神经网络所预测的输出结果。
六. 矩阵的维度
假设每个样本有\(x\)个特征,训练集总共有m个样本。
\(A^{[l]}\)和\(Z^{[l]}\)维度:(\(n^{[l]}\),m)
\(W^{[l]}\)维度:(\(n^{[l]}\),\(n^{[l-1]}\))
\(b^{[l]}\)维度:(\(n^{[l]}\),1)
无论是前向传播还是反向传播,所有的矩阵维数都是前后一致的!

七. 为什么需要深层神经网络
原因1: 对于深层神经网络,神经网络前几层研究比较低层次的,之后几层是将低层次的内容组合在一起研究复杂层次的。
比如:语音识别:前几层是声音的声波识别->声音的音位->声音里的字母->单词->短语->句子
从最低层次的不断向上提升层次。
原因2: 是遵循电路原理:浅层次的网络相对于深层次的需要指数级的神经单元才能达到和深层次的同样效果。
当然神经网络不是越深越好,层次的深度和调参数一样,也是需要不断的尝试选择一个最适合的层次。
八. 前向传播和反向传播
前向传播公式:
for l in range(1,L+1):
\[
Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
\]
\[
A^{[l]}=g^{[l]}(Z^{[l]})
\]
其中\(A^{[0]}=X;X={x_1,x_2,x_3}\)
反向传播公式:
认真看这个图:

Deeplearning.ai课程笔记-神经网络和深度学习的更多相关文章
- deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面 听课笔记
1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...
- deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...
- 【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录
吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...
- Deeplearning.ai课程笔记--汇总
从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...
- [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈
觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...
- Deeplearning.ai课程笔记-改善深层神经网络
目录 一. 改善过拟合问题 Bias/Variance 正则化Regularization 1. L2 regularization 2. Dropout正则化 其他方法 1. 数据变形 2. Ear ...
- [DeeplearningAI笔记]神经网络与深度学习2.11_2.16神经网络基础(向量化)
觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.11向量化 向量化是消除代码中显示for循环语句的艺术,在训练大数据集时,深度学习算法才变得高效,所以代码运行的非常快十分重要.所以在深度学 ...
- Deeplearning.ai课程笔记-结构化机器学习项目
目录 一. 正交化 二. 指标 1. 单一数字评估指标 2. 优化指标.满足指标 三. 训练集.验证集.测试集 1. 数据集划分 2. 验证集.测试集分布 3. 验证集.测试集大小 四. 比较人类表现 ...
- ng-深度学习-课程笔记-1: 介绍深度学习(Week1)
1 什么是神经网络( What is a neural network ) 深度学习一般是指非常非常大的神经网络,那什么是神经网络呢? 以房子价格预测为例,现在你有6个房子(样本数量),你知道房子的大 ...
随机推荐
- TCP/IP详解,卷1:协议--第6章 ICMP:Internet控制报文协议
引言 I C M P经常被认为是 I P层的一个组成部分.它传递差错报文以及其他需要注意的信息. I C M P报文通常被I P层或更高层协议( T C P或U D P)使用.一些I C M P报文把 ...
- 只要没有给String[]数组new 空间,那么他就只是一个引用
public class Test1 { @Test public void test(){ String[] values = {"good", "morning&qu ...
- Codeforces Round #620 (Div. 2)D(LIS,构造)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; ]; int main(){ io ...
- Iris请求方式和数据返回类型
1. Iris起服务 package main import "github.com/kataras/iris" func main() { //1.创建app结构体对象 app ...
- 事务:Transaction详解
1.事务概念: 一组sql语句操作单元,组内所有SQL语句完成一个业务,如果整组成功:意味着全部SQL都实现:如果其中任何一个失败,意味着整个操作都失败.失败,意味着整个过程都是没有意义的.应该是数据 ...
- 【Python】 数字求和
# 用户输入数字 num1 = input('输入第一个数字:') num2 = input('输入第二个数字:') # 求和 sum = float(num1) + float(num2) # 显示 ...
- linux 安装tar 命令
yum install -y tar 查看版本 tar --version
- Java正则表达式提取String字符串中的IP地址
/** * 正则提前字符串中的IP地址 * @param ipString * @return */ public static List<String> getIps(String ip ...
- IDEA格式化代码快捷键失灵原因
网易云音乐快捷键与IDEA快捷键冲突了!!!!!!!坑爹
- 编译和链接(lib和dll区别)(转载)
1.头文件并不参加链接和编译.编译器第一步要做的就是简单的把头文件在包含它的源文件中展开.不知你是否能理解这句话.也就是头文件里面有什么内容,通通把它移到包含这个头文件的源文件里.(我觉得这是个很重要 ...
