- 日常感谢Andrew Ng的视频 !
- 大部分截图来自吴恩达的课件
01-什么是神经网络
- 单一神经网络
以预测房价来举例,在一个x轴表示房子面积,y轴表示房价的坐标图中,标示出6所房屋的信息(如图红×所示),然后通过线性拟合的方式作出一条斜线,因为房价不可能为负,所以前半段数据是为零的。整体就能得出蓝线所示的线性方程。我们称这个方程为"ReLU方程"(ReLU:Rectified Linear Unit修正线性单元)。
我们可以把房屋的特征加上上面拟合得到的函数看成是一个非常简单的神经网络。如下图所示:
输入x是房子面积,输出y是房价,中间的“神经元”圆圈是ReLU方程。
- 多元神经网络
可以把上面的单一神经元看成是单独的一块乐高积木,我们可以用这块积木堆叠出复杂的多元神经网络。接着上面预测房价的例子,我们知道影响房价的因素不单单是房子面积,还有房间数目,邮编,区域的富裕程度等各种因素。房子面积和房间数目会影响家庭规模,邮编又影响着步行化的程度,邮编和区域的富裕程度影响着学校的质量。而家庭的规模,步行化的程度和学校的质量都将影响房价,结合这些特征就能预测出房价。这样就构成如下图的多元神经网络:
图中的每个小圆圈都可以看成是ReLU函数。从图中可以看出家庭规模,步行化的程度和学校的质量处于中间层。神经网络神奇的一点是:当你实现它之后,可以把中间层类似的看成黑盒,这样我们不用去管中间层是什么,中间的训练集有多大,只要从左边输入多个变量x,右边就会得到相应的输出y。所有的中间过程神经网络都会自动完成。
实际实现的多元神经网络如下图所示:
也就是说,当你给出输入,神经网络的工作就是预测出对应的输出。
要注意,处于神经网络中间层的各个元素被称为隐藏单元,它们也可被定义成其他影响房价的因素,这可以由我们自己来定义,而且也不单单由其中两项输入的内容所决定。所以,中间层和输入层的连接数是很高的。因为每个隐藏单元都和输入层的各个元素产生关联。
还值得注意的是,在神经网络中,你喂给它足够多的关于x,y的数据,给到足够多的训练样本,神经网络就非常擅长于计算从x到y的精准映射函数。
02-用神经网络来进行监督学习
- 用神经网络进行监督学习的例子
在监督学习中,我们输入一个x,就能得到对应的输出y。如第一节课提到的预测房价的例子:输入房子的各种特征,我们就能预测到输出的房价。还有在线广告也是个很好的例子:通过呈现的广告以及用户的信息等等,可以判断用户是否会点击广告。还有其他的图像识别,语音识别,机器翻译和自动驾驶等等应用。其中房价预测和在线广告的用的是标准的神经网络(Standard NN);而图像识别用的是卷积神经网络(CNN);语音识别和机器翻译是一维序列数据,它们用的是循环神经网络(RNN);最后的无人驾驶比较复杂,用的是混合的神经网络。
-
神经网络的类型示例
从左往右分别是:标准神经网络,卷积神经网络和循环神经网络
-
结构化数据与非结构化数据
1.结构化数据:就是数据库数据 ,它具有明确的定义的,例如:价格,年龄等等
2.非结构化数据:音频,图像,文本等这类信息
03-为什么深度学习会兴起
1).一张图表明深度学习/神经网络兴起的原因--规模推动深度学习发展
注意要到达图中黑点所示的效果要做到以下两点:
1) 能够训练出规模足够大的神经网络
2) 拥有大量的标签数据
2).规模推动深度学习发展的具体原因
- Data :处于数字化信息时代,拥有海量的数据
- Computation:计算能力在不断的增长
- Algorithms:算法在不断创新,算法的创新也在推动着计算能力的增长
3).训练神经网络的过程
神经网络的训练过程就是上图所示的循环过程,如果训练十分庞大的数据的话会花费很长的时间。然而更快的计算能力能够加快迭代和证明新的算法。
04-二分分类
-
二分分类
在二元分类问题中,结果是离散值输出的。
例如:在识别一张图片中有无猫的问题中,输入一张图片,有猫的情况,输出结果是1;无猫的情况,输出结果是0。 -
特征向量表示
一张图像是以三个独立的矩阵存储在计算机中的,对应于图像的红色,绿色和蓝色通道。三个矩阵与图像大小相同,例如,猫的图像的分辨率是64像素×64像素,三个矩阵(RGB)分别是64×64。
单元格中的值表示将用于创建n维数的特征向量的像素强度。在模式识别和机器学习中,特征向量代表一个对象,在这种情况下,是猫或不是猫。要创建一个特征向量,像素强度值将被“展开”或“重塑”每种颜色。输入特征向量的维数为nx= 64×64×3 = 12288,如下图所示。
特征向量.png
05-Logistic Regression
-
Logistic 回归
output.png
Logistic 回归是一种学习算法,用于监督学习问题。其输出范围为[0,1],所以最主要的被应用于二分分类的问题。逻辑回归的目标是实现其预测与训练数据之间的误差最小化。
给定输入向量 x,想要 yhat = P(y=1|x),0<=yhat<=1
其中参数:w(权重),b
输出:
输出的 yhat是 sigmoid 函数:
sigmoid.png
从图中可以看出:当输入 z 很大时,函数值趋近于 1;但 z 很小时,函数值趋近于 0;当 z 等于 0 时,函数值为 0.5。 -
Logistic回归:Cost Function(成本函数)
给定输入x,我们需要输出预测值yhat近似的等于期望值y。
为了训练参数w和b,我们需要定义一个成本函数(Cost Function)。
对于单样本来说,有Loss(error)Function(损失函数):
损失函数计算预测值(y(i)hat)与期望值(y(i))之间的差异。
对于全样本来说,有Cost Function(成本函数):
成本函数是整个训练集的损失函数的平均值。我们将找到能够最小化总体成本函数的参数w和参数b
-
Logistic 回归损失函数的解释
为什么 Logistic 回归的损失函数是 - ylogŷ + (1-y)log(1-ŷ) 这样形式的,而不是选择均方差作为损失函数呢?Andrew 没有从极大似然估计的概念开始高深的解释,而是直接给出公式,浅显又简单的讲解缘由。主要解释内容如下:
重新回顾:ŷ(i) = σ(WTx(i) + b),σ(z(i)) = 1/(1+e-z);并约定 ŷ = P(y = 1|x)。
因为真实值 y 只有两个取值:1 或 0。
所以:当 y = 1 时,P(y|x) = ŷ;当 y = 0 时,P(y|x) = 1-ŷ
将上面两个式子整合就可以得到这样的公式: P(y|x) = ŷy(1-ŷ)1-y,将 y = 1 和 y = 0 代入公式计算结果也是符合条件的。
因为 log 函数是严格单调递增的函数。最大化 log(P(y|x)) 等价于最大化 log(ŷy(1-ŷ)1-y) 再简化成 ylog(ŷ) + (1-y)log(1-ŷ),它是我们前面提到的损失函数的负值。添加负号的原因是,在训练学习算法的时候,我们希望输出概率最大 ,然而在 Logistic 回归中,我们需要最小化损失函数。所以最小化损失函数,就是最大化 log(P(y|x)) 。
06-Gradient Desent 梯度下降法
-
梯度下降法
由上面所说,要最小化成本函数J(w,b),就需要找到参数w,b。如下图所示要找到全局最小值所对应的参数w,b。
首先,忽略参数b:对J(w)求导,当导数为0时,对应的w就是要找的参数w。然后重复执行w:=w-α(dJ(w)/dw),α为learning rate(学习速率)。同理忽略w的情况。
于是对于J(w,b)就有:
(注意:当参数有2个或2个以上就是求偏导) -
单个样本的梯度下降
单样本梯度下降.png -
m个样本梯度下降
m个样本的梯度下降.png
07-向量化
向量化的原因就是避免使用过多的for循环,以造成程序运行的缓慢。毕竟一般来说,我们都是要训练很庞大的数据的。
-
向量化例子1
-
向量化例子2
-
向量化Logistic回归
向量化logistic回归的梯度输出.png
08-浅层神经网络
-
浅层神经网络的表示
浅层神经网络也称为单隐层神经网络,它的结构如下图表示:
单隐层神经网络
如图所示,x1,x2,x3这一层是输入层a[0],上标用[0]来表示;中间的一层是隐藏层a[1],上标用[1]来表示;最后一层是输出层a[2],上标用[2]来表示,所以这个神经网络也称为2层神经网络。 -
浅层神经网络的输出
如上图左边所示,我们可以把隐藏层的每一个神经元分割成两半,左半边计算z=w.Tx+b,右半边计算a=σ(z)。
这样我们就能够计算得到一组z[1]和a[1]:
然后计算z[2]=w[2].T*a[1]+b[2]和a[2]=σ(z[2]),最后输出yhat=a[2]=σ(z[2])
整个计算流程如下所示:
整个计算流程
09-激活函数
神经网络中使用的激活函数不只有sigmoid函数(σ(z)),还有很多其他激活函数,我们用g(z)来表示。整个神经网络的计算就如下图所示:
常用的激活函数:
为什么要使用非线性的激活函数:
因为可以验证隐藏层用线性方程的话会与没有隐藏层的效果是一样的,使用线性方程只是一直重复计算线性方程。
10-浅层神经网络的梯度下降法
-
梯度下降的总结
11-随机初始化
如果神经网络中的w,b全都初始化为0,那么多层隐藏就没有意义了。
所以我们要对w,b进行随机初始化。操作如下:
如上图,为什么是使用0.01,而不是100?
因为z=wx+b,对于tanh函数和sigmoid函数来说(图中的函数图形),当w增大时,z也会增大,z越来越大时,函数就会处于平滑区,梯度几乎不变,这样学习就会变得缓慢。
12-深层神经网络
- 深层神经网络的表示
有多个隐藏层的神经网络称为深层神经网络,如下图所示:
神层神经网络如图所示,包含输入层(x1,x2,x3)--layer"0";五个隐藏层--layer"1",layer"2",layer"3",layer"4",layer"5"和一个输出层--layer"6"
所以有这些表示:
这里写图片描述
-
深层网络中的前向传播
前向传播
13-核对深层神经网络的矩阵核数
-
技巧:
矩阵的维数
14-为什么用深层表示?
深度表示的直观理解如上图所示,当检测一张人脸图片时,神经网络的第一层会探测一些边界的特征;再下一层神经网络就会探测出人的眼睛,眉毛,嘴巴等特征;随着深度的增加,就能够识别出局部或全部的人脸。
或者当对一段音频进行可视化的时候,第一层网络会试着探测出低层次音频波形的一些特征;再下一层网络就能够识别出一些音节;随着深度的增加就能够识别一些单词甚至能够识别整个句子。
还有对于为什么使用深度神经网络的解释是来自电路理论的:
非正式的:有一些方程可以用一个“小”(隐藏单元比较少)的L层深层神经网络进行计算,较浅的网络则需要指数级更多的隐藏单元来进行计算。
15-搭建深层神经网络块
-
L层的前向传播和反向传播
于是针对L层就有这样的神经网络块:
-
整个网络的神经网络块
16-深层神经网络的前向传播和反向传播
-
前向传播
前向传播 -
反向传播
反向传播
17-超参数VS参数
神经网络中的参数有w[1],b[1],w[2],b[2] ·····而学习速率α,隐藏层的数量,隐藏单元的数量等等这些都控制着最终的w,b的值,这些决定参数的参数称之为超参数。
在实际操作中,对于超参数的选择,我们要经过以下的循环操作,然后根据最终的实验结果的好坏,选取合适的超参数。
网友评论