上图是一个最简单2层的神经网络,最左边一层是输入的数据,通常这一层不计入到神经网络的纬度中.

如果我们把一个神经元单独提取出来的话,你会发现它就是一个逻辑回归.所以说神经网络可以理解为非常多的逻辑回归组合而成的.

由于神经网络的推导过于复杂,所以我们先从简单的逻辑回归开始逐步推导神经网络.

在文中你可能会看到这几种符号表示:

,中括号表示层数,这里指第1层的参数.

,小括号表示第几个训练样本,这里指第一层第一个训练样本的参数.

,下标表示第几个神经元,这里指第一层第一个神经元的参数.

,大括号表示第几批数据,后面会通过将训练样本分配以提高速度.

单样本逻辑回归

:表示1个样本,样本有n个特征,所以为(n,1)的向量.

:样本的标记值,为二进制常数.

:线性方程的参数,每个特征对应一个参数,为(n,1)的向量

:线性方程的偏置值,为常数.


正向传播:

反向传播:

根据链式法则求参数的导数:

多样本逻辑回归

我们的训练样本有很多个,计算梯度的时候通常会取多个样本梯度的平均值.当然可以使用for循环来计算梯度,不过向量化的效率是for循环的近300倍.

:表示m个样本,每个样本有n个特征,为(n,m)的矩阵

:表示m个样本的标记,为(1,m)的矩阵

:线性方程的参数,每个特征对应一个参数,为(n,1)的向量

:线性方程的偏置值,为常数.

反向传播:

根据链式法则求参数的导数:

多样本逻辑回归只有x变为X,而参数与偏置,均与单样本相同.
最后求得的导数为使用各样本计算出的导数组成的矩阵,我们取平均值作为最终结果.

2layer神经网络

我们可以把逻辑回归多加一层:

这样是两层的神经网络么?显然不是的,2层的神经网络不仅比逻辑回归多一层,而且每层有多个神经元.所以我们需要重新定义一下参数的形式.

我们可以把每层中的神经元的参数放到一个大的矩阵中,即:

同样,把偏置也放到一个矩阵中:

此时,我们可以一次性计算第1层所有的神经元:


正向传播:

反向传播:
神经网络中的W,A,Y及b都可以理解为个逻辑回归结果的罗列,所以逻辑回归的反向传播结果可以直接用到神经网络的反向传播.

根据链式法则:

L层神经网络

有了2层神经网络的基础,我们来看一下L层的神经网络:

正向传播:

循环L次:

反向传播:

递推出第l层的导数:

随机初始化参数

梯度下降时参数更新的幅度是根据其对的偏导数决定的.而偏导数的大小与输入x相关.

在逻辑回归中,因为输入x不同,所以偏导数也是不同的,将全部初始化为0是没有问题的.

但是在神经网络中,下一层不同神经元的输入x可能是上一次同一个神经元的输出,这就造成有些参数的偏导数总是相同的,无论迭代多少次,参数也总是相同,造成重复神经元,性能降低.

上图中,第二层神经元a1与a2的输入为相同的值,如果也初始化为相同的值,会造成的偏导数也相同的情况.

所以为了避免上述情况发生,的初始值一定要为不同的值,我们可以使用随机数初始化.并且为了让学习更有效率,要保证之和尽可能小,即在区间内选取.

一个有效选取的策略是以神经元个数为基础.即,其中为该层神经元数目,为下一层神经元数目.


参考:
https://www.coursera.org/specializations/deep-learning

posted @ 2018-08-03 14:02:42
评论加载中...

发表评论