《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》论文阅读笔记

本文主要是介绍《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》论文阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文原文:http://arxiv.org/abs/1502.01852

论文主要讨论了以ReLU为激活函数的网络的缺陷并提出了改进的激活函数PReLU与新的Kaiming初始化方法

1. PReLU

relu与prelu的几何图像

  1. 前向传播

    • 通道独立: f ( y i ) = max ⁡ ( 0 , y i ) + a i min ⁡ ( 0 , y i ) f\left(y_{i}\right)=\max \left(0, y_{i}\right)+a_{i} \min \left(0, y_{i}\right) f(yi)=max(0,yi)+aimin(0,yi)
    • 通道共享: f ( y i ) = max ⁡ ( 0 , y i ) + a min ⁡ ( 0 , y i ) f\left(y_{i}\right)=\max \left(0, y_{i}\right)+a \min \left(0, y_{i}\right) f(yi)=max(0,yi)+amin(0,yi)

    区别在于通道共享的PReLU对于每个通道都使用相同的 a a a,而通道独立的PReLU对于每个通道 i i i都使用不同的 a i a_{i} ai,这些参数都是与网络同时训练得到

  2. 反向传播
    ∂ E ∂ a i = ∑ y i ∂ E ∂ f ( y i ) ∂ f ( y i ) ∂ a i \frac{\partial \mathcal{E}}{\partial a_{i}}=\sum_{y_{i}} \frac{\partial \mathcal{E}}{\partial f\left(y_{i}\right)} \frac{\partial f\left(y_{i}\right)}{\partial a_{i}} aiE=yif(yi)Eaif(yi)

∂ f ( y i ) ∂ a i = { 0 , if  y i > 0 y i , if  y i ≤ 0 \frac{\partial f\left(y_{i}\right)}{\partial a_{i}}=\left\{\begin{array}{ll}{0,} & {\text { if } y_{i}>0} \\ {y_{i},} & {\text { if } y_{i} \leq 0}\end{array}\right. aif(yi)={0,yi, if yi>0 if yi0

  1. 实验结果

    Snipaste_2019-09-03_09-31-02.png

    • 在ImageNet上仅改变激活函数能得到1.2的提升

    • 越低层的a越远离0而越高层的a越接近0,说明模型在低层时保留了更多的信息,而在高层时提取更多非线性特征

      Snipaste_2019-09-03_09-34-05.png

2. Kaiming初始化

  1. 使用ReLU的网络相比使用sigmoid的网络能更快的收敛,但不良的初始化会导致模型难以训练。

  2. 传统的网络使用高斯分布进行初始化,在训练深层网络时难以收敛(需要使用预训练模型或辅助分类器),Xavier初始化基于激活函数是线性的这一假设,不适用于ReLU及其变体

  3. kaiming初始化过程

    • 对于前向传播: y l = W l x l + b l \mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l} yl=Wlxl+bl

      • x l {x}_{l} xl k 2 c × 1 k^{2} c\times1 k2c×1
      • W l {W}_{l} Wl d × k 2 c d\times k^{2} c d×k2c
      • b l {b}_{l} bl d × 1 d\times 1 d×1

      其中 k k k为输入图像大小, c c c为通道数, d d d为核个数

    • 初始化 w l w_{l} wl x l x_{l} xl都是独立同分布的,则有
      Var ⁡ [ y l ] = n l Var ⁡ [ w l x l ] = n l Var ⁡ [ w l ] E [ x l 2 ] \operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right]=n_{l} \operatorname{Var}\left[w_{l}\right] E\left[x_{l}^{2}\right] Var[yl]=nlVar[wlxl]=nlVar[wl]E[xl2]
      只有在 x l {x}_{l} xl0均值的情况下才有 E [ x l 2 ] = Var ⁡ [ x l ] E\left[x_{l}^{2}\right] = \operatorname{Var}\left[x_{l}\right] E[xl2]=Var[xl],而ReLU激活后 x l = max ⁡ ( 0 , y l − 1 ) x_{l}=\max \left(0, y_{l-1}\right) xl=max(0,yl1)不满足0均值,因此将与Xavier中的情况不符

    • 如果 w l − 1 {w}_{l-1} wl1是关于0的对称分布, b l − 1 = 0 {b}_{l-1}=0 bl1=0,那么** y l − 1 {y}_{l-1} yl1是在0附近的均值为0的对称分布**,当激活函数为ReLU时,有 E [ x l 2 ] = 1 2 Var ⁡ [ y l − 1 ] E\left[x_{l}^{2}\right]=\frac{1}{2} \operatorname{Var}\left[y_{l-1}\right] E[xl2]=21Var[yl1],带入上式得到
      Var ⁡ [ y l ] = 1 2 n l Var ⁡ [ w l ] Var ⁡ [ y l − 1 ] \operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right] Var[yl]=21nlVar[wl]Var[yl1]

    • 若有多层网络,则公式变为
      Var ⁡ [ y L ] = Var ⁡ [ y 1 ] ( ∏ l = 2 L 1 2 n l Var ⁡ [ w l ] ) \operatorname{Var}\left[y_{L}\right]=\operatorname{Var}\left[y_{1}\right]\left(\prod_{l=2}^{L} \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]\right) Var[yL]=Var[y1](l=2L21nlVar[wl])

    • 要使输入输出的方差不变,就需要对于每一层都有
      1 2 n l Var ⁡ [ w l ] = 1 , ∀ l \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l 21nlVar[wl]=1,l

    • 这就能得出对于每一层只要设置 w l w_{l} wl方差为 2 / n l \sqrt{2 / n_{l}} 2/nl 的高斯分布即可

  4. 讨论

    • 使用高斯分布时训练深层网络会出现梯度消失现象

    • 变量的方差会从头到尾保持,如果输入没有标准化,方差的量级将会变得很大导致softmax overflow

    • 使用PReLU后,初始化公式变为 1 2 ( 1 + a 2 ) n l Var ⁡ [ w l ] = 1 \frac{1}{2}\left(1+a^{2}\right) n_{l} \operatorname{Var}\left[w_{l}\right]=1 21(1+a2)nlVar[wl]=1

    • 与Xavier初始化的比较

      • Xavier只考虑 n l Var ⁡ [ w l ] = 1 n_{l} \operatorname{Var}\left[w_{l}\right]=1 nlVar[wl]=1,设置方差为 1 / n l \sqrt{1 / n_{l}} 1/nl

      • Kaiming考虑 1 2 n l Var ⁡ [ w l ] = 1 \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1 21nlVar[wl]=1,设置方差为 2 / n l \sqrt{2 / n_{l}} 2/nl

      • 两种初始化都能使浅层网络收敛,但Kaiming能使深层网络收敛并且速度更快

        Snipaste_2019-09-03_10-20-36.png

      Snipaste_2019-09-03_10-20-28.png

这篇关于《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》论文阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172015

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓