一、神经元模型

python查看神经网络结构参数 python神经网络函数_激活函数

上图是一个简单的单神经元模型,它接收来自其它神经元传递而来的信号x[0]~x[3],这些信号附带着权重w[0] ~ w[3]进行传递,神经元接收到的输入值与神经元的阈值

python查看神经网络结构参数 python神经网络函数_感知机_02

进行比较,最后经过激活函数产生输出。上图对应的公式即: 

python查看神经网络结构参数 python神经网络函数_激活函数_03

   其中,f()即为激活函数。

常用的激活函数有如下几种:

1、Sigmoid函数

Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间,公式:

python查看神经网络结构参数 python神经网络函数_python查看神经网络结构参数_04

python查看神经网络结构参数 python神经网络函数_激活函数_05

2、Tanh函数

Tanh是双曲函数中的一个,Tanh()为双曲正切。在数学中,双曲正切“Tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。公式:

python查看神经网络结构参数 python神经网络函数_感知机_06

python查看神经网络结构参数 python神经网络函数_感知机_06

 

python查看神经网络结构参数 python神经网络函数_感知机_08

python查看神经网络结构参数 python神经网络函数_感知机_08

3、ReLU函数

Relu激活函数(The Rectified Linear Unit),用于隐层神经元输出。公式如下

python查看神经网络结构参数 python神经网络函数_激活函数_10

 

python查看神经网络结构参数 python神经网络函数_感知机_11

4、阶跃函数

这是西瓜书中介绍的一个函数,将输入值映射为输出值0 或者 1

python查看神经网络结构参数 python神经网络函数_激活函数_12

 二、感知机与多层网络

感知机由两层神经元组成,如下图

python查看神经网络结构参数 python神经网络函数_python查看神经网络结构参数_13

感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别

若两分类是可分的,即存在一个线性超平面能将它们分开,则感知机一定可以求得相应的权重向量

python查看神经网络结构参数 python神经网络函数_感知机_14

;否则,感知机学习会发生振荡,无法求得合适解。

西瓜书对权重和阈值是给定了合适的初始值,但权重和阈值可以通过学习得到。权重和阈值先给定一随机值,在得到结果后进行更新:如

python查看神经网络结构参数 python神经网络函数_激活函数_15

python查看神经网络结构参数 python神经网络函数_python查看神经网络结构参数_16

  其中 

python查看神经网络结构参数 python神经网络函数_感知机_17

为学习率

西瓜书中阶跃函数让感知机实现逻辑与、或、非运算。但对于异或问题,感知机是无法解决的,必须引入多层神经元,同样的有输入层和输出层,位于两层之间的叫做隐层。多层神经网络结构模型如下:

python查看神经网络结构参数 python神经网络函数_感知机_18

三、误差逆传播算法

误差逆传播算法(error BackPropagation,简称BP),也成反向传播算法,是很强大的神经网络学习算法。以西瓜书给出的单隐层神经网络模型为例,给出权重、阈值的更新公式

python查看神经网络结构参数 python神经网络函数_权重_19

变量符号意义参考西瓜书

以隐层到输出层的权重为例,权重的更新规则:

python查看神经网络结构参数 python神经网络函数_感知机_20

 ,其中 

python查看神经网络结构参数 python神经网络函数_激活函数_21

其它参数更新规则参考西瓜书。

误差逆传播算法:

输出:训练集

python查看神经网络结构参数 python神经网络函数_感知机_22

,学习率

python查看神经网络结构参数 python神经网络函数_激活函数_23

过程:

在(0,1)范围内初始化所有权值和阈值

do:计算当前样本的输出,计算输出层的梯度项,计算隐层的梯度项,更新权重和阈值 until 达到停止条件

输出:多层前馈神经网络