卷积网络的卷积神经网络激活函数数sigmod和relu有什么区别

有谁研究过rectified linear units (ReLUs)?【人工智能吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:58,084贴子:
有谁研究过rectified linear units (ReLUs)?收藏
RT为啥DL用它可以不用pretraining?
百度众包可为您采集文字,图片,视频等多种类型数据.高效高质,获取训练数据好选择!作为人工智能或其他算法训练数据,为您构建有效数据模型提供有力数据支持!
咱是民科,看不懂论文,精神上支持一下。
早期使用sigmoid或tanh激活函数的DL在做unsupervised learning时因为 gradient vanishing problem 的问题会无法收敛。ReLU则这没有这个问题。
DL是什么?
预训练的用处:规则化,防止过拟合;压缩数据,去除冗余;强化特征,减小误差;加快收敛速度。标准的sigmoid输出不具备稀疏性,需要用一些惩罚因子来训练出一大堆接近0的冗余数据来,从而产生稀疏数据,例如L1、L1/L2或Student-t作惩罚因子。因此需要进行无监督的预训练。而ReLU是线性修正,公式为:g(x) = max(0, x),是purelin的折线版。它的作用是如果计算出的值小于0,就让它等于0,否则保持原来的值不变。这是一种简单粗暴地强制某些数据为0的方法,然而经实践证明,训练后的网络完全具备适度的稀疏性。而且训练后的可视化效果和传统方式预训练出的效果很相似,这也说明了ReLU具备引导适度稀疏的能力。从函数图形上看,ReLU比sigmoid更接近生物学的激活模型。实际测量数据:纵坐标轴是神经元的放电速率(Firing Rate);横轴是毫秒(ms)基于生物学的数学规则化激活模型(LIF)
网上相关的测试数据很多,随便贴一个:(Softplus是ReLU的圆滑版,公式为:g(x)=log(1+e^x),从上面的结果看,效果比ReLU稍差)ReLU在经历预训练和不经历预训练时的效果差不多,而其它激活函数在不用预训练时效果就差多了。ReLU不预训练和sigmoid预训练的效果差不多,甚至还更好。相比之下,ReLU的速度非常快,而且精确度更高。因此ReLU在深度网络中已逐渐取代sigmoid而成为主流。ReLU导数(分段):x &= 0时,导数为0x &
0时,导数为1softplus的导数刚好是sigmoid:g'(x) = e^x/(e^x+1) = 1/(1+e^-x)
感谢@click4i的答复,感谢@利_刃的有图有文字的解答
把sigmoid的BP网络改成ReLU需要改哪些地方啊,有开源的简单的代码吗?谢谢
能否科普一下rectified linear units,是否和带稀疏化的SVM及LR里正则化(Regularization)是一个道理,起到max(0,f(.))的作用?
赞个禁词“”不明觉厉“”
人工智能机器人 科技改变教育 全新的儿童智能体验馆人工智能机器人 加盟支持 免费加盟培训 指导 整店输出 完美复制
这需要去美国学吗?谷歌学术都进不了当然!需要去美国
呵呵,我努力在看,但看不懂楼主说的是什么。
是从这来的吗?这个Xavier Glorot是什么人?
最近看到一种说法,说是ReLU会形成一种locally competitive network,从而自然的达成sparse coding 的效果。这也可以解释为什么用ReLU就无需pre-training.
在训练的过程中,改变激活函数(或者激活函数的参数),也挺有意思啊。
我想问一下用RELU如何做bp啊?求大神能否给出公式。
没有公式的话给出思路也行,我自己去推。
第一次看到ReLU,觉得这个激活函数好奇怪,怎么这么简单,虽然说是非线性,其实是两段线性函数构成的。也正在研究这个东西,好像最大的贡献是解决了vanishing gradient的问题?
这个DeepLearnToolbox的分支已经可以relu了
搞个qq群讨论吧
好多问题不懂啊
ReLU BP 是这样写的吗?if strcmp(net.layers{n}.type, 'c')
only conv layers has sigm function
%net.fvd = net.fvd .* (net.fv .* (1 - net.fv));
if net.fv &= 0
net.fvd = 1;
net.fvd = 0;
因为tanh sigmoid function在求导传播信号的时候,会削弱gradient。Relu的出现很大程度上解决了这个问题,而且求导速度更快。
你好! 有没有人应用ReLU使网络效果整体变好的,我用了之后大多数都神经元死亡了,而且学习率已经减小了
登录百度帐号推荐应用卷积神经网络(CNN)的参数优化方法
著名:本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络的参数优化方法的一些总结和摘录,并不是我自己的结论和做实验所得到的结果。我想Michael的实验结果更有说服力一些。本书在github上有中文翻译的版本,
最近卷积神经网络(CNN)很火热,它在图像分类领域的卓越表现引起了大家的广泛关注。本文总结和摘录了Michael Nielsen的那本Neural Network and Deep Learning一书中关于深度学习一章中关于提高泛化能力的一些概述和实验结果。力争用数据给大家一个关于正则化,增加卷积层/全连接数,弃权技术,拓展训练集等参数优化方法的效果。
本文并不会介绍正则化,弃权(Dropout), 池化等方法的原理,只会介绍它们在实验中的应用或者起到的效果,更多的关于这些方法的解释请自行查询。
mnist数据集介绍
本文的实验是基于mnist数据集合的,mnist是一个从0到9的手写数字集合,共有60,000张训练图片,10,000张测试图片。每张图片大小是28*28大小。我们的实验就是构建一个神经网络来高精度的分类图片,也就是提高泛化能力。
提高泛化能力的方法
一般来说,提高泛化能力的方法主要有以下几个:
增加神经网络层数
使用正确的代价函数
使用好的权重初始化技术
人为拓展训练集
下面我们通过实验结果给这些参数优化理论一个直观的结果
1. 普通的全连接神经网络的效果
我们使用一个隐藏层,包含100个隐藏神经元,输入层是784,输出层是one-hot编码的形式,最后一层是Softmax层。训练过程采用对数似然代价函数,60次迭代,学习速率η=0.1,随机梯度下降的小批量数据大小为10,没有正则化。在测试集上得到的结果是97.8%,代码如下:
&&& import network3
&&& from network3 import Network
&&& from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
&&& training_data, validation_data, test_data = network3.load_data_shared()
&&& mini_batch_size = 10
&&& net = Network([
FullyConnectedLayer(n_in=784, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
2.使用卷积神经网络 — 仅一个卷积层
输入层是卷积层,5*5的局部感受野,也就是一个5*5的卷积核,一共20个特征映射。最大池化层选用2*2的大小。后面是100个隐藏神经元的全连接层。结构如图所示
在这个架构中,我们把卷积层和chihua层看做是学习输入训练图像中的局部感受野,而后的全连接层则是一个更抽象层次的学习,从整个图像整合全局信息。也是60次迭代,批量数据大小是10,学习率是0.1.代码如下,
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
FullyConnectedLayer(n_in=20*12*12, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
经过三次运行取平均后,准确率是98.78%,这是相当大的改善。错误率降低了1/3,。卷积神经网络开始显现威力。
3.使用卷积神经网络 — 两个卷积层
我们接着插入第二个卷积-混合层,把它插入在之前的卷积-混合层和全连接层之间,同样的5*5的局部感受野,2*2的池化层。
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2)),
FullyConnectedLayer(n_in=40*4*4, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
这一次,我们拥有了99.06%的准确率。
4.使用卷积神经网络 — 两个卷积层+线性修正单元(ReLU)+正则化
上面我们使用的Sigmod激活函数,现在我们换成线性修正激活函数ReLU
f(z)=max(0,z),我们选择60个迭代期,学习速率η=0.03, ,使用L2正则化,正则化参数λ=0.1,代码如下
&&& from network3 import ReLU
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
这一次,我们获得了99.23%的准确率,超过了S型激活函数的99.06%. ReLU的优势是max(0,z)中z取最大极限时不会饱和,不像是S函数,这有助于持续学习。
5.使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集
拓展训练集数据的一个简单方法是将每个训练图像由一个像素来代替,无论是上一个像素,下一个像素,或者左右的像素。其他的方法也有改变亮度,改变分辨率,图片旋转,扭曲,位移等。
我们把50,000幅图像人为拓展到250,000幅图像。使用第4节一样的网络,因为我们是在训练5倍的数据,所以减少了过拟合的风险。
&&& expanded_training_data, _, _ = network3.load_data_shared(
"../data/mnist_expanded.pkl.gz")
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
这次的到了99.37的训练正确率。
6.使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层
继续上面的网络,我们拓展全连接层的规模,300个隐藏神经元和1000个神经元的额精度分别是99.46%和99.43%.
我们插入一个额外的全连接层
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(n_in=40*4*4, n_out=100, activation_fn=ReLU),
FullyConnectedLayer(n_in=100, n_out=100, activation_fn=ReLU),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
&&& net.SGD(expanded_training_data, 60, mini_batch_size, 0.03,
validation_data, test_data, lmbda=0.1)
这次取得了99.43%的精度。拓展后的网络并没有帮助太多。
7.使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+拓展数据集+继续插入额外的全连接层+弃权技术
弃权的基本思想就是在训练网络时随机的移除单独的激活值,使得模型对单独的依据丢失更为强劲,因此不太依赖于训练数据的特质。我们尝试应用弃权技术到最终的全连接层(不是在卷基层)。这里,减少了迭代期的数量为40个,全连接层使用1000个隐藏神经元,因为弃权技术会丢弃一些神经元。Dropout是一种非常有效有提高泛化能力,降低过拟合的方法!
&&& net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(
n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
FullyConnectedLayer(
n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
mini_batch_size)
&&& net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
validation_data, test_data)
使用弃权技术,的到了99.60%的准确率。
8.使用卷积神经网络 — 两个卷基层+线性修正单元(ReLU)+正则化+拓展数据集+继续插入额外的全连接层+弃权技术+组合网络
组合网络类似于随机森林或者adaboost的集成方法,创建几个神经网络,让他们投票来决定最好的分类。我们训练了5个不同的神经网络,每个都大到了99.60%的准去率,用这5个网络来进行投票表决一个图像的分类。
采用这个方法,达到了99.67%的准确率。
卷积神经网络 的一些技巧总结如下:
1. 使用卷积层极大地减小了全连接层中的参数的数目,使学习的问题更容易
2. 使用更多强有力的规范化技术(尤其是弃权和卷积)来减小过度拟合,
3. 使用修正线性单元而不是S型神经元,来加速训练-依据经验,通常是3-5倍,
4. 使用GPU来计算
5. 利用充分大的数据集,避免过拟合
6. 使用正确的代价函数,避免学习减速
7. 使用好的权重初始化,避免因为神经元饱和引起的学习减速
文章来源:u的专栏
关于 Imagination微信号
权威发布有关Imagination公司CPU,GPU以及连接IP、无线IP最新资讯,提供有关物联网、可穿戴、通信、汽车电子、医疗电子等应用信息,每日更新大量信息,让你紧跟技术发展,欢迎关注!伸出小手按一下二维码我们就是好朋友!
想了解更多信息,关注后反馈给我吧!
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点4048人阅读
Deep Learning(13)
在CNN卷积神经网络中,习惯用RELU函数代替sigmoid, tahh等目标激活函数,这应该是因为,RELU函数在大于0的时候,导数为恒定值,而sigmoid和tahh函数则不是恒定值,相反,sigmoid和tahh的导数,类似于高斯函数的曲线形状,在两端接近目标时,导数变小。
导数小的话,在训练神经网络的时候,会BP反向传播误差,导致收敛减慢;而relu函数则避免了这点,很好很强大。
当然,事情不是一定的,还是得结合实际情况选择,或者涉及目标激活函数。
下面提供一张RELU, sigmoid, tahh的函数曲线图供参考:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:44969次
排名:千里之外
原创:28篇
转载:52篇
评论:19条
(2)(1)(4)(2)(4)(1)(1)(5)(1)(2)(5)(2)(3)(5)(5)(7)(4)(12)(4)(2)(3)(1)(1)(3)5372人阅读
**一. sigmod(x)函数**relre
sigmod函数的数学公式为:
Θ(x)=11+e-x
函数取值范围(0,1),函数图像下图所示:
二. tanh(x) 函数
tanh(x)函数的数学公式为:
tanh(x)=sinh(x)cosh(x)
函数取值范围(-1,1),函数图像下图所示:
其中sinh(x)数学公式为:
sinh(x)=ex-e-x2
其中cosh(x)数学公式为:
sinh(x)=ex+e-x2
三. ReLU(校正线性单元:Rectified Linear Unit)激活函数
ReLU函数公式为
max(0,x)={0,x,if x&≤&0if&x&&&0
四. Matlab画函数图像代码
function [ output_args ] = sigmod_tanh( input_args )
t1 = linspace(-10,10,500);
t2 = linspace(-10,10,500);
t3 = linspace(-10,10,500);
sigmod = sigmf(t1,[a c])
tan_h = tanh(t2);
max_f = max(0,t3);
subplot(2,2,1);
plot(t1, sigmod,'r-');
legend('sigmoid')
title('sigmoid函数')
axis([-10, 10, -1, 1])
set(gca, 'XGrid','on');
set(gca, 'YGrid','on');
subplot(2,2,2);
plot(t2,tan_h,'b-');
legend('tanh')
title('tanh函数')
axis([-10, 10, -1, 1])
set(gca, 'XGrid','on');
set(gca, 'YGrid','on');
subplot(2,2,3);
plot(t3,max_f,'c-');
legend('max(0,x)')
title('max(0,x)函数')
axis([-10, 10, -10, 10])
set(gca, 'XGrid','on');
set(gca, 'YGrid','on');
阿拉伯字母
tanh(x)说明
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28948次
排名:千里之外
原创:49篇
(2)(1)(1)(2)(2)(3)(1)(4)(1)(12)(6)(16)(1)

我要回帖

更多关于 relu激活函数 公式 的文章

 

随机推荐