课程来源:吴恩达 深度学习课程 《神经网络基础》
笔记整理:王小草
时间:2018年5月15日


1.神经网络概览

回顾逻辑回归的结构:
【神经网络基础】第二课--浅层神经网络
圆圈节点内的计算如下,先计算线性z,再过一个sigmoid函数得到a,然后计算损失函数,进行梯度下降法求最优参数。
【神经网络基础】第二课--浅层神经网络

推广到神经网络,每个圆圈节点都代表以上z,a两步计算(第一层用1表示,第而层用2表示)
【神经网络基础】第二课--浅层神经网络
相当于如下计算过程:
【神经网络基础】第二课--浅层神经网络

同样使用反向传播可以计算出梯度,并寻找最优参数

2.神经网络表示

【神经网络基础】第二课--浅层神经网络

以上神经网络,第一层是输入层,第二层是隐藏层,第三层是输出层。因此这是一个两层的神经网络(一般我们不算输入层)。

输入层:
用a[i]表示第i层的计算结果,也就是第i+1层的输入。因此输入层传递给隐藏层的数据,就是输入x本身,即a[0] = x

隐藏层:
第一个隐藏层的计算结果用a[1]表示,由于隐藏层中有4个节点(神经元),每个节点的计算结果可以用a1j表示:
【神经网络基础】第二课--浅层神经网络
a[1]可以表示成:
【神经网络基础】第二课--浅层神经网络

输出层:
输出层表示为a[2],即为最终的输出y^

3.神经网络输出

神经网络到底最后会计算出什么鬼?

每个神经元的计算如下:
【神经网络基础】第二课--浅层神经网络

隐藏层计算:
那么整个神经网络其实就是在重复以上过程的叠加。首先看隐藏层的四个节点,每个节点都先计算z,a:
【神经网络基础】第二课--浅层神经网络
将这四个等式用向量表示:
w用向量表示如下,由于前一层是3维,本层是4维,因此w矩阵的大小是(4,3)
【神经网络基础】第二课--浅层神经网络

【神经网络基础】第二课--浅层神经网络
【神经网络基础】第二课--浅层神经网络

简写之后如下:
【神经网络基础】第二课--浅层神经网络

输出层计算:
将上一层的输出作为本层的输入,其实就是逻辑回归的过程。
【神经网络基础】第二课--浅层神经网络

4.多个样本向量化

上文是单个样本的向量化计算,下面推广到多个样本的向量计算,从而避免使用for循环。

对于一个样本

若有m个样本,则有m个输入x(i),m个输出y(i):
【神经网络基础】第二课--浅层神经网络
a[l](i)表示第l层的第i个样本。

若使用for循环遍历每个样本,则会有这般光景:
【神经网络基础】第二课--浅层神经网络

若使用向量化计算,则又是这般天地:
【神经网络基础】第二课--浅层神经网络

其中X如下:每一列为一个样本,每个样本有n维特征,矩阵大小为n*m,则:
【神经网络基础】第二课--浅层神经网络

Z1如下,每一列荏苒是对应一个样本
【神经网络基础】第二课--浅层神经网络

A1如下,每一列仍然是对应一个样本,是每个样本的**值,每一列的元素个数于改隐藏层的神经元个数一致:
【神经网络基础】第二课--浅层神经网络

5.向量化实现的解释

解释向量计算的过程,假设有如下3个样本
【神经网络基础】第二课--浅层神经网络

则过程如下:
【神经网络基础】第二课--浅层神经网络

W1表示第一个隐藏层的权重矩阵,有n行N1列,n是对应样本x的特征维度,N1代表第一个隐藏层的神经元个数
将W1与X相乘之后,会得到m*k大小的Z矩阵,每一列对应一个样本,每一列的元素个数对应神经元的个数

为何要一列为一个样本呢?
因为这样W于X两个矩阵相乘之后得到的z也是一列为一个样本,这样保证里X于Z的对齐。

6.**函数

6.1 sigmoid函数

【神经网络基础】第二课--浅层神经网络
sigmoid函数在神经网络中一般不太用,一般用于二分类中,因为而分类需要得到0/1类,而sigmoid函数刚好是在[0,1]之间

6.2 tanh函数

【神经网络基础】第二课--浅层神经网络
tanh优于sigmoid函数,因为其均值为0,实现了数据中心化的效果。

若神经网络是用于二分类的, 则为了实现最后输出[0,1],可以在最后一层用sigmoid函数,前面用其他**函数。可见,在同一个网络中不同层可根据不同需求使用不同的**函数。

但无论是sigmoid函数还是tanh函数都有一个致命的缺点,当输入z无穷大时, a回无限接近于0/1或-1/1, 即其鞋履接近0,在梯度下降时回拖慢梯度下降的效率,因此实践中一般回使用更受欢迎的Relu函数

6.3 Relu函数

【神经网络基础】第二课--浅层神经网络

当z<=0时, a=0。若经过这个**函数出现了很多0,那也没事,可以自己给这些0赋其他值。若做二分类,则最后一层用sigmoid函数,其他层可以用Relu函数。

6.4 Leaky Relu函数

【神经网络基础】第二课--浅层神经网络
Leaky Relu解决了Relu多0的问题,但实际中用Relu更多。但无论是Leaky Relu还是Relu都比sigmoid函数要快很多,因为没有鞋履接近于0的情况。

6.5 为何需要使用非线性函数

若使用线性函数作为**函数,则神经网络的计算如下:
【神经网络基础】第二课--浅层神经网络

可见经过线性**函数,无论神经网络设多少层,都是在计算线性函数而已。
但线性函数也不是一无是处,比如在做线性回归时可以使用线性**函数,再比如当腰预测一个实数时,可在神经网络的最后一层设置线性**函数。

7.**函数的导数

7.1 sigmoid的导数

函数:
【神经网络基础】第二课--浅层神经网络

导数:
【神经网络基础】第二课--浅层神经网络

7.2 tanh的导数

函数:
【神经网络基础】第二课--浅层神经网络

导数:
【神经网络基础】第二课--浅层神经网络

7.3 ReLU和Leaky RelU的导数

函数:
【神经网络基础】第二课--浅层神经网络

导数:
ReLu导数:
【神经网络基础】第二课--浅层神经网络

Leaky RelU导数:
【神经网络基础】第二课--浅层神经网络

8.神经网络的梯度下降法

以一个2层的神经网络来做示范计算梯度下降

首先,明确参数:
【神经网络基础】第二课--浅层神经网络

接着,明确成本函数:
【神经网络基础】第二课--浅层神经网络

然后,可以进行梯度下降的迭代了,重复以下过程
(1)第一步,先前向计算出每个样本的预测值y^(1)…y^(m)
(2)根据成本函数,计算每个参数的导数:【神经网络基础】第二课--浅层神经网络
(3)根据学习率更新参数:
【神经网络基础】第二课--浅层神经网络

将以上过程用公式的形式表示:
(1)第一步,前向计算没个样本点预测值:
【神经网络基础】第二课--浅层神经网络

(2)反向传播:
【神经网络基础】第二课--浅层神经网络

9.直观理解反向传播

9.1 逻辑回归反向传播

回顾逻辑回归:
【神经网络基础】第二课--浅层神经网络

逻辑回归的反向传播过程如下:
先计算a的导数da:
【神经网络基础】第二课--浅层神经网络
再计算z的导数dz:
【神经网络基础】第二课--浅层神经网络
从而计算w与b的倒数:
【神经网络基础】第二课--浅层神经网络

9.2 神经网络反向传播

神经网络前向计算如下:
【神经网络基础】第二课--浅层神经网络

同理的反向传播
先计算da2,然后一步一步往回退,求各参数的导数:
【神经网络基础】第二课--浅层神经网络

用向量来表示(大写字母表示vector):
【神经网络基础】第二课--浅层神经网络

10.随机初始化

权重的初始化也很重要,影响模型接下去的效果。

假如权重初始化得太小,比如都接近于0:
【神经网络基础】第二课--浅层神经网络
则同一层中的神经元的值都会相等,从而反向传播计算的梯度也会相等。
【神经网络基础】第二课--浅层神经网络
但其实我们更希望每个神经元能学习不同的特征,有不同的值。

但权重也不能太大,若w大,则z大,则经过sigmoid或者tanh之后,都接近于1/0或1/-1,再反向传播时会出现导数为0.但若不适用sigmoid或者tanh,则w大一点也无所谓的。

相关文章:

  • 2021-06-07
  • 2022-12-23
  • 2021-08-29
  • 2021-05-05
  • 2021-05-24
  • 2021-12-11
  • 2021-10-06
  • 2021-05-05
猜你喜欢
  • 2022-01-23
  • 2021-04-29
  • 2021-06-17
相关资源
相似解决方案