DNN与感知机:
又称深度神经网络,有时也叫做多层感知机(Multi-Layer perceptron,MLP)。跟之前学习的感知器一样,在此基础上增加了隐含层的层数,使网络的深度增加。
层与层之间是全连接的,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。拥有一个线性关系:
输入z位来自各节点的输入加权和,w是权值列向量,x是输入列向量
激活函数
:使用非线性激活函数,我们便能够从输入输出之间生成非线性映射。
我们需要这样做,以便在网络中向后推进以计算相对于权重的误差(丢失)梯度时执行反向优化策略,然后相应地使用梯度下降或任何其他优化技术优化权重以减少误差。Sigmoid激活函数:它的值区间在0和1之间,是一个S形曲线
双曲正切函数Tanh:它的输出是以0中心的,因为它的值区间在-1到1之间
这两个函数会出现梯度消失的问题:
当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。
梯度消失:当初始化的网络权值|w|小于1,当网络的层数增多时,小于0的值不断相乘,导致梯度消失
梯度爆炸:当权值w过大时,导致求导后的激活函数与权值乘积大于1了,最后大于1的值不断相乘,就会产生梯度爆炸。
梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。
解决方法:可以使用第一种ReLu激活函数,他可以让函数导数为1
优化:梯度下降
**过程:**每次计算参数在当前的梯度,让参数向着梯度的反方向前进一段,不断重复,直到梯度接近0为止;目标是使参数达到损失函数的最低值
损失函数:loss function
梯度下降法的计算过程就是沿梯度下降的方向求解极小值
在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
解释:
1、Θº是初始值,可以理解为当前的位置,Θ¹是下一次的位置,经过一次计算后,公式更新便得到新的值
2、α在梯度下降算法中被称作为学习率或者步长,来控制每一步走的距离,数值要适当,不能太大,否则会错过最低点,太小会到不了最低点
3、梯度前面要加一个负号,表示反方向,得到下降最快的位置。如果不加负号,就是梯度上升
前向传播(Forward Propagation)
前向传播就是从input,经过一层层的layer,不断计算每一层的z和a,最后得到输出y^ 的过程,计算出了y^,就可以根据它和真实值y的差别来计算损失(loss)。
反向传播(Backward Propagation)
反向传播就是根据损失函数L(y^,y)来反方向地计算每一层的z、a、w、b的偏导数(梯度),从而更新参数。
每经过一次前向传播和反向传播之后,参数就更新一次,然后用新的参数再次循环上面的过程。这就是神经网络训练的整个过程。
模型
这是两层神经网络,输入和输出不算层
记号:
z是x和w、b线性运算的结果,z=wx+b;
a是z的激活值;
下标的1,2,3,4代表该层的第i个神经元(unit);
上标的[1],[2]等代表当前是第几层。
y^代表模型的输出,y才是真实值,也就是标签
上图中的x1,x2,x3,x4不是代表4个样本!
而是一个样本的四个特征(4个维度的值)!
你如果有m个样本,代表要把上图的过程重复m次: