如有不对之处请批评与赐教
1.神经网络的表示
一个简单的神经网络结构如下图。
神经网络可以分为输入层,隐藏层和输出层,其中输入层很好理解,就是我们是输入的数据x1,x2,x3等,输出层就是我们输出的结果,而中间这一层为什么叫隐藏层呢?因为我们见不到隐藏层中的东西,在训练过程中我们是不知道隐藏层里面的状况的。
其中,我们还用 来表示神经网络的层数,下标表示该层的第几个神经元,这个例子中隐藏层有四个神经元,输出层有一个神经元。我们一般把输入层的层数记为0,下一层为1,以此来类推,所以这个例子是一个两层的网络。
2.神经网络的输出
对与一个神经元,可以分为以下两个部分,我们通过输入的值x,w,b来算出z值,再通过激活函数,算出a的值。
当然这是一个,实际中会有很多的计算过程,这时候用向量化来加快计算速度就很有必要了,用矩阵计算能加快速度,也是神经网络中经常用的一种手段。在这里不过多赘述。
3.激活函数
我们在之前的记录中,激活函数全用了sigmoid函数,因为想保持概率在0到1之间,实际上,有时候激活函数有更多更好的选择。
tanh函数即双曲正切函,总体上表现优于sigmoid函数。在训练一个算法模型时,如果使用tanh函数代替sigmoid函数中心化数据,使得数据的平均值更接近0而不是0.5。 有时候,修正线性单元的函数(ReLu)和另一个版本的leaky ReLu函数也是激活函数的不错选择。
输出层是一个二分类问题的时候,我们在
我们为什么需要非线性的激活函数呢?
只要非线性的激活函数才能满足我们的需要做出很多操作。如果我们只用线性函数的话,计算过程只是线性组合,神经网络只是把输入线性组合再输出。
我也看过这样一个说法,人类的神经元就是受不同刺激后产出不同的反应的,如果用线性激活函数就显示不出来神经网络的用处了,所以用非线性激活函数,用非线性激活函数来模拟神经元。
所用图片源于吴恩达课程,侵删。