神经网络算法(二)

神经网络——三种函数

1、**函数

    进行非线性变换,假如我们构建了一个多层的神经网络,那它每一层做的其实都是一个线性加权求和的运算,因此这个神经网络就只能做线性分类。当我们对每层网络中的各个节点都做非线性变换(使用**函数)时,那么这个神经网络就可以做非线性分类任务了。

下面我列举了的三种常用的**函数:

Sigmoid**函数
在这里插入图片描述
    Sigmoid函数介于0~1之间,多用于输出层。

tanh**函数
在这里插入图片描述
    tanh函数(双曲正切函数)比Sigmoid函数表现得更好,它介于-1~1之间,**函数的平均值就更接近0,从数学上看tanh函数其实是Sigmoid函数向下平移后得到的,多用于隐藏层。

ReLu**函数
在这里插入图片描述

    Sigmoid函数和tanh函数都有一个缺点,当自变量 x 非常大或非常小时,那么导数的梯度或者说这个函数的斜率可能就很小,接近于0,这样会拖慢梯度下降算法。ReLu函数(线性修正单元)解决了这个问题,当x大于0时,斜率为1;当x小于0时,斜率为0;当x等于0时,倒数没有意义。

    在选择**函数有一些经验,当输出值为0和1或在做二分类时,那么Sigmoid函数很适合作为输出层的**函数,其他所有层都用ReLu函数,ReLu**函数的斜率和0差的很远,这样构成的神经网络的学习速度会快很多。

2、损失函数

    是神经网络优化的目标函数,相当于预测值和真实值之间的误差,神经网络训练或者优化的过程就是最小化损失函数的过程,损失函数值小了,对应的预测结果和真实结果的值就越接近。

    神经网络有三种较为常用的损失函数:

    1.均方误差损失函数(MSE)
J ( θ ) = 1 2 m i = 1 m ( y ( i ) y ( i ) ) 2 J(\theta)=\frac{1}{2m} \sum_{i=1}^m (y^{(i)}-y^{(i)^\prime})^2

    其中y是真值,y′是预测值,y′=wx+b。

    2.交叉熵损失函数(cross-entropy)
J ( θ ) = 1 m i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 y ( i ) ) l o g ( 1 h θ ( x ( i ) ) ) J(θ)=−\frac{1}{m}\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1−y^{(i)})log(1−h_θ(x^{(i)}))

    3.对数似然损失函数
J ( W , b , a L , y ) = 1 m x k y k log a k l J(W,b,aL,y)=\frac{1}{m}\sum_{x}\sum_{k} y_k\cdot \log a_k^l
    其中 a k L a^L_k 表示网络的输出值,yk表示真值,取0或1。

3、优化函数

    优化函数起到优化算法的功能,是通过改善训练方式,来最小化(或最大化)损失函数。一般最基础的优化函数是梯度下降算法。