zoukankan      html  css  js  c++  java
  • 线性神经网络模型与学习算法

    线性神经网络类似于感知器,但是线性神经网络的激活函数是线性的,而不是硬转移函数,因此,线性神经网络的输出可以是任意值,而感知器的输出不是0就是1。线性神经网络和感知器一样只能求解线性可分的问题。因此,线性神经网络的限制和感知器相同。

    线性神经元网络模型

    线性神经元与感知器神经元具有相似的结构,唯一的不同是线性神经元使用了线性传递函数purelin,因此与感知器神经网络不同,线性神经网络的输出可以是任意的。

    线性神经元的输出可以由以下公式进行计算$$y = purelin(v) = purelin(overrightarrow omega cdot overrightarrow p + b) = overrightarrow omega cdot overrightarrow p + b$$

    当输出y等于0的时候,可以画出它们的分界线。位于分界线上面的输入向量能够产生大于0的网络输出,位于分界线下面的输入向量能产生小于0的网络输出。因此线性神经元只能逼近一个线性函数,而不能完成逼近非线性函数的计算。其局限性与感知神经网络相同。

    线性神经网络的学习算法

    线性神经网络采取的学习规则是Widrow-Hoff学习规则,又称为最小均放误差(LMS)学习算法,它基于负梯度下降的原则来减小网络的训练误差。最小均方误差学习算法也属于监督类学习算法。

    假设(p_k = (p_1, p_2, cdots , p_R(k))) 表示网络的输入向量, (d_k = (d_1(k), d_2(k), cdots , d_S(k))) 表示网络的期望输出向量,(y_k = (y_1(k), y_2(k), cdots , y_S(k))) 表示网络的实际输出向量,其中(k = 1, 2, cdots, m) 表示输入向量与对应的期望输出向量样本对的数量。LMS学系规则就是要减小这些误差平方和的均值,定义如下:$$mse = frac{1}{m}sum^m_{k=1}e^2(k) = frac{1}{m}sum^m_{k=1}(d(k) - y(k))^2$$

    可以看出,其性能指标是一个二次方程,所以要么具有全局最小值,要么没有最小值,而选择什么样的输入向量恰恰会决定网络的性能指标会有什么样的最小值。

    如果考虑第k次循环时训练误差的平方对网络权值和阈值的二阶偏微分,会得到如下公式:$$frac{partial e^2(k)}{partial omega_{ij}} = 2e(k)frac{partial e(k)}{partial omega_{ij}}$$

    [frac{partial e^2(k)}{partial b} = 2e(k)frac{partial e(k)}{partial b} ]

    再计算此时的训练误差对网络权值和阈值的一阶偏微分:

    [frac{partial e(k)}{partial omega_{ij}} = frac{partial e}{partial omega_{ij}}[d(k) - (Wp(k) + b)] ]

    或者:

    [frac{partial e(k)}{partial omega_{ij}} = frac{partial e}{partial omega_{ij}}left[d(k) - (sum^R_{i=1}omega_{ij}p_i(k) + b) ight] ]

    其中(p_i(k)) 表示第k次循环中的第i个输入向量,则有:

    [frac{partial e(k)}{partial omega_{ij}} = -p_i(k) ]

    [frac{partial e(k)}{partial b} = -1 ]

    根据负梯度下降原则,网络权值和阈值的改变量应该是(2eta e(k)p(k))(2eta e(k))

    所以网络权值和阈值修正公式如下:

    [omega(k+1) = omega(k) + 2eta e(k)p^T(k) ]

    [b(k+1) = b(k) + 2eta e(k) ]

    其中(eta)为学习率

    (eta) 取值较大时,可以加快网络的训练速度,但是如果(eta) 的值太大,会导致网络稳定性的降低和训练误差的增加。所以,为了保证网络进行稳定的训练,学习率(eta) 的值必须选择一个合适的值。

  • 相关阅读:
    docker下安装mysql数据库
    asp.net core3.0 mvc 用 autofac
    遍历Map的方式
    JAVA 每次从List中取出100条记录
    JAVA 必须掌握技能(三)-Java 基础知识
    JAVA 必须掌握技能-Java 知识结构图
    JAVA 必须掌握技能(二)-Java IO流学习之输入输出流
    JAVA 必须掌握技能(一)-集合类型那么多,如何选择使用List, Set, Map?
    JavaScript 开发必须掌握技能(四)- 更好的使用jQuery attr方法
    JavaScript 开发必须掌握技能(三)- 更好的使用for循环方法
  • 原文地址:https://www.cnblogs.com/gscienty/p/6566557.html
Copyright © 2011-2022 走看看