神经网络和深度学习
课程是吴恩达的深度学习专题,分为五个部分:
- 神经网络和深度学习
- 改善深层神经网络:超参数调试、正则化以及优化
- 结构化机器学习项目
- 卷积神经网络
- 序列模型
我会以这五个部分为题记五份笔记,如果有人在看,欢迎大家指出错误,一起讨论。
网易课程的链接:https://study.163.com/my#/smarts
To be continue...
第一周
What you’ll learn
Courses in this sequence (Specialization):
- Neural Networks and Deep Learning
- Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
- Structuring your Machine Learning project
- Convolutional Neural Networks
- Natural Language Processing: Building sequence models
1.2 什么是神经网络?
如果你有6个房子价格的数据,会想到 linear regression 同时价格不会为负,所以得到了蓝色函数,拟合的挺好,这里的蓝色函数可以看成一个非常简单的神经网络。
这个神经网路输入房子的大小(size)通过你的神经元(neuron)输出了价格(price)。
在深度学习中,会经常看见这个函数,从水平线开始,然后上升,叫做 ReLU函数 (Rectified linear unit,修正线性单元)修正认为是取不小于0的值
大一些的神经网络就是由这些神经元堆积起来。
对于同样的问题,我们考虑更多的条件:
1.由房屋面积大小和卧室可以推断出家庭大小
2.由邮编可以推断出步行程度(walkability),即是否可以步行去超市,
步行去学校
3.由邮编和富有程度可以推断出附近学校的质量
4.由家庭大小加步行便利程度加附近学校质量可以推断出房屋的价格
这就是一个大一些的神经网络,中间的小圆圈就是一个个的 函数,有可能是 ReLU 函数,也有可能是其他的线性或者不那么线性的函数。
中间的圆圈(一共四个)叫做 隐藏单元(hidden units) 每个隐藏单元的输入都同时来源于四个输入,我们会将输入层和隐藏单元全连接,并不告诉神经网络个别输入只影响部分隐藏单元,而是让神经网络自己去决定。
1.3用神经网络进行无监督学习
Supervised Learning
在房屋预测和在线广告用的是标准神经网络(standard NN)
在图像领域,通常使用的是CNN
对于序列问题经常使用RNN (recurrent neural network)
语言,也是序列问题,要用到更复杂的RNNs
对于自动驾驶,雷达信息,面对更复杂的信息,用到混合神经网络
后续讲解图片,并有实现。
对于监督学习 数据的分类 ,分为 结构化数据 和 非结构化数据
结构化数据(Structured Data) 指的是数据库中的数据,可以存储在数据库中。
非结构化数据(Unstructured Data) 指的是类似于语音数据、图像数据、文本数据等,通常处理所针对的是一个像素、文本中的一个单词,相比结构化的数据,更难让计算机理解。
这里的应用是可以结合的,可以在神经网络中同时应用结构话数据和非结构化数据。
1.4为什么深度学习最近几年才流行起来?
深度学习已经进行了20多年来了,为什么是在20年后的今天才得到巨大的发展?
横坐标代表数据的大小(指的是带标签的数据,(x,y)x是数据,y是该数据的标签),纵坐标表示算法的表现。
在本堂课中都会用m表示数据集的大小、样本的数量
红线代表传统学习算法(SVM,logistic regression等等),这些算法会在数据达到一定规模的时候进入平台期,表现并没有提升很多甚至不会再提升了,无法处理大规模数据。
如果使用一个小型神经网络,那么得到的是黄线
中型神经网络是蓝线
绿线表示大型神经网络,表现的非常好。
此时的神经网络表现好的原因有两点,也只有在这两点的支持下,才会有如此的表现:
1.我们在一个数据爆炸的时代,科技进步带来的数据量可以支撑神经网络
2.我们的神经网络足够大,意味着更多的神经元,更多层
所以现在,如果想要更好的结果,要么训练一个更大的神经网络,要么投入更多的数据,但这也只能在一定程度上起作用(数据量增多和神经网络变大都需要更多的计算时间)。
数据的发展,cpu、Gpu的发展提高了计算力,新算法的出现,推动了深度学习的进程。
算法的更新,也是为了让神经网络运行的更快。
一个较为突破性的一点就是从sigmoid函数变成了ReLU函数,sigmoid函数的一个缺点就是在这两点(图中两个箭头所指)梯度会接近于0,学习会变得很慢,因为此时参数变化很慢。通过改变activation function(激活函数)为ReLU函数,对于所有大于0的输入,梯度输出都是1 。所以通过更换函数梯度下降会运行的更快。这是简单的算法创新的例子。
第二周 神经网络基础
2.1 二分分类
logistic regression是一个用于二分分类的算法
如果有一张猫的图片作为输入,输出是1--是猫,2--不是猫
图片都是由RGB三通道组成的,所以要表示一张图片可以用三个颜色的灰度值来表示,我们把这些像素亮度值放入一个特征向量(feature vector)X中,从红色开始255,231,42...(绿色)255,134.....(蓝色)255,134,93....X里面存着所有的像素值。
n表示向量X的维度,如果图片是6464的那么n的值就是6464*3=12288,所以nx=12288=n(一般写作小写n)
所以在二元分类问题中,我们是要训练出一个分类器,输入X,然后预测出标签y。
这些是以后要用的符号标记
(x,y) 表示一个单独的样本,x∈Rnx x是nx维的特征向量,标签y∈{0,1}
训练集是由m个训练样本构成,第m个训练样本表示为:(x(m),y(m))
m=mtrain 表示训练集大小,同理m=mtest 表示测试集大小
大写X,定义为把输入的特征向量x(1)放第一列....所以X有m列,高度是nx
大写Y,定义为标签y的矩阵,如上图,所以Y是一个1*m矩阵
python中
X.shape(nx,m) #用来输出矩阵的为维度,即(nx,m) Y.shape(1,m) #1*m矩阵
2.2 logistic regression
logistic regression是一个当输出y是0或1时用的用于监督学习的学习算法,用于二元分类问题
给定x,y^为当x的情况下,y=1的概率,其实就是我们想要的过程。
logistic regression有两个参数,w和b
w也是一个n维向量,b是一个实数
那么给定输入x和两个参数w和b,怎么才能得出y^?
如果使用上述线性函数,对线性回归来说可以,但是对于二元分类来说是没有用的,因为你希望y^的概率是在0到1之间的,而线性函数无法满足这个要求。
在logistic regression里我们用sigmoid函数
sigmoid函数:
z是一个实数
当z非常大时,输出趋近于1;同理,z非常小时,输出趋近于0
z = wT + b
在这里,我们的目标是学习w和b的值,即找到合适的w和b的值