最好的学习方法就是把内容给其他人讲明白。

如果你看了我的文章感觉一头雾水,那是因为我还没学透。


我目前的理解是:反向传播是神经网络的精要,没搞明白反向传播,神经网络就还没入门。

我的学习计划是:

(1)推导一遍公式;

(2)写一遍纯numpy代码;

(3)看一遍源码。

本系列所有文章都不是原创,只是收集网上前期那些认真的牛人的文章于一处,手撸一遍推导,以求入门。于大家也是方便,于自己是一遍学习。


本文来源

帐号登录​blog.csdn.net

  1. softmax函数

numpy代码:

import numpy as np
def softmax(x):x = np.exp(x)/np.sum(np.exp(x))return x
print(softmax([2,3]))

结果:[ 0.26894142 0.73105858]

2.softmax函数求导

(1)当

(2)当

综上所述:

所以

(当Y的shape为(1,n)时)

3.softmax 函数的一个性质

这里X是向量,c是一个常数。下面证明左右两边的每一个分量相等。

实际应用:为了防止溢出,事先把x减去最大值。最大值是有效数据,其他值溢不溢出可管不了,也不关心。

import numpy as np
def softmax(x):#减去最大值x-=np.max(x)x = np.exp(x)/np.sum(np.exp(x))return x
print(softmax([2,3]))

结果还是:[ 0.26894142 0.73105858]

4.作为中间层的激活函数

经过上面的讨论,已经可以把softmax激活层的代码写出来:

class Softmax(object):def __init__(self):passdef forward(self, x):self.out = np.copy(x)self.out -= np.max(self.out)self.out = np.exp(self.out)s = np.sum(self.out)self.out= self.out / sreturn  self.outdef backward(self, eta):dout=np.diag(self.out)-np.outer(self.out,self.out)return np.dot(dout,eta)

结果怎样呢?可以说是非常糟糕,开始表现还不错,准确率可以冲到80%,但很快又回到原点。当然只要想想,一堆全部小于1的数不停的数乘来乘去,结果会怎样!而且可以看出,它求导的计算量也非常大,所以softmax很特殊,没有谁把它作为中间层的激活函数。都是放在最后一层,而且都是和交叉熵损失函数结合起来用。

5.softmax函数+交叉熵(log似然)代价函数

这里的

是真实值,是训练的目标,取0或1.在求导的时候是常量。
是softmax函数的输出值,是训练结果,是变量。

log似然代价函数C对每一个

求偏导,结果都是

当使用独热(onehot)编码时,

只有一个位置为1,其他位置都是0。
也不需要用一个向量来存储,只要
即可。

毫无疑问,这是一个无比优美的结果!!!

6.交叉熵是个什么鬼?为什么用交叉熵作为代价函数可以起到训练作用?

简单来说,训练的目的是让

但等于的可能性不大,至少

趋近即可。

而交叉熵的最小值是信息熵,当

时,C就是信息熵。怎么证明?后面有一篇专门谈这个证明。

反过来讲,当我们训练使得C达到最小值的时候,

就逐步趋近于
了。

就是说方法是求C的最小值,目的是

逐步趋近于
。这个是个间接的关系。当然,其他损失函数也是这样。

7.源码:fmscole/backpropagation

softmax函数_反向传播之一:softmax函数相关推荐

  1. 0_3-激活函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU

    numpy实现神经网络系列 工程地址:https://github.com/yizt/numpy_neuron_network 基础知识 0_1-全连接层.损失函数的反向传播 0_2_1-卷积层的反向 ...

  2. 深度学习与计算机视觉系列(5)_反向传播与它的直观理解

    作者:寒小阳 时间:2015年12月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50321873 声明:版权所有,转载请联系作者并注明 ...

  3. softmax函数_干货 | 浅谈 Softmax 函数

    点击上方"视学算法",马上关注 来自 | 知乎 作者 | LinT链接丨https://zhuanlan.zhihu.com/p/79585726编辑 | 深度学习这件小事公众号仅 ...

  4. 并注册烧写钩子 获取启动介质类型_PyTorch中对张量登记注册反向传播的钩子函数,并展示调用顺序...

    总结说明:代码实验表面,反向传播计算梯度时的执行顺序是和前向计算相反的.这一点由钩子函数的执行顺序可以观察到,并且由保存梯度的列表中的内容顺序可以推断出来. 代码实验展示: import torch ...

  5. cnn 反向传播推导_反向传播算法推导过程(非常详细)

    1. 前向传播 假设 为 的矩阵(其中, 为样本个数(batch size), 为特征维数): 与 的维数为 为 的矩阵, 与 的维数为 为 的矩阵, 与 的维数为 为 的矩阵, 前向算法: 假设输出 ...

  6. 手写 单隐藏层神经网络_反向传播(Matlab实现)

    文章目录 要点 待优化 效果 代码 mian train_neural_net 待优化(1)已完成 要点 1.sigmoid函数做为激活函数,二分类交叉熵函数做损失函数 2.可以同时对整个训练集进行训 ...

  7. 反向传播算法_反向传播算法:定义,概念,可视化

    定义 向前传播 通常,当我们使用神经网络时,我们输入某个向量x,然后网络产生一个输出y,这个输入向量通过每一层隐含层,直到输出层.这个方向的流动叫做正向传播. 在训练阶段,输入最后可以计算出一个代价标 ...

  8. hive substr函数_数据分析工具篇——HQL函数及逻辑

    本篇文章我们梳理一下hive常用的函数,对于hive而言,常用的函数并不是特别多,往往记住关键几个,就可以解决80%的问题,这也是大家喜欢hive的原因,那么,常用的函数有哪些呢? 时间函数 1)时间 ...

  9. decode函数_「实践」云函数 + API,你也可以做个天气信息系统

    为什么要把云函数 SCF 与 API 网关进行结合?本文告诉你答案! 通常,我们用云函数 SCF 写一个函数应用,这个应用可能多种多样.例如之前介绍过的 OJ 系统判题功能,通过 NLP 实现文本摘要 ...

最新文章

  1. VTK:颜色顶点标签用法实战
  2. MySQL连接查询的分类
  3. 如何在ui5 xml view中使用嵌入的自定义css style
  4. Oracle查看锁表
  5. pojo 带参构造函数_带有Java Pojo作为输入输出示例的AWS Lambda函数
  6. JS最新的身份证验证代码
  7. 用JavaScript语言判断一个三位数是否为水仙花数
  8. linux 中 man 1 man2 man3 ......man N的区别
  9. SAP License:修改物料账期
  10. 最强战队实力交锋,算法“视”界杯终极一战即将上演
  11. 加密芯片——AES算法特点与应用注意事项
  12. Socket 编程之_TCP ☎☎☎
  13. win7万能声卡驱动_IT天空出品的万能驱动 7 发布下载
  14. HP 6L WIN7 WIN8 驱动
  15. 用python在大麦网抢票_大麦网抢票工具系列(一)
  16. 线性代数————思维导图(上岸必备)(相似理论)
  17. ORA-01830: date format picture ends before converting entire input string的几种原因
  18. 使用Stream编译出现的stream has already been operated upon or closed的问题
  19. ubuntu查看 固态硬盘位置_在Ubuntu(Linux)中启用固态硬盘(固态硬盘)TRIM | MOS86...
  20. native-JavaScript通信流程( 基于最新的 react native版本 )

热门文章

  1. 【Flink】flink ClickHouseSink--数据写入ClickHouse
  2. mac 下 ~/.bash_profile无效
  3. Spring: 事务传播机制
  4. spark学习-34-Spark的BroadcastManager广播管理器
  5. 计算机原理期末考试,计算机原理期末考试题
  6. 一个分布式 JVM 监控工具,非常实用!
  7. Spring 的循环依赖:真的必须非要三级缓存吗?
  8. Spring 的configuration-metadata-annotation-processor 文档
  9. Mysql 用Not In 的问题:子查询的结果中有Null则查不出来
  10. MySQL8.0.X卸载并重新安装并启动