概述
从上一节(什么是神经网络)中我们得知:神经网络是一个函数,它由神经元组成,而神经元也是一个函数。
神经元可以继续拆分成2个子函数:
- 元线性函数:
- 元非线性函数:
神经元所代表的函数为:
线性函数
线性函数有如下形式:
其中都是参数,不同的线性函数有不同的参数。
一元线性函数
当时,,其函数图像为一条直线:
二元线性函数
当时,,其函数图像为一个平面:
元线性函数
当时,其函数图像为一个超平面。超过了三维,就不方便可视化了。不过大家可以想象,其特点就是直的。
非线性函数
从名字上就很容易理解,非线性函数就是跟线性函数不一样的函数。线性函数是直的,非线性函数就是弯的。如最常见的Sigmoid函数:
激活函数
在神经网络中,我们把这个非线性一元函数叫做激活函数。一些常见的激活函数可参考知识库中的激活函数,其中:
- Linear: 是一个线性函数,代表不使用非线性函数的情况
- Softmax 是个特例。严格来讲,它不算激活函数
必要性
为什么要在线性函数后面跟一个非线性的激活函数呢?
这是因为:
- 如果神经元都是线性函数,那么由神经元构成的神经网络也是一个线性函数。
如下面这个例子:
那么整个神经网络所代表的函数为:
这是一个三元的线性函数。
- 我们需要构造的目标函数包含各式各样的函数,线性函数只是其中一种。
我们希望神经网络能够模拟任意函数,而不只是线性函数。因此我们增加了一个非线性的激活函数,对线性函数进行了"弯曲"。
完整的神经元
完整的神经元融合了线性函数与非线性的激活函数,变得更有趣、更强大了。
一元函数
当时,,使用Sigmoid激活函数,神经元对应的函数为:
其函数图像为:
二元函数
当时,,使用Sigmoid激活函数,神经元对应的函数为:
其函数图像为:
元函数
由于可视化问题,此处完全靠自己想象!😥
问题
为什么神经元的组合可以模拟复杂函数?
可以直观地想象一下,如何通过简单的神经元模拟稍微复杂一点的函数。