神经网络真的需要激活函数还是仅仅用于反向传播?

机器算法验证 神经网络 梯度下降 近似 反向传播
2022-04-02 01:50:02

我有一个前馈神经网络(1 个具有 10 个神经元的隐藏层,1 个具有 1 个神经元的输出层),没有激活函数(仅通过权重 + 偏差传递),它可以学习一个非常不稳定的正弦波(使用 2in1out 窗口)与生产在几秒钟内通过随机攀爬训练的可用准确度:

for (int d = 0; d < 10000; d++)
    data.Add((float)(Math.Sin((float)d * (1 / (1 + ((float)d / 300)))) + 1) / 2);

我可能只是喝醉了,但如果你不使用激活函数,你会失去通用函数逼近器的状态吗?还是仅用于梯度下降/反向传播等作为可微函数?

或者,我是否可能只是忽略了一个错误,实际上是在不知情的情况下秘密激活?

C# 中的源代码(在表单上绘制)

2个回答

您构建了一个带有线性隐藏层的多层神经网络。隐藏层中的线性单元否定了拥有隐藏层的目的。输入和隐藏层之间的权重,以及隐藏层和输出层之间的权重实际上是一组权重。具有单组权重的神经网络是执行回归的线性模型。

这是线性隐藏单元的向量

H=[h1,h2,..,hn]

在网络中 前向传播的方程为 因此,具有线性隐藏层的 n 层前馈神经网络等价于给出的输出层 x

y¯=W(Hx)(WH)x
W=WiHi

如果你只有线性单元,那么隐藏层什么都不做。Hinton 等人推荐使用校正线性单元,即它很简单,不会遇到 sigmoidal 函数的梯度消失问题。类似地,您可以选择软加函数,它是一种非稀疏平滑近似。max(0,x)log(1+ex)

如果您没有非线性激活函数,那么您最终会得到一个在表达能力上与线性模型一样强大的网络。简单地将其视为线性代数问题。直观地说,如果您有由矩阵编码的线性变换A你组成一个初始向量x使用多重线性变换,那么你仍然会得到一个线性变换:

T1(...Tn(x))=A1...Anx

本质上,如果您移动点以使网格保持平行且均匀分布,则不能随机引入曲线。所以一切都是线性的。