文章目录

  • Vanishing gradient
  • ReLU
    • thinner linear network
    • How to train
    • ReLU-variant
  • Maxout
    • thinner linear network
    • Learnable Feature
      • Maxout→\rightarrow→ReLU
      • Maxout→\rightarrow→more than ReLU
    • How to train
  • Summary

在手写数字识别的训练准确度的实验,使用sigmoid function。可以发现当层数越多,训练结果越差,训练集上准确度就下降很多。但是这个不是当层数多了以后就overfitting,因为这个是在training set上的结果,所以这不是overfitting的问题。

Vanishing gradient

当网络比较深的时候会出现vanishing Gradient problem,比较靠近input的几层gradient值十分小,靠近output的几层gradient会很大,当你设定相同的learning rate时,靠近input layer 的参数updata会很慢,靠近output layer的参数updata会很快。常常出现的现象是前几层的参数还没有太大变化的时候,后几层的参数就已经收敛了。所以在靠近input的地方,参数几乎还是random的时候,output就已经根据这些random的结果找到了一个local minimum,然后就收敛了。这个时候参数的loss下降的速度变得很慢,gradient已经接近于0了,但此时network几乎base on random的参数,所以model的参数并没有被训练充分,那在training data上得到的结果肯定是很差的。

梯度估计
假设neural network有一个参数www,loss funcation lll对参数www的梯度∂l∂w\frac{\partial l}{\partial w}∂w∂l​,如何估计这个偏微分呢,方法是对参数www做微小变动△w△w△w,分析这个变动对loss的影响,也近似可以分析这个变动对output的影响。

梯度衰减
假设给一个靠近input layer的参数www加上变动△w△w△w。假设我们的△w很大,通过sigmoid function时这个output会很小(因为sigmoid function会将值压缩到0到1之间,将参数变化衰减),每通过一次sigmoid function就会decay一次,hidden layer很多的情况下,w+△ww+△ww+△w最后对loss 的影响将会非常小,也就是∂l∂w\frac{\partial l}{\partial w}∂w∂l​将会非常小。

理论上我们可以设计dynamic learning rate或者train RBM来解决这个问题,但直接改activation function可以从根本上解决问题。


ReLU

Rectified Linear Unit(整流线性单元函数,又称修正线性单元)
a={0z<0zz≥0a= \begin{cases} 0& \text{z<0}\\ z& \text{z≥0} \end{cases} a={0z​z<0z≥0​
跟sigmoid function比起来,选择ReLU的理由如下:

  • 运算快
  • 生物上的观察
  • 无穷多bias不同的sigmoid叠加会得到ReLU
  • 处理Vanishing gradient

thinner linear network

whole network thinner linear network

ReLU可以看做是两条linear funcation的组合,当input>0时,ReLU表现为linear funcation a=za=za=z,当input<0时,ReLU表现为linear funcation a=0a=0a=0,而当某个neuron因为input小于0而导致output=0时,该neuron被屏蔽(对整个network没有任何作用),因此可以把它们从network中拿掉。拿掉所有output为0,此时整个network就变成了thinner linear network

How to train

微分问题:梯度下降要求loss funcation可以对参数作微分,ReLU是一个分段函数,存在不可微分点,怎么微分?

实际上我们真正训练的并不是一个含有ReLU函数的network,而是一个化简后的thinner linear network。依据某一特定的data,屏蔽掉输出为0的neuron后,network变为thinner linear network,剩下的neuron上的activiation funcation仅为linear,因此可以轻松求微分。

linear问题:通常使用激励函数是要做non-linear处理,也是为了比较复杂的model,而使用ReLU会让network整体变成一个linear model吗?这样得到的function不是会变得很弱吗?

使用ReLU之后的network整体来说还是non-linear的,thinner linear network的结构依输入数据而定,thinner linear network确实是线性的,但training data中由多笔数据,它们输入到network所形成的thinner linear network的结构并不统一,每笔data所训练的参数也不同,最终network的所有参数均可以被训练到,因此从整体看network是非线性的。

ReLU-variant

ReLU存在缺陷,当input<0时,output=0,此时微分值gradient也为0,没办法update参数。

Leaky ReLU
a={0.01zz<0zz≥0a= \begin{cases} 0.01z& \text{z<0}\\ z& \text{z≥0} \end{cases} a={0.01zz​z<0z≥0​

  • input<0时,gradient=0.01,仍然可以微分后更新值

Parametric ReLU
a={αzz<0zz≥0a= \begin{cases} \alpha z& \text{z<0}\\ z& \text{z≥0} \end{cases} a={αzz​z<0z≥0​

  • input<0时,α\alphaα作为梯度,它被作为network中的一个参数,可以通过training data学出来,甚至每个neuron都可以有不同的α\alphaα值

Maxout

Maxout与在layer上做Max Pooling相似,它和原来的network不同之处在于,它把neuron按一定规则分组,当input乘以权重计算出所有neuron的zzz,然后选取其中的最大值当做这个组的output,代替activation function,组中包含neuron的个数是network structure里一个需要被调的参数。

thinner linear network

根据具体输入的data,max函数选择的neuron确定,其他neuron被屏蔽,把其他neuron从network中去掉从而得到thinner linear network。

Learnable Feature

Maxout→\rightarrow→ReLU
neuron输入 模拟结果

ReLU:

  • input:z=wx+bz=wx+bz=wx+b
  • output: a=σ(z)a=\sigma(z)a=σ(z)

Maxout:

  • input:z1=wx+bz2=0z_1=wx+b\ \ \ \ z_2=0z1​=wx+b    z2​=0
  • output:a=max(z1,z2)a = max(z1,z2)a=max(z1,z2)

Maxout→\rightarrow→more than ReLU

除了ReLU,Maxout还可以实现更多不同的activation function

neuron输入 模拟结果

ReLU:

  • input:z=wx+bz=wx+bz=wx+b
  • output: a=σ(z)a=\sigma(z)a=σ(z)

Maxout:

  • input:z1=wx+bz2=w′x+b′z_1=wx+b\ \ \ \ z_2=w'x+b'z1​=wx+b    z2​=w′x+b′
  • output:a=max(z1,z2)a = max(z1,z2)a=max(z1,z2)

这个时候你得到的activation function的形状,是由neuron的input的参数w,b,w′,b′w,b,w',b'w,b,w′,b′决定的,因此它是一个Learnable Activation Function,具体的形状可以根据training data去generate出来。


How to train

与ReLU的情况一样,实际上我们真正训练的并不是一个含有max函数的network,而是一个化简后的thinner linear network。

Max operation是多个linear的组合,根据具体的data,neuron采用的linear funcation确定,此时network的结构就会确定,依据这个linear funcation进行微分,那么就可以使用backpropagation的方法去训练这个thinner network中的参数。由于我们有很多笔training data,所以network的structure在训练中不断地变换,实际上最后每一个参数都会被训练到。

Summary

ReLU与Maxout的区别

  1. ReLU作用于单个neuron,依据neuron input选择激活或者屏蔽该neuron
    Maxout作用于一组neuron,依据neuron input选择激活最大input的neuron

  2. ReLU是两组linear函数的组合
    Maxout可以是两个或多个linear函数的组合

  3. ReLU是静态的
    Maxout是动态的,每个neuron的input(z=w1x1+w2x2z=w_1x_1+w_2x_2z=w1​x1​+w2​x2​)组成maxout的一个linear函数

ReLU与Maxout的相似处

ReLU与Maxout可以使用的的原理大体是相同的,都是将network简化为thinner linear network进行训练

微分角度:整体看待network时,max函数无法微分,但在具体的实践上,从thinner linear network的角度,max函数被转化为某个具体linear函数时,便可以微分。

non-linear角度:以thinner linear network的角度,network属于linear network,可以最终化简为linear funcation,但总整体看,就是一个复杂的network。

Vanishing gradient and activiation funcation(ReLU、Maxout)相关推荐

  1. 神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

    神经网络激活函数汇总(Sigmoid.tanh.ReLU.LeakyReLU.pReLU.ELU.maxout) 常规 sigmoid 和 tanh sigmoid 特点:可以解释,比如将0-1之间的 ...

  2. 速看!deep learning(rnn、cnn)调参的经验

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|视觉算法 话说三人行,必有我师焉.有哪些deep lea ...

  3. 你有哪些 Deep learning(RNN、CNN)调参的经验?

    来自 | 知乎-hzwer,北京大学 https://www.zhihu.com/question/41631631/answer/859040970 编辑 | 机器学习算法与自然语言处理,Dataw ...

  4. 你有哪些深度学习(rnn、cnn)调参的经验?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 你有哪些deep learning(rnn.cnn)调参的经验? ...

  5. 05.数据的深度分析(数据挖掘、机器学习)--《数据科学概论》

    前言:基于人大的<数据科学概论>第五章,数据的深度分析(数据挖掘.机器学习).主要是机器学习与数据挖掘.具体的算法.主流工具.特征选择的内容. 文章目录 一.机器学习与数据挖掘 (1)什么 ...

  6. CNN模型复杂度(FLOPs、MAC)、参数量与运行速度

    CNN模型复杂度(FLOPs.MAC).参数量与运行速度 先转载一下,有空再来整理 文章目录 0. 模型复杂度简介 1. 模型复杂度之一:模型参数量的计算方法 卷积层参数量计算 全连接层参数量计算 2 ...

  7. 【一】MADDPG-单智能体|多智能体总结(理论、算法)

    相关文章: [一]MADDPG-单智能体|多智能体总结(理论.算法) [二]MADDPG--单智能体|多智能体总结算法实现--[追逐游戏] [一]-环境配置+python入门教学 [二]-Parl基础 ...

  8. 日月光华深度学习(一、二)深度学习基础和tf.keras

    日月光华深度学习(一.二)深度学习基础和tf.keras [2.2]--tf.keras实现线性回归 [2.5]--多层感知器(神经网络)的代码实现 [2.6]--逻辑回归与交叉熵 [2.7]--逻辑 ...

  9. 求解非约束优化问题的拟牛顿方法(BFGS、DFP)

    求解非约束优化问题的拟牛顿方法(BFGS.DFP) 拟牛顿法是一种以牛顿法为基础设计的,求解非线性方程组或连续的最优化问题函数的零点或极大.极小值的算法.当牛顿法中所要求计算的雅可比矩阵或Hessia ...

最新文章

  1. 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
  2. mysql client 5.1.34_mysql最新版
  3. PyQt5 图片兼容性问题:libpng warning: bKGD: invalid.,原因及解决办法。
  4. linux图形界面编程基本知识
  5. 2017年,软件开发全过程,描述得不能再详细了
  6. scala char_Scala中的Char数据类型
  7. 【数据挖掘】数据挖掘和数据分析基础
  8. Windows 使用windump进行循环抓包
  9. Arduino 硬件开发 教程收集
  10. SQL 实战教程(八)
  11. 写一个函数将传入的字符串转换成驼峰表示法
  12. 正则表达式案例分析 (二)
  13. 这届年轻人为什么都不爱看电视了?
  14. 不可逆调速matlab,双闭环不可逆直流调速系统课程设计(matlab仿真设计)
  15. css在文字中间插入下划线,css实现文字自定义下划线
  16. 怎么识别伪装IP的网络攻击
  17. Java之字符串数组元素的排列与组合(递归实现)
  18. 华为云服务器 登录与配置 Mysql
  19. uniapp框架+app打包发布
  20. DRN: A Deep Reinforcement Learning Framework for News Recommendation学习

热门文章

  1. [计算机网络]第二章——应用层
  2. 部署keepalive+lvs多master节点高可用
  3. domcer服务器按键显示怎么调,我的世界domcer怎么打开按键显示_我的世界按键大全...
  4. TabControl控件在左侧绘制tabPage页面
  5. 费雪耶兹(Fisher–Yates) 也被称作高纳德( Knuth)随机置乱算法
  6. 自然语言处理研究方向--文本相似度论文合集(不断更新)
  7. 中秋将至,想吃月饼了吗?
  8. sdk烧写flash报error:given target do not exis处理方式
  9. matlab 将子文件下同名称文件移植到同一文件夹下并按序排列重命名n.bmp,n=1,2,3...
  10. 【前端面试课程重点总结】