首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

吴恩达 deeplearning.ai 精炼笔记 1-4:浅层神经网络

重磅干货,第一时间送达

原文出处:http://fangzh.top/2018/2018091215/

前面两周讲的是一些logistic和向量化的内容,以及numpy的基本使用,在他之前的机器学习课程中已经讲过了。Week3主要讲了如何搭建两层的神经网络。

神经网络的表示

这周的内容就围绕着这一张图来讲。

这就是每一层神经元的表达方式,上标中括号[],表示是第几层的神经元;下标表示这个是某一层的第几个神经元。

Input Layer:输入层,也用,表示第0层

Hidden Layer:表示除了最后一层输出层以外的内部隐藏层

Output Layer:输出层,表示最后一层 而通常神经网络的层数一般不包括输入层

每一层的参数w的维度是(该层神经元个数,前面一层神经元个数)

为(每一层的神经元个数,1)

计算单个数据的神经网络

由此得到,计算单个数据的神经网络只需要4步:

多数据的向量化表示

我们知道,多个数据的表示就是,使用小括号的上标。神经元也是一样。如表示第1层神经元的第i个样本。

那么如果有m个样本,一直做for循环来计算出这些神经元的值,实在是太慢了,所以跟logistic一样,可以直接用向量化来表示,这个时候用大写字母来表示。

这个时候,例如是一个 ( n , m ) 的矩阵,m是样本数,每一列表示一个样本,n是该层的神经元个数。

从水平上看,矩阵 A代表了各个训练样本。竖直上看,A的不同索引对应不用的隐藏单元。

对矩阵Z和X也是类似,水平方向对应不同的样本,竖直方向上对应不同的输入特征,也就是神经网络输入层的各个节点。

激活函数

在此前都是用sigmoid作为激活函数的。但是激活函数不只有这一种,常用的有4种,分别是:sigmoid, tanh, ReLu, Leaky ReLu。

tips:

tanh函数在值域上处于-1和+1之间,所以均值更接近0,使用tanh比sigmoid更能够中心化数据,使得平均值接近0,而不是0.5。

tanh在大多数场合都是优于sigmoid的。

但是sigmoid和tanh有共同的缺点就是z在特别大或者特别小的时候,梯度很小,收敛速度很慢。

而ReLu弥补了两者的不足,在 z > 0 时,梯度始终为1,提高了速度。

Leaky ReLu保证了 z

结论:

sigmoid:除了输出层是一个二分类问题的时候使用,不然基本不用

tanh:几乎适用于任何场合

ReLu:默认使用这个,如果不确定你要用哪个激活函数,那就选ReLu或者Leaky ReLu

为什么要使用非线性的激活函数

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与只有一个隐藏层效果相当,这种情况就是多层感知机(MLP)了。 正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。

梯度下降法公式

这里给出了浅层神经网络的梯度下降法公式。其中

表示你的激活函数的导数。

参数随机初始化

在神经网络中,如果将参数全部初始化为0 会导致一个问题,例如对于上面的神经网络的例子,如果将参数全部初始化为0,在每轮参数更新的时候,与输入单元相关的两个隐藏单元的结果将是相同的。

所以初始化时,W要随机初始化,b不存在对称性问题,所以可以设置为0。

将W乘以0.01是为了让W初始化足够小,因为如果很大的话,Z就很大,用sigmoid或者tanh时,所得到的梯度就会很小,训练过程会变慢。

ReLU和Leaky ReLU作为激活函数时,不存在这种问题,因为在大于0的时候,梯度均为1。

好好做作业,才能有更深的体会!

这是一条正经的分割线

扫描上方二维码关注

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190114G15BIF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券