我的神经网络(三层)输出层使用了Sigmoid作为激活函数,输出范围仅限于[0-1]。但是,如果我想训练它的输出超出[0-1]范围,例如达到数千,该怎么办呢?
例如,如果我想训练
输入 —-> 输出
0 0 ——> 0
0 1 ——> 1000
1000 1 —-> 1
1 1 ——-> 0
我的程序可以处理AND、OR、XOR等操作,因为输入和输出都是二进制的。
有人建议使用,
激活函数:
y = lambda*(abs(x)1/(1+exp(-1(x))))
激活函数的导数:
lambda*(abs(y)y(1-y))
这个方法对于提到的训练模式并未收敛(如果我没有做错的话)。请问有什么建议吗?
回答:
对于分类问题,通常在输出层使用Sigmoid/Logistic激活函数,以获得[0,1]范围内的适当概率值;结合多类分类的1-of-N编码,每个节点的输出将代表实例属于每个类别的概率。
另一方面,如果你有一个回归问题,就没有必要在输出上应用额外的函数,你可以直接使用原始的线性组合输出。网络会自动学习权重以产生你所需的任何输出值(即使是数千)。
你还应该注意对输入特征进行缩放(例如,将所有特征归一化到[-1,1]范围内)。