任意一个函数都可以作为神经网络的激活函数对吗?

任意一个函数都可以作为神经网络的激活函数对吗?,第1张

神经网络的激活函数是用来调整神经网络的非线性表现能力的函数。理论上,任意一个函数都可以作为神经网络的激活函数,但是一般情况下,神经网络的激活函数要满足一些性质,如单调性、可微性、连续性等,以保证神经网络的收敛性和学习效率。

常用的神经网络的激活函数包括:Sigmoid函数、tanh函数、ReLU函数、Leaky ReLU函数等。这些函数都具有较好的性质,在神经网络的应用中表现较为优良。

)编程理论

作为比较成熟的算法,软件Matlab中有神经网络工具箱,所以可以借助Matlab神经网络工具箱的强大功能,在此基础上进行二次开发,从繁琐的编程工作中解脱出来,大大提高工作效率

Matlab的神经网络工具箱是在Matlab环境下所开发出来的许多工具箱之一,它以人工神经网络理论为基础,用Matlab语言构造出典型神经网络的激活函数(如S型、线性等激活函数),使使用者对所选定网络的输出计算编程对激活函数的调用;另外,根据各种修改网络权值的规律,加上网络的训练过程,用Matlab编写出各种网络训练的子程序这样,使用者可以根据自己的应用要求,直接调用(或加进自己编写的)神经网络子函数,而不必要从事繁琐的编程

基于Matlab的BP神经网络编程过程如下:

(1)对样本集进行归一化

确定输入样本和输出样本,并对它们进行归一化,将输入和输出样本变换到(01,09)区间,由于Matlab的归一化函数premnmx把数据变换到(-1,1)之间,所以使用自编premnmx2归一化函数

(2)创建BP神经网络

在样本集确定之后,即可进行网络的结构设计,在Matlab中一般使用newff创建函数,它不但创建了网络对象,还自动初始化网络的权重和阈值如果需要重新初始化网络权重和阈值,可以使用Init函数

关键语句如下:

net=newff(输入样本的取值范围,[网络各层的神经元数目],{网络各层神经元的激活函数},‘训练函数',‘学习函数’,‘性能函数’)

一般选用三层BP网络,输入层、输出层的神经元个数根据具体情况确定,而隐层神经元个数目前多采用经验的方法确定

(3)设置网络的训练参数

nettrainParamepochs―最大收敛次数;

nettrainParamgoal―收敛误差;

nettrainParamshow―显示间隔;

以上在一般的神经网络训练中都有使用,本文使用Levenberg-Marquart优化算法进行训练,还需设置的参数有:

nettrainParammu―Levenberg-Marquart优化算法中的

nettrainParammu_dec― 的缩减因子;

这个要看你选择的激活函数,若是你的激活函数为非线性函数,那就不可能得到各参数的拟合值。如果你所选用的激活函数是线性函数,那么就可以先把输出的表达式写出来,即权向量和输入的矩阵乘积。得到表达式后就可以得到相应参数的拟合值了

理论上讲任何一个连续的非多项式、常数函数都可以做为BP的激活函数,而且这都是已经在数学上证明过的问题。

但sigmoid函数相对其他函数有它自身的优点,比如说光滑性,鲁棒性,以及在求导的时候可以用它自身的某种形式来表示 。

这一点在做数值试验的时候很重要,因为权值的反向传播,要求激活函数的导数 。

多层就有多个导数,如果用一般的连续函数,这对计算机的存储和运算都是一个问题,此外还要考虑整个模型的收敛速度,我上面提到连续函数都可以做激活函数 。

但是相应的Sigmoidal型函数的收敛速度还是比较快的,(相同的结构前提下)

还有就是BP在做分类问题的时候,Sigmoidal函数能比较好的执行这一条件,关于连续函数可以做激活函数的证明,可以在IEEE trans on neural networks 和NeuralNetworks以及Neural Computating 和Neural Computation上找到。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/12179262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存