QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2616|回复: 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)等。在这 里我们仅讨论基本的网络模型及其学习算法。
    & j& r. a, t1 i# ~$ f
    * p9 X7 k, a& C, l: N& N! y" e1.1  人工神经元结构2 f( C8 p$ i- t
    下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素:
    6 N1 K* f' q) V" ?% ^! q. y; p
    9 M# l- O* ~# a% I, W$ K# V1 p
    7 r( {9 ?4 ~( M% n# U( S6 w; D% y' o3 a& r

    9 s' Q9 a7 J) ?5 e1 x: T( Z6 p) {; G/ ]3 D# v

    ( y1 \$ a. ~7 g7 X$ D2 `. A' v- N( c) Q3 V9 D/ ^( W
    9 x# B6 e- e5 v2 g/ z* [  Y/ @

    ( V3 S+ K: R) D7 E5 g, K% B8 T# `激活函数  ϕ(⋅ )
    : H2 w, U% ]2 L$ |! |/ p% T, b可以有以下几种:
    - Q; e. C# o  r, u" y
    8 ~- f% ?; {# k2 D (0)Softmax - 用于多分类神经网络输出
    * c9 e! l& g9 ?. H' J/ p3 i
    ; m* j' K! K4 x) @
    ; S' Q8 y# q5 }' ~) e; Q( z. T# Y$ l
    (1)阈值函数 、阶梯函数8 u* v- [/ K9 {0 c1 B

    ' z. V) r/ f8 ~; ]& p/ |( r2 R% b9 T% f6 x; O& x

    2 ]6 J" A2 A  ~/ t相应的输出   为
    ! |# H* s6 P$ m/ M+ c7 T' w6 r) e- A; R8 O& }
    6 u7 [& g6 v) ~0 n# X) ?

    1 w4 I' m. f* }: V(2)分段线性函数 2 A  w$ ^( T, Q
    2 U9 z; E4 J( i# u7 |  D3 {, A, j
    5 f& d4 b: {$ t/ r2 u" f/ Z1 A
    2 q4 W& [1 Y$ L
    它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。 2 v4 X0 o0 p7 U/ b) r

    ) V% A; `1 t5 u$ l! I4 R' k0 b3 J% t(3)sigmoid 函数 (以前最常用) 2 A- Y7 v/ T- Z# w; ?* r

    ; K* e* p0 ^; A+ m+ A5 H" E$ ^$ H
    % J! ?: f# h% |# _+ S" _3 [+ G- Z' v: d- r2 a4 s
    参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
    " n1 }# y* I6 j! G
    3 M; A% m( j/ J" W! h# b) G3 P. `) i(4)tanh  (双曲正切函数 ;Hyperbolic tangent function)
    # E+ g) L4 I; \9 Q1 _
    6 Z7 x7 u1 G' D- \' g! l: o" F/ {
    1 A6 Q; h. t. i. }
    8 C$ h8 f6 B# s/ L, l8 s 将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
    8 E  `$ e# Q0 d" o' D& L2 t# k, B9 M$ a9 I3 O7 E" g

    - d1 K- r* T. Z1 c
    ' i. j" p0 ^) y9 l(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)
    0 h+ Z+ x9 j0 T+ W+ s; G' X7 p! `8 s2 e9 l
      E6 s; u# b! w9 u) T& `

    3 R& V  Z) s4 r. D4 n( V) u# G3 H# R. ^( w% b
    # Relu在tensorflow中的实现: 直接调用函数
    + J/ e0 M: R# l8 Stf.nn.relu( features, name= None )- ?) k5 t0 Z+ o4 o, D4 H! H5 Q8 Z# I

    $ W0 y% J* ~% F+ s与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
    7 ?% D3 F# p; \) A$ r6 b+ ?& u+ c+ W! h) X: N" q* r
    使用梯度下降(GD)法时,收敛速度更快  
    , l5 j/ `  S% w% F- U3 D9 S相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  
    5 W3 g, s3 T. N% r" I! g& O! V 缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。3 ]& ~( y6 u( h5 L# A% ]

    5 f7 o/ P. q4 ~0 u9 d7 X7 A 为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。  v% `3 W$ G4 p: D- v

    ' T' P+ Z1 S% M# ^9 ~( Z (6)Leaky Relu  (带泄漏单元的relu )
    " [* _- b& z$ t# P3 r9 C% V" f% H- J# D4 |' W' d9 z
               数学表达式: y = max(0, x) + leak*min(0,x)
    ) @# }6 M5 a* v+ L+ x& x6 {; a/ Q" o( @, N3 z8 J" C
    与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)
    , j0 [3 ^4 g' C+ C5 x6 U4 r# O' P( F- w; L5 P; E( c
    ! g7 R3 \' X2 w: S1 a7 F7 S2 O( i
    leaky ReLU
    9 a8 e" m' g' L7 ~. C6 F, `5 O% v* x' Z4 b/ ~; Y$ M

    $ R& r+ m( Y3 c1 y2 j! q6 \& V# b) a6 {6 B  U6 A: d( r( E
    7 j% l/ L/ }3 M! D: x
    #leakyRelu在tennsorflow中的简单实现
    % r4 B7 X1 u' ]# B( T tf.maximum(leak * x, x),7 l/ x# X$ B' a: F. B
    0 G% u$ ?* k! z4 @" h% j" J
    , X9 m7 A$ i. h- h
    比较高效的写法为:
    / }8 @1 d: b! L4 [: b: O" R
    4 O4 X7 _" K- A; E5 E) Yimport tensorflow as tf8 y. C( S# C& w
    def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
    ( F4 L. f* G* _6 G* a    with tf.variable_scope(name):  G& c! \( q) E
            f1 = 0.5*(1 + leak)
    9 h9 w& t, x) f0 W        f2 = 0.5*(1 - leak)
    ( J' w6 L4 J) J9 R) z1 B" P$ X8 g        return f1*x+f2*tf.abs(x); M- U4 c7 j/ q/ ~

    ' ]/ q4 \# V" Q. q- q5 X(vi)  RReLU【随机ReLU】/ j8 `2 v$ y, _4 P9 g: N: L
    0 U; k% S1 P5 ~+ l5 c; j- B9 v
    在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
    , k! X6 i! Q2 a4 H3 N' f- v) f' D- _( B

    , Q9 o( X6 I; \  C- |- K+ R9 _2 m  A8 A4 ?+ |
    总结:    激活函数可以分为 两大类 + B, ]. D- B9 X" e3 O8 v* B' Q% I* T$ k

    $ J, f1 R2 d0 G, n+ k5 Q饱和激活函数: sigmoid、 tanh/ T) C% e8 Z, V+ H3 `
    非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
    4 X% g- e! y' {1 z6 i. Z5 t  X' e4 ]' ]1 b
    * [8 k1 H7 m# w4 _9 \! [4 d
    5 p, V$ X1 c7 W
    相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:3 A, `: c7 P1 I; f4 s
        1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。4 |" o8 ]. Y' a9 m: O! T
        2.其次,它能加快收敛速度。
    + s! [$ t; }, ~9 h* Z/ v
    0 s6 h4 L" q3 \9 Y3 S& b1 k! [其它激活函数:softplus、softsign
    7 h. a& m* m9 ?2 |/ ^2 i* m# P
    : Y  e$ w3 o3 v, H

    ! s. o% L' [( T+ `Matlab 中的激活(传递)函数
    0 g$ d  [; }% d, T# z$ C6 k! S' d+ d7 v5 r' Y
    7 v. ?! D4 S' P$ L1 G
    % a- P' T* L# I
    ) @0 q/ V& ^' [8 F2 i

    ; `1 D' ?4 q4 o* k7 K: Z) Q0 X1.2  网络结构及工作方式 & x4 I! U+ \5 m" M
    除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。
    ! F9 N8 `- d' ?& p% S6 Q' }% N) \& h. c/ g1 K. T* U- X" j* N$ `+ X
    (i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
    . P' k3 o& @: q4 b4 D1 {& n$ ?0 t; @3 C  J9 d6 K' H
    (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 , T$ ]- R) h0 B! F: _

    % b0 R" _3 ?# [, t2  蠓虫分类问题与多层前馈网络 3 \; K2 ~. m" ^  {0 L/ c% ?* V
    2.1  蠓虫分类问题 ' J1 v- L0 k1 |, r! `) G
    蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
    6 `7 L% O, ?" f0 I4 d5 i+ m: |* g/ w; S) S. N5 [: [
    Af: (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).3 G& s2 c, J: F. f1 Q$ _5 e1 M

    ( ], q! e" N  I0 cApf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96)., h3 w3 M3 K. J/ T
    ; e7 V$ y. V! w+ g* P" E
    现在的问题是:) _/ m& S5 q7 y( N
      C% |5 M9 P# N, I: A/ ]
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。7 [, t: c  R' z: A: g. y

    & z- T& H- `6 ~(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。
    & `& r7 b1 Z) J0 ~! I7 S# U" q& b
    (iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
    ' F" c' m5 N3 q$ g# K! X. P0 n/ C# J/ R6 Y
    如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
    6 v  _7 Q. c3 O" z* l! B+ ~
      y# P. }/ F) a. }8 D) a- i4 _, j2.2  多层前馈网络 1 N0 E7 ~# Q( Q" N/ _2 o$ @' N
    为解决上述问题,考虑一个其结构如下图所示的人工神经网络,
    : {+ N+ b/ P8 b0 L: `7 u( i4 q
    ( X" f3 e7 y$ i. A3 w/ {
    7 i, k. s9 Z9 ^0 Y! k& w. k5 e+ V
    ! b4 L( B# n* z1 ]
    使用sigmoid 激活函数:
    $ O/ K: G- |% ]5 m/ i
    ; c# |  Z5 ]3 u) N" T7 K  N2 I% Z' {
    2 v( R4 c: R; _1 w  I9 Z
    图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。
    6 P8 X& S9 D4 j  Z; g+ D! O9 F9 [
    ' Q9 b2 F. ^4 o7 M/ l# ~, `5 `% q( l0 K+ V: q

    2 m( j3 e/ b; O+ A8 y( M' S$ \$ o3 e7 |9 ~& p8 g) g& S3 V

    ! J! T$ `, ^& B& K+ t5 |# C2.3  后向传播算法, `1 L$ i8 ~1 w  u5 S
    对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法' b1 c0 H( j- h8 H' z

    9 a$ b1 E% L! p7 Z2 N7 k下面就来介绍这一算法。【注:梯度法又称最速下降法。】
    ; C) i- f2 G8 y3 y! ~0 r
    ( h' ~8 \4 Z) p( _# W; l" \) `$ m& T, o: v
    9 o; L! d: [2 ^, z$ U% X+ e7 ]: h

    ' f  N7 @6 p5 p- B( l: @0 B* b, Y. y! Y" E3 P
    , a3 ?" l0 ?3 d! T) y  z/ O, R
    , p- q; {1 k6 e& ?5 @0 w

    5 h4 P  T1 D5 u. [4 u/ w; K/ {% Q9 a) g* [4 M0 @# }, [3 x6 u- N
    (iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
    - F3 b0 o/ b) @( g4 D4 B  P
    , r/ R6 m0 s4 A5 q' x7 l(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。
    + \6 q- j2 g) ?/ a. x
    ( H& J( w7 R! ~  B1 N% c2.4  蠓虫分类问题的求解
    7 U9 F$ i  z" w下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:
    $ u. B" Q9 b  D+ E+ ^/ F; J
    0 G7 j7 }" ~  z- \' Q' c. p0 Bclear 5 Q; X' f+ d5 b4 a$ u' M! u
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
    & j3 {0 T2 \, ?5 P; Q    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    2 W/ p3 X/ @  v& up2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    + P3 ^  G2 r4 q3 D) B2 l6 W" V/ S
        1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p);
    . l1 E. [& {% S. V, D4 `goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
    ) M3 _, P/ R* q5 O: ~1 Dplot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') + E% N6 g9 J- `
    net=newff(pr,[3,2],{'logsig','logsig'}); ( R9 r) f. c) ~  P
    net.trainParam.show = 10; ) a1 c- n9 G# `2 x9 B1 j6 v
    net.trainParam.lr = 0.05;
    9 D* O8 d! ]% t. K( i1 @* gnet.trainParam.goal = 1e-10; 4 r+ w" P; z/ R
    net.trainParam.epochs = 50000;
    . b. O* ~. i5 C1 ]! |net = train(net,p,goal);
    $ c1 F; {) N5 Dx=[1.24 1.80;1.28 1.84;1.40 2.04]'; % ?( m# M2 E! X7 d5 L, A
    y0=sim(net,p)
    * Y/ [& {( B7 i' Z, g* M* Jy=sim(net,x)
    ' k  z9 T7 D7 R( j$ X2 k) S
    0 w! F( G: _  h: a! Y) z5 u% y
    9 B! V! o! |, f6 _. E* ]: h3 E3 O4 \
    3  处理蠓虫分类的另一种网络方法 8 c8 H& v, l: E. ?) n) N
    3.1 几个有关概念6 X. a$ y& }3 @
    在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。0 S- |+ j( H3 O' W& m

    - V4 c) O+ e6 K* @/ @3.2  简单的无监督有竞争的学习
    $ Y; D) \9 n$ a- m
    ( a/ |8 y$ c! K+ n0 v) `本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。 7 R; F6 T6 C" k

    - j! Z/ g( l: J4 g- g
    ! u2 |# [6 L2 j
    4 Q0 Y2 C5 m9 w! a$ |( F* E
    ' h9 ~7 l) V/ ^5 u( {3 r9 `8 I( m9 c& Z0 I% T

    7 \* @% q7 l7 b  |6 N, p
    0 @- x: S- k: t2 s+ h! P( f% _为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。9 |' J8 {* W- _0 E
    2 a  i4 d/ r* C
    首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。
    ; {1 z' j. O. _( H2 o
    " l; u0 R1 J% O: n, d/ ^- F! K2 E2 y* K0 e
    0 P7 y3 ]. }. O& a
    $ \/ J7 X4 r" o* w
    / Y+ n& ~* B  F
    3.3  LVQ 方法 --学习矢量量化# S6 q* N: \) U; m7 r0 \( K0 T

    2 z* F) K1 s, i. P# p" x上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。8 ?+ c7 c6 Y7 h" m- h/ N

    0 M$ e7 Z: r+ e一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。 1 m$ M0 Z6 A. ?' l; w' k
    % X# Z* d# q  m, a# A* F, h
    ' C( \6 v& `- h! o

    ' z& \  h8 t$ q# E2 ~1 c+ E7 {5 S前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: + x* S" Q' T3 N# i9 u
    clear ; l% X( _; n2 [0 W, I
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
    6 n' s2 j1 R1 y9 Y9 k8 [0 ~    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    9 q+ D$ S2 `' q+ `  P. z- p& D5 \  wp2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
    6 F: z6 o& u  Z" [    1.28,2.00;1.30,1.96]; - L0 z. V+ x1 f% C. _6 P
    p=[p1;p2]'
    1 k2 ?# w, H4 h3 lpr=minmax(p)
    : N8 T" w. y; Y' i' Hgoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
    % ^9 G: ]8 T8 F6 o6 ?% \8 \net = newlvq(pr,4,[0.6,0.4])
    ) t5 C+ C# m( r- a4 V& Nnet = train(net,p,goal) 7 O. P0 A, F4 h4 q% c" c
    Y = sim(net,p)
    - [- x% s% Z! y& y4 z3 ex=[1.24 1.80;1.28 1.84;1.40 2.04]' ) S5 _5 `1 ?0 t& ~
    sim(net,x) 1 A% u/ q& x0 k) t9 \

    . z9 ~+ T5 k) z) V/ h习 题 4 A7 {8 p# _' }, V* [
    1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题
    * c- u8 A- M- _$ i& `5 I& ~& Z
    , H. x! r. ^$ q3 }/ t, a1 R+ Y+ i
    - _8 m6 a3 V% l" ]3 f0 l3 l7 u
    ! L) H' q* o7 X& t! f对每一函数要完成如下工作:' z4 x, e3 R0 V7 N! x
    9 l& S9 y1 w  F! V. U* |- {  J! E
    ① 获取两组数据,一组作为训练集,一组作为测试集;* q( W% g9 w- Z$ y( M
    ' M7 U+ K/ f' D3 M
    ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。 1 g# n& {& X5 V. |* K- l5 |# w  T

    - b& ^: g  D: e3 y/ Z- K+ _# N% E5 D2. 给定待拟合的曲线形式为
    7 o7 C4 b! C# v* r
      T& q, Q- _8 | 6 Q9 O4 d" F- m

    4 ?3 s' }7 H" N在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。( g. |$ D. B  r: K

    / t3 `% Q4 r- U( v7 h
    . ^* r0 |: h- D) r# e/ R* k7 }6 N6 X6 v9 W4 ]1 T% ^
    2 K/ V/ T9 I" [. J

    , p9 X( k; o- y( X7 Q+ a! [5 l/ e* a* W
    ————————————————6 I& c+ g* b2 m) k5 V
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( J, w1 D  S1 G# {0 f% f
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279' ]3 y' ]5 d2 j" m0 J- Z

    8 L, y+ L% k' I) Q
    5 ?! D+ ]6 i. u3 T( Y, v
    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-7-29 11:27 , Processed in 0.490718 second(s), 50 queries .

    回顶部