Vanishing gradient and activiation funcation(ReLU、Maxout)
文章目录
- 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={0zz<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.01zzz<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={αzzz<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的区别
ReLU作用于单个neuron,依据neuron input选择激活或者屏蔽该neuron
Maxout作用于一组neuron,依据neuron input选择激活最大input的neuronReLU是两组linear函数的组合
Maxout可以是两个或多个linear函数的组合ReLU是静态的
Maxout是动态的,每个neuron的input(z=w1x1+w2x2z=w_1x_1+w_2x_2z=w1x1+w2x2)组成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)相关推荐
- 神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)
神经网络激活函数汇总(Sigmoid.tanh.ReLU.LeakyReLU.pReLU.ELU.maxout) 常规 sigmoid 和 tanh sigmoid 特点:可以解释,比如将0-1之间的 ...
- 速看!deep learning(rnn、cnn)调参的经验
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|视觉算法 话说三人行,必有我师焉.有哪些deep lea ...
- 你有哪些 Deep learning(RNN、CNN)调参的经验?
来自 | 知乎-hzwer,北京大学 https://www.zhihu.com/question/41631631/answer/859040970 编辑 | 机器学习算法与自然语言处理,Dataw ...
- 你有哪些深度学习(rnn、cnn)调参的经验?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 你有哪些deep learning(rnn.cnn)调参的经验? ...
- 05.数据的深度分析(数据挖掘、机器学习)--《数据科学概论》
前言:基于人大的<数据科学概论>第五章,数据的深度分析(数据挖掘.机器学习).主要是机器学习与数据挖掘.具体的算法.主流工具.特征选择的内容. 文章目录 一.机器学习与数据挖掘 (1)什么 ...
- CNN模型复杂度(FLOPs、MAC)、参数量与运行速度
CNN模型复杂度(FLOPs.MAC).参数量与运行速度 先转载一下,有空再来整理 文章目录 0. 模型复杂度简介 1. 模型复杂度之一:模型参数量的计算方法 卷积层参数量计算 全连接层参数量计算 2 ...
- 【一】MADDPG-单智能体|多智能体总结(理论、算法)
相关文章: [一]MADDPG-单智能体|多智能体总结(理论.算法) [二]MADDPG--单智能体|多智能体总结算法实现--[追逐游戏] [一]-环境配置+python入门教学 [二]-Parl基础 ...
- 日月光华深度学习(一、二)深度学习基础和tf.keras
日月光华深度学习(一.二)深度学习基础和tf.keras [2.2]--tf.keras实现线性回归 [2.5]--多层感知器(神经网络)的代码实现 [2.6]--逻辑回归与交叉熵 [2.7]--逻辑 ...
- 求解非约束优化问题的拟牛顿方法(BFGS、DFP)
求解非约束优化问题的拟牛顿方法(BFGS.DFP) 拟牛顿法是一种以牛顿法为基础设计的,求解非线性方程组或连续的最优化问题函数的零点或极大.极小值的算法.当牛顿法中所要求计算的雅可比矩阵或Hessia ...
最新文章
- 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
- mysql client 5.1.34_mysql最新版
- PyQt5 图片兼容性问题:libpng warning: bKGD: invalid.,原因及解决办法。
- linux图形界面编程基本知识
- 2017年,软件开发全过程,描述得不能再详细了
- scala char_Scala中的Char数据类型
- 【数据挖掘】数据挖掘和数据分析基础
- Windows 使用windump进行循环抓包
- Arduino 硬件开发 教程收集
- SQL 实战教程(八)
- 写一个函数将传入的字符串转换成驼峰表示法
- 正则表达式案例分析 (二)
- 这届年轻人为什么都不爱看电视了?
- 不可逆调速matlab,双闭环不可逆直流调速系统课程设计(matlab仿真设计)
- css在文字中间插入下划线,css实现文字自定义下划线
- 怎么识别伪装IP的网络攻击
- Java之字符串数组元素的排列与组合(递归实现)
- 华为云服务器 登录与配置 Mysql
- uniapp框架+app打包发布
- DRN: A Deep Reinforcement Learning Framework for News Recommendation学习
热门文章
- [计算机网络]第二章——应用层
- 部署keepalive+lvs多master节点高可用
- domcer服务器按键显示怎么调,我的世界domcer怎么打开按键显示_我的世界按键大全...
- TabControl控件在左侧绘制tabPage页面
- 费雪耶兹(Fisher–Yates) 也被称作高纳德( Knuth)随机置乱算法
- 自然语言处理研究方向--文本相似度论文合集(不断更新)
- 中秋将至,想吃月饼了吗?
- sdk烧写flash报error:given target do not exis处理方式
- matlab 将子文件下同名称文件移植到同一文件夹下并按序排列重命名n.bmp,n=1,2,3...
- 【前端面试课程重点总结】