QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2628|回复: 0
打印 上一主题 下一主题

[建模教程] 神经网络模型用于数学建模

[复制链接]
字体大小: 正常 放大
浅夏110 实名认证       

542

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2020-11-14 17:15
  • 签到天数: 74 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组2019美赛冲刺课程

    群组站长地区赛培训

    群组2019考研数学 桃子老师

    群组2018教师培训(呼伦贝

    群组2019考研数学 站长系列

    跳转到指定楼层
    1#
    发表于 2020-6-4 11:24 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提 出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了 50 多年 曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理 论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。 它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感 知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这 里我们仅讨论基本的网络模型及其学习算法。' h7 @4 Y: |! S* n9 r4 O/ K8 K9 k0 ]- g, u

    4 ~( h5 ]" V/ w1.1  人工神经元结构
    2 v6 G' {5 U/ N$ D5 l" \7 P" s  H下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素: 6 B2 J& S/ i/ R) O6 Z* L; F
    : i8 x/ {$ s9 ]  L! B, n
    $ Q9 w. d$ Q6 D) D3 C
    - k4 E6 K4 M3 {4 n4 `

    ' L. z+ s# P, @/ w3 J% Q' @8 J, _9 c

    9 c. l: o' {5 z7 H+ N- W6 D) k8 v' F( `: O4 a
    & K2 P- u. N& n8 n3 ?/ s
    " H0 ^, P  {6 f7 z. p$ P; _4 {# o1 H
    激活函数  ϕ(⋅ ) + ]" ]+ }' `$ m( B: l
    可以有以下几种:
    : E: e8 c, R1 X1 x1 Z5 y
    8 U' ~; S* f% Z; F (0)Softmax - 用于多分类神经网络输出
    # S$ A3 n; Z7 }* J2 Y! {1 M
      d' D7 _5 d) H4 C" q+ P$ Q8 G: q" ~2 J! V4 J5 \, k, t- p% u

    1 ~- @9 |# w) J! @(1)阈值函数 、阶梯函数
    4 z8 H( \8 W8 r% q' s- O: C( l. Z6 _$ i/ f

    : u& z* a/ _: u4 @; E) n
    8 P6 j0 I. {# |# D* `5 g相应的输出   为
    6 \' T9 l8 D) z0 R2 [7 M+ M0 W4 |) W4 t

    5 T9 p, J6 F5 q7 M: f+ z$ r/ T+ h. A- j
    (2)分段线性函数 9 m# g! p8 C1 R" e& K+ R& t0 u

    ( _2 g8 ?" j$ w6 Y$ D  `: j. q! O; V) W* |  M* q0 S- j8 |* ^+ ~
    : b9 f$ W7 w3 C1 @2 L2 H7 z' X
    它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
    ; Y+ D  s9 o6 `6 P. L
    6 X8 d0 N* A3 m* N9 X, o8 A0 A& J% K8 V(3)sigmoid 函数 (以前最常用)
    2 y/ ~' ^# @5 T! Z, `( D
    / \9 k$ ]0 ^6 t& A5 P" I' u: \& n4 ]1 R
    ! _+ j+ ~+ l" a2 \. ?" F
    参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
    : J9 ^' |3 S) P$ j$ j% H7 Q6 x8 x; ^" A0 x% r" i! l! ?
    (4)tanh  (双曲正切函数 ;Hyperbolic tangent function) ( T, P" l4 r& g" z! e0 z# F* V
    : l9 L8 }. h; o- |/ c4 a+ }

    $ y* Z) N5 b8 i) {6 F* N7 e4 A: c6 e- x, I5 Z  H: @
    将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
    1 q4 G* [8 x7 }# m2 `9 j5 r, l2 c0 r6 t* }

    1 `# G, I% r6 Z/ `" T. P- f
    8 a, v% |: }5 T( N(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)4 L# N% H, K5 u: Y) `

    ! K# W" ~4 U+ `! v& @7 \3 [0 V3 @1 d7 t" k9 k) ?# Z

    $ q/ m3 Q) `' Y/ l1 h! z$ h3 M  k4 O! `* {/ {
    # Relu在tensorflow中的实现: 直接调用函数
    * N) g0 q5 `+ z; ]tf.nn.relu( features, name= None )# {5 v+ i" B+ t% g' _/ |, c: g

    6 X% J4 b5 e3 Q3 ?与Sigmoid/tanh函数相比,ReLu激活函数的优点是:3 g0 \, [) ]. b  U- O1 A( N0 r5 o
    2 T- c3 I  W9 @& d. J/ n" R
    使用梯度下降(GD)法时,收敛速度更快  
    8 K4 r6 ]6 I+ `. V9 @相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  4 l1 Z) Q0 S9 y/ A8 ^
    缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。( R- m" f( a5 M; Z) q3 u

    # Z( y0 n" t5 P2 ]; ~ 为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
    7 T. Y. z% O/ n' w$ f  }8 k
    ! c1 u2 S* ^: r% u3 i& r8 b (6)Leaky Relu  (带泄漏单元的relu )6 g1 I) }7 O6 p: G
    5 s" Y3 U+ G! F, @$ A8 t' @- A
               数学表达式: y = max(0, x) + leak*min(0,x) 7 P# u7 U$ X1 B5 A1 E- h
    * f) V8 l" S! }- u( ^
    与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)
    : J* C" t9 R( r# r% l  v) s4 j; u2 i* l  D6 \
      {( {+ r7 K1 `9 Y) o) Z- L. F
    leaky ReLU
    " n; |# H4 K% B2 \4 _
    6 {0 G7 N' `# |& Y! M5 ~5 _
    + [( M0 o7 b- ~* C) K1 c9 t4 Y
    6 B% z# A. c# Q% i* h% \
    0 _% S9 H( Q+ M6 F: e4 Q& G$ N  x#leakyRelu在tennsorflow中的简单实现
      [9 [$ l  v, u$ u; }' J tf.maximum(leak * x, x),
    " ?5 S* {/ Y" O  g% G9 i+ d5 H1 n6 z7 \3 R: _! {# |

    7 d2 c* O$ [/ h 比较高效的写法为:
    $ I" Z- V& C# h7 g; f5 I9 e0 u. i' }" [/ h
    import tensorflow as tf6 I# |& A. w* \- C4 W% N
    def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
    7 L) ]: _& @+ f; N$ e    with tf.variable_scope(name):
    0 X' W( [& o7 x; Z! C        f1 = 0.5*(1 + leak)! k$ {5 L1 e( o8 F/ r3 W0 O/ C2 f
            f2 = 0.5*(1 - leak)
    * x& n/ O* ~% y5 [, Y6 p        return f1*x+f2*tf.abs(x): q3 m5 `2 O3 ^6 D. t" f

    ; W: R8 C5 e8 _& [& e* J$ i' z' n(vi)  RReLU【随机ReLU】5 v2 U" b  g7 \' Q# S9 u- z
    " J- O3 F* P4 H+ }: ?$ _
    在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
    0 ^. [' \; G" W1 k' m& u3 D
    ) ]& x% R. h+ p3 _  r& K
    & C4 {9 t1 T( X, }, F
    ( b( T, X# s$ o( q2 \& I总结:    激活函数可以分为 两大类 5 u  \4 w5 g1 a- I4 |7 K/ E

    ( J1 Y  h, i' U( J4 {饱和激活函数: sigmoid、 tanh
    / c7 f' ~) Q/ x非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】. E1 Q: t8 @' |& P. C
    0 k# K. L* v+ V

      t. A' D7 D3 Z: M
    & M. {6 s6 \+ m/ z: J相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:& e, d: C. H- F# I
        1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。2 F3 K$ e! l4 y3 r# }
        2.其次,它能加快收敛速度。 + K3 o. B4 B# _5 A/ R
    * e8 z/ r/ [% X
    其它激活函数:softplus、softsign
    ! q  t  Y, ?% v; ~) M  `3 ~
    & r+ E2 P( R$ ~2 e: Q* z% S2 R! j/ x" [2 o5 M7 E+ `$ f- R9 b% V5 P# V

    . h. C( h1 K) W% b, [6 ~; W0 hMatlab 中的激活(传递)函数" ?, W' E; B* z5 H

    4 z8 q( x! `/ w' }& a
    9 D3 ^; C& {# H% U5 p* Y2 g1 W0 f. S
    5 E6 s" V4 T" D7 g9 z

    " H: o* r7 F, m  I5 ~  A1.2  网络结构及工作方式 - Y3 {7 X( d5 A, u1 A1 |+ k
    除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。$ G! Q4 d0 M/ g" O

    ' h" Y/ g/ l( M6 w+ |(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
    " M5 c) f' h4 o% B  f2 Q
    6 W  c5 S6 R  s( X5 O! Z, t(ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。
    7 _5 _9 ?4 W; R* t1 d1 a
    ( S# J! \9 @' @" t8 R# F2  蠓虫分类问题与多层前馈网络
    ' j% T: Z0 F% n# l& H3 ]- s$ B- l* J2.1  蠓虫分类问题
    - a/ O$ j3 n. u8 E6 _蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:8 V3 g, D2 n4 k6 I. l. Y

    # t2 \( n5 K- l* O5 Y) jAf: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70), (1.48,1.82),(1.54,1.82),(1.56,2.08).* Z4 p6 a9 P6 E# @8 X
    ; A! r% V  n/ P/ v# p! @9 ^' [& R0 {
    Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
    ; f6 A( ~9 _6 Q/ o; y) E& L- K: s9 p) Q
    现在的问题是:: c1 x/ i! @6 s: V2 p' V
    ) E, I: [+ o$ h- J7 r
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。' [* u; I7 W1 j: W
    % K; ~6 b1 y( n$ n/ b) R
    (ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。( y) S' R7 z& X5 h9 s; C

    8 C9 L: z" D7 o, |(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。; V5 z: }. `. j, V

    2 H1 ?  `! k4 E8 i  D8 J& h2 A如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
    2 e" f7 V5 |$ ~9 l, _$ S! r$ D/ x* q. N+ Q" I/ s
    2.2  多层前馈网络 5 q/ C! j4 S/ f4 u8 r8 [. Z# k1 J
    为解决上述问题,考虑一个其结构如下图所示的人工神经网络,
    . s! c( s) G; z4 q% F2 K1 v% D: t) w5 E& P

    + c! p( T: l/ ^) [
    . n8 a, }, I2 J% O# H# S+ C- _8 m2 n9 @0 ~9 [" g& x, J
    使用sigmoid 激活函数:5 V* f! z6 Q) s

    ( H% F1 Q0 S" f7 X; A2 s6 U. }4 `& f$ g/ |+ U7 q

    & f! S) \6 C& }) Y. {" y图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。1 \. u" \* r& Z% G5 y

    2 m7 _% S1 O" Y+ ?' \$ ^1 M- q- C$ Z; E9 D3 c* W/ R

    6 L0 U. l1 N7 d' N1 q' h* V$ U7 V) h$ E& y

    4 e: i$ |& X+ u7 G7 p3 A3 e, p* v# c2.3  后向传播算法
    - J, B5 [) d; a对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法
    . \! [% u9 i1 L+ j. \
    $ }! i  C! _" J: c& t, J! @6 y下面就来介绍这一算法。【注:梯度法又称最速下降法。】
      K' \, Z% I6 \: q# Y
    " u6 Y+ r$ U+ v* ~) s3 p+ @" j$ b" ^# {2 |' ~: K/ s" j" v

    , E& `8 a( ^# w5 t
    & A# b- t) \7 |5 y" _* ?# h
    3 ~* a, A! r  u) M& H( G7 c
    " S- H& [; C7 |/ ^
    8 v& O  d( m9 `: _5 G9 w( q! F; A# h( `; o" [4 S

    + o6 x/ ]/ d( \- W9 P' {+ C(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
    + H7 {  E. L; s7 `; C
    ! }  K. t% H  _, P(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。
    , C& e$ U9 m5 M: W0 F5 K7 o7 d0 Q6 u6 b6 j0 O( p* k
    2.4  蠓虫分类问题的求解
    9 r" D( }  b" ]& F下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:5 W4 T6 c; X5 V* k& k5 v5 [8 t

    * R* h2 R  e7 F8 Eclear + v, ?. g# E  r
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;# c; e9 u6 J- l% V$ E' V# ^" i! p
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    2 \7 A" N8 }0 |% c1 sp2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    / M9 k4 u0 D8 y7 M* w. d& O
        1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p);
    ) i7 _* r% r) T5 j7 k. \; o& t/ cgoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
    ; c, n+ W3 s9 w0 B5 g" \# ~2 Kplot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') & ^2 l$ J/ E0 }9 M- e( Q  t
    net=newff(pr,[3,2],{'logsig','logsig'});
    ( [+ t) V4 \8 S7 K: E" Fnet.trainParam.show = 10; 3 a+ Z) K! d: h% ]3 v0 z
    net.trainParam.lr = 0.05;
    , H- F- I5 Y3 i9 W( Wnet.trainParam.goal = 1e-10; 5 y; F: y6 T  X9 g+ \8 q6 V0 b/ i
    net.trainParam.epochs = 50000; 5 x/ N* T, R$ m* e2 K  T3 p' [
    net = train(net,p,goal);
    & J0 j* ~8 s  i/ @4 U: ?' ox=[1.24 1.80;1.28 1.84;1.40 2.04]'; * X: d. _) h7 f
    y0=sim(net,p)
    " g* o1 I1 w/ h+ Ey=sim(net,x)
    8 ?* v& c  m: m& N3 z; ~- f6 F% u3 v! y( z

    & Q% u& I. F- r8 \3 a1 u. D& W
    * [" q0 C7 }+ Z# @2 d; W3  处理蠓虫分类的另一种网络方法
    ; j. c% o5 w: U$ b4 n" b5 h3.1 几个有关概念0 O5 K* W  R- m
    在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。
    0 B8 Z% V" G) F. L4 {8 [3 J8 |: q2 u5 g0 H* g. \/ h
    3.2  简单的无监督有竞争的学习
    4 }* E, C3 H9 m$ D1 Z. z/ ]8 J
    8 R: M2 @1 H2 Z本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。
    4 m# A8 J/ i/ |5 r
    5 D; |0 S; \: g# C; p, E$ I5 M& i. q1 B4 D) m, _* ]; [8 Q' X

    9 v& G9 Z/ G% H+ F$ F' f( ?
    ( A  ^0 t# h4 _# W' }- v$ h
      l4 `7 j: {6 O8 \, }) z, r3 r/ ?5 }& P9 p
    / i, f, [1 z2 X4 B$ K3 V8 m  i7 h+ q
    为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。
      J  p) x$ j0 n4 W% O7 h
    ! |& I! _: E: a9 F 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。 9 v& T& E) Z2 j0 r( Z* i7 P6 F

      p) |- G& v7 T& h1 B6 c
    ) X% R% j+ a; i! i# n0 k! _( K$ h/ H
    ! q+ Q' c  b, U- |& n: P4 t. b9 H

    & Q  U  _/ m8 z& O1 a! E3.3  LVQ 方法 --学习矢量量化% Z1 G& F* O# D' r& e$ s9 m

    2 Y) b6 ?: t; L" [% g上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。. y7 Y8 [# |, v9 g! I9 a/ ^

    ) O8 l) u' P1 v  V3 O一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。
      z4 W; t( X5 ?- M3 X, @& O- y; T  Q( `4 @- V: i0 d& b2 x
    9 v6 J( y" d: ]6 }
    ' `$ r9 u% U! @
    前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: 2 g6 o# }1 K; s5 ~1 @
    clear
    7 v! [& v- q: f9 w8 r/ P5 `: Dp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
    " d8 d$ B- v. D; w    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    " k- b$ c/ R1 Ip2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  ; G1 r8 }6 H  m, h4 r
        1.28,2.00;1.30,1.96];
    ) I9 N1 r' t* q0 F  fp=[p1;p2]' + X. o, H9 h: Y1 v" @5 E
    pr=minmax(p)
    : s, h+ D$ n& L/ wgoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
    2 }; e$ a/ V; ~0 c& g, d( s7 hnet = newlvq(pr,4,[0.6,0.4])
    # a# g+ c& I. S% B$ k6 f) E0 A" pnet = train(net,p,goal) ! M8 {1 h- K3 b' h' J) N
    Y = sim(net,p) . q. r( U& w# T' k# e
    x=[1.24 1.80;1.28 1.84;1.40 2.04]' 7 H5 j- J7 Z9 l/ O4 W* X
    sim(net,x)
    7 v0 |9 M5 t* Z% N' V
    ; R$ B5 a' a, `- W' f习 题
    * u" B' J& S5 r0 t0 E6 v7 D1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题
    8 J2 g; g3 x5 b, l6 l, t" ^/ p; f( v
    9 `* @; e$ S( u9 u5 \0 a
    . X  B0 c! ]; T* d0 h# `/ f
    对每一函数要完成如下工作:, ?/ ~% R9 ~% @+ n: C) n& e" m- j

    ; |0 x6 ?! h- ]' o6 R( ?! G8 K① 获取两组数据,一组作为训练集,一组作为测试集;
    9 H" y8 q9 A; C$ n4 v2 L/ m/ U. R% t7 J% d4 ^4 m
    ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。
    ; `8 u) r8 ~) ~8 e
    * [- S. s/ }4 m3 S0 w  d& G2. 给定待拟合的曲线形式为3 ~6 K- m- W" j. g6 V

    * f5 _5 ~5 [9 ^
    / E1 m" H' _" s. ^5 z8 [9 w/ S7 {" a2 ?2 x! F! O* F
    在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。
    4 V7 ^1 \; \8 u, t
    ( \! h0 s/ E1 w+ W: b* D" X
    & ]2 d$ A4 X' e# z- A
    ! X/ S9 b/ B' K2 Q0 Z! l$ [
    # q1 y& Z( [- L( j  B2 b! k
    2 C8 D4 X' X) p. {5 C) k- ~
    . j4 ]7 e4 p6 z% ~6 n————————————————1 G* m  D* v# t) _" K# c8 x
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! \& e& k: T; R; M6 _* E
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279
    / E* J' @1 |, R' J& U' M& P& ]. m

    1 b1 t3 _" A( J1 \9 S
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-8-4 10:47 , Processed in 0.479165 second(s), 51 queries .

    回顶部