梯度下降与ReLU激活函数
14.梯度下降与ReLU激活函数
14.1 梯度下降法
在数学中,梯度表示函数递增速度最快的方向,反之梯度的负方向则表示函数衰减最快的方向。因此,可以通过不断迭代使用梯度下降方法求解到函数的最小值。(可能是局部最小值,也可能是全局最小值),这取决于学习率的选择。如:为了求解函数f(x)=f(x1,x2…xn)f(x)=f(x_1,x_2\dots x_n)f(x)=f(x1,x2…xn)的最小值,则可以从一个起始点:x(0)=(x1(0),x2(0),…xn(0))x^{(0)}=(x_1^{(0)},x_2^{(0)},\dots x_n^{(0)})x(0)=(x1(0),x2(0),…xn(0))开始,不断采用梯度下降法进行求解,直到满足一定的限制条件,如:两次迭代的差值小于某个设定的阈值或迭代次数超过某个 设置的预定值。当i≥0i\geq0i≥0时,梯度下降法可以表示为:
x1(i+1)=x1(i)−η∗∂f∂x1(x(i))…xn(i+1)=xn(i)−η∗∂f∂xn(x(i))\begin{array}{lcl}x_1^{(i+1)}=x_1^{(i)}-η*\frac{\partial f}{\partial x_1}(x^{(i)})\\\dots\\x_n^{(i+1)}=x_n^{(i)}-η*\frac{\partial f}{\partial x_n}(x^{(i)})\end{array}x1(i+1)=x1(i)−η∗∂x1∂f(x(i))…xn(i+1)=xn(i)−η∗∂xn∂f(x(i))。
14.2 ReLU激活函数
激活函数作用为通过多重非线性的叠加,解决复杂的非线性问题,在现实生活中,非线性问题远大于线性问题。假设当前的激活函数均为线性的,则,我们假设有两层,线性函数设为:y=w∗x+by=w*x+by=w∗x+b,第一层为y1=w1∗x+b1y_1=w_1*x+b_1y1=w1∗x+b1,第二层为y2=w2∗y1+b2y_2=w_2*y_1+b_2y2=w2∗y1+b2。则两层叠加以后为y=w2∗(w1∗x+b1)+b2=w2∗w1∗x+w2∗b1+b2y=w_2*(w_1*x+b_1)+b_2=w_2*w_1*x+w_2*b_1+b_2y=w2∗(w1∗x+b1)+b2=w2∗w1∗x+w2∗b1+b2进一步得到:y=(w2∗w1)x+(w2∗b1+b2)y=(w_2*w_1)x+(w_2*b_1+b_2)y=(w2∗w1)x+(w2∗b1+b2)。可见如果使用线性模型做激活函数的话,无论是多少层,最终的结果依然是一个线性模型,无法解决现实生活中绝大部分非线性问题,如下图所示。
在当前,对激活函数的研究主要集中在是否可以加快网络学习速度上。当前,主流的激活函数为ReLU函数。ReLU函数的表达式为ReLU=max(0,x)ReLU=max(0,x)ReLU=max(0,x)。其函数图像和导数图像如下图所示:
其优点分析如下:
- 尤其导数形式 可以看到,其导数值为0或者1,这就意味着不会像Sigmoid函数那样,其导数最大值为0.25,每次遇到激活函数时至少被压缩四分之一。而ReLU函数则直接为 1,这样可以避免在反向传播过程中由于对激活函数的多重导数累积导致的最终梯度消失的问题。(具体原因见反向传播最后的讨论问题)。
- 其函数形式简单,因此在进行函数激活时,相当于只做了一个判断,如果输出大于0,则按照原始输入值输出即可,小于0则激活后的输出值为0。
- 由于其导数形式简单,一次在学习过程中其速度远大于Sigmoid和Tanh函数的学习速度,有研究认为其速度约为Sigmoid或者Tanh的6倍。
- 由于其在负半轴上均为0,因此所有的噪音都会被去除。对噪音的鲁棒性较好。
- 具有一定的生物真实性,下图为基于生物数据绘制的生物神经元激活图,在0以后会有一个激活
- 由于其对负半轴导数为0,则会导致很多神经元不被激活,会导致稀疏,这一点和我们对人脑的认知是一致的,我们认为在一次学习中人脑一种1-4%的神经元被激活。
但是也存在如下的问题:
- ReLu的输出不是以0位中心的:不以0位中心将带来以下问题:
假如a1,a2a_1,a_2a1,a2是两个输入的特征,两个特征分别经过w1,w2w_1,w_2w1,w2激活以后的结果为yyy,经过 softmax以后的结果为LLL,则我们分别在两个方向上进行偏导的求解可以得到:
∂L∂w1=∂L∂y∗∂y∂w1=∂L∂y∗a1\frac{\partial L}{\partial w_1}=\frac{\partial L}{\partial y}*\frac{\partial y}{\partial w_1}=\frac{\partial L}{\partial y}*a_1∂w1∂L=∂y∂L∗∂w1∂y=∂y∂L∗a1
∂L∂w2=∂L∂y∗∂y∂w2=∂L∂y∗a2\frac{\partial L}{\partial w_2}=\frac{\partial L}{\partial y}*\frac{\partial y}{\partial w_2}=\frac{\partial L}{\partial y}*a_2∂w2∂L=∂y∂L∗∂w2∂y=∂y∂L∗a2
由于激活函数ReLU的输出值均大于等于0,因此我们可以知道在w1,w2w_1,w_2w1,w2方向上必然符号相同,也就是w1,w2w_1,w_2w1,w2的符号移动方向必定在第一,第三象限的方向上。由于无法在四个方向上移动,因此其梯度下降的速度就会比较慢,正因为如何其学习速度就慢。 - ReLU在负轴上仍然存在梯度消失的问题,这里认为设定在0处时,其导数为0。也被称为(Dead ReLU)
14.2.1 ReLU函数的改进
为了解决当前ReLU激活函数存在的问题,不少研究者提出各种各样激活函数的改进版本,其中较为出名的改进版本如下:
14.2.1.1 PReLU 激活函数
该函数的定义形式为:
{xx>0αxx⩽0\begin{cases}x&x>0\\\alpha x&x\leqslant0\end{cases}{xαxx>0x⩽0
当α\alphaα的值为0.25时,其函数图像如下:
其优势在于:
- 对x轴的负半轴进行了激活,使得当前的激活函数以0位中心,学习的速度更快
- 解决了负半轴不被激活的问题,因此解决了函数的梯度消失问题
其劣势在于:
- 对负半轴的值虽然进行了激活,但是我们也发现由于负半轴具备较多的噪音,这样的处理不利于对噪音数据的处理。
14.2.1.2 TReLU 激活函数
针对上文提出的在负半轴对噪音处理问题,中国学者提出:TReLU函数,具体形式如下:
{xx>0tan(αx)x⩽0\begin{cases}x&x>0\\tan(\alpha x)&x\leqslant0\end{cases}{xtan(αx)x>0x⩽0
其函数图像如下(在不同α\alphaα下):
14.2.1.3 AReLU激活函数
相比于上文提到的两个激活函数相比,AReLU函数在正负半轴上都进行了改进,且在正半轴上更接近于生物真实性。其函数形式如下:
{ln(x+1)+ax,x>0ax,x⩽0\begin{cases}ln(x+1)+ax,&x>0\\ax,&x\leqslant0\end{cases}{ln(x+1)+ax,ax,x>0x⩽0
其中,这里共享一个aaa作为学习参数,其函数图像如下:
这里其实很明显的一个问题为在负半轴上没有限制其大小,虽然激活了负半轴但是对于噪音数据的处理明显存在问题。同时由于公用一个参数aaa导致的问题时其准确度不高。在此基础上中国学者也进行了探索:
14.2.1.4 LogReLU激活函数
该函数的提出与上面相比对其参数进行了选择使用,如下:
{ln(x+1)+a1x,x>0a2x,x⩽0\begin{cases}ln(x+1)+a_1x,&x>0\\a_2x,&x\leqslant0\end{cases}{ln(x+1)+a1x,a2x,x>0x⩽0
这里他的函数图像与上面相比类似但是其内部核心思想明显不同,其需要学习两个参数,这两个参数的学习需要更多的学习时间,但是却提高了模型的准确度。
14.2.1.5 Bounded ReLU激活函数
该激活函数表示式如下:
{n,x>nx,0⩽x⩽n0x<0\begin{cases}n,&x>n\\x,&0\leqslant x\leqslant n\\0&x<0\end{cases}⎩⎪⎨⎪⎧n,x,0x>n0⩽x⩽nx<0,其函数图像如下(n=6n=6n=6时的情况):
这样解决一个问题,就是当xxx无限大的时候,避免了激活激活超出边界。
也欢迎访问个人网站:www.edumind.tech
梯度下降与ReLU激活函数相关推荐
- 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)
目录 一.概念与定义 二.损失函数/代价函数(loss) 三.梯度下降法 二维w与loss: 三维w与loss: 四.常用激活函数 1.softmax激活函数 2.sigmoid激活函数 3.tanh ...
- 可视化深入理解损失函数与梯度下降 | 技术头条
作者 | Hugegene 译者 | 刘畅 责编 | Rachel 出品 | AI科技大本营(id:rgznai100) [导语]本文对梯度函数和损失函数间的关系进行了介绍,并通过可视化方式进行了详细 ...
- Logistic逻辑回归(sigmod二分类)成本函数推导 及其梯度下降
logistic逻辑回归是比较常用的二分分类,其激活函数适用于各种二分类场景,但是其函数在t极大或者极小的时候趋于饱和会引发梯度消失,影响网络调参使得函数不能很好的收敛 有兴趣的同学可以参阅我的上一篇 ...
- 深度学习(25)随机梯度下降三: 激活函数的梯度
深度学习(25)随机梯度下降三: 激活函数的梯度 1. Activation Functions 2. Deriative 3. Sigmoid/Logistic (1) Derivative (2) ...
- 深度学习_07_2_随机梯度下降_激活函数及梯度损失函数及梯度
07_2_随机梯度下降_激活函数及梯度&损失函数及梯度 激活函数及其梯度 Activation Functions(激活函数) 研究青蛙的神经元有多个输入,比如x0,x1,x2x_0,x_1, ...
- 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数
正值秋招,参考网络资源整理了一些面试笔记,第一篇包括以下7部分. 1.损失函数 2.梯度下降 3.优化算法 4.过拟合和欠拟合 5.正则化与稀疏性 6.归一化 7.激活函数 损失函数 损失函数分为经验 ...
- 神经网络动物园-逻辑回归-激活函数-梯度下降-反向传播-链式法则
转载源自: [日更]子豪兄深度学习与神经网络系列教程_哔哩哔哩_bilibili 神经网络动物园链接: The Neural Network Zoo - The Asimov Institute 其中 ...
- 深度学习必备:随机梯度下降(SGD)优化算法及可视化
补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...
- Lesson 11.1-11.5 梯度下降的两个关键问题反向传播的原理走出第一步:动量法开始迭代:batch和epochs在Fashion—MNIST数据集熵实现完整的神经网络
在之前的课程中,我们已经完成了从0建立深层神经网络,并介绍了各类神经网络所使用的损失函数.本节课开始,我们将以分类深层神经网络为例,为大家展示神经网络的学习和训练过程.在介绍PyTorch的基本工具A ...
最新文章
- 大三Java后端暑期实习面经总结——Java容器篇
- poj 1270(toposort)
- DIY Roomba Virtual Wall
- 小知识汇总----不断更新中...
- Xcode LaunchImage 载入界面大小设置
- 笔记本电脑5年没清灰了_返利网5年估值腰斩,没了P2P六亿对赌难完成
- Springboot starter开发之traceId请求日志链路追踪
- 中国基座臂行业市场供需与战略研究报告
- title()、upper()、lower()的用法
- 原生JavaScript实现异步校验详解
- 最新Axure激活码
- 81-RabbitMQ详解
- 基于百度指数的股票收益率多因子模型研究
- 打印后台处理程序服务怎么开启
- 第五章 动态规划法(必做题)
- Netkeeper联网时报pppoe拨号模块损坏
- 【算法分析】实验 1. 基于贪心的会议安排问题
- Method breakpoint reached日志问题
- python通过ssh通道连接PostgreSQL数据库(mysql等类同)
- 如何在Windows资源管理器中自定义文件夹背景和图标