class RSDNFunction
{
public:
staticconst NeuronType Type = ETYPE_RSDN;
public:
double F(double x)
{
// coeffs were added to adjust this function to bisigmoid for values from -5 to 5return5*x/(5*sqrt(abs(5*x) ) + 5);
}
double dF(double x)
{
double root = sqrt(5*abs(5*x) ) + 1;
return (root + 1)/(2*root*root); // derived function
}
};
我们应该建立径向基线网络吗?
他们有一个强大的错误,虽然他们学习得很快,但他们对未知数据的预测很差。
一般课程 (从http://www.intuit.ru/department/expert/neuro/,你需要在那里注册,如果你不想注册 - 绰号是Nic_Touch paszdraste01)
讲座 http://www.softcraft.ru/neuro/ni/p00.shtml
制图实例 http://www.statsoft.ru/home/products/version6/snn.htm
关于模型和 训练方法的书籍
u- 激活器输入
y- 额外的功率因素。
凡是有指数的地方,应该避免计算正数的指数,以免得到超过32位的大数。例如,要计算西格玛,最好按以下方法计算
双倍x=-y*u。
双重e=exp(-|x|)。
如果(x<=0)返回(1./(1.+e))
if(x>0)return(e/(1.+e))。
这些公式的推导非常简单。如果指数参数为负数,我们不改变公式。如果是正数,我们将分子和分母乘以相同参数的指数,但要加负号。
凡是有指数的地方,应该避免计算正数的指数,以免得到超过32位的大数。例如,以这种方式计算西格玛比较好
双倍x=-y*u。
双重e=exp(-|x|)。
如果(x<=0)返回(1./(1.+e))
if(x>0)return(e/(1.+e))。
这些公式的推导非常简单。如果指数参数为负数,我们不改变公式。如果是正数,我们就用分子和分母乘以相同参数的指数,但要加负号。
奇怪的是,即使是大的负输入,sigmoid本身也能正常工作,但hyertangent函数却失败了,所以除了经典算法外,我还增加了一个移位的sigmoid。该函数的工作极限与正切相同,但速度更快,而且没有#IND问题。
同样的道理,随着攻角的调整(对于小的y系数值),高切不会达到-1;1,移位的sigmoid不会有这样的问题。
一般来说,谁都想最终确定高切,但我认为这个函数是没有前途的,不仅如此,我还要保存结果,因为指数用了两次,所以还需要检查,加上调整攻击时达不到极限的问题。
我的结论是,下切线是不可能的,移位的乙字形才是规则。
我的结论是,下切线是不可能的,移位的乙字形才是规则。
附议。
有可能在[-1;1]的限度内对sigmoid做一个更简单的实现
但这个实现也有一个#IND的问题,所以与其写大量的检查,不如增加几个简单的操作
这里我们加上+ - / ,所以额外的3个操作与大量的检查。
这是最好的选择,无论是从工作范围[-1;1]的便利性还是从操作速度来看。定义区是整个数字行。
这正是我最近一直在使用的激活函数,我已经尝试了许多替代方案,并测试了它们的执行速度。
而在回声格中,我最喜欢这个。
顺便说一下。
需要一个sigmoid函数。
要求是函数本身及其导数的正常形式(不难计算)和反函数及其导数的正常形式。