ReLu(Rectified Linear Units)激活函数

从传统Sigmoid系到ReLU,激活函数在神经网络中扮演核心角色。ReLU因其快速收敛和高效性能,已成为深度学习的首选。文章探讨了Sigmoid、Tanh、Softplus、ReLU及其变体的工作原理和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 传统Sigmoid系激活函数

传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid 、Tanh-Sigmoid)被视为神经网络的核心所在。

从数学上来看,非线性的Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。

从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。

无论是哪种解释,看起来都比早期的线性激活函数(y=x),阶跃激活函数(-1/1,0/1)高明了不少。

1.1 近似生物神经激活函数:Softplus&ReLu 

2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型,该模型如左图所示:

这个模型对比Sigmoid系主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)

同年,Charles Dugas等人在做正数回归预测论文中偶然使用了Softplus函数,Softplus函数是Logistic-Sigmoid函数原函数,即,softplus的微分就是logistic function

按照论文的说法,一开始想要使用一个指数函数(天然正数)作为激活函数来回归,但是到后期梯度实在太大,难以训练,于是加了一个log来减缓上升趋势。

加了1是为了保证非负性。同年,Charles Dugas等人在NIPS会议论文中又调侃了一句,Softplus可以看作是强制非负校正函数(Rectified Linear Units) f(x) = max(0,x)的平滑版本。

偶然的是,同是2001年,ML领域的Softplus/Rectifier激活函数与神经科学领域提出的脑神经元激活频率函数有神似的地方,这促成了新的激活函数的研究。

另外一种函数叫做softmax function或者normalized exponential是logistic function的一个泛化,如下: 

the softmax function常被用来various probabilistic multiclass classification methods 比如multinomial logistic regression,multiclass linear discriminant analysis, naive Bayes classifiers and artificial neural networks等。在Andrew Ng的机器学习课程中,softmax regression中就用到了softmax function。这里点一下说明。当然本文的重点还是在rectified linear function上。

2. 几种变体:

noisy ReLUs
可将其包含Gaussian noise得到noisy ReLUs,f(x)=max(0,x+N(0,σ(x))),常用来在机器视觉任务里的restricted Boltzmann machines中。

leaky ReLUs
允许小的非零的gradient 当unit没有被激活时。 

3. Advantages

(Softplus是ReLU的圆滑版,公式为:g(x)=log(1+e^x),从上面的结果看,效果比ReLU稍差) 
ReLU在经历预训练和不经历预训练时的效果差不多,而其它激活函数在不用预训练时效果就差多了。ReLU不预训练和sigmoid预训练的效果差不多,甚至还更好。 
相比之下,ReLU的速度非常快,而且精确度更高。 
因此ReLU在深度网络中已逐渐取代sigmoid而成为主流。 
ReLU导数(分段): 
x <= 0时,导数为0 
x > 0时,导数为1 
早期多层神经网络如果用sigmoid函数或者hyperbolic tangent作为激活函数,如果不进行pre-training的话,会因为gradient vanishing problem而无法收敛。 
而预训练的用处:规则化,防止过拟合;压缩数据,去除冗余;强化特征,减小误差;加快收敛速度。而采用ReLu则不需要进行pre-training。
 

 

 

 

 

 

 

 

 

 

 

 

 

<think>好的,我现在需要帮助用户解决如何使用MATLAB生成带有ReLU激活函数的DNN程序的问题。首先,我要回忆用户提供的引用内容,确保回答准确。用户提到了引用[2]和[3],其中涉及ReLU激活函数和MATLAB代码设计。 首先,我得确认用户的需求:他们想要一个示例代码,展示如何在MATLAB中创建使用ReLU的DNN。根据引用[2],ReLU的数学表达式是$ReLU(x)=\max(x,0)$,而DNN结构包括多隐层和softmax分类器。引用[3]提到使用trainingOptions和trainNetwork函数进行训练。 接下来,我需要考虑步骤。MATLAB中通常使用Deep Learning Toolbox来构建网络。ReLU在MATLAB中对应的层是ReLU层,可以用reluLayer()创建。用户可能需要一个分类模型,所以输出层应该是softmax层和分类层。 然后,我需要组织代码结构。首先准备数据,这里可能需要示例数据如鸢尾花数据集。然后定义网络层,比如输入层、全连接层、ReLU层,最后是softmax和分类层。接着设置训练选项,如优化器、最大周期数等,最后训练模型并评估。 需要注意的是,数据预处理部分,如标准化,可能会影响模型性能。此外,用户可能对如何调整网络结构或参数有疑问,所以应该在相关问题里提出。还要确保代码语法正确,特别是层序列的构建是否正确。 最后,检查是否有遗漏,比如引用是否正确,是否覆盖了用户的所有需求,以及代码是否可运行。可能还需要提到如何替换其他激活函数,比如leakyReLU,以展示扩展性。</think>### 使用MATLAB生成带有ReLU激活函数的DNN程序 以下是基于MATLAB Deep Learning Toolbox的示例代码,展示了如何构建一个具有ReLU激活函数的深度神经网络(DNN),适用于分类任务。 #### 1. 数据准备(示例:鸢尾花数据集) ```matlab % 加载数据 load fisheriris X = meas'; % 输入特征(4维) Y = categorical(species); % 分类标签(3类) % 划分训练集和测试集(80%训练,20%测试) rng('default'); [trainInd, testInd] = dividerand(size(X,2), 0.8, 0.2); XTrain = X(:, trainInd); YTrain = Y(trainInd); XTest = X(:, testInd); YTest = Y(testInd); ``` #### 2. 定义网络结构 ```matlab layers = [ featureInputLayer(4, 'Name', 'input') % 输入层(4个特征) fullyConnectedLayer(10, 'Name', 'fc1') % 全连接层(10个神经元) reluLayer('Name', 'relu1') % ReLU激活层[^2] fullyConnectedLayer(8, 'Name', 'fc2') % 全连接层(8个神经元) reluLayer('Name', 'relu2') % 第二个ReLU层 fullyConnectedLayer(3, 'Name', 'fc3') % 输出层(3个类别) softmaxLayer('Name', 'softmax') % Softmax分类层[^2] classificationLayer('Name', 'output') % 分类输出层 ]; ``` #### 3. 配置训练选项 ```matlab options = trainingOptions('sgdm', ... % 使用带动量的随机梯度下降[^3] 'MaxEpochs', 50, ... % 最大迭代次数 'MiniBatchSize', 16, ... % 小批量样本数 'ValidationData', {XTest, YTest'}, ... 'Plots', 'training-progress', ... % 显示训练过程 'Verbose', true); ``` #### 4. 训练与评估 ```matlab % 训练模型 net = trainNetwork(XTrain, YTrain', layers, options); % 测试性能 YPred = classify(net, XTest); accuracy = sum(YPred == YTest') / numel(YTest); disp(['测试集准确率:', num2str(accuracy*100), '%']); ``` #### 关键点说明 1. **激活函数**:`reluLayer`实现了$ReLU(x)=\max(x,0)$的非线性变换[^2] 2. **分类器**:`softmaxLayer`将输出转换为概率分布 3. **优化配置**:`trainingOptions`控制学习率、批量大小等超参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值