QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2266|回复: 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)等。在这 里我们仅讨论基本的网络模型及其学习算法。6 }& O0 r: q% k4 ]  h; Y5 s
    ) C, `' r' p8 \- h4 j
    1.1  人工神经元结构5 L5 _1 _; N; g. M& }
    下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素: ) s  }, H* v. |& b  j! _

    6 Y2 i! C7 j' o$ T  E, J& L
    * K4 S5 r  {. f/ }4 s7 c
    " t# k& H6 l; A" R- ?( A+ u' h
    2 C; H. f! ]* {" j) L" q1 }# f* q9 [7 z4 R8 ]3 [9 j
    $ r- M& n2 v; J+ l% ^! G" {
    . p5 J* `, c! p# G- D5 L
    - G6 A( U/ a5 G& q% f

    9 }8 j% W" k) y7 n1 R激活函数  ϕ(⋅ ) 1 A7 `% R1 B& D0 I$ w6 A+ B
    可以有以下几种: - M" o; B5 N8 z

    3 t6 ?! S# I9 U3 x7 B( }- o (0)Softmax - 用于多分类神经网络输出
    , o. w: S3 v1 `8 o7 f* ^, t9 P7 s0 ~' V. t; M

    / s6 x* _1 y. H1 Q- ~, S# \- g) s0 N  G, M1 ]3 Z
    (1)阈值函数 、阶梯函数
    9 M8 _* W% a+ A# y- }7 {$ K% I0 s$ ^# c9 M0 _8 D( r

    3 q: Z9 D. |3 a0 S9 v& D0 w
    $ A  w9 s0 E9 A/ u* K0 S* t# F1 Y相应的输出   为 ' y& G8 m5 o4 l# s; ?

    2 x. e* y* A: X' z3 k+ s& @* {! k: _  w" o" M* T# g5 P& m/ f, x# _  j

    1 e7 \. ^; D6 ^4 e" H: _  `(2)分段线性函数 - @) }3 A, j( g2 I5 m3 P

    4 Z% _. f% F) _1 ~  W5 E0 z& X6 q) w  F4 u9 I

    " F/ {( r+ c- L$ T; K% G: ~它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
    ' U9 w3 H  g: `, G; D" u
    5 c4 d: g, S/ M(3)sigmoid 函数 (以前最常用) 9 P( r+ ^" [1 x* Y4 @- H
    7 R9 c, b; f" E* T4 I
    3 h9 m: S7 L) |* C' `0 ]

    1 w' X" p4 K; r% R4 L& r: x参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。; P! w- d3 p4 V$ v# V7 R" n  z3 j

    ' u) `8 x9 U) r  C(4)tanh  (双曲正切函数 ;Hyperbolic tangent function)
    * P+ o7 D3 p+ H% t
    . X4 n7 T7 x3 b/ c" _3 V2 h
    7 s2 F  M# t; p" o4 ~
    7 \9 I+ m* `( u, \  e# v& S 将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
    ; Y9 P5 b0 `$ k3 U, Q' J
    8 N- C& ^% U9 `% A& {6 G
    : a% q7 s4 U, q5 q/ {& i0 u
    - B2 R8 e7 ?; w! J" F0 ](5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)
    0 Y. Y; Q" I' u& X0 `% K0 H8 @& B5 H+ @2 `+ ?

    0 a: C/ F" a# g- o8 K
    . z2 D' x1 a/ A% F6 f6 ], n
    + a2 f* u( q) l* m, C. C; b# Relu在tensorflow中的实现: 直接调用函数 2 v7 L8 l: r# }5 L7 w8 ~* I
    tf.nn.relu( features, name= None )
    ; G" h( W+ Z0 D
    ! W( P7 U: x' C) l" U4 J8 z+ t与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
    9 x: m. D* C% _  ?; D1 G3 \9 P! K# _/ A; U6 q, A
    使用梯度下降(GD)法时,收敛速度更快  
    . _+ b; d7 o6 H( W* p- B; \相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  % P, |  A/ R! ?. _1 \. U4 [
    缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。
    $ D( D9 w2 D% v' ^( n0 k9 g* C0 P5 ~0 j0 B2 u0 H$ S
    为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。+ i# k# ?! S0 T8 s  c, L
    ) y% E; X/ E9 e6 l+ R
    (6)Leaky Relu  (带泄漏单元的relu )- \1 r0 O, S, X
    - a; N' c" z2 l
               数学表达式: y = max(0, x) + leak*min(0,x)
    , S9 Z: W+ J9 x6 b2 \* @* N% r( i+ z/ d; p2 x0 B
    与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)0 [3 s# j5 f! J9 }8 ]$ a! y
    7 e2 |5 v2 d, R  ?" |
    ( K4 F& k( F% ]6 b
    leaky ReLU! N' ?6 o2 H$ @: K- [
    % I0 w# H! {5 g$ h
    % ]% N- P. g6 m4 q' N8 n+ S5 V

    , R2 j$ M' Q" l. F1 n, D: k  A5 u5 k% Q" g6 ?& z' d
    #leakyRelu在tennsorflow中的简单实现
    $ b! I& K5 O; t; ^ tf.maximum(leak * x, x),3 y2 j# v" [$ y4 [
    ' J  n* u$ q! N6 `8 R
    ! o& J8 q1 B& c, ]$ t
    比较高效的写法为:
    * i' n4 l7 L, \. {8 P2 k9 B: v0 \  z$ m/ H# Q6 A! p: p
    import tensorflow as tf
    5 F6 H4 n* L4 d5 vdef LeakyReLU(x,leak=0.2,name="LeakyReLU"):
    # {# S7 I: r/ q    with tf.variable_scope(name):/ y1 M4 G0 C0 B3 M6 O8 {) F
            f1 = 0.5*(1 + leak)3 B; q+ m) Y& A9 f$ a+ Z* p
            f2 = 0.5*(1 - leak)/ ]' }" v3 h: k4 q5 ~% t2 K4 t: S
            return f1*x+f2*tf.abs(x)# ^9 ?$ i( c% }* O" ^

    - B% E8 P! w' w# [(vi)  RReLU【随机ReLU】* S7 C1 V; y8 z% ~

    9 s, w  j. l# o4 c  v在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。# p3 c: W- U5 M% a1 W2 W1 _

    9 t4 k6 m3 v7 M4 T% e8 w
    + R1 z# J7 b3 [. q( Q' }1 M' B
    $ Y/ K; E$ ~- p8 U8 K) z总结:    激活函数可以分为 两大类
    . e& H9 _7 ^  }4 h4 q8 m/ T/ f0 k0 a
    饱和激活函数: sigmoid、 tanh
    9 \& k5 Z0 J3 D# V" w! q# ^非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】5 M  Z! o! x; j

    * x  w1 u/ ^5 Y& [% B" \4 ?) K' }1 C4 ^8 x
    9 m/ o+ A/ z% s9 q& a5 Q
    相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:
    # [7 r* m: d* l1 z( X- n    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。5 V) _# p! \; Y2 k
        2.其次,它能加快收敛速度。
    . V" f2 X0 W3 A
    % e" Z$ g; y2 v其它激活函数:softplus、softsign7 H: k% ?' B+ ^1 T$ ^+ a1 z

      c0 }/ O: K: ^/ z+ \9 l4 y. z: p) Y- w0 F
    / l$ p  R/ U# g% g1 y3 p: ?
    Matlab 中的激活(传递)函数& s$ }! V/ h2 j( F

    5 t' A, ]2 P) F( H1 Y
    ) Y, Q8 T4 O0 d6 K
    1 C2 Y% }- Z; k7 r/ J1 Y5 K1 r* [% j6 d) I$ M5 t

    2 p+ v2 h3 I% {6 W1.2  网络结构及工作方式 0 {4 I4 W, U2 t, p4 B
    除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。
    7 G% {0 ?( o7 c9 o: o6 g5 k0 g7 @% K8 K% D7 T
    (i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
    & J* F9 \; n: v8 t2 m! o9 L0 u+ z$ t/ [+ \7 m! L$ O# D8 z
    (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 ( S! c. T, l; U3 g

    ! Z% k5 p  X7 i# R& \3 @2  蠓虫分类问题与多层前馈网络 8 |' O" T9 h7 {1 u& y1 C
    2.1  蠓虫分类问题
    # X& U5 D3 H# o- r2 _蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:! a' N+ ]) p  \! T

    ! t: q$ V7 n4 {5 \7 nAf: (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).8 ?! b2 ~3 e& s' }+ ]5 m

    6 s, ~' L7 N( GApf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
    ( v. N: W! ^  G! J
    2 `4 g: T+ N  P  s' |现在的问题是:
    ) B( E  s3 [6 T1 r8 y/ m4 p. w  v, e3 q6 I4 o: H
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
      L% ^- F. j- j4 a' Q: ~6 u4 G, S5 l) ?3 R
    (ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。% s0 V2 M9 `: J
    . H& Z4 Z& [4 s0 t  W
    (iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。: q4 U7 B/ [) R5 U

    2 j9 \2 M$ p% T如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。 / A6 U5 p! E; y$ ?

    0 d1 T: ^$ O) U6 @2 S) U2.2  多层前馈网络
    , g1 Y" I2 a. F4 F为解决上述问题,考虑一个其结构如下图所示的人工神经网络,8 }+ H5 l# n, b, W- L& S

    ; s. E, I  a6 u9 p( d
    1 v) d3 _4 {6 b& D% z* y
    2 x) G- M0 X( z) I, J- T, x/ j4 `; }3 [" g: j9 l/ [& M0 L
    使用sigmoid 激活函数:2 A, e# ~& r$ B

    0 K( z3 h. f6 I+ i. q  |5 L; ^" |1 p" L

    7 X/ g7 ^0 ]' T图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。8 ?5 S7 ^$ b" `
    $ O3 e' z9 Y0 P( z: t( F

    - j: [! S  u/ w/ P# O
    7 r' e- L! ?9 ^' B- J! q9 c
    4 K5 D% \8 D; |  c/ J; p
    3 y6 p, j$ Z: E6 m! Y, I3 s, [2.3  后向传播算法4 w8 u0 s$ X, k4 g8 f! o) `7 u
    对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法' e" w' m4 R- Q- ~4 z% w% Y/ s7 p

    + E8 f: U1 ^4 Y下面就来介绍这一算法。【注:梯度法又称最速下降法。】. j% k2 G0 ~- k  ~5 i. p

    : f4 r( e" E; P8 q. B* Y# \) M# b) K8 z, `" J  {2 i

    9 O' a3 I9 p. n9 Y( u3 d# ?1 e' s
    0 `; q4 B, W" \3 ]- T# C1 _' {2 f2 H
    : I- b& b. u0 y3 Z
    ) b/ Z9 ^1 p& q; R! d

    , i0 {' A' A6 Q) u( L, i0 S$ ~
    ) m  n3 b' h, _(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。3 |. e; B+ l$ `) o/ C6 H$ u

    # Y' S3 W' t! Y' C(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。 7 F8 |8 I' I7 s3 i2 l5 N) v
    + }- s& x+ f' b8 }9 ~3 c- _
    2.4  蠓虫分类问题的求解
    + ?. t! D4 k) k% e6 I0 ^  J下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:
    5 \  R; n, D9 \
    6 h2 T0 N( u  a! f- Zclear
    9 \! ]' s' S5 v/ }4 s/ f1 `p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1 l# C3 G& i! U& q" `9 H+ Z
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    + Q+ E: p9 Z/ Op2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    8 D2 ~  l  ]5 W: L: N! Q" w0 C
        1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p);
    3 @# Y8 |( }3 x4 w9 Xgoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; % P' R5 i. U* F+ r( ?' L5 {
    plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
    % {" l: F$ C0 @3 _net=newff(pr,[3,2],{'logsig','logsig'});   R& r: g$ b9 w
    net.trainParam.show = 10; $ J- M$ s6 e# T' r- `% ?/ n
    net.trainParam.lr = 0.05;
    7 R3 w1 F+ x7 M8 w  p2 ~9 v: c7 Wnet.trainParam.goal = 1e-10; # i9 V) ~( [3 U# F' K- ]6 w2 e
    net.trainParam.epochs = 50000;
    : t* @( K. p3 |& X) mnet = train(net,p,goal);
    4 |. q: o2 o: \5 m. B, c1 Z$ Ox=[1.24 1.80;1.28 1.84;1.40 2.04]';
    $ N# z* k/ J0 Q9 h. K& [) m; B) Hy0=sim(net,p)
    - g. e: S; @; Q& v; ty=sim(net,x)4 H& o7 s  l( i2 z

    " G/ ^8 B( P; o9 a- q, @
    3 p( z# L% i) q, [& ~- h, q' `
    5 {; j* g9 M; l7 r3  处理蠓虫分类的另一种网络方法 + c5 e( d8 ?7 a
    3.1 几个有关概念2 Q( w6 O! K. y  P" B0 q& l3 a# T
    在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。  w. C/ v, E+ i' [* K/ Q7 D7 i
    4 h% M3 Z" W5 |% n7 t
    3.2  简单的无监督有竞争的学习
    & ~5 E& t  `+ A# a6 e+ Q2 _9 y( b4 B5 o, i  q9 }
    本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。   m2 k% c9 a! u

    2 B$ Q  H, b$ A/ [$ u" r4 W' O% ?# \1 z% o' A, u( H
    / k% ?; b2 x+ t5 g

    + v1 _' N% J2 T
    ) R! G% p: E4 h
    . `8 k+ b# Y+ B9 u2 e
    - C' h2 J0 K/ Y为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。6 A. E0 K1 h4 g/ s) |) x

    8 {6 @( M# w( r) [ 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。 + L1 G# l* J+ r  j

    # g* O' d- C( X- P+ R! U) A* m$ S1 m
    ( Q: t% g" |9 E
    % l8 l, j. \; W( `  e' F& V* ]! ?0 r
    7 G: c% d2 H7 e
    3.3  LVQ 方法 --学习矢量量化
    ) q0 c) @. f: h! k: E# U7 w9 t9 }+ f5 ~
    上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。3 \  `5 }2 f& X  y( W9 K0 m& I

    5 V) P9 o, M, w一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。 7 T2 [& w* U, d5 T1 k- A4 o
    & j; H  C0 m) _8 g4 i" ~
    2 z# w7 }& z" ?' I# @6 E

    3 Z4 _1 ?# s7 _/ `前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: 7 {& O# L  }& @) ]
    clear - B/ G9 M- K! }! u8 K
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
    / w7 h; E; j* R2 j; V    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; + C# I$ e# `0 [
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
    ; q! V" b! d1 l    1.28,2.00;1.30,1.96];
    ' M2 L; H) i: ]0 y8 Wp=[p1;p2]' 5 s, W& I* y$ w3 d
    pr=minmax(p)
    # R) g" q+ U. W  S- j9 v0 Ngoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)] 7 P: |; ^8 e1 G4 C, }$ O! P
    net = newlvq(pr,4,[0.6,0.4])
    % \$ b! w: x; k- ]! inet = train(net,p,goal)
    & B! d5 u: W5 e/ v2 QY = sim(net,p) 6 q7 W; \8 F! l1 |/ i0 ~3 n$ M
    x=[1.24 1.80;1.28 1.84;1.40 2.04]'
    5 a& P+ \' _& p% V' \; ssim(net,x) , X0 h5 q4 N9 Q( H6 E0 s" J
    9 r% b/ i  f& [; h+ G/ d
    习 题
    " j4 J6 h; X7 T# }1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题 " B& V5 u4 o) \- v  y
    ) C# E4 x# k/ m: j+ q( B
    ' Y% S- H8 ~# ]2 `5 `

    % ^- y7 c! y. m' W5 s3 W& y对每一函数要完成如下工作:: e. Z% Q% @* X" c2 G" f

    * L  l  r; f3 e! h① 获取两组数据,一组作为训练集,一组作为测试集;
    ! A6 t! G- v) v' D5 O9 e  w0 k/ k# C8 P+ e  h: D% r: X) j
    ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。
    # x2 F+ K7 y: L3 A- r# j$ S7 G: L2 g1 X5 M/ U/ b7 U
    2. 给定待拟合的曲线形式为
    8 }- O# q: T* k& M5 f. S, ]! R1 K& ~- B& I; H2 |( H

    1 O& x0 i% Z7 x. ^+ j. a
    . [: F' a2 O2 ~( J5 u在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。
    : c4 J7 B6 F9 F2 E7 j- A2 D2 [
    $ l  g! a/ ^" n. ~4 X  C# b
    / ?6 b! D- O9 j0 u7 r6 a/ E. R
    3 Q' ^! J7 U& ^
    2 D- y: h. T$ u0 L+ Z. I& u( m3 Q. g, p5 ?' {( D  `4 O8 C

    / V& j1 a! z8 E( o( n9 a————————————————
    % S  |0 ]8 M0 @0 Q7 L+ z+ V/ E版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ B0 M7 \% y+ @2 w! z" `
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279
    2 ]0 b! V  ]% i5 N- J2 \* F0 L3 ~, {/ _* D7 }- o* b* F1 s

    3 Y3 }  s9 G, y1 o* ]
    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, 2025-6-7 03:33 , Processed in 0.804638 second(s), 51 queries .

    回顶部