浅层神经网络

目录

1、神经网络表示

2、计算神经网络的输出

3、多个样本的向量化

4、激活函数

5、激活函数的导数

6、神经网络的梯度下降法


1、神经网络表示

浅层神经网络_第1张图片

  • 输入层:有输入特征123
  • 隐藏层:四个结点,表示你无法在训练集中看到他们,使用了sigmoid 激活函数
  • 输出层:它负责产生预测值,使用了sigmoid 激活函数
  • 符号惯例:其中,表示输入特征,表示每个神经元的输出,表示特征的权重,上标表示神经网络的层数(隐藏层为 1),下标表示该层的第几个神经元
  • ​​​​​​​注意 :计算网络的层数时,输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,阅读研究论文中,人们将这个神经网络称为一个两层的神经网络,不将输入层看作一个标准的

2、计算神经网络的输出

浅层神经网络_第2张图片

  • 小圆圈代表了计算的两个步骤。
  • 第一步,计算1 [1] , 1 [1] = 1 [1] + 1 [1]。
  • 第二步,通过激活函数计算1 [1] , 1 [1] = (1 [1] )​​​​​​​
  • 隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到2​​​​​[1]3[1]4 [1]

浅层神经网络_第3张图片

  •  向量化计算:如果你执行神经网络的程序,用 for 循环来做这些看起来真的很低效

浅层神经网络_第4张图片

浅层神经网络_第5张图片

  • 对于神经网络的第一层,给予一个输入 ,得到 [1] 可以表示为 [0] 。通过相似的衍生
    你会发现,后一层的表示同样可以写成类似的形式,得到 [2],^ = [2](隐藏层和输出层都使用了sigmoid 激活函数)。具体过程见公式

浅层神经网络_第6张图片

  •  如上图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就
    相当于一个逻辑回归的计算单元。当你有一个包含一层隐藏层的神经网络,你需要去实现以
    计算得到输出的是右边的四个等式,并且可以看成是一个向量化的计算过程,计算出隐藏层
    的四个逻辑回归单元和整个隐藏层的输出结果,如果编程实现需要的也只是这四行代码。

3、多个样本的向量化

浅层神经网络_第7张图片

  • [2]()()是指第个训练样本而[2]是指第二层

浅层神经网络_第8张图片

  •  ​​​​​​​证明:[1] 是一个矩阵,(1) , (2) , (3)都是列向量,矩阵乘以列向量得到列向量,下面

将它们用图形直观的表示出来​​​​​​​

浅层神经网络_第9张图片

  •  所以从图中可以看出,当加入更多样本时,只需向矩阵中加入更多列

4、激活函数

  • 在前面的神经网路的前向传播中, [1] = ( [1] ) [2] = ( [2] )这两步会使用到 sigmoid 函数。 sigmoid 函数在这里被称为激活函数,但是,有时其他的激活函数效果会更好

  • ( [1] ) = ℎ( [1] ) 效果总是优于 sigmoid 函数。因为函数值域在-1 和+1 的激活函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh 函数代替 sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5
  • 但有一个例外:在二分类的问题中,对于输出层,因为的值是 0 或 1,所以想让^的数值介于 0 和 1 之间,而不是在-1 和+1 之间。所以需要使用 sigmoid 激活函数
  • ​​​​​​​对隐藏层使用 tanh 激活函数,输出层使用 sigmoid 函数
  • ​​​​​​​sigmoid 函数和 tanh 函数两者共同的缺点是,在特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度

浅层神经网络_第10张图片

  •  选择激活函数的经验法则:
    如果输出是 0 1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单
    元都选择 Relu 函数。
    这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会
    使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当 是负值的
    时候,导数等于 0
    这里也有另一个版本的 Relu 被称为 Leaky Relu
    是负值时,这个函数的值不是等于 0 ,而是轻微的倾斜。
    尽管在实际中 Leaky ReLu 使用的并不多,但是这个函数通常比 Relu 激活函数效果要好

浅层神经网络_第11张图片

  • sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
    tanh 激活函数: tanh 是非常优秀的,几乎适合所有场合。
    ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu 或者
    Leaky ReLu
  • why:在神经网络中使用非线性激活函数的主要原因是,如果不使用非线性激活函数,多层神经网络就相当于单层线性模型,而无法捕捉复杂的非线性关系。因此,通过使用非线性激活函数,神经网络可以学习更加复杂和抽象的模式,从而提高其预测和分类能力。
  • 此外,非线性激活函数还可以解决梯度消失的问题。在深层神经网络中,当使用线性激活函数时,每一层的输出都是前一层输出的线性组合,这种线性组合对梯度的贡献非常小,导致梯度在反向传播时逐渐消失。而非线性激活函数可以引入非线性变换,增加梯度的大小,从而避免梯度消失问题。 因此,使用非线性激活函数是神经网络能够充分发挥其优势的重要因素之一
  • 因此,不能在隐藏层用线性激活函数,可以用 ReLU 或者 tanh 或者 leaky ReLU 者其他的非线性激活函数,唯一可以用线性激活函数的通常就是输出层

5、激活函数的导数

  • 在神经网络中使用反向传播的时候,你真的需要计算激活函数的斜率或者导数。针对以
    下四种激活,求其导数如下:
1 sigmoid activation function ​​​​​​​

浅层神经网络_第12张图片

浅层神经网络_第13张图片

 2) Tanh activation function

浅层神经网络_第14张图片

 3Rectified Linear Unit (ReLU)

浅层神经网络_第15张图片

 4Leaky linear unit (Leaky ReLU)

浅层神经网络_第16张图片

6、神经网络的梯度下降法

  • 单隐层神经网络会有[1], [1] [2] [2] 这些参数,还有个 表示输入特征的个
    数, [1] 表示隐藏单元个数, [2]表示输出单元个数。
  • 矩阵 [1] 的维度就是 ( [1] , [0]), [1]就是 [1] 维向量,可以写成( [1] , 1) ,就是一个的列
    向量。 矩阵 [2] 的维度就是( [2] , [1] ), [2]的维度就是( [2] , 1) 维度​​​​​​​
  • ​​​​​​​​​​​​​​Cost function

  •  训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初
    始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:

浅层神经网络_第17张图片

  •  正向传播方程如下:

浅层神经网络_第18张图片

  •  反向传播方程如下: 这些都是针对所有样本进行过向量化,是1 × 的矩阵;这里 np.sum 是 python numpy 命令,axis=1 表示水平相加求和,keepdims 是防止python 输出那些古怪的秩数(, ),加上这个确保阵矩阵 [2]这个向量输出的维度为(, 1)这样标准的形式。

浅层神经网络_第19张图片

  •  开始计算反向传播时,需要计算隐藏层函数的导数,输出在使用 sigmoid 函数进行二元分类。这里是进行逐个元素乘积,因为[2] [2]和( [1] )这两个都为( [1] , )矩阵

你可能感兴趣的:(深度学习,神经网络)