1.3 浅层神经网络(前向/反向传播的计算、不同激活函数、随机初始化参数)

单层神经网络,多组权重w,如何进行前向传播?

对于[单张图片],a0作为一个列向量,输入:

case1. 在只有一组w下,的预测结果:

case2. 在多组权重w的匹配下,判别结果(激活值activation):

对于[M张图片],X作为m个列向量的矩阵,输入:

多层神经网络,如何进行前向传播?

多层的运算:

比如:

注释:前一章,w全是列向量,w应该是wT。本章,从前向传播就能看出来,w是横向的,很多组横向的w。

多层神经网络,如何进行反向传播(公式推导)?

神经网络的偏导数是相对于损失函数L来计算的
第二层w2:与损失函数L直接相邻,所以我们就可以直接计算它的偏导数。
第一层w1:与损失函数L没有直接的联系,所以我们只能通过链式法则来计算。

回顾之前单层:

多层网络,不同层的推导:

对于w2:

直接按照前一章计算,没什么好说

注释:前一章,w全是列向量,w应该是wT。而本章,从前向传播就能看出来,w都是行向量,很多组横向的w。

反而要求a[0] a[1] 转置..这个刚开始不明白,后来在“直观感受”中,可以看得出来。对"矩阵求导"也有了认识。

对于w1:

总体:

前向传播、反向传播的直观感受 

对于一张图片:

前向传播:

反向传播:

---推导到这里,遇到两个大坑,最后感谢王浩楠的指导。

1.   的维度问题:它不是d向量/d向量,最后结果不是3*3的矩阵,而是3*1的列向量,对于的是每个元素

2.   * 不是矩阵相乘

对于多张图片:

前向传播:

反向传播:

为什么需要激活函数

如果不用激活函数:

 那怕一万层,结果也是线性的。

如果使用激活函数:

激活函数套在前面的线性函数外面,那么整个函数就变成了非线性函数了。
非线性函数可以表示曲线,而且神经网络的层次越多(叠加起来的非线性函数越多),所表示的曲线就越复杂
也就是说只要神经网络的层次足够多,那么就可以解决任何问题。

常见的激活函数

sigmoid函数

函数:这里写图片描述 

导数:这里写图片描述


特点是其值域为(0,1),可以作为二分类最后一层的输出

tanh函数

函数:这里写图片描述

导数:这里写图片描述


其值域为(-1,+1),均值接近0均值,效果要优于sigmoid,

  ——将这些靠近0的输出值传递给下一层神经元,下一层神经元会工作得更高效

sigmoid和tanh都有一个共同的缺点:

学习速度与偏导数的大小有关,偏导数越大那么学习速度越快。前两个函数,当输入数据的值比较大时,神经网络的学习速度就很慢。通过观察sigmoid和tanh的图像可知——当输入值越来越大时,曲线的斜率越来越小,偏导数越来越小。
为了解决这个问题,研究者们创造了另一个激活函数relu。

Relu函数

函数:这里写图片描述

导数:这里写图片描述

从图像可以看出,当输入值大于零时, relu的斜率是1;而当输入值小于零时,斜率是0。

leaky relu函数

为了解决斜率=0的问题,人们又创造了另一个激活函数leaky relu。但是这个意义不是特别大。
实际应用中,输入值一般都是大于零的。

初始化参数,需要随机,不能0

为什么单层可以0,多层不能初试为0?

反证:

若均初始化为0:

结果:

第0层是输入,第1层中,每个元素都是同样的z,同样的a

 = 

算出来的偏导数也是一摸一样,多次迭代后,很多神经元也等同一个神经元,计算完全一样的函数,

这么多神经元 == 一个神经元,不应该。

具体做法:

我们—般使用numpy.random.randn来进行随机初始化。
w1=numpy.random.randn((2,2))*0.01
乘0.01==想把w变得更小一点,计算得到的z就更小一点,z越小激活函数sigmoid的斜率就越大,那么在反向传播时计算得到的偏导数就越大,也就是说梯度下降会越快,那么神经网络学习的速度就越快。
b是可以为零的,因为w已经被随机初始化了,每一个神经元计算的内容已经不一样了。

代码:

https://gitee.com/bijingrui1997/deep_learning_notes/tree/master/1.3%20%E6%B5%85%E5%B1%82%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值