吴恩达深度学习_第一课(3)《浅层神经网络》

神经网络概览

符号变化

变量上标是圆括号 (1),(2),(3)…(i) 表示第 i 个样本的数据:x(1),x(2)
变量上标是方括号[1],[2],[3]…[i] 表示第 i 层layer的数据:x[1],x[2]

举个例子:
在这里插入图片描述
x作为输入进入第一层,配合W[1]和b[1]进行计算,得到第一层结果a[1];a[1]作为第二层的输入,配合W[2]和b[2]进行计算,得到第二层结果a[2],并计算本次前向传播的损失函数。

类似于单层逻辑回归中的反向传播需要计算dz和da
在这里插入图片描述
在神经网络中,根据对某层参数w和b的偏导,也有dz[2],da[2],dw[2],db[2]
在这里插入图片描述

神经网络表示

神经元结构

单个结点中包含当前层的w和b,并在本结点内使用激活函数激活输出值。
在这里插入图片描述

神经网络结构

神经网络大体主要有输入层、隐藏层、输出层。
在这里插入图片描述
输入层的向量x,即激活值(第0层作为输入,没有激活函数)可以写成a[0]
隐藏层的激活值为a[1],例如这里的四个节点,分别记作a1[1],a2[1],a3[1],a4[1],类似右边这个4维矩阵的存储形式
隐藏层输出值作为输出层的输入值,激活后的激活值为a[2],等于预测值 y ^ \widehat{y} y
通常输入层(第0层)不计入总层数,因此,上图为2层网络
在这里插入图片描述
这里w[1].shape是(4,3),其中4是因为有4个隐藏单元,3是因为有3个输入特征。

计算神经网络的前向输出

神经元在第1层运算本层激活值的运算:
在这里插入图片描述
具体维度运算:
思想:当某层有多个结点时,纵向堆叠本层结点的运算结果:Z,a
在这里插入图片描述
(4,3)的原因:因为x有三个变量x1,x2,x3,所以w也是(3,1)列向量,为了能点乘需要w.T(1,3),又因为w[1]是w1,w2,w3,w4竖着拼起来组合,所以w[1]是(4,3)
在手写的表示中,W[1]使用大写W,而不是w。已经默认为参数向量转置再拼起来组成的矩阵,不需要类似w加上转置符号写成W[1] T

  • 下图右侧列出本网络两层结构的公式。在这里插入图片描述
    W[1]是内部转置的(4,3)矩阵,最终输出为a[1](4,1)。
    因为第2层只有一个结点,输入4个参数,所以W[2]在内部对w(4,1)转置,得到W[2](1,4),计算得到z[2](1,1),最终输出 y ^ \widehat{y} y =a[2](1,1)

单个样本向下一层传输时,输出尽量调整为纵向形式,也方便下一层直接使用纵向形式。

多个样本尽量将单个样本横着拼成一个矩阵,包括输出也尽量横着拼,类似上周作业里面的样本矩阵 X_train:(12288,209)

多个样本的向量化

列出所有情况及符号说明

若有m个样本,会产生m个预测值 y ^ \widehat{y} y ,下面紫色标记解释a[2](i)的意义:方括号是第2层,圆括号是第i个样本
在这里插入图片描述

向量化处理

在这里插入图片描述

红色输入矩阵X中,将图片所有像素值nx纵向排列形成单个样本的输入值,将不同样本的输入值x(1),x(2)…横向拼成矩阵X

紫色输出矩阵Z[1]代表第1层隐藏层的输出,每一列代表某单个样本在第1层的输出结果,多个样本的输出结果向量z[1](1),z[1](2)横向拼接成矩阵Z

在这里插入图片描述

绿色激活值矩阵A[1]代表第1层隐藏层的激活值输出,每一列a[1](1),a[1](2)…分别代表某单个样本的激活值,每列的激活值横向拼成矩阵A
横向是训练样本training example,纵向是隐藏层单元hidden unit
以线代中的矩阵为例,矩阵中[0][0]位置的值是第1个样本经过第1隐藏层的第1个神经元的激活值;[1][0]位置的值是第1个样本经过第1隐藏层的第2个神经元的激活值;[0][1]位置的值是第2个样本经过第1隐藏层的第1个神经元的激活值…

向量化实现的解释

下图表示在第1隐藏层,各样本输出的向量表示。(别忘了 W[1]里面是已经转置过的参数w向量)
在这里插入图片描述

激活函数

为什么需要激活函数

如果使用线性激活函数,神经网络只是把输入线性组合进行输出,无论多深,都只是进行线性计算,会导致隐藏层失效,成为最简单的逻辑回归函数。

通常使用线性激活函数的地方是输出层

常用激活函数

在之前惯用sigmoid函数的隐藏层和输出层,可以使用别的函数,可以是非线性函数。
在这里插入图片描述
通常使用g(z)表示,并且可以用g[1],g[2]…区别不同层的激活函数。

tanh函数:类似将sigmoid函数简单平移,但是几乎所有场合都比sigmoid更加优越,因为平均值更加接近0,更便于后续运算。tanh与sigmoid共有缺点:当z极大/极小,斜率趋于0,拖慢梯度下降

ReLU函数:在输入是负值的情况下,使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解过拟合。是最常用的激活函数

一些经验:

  • 输出为0 / 1,仅在二元分类,sigmoid函数适合作为输出层激活函数,其他时候几乎不用
  • 不确定隐藏层用哪个,使用ReLU

神经网络的梯度下降

回顾一下大致思想:计算预测值,计算损失函数及成本函数,计算偏导,梯度下降更新参数…循环往复 在这里插入图片描述

分为前向传播,反向传播。正向传播容易分析,反向传播的导数公式推导可看可不看。
在这里插入图片描述
公式推导:类似逻辑回归,需要推导da[2],dz[2],db[2],dw[2],da[1],db[1],dz[1],dw[1]这些导数值。
在这里插入图片描述
左侧da[1],dz[1]的链式推导如下(省略等式右边的偏导符号;没有考虑矩阵,所以没有转置):
在这里插入图片描述

另外的dw[1],db[1] 直接类似 dw[2],db[2]求法即可。
在这里插入图片描述
至于为什么dz[1]中的w[2]要转置,是因为w[2]维度是(n[2],n[1]),dz[2]维度和z[2]维度一致,都是(n[2],m),z[1]维度也是(n[1],m)。因此对w[2]进行转置。(维度原因参考下一周课程)

随机初始化

神经网络中若参数矩阵初始化为0,会导致梯度下降失效

在这里插入图片描述

第一隐藏层的w和b都被初始化为0,会导致计算出来a1和a2相等,翻过来导致两个第一隐藏层单元 对 第二隐藏层输出单元的影响一致,且永远一致,无法体现多个隐藏单元的效果。导致退化为多层单个神经元网络。

对于上面这个网络的正确做法:
w1=np.random.radn((2,2))*0.01
b1=np.zero((2,1))
w2=np.random.radn((1,2))*0.01
b2=0

在这里插入图片描述

使用乘0.01是为了防止梯度消失/梯度爆炸

数据线性可分/不可分

所谓可分是指可以没有误差地分开

简单的说就是如果用一个线性函数可以将两类样本完全分开,就称这些样本是线性可分的。
比如二维空间中的直线、三维空间中的平面以及高维空间中的线性函数

判断是否线性可分:

不同样本集用凸包包起来,判断不同凸包的边是否有交叉。(凸包概念:如果给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集合中所有的点。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值