浅层神经网络 反向传播推导:MSE softmax
基础:逻辑回归
Logistic 回归模型的参数估计为什么不能采用最小二乘法?
logistic回归模型的参数估计问题不能“方便地”定义“误差”或者“残差”。


对单个样本:
第i层的权重W[i]维度的行等于i层神经元的个数,列等于i-1层神经元的个数;第i层常数项b[i]b[i]维度的行等于i层神经元的个数,列始终为1。
对m个样本,用for循环不如用矩阵快,输入矩阵X的维度为(nx,m),nx是输入层特征数目。

其中,Z[1]的维度是(4,m),4是隐藏层神经元的个数;A[1]的维度与Z[1]相同;Z[2]和A[2]的维度均为(1,m)。行表示神经元个数,列表示样本数目m。
一文弄懂神经网络中的反向传播法——BackPropagation

反向传播推导
输出层---->隐含层

以w5为例,更新的是权值:
1.计算总误差

分别计算o1和o2的误差,总误差为两者之和
2.链式法则

计算
:


计算
:

计算
:

最后三者相乘:

更新w5的值:

隐含层---->隐含层

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

先计算
:***************************
因为在正向传播中Eo1:

outo1:

带入的话就是对neto1求导,所以:

为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

最后,更新w1的权值:

softmax反向传播
手打例子一步一步带你看懂softmax函数以及相关求导过程
交叉熵函数形式如下:
其中y代表我们的真实值,a代表我们softmax求出的值。i代表的是输出结点的标号
在真实中,如果只预测一个结果,那么在目标中只有一个yi结点的值为1,哎呀,这太好了,除了一个为1,其它都是0,那么所谓的求和符合,就是一个幌子,我可以去掉啦!
那么Loss就变成了Loss = -yjlnaj(yj,aj的j均为下标,公式不好打),累和已经去掉了,太好了。现在我们要开始求导数了!
我们在整理一下上面公式,为了更加明白的看出相关变量的关系:
其中yj=1,,那么形式变为 Loss = -lnaj
这里分为俩种情况:
这里i是aj的softmax函数分子z的下标
j=i对应例子里就是如下图所示:
比如我选定了j为4,那么就是说我现在求导传到4结点这!
那么由上面求导结果再乘以交叉熵损失函数求导
Loss = -lnaj,它的导数为-1/aj,与上面的aj(1-aj)相乘为aj-1(形式非常简单,这说明我只要正向求一次得出结果,然后反向传梯度的时候,只需要将它结果减1即可,后面还会举例子!)那么我们可以得到Loss对于4结点的偏导就求出了了(这里假定4是我们的预计输出)
第二种情况为:
这里对应我的例子图如下,我这时对的是j不等于i,往前传
那么由上面求导结果再乘以交叉熵损失函数求导
Loss = -lnaj,它的导数是-1/aj,与上面-ajai相乘为ai(形式非常简单,这说明我只要正向求一次得出结果,然后反向传梯度的时候,只需要将它结果保存即可,后续例子会讲到)
下面我举个例子来说明为什么计算会比较方便,给大家一个直观的理解
举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 2, 3, 4 ],
那么经过softmax函数作用后概率分别就是=[e^2/(e^2+e^3+e^4),e^3/(e^2+e^3+e^4),e^4/(e^2+e^3+e^4)] = [0.0903,0.2447,0.665],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665],是不是非常简单!!然后再根据这个进行back propagation就可以了
浅层神经网络 反向传播推导:MSE softmax的更多相关文章
- ubuntu之路——day5(今天看了浅层神经网络的数学推导过程)
1.初始化 2.前向传播 导数比较好理解 3.反向传播 全符号积分的推导看得我头有点晕 最后唤起我依稀的线代回忆 感谢吴恩达老师的反向传播讲解,第一遍看的有点晕,然后仔细看了一下又找了个B站的推导就懂 ...
- 人工神经网络反向传播算法(BP算法)证明推导
为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下. (原文:https://blog.csdn.net/weixin_41718085/a ...
- 【python实现卷积神经网络】卷积层Conv2D反向传播过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 3. 浅层神经网络)
=================第3周 浅层神经网络=============== ===3..1 神经网络概览=== ===3.2 神经网络表示=== ===3.3 计算神经网络的输出== ...
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第三周:浅层神经网络(Shallow neural networks) -课程笔记
第三周:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Network Overview) 使用符号$ ^{[
- deeplearning.ai 神经网络和深度学习 week3 浅层神经网络 听课笔记
1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...
- deeplearning.ai 神经网络和深度学习 week3 浅层神经网络
1. 第i层网络 Z[i] = W[i]A[i-1] + B[i],A[i] = f[i](Z[i]). 其中, W[i]形状是n[i]*n[i-1],n[i]是第i层神经元的数量: A[i-1]是第 ...
- tensorFlow(四)浅层神经网络
tensorFlow见基础 实验 MNIST数据集介绍 MNIST是一个手写阿拉伯数字的数据集. 其中包含有60000个已经标注了的训练集,还有10000个用于测试的测试集. 本次实验的任务就是通过手 ...
- 神经网络反向传播算法&&卷积神经网络
听一遍课程之后,我并不太明白这个算法的奇妙之处?? 为啥? 神经网络反向传播算法 神经网络的训练依靠反向传播算法,最开始输入层输入特征向量,网络层计算获得输出,输出层发现输出和正确的类号不一样,这时就 ...
随机推荐
- MySQL数据库维护、备份、和复制
预防性维护的基本原则:1)启动MySQL服务器提供的自动恢复功能2)有计划的开展预防心维护工作,定期对表进行检查,日常的表检查有助于及时发现各种小问题,并在问题变得更糟之前将其纠正.3)建立数据库备份 ...
- opencv:图像的掩码操作
示例代码: #include <opencv.hpp> using namespace cv; int main() { Mat src = imread("005.jpg&qu ...
- html03表单
<!DOCTYPE HTML> <html> <head> <title>用户登录的表单</title> </head> < ...
- pip国内镜像(清华大学镜像)
网上搜到的pip国内镜像大部分是豆瓣的 http://pypi.douban.com/simple/ 但是根本不全,很多包没有 所以推荐清华大学的 https://pypi.tuna.tsinghua ...
- Python 调用C函数
/******************************************************************** * Python 调用C函数 * 说明: * Tony在处理 ...
- jQuery学习_具备吸附功能的拖曳框
在线演示:http://sandbox.runjs.cn/show/2drrwkrx 关键点:保持一个不变,鼠标拖动时与边框的距离 === 鼠标左击时与边框的距离 源码: <!DOCTYPE h ...
- Linux环境安装redis
redis官网地址:http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget ...
- php通过存储过程传入汉字参数并写入数据库
写入数据库,汉字为???样式的乱码,后根据网上介绍的方法,参数前加N,数据库汉字内容变成空白. 解决方法,在PHP中先转为base64,再在mysql中base64解码,前提先保证mysql中有bas ...
- 洛谷 1291 [SHOI2002]百事世界杯之旅
题目:https://www.luogu.org/problemnew/show/P1291 大水题!套路!模板! 稍微注意一下输出就行了. #include<iostream> #inc ...
- git常用命令小结
1.ssh连接方式 公钥生成ssh-keygen -t rsa -C "764432054@qq.com"在用户家目录下的.ssh目录下生成 id_rsa ,id_rsa.pub ...