#写在最前,deeplearning.ai系列课程相较于之前的Andrew Ng在coursea上2014发布的机器学习课程内容更加丰富。
重要的是此次课程示例代码都是用python来实现,不需要去熟悉octave,对大部分需要用python来学习机器学习的同学来说是个福音!
原课程视频请移步网易云课堂或者coursera上学习。
#本文内容部分来自网络,只为分享供更多的人学习使用

1、关于激活函数
几种不同的激活函数 g(x) :
- sigmoid:
a=11+e−z
- 导数: a′=a(1−a)
- tanh:
a=ez−e−zez+e−z
- 导数: a′=1−a2
- ReLU(修正线性单元): a=max(0,z)
- Leaky ReLU: a=max(0.01z,z)
常见激活函数比较:
对于sigmoid函数,一般只用在二元分类的输出层,因为二元分类一般要求输出结果
y∈0,1
,而σ函数刚好其阈值就在0,1之间。而其它层更加建议用其他的激活函数。所以一个神经网络可以使用多种激活函数(用表示第i层的激活函数),一般来说,在输出层我们选用sigmoid函数。
对于tanh(z)函数,相比于表现更好的原因是因为它的均值在0附近,有数据中心化的效果,所以下一层在学习的时候要更加方便和快速。但是和有一个共同的缺点,就是当z很大或很小的时候,它们的斜率就会趋向于0,这会使得梯度下降的学习速率降低。
对于ReLu函数,可以极大地加快收敛速度,相比tanh函数,收敛速度可以加快6倍。它表现效果很好,所以在不确定使用何种激活函数的时候可以选择这个函数。
相比sigmoid和tanh函数,Relu激活函数的优点在于:
梯度不饱和
。梯度计算公式为:1{x>0}。因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。
计算速度快
。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果x<0,f(x)=0,如果x>0,f(x)=x。加快了正向传播的计算速度。
对于Leaky ReLu函数,其实就是在ReLu函数的基础上改进了一点。即当x值小于0的时候,其值不为0,而是一个很小的正数。
综上,对于选择哪个激活函数,也没有固定的答案,具体问题具体分析。
对于激活函数,为什么要用非线性函数呢?因为当激活函数是线性函数的时候,每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与只有一个隐藏层效果相当,这种情况就是多层感知机(MLP)了。
2、梯度下降法
以浅层神经网络为例,我们给出神经网络的梯度下降法的公式。
- 参数: W[1],b[1],W[2],b[2] ;
- 输入层特征向量个数: nx=n[0] ;
- 隐藏层神经元个数: n[1] ;
- 输出层神经元个数: n[2]=1 ;
- W[1] 的维度为 (n[1],n[0]) , b[1] 的维度为 (n[1],1) ;
- W[2] 的维度为 (n[2],n[1]) , b[2] 的维度为 (n[2],1) ;
下面为该例子的神经网络反向梯度下降公式(左)和其代码向量化(右):