Neural Networks and Deep Learning第三周

Overview of Neural Network

Neural Networks and Deep Learning第三周

回顾第一周的neural network,第一个neural network是z,第二个是theta,上一个传入下一个。

Neural Networks and Deep Learning第三周

拿单层神经网络来说,样本的值x1,x2...xn是input layer,是输入层;hidden layer是function layer,负责把input layer的值进行处理,然后传入output layer。传出来的值就是y-hat,相当于函数处理的值。

下面来推倒神经网络的计算过程:

前面说过两层神经网络可以看成逻辑回归再重复计算一次。

Neural Networks and Deep Learning第三周

这是逻辑回归正向传播应该运行的计算,先计算z,后计算a;对于一个双层神经网络来说,一个node对应一次运算,那么从输入层到隐藏层有一次逻辑回归运算;从隐藏层到输出层还有一次。

Neural Networks and Deep Learning第三周

对于输入层之后的隐藏层,我们用上标加方括号表示,[1]代表第一个隐藏层;下表代表这个节点的顺序;

Neural Networks and Deep Learning第三周

那么,对于这个神经网络来说:

Neural Networks and Deep Learning第三周        Neural Networks and Deep Learning第三周

这里面,四个node代表四个逻辑回归的计算(sigmoid),因为layer是从0开始的,所以input layer是a[0];X = [ x1,x2,x3].T;

hidden layer是a[1];y-hat layer 是 a[2];那么;

Neural Networks and Deep Learning第三周

注意,在第二层时,W和b的维度就和layer 1不同了;并且引入了verctorization加快计算;

Vectorizing across multiple examples

Neural Networks and Deep Learning第三周

对于有很多的样本来说,z[1](i)代表,第一个隐藏层的第i个样本;那么,X是(n,m)的维度;W^[1]的维度是(1,n)的矩阵;b的维度是(1,m);那么,z的维度是(4,m);A也是;4代表神经元个数,也相当于神经元特征;那么,行代表神经元个数;列代表样本个数。这样,就能向量化很多的样本。


Activation functions

神经网络隐藏层和输出层都需要**函数(activation function),在之前的课程中我们都默认使用Sigmoid函数σ(x)作为**函数。其实,还有其它**函数可供使用,不同的**函数有各自的优点。


Neural Networks and Deep Learning第三周  Neural Networks and Deep Learning第三周Neural Networks and Deep Learning第三周


Neural Networks and Deep Learning第三周 

从图上可以清楚地看到,每个**函数(activation function)的取值范围和斜率。首先,sigmoid函数来说,取值范围是(0,1),斜率是两边小,中间大;优点,该函数在最后一个神经元可以做**函数,因为最后一个神经元是输出标签{0,1},道理不言而喻吧;对于隐藏层的**函数,一般来说,tanh函数要比sigmoid函数表现更好一些。因为tanh函数的取值范围在[-1,+1]之间,隐藏层的输出被限定在[-1,+1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化(均值为0)的效果。

ReLU函数在z大于零时梯度始终为1;在z小于零时梯度始终为0;z等于零时的梯度可以当成1也可以当成0,实际应用中并不影响。对于隐藏层,选择ReLU作为**函数能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。但当z小于零时,存在梯度为0的缺点,实际应用中,这个缺点影响不是很大。

为了弥补这个缺点,出现了Leaky ReLU**函数,能够保证z小于零是梯度不为0。

Why do you need non-linear activation functions

我们为什么需要非线性的**函数?因为如果都是线性函数,那么第一个隐藏层计算完后,结果仍然是线性的,和有没有隐藏层一样。但是如果模型是做一个回归模型,也就是预测值,那么在输出层可以是线性模型,因为需要输出一个连续值。


Derivatives of activation functions

在计算神经网络反向传播的过程时,肯定是需要计算**函数的倒数的,(回想一下,前面的数的倒数就是后面倒数的乘积),那么,肯定首先要了解每个函数的导数的求导嘛~

Neural Networks and Deep Learning第三周   sigmoid函数                Neural Networks and Deep Learning第三周tanh函数

Neural Networks and Deep Learning第三周 Relu函数                 Neural Networks and Deep Learning第三周   Leaky Relu函数


Gradient descent for neural networks

Neural Networks and Deep Learning第三周

反向传播是计算导数(梯度)的过程,这里列出了正向传播和反向传播的比较,可以看到:

正向传播是计算loss function的,反向传播是计算梯度下降的,因为你要分别计算w和b的变化,所以需要知道他们的导数。

Random Initialization

神经网络模型中的参数权重W是不能全部初始化为零的,为什么呢?

因为全部初始化为0,