为什么加入 ReLU 后,神经网络可以学习线性可分的特征?
为什么加入 ReLU 后神经网络可以学习线性可分的特征在学习两层神经网络时我们会看到这样的形式fW2max(0,W1x)这里的max(0,W1x)就是 ReLU 激活函数。我们已经知道ReLU 的作用是引入非线性。但一个更深的问题是ReLU 明明只是把负数变成 0为什么它能让神经网络把原本线性不可分的数据转换成更容易线性可分的表示这篇文章就围绕这个问题展开。1. 线性分类器为什么不够线性分类器的形式是fWx它直接在原始输入x上做分类。如果是二维数据线性分类器学到的分类边界大概是w1*x1w2*x2b0这在二维平面中就是一条直线。所以线性分类器只能做一件事用一条直线、一个平面或者高维空间中的超平面去切分数据。如果数据本身可以被直线分开线性分类器当然可以工作。但如果数据是这样的红点在中间 蓝点围在外圈那么无论怎么画一条直线都无法把红点和蓝点完全分开。这就是线性分类器的限制它只能在原始输入空间中学习线性决策边界。2. 神经网络的关键先变换特征再线性分类两层神经网络可以写成hReLU(W1x)scoresW2h也就是输入 x ↓ 第一层 W1x ↓ ReLU 非线性变换 ↓ 得到隐藏层特征 h ↓ 第二层 W2 ↓ 输出分类分数这里最关键的是h ReLU(W1x)它不是直接在原始输入x上分类而是先把x变成新的表示h。然后第二层scores W2h是在新的特征空间h中做线性分类。所以两层神经网络的思想是原始空间中不好分的数据先映射到一个新的特征空间在新的特征空间中它可能变得更容易被线性分类器分开。3. ReLU 到底做了什么ReLU 的定义很简单ReLU(z)max(0,z)也就是说如果 z 0输出 z 如果 z 0输出 0例如z[-3,2,-1,5]经过 ReLU 之后ReLU(z)[0,2,0,5]表面上看它只是把负数变成了 0。但放到神经网络里它的作用会变得非常重要。假设第一层中有一个隐藏神经元h1 max(0, w1 · x b1)这个神经元可以理解成一个“检测器”如果 w1 · x b1 0说明输入 x 符合这个神经元关心的模式于是神经元被激活 如果 w1 · x b1 0说明输入 x 不符合这个模式于是神经元输出 0所以一个 ReLU 神经元可以看成是在问这个输入是否落在我关心的区域里4. 多个 ReLU 神经元会切分输入空间一个 ReLU 神经元会根据w · x b 0把空间分成两半一边激活 另一边关闭如果有很多个 ReLU 神经元它们就会从不同方向切分输入空间。例如神经元 1检测输入是否在某个方向上 神经元 2检测输入是否在另一个方向上 神经元 3检测输入是否在某个区域内 ...这些神经元一起工作后输入空间会被划分成很多小区域。在不同区域里被激活的神经元组合不同区域 A神经元 1、2、5 激活 区域 B神经元 2、4 激活 区域 C神经元 3、5、6 激活这意味着神经网络不再对所有输入使用同一种线性规则。它变成了对不同区域的输入使用不同的线性表示方式。这就是 ReLU 带来的分段线性变换。5. 为什么这种变换可能让数据线性可分原始空间中的线性分类器只有一种能力直接画一条直线去分数据但加入 ReLU 后神经网络先做了一步特征变换x → h ReLU(W1x b1)这个新特征h包含了很多隐藏神经元的响应。每个隐藏神经元都在描述输入的某种性质这个输入是否在某个方向上 这个输入是否激活了某个局部模式 这个输入是否属于某个区域于是原来的输入x被转换成了一组新的特征h [h1, h2, h3, ..., hH]第二层线性分类器不是直接看原始输入而是看这些新特征。如果这些新特征设计得好原本复杂的分类问题就可能变简单。可以这样理解原始空间中 红点和蓝点混在一起一条直线分不开 隐藏层空间中 红点和蓝点被映射到更容易区分的位置一条直线可能就够了6. 一个简单的一维例子假设输入只有一个数字x我们构造两个 ReLU 特征h1 max(0, x) h2 max(0, -x)原本一个数x被变成了两个特征h [max(0, x), max(0, -x)]来看几个例子x 3 → h [3, 0] x 1 → h [1, 0] x -1 → h [0, 1] x -3 → h [0, 3]可以看到正数主要落在第一个维度上 负数主要落在第二个维度上也就是说ReLU 把原本一维空间里的点映射到了一个新的二维特征空间。这就是特征变换的思想不是直接在原始输入上分类而是先造出更有区分度的新特征。7. 和圆环数据的关系在 CS231n 的课件中有一个经典例子红点集中在中间 蓝点围在外圈在原始(x, y)空间中这两类点不能用一条直线分开。如果我们手动做一个特征变换(x, y) → (r, θ)其中r 表示点到原点的距离 θ 表示角度那么分类就变简单了红点靠近中心r 小 蓝点在外圈r 大在新空间里只要根据r的大小就可以把红点和蓝点分开。神经网络的隐藏层做的事情和这个思想类似。只不过它不是手动写死r sqrt(x² y²)而是通过很多个 ReLU 神经元学习新的特征h ReLU(W1x b1)这些特征组合起来可以近似表达“距离中心远不远”“是否在某个区域”“是否符合某种模式”等信息。然后第二层再在这些特征上做线性分类。8. 为什么没有 ReLU 就不行如果没有 ReLU两层网络会变成f W2W1x但是矩阵乘矩阵的结果还是矩阵。令W3 W2W1那么f W3x这其实还是一个线性分类器。所以如果没有非线性激活函数不管堆多少层最终都可以合并成一层线性变换。这样模型并不会获得真正更强的表达能力。ReLU 的作用就是打断这种线性合并fW2 ReLU(W1x)因为中间多了一个非线性函数W2和W1不能再简单合并成一个矩阵。于是模型可以学习更复杂的分段线性函数。9. 一个重要的澄清需要注意的是加入 ReLU 不代表数据一定会变得线性可分。ReLU 的作用不是保证线性可分而是提供一种能力学习非线性特征变换的能力如果隐藏层足够大、参数训练得合适网络就可能学到一个好的映射x → h让原本在输入空间中混在一起的数据在隐藏层空间中变得更容易分开。所以更准确地说ReLU 让神经网络有能力把输入映射到一个新的、分段线性的特征空间 在这个空间里原本线性不可分的数据可能变得线性可分。10. 总结线性分类器只能直接在原始输入空间里画线性边界f Wx两层 ReLU 神经网络则是h ReLU(W1x) f W2h它先用第一层和 ReLU 把输入转换成新的隐藏层特征再用第二层在线性空间中分类。ReLU 的关键作用是1. 把负响应变成 0让神经元像开关一样选择性激活 2. 将输入空间切分成多个区域 3. 对不同区域使用不同的线性表示 4. 形成分段线性变换 5. 让模型有能力学习更复杂的分类边界一句话总结ReLU 并不是直接让数据自动线性可分而是让神经网络可以学习一种新的特征表示在这个隐藏层表示中原本线性不可分的数据可能变得可以被线性分类器分开。