吴恩达深度学习课程笔记(2)

(一)对于神经网络的初识

可以以logistic回归作为例子,基本的logistic网络可以如下图所示:

吴恩达深度学习课程笔记(2)_第1张图片

其中x1,x2,x3可以是各种特征,最后得到预测值a。但是面对复杂问题,一层的网络预测的结果往往是不够的,这就需要多个类似这样的模型叠加,如下图所示:

吴恩达深度学习课程笔记(2)_第2张图片

可以将第一层预测的结果输入第二层再次运算,例如第一层可能根据疾病的不同特征预测了疾病的分类、疾病的传染性、疾病是细菌还是病毒导致的,再经过第二层来预测疾病的名称。

(二)激活函数

激活函数主要有:sigmoid——值域在(0,1)、tanh——值域在(-1,1)、ReLU——值域在(0,正无穷)不可微、Leaky ReLU、softmax 等。

sigmoid和tanh相比,tanh更加优秀,sigmoid当x的取值特别大或者特别小的时候,其梯度几乎没有,并且sigmoid只能输出正数,也就是说下一次只能增加——即“同意”上一次的结果,这会导致梯度爆炸,而tanh可以输出负数能够解决这个问题,但是tanh也有梯度消失的问题。

sigmoid(x) = 1 / (1 + e^(-x)) ,反向传播时其导数为 sigmoid(x) * ( 1 - sigmoid(x) )其中x值越大导数越趋近于0。下面为吴恩达老师的推导过程(x用z代替了)。

吴恩达深度学习课程笔记(2)_第3张图片

同理tnh(z)的导数为 1 - (tanh())^2,这个趋向于两端时依旧会有这样的问题。

ReLU函数的图形如下所示。表达式为 ReLU(z)= max(0,z)。

吴恩达深度学习课程笔记(2)_第4张图片

其导数为:ReLU ’(z)=  0 (z小于0时候),ReLU ’(z)=  1 (z大于0时候),ReLU(z)不可导(z等于0时候),在程序实现时候可以把z等于0的情况并入z大于0的时候。

Leaky ReLU的表达式为 max(0.01z,z),求导数类似ReLU。

(三)为什么要激活函数

激活函数具有非线性性,如果没有激活函数的映射模型只是线性(linear)回归,而线性一级多项式能够解决和映射的范围有限,线性函数的组合仍然是线性的,利用激活函数可以构建非线性的模型,来解决复杂问题。可以参考为什么我们的神经网络需要激活函数 - 知乎 (zhihu.com)

(四)以上面模型为例,神经网络梯度下降过程

假设两层神经网络,其中nx = n[0] ,n[1],n[2]分别表示输入的特征数量、隐藏单元的个数、输出单元的个数,可以知道 W[1] 为 n[1] * n[0] 矩阵,b[1] 为 n[1] 维向量,w[2] 为 n[2] * n [1] 矩阵,b[2] 为 n[2] 维向量(w[1],b[1] 为第一层变量,w[2],b[2] 为第二层变量)。

所以Costfunction J(w[1],b[1],w[2],b[2])= 1/m 从1到m Lossfunction(y',y)的累加(m个训练样本数),y'为预测值。

求导如图所示。然后利用笔记(1)的方法进行下降。这里的1/m因为是对Costfunction求导,最终代入的是不同样本损失和的平均。对于dw[2]中有1/m 而 dz[2]中没有,以及求导公式推导可以参考推导反向传播中的dZ=A - y_且听风吟的博客-CSDN博客。

吴恩达深度学习课程笔记(2)_第5张图片

你可能感兴趣的:(吴恩达深度学习课程笔记(2))