1. 神经网络概览

首先,我们用x表示输入特征,还有参数W和b。x上标(i)表示第i个训练样本,上标方括号1 2表示不同的层 这是网络的第一层 这是第二层。

在这里插入图片描述

2. 神经网络表示

下面我们看一下神经网络是如何表示的,首先,第一列表示神经网络的输入层,第二列的圆圈表示神经网络的隐藏层,第三列的一个圆圈表示输出层。在训练的过程中,我们只能看到输入层和输出层,而看不到隐藏层。同时,第一列也叫做第0层,第二列是第1层,第三列是第2层。所以各种参数右上角的方括号里面的数字表示在第几层,比如图中的 a[1] 属于第一层,而 a1 则表示同一层网络的第几个结点。

在这里插入图片描述

3. 计算神经网络的输出

我们现在把隐藏层进行拆解,看一下这层结点内部是如何运算的,首先单个隐藏层结点可以分成两个部分,前半部分用来进行正常的线性运算,后半部分用进行激活运算。比如我们看第一个隐藏层结点,前半部分进行的运算是 z1[1] = w1[1]TX + b1[1] ,后半部分进行的运算是a1[1] = σ(z1[1])。第二、三和四个结点也同理,变化的只不过是训练参数w和b。

在这里插入图片描述

下面我们把以上分析总结到一张图上,并将隐藏层的四个节点进行向量化处理,处理以后,每个节点的向量运算就变成了矩阵运算,这样可以让计算过程更加简洁明了,同时省去了for循环运算,加快了运算速度。

在这里插入图片描述

最后,我们分析一下输出层进行了什么运算。输出层其实就是把隐藏层的计算结果 a[1] 当作X再次代入wTX + b 的运算中去,只不过参数和变量的维度发生了变化,除了这些,其他逻辑和隐藏层的计算相同。

在这里插入图片描述

4. 多个例子中的向量化

在上面,我们讲的是单个例子的向量化,但实际在训练神经网络的过程中会输入很多组例子去训练。很自然我们就想到了用 for 循环去重复上面的过程,如下图。

在这里插入图片描述
但是我们讲过, for 循环有它自己的复杂性,那么我们可不可以把这些例子向量化呢?当然可以。我们可以把每个例子的x当作一个列向量组成一个矩阵,进行运算,最后计算出来的Z[1]必定是一个结果矩阵,然后再将这个矩阵进行激活运算。输出层的运算也是同理,这样就相当于把多个例子进行了向量化。
在这里插入图片描述

5. 向量化实现的解释

这个过程其实就是上面所讲到的向量化的过程,这里不做过多解释,直接看图就行了。

在这里插入图片描述
在这里插入图片描述

6. 激活函数

截止到目前,在神经网络中我们使用的激活函数一直是 sigmoid函数,但是这个函数有一定的局限性,有一个更好的激活函数可供选择,那就是tanh函数,也叫双曲正切函数,函数值介于-1和1之间,这个激活函数的平均值更接近于0,这就有了很明显的去数据中心化的效果。但是在一个场合中使用 sigmoid 函数是很有必要的,那就是二元分类的情况,因为二元分类最后得出的结果是一个概率,范围就是0到1,所以这个用sigmoid激活函数更为合理。

不管是sigmoid函数还是tanh函数,都有一个明显的缺点,那就是当自变量的绝对值很大的时候,函数值的变化趋近于一条直线,也就是函数的斜率接近于0,这样会拖慢梯度下降算法。在机器学习里,还有一个非常受欢迎的激活函数,那就是修正线性单元(ReLu函数),当自变量为正时,斜率为1,当自变量为负时,斜率为0。当你不确定隐藏层用哪个激活函数的时候,就可以把ReLu作为激活函数,但是它的一个缺点是,当自变量为负数时,导数等于0。ReLu还有另一个版本,叫做带泄露的ReLu,当自变量为负时,斜率为0.01。

在这里插入图片描述

四种激活函数的应用场景为:

  1. sigmoid激活函数:常用作二元分类。
  2. tanh激活函数:每种场景表现都比较优秀。
  3. ReLu激活函数:最常用,如果不确定用哪个激活函数,可以优先用这个。
  4. 泄露的ReLu函数:偶尔使用。

在这里插入图片描述

7. 为什么要使用非线性激活函数

如果没有激活函数,那么无论你的神经网络有多少层,一直在做的只是计算线性激活函数,所以不如直接去掉全部隐藏层。而且使用线性激活函数只有可能在输出层,并且很少见。

在这里插入图片描述

8. 激活函数的导数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

10. 直观理解反向传播(选修)

无非就是logistic回归中的反向传播套了两层。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

11. 随机初始化

随机初始化权非常重要,对于logistic回归,可以将权重初始化为零,但是如果将神经网络的各参数数组全部初始化为0,再使用梯度下降算法,那将会完全无效。

在这里插入图片描述

这个问题的解决方案是随机初始化所有参数。

在这里插入图片描述

更多推荐