ReLu(Rectified Linear Units)激活函数

本文探讨了传统Sigmoid系激活函数的应用及其局限性,并介绍了近似生物神经激活函数Softplus与ReLu的发展历程及优势,包括它们如何提高学习效率并简化预训练过程。

传统 Sigmoid 系激活函数

这里写图片描述
传统神经网络中最常用的两个激活函数,Sigmoid 系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在。
从数学上来看,非线性的 Sigmoid 函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。
从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。
无论是哪种解释,看起来都比早期的线性激活函数(y=x);阶跃激活函数(-1/1,0/1) 高明了不少。

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

2001 年,神经科学家 Dayan、Abott 从生物学角度,模拟出了脑神经元接受信号更精确的激活模型,这个模型对比 Sigmoid 系主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)
这里写图片描述
同年,Charles Dugas 等人在做正数回归预测论文中偶然使用了 Softplus 函数,Softplus 函数是 Logistic-Sigmoid函数原函数。Softplus(x)=log( 1+exp(x) )按照论文的说法,一开始想要使用一个指数函数(天然正数)作为激活函数来回归,但是到后期梯度实在太大,难以训练,于是加了一个 log 来减缓上升趋势。
加了 1 是为了保证非负性。同年,Charles Dugas 等人在 NIPS 会议论文中又调侃了一句,Softplus 可以看作是强制非负校正函数 max(0,x)平滑版本。
偶然的是,同是 2001 年,ML 领域的 Softplus/Rectifier 激活函数与神经科学领域的提出脑神经元激活频率函数有神似的地方,这促成了新的激活函数的研究。

ReLu 的贡献

1 缩小做和不做非监督预训练的代沟
ReLu 的使用,使得网络可以自行引入稀疏性。这一做法,等效于无监督学习的预训练。
当然,效果肯定没预训练好。论文中给出的数据显示,没做预训练情况下,ReLu 激活网络遥遥领先其它激活函数。甚至出现了比普通激活函数预训练后更好的奇葩情况。当然,在预训练后,ReLu 仍然有提升空间。从这一层面来说,ReLu 缩小了非监督学习和监督学习之间的代沟。当然,还有更快的训练速度。

2 更快的特征学习
在 MNIST+LeNet4 中,ReLu+Tanh 的组合在 epoch 50 左右就能把验证集错误率降到 1.05%
但是,全 Tanh 在 epoch 150 时,还是 1.37%,这个结果 ReLu+Tanh 在 epoch 17 时就能达到了。
该图来自 AlexNet 的论文对 ReLu 和普通 Sigmoid 系函数做的对比测试,可以看到,ReLu 的使用,使得学习周期大大缩短。综合速率和效率,DL 中大部分激活函数应该选择 ReLu。

<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`控制学习率、批量大小等超参数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值