神经元结构的输出为所有输入的加权和,故导致了整个神经网络其实为一个线性模型。如下图所示:当前节点输出为,这即为线性模型当前神经元的输出结果。
不同于以上情况,如果将每一个神经元(即为神经网络中的节点)的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性模型了,这个非线性函数就是所谓的激活函数(activation function)。则非线性模型当前神经元的输出为
,其实对于线性模型而言,无非是在原来的基础之上增加了一个非线性变换的函数
而已,故而。激活函数往往成为去线性化的方法。在没有激活函数的情况下即
,在这样的情况下每层节点的输入都为上一层节点的输出的线性函数值,如果一个网络结构是这样的情况,那么无论有神经网络有多少层,输出都是输入简单的线性组合,与没有隐藏层的效果差不多,这就与最原始的感知机没有区别,所以这种类型的神经网络模型与真实网络存在很大的差异,不能逼近真实网络。正因为以上原因,故引入了非线性的激活函数让神经网络更逼近表达真实网络。
那么对于一下的一层隐藏层的神经网络而言,向前传播的公式为,公式中x为输入值W为权重参数。因为是矩阵之间的相互运算,那么
以下公式即为上图神经网络结构加上激活函数和偏置项后的向前传播算法的数学定义:
与线性的简单加权不同,以上公式中添加了偏置项(bias)偏置项是神经网络中非常常见的一种结构,这里我对偏置项做一个简单的阐述,如果没有偏置项那么整个数据集的分类平面必须要经过原点,那么对于以下数据的分类平面而言,如果每一条线都没有偏置项,那么三条线都必须经过原点,这样就导致分类的不准确甚至错误,所以每一个分类的函数都需要加上一个偏置项,让平面或者超平面分类更加准确。
另外每一个节点的取值不再是简单的单纯加权。每个节点的输出在加权的基础上还做了一个非线性变换,一下给出常见的非线性激活函数。
如果判断零件是否合格的神经网络加入偏置项和ReLU激活函数后即成为下面的神经网络结构:
此时,整个神经网络偏置项被表示为一个输出恒为1的节点,那么隐藏层的前向传播算法的推到公式为:
输出层的推到公式为:
以上就是关于激活函数相关的知识,在学习TensorFlow的过程中的一些总结希望能够帮助到查阅相关信息的同僚们,谢谢。