摘要

本文给出 MaxPool 函数的定义, 并求解其在反向传播中的梯度

相关

配套代码, 请参考文章 :

Python和PyTorch对比实现池化层MaxPool函数及反向传播

系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981

正文

池化是一种尺寸缩小操作, 可以将大尺寸的图片缩小, 集约特征.

1. 池化层 MaxPool 函数的定义

本文约定矩阵元素的脚标从 0 开始.

当 X 为 m x n 矩阵, 卷积核尺寸 2 x 2, 步长为 1 时 :
yij=max(xi,j,  xi,j+1,  xi+1,j,  xi+1,j+1)  i⩽m−2  j⩽n−2y_{ij} = max(x_{i,j},\; x_{i,j+1},\; x_{i+1,j},\; x_{i+1,j+1})\\ \;\\ i\leqslant m-2 \\ \;\\ j\leqslant n-2 \\ yij​=max(xi,j​,xi,j+1​,xi+1,j​,xi+1,j+1​)i⩽m−2j⩽n−2
当 X 为 m x n 矩阵, 卷积核尺寸 p x q, 步长为 1 时 :
r=0,1,2,3,⋯ ,p−1s=0,1,2,3,⋯ ,q−1yij=max(xi+r,j+s)i⩽m−pj⩽n−qr = 0,1,2,3,\cdots,p-1\\ s = 0,1,2,3,\cdots,q-1\\ y_{ij} = max(x_{i+r,j+s}) \\ i\leqslant m-p\\ j\leqslant n-q\\ r=0,1,2,3,⋯,p−1s=0,1,2,3,⋯,q−1yij​=max(xi+r,j+s​)i⩽m−pj⩽n−q
当 W 为 p x q 矩阵, 步长为 t, 为保证整除, 填充后的 X 是 m x n 矩阵时 :
r=0,1,2,3,⋯ ,p−1s=0,1,2,3,⋯ ,q−1yij=max(xi⋅t+r,j⋅t+s)i⩽(m−p)/tj⩽(n−q)/tr = 0,1,2,3,\cdots,p-1\\ s = 0,1,2,3,\cdots,q-1\\ y_{ij} = max(x_{i\cdot t+r,j\cdot t+s})\\ i\leqslant (m-p)/t\\ j\leqslant (n-q)/t\\ r=0,1,2,3,⋯,p−1s=0,1,2,3,⋯,q−1yij​=max(xi⋅t+r,j⋅t+s​)i⩽(m−p)/tj⩽(n−q)/t

2. 反向传播

设卷积核尺寸为 p x q, 步长为 t, 为保证整除, 填充后的 X 是 m x n 矩阵, 经 MaxPooling 卷积得到 g x h 矩阵 Y, 往前 forward 传播得到误差值 error (标量 e ). 上游的误差梯度向量 ∇e(Y)\nabla e_{(Y)}∇e(Y)​ 已在反向传播时得到, 求 e 对 X 的梯度.
已知 :
r=0,1,2,3,⋯ ,p−1s=0,1,2,3,⋯ ,q−1yij=max(xi⋅t+r,j⋅t+s)i⩽(m−p)/tj⩽(n−q)/tr = 0,1,2,3,\cdots,p-1\\ s = 0,1,2,3,\cdots,q-1\\ y_{ij} = max(x_{i\cdot t+r,j\cdot t+s})\\ i\leqslant (m-p)/t\\ j\leqslant (n-q)/t\\ r=0,1,2,3,⋯,p−1s=0,1,2,3,⋯,q−1yij​=max(xi⋅t+r,j⋅t+s​)i⩽(m−p)/tj⩽(n−q)/t
e=forward(Y)  ∇e(Y)=dedY=(∂e/∂y11∂e/∂y12∂e/∂y13⋯∂e/∂y1h∂e/∂y21∂e/∂y22∂e/∂y23⋯∂e/∂y2h∂e/∂y31∂e/∂y32∂e/∂y33⋯∂e/∂y3h⋮⋮⋮⋱⋮∂e/∂yg1∂e/∂yg2∂e/∂yg3⋯∂e/∂ygh)e=forward(Y)\\ \;\\ \nabla e_{(Y)}=\frac{de}{dY}=\begin{pmatrix} \partial e/ \partial y_{11}&\partial e/ \partial y_{12}&\partial e/ \partial y_{13}&\cdots& \partial e/ \partial y_{1h}\\ \partial e/ \partial y_{21}&\partial e/ \partial y_{22}&\partial e/ \partial y_{23}&\cdots& \partial e/ \partial y_{2h}\\ \partial e/ \partial y_{31}&\partial e/ \partial y_{32}&\partial e/ \partial y_{33}&\cdots& \partial e/ \partial y_{3h}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ \partial e/ \partial y_{g1}&\partial e/ \partial y_{g2}&\partial e/ \partial y_{g3}&\cdots& \partial e/ \partial y_{gh}\\ \end{pmatrix} e=forward(Y)∇e(Y)​=dYde​=⎝⎜⎜⎜⎜⎜⎛​∂e/∂y11​∂e/∂y21​∂e/∂y31​⋮∂e/∂yg1​​∂e/∂y12​∂e/∂y22​∂e/∂y32​⋮∂e/∂yg2​​∂e/∂y13​∂e/∂y23​∂e/∂y33​⋮∂e/∂yg3​​⋯⋯⋯⋱⋯​∂e/∂y1h​∂e/∂y2h​∂e/∂y3h​⋮∂e/∂ygh​​⎠⎟⎟⎟⎟⎟⎞​

求解过程 :
∂yij∂xuv={1  ,xuv=max(xi⋅t+r,j⋅t+s)0  ,others,  其他情况\frac{\partial y_{ij}}{\partial x_{uv}}= \left\{ \begin{array}{rr} 1\;, & x_{uv}=max(x_{i\cdot t+r,j\cdot t+s})\\ 0\;, & others,\;其他情况 \end{array} \right. ∂xuv​∂yij​​={1,0,​xuv​=max(xi⋅t+r,j⋅t+s​)others,其他情况​
∂e∂xuv=∑i=0g−1∑j=0h−1∂e∂yij∂yij∂xuv={∂e/∂yij  ,xuv=max(xi⋅t+r,j⋅t+s)0  ,others,  其他情况\frac{\partial e}{\partial x_{uv}} = \sum_{i=0}^{g-1}\sum_{j=0}^{h-1}\frac{\partial e}{\partial y_{ij}}\frac{\partial y_{ij}}{\partial x_{uv}}=\left\{ \begin{array}{rr} {\partial e}/{\partial y_{ij}}\;, & x_{uv}=max(x_{i\cdot t+r,j\cdot t+s})\\ 0\;, & others,\;其他情况 \end{array} \right. ∂xuv​∂e​=i=0∑g−1​j=0∑h−1​∂yij​∂e​∂xuv​∂yij​​={∂e/∂yij​,0,​xuv​=max(xi⋅t+r,j⋅t+s​)others,其他情况​

其中, ∂e/∂yij{\partial e}/{\partial y_{ij}}∂e/∂yij​ 由上游计算得出.

3. 提示

numpy 中的 max, argmax, reshape 函数在实现 MaxPool 时非常好用.

池化层MaxPool函数详解及反向传播的公式推导相关推荐

  1. Batch Normalization函数详解及反向传播中的梯度求导

    摘要 本文给出 Batch Normalization 函数的定义, 并求解其在反向传播中的梯度 相关 配套代码, 请参考文章 : Python和PyTorch对比实现批标准化Batch Normal ...

  2. 【机器学习】详解 BackPropagation 反向传播算法!

    首先介绍一下链式法则 假如我们要求z对x1的偏导数,那么势必得先求z对t1的偏导数,这就是链式法则,一环扣一环 BackPropagation(BP)正是基于链式法则的,接下来用简单的前向传播网络为例 ...

  3. 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导

    https://blog.csdn.net/oBrightLamp/article/details/84069835 正文 在大多数教程中, softmax 和 cross-entropy 总是一起出 ...

  4. L2正则化Regularization详解及反向传播的梯度求导

    摘要 本文解释L2正则化Regularization, 求解其在反向传播中的梯度, 并使用TensorFlow和PyTorch验证. 相关 系列文章索引 : https://blog.csdn.net ...

  5. (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解

    pytorch卷积层与池化层输出的尺寸的计算公式详解 要设计卷积神经网络的结构,必须匹配层与层之间的输入与输出的尺寸,这就需要较好的计算输出尺寸 先列出公式: 卷积后,池化后尺寸计算公式: (图像尺寸 ...

  6. torch.nn模块之池化层详解

    torch中的池化层 1. torch.nn模块中的池化层简介 2. 池化的调用方式 3. 图像池化演示 3.1 最大值池化 3.2 平均值池化 3.3 自适应平均值池化 参考资料 1. torch. ...

  7. 『TensorFlow』卷积层、池化层详解

    一.前向计算和反向传播数学过程讲解 这里讲解的是平均池化层,最大池化层见本文第三小节 二.测试代码 数据和上面完全一致,自行打印验证即可. 1.前向传播 import tensorflow as tf ...

  8. 池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架

    文章目录 MaxPool2d最大池化 AvgPool2d平均池化 AdaptiveAvgPool2d自适应平均池化 池化操作的一个重要的目的就是对卷积后得到的特征进行进一步处理,池化层可以起到对数据进 ...

  9. [深度学习] 池化层函数及其逆过程函数

    池化函数 最大池化函数 一维 class torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indi ...

  10. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

最新文章

  1. 拜托,别问我什么各种Tree了,干就完事!
  2. 警告: deleting object of polymorphic class type which has non_virtual destructor
  3. cmd android list,android cmd 下命令行
  4. Lidgren.Network – an introduction to networking in C# games
  5. 图论--边双连通V-DCC缩点
  6. 安装mysql-connector-python-8.0.11-py3.6遇到问题
  7. Spring Cloud微服务之业务物理删除(十)
  8. javascript基础知识(13) Date
  9. OpenGL调用GPU(七)
  10. Java 序列化漏洞多到修不完
  11. 键盘IO中断调用(INT 16)
  12. java技术体系基础
  13. 《查理·芒格:人类误判心理学》
  14. Codeforces 106C Buns - 多重背包 - 二进制拆分
  15. 苹果电脑QQ邮件服务器,mac电脑如何添加qq邮箱图文教程
  16. 本周最新文献速递20220410
  17. java做橡皮擦效果_顶风作案,html5 canvas实现橡皮擦功能,擦了就知道有惊喜了...
  18. adb删除软件_苹果免越狱如何安装ipa 苹果免越狱安装软件安装教程【详解】
  19. 数据结构15: 有序表抽象数据类型
  20. 机器人控制器编程课程-教案04-综合

热门文章

  1. 雷达原理 知识点汇总
  2. 传教士与野人问题深度优先搜索算法(DFS)-Python实现
  3. 微软bing搜索引擎疑似被屏蔽 国内多地无法访问
  4. 共射级三极管放大电路与其饱和失真与截止失真的分析
  5. 基于python/scipy学习概率统计(2):伯努利分布(Bernoulli Distribution)
  6. hive sql alter table 修改表操作小记
  7. 平面设计有哪几种设计风格,分享平面设计的12种风格
  8. js实现定时弹出广告效果
  9. Bootstrap的Modal模态框取消时有多重阴影
  10. 安利一个很棒的html背景图片网站