python小波神经网络_深度学习之反向传播算法(3)——全连接神经网络BP算法思考及Python实现...

0 序言

本文将对模型细节进行讨论补充,定性分析激活函数的使用,阐述网络中数据维度情况;记录自己在BP算法学习过程中的一些思考(纯属发散,可跳过. 如有不正确之处欢迎讨论);给出深度神经网络BP算法代码实现(文末)及结果.

1 激活函数的位置

上文最后小节(3.3)介绍了结合Softmax和Cross Entropy Loss Function的神经网络反向传播输出层梯度计算. 在该网络中,输出层(第

层)在Feedforward过程仍使用了激活函数

,得到

,再对

做softmax得到

.

代表Sigmoid函数,常见激活函数还包括Relu(族)、Softplus、Tanh等,下表给出了几种经典激活函数及对应求导结果.表1 典型激活函数及对应导数

可见,实际上对于输出层,我们进行了2种操作:

.

的作用是将网络输出映射至(0, 1),便于划分阈值,处理二分类问题;对于多分类问题,则可以通过Softmax将输出归一化至(0, 1),得到类似概率分布的结果进行判断. 因此实际上这两种操作(activation, softmax)并不需要对输出层同时使用.

如果采用其他的激活函数,甚至有可能导致网络无法输出全部范围的值(如Relu),或是激活函数的导数在-1和1附近变得非常小,发生“梯度消失”.[Stanford CS231]示例中输出层未接激活函数,直接做Softmax.

2 Further discussion on Softmax + Cross Entropy

在一些文章中,将Softmax也称为激活函数,对输出层进行softmax激活. 在不接其他激活函数的情况下,上篇文章3.3节中递推起始层对权重矩阵和偏置向量梯度计算没有了对

的导数

,因此下面两式(上篇文章中(3.16),(3.17))中没有了

部分.

即:

可以看出,使用Softmax和交叉熵,可以减少输出层的

,从而略微减轻"梯度消失".

另一方面,由于真实标签

采用one-hot编码,仅有1个分量为1,因此在一些文章和代码demo中梯度计算项会出现

的记法,其实是式(2.2)中真实类别对应的元素项,从向量角度的计算为(

是真实类别

):

3 还是数据数量的问题:向量→矩阵→平均梯度

把输出层做Softmax激活的网络的BP算法递推重写如下:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值