Deep Learning Specialization课程笔记——浅层神经网络

Neural Network Overview

一个神经元构成(其中a=yhat):

那么,当有两层隐藏层时,具体的计算过程,是每层有每层的w和b,进行上述z[1]->a[1]->z[2]->a[2]->L的运算,其中z[1]和z[2]的输入分别为w[1],b[1]和w[2],b[2]。同样,在神经网络中,也会像逻辑回归一样,计算后向传播的da[2],dz[2],dw[2],db[2]和da[1],dz[1],dw[1],db[1]。


Neural Network Representation

隐藏层之所以叫隐藏层,是因为中间这一层节点的真实值不能被观察到。

通常,我们不包括输入层为正式层(把它叫做第0层),所以把有一层隐藏层的神经网络叫做两层神经网络。


Computing a Neural Network's Output

神经网络的计算细节简单来说是将逻辑回归的多次重复。


此时用for_loop效率很低,下面是向量化,把每层的n个节点合在一起得到:



Vectorizing

神经网络如何实现计算所有实例呢?


横着看是对不同训练样本,竖着看是不同结点。


Activation functions

在a=theta(z)这步除了sigmoid函数也能有一些其他选择。

其中的一个选择:a=tanh(z)=(e^z-e^(-z))/(e^z+e^(-z)) 是sigmoid(z)在(-1,1)范围内的移位。也可以在隐藏层a=tanh(z)而在输出层a=sigmoid(z)。

线性整流函数:a=ReLu(z)=max(0,z),此时,z<0,a=0,在实际操作中,通常只会遇到z=0.0000000001的情况。ReLu函数是目前隐藏层广为使用的函数。

另外有a=Leaky ReLu(z)=max(0.01z,z),z<0时有很小的值。


why non-linear Activation functions

若直接令a=z,则会出现


那么可以看到,输出仅仅是输入的线性变化,那么神经网络就失去了意义,相当于没有隐藏层。

当处理回归问题时,可以在输出层使用线性激活函数,这时的输出yhat,就可以为任意实数。但在隐藏层,通常不使用线性激活函数。


Derivatives of Activation functions

a=sigmiod(z): a'=a(1-a)  

a=tanh(z): a'=1-a^2

a=ReLU(z): a'=0 if z<0  a'=1 if z>=0

a=Leaky ReLU(z) a'=0.01 if z<0  a'=1 if z>=0


Gradient desecent for Neural Networks




Random Intialization

为什么要把权重参数进行随机初始化呢?

如果把w1,w2,b1,b2的初始化值都设为0,那么会计算出完全相同的两个隐藏单元a1和a2,经过每次迭代后,两个隐藏单元的功能都相同,神经网络失去了意义。


那么为什么w值取得很小呢?

这样在tanh或sigmoid的激活函数时,斜率比较大,意味着初始梯度下降时步长比较大。

猜你喜欢

转载自blog.csdn.net/weixin_37805505/article/details/79752798
今日推荐