QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2535|回复: 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)等。在这 里我们仅讨论基本的网络模型及其学习算法。
    ( X2 V$ \- C7 ~3 Q* V' {
    + B+ v! m* F3 o1 e9 q1.1  人工神经元结构
    ' T# X0 q6 d. J3 I) \& i7 _5 P下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素: - `: k; M/ F+ h

    . c0 A$ q" u% k
    , K# {: v* v% c' z5 E& Y
    1 |( V; F) f  r1 ^0 T9 ~6 q0 _& C$ a6 c% ^+ L9 v" E1 P
    4 j" q7 C1 j/ i
    + s: A; F0 `/ I
    . i9 U9 C5 }5 g% `8 X- p( A

    : E3 f9 t" U9 o' X" Y+ f
    2 L; p* h3 x8 O激活函数  ϕ(⋅ )
    9 R  ]$ k8 Z7 q1 B可以有以下几种: ; X$ v! G/ _3 C) B* r
    & u+ [5 r; a3 o) |$ I/ H. ~+ }/ N
    (0)Softmax - 用于多分类神经网络输出
    & N( j3 _3 a. O  n0 v7 `7 W+ S

    " l8 I  r5 }0 ]$ n
    & D! @. M2 E9 F/ X7 ?/ ?* H(1)阈值函数 、阶梯函数7 }7 O/ a) i$ {; e3 l) X
    : A) y9 N# J2 g

      f" w4 |4 z  D" U; g0 Z' P, H7 \( q) V" R- E0 f
    相应的输出   为
    : f- G  S3 I' l) X; f, V* F4 h, B2 n' u$ W& v2 K

    + s7 q4 o6 t- V; {
    " E2 ~+ s: R. a5 s9 m* k# Z(2)分段线性函数
    3 r2 n' P% @/ b9 u( B* U0 q1 y: z/ \3 {$ K) y$ T# m. t
    0 g- b! }- l* n% _" T

    ! Z0 B1 ]7 v4 u6 A它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
    ( y" @( F; ~( X- Y8 b5 {
    + `- G& g+ Y$ v5 @9 v' P(3)sigmoid 函数 (以前最常用)
    6 {0 Q$ r! v: L' C. C
    2 N0 g2 j7 K' l: C# U/ @) S/ S7 M

    ' m  O5 O2 m! g% O2 J( g: Y参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
    / i* d- I9 ^5 a& K& i$ B$ t9 r3 f: o' e2 Z7 N
    (4)tanh  (双曲正切函数 ;Hyperbolic tangent function)
    / n! }, ]: F' |
    9 N1 w8 V" ~8 u* V
    1 e: B4 p% P6 W* A6 T' c' L3 V5 {1 `/ ~( D( b4 e7 ]
    将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
    : U  b4 K2 Q$ M/ ~9 M2 B( M) v2 {  ^4 [3 ^. i  I. F

    : {2 o) X* Q9 m$ @! k' O
    ) K( Q8 d6 w6 B) e/ q- G6 d. ^(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)
    ( L) f" V' \. R) U. {
    # _' d" g) h5 u1 i8 h7 w0 O9 A* p$ u& F2 T

    ' k/ C7 f3 B+ \/ _9 |) s" J1 `3 I7 ^+ Q' U
    # Relu在tensorflow中的实现: 直接调用函数
    : B& a( @5 A; e9 K( v8 D* wtf.nn.relu( features, name= None )) M9 n4 _; K( _" Z# }5 y0 G# a% x0 s
    , c3 ]9 u% A' g, `* `& T5 N. y
    与Sigmoid/tanh函数相比,ReLu激活函数的优点是:  s2 s2 j  F8 O  S' n; @+ F' ]$ i
    6 r9 q8 T# ^/ H" z$ ]& e  ?- N/ Q
    使用梯度下降(GD)法时,收敛速度更快  
    & f) O6 j' K  b* ]: E相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  
    " Z0 S! }7 Z1 N/ J8 \! y$ K1 e 缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。
      r7 e/ p3 y0 G7 d; o: L& o! c1 K. ^# o# u, q* n7 }' \
    为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
    6 s8 c1 \4 j, ^- C. D5 I$ U
    ( r$ V" P( G; l! C3 G (6)Leaky Relu  (带泄漏单元的relu )) X. b" j1 k* z) I5 X# N* n

    5 K, w3 ~) W: p4 K           数学表达式: y = max(0, x) + leak*min(0,x)
    . Y# z8 c# ^3 J; [9 \9 N6 Y* V2 @# |' W" Z: N3 t3 {$ \
    与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)
    % n3 x3 }  ]" F8 Q8 D' D2 k
    5 ]* R, s: ?% i0 x( Y) r4 ^% {. g% z; z& s. U
    leaky ReLU5 T! n6 b3 A3 t) C6 i9 o; W

    5 y+ r) D, ]) v1 g4 ~; A1 G, i5 F: I- m7 H+ O' z; h! B* E

    " n: }$ @+ p3 `8 M) w5 x& Q  t
    ) R% ]: r* e2 S- b7 M4 Z#leakyRelu在tennsorflow中的简单实现
    7 h; n6 w. r) ~( X9 V' j  Q+ n) X$ V tf.maximum(leak * x, x),. L7 w) R0 m( J

    0 j9 k; G* Y- Q0 Q% k" O$ c! J9 \$ C5 Y- D1 L
    比较高效的写法为:; u+ d# f1 `8 V: i- ^4 H0 p+ C2 ?
      N- F* y: ~' g2 F, T1 x
    import tensorflow as tf2 D! b0 z  h0 Y$ [  t& D
    def LeakyReLU(x,leak=0.2,name="LeakyReLU"):# N: D. D% ?( d8 [$ T8 _; P4 J
        with tf.variable_scope(name):# N$ q4 A; S! O0 Y
            f1 = 0.5*(1 + leak)9 Z, G, l# s% e& h' p
            f2 = 0.5*(1 - leak)& m, x4 T6 ^, A; A* Q3 {( ~
            return f1*x+f2*tf.abs(x)
    - _1 u6 p& |/ q+ q
    & Z+ i6 c9 L/ s# t# A& Q(vi)  RReLU【随机ReLU】
    # `4 K2 I2 d+ t5 y2 @+ c3 P+ e9 [6 n: X, |
    5 P) X  {5 W. L6 q' X3 r在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。$ r3 h( S; d2 @* o) {

    5 I! [- E/ k. |9 ^# h& e/ q# ~6 F9 M8 g7 u$ |* T: y. @

    ' H: A  L& }  a3 v+ G7 O6 t总结:    激活函数可以分为 两大类 . u* j0 x& L& X

    / L7 `; v$ x) x6 ~' K, B饱和激活函数: sigmoid、 tanh4 @1 A0 M8 T4 y- W  `* X
    非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】( Q0 \  E; s9 p2 k7 t0 Q
    / y, @9 Q) x5 _" [. |' k, H

    # c% ?9 i/ X5 W( I3 R6 j- ?& }1 }2 a" D
    相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:) T) ?5 V- n8 m  E
        1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。
    : [0 m7 Z" r+ a2 C, I    2.其次,它能加快收敛速度。
    - |$ f0 P3 T# k; J- s* R  r" V/ e5 l
    其它激活函数:softplus、softsign
    % S" s9 b9 m1 ^9 N  L1 ]: |  j
    ( P! m7 Z8 v, |* \7 n7 ?) N
    6 U. [- y/ ?' s# Q7 [  z  w* }& I  [
    Matlab 中的激活(传递)函数
    3 d+ _' w3 K6 L
    & W6 D1 m) ?# k1 i
    8 u7 n8 m7 c" X. G  m! |- _9 K+ Z
    # I% W, h  Q7 T. j* J/ G
    6 X4 U. L! n' S) c. }& d7 d
    0 {' S( T& o5 V1.2  网络结构及工作方式
    ! q- K& G6 k  j: |& ?/ Y 除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。/ ]5 o! y+ k( J( o9 ~$ ]' L! y
    6 }2 R0 i0 V: C+ N& R  a
    (i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。% ^7 Q/ @! t' A) `
    * ^" J9 [3 i/ @. P( w; ~6 J- K
    (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 6 q7 p# d9 S0 A* u/ f/ @

    " n& z  K* \- G" Y9 `. @0 p2  蠓虫分类问题与多层前馈网络   B- A7 A9 B3 c; |9 Q( j
    2.1  蠓虫分类问题
    " S; z, l# U$ x" ]( K蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
    * E- Y9 B6 P9 Y: a9 Z
    # Q3 V' D4 j+ R1 YAf: (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).
      O% H$ q0 z; f: U; v" P$ r
    ! U( [" g" m3 HApf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).6 i% H9 h6 J2 T! Q+ `0 l

    ' M, K. I% j$ k  P; h5 N现在的问题是:
    ! [* `2 |/ F- Q* K/ R0 a5 l: u0 H9 H( G7 Q: U9 ^4 f3 H0 @* C
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。0 Y2 s+ f+ ?9 K" t

    + G: u  }( V  i4 m) U1 H! b# H(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。1 x+ O$ c6 t% m0 Y, `6 z

    7 c( B+ t1 W, y(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
    ! i6 W8 e/ A9 B# ~3 P0 [/ S5 k' g7 v/ v& J
    如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
    + ~: [6 b' P/ u, e/ x; G
    : q. ]0 I4 Q$ |% n9 W2.2  多层前馈网络
    * R: r5 T% ?' O为解决上述问题,考虑一个其结构如下图所示的人工神经网络,5 y3 B  E( s% P; {; D
    : N% \6 f  ~% @  G9 J- X; ]
    + j% E# N5 R" s( w& ]
    8 L% W6 L- J6 F/ E1 y$ Z* }% z0 q
    2 M* P* Z1 L; R9 e1 a  c; X
    使用sigmoid 激活函数:% B2 j8 B$ e" H; V7 }+ i

    4 R1 k1 y! _6 Q+ ?4 J1 i
    , W' q8 R7 z' c* y' B+ B' i
    4 q" ~* \# u; ~6 h0 g: I图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。
    ; ?; z4 Z8 M7 h! q  S# ?2 Q0 j7 X# O/ d. p) o

    * W8 G% |+ c( E/ @$ T2 _/ ]3 T7 v. y& G* \: C9 o7 M
    2 e: V' x4 c, ]9 ^

    : c1 |1 H  O- N5 l0 J& E0 ~" k7 X2.3  后向传播算法
    4 H9 f+ D+ w* v' V& G+ D$ l9 \+ [# [3 o对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法2 R4 L# S5 ?9 u/ v4 p" h; G

    ; n, c4 ?" x% s* }: g下面就来介绍这一算法。【注:梯度法又称最速下降法。】# O. ~6 [# J4 `$ t4 L
    $ d2 N' Y/ O7 t

    $ Y6 e# ?6 W' h. _/ p  E. B1 C, y! o, W  \' F

    + E* \# w' B  S$ C; J: H! z8 i, ]
    7 C6 v( {$ W8 ^+ Q. b
    0 b6 d6 l/ y5 j4 q$ s" y7 L' r
    ) O! j( ?$ r# S0 _; l

    * v% T0 E) [2 B& j) P' m- Q& h  v(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
    ( J) X: `" s. [" A% ^
    * J2 u1 Y0 f  A# Q(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。 ' G+ a& b7 C( _7 ]
    1 e1 r) Q( ~" L2 p* g
    2.4  蠓虫分类问题的求解 # h" ?1 Y# H9 }6 y. I
    下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:: T0 d' m- B4 H( I: G9 L: p

    & I9 J$ V3 L  r5 z: Tclear 3 \. E. C0 h  Q) z+ G, J
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;6 \# B% h1 E9 u& F$ `7 f* D- j2 v: r
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 9 o$ T! e1 G# |1 ]) j$ Z
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00   
    3 L/ h: K1 T( c$ r! ]- y1 Y    1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p); : `) a! T! Z- V: ?  Q0 f, F
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; " U7 ^# U- T) o5 h
    plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') # H) h( R9 N+ q/ h7 _+ p/ B
    net=newff(pr,[3,2],{'logsig','logsig'});
    ( {+ M8 A1 k/ D" s. Knet.trainParam.show = 10; & _; e! c- R$ m
    net.trainParam.lr = 0.05;
    8 x8 a% U" s. q9 C2 vnet.trainParam.goal = 1e-10; / w" L7 g- M5 ~# v, ^' b: y5 |
    net.trainParam.epochs = 50000; ) B: D- ?! N: V+ r
    net = train(net,p,goal);
    * u, V9 Z3 s6 Qx=[1.24 1.80;1.28 1.84;1.40 2.04]';
    ' b7 I  |7 t7 x  e! Dy0=sim(net,p)% C5 I) A0 L- E3 e+ M: Z
    y=sim(net,x)$ \  i% c5 q: v- K$ h+ x0 K

    # `9 }/ L# Q# U! A3 g
    ; z9 i4 n' v' a4 {
      ~0 ?# w8 X! I3  处理蠓虫分类的另一种网络方法
    0 H1 m4 g7 n/ Z3 s7 U3.1 几个有关概念
    ' M6 d. k1 [) v  N( }在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。
    1 [; X6 d2 j  ?, v
    ; C8 K8 @4 a& V/ ~8 n" }3.2  简单的无监督有竞争的学习
    2 `& H; A, X$ D
    5 Y* d0 I5 R% G5 [$ M6 t4 o本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。
    ( r6 U$ m8 C: x) u
    $ M6 u- t' J: E( V- Q+ v  J2 Y( ^4 b. U
    ) ^1 R% W& _6 K- u5 s

    ! ^0 c4 e9 x( _5 v( n% {. a- t
    . G" q' u9 Z) z$ V  Z- v$ ]/ B" h: Q7 I6 u
    7 `6 n2 i! j; Y6 X+ E4 E
    为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。5 ?7 ?: S$ g; M. m. T
    ) c, U4 }) F& l7 k: d
    首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。 / ^: K1 l' K0 c0 f

    8 Y0 h1 b1 f8 W9 C
    $ R3 Q! d! d. M# ]7 r- _& g! K0 Q$ I! M( f! P  j5 D% R( }  L

    . {. `8 L. d+ v
    ' s$ i- N: j5 P" Q3.3  LVQ 方法 --学习矢量量化1 g  A+ j! @- I. o
    " B9 F% O# W- h6 s2 n$ c
    上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。+ B: F, x! W$ k: F" B9 U& d, ]

    , y7 Y4 C4 U+ j/ i! L一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。
    ; S0 o7 J; R& ?( h3 I( H1 z+ _, }! l, w2 l' A- v

    8 R7 H. o+ y- W$ z7 j/ N# D# s" a! A2 o
    前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: % C% t8 d# {3 T) c8 P
    clear
    ) N# l) }" I' W5 q' y( Yp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;* b5 v1 t% H: a4 O
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    $ K8 [$ D3 j  [5 v: w1 U, Up2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
    $ y/ F2 X" r; `1 ~) _1 ?4 n    1.28,2.00;1.30,1.96]; : i! W) h& g; u3 ?5 g* \8 x$ ?
    p=[p1;p2]' ! k" u! {, x  Y3 j
    pr=minmax(p) * `2 }) l7 c# ~9 I
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
    , A4 F. |( Y" t! @1 Gnet = newlvq(pr,4,[0.6,0.4]) & S3 A- ]! z, }" N) M  b0 K+ B5 Y3 u
    net = train(net,p,goal)
    ( ~! @! k! p+ _) v! L2 hY = sim(net,p)
      v. x9 p4 y1 X8 bx=[1.24 1.80;1.28 1.84;1.40 2.04]' / \+ R1 K( n( B4 @, V# f
    sim(net,x) $ h5 R- c0 i0 {9 z( ^
    1 x6 o2 f7 n2 I! E- F
    习 题
    # `6 C2 _5 M) Q' k& m0 a& N1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题
      b; n' |2 N5 H$ M/ m
    % R" Q+ r$ b6 k
    ) ]- b6 c+ g" b7 X( u+ K; Q  g! r; }* x, F. g' [5 I" ?% D" t/ {( ]
    对每一函数要完成如下工作:- B8 K7 B: R+ e, n6 G
    - k3 o7 l# u' s
    ① 获取两组数据,一组作为训练集,一组作为测试集;
    $ N1 L" C: f) @8 J6 n/ d5 _) n" x' i- R6 U" @$ _
    ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。
    4 R+ E$ i- }# O# z3 h# d: }
    / {. t5 a' @# F3 ~0 t2. 给定待拟合的曲线形式为
    & a  X2 m5 ?2 f" \7 L' k& F9 z. q8 x# R
    / ~) S7 v0 T( h) V

    7 d' V$ m! }! s) O在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。# a) D) f9 G' g8 w: r& ~
    ) ~) h0 E2 S/ n) K

    6 `" n7 K* I3 j+ q
    0 ]  W+ ~* \( u* G- t
    , X6 R( W7 c" I6 e  }! ^
    1 {- V$ ?0 \$ s0 a/ y( ?+ ^9 Y8 t, u
    # g5 Q1 T& t  L/ |' U. X) {1 v————————————————
    4 |# Q3 N" A, @& V" k版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, J8 m+ z7 Q2 P  h
    原文链接:https://blog.csdn.net/qq_29831163/article/details/895092795 Z, A/ a% u& l8 ^
    & s2 \  Y9 N: C+ v- @
    ! N+ s, V; g. t2 x% v9 ]; Q% e- J
    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-4-17 00:21 , Processed in 0.501389 second(s), 51 queries .

    回顶部