这里通过一个详细的例子,来说明神经网络是怎样计算复杂非线性函数的输入的,进而弄明白为什么神经网络可以用来学习复杂的非线性假设模型。
例子:
这里有x_1和x_2两个输入特征,它们都是二进制的,所以x_1和x_2只可能是0或1。
在这个例子中,只画了2个正样本和2个负样本,但你可以把它看作是复杂的机器学习问题的一个简化版本,本来我们可能在右上方和左下方有许多个正样本,还有许多用圆圈表示的负样本:
我们想做的是学习一个非线性的判断边界,来区分这些正样本和负样本,那么神经网络要如何做到这点呢?(采用第一个简单的例子,更容易说明问题)
具体来说,我们需要计算目标函数:
在这个例子中,用XNOR的话,结果会好一些。也就是当这些样本同时为真或同时为假时,y的值才为1,如果y=0,那么它们有且仅有一个为真:
先从一个比较简单的、能够拟合AND运算的网络入手:
假设有2个二进制的输入x_1和x_2,现在目标函数为:y = x_1 AND x_2。
怎样得到只含单个神经元的网络来计算这个AND函数呢?
为此,在这里加一个偏置单元:
现在,对神经网络中的权重(参数)进行赋值:
这意味着将-30赋值给x_0(偏置单元)的系数,中间的+20对应x_1的系数,下边的+20对应x_2的系数。故假设模型h(x)为:
(把这些值都想成是网络边界中连接这些参数的权值会更容易理解一些)
回顾一下S型激活函数g(z):
(这里标出了坐标参照点)
试试x_1和x_2对应的4种输入组合,看看假设模型h(x)能得到什么结果:
观察结果发现,确实是逻辑与的计算结果。
计算h(x)近似等于:
通过上面那张真值表,就能弄清楚神经网络所计算的逻辑函数的取值是怎样的。
这个神经网络可以实现或运算函数的功能:
如果将假设模型写出来,会发现假设模型为:
代入x_1和x_2的四种输入组合,计算结果为:
从计算结果可以看出,它的确实现了逻辑或函数的功能。
通过以上例子,我们明白了神经网络中的单个神经元如何被用来计算逻辑函数。
下面的文章将会提到一个拥有多层神经元的神经网络是如何被用来计算更复杂的函数的,比如说XOR函数或者XNOR函数。
参考资料:吴恩达机器学习系列课程