《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析
这一章的代码解读的难点是:
涉及到两个函数的求导问题。
①sigmoid函数的求导:
∂yj∂xj=yj(1−yj)\frac{\partial y_j}{\partial x_j}=y_j(1-y_j)∂xj∂yj=yj(1−yj)
出处是[2]
②softmax函数的求导:
∂E∂zi=ai−yi\frac{\partial E}{\partial z_i}=a_i-y_i∂zi∂E=ai−yi
出处是[1]
、------------------------------------------
第四章的整个神经网络的结构是:
输入层:784个节点(无激活函数)
隐藏层:50个节点(激活函数:sigmoid)
输出层:10个节点(激活函数:softmax)
下面的维度检查中的100,是因为一个batch_size=100
、------------------------------------------
代码变量与神经网络结构之间的具体对应关系:
输入x,
第一层输入a1,输出z1
第二层输入a2,输出y
、------------------------------------------
理论与神经网络结构之间的具体对应关系是:
输入x,
第一层输入x1,输出y1
第二层输入x2,输出y2
、------------------------------------------
According to [2]:
△w
=-ε∂E∂w=-\varepsilon\frac{\partial E}{\partial w}=-ε∂w∂E (8)
=-ε∂E∂wji=-\varepsilon\frac{\partial E}{\partial w_{ji}}=-ε∂wji∂E (6)
=-ε∂E∂xj⋅yi=-\varepsilon\frac{\partial E}{\partial x_j}·y_i=-ε∂xj∂E⋅yi
≈-εy−tbatch_num⋅z1.T\approx -\varepsilon \frac{y-t}{batch\_num}·z1.T≈-εbatch_numy−t⋅z1.T(代码中的变量)
=-ε⋅grads[′W2′]=-\varepsilon·grads['W2']=-ε⋅grads[′W2′](代码中的变量)
变量名称 | 对应的理论名称 | 变量维度 |
---|---|---|
a1a1a1 | x1(隐藏层输入)x_1(隐藏层输入)x1(隐藏层输入) | (100,50) |
z1z1z1 | y1(隐藏层输出)y_1(隐藏层输出)y1(隐藏层输出) | (100,50) |
a2a2a2 | x2(输出层输入)x_2(输出层输入)x2(输出层输入) | (100,10) |
yyy | y2(输出层输出)y_2(输出层输出)y2(输出层输出) | (100,10) |
da1da1da1 | ∂E∂x2⋅w21\frac{\partial E}{\partial x_2}·w_{21}∂x2∂E⋅w21 | (100,50) |
dz1dz1dz1 | ∂E∂x2⋅∂x2∂y1⋅∂y1∂x1\frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1}∂x2∂E⋅∂y1∂x2⋅∂x1∂y1 =∂E∂x2⋅w21⋅[y1⋅(1−y1)]\frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)]∂x2∂E⋅w21⋅[y1⋅(1−y1)] | (100,50) |
dy=y−tbatch_numdy=\frac{y-t}{batch\_num}dy=batch_numy−t | ∂E∂x2\frac{\partial E}{\partial x_2}∂x2∂E(这里的x2x_2x2是一个矢量,整体表示100条数据对各个输出节点的误差贡献) | (100, 10) |
z1.Tz1.Tz1.T | yiy_iyi | (50, 100) |
grads[′b2′]grads['b2']grads[′b2′] | ∂E∂x2\frac{\partial E}{\partial x_2}∂x2∂E | (10,) |
grads[′W2′]grads['W2']grads[′W2′] | ∂E∂w21\frac{\partial E}{\partial w_{21}}∂w21∂E | (50,10) |
grads[′W1′]grads['W1']grads[′W1′] | ∂E∂x2⋅∂x2∂y1⋅∂y1∂x1⋅∂x1∂w10=∂E∂x2⋅w21⋅[y1⋅(1−y1)]⋅x\frac{\partial E}{\partial x_2}·\frac{\partial x_2}{\partial y_1}·\frac{\partial y_1}{\partial x_1}·\frac{\partial x_1}{\partial w_{10}}=\frac{\partial E}{\partial x_2}·w_{21}·[y_1·(1-y_1)]·x∂x2∂E⋅∂y1∂x2⋅∂x1∂y1⋅∂w10∂x1=∂x2∂E⋅w21⋅[y1⋅(1−y1)]⋅x | (784,50) |
grads[′b1′]grads['b1']grads[′b1′] | ∂E∂x1\frac{\partial E}{\partial x_1}∂x1∂E | (50,) |
关于上述表格中的“y−t”“y-t”“y−t”的出处,可以参考[1]:
这里的grads[′b2′]grads['b2']grads[′b2′]推导如下:
∂E∂b2=∂E∂x2∂x2∂b2=∂E∂x2∂(w21⋅y1+b2)∂b2=∂E∂x2\frac{\partial E}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial x_2}{\partial b_2}=\frac{\partial E}{\partial x_2}\frac{\partial(w_{21}·y_1+b2)}{\partial b_2}=\frac{\partial E}{\partial x_2}∂b2∂E=∂x2∂E∂b2∂x2=∂x2∂E∂b2∂(w21⋅y1+b2)=∂x2∂E
grads[′b1′]grads['b1']grads[′b1′]推导推导同理。
--------------------------------------------
为什么在计算grads[′b1′]grads['b1']grads[′b1′]和grads[′b2′]grads['b2']grads[′b2′]时进行求和?
与后面的batch_num进行配套使用,获取该轮batch训练得到的bjbjbj的平均值作为最终的模型参数
--------------------------------------------
关于这里batch_num出现在dy中不太好理解,其实我们可以看到batch_num最终进入了grads[′b2′]中,所以其含义是对100条数据产生的bj的和取了一个平均,作为这轮batch训练后的得到的偏置bjgrads['b2']中,所以其含义是对100条数据产生的b_j的和取了一个平均, 作为这轮batch训练后的得到的偏置b_jgrads[′b2′]中,所以其含义是对100条数据产生的bj的和取了一个平均,作为这轮batch训练后的得到的偏置bj
--------------------------------------------
注意:
softmax以及sigmoid的求导结果是不一样的.
参考:
[1]softmax with cross-entropy loss求导(转载+细节整理)
[2]《learning representations by back-propagating errors》
《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析相关推荐
- 深度学习入门基于Python的理论与实现_第一章_Python入门(原创笔记)
前言 此书使用Python作为编程语言,尽可能地少使用外部库,从零开始实现深度学习的程序. 此书从简单的机器学习问题开始,最终实现一个能高精度地识别图像的系统. 此书以图像识别为主题,主要学习使用深度 ...
- 《深度学习入门 基于Python的理论与实现》书中代码笔记
源码笔记[仅为个人笔记记录] 第三章 sigmoid函数 # coding: utf-8 import numpy as np import matplotlib.pylab as pltdef si ...
- 深度学习入门 基于Python的理论与实现
作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现
- 《深度学习入门——基于Python的理论与实现》笔记
PS:写这篇博客主要是记录下自己认为重要的部分以及阅读中遇到的些问题,加深自己的印象. 附上电子书及源代码: 链接:https://pan.baidu.com/s/1f2VFcnXSSK-u3wuvg ...
- 深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐
深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐 书籍封面 1-图灵网站下载 书里也说了,可以图灵网站下载https://www.ituring.com.cn/book/ ...
- 《深度学习入门-基于Python的理论与实现》学习笔记1
<深度学习入门-基于Python的理论与实现>学习笔记1 第一章Python入门 Python是一个简单.易读.易记的编程语言,可以用类似于英语的语法进行编写程序,可读性高,且能写出高性能 ...
- 《深度学习入门--基于python的理论与实现》——斋藤康毅读书笔记
<深度学习入门--基于python的理论与实现>读书笔记(第二章) 写在前面 第二章:感知机 2.1感知机是什么 2.2简单的逻辑电路 2.2.1与门(and gate) 2.2.2与非门 ...
- python从入门到精通 邮电出版社_《人民邮电出版社Python深度学习入门:基于PYTHON的理论与实现》【价格 目录 书评 正版】_中国图书网...
译者序 xiii 前言 xv 第 1 章 Python入门 1 1.1 Python是什么 1 1.2 Python的安装 2 1.2.1 Python版本 2 1.2.2 使用的外部库 2 1.2. ...
- 《深度学习入门——基于Python的理论与实现》斋藤康毅学习笔记(二)
第二章 感知机 1逻辑门 错误:python 出现的异常 inconsistent use of tabs and spaces in indentation 意思是:在缩进中不一致地使用制表符和空格 ...
最新文章
- Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用
- VC解决error C2065: 'timeGetTime' : undeclared identi
- 网站优化之网站文章更新需注意哪些问题?
- Redis入门(暂不更新)
- 并查集:P1196 [NOI2002] 银河英雄传说
- 内部设计师揭秘!王者峡谷中竟有隐藏的c++代码??!!腾讯已经炸了!!!
- Caffe 议事(一):从零开始搭建 ResNet 之 残差网络结构介绍和数据准备
- Android时间与服务器同步方法
- 高斯克吕格投影,将经纬度转换为投影坐标
- 税务大比武网络攻防复习(完整版)
- 最全的大数据采集方法分类
- WorldFirst靠谱吗?跨境收款工具万里汇WorldFirst介绍!
- [教学] [PCEVA超频宝典之CPU进阶篇]AM3平台超频教程
- [转贴]Web地图服务:GIS走近你我
- 后谷歌时代 GoogleAdsense申请攻略和新玩法
- MP3文件结构及编解码流程
- 【史上最坑爹的游戏】001 游戏介绍及开始页面的实现
- ToolTips 设置背景颜色以及字体颜色方法
- Lasso回归(Stata)
- 又一智能汽车新赛道进入「量产期」,谁已率先分走这块蛋糕?
热门文章
- 51 NOD 1238 最小公倍数之和 V3
- ural1297 后缀数组+RMQ
- 何谓CRT,CRT的由来
- JS-立即执行函数(function(){...})() amp;amp; (function(){...})()
- [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
- 今天刚学了jQuery ,今天利用jQuery的语法一行来写出选项卡
- 把一个div的属性都打印出来
- Iterator 遍历器的简单使用
- 浏览器窗口控制---使用localStorage
- Icon class生成器(Python)