我是机器学习和神经网络的新手。我知道如何构建非线性分类模型,但我目前的问题是连续输出。我一直在寻找有关神经网络回归的信息,但我遇到的只是线性回归的信息 - 没有关于非线性的情况。这很奇怪,因为为什么有人会使用神经网络来解决简单的线性回归呢?难道不喜欢用核弹杀死苍蝇吗?
所以我的问题是:什么使神经网络非线性? (隐藏层?非线性激活函数?)或者我对单词“#34; linear"”有完全错误的理解。 - 线性回归NN能否准确地建模比y = aX + b更复杂的数据集?是"线性"与" logistic"?
相反(我计划使用TensorFlow,但TensorFlow线性模型教程使用二进制分类问题作为示例,因此对我也没有帮助。)
答案 0 :(得分:12)
首先,神经网络可以为任何函数建模(不仅仅是线性函数)看看这个 - http://neuralnetworksanddeeplearning.com/chap4.html。
神经网络具有非线性激活层,这使神经网络成为非线性元素。
用于关联输入和输出的功能由神经网络和它获得的训练量决定。如果您提供两个具有线性关系的变量,那么只要您不适合,您的网络就会学到这一点。同样,足够复杂的神经网络可以学习任何功能。
答案 1 :(得分:7)
很抱歉,当前答案不正确或不完整。 激活函数不一定会使神经网络非线性
要了解这一点,我们需要意识到我们正在谈论参数中的非线性。例如,请注意,尽管以下变量的非线性转换,但以下回归预测值仍被视为线性预测:输入,因为参数是线性的:
现在为简单起见,让我们考虑一个单神经元,单层神经网络:
如果传递函数是线性的,则:
您可能已经注意到,这基本上是线性回归。即使我们要添加多个输入和神经元,每个输入和神经元都具有线性激活函数,我们现在只有一组回归(其参数都是线性的,因此这个简单的神经网络是线性的):
现在回到(3),让我们添加一个层,以便我们有一个包含2层的神经网络,每个神经元一个(都具有线性激活函数):
(第一层)
(第二层)
现在注意:
简化为:
和
这意味着我们的两层网络(每个具有单个神经元)的参数不是线性的,尽管网络中每个激活函数都是线性的。
因此,“什么使神经网络非线性”这一问题的答案是:参数中的非线性。
这种非线性的参数有两种:1)在您的网络中具有一层以上的神经元(如上所示); 2)具有非线性激活功能。
以通过非线性激活函数产生的非线性为例,假设我们的输入空间,权重和偏差都受到限制,因此它们都严格为正(为简单起见)。现在使用(2)(单层,单个神经元)和激活函数,我们具有以下内容:
减少为:
,和
现在,要忽略该神经网络存在的问题,应该清楚的是,至少在参数上它是非线性的,并且非线性仅通过选择激活函数来引入。
最后,是的,神经网络可以对复杂的数据结构进行建模,而这些数据结构无法使用线性模型来建模(例如,简单回归)。有关此示例,请参见经典的XOr问题:https://medium.com/@jayeshbahire/the-xor-problem-in-neural-networks-50006411840b
答案 2 :(得分:1)
当谈到非线性回归时,这指的是权重如何影响输出。如果函数与权重不是线性的,那么您的问题就是非线性回归问题。例如,让我们看一个带有一个隐藏层的前馈神经网络,其中隐藏层中的激活函数是某个函数,输出层具有线性激活函数。鉴于此,数学表示可以是:
我们假设可以使用此表示法对标量和向量进行操作,以使其变得简单。 ,,和是您希望通过回归估算的权重。如果这是线性回归,将等于z,因为这将使y线性地依赖于& 。但如果是非线性的,比如,那么现在y非线性地依赖于权重。
现在,如果您了解所有这些,我很惊讶您没有看到非线性案例的讨论,因为几乎所有人都在教科书和研究中谈论。随机梯度下降,非线性共轭梯度,RProp和其他方法的使用有助于找到这些非线性回归问题的局部最小值(并且希望是很好的局部最小值),即使通常不能保证全局最优值。
答案 3 :(得分:0)
从输入到输出的任何非线性都会使网络变为非线性。在我们通常思考和实现神经网络的方式中,这些非线性来自激活函数。
如果我们试图拟合非线性数据并且只有线性激活函数,那么我们对非线性数据的最佳近似将是线性的,因为我们可以计算所有这些。您可以看到一个神经网络的示例,该网络试图仅使用线性激活函数 here来拟合非线性数据。
但是,如果我们将线性激活函数更改为非线性,如 ReLu ,那么我们可以看到更好的非线性拟合数据。您可以看到here。
答案 4 :(得分:0)
我也有同样的困难,大多数在线课程使用人工神经网络进行分类,但你从来没有真正解决过这些课程中的回归问题。
什么使ANN非线性?激活功能。
即使你有一个拥有数千个感知器和隐藏单位的人工神经网络,如果所有的激活都是线性的(或根本没有被激活),你只是训练一个简单的线性回归。
但要注意,一些激活函数(如sigmoid)具有一系列作为线性函数的值,即使使用非线性激活,您也可能会遇到线性模型。
如何使用ANN预测连续输出?与分类时的方式相同。
同样的问题,你只需反向传播错误(标签 - 预测)并更新权重。但是不要忘记C 将输出层的激活功能挂到连续函数(如果所有标签都是正数或者根本不激活输出,可能是ReLu),中间隐藏层可以如果你愿意,可以激活。
对于人工神经网络的小回归问题,您可能需要以较小的学习率开始,因为会出现很多差异,因为错误最初会“无限制”。
希望这会有所帮助:)
答案 5 :(得分:0)
我不想成为不礼貌的人,但是当前的答案都与线性激活函数导致的非线性ND多项式有关。就这个问题而言,这根本没有道理。
我明白了,因为您将有一个多项式作为目标函数,可以使用层系数的乘积和非线性乘积的系数最小化。无论如何,没有任何额外的约束,这样的系统将永远无法融合,也变得毫无意义。
所描述的系统不仅完全不必要地是非线性的,而且是不适定的。不要争论导致荒谬的事情。最初的问题实际上完全解决了这个问题。
使用分层构建“线性神经网络”,并尝试照常使用它...然后您将意识到,这种方法无济于事,您浪费了时间。 因此,除非有充分的理由相信这种不适的东西已经得到处理,否则我永远不会考虑使用线性激活函数。如果您有其他限制,这可能是有道理的。如果您使用随机梯度下降法,那么至少会跳过它的某些不良特性。
目标函数的参数是非线性的给人的印象是错误的和虚假的。而且,如果作者会知道与系数乘积相关的项的优化问题,他将永远不会写这样的东西。
任何目标函数都可以设为非线性。如果仅将一个线性系数替换为两个系数的乘积。但这是无稽之谈,因为您永远无法确定这些系数。决不。有无数种解决方案!甚至不依赖于数据量。
答案 6 :(得分:0)
我没有足够的声誉来评论 itwasthekix 帖子,但我想分享我的见解。
z1 = (w1*p + b1)
的输出。由于 z1 稍后进行线性变换,我们仍将
移动一个线性函数。如果我们要修复除 w1 之外的所有内容
AND w2,那么我们将继续研究非线性函数。w1*w2
的梯度并进行梯度下降,我们只知道联合梯度,没有固定其中一个参数就无法确定单独参数的影响。如果我们修复了一个,我们就会继续线性函数。z = w2 * g(w1 * p + b1) + b2
的情况,假设 g
是一个非线性激活函数。然后,如果我们修正一切并改变 w1,我们将继续非线性函数,因为 w1 * p + b1
被 g
变换。答案 7 :(得分:-1)
因为激活是w * x,它是线性运算,所以您需要额外的元素以使其成为非线性。