Deeplearning,ai之学习笔记 Week3 浅层神经网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Raymond_MY/article/details/84455375

3.1+3.2 神经网络概览+神经网络表示

在这里插入图片描述

如图,这是一个简单的双层神经网络,层数为2的原因是我们一般不将输入当作是一个层。或者也可以称输入层为第0层。

“隐藏层”这个名字的含义是:在训练集中,这些中间节点的真正数值我们是不知道的,在训练集中你看不到他们的数值(训练集只有输入值和输出值),“隐藏”就是想表示无法在训练集中看到。也就是不知道中间过程。只知道输入和输出。

3.3 计算神经网络的输出

在这里插入图片描述
让我们先看每个小节点都在做什么
在这里插入图片描述

其实每个小节点就是在做我们上周所说的计算。先算出z,再计算a,得出y的预测值。
在这里插入图片描述

将所有的小节点的方程列出来,就得到了上面图中的例子。这里中括号中的数字代表了是第一层得到的数据。
如果我们想要计算出结果,可以采用for循环的方法。但显然速度会很慢。这里就可以采用上星期学习的向量化技术,将for循环转化为向量计算。

首先,我们有四个logistic回归单元(也就是隐藏层的四个小圆圈),每一个回归单元,都有对应的W,b参数。那么我们把4个向量W堆叠在一起:如下图所示,就形成了一个4×3的矩阵——4表示有4个隐藏单元(4个圈),3表示有3个输入特征(x1,x2,x3) 然后和X相乘,在加上b结果就为Z:
在这里插入图片描述
这样我们就完成了对一个训练样例的向量化,下一节我们来讨论对一整个数据集的向量化

3.4+3.5 多样例下的向量化+验证

同样的,我们一组训练集不可能只有一组数据,要对所有数据进行同样方法的计算,我们还是会想到用一个for循环来解决。但是既然我们有向量化技术,就可以想办法将整个数据集的训练过程向量化了,就又可以避免一个显式的for循环了。

在这里插入图片描述

横向指标对应了不同的训练样本,竖向指标对应了神经网络里的不同节点。
详细了解线性代数的细节在深度学习领域是很重要的,能帮助你快速正确的实现这些算法

3.6 激活函数

介绍了四个激活函数

Sigmoid函数

σ(z)=11+ezσ(z)=\frac{1}{1+e^{−z}}
一般只用在二元分类的输出层,因为二元分类一般要求输出结果y(0,1)y∈(0,1),而σ函数刚好其阈值就在0,1之间。而其它层更加建议用其他的激活函数。所以一个神经网络可以使用多种激活函数(用g[i]表示第i层的激活函数)
针对二分分类的任务,我们以后只可能在输出层见到σ(z)σ(z)函数。因为双曲正切函数比它更好。

双曲正切函数

tanh(z)=ezezez+eztanh(z)=\frac{e^z−e^{−z}}{e^z+e^{−z}}
双曲正切函数,上下界限分别是1,-1。它相比于σ(z)σ(z)表现更好的原因是因为它的均值在0附近,有数据中心化的效果,所以下一层在学习的时候要更加方便和快速。其实就是σ(z)σ(z)平移变换和相似变换的结果。

但是σ(z)和tanh(z)有一个共同的缺点,就是当z很大或很小的时候,它们的斜率就会趋向于0,这会使得梯度下降的学习速率降低。

ReLu函数(The Rectified Linear Unit)

表达式是f(x)=max(0,x)f(x)=max(0,x),它表现的效果是最好的,所以在不确定使用何种激活函数的时候就可以直接的选择它
(因为大家都在用)

相比sigmoid和tanh函数,Relu激活函数的优点在于:
1.梯度不饱和。x>0x>0 时梯度为1。因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。

2.计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果x<0,f(x)=0x<0,f(x)=0,如果x>0,f(x)=xx>0,f(x)=x。加快了正向传播的计算速度。
因此,Relu激活函数可以极大地加快收敛速度,相比tanh()tanh()函数,收敛速度可以加快6倍

Leaky Relu

其实Relu激活函数在当z小于0的时候导数为0,虽然这在实践中并不影响,但是为了进一步优化提出了Leaky Relu,在z小于0时导数不为0.表达式一般为f(x)=max(0.01x,x)f(x)=max(0.01x,x)。其中0.01是一个可调的参数,类似于学习步长α。你也可以进一步地对0.01这个参数进行学习。
在这里插入图片描述

为什么一定要在神经网络中使用激活函数呢?下一节将说明这个问题。

没有更多推荐了,返回首页