站浏览量 站访问人数
目录
  1. 1. 感知器
  2. 2. 激活函数
  3. 3. 神经网络过程
    1. 3.1. 反向传播
    2. 3.2. 学习率慢问题

感知器,一个线性的判别器,能够实现简单的逻辑运算,比如与非门等;更进一步,引入偏置bias,则在实践中体现便捷;当把感知器整合成神经元,进而通过链式的网络结构,把这些神经元连接,就得到了神经网络,然而神经网络并非如此简单,需要在每个神经元上加入激活函数,不加激活函数便成为完全的线性,与线性回归一致。

在激活函数的变换下,以及网络的结构,发展出很多不同类型的神经网络方法,解决各种不同领域的问题。

感知器

即一个sigmoid神经元,如下图所示,

直观地理解,决策前考虑的因素是$x_{j}$,特定因素所对决策的重要性是$w_{j}$。

进一步改进感知器,是引入偏度bias,wx+b,加入b在实践中可以调整。
比较像线性回归,拟合曲线一样,其实线性回归可以用最小二乘法拟合,梯度是另一种求解思路。

激活函数

神经网络需要神经元的激活函数,当权重变化时,则会引起后续神经元变化,从而引起output变化,不断与实际值接近;这样就可以不断调整权重,从而使得预测值与实际值接近。

sigmoid函数是$\sigma (x)=\frac{1}{1+e^{-x}}$,其导数是${\sigma (x)}’=\sigma (x)(1-\sigma (x))$,

当权重和偏置变化时,则会引起输出的变化:$\Delta output\approx \sum_{j}^{N}(\frac{\partial ouput}{\partial w_{j}}\Delta w_{j}+\frac{\partial output}{\partial b}\Delta b)$。

评价w和b的好坏,成本函数最小化,$C(w,b)=\frac{1}{2N}\sum_{x}^{N}\left | y(x)-a \right |^{2}$,

在实践中,我们常用mini_batch的方式来优化w和b,因此,权重和偏置的优化公式分别如下:
$$w_{k}=w_{k}-\frac{\eta }{m}\sum_{j}^{m}\frac{\partial C_{xj}}{\partial w_{k}}$$
$$b_{l}=b_{l}-\frac{\eta }{m}\sum_{j}^{m}\frac{\partial C_{xj}}{\partial b_{l}}$$,

神经网络过程

采取如下表示:
$w_{jk}^{level}$,第level-1层连接到level层,level-1层的第k个神经元连接到底level层的第j个神经元,即目的j源k。

$b_{j}^{level}$,第level层的第j个神经元的bias;

$a_{j}^{level}$,第level层的第j个神经元的激活函数;

$a_{j}^{level}=\sigma (\sum_{k}^{n}w_{jk}^{level}a_{k}^{level-1}+b_{j}^{level})$,上一层所有神经元指向第level层的第j个神经元。

每一层level定义神经元矩阵$w^{level}$,每层的weight矩阵n*m不同,因此,level层的矩阵weight中的第j行k列$w_{jk}^{level}$。

向量计算方式,比如下面简单的例子:
$f(x)=x^{2},f(\begin{bmatrix}2\3\end{bmatrix})=\begin{bmatrix}f(2)\f(3)\end{bmatrix}=\begin{bmatrix}4\9\end{bmatrix}$,因此,神经网络计算可以转为向量的计算$a^{level}=\sigma (w^{level}a^{level-1}+b^{level})$,所以在代码里,会有个中间结果存储$z^{level}=w^{level}a^{level-1}+b^{level}$,

反向传播

如上,则计算单个样本的成本函数是$\frac{1}{2}\sum_{j}^{m}(y_{j}-a_{j}^{L})^{2}$,其中L是最后一层,即输出层;
接着就是把输出层的error反向传播出去,每一层会产生该层的error,不断优化每一层的w和b。
$\xi_{j}^{level}$,表示level层的第j个神经元的error。反向传播的伪代码如下:

1,输入x,设置对应的激活函数a;

2,前向:每一层level计算$z^{level}=w^{level}a^{level-1}+b^{level}$,$a^{level}=\sigma (z^{level})$;

3,输出error,$\xi^{L}=\Delta_{a}C\bigodot{\sigma }’(z^{L})=(a^{L}-y)\bigodot{\sigma }’(z^{L})$;

4,后向传播error,level=L-1,L-2,…,2,计算$\xi^{level}=(w^{level+1}\xi^{level+1}) \bigodot {\sigma }’(z^{level})$;

学习率慢问题

神经网络的学习是成本函数的偏导作为学习率,学习慢意味着偏导很小,那么为什么会很小?因为用sigmoid函数时,偏导一定含有${\sigma }’(x)$,观察sigmoid函数曲线发现,输出接近1时导数接近0,即偏导很小值;

如何解决这一问题,采取方式是交叉熵构造成本函数,是的偏导函数中取决于${\sigma }(x)-y$。

成本函数的构造有不同方式,softmax等,交叉熵等,为的是不同的目标,或者计算过程优化;神经网络过程中的激活函数也有不同作用,像sigmoid会导致梯度越来越小,会使用relu等,tanh等。

线性回归使用L1正则或L2正则,为的是不过拟合