一、神经网络基础

一、神经网络概述

  1.定义

    在对人脑神经网络的基本认识的基础上,用数理方法从信息处理的角度对人脑神经网络进行抽象,并建立某种简化模型,就称为人工神经网络。人工神经网络可看做是人脑生物神经网络的简化、抽象与模拟,是一种旨在模仿人脑结构及其功能的信息处理系统。

  2.发展

    启蒙时期:1890-1969,1890年W.James做了人脑结构与功能的研究,1969年Minsky和Papert出版<<感知器>>(Perceptrons)一书;

    低潮时期:1969-1982,  1982年Hopfield发表<<神经网络和物理系统>>(Neural Network and Physical System);

    复兴时期:1982-1986,1983年J.J.Hopfield发表突破性研究论文,1986年D.E.Rumelhart和J.L.McClelland编写<<并行分布式处理>>(Parallel Distributed Processing);

    高潮时期:1987年首届国际人工神经网络学术会议为开端;

  3.基本特征

    结构上的特征是处理单元的高度并行性与分布性,这种特征使神经网络在信息处理方面具有信息的分布存储与并行计算、存储与处理一体化的特点。这些特点使得神经网络有较快的处理速度和较强的容错能力。

        能力上的特征是神经网络的自学习、自组织与自适应性。自适应性是指一个系统能改变自身的性能以适应环境变化的能力,它包含自学习与自组织两层含义。自学习是指当外界环境发生变化时,经过一段时间的训练或感知,神经网络能通过自动调整网络结构参数,使得对于给定输入能产生期望的输出。自组织是指神经系统能在外部刺激下按一定规则调整神经元之间的突触连接,逐渐构建起神经网络。

  4.基本功能

    神经网络具备5种功能:联想记忆、非线性映射、分类与识别、优化计算、知识处理。

    联想记忆:神经网络是通过其突触权值和连接结构来表达信息的记忆。通过预先存储信息好人学习机制进行自适应训练,可以从不完整的信息和噪声干扰中恢复原始的完整信息。

    非线性映射:神经网络能够通过对系统输入输出样本对的学习自动提取蕴含其中的映射规则,从而以任意精度拟合任意复杂的非线性函数。

二、神经网络基础知识

  1.神经元的建模假设

    1943年,心理学家McCulloch和数学家W.Pitts分析总计神经元基本特性的基础上首先提出M-P模型。该模型在简化的基础上剔除6点假定:

    (1)每个神经元都是一个多输入单输出的信息处理单元;

    (2)神经元输入分兴奋性输入和抑制性输入两种类型;

    (3)神经元具有空间整合特性和阈值特性;  

    (4)神经元输入与输出间有固定的时滞,主要取决于突触延搁;

    (5)忽略时间整合作用和不应期;    

    (6)神经元本身是非时变的,即其突触时延和突触强度均为常数。

    如下图所示:

      

    上图内容可用一个数学表达式进行抽象与概括:

    其中,$x_{i}(t)$表示t时刻神经元j接收的来自神经元i的输入信息,$o_{j}(t)$表示t时刻神经元j的输出信息。$ au_{ij}$表示输入输出间的突触时延,$T_j$ 表示神经元j的阈值,$w_{ij}$表示神经元i到j的突触连接系数或称权重值,$f(.)$表示神经元转移函数。

    将突触时延取为时间单位,则可写为:$ o_{j}(t+1) = f{ [sum_{i=1}^{n}(w_{ij}x_{i}(t))] - T_j } $。

    为简便起见,上述公式写为点积式:$ net'_j = W_{j}^{T} X $。

    其中,$ W_j = (w_{1j}, w_{2j}, ..., w_{nj})^T $,$ X = (x_1, x_2, ..., x_n)^T $。

    如果令$x_0=-1, w_{0j}=T_{j}, 则有-T_j=x_{0}w_{0j}$,因此净输入与阈值之差可表达为:$ net_{j}^{'} - T_{j} = net_j = sum_{i=0}^{n}(w_{ij}x_{i})= extbf{w}_{j}^{T} extbf{X} $。

    说明:这里的$x_{0}w_{0j}$,就是神经网络里的biase偏置值,也即是机器学习里的常量(截距)。

  2.神经网络的转移函数

    神经元的转移函数反映了神经元输出与其激活状态之间的关系,用$f(net_j)$。最常用的转移函数有一下4种形式:

    (1)阈值型转移函数

      单位阶跃函数:$egin{equation} f(x)= left { egin{aligned} 1, xge0 \ 0, xle0 \ end{aligned} ight. end{equation} $

      双极性阈值型转移函数:$ egin{equation} sgn(x)= left { egin{aligned} 1, xge0 \ -1, xle0 \ end{aligned} ight. end{equation} $

    (2)非线性转移函数

      单极性Sigmoid型函数(0,1):$ f(x)=frac{1}{1+e^{-x}} $,其导数为:$f'(x) = f(x)(1-f(x))$

      双极性Sigmoid型函数(-1,1):$ f(x)=frac{2}{1+e^{-x}}-1=frac{1-e^{-x}}{1+e^{-x}}$,其导数为:$f'(x) = frac{1}{2}(1 - f(x)^2)$

    (3)分段线性转移函数

      单极性分段线性转移函数:$ egin{equation} f(x) left { egin{aligned} 0, x le 0 \ cx, 0<x le x_{c} \ 1, x_{c}<x \ end{aligned} ight. end{equation} $

    (4)概率型转移函数

      采用概率型转移函数的神经元模型其输入与输出之间的关系是不确定的,需要用一个随机函数来描述其输出状态为1或为0的概率。T为温度参数,这种模型被称为热力学模型。与热力学中的玻尔兹曼分布相类似。$ P(1)=frac{1}{1+e^{-x/T}} $

  3.神经网络学习

    神经网络的全体连接权值可用一个矩阵W表示,其整体反映了神经网络对于所解决问题的知识存储。神经网络能够通过对样本的学习训练,不断改变网络的连接权值以及拓扑结构,以使网络的输出不断地接近期望的输出。这一过程称为神经网络的学习或者训练,其本质是可变权值的动态调整。

    神经网络的学习算法大致分为三类:有监督学习,无监督学习,灌输式学习。网络的运行一般分为训练和工作两个阶段。训练阶段的目的是为了从训练数据中提取隐含的知识和规律,并存储于网络中供工作阶段使用。

    日本著名神经网络学者Amari于1990年提出一种神经网络权值调整的通用学习规则:通用学习规则可表达为:权向量$ extbf{W}_j$在t时刻的调整量$igtriangleup extbf{W}_j(t)$与t时刻的输入向量$ extbf{X}(t)$和学习信号r的乘积成正比。用数学式表示为:

            [ igtriangleup extbf{W}_j=eta f( extbf{W}_j(t), extbf(t),d_j(t)) extbf{X}_t ]

    其中,第i个输入与神经元j的连接权值用$w_{ij}$表示;$eta$为正数,表示学习速率;连接到神经元j的全部权值构成了权向量$ extbf{W}_j$;该神经元的阈值$ extbf{T}_j=w_{ij}$,对应的输入分量$x_0$恒为-1;$r = f( extbf{W}_j, extbf{X}, d_j)$代表学习信号,该信号同常是$ extbf{W}_j和 extbf{X}$的函数,而在有监督学习时,它也是教师信号$d_j$的函数。

    基于离散时间调整,下一时刻的权向量应为:

            [ igtriangleup( extbf{W}_j(t+1))= extbf{W}_j(t) + eta f( extbf{W}_j(t), extbf{X}(t), d_j(t)) extbf{X}(t)]

    不同的学习规则对$f( extbf{W}_j(t), extbf{X}(t), d_j(t))$有不同的定义,从而形成各种各样的神经网络。下面对常见的学习规则进行介绍。

    (1)Hebb学习规则(1949年,心里学家D.O.Hebb构建)

      Hebb学习规则代表一种纯前馈、无监督学习。该规则至今仍在各种神经网络模型中起着重要作用。

      - 学习信号: $r = f( extbf{W}_j^T extbf{X})$,

      - 权向量调整: $igtriangleup extbf{W}_j = eta f( extbf{W}_j^T extbf X) extbf{X}$,

      - 每个分量调整: $igtriangleup omega_j = eta f( extbf{W}_j^T extbf{X})x_i = eta o_j x_i, o_j = f( extbf{W}_j^T extbf{X})$

 1 import numpy as np
 2 # 设输入的三个四维的样本
 3 x1 = np.array([[1], [-2], [1.5],[0]])
 4 x2 = np.array([[1], [-0.5], [-2],[-1.5]])
 5 x3 = np.array([[0], [1], [-1],[1.5]])
 6 w0 = np.array([[1], [-1], [0],[0.5]])
 7 def sgn(x):
 8     return -1 if x<0 else 1
 9 learning_rate = 1
10 biase = 0
11 
12 # 计算单个神经网络的前馈权值调整
13 w1 = w0 + learning_rate * sgn(np.dot(w0.T, x1)) * x1
14 print(w1,end="
,
")
15 w2 = w1 + learning_rate * sgn(np.dot(w1.T, x2)) * x2
16 print(w2,end="
,
")
17 w3 = w2 + learning_rate * sgn(np.dot(w2.T, x3)) * x3
18 print(w3)
简单示例

    (2)Perceptron学习规则(1958年美国学者Frank Rosenblatt)

      Perceptron(感知器)的学习规则规定,学习信号等于神经元期望输出(教师信号)与实际输出之差:$r = d_j - o_j$。

      - 式中,$d_j$为期望的输出,$o_j=f( extbf{W}_j^T extbf{X})$,

      - 感知器采用了符号函数作为转移函数,其表达为:

[ egin{equation}o_j=f( extbf{W}_j^T extbf{X})= sgn( extbf{W}_j^T extbf{X}) left { egin{aligned}1, extbf{W}_j^T extbf{X} ge 0 \ -1, extbf{W}_j^T extbf{X} le 0 \ end{aligned} ight. end{equation} ]

      - 因此,权值调整公式应为:

            [ igtriangleup{ extbf{W}_j}= eta{(d_j - sgn( extbf{W}_j^T extbf{X})) extbf{X}} ]

            [ igtriangleup{omega_{ij}}= eta{(d_j - sgn( extbf{W}_j^T extbf{X}))X_i},i=0,1,...,n ]

      - 当实际输出与期望值相同时,权值不需要调整;在有误差存在的情况下,由于$sgn( extbf{W}_j^T extbf{X})和d_j$的取值都$in {-1, 1}$(要么-1要么1),权值调整公式可简化为:$igtriangleup{ extbf{W}_j}= pm2 eta extbf{X}$。

      - 感知器学习规则只试用于二进制神经元,初始权值可取任意值。

      - 感知器学习规则代表一种有导师学习。由于感知器理论是研究其他神经网络的基础,该规则对于神经网络的有导师学习具有极为重要的意义。

    (3)$delta$学习规则(1986年,心里学家McClelland和Rumelhart)

      该规则亦可称为连续性感知器学习规则,与上述离散感知器学习规则并行。

      - delta学习信号规定为:

            [ r=[d_j - f( extbf{W}_j^T extbf{X})]f'( extbf{W}_j^T extbf{X})=(d_j-o_j)f'(net_j) ]

      - 上式定义的学习信号称为$delta$(delta),$f'( extbf{W}_j^T extbf{X})是转移函数f(net_j)$的导数

      - 事实上,$delta$学习规则很容易由输出值与期望值的最小平方误差条件推到出来。定义神经元输出与期望输出之间的平方误差为:

            [ extbf{E}=frac{1}{2}(d_j - o_j)^2 = frac{1}{2}[d_j - f( extbf{W}_j^T extbf{X})]^2 ]

       欲使误差E最小,W_j应与误差的负梯度成正比,即:

            [ igtriangleup extbf{W}_j=-eta igtriangledown extbf{E} ]

       又误差梯度为:

            [ igtriangledown extbf{E} = extbf{E}'= -(d_j - o_j)f'( extbf{W}_j^T extbf{X}) extbf{X} ]

       带入第二式则有:

            [ igtriangleup extbf{W}_j=eta (d_j - o_j)f'(netj) extbf{X} ]

      - $igtriangleup extbf{w}_{ij}$中每个分量的调整由下式计算:$igtriangleup w_{ij}=eta (d_j - o_j)f'(net_j)x_i$

    (4)LMS学习规则(1962年,Bernard Widrow和Marcian Hoff提出的Widrow-Hoff学习规则)

      - 学习信号: $r = d_j - extbf{W}_j^T extbf{X}$,

      - 权向量调整: $igtriangleup extbf{W}_j = eta (d_j - extbf{W}_j^T extbf{X}) extbf{X}$,

      - 实际上,如果在$delta$学习规则中假定神经元转移函数为$f( extbf{W}_j^T extbf{X}) = extbf{W}_j^T extbf{X}$,则有$f'( extbf{W}_j^T extbf{X})=1$,

      - 因此,LMS学习规则可以看做是$delta$学习规则的特殊情况。该学习规则与神经元的转移函数无关,因而不需要对转移函数求导,不仅学习速度快,而且具有较高的精度。权值可初始化为任意值。

      学习规则总结(注: $delta$学习规则里$f(net)$应该是$f'(net)$)

      

      练习:某神经网络采用双极性Sigmoid函数,学习率$eta=0.25$,初始权向量$ extbf{W}(0)=(1,0,1)^T$,两对输入样本为$ extbf{X}^1=(2,0,-1)^T,d^1=-1, extbf{X}^2=(1, -2, -1)^T,d^2=1.$试用$delta$学习规则进行训练,并写出前两步训练结果[提示: 双极性Sigmoid函数的导数为$f'(net)=(1/2)(1-o^2)$]

def sigmoid(x):
    return (1 - np.exp(-x))/(1 + np.exp(-x))
def func():
    # 定义X矩阵
    X = np.zeros((2, 3))
    X[0] = [2, 0, -1]
    X[1] = [1, -2, -1]
    # 定义dj
    biase = np.zeros((2, 1))
    biase[0] = -1
    biase[1] = 1
    # 定义学习率
    learning_rate=0.25
    # 计算W
    w0 = np.array([1, 0, 1])
    for i in range(X.shape[0]):
        net = np.dot(w0, X[i])    # 计算W.T * X
        f_net = sigmoid(net)  # 计算f(W.T*X)
        df_net = (1/2) * (1 - f_net**2)  # 计算f'(W.T*X)
        w0 = w0 + learning_rate * (biase[i] - sigmoid(f_net)) * df_net * X[i]  # 计算更新w
    return w0
func()
简单示例

   4.神经网络模型的分类

    按网络连接的拓扑结构分类:

      - 层次型结构:

        - 单纯层次型网络结构: 神经元分层排列,各层神经元接收前一层输入并输出到下一层,层内神经元自身以及神经元之间不存在连接通路;

        - 输出层到输入层有连接的层次网络结构: 输入层神经元既可接收输入,也具有信息处理功能。

        - 层内有互连的层次网络结构: 这种结构的特点是在同一层内引入神经元间的侧向作用,使得能同时激活的神经元个数可控,以实现各层神经元的自组织。

      - 互连型结构

        - 全互连型: 网络中的每个节点均与所有其他节点连接。

        - 局部互连型: 网络中的每个节点只与其邻近的节点有连接。

        - 稀疏连接型: 网络中的节点只与少数相距较远的节点相连。

    - 按网络信息流向类型

    - 前馈型网络,与单纯层次型网络结构相同

    - 反馈型网络

    

三、神经网络图谱

    

原文地址:https://www.cnblogs.com/kuaizifeng/p/8663536.html