QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2579|回复: 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)等。在这 里我们仅讨论基本的网络模型及其学习算法。4 C* [9 J0 f1 Q. _  J6 p

    ) t; A: H/ }  E2 \) V* O. P! o4 r1.1  人工神经元结构+ _: [# I8 g. {4 c, x
    下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素:
    - s6 D4 g4 w" D7 `# @% q& ]* g7 N  o7 F6 V: V+ U. H

    " Q, {9 n% t5 ?/ p* [  s4 L6 n5 H1 n" e; z( y
    & F4 H0 {) y7 ^& n- p* Z

    2 s( P3 S0 s4 c5 Y+ z7 h  Y+ t( ?) k1 V1 }  G* O# i
    ; q1 U# ~& f6 i# k

    ! n- k  B' a0 v$ o7 h! [  w7 H5 X" w0 }7 J
    激活函数  ϕ(⋅ )
    ) t( l. e1 {% r! m3 \0 o7 L可以有以下几种: - \1 W+ e* M" ]2 I( s
    ( j% s; b5 ~% q' r) i! W) x3 k; x) l
    (0)Softmax - 用于多分类神经网络输出/ ]% M7 C, H, {$ I

    0 I8 S- c! \) W3 s! f% n) q
    # [. ~0 Z, ^$ H, N* `: b
    * i8 }1 P' u% m5 h  W5 N5 x5 T8 O" C(1)阈值函数 、阶梯函数
    . j3 I1 b6 e; J2 o
    : l' `* ]+ m8 K$ k- N! b' s% L  x4 W- e/ h
    / @8 v8 e0 A; W
    相应的输出   为 ' h# u) _: I7 T" p7 {8 E

    , k: b7 n8 U" T  ~# f8 ?1 g1 C( H/ H) {, c' w

    7 ^! O+ T. _( [1 n" T(2)分段线性函数   Q4 q3 [, `+ t+ d) h: ^8 I7 F# U

    1 L$ p  u. D4 x! r- X- \1 v# T
    $ h3 k8 [5 v  m4 |9 `7 E* u' y5 O" o* B0 Y) b# j% X$ B; I
    它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。 " G* j; {& f/ C; d2 Z
    " I, e6 d2 |* F, y2 w# @+ K* d) j( e
    (3)sigmoid 函数 (以前最常用)
    ; B" _' I1 \3 g  B+ S$ r3 b/ v" P
    6 \3 m: H' r9 u: S1 W
    % f) z6 u: f5 t" k* |! b/ C. d9 M1 P8 i8 @# p" a! L, D
    参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。' o7 O4 {) ?7 r6 P
    # g( K8 M5 ]0 g9 ]- H  ~) G
    (4)tanh  (双曲正切函数 ;Hyperbolic tangent function)
    2 T! s5 S9 J! T1 y
    $ U" z( ?4 [8 Y6 w- s9 ?: K! s9 ^& ]$ M
    3 z; t; Z# d. A+ k5 ]& Y, b1 G
    将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
    + R! ]! f4 v- @- `: f9 z
    5 F2 |( G+ @; @; I) P+ ~% c, t+ W" n# |/ o5 G) S
    ( ]) D. Q2 s( L& N1 `  _! }
    (5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)+ y+ @! O) t3 b6 E& r
    ! k- ^  U- ~' D
    ( x. z! T' B, s: A6 u1 h- M

    # X$ A7 x7 {  j& ?/ B% m3 U) T' e) I- q# R0 I2 j/ v# o' w
    # Relu在tensorflow中的实现: 直接调用函数
    + Z" U% p6 N' L! Xtf.nn.relu( features, name= None )
    ' J# o* a8 ~) Z7 _& h
    2 L- V+ n: \0 p' o与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
    $ W* o$ H6 d/ I4 c7 T+ N7 J* h* j/ ^: q7 }7 j" w- Z2 k, `
    使用梯度下降(GD)法时,收敛速度更快  " u" O) T: M4 s- d& y0 F
    相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  ; k) ?- ?4 E5 {2 s4 l: B' n
    缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。3 L& Y$ v, a3 g. a

    % H% a+ w6 ~: z$ p 为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。( s; P/ q- ?4 D$ o
    3 Q, F6 D: S2 ?0 K1 s  V# t% j
    (6)Leaky Relu  (带泄漏单元的relu ). a" B- c! z5 n3 y( ^* Z

    6 v- P1 O" j& W5 c8 e5 V           数学表达式: y = max(0, x) + leak*min(0,x) & R2 p! f5 B. \- N# V
    + Q6 C+ ^. V1 A9 Z+ S
    与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)- u* p! [- V* h. Z5 ?" }2 B

    + h1 L/ Q: v1 k# c# p5 U+ N, S3 u- E, I. e7 e2 ]# o8 y; ?5 Z  s; o1 A
    leaky ReLU3 s" ]6 N4 H0 B( a8 d* b) q, x
    5 H) y- R$ E+ Y. h

    + W" o4 x6 z# }- K5 A& y! b; S5 Y0 k
    2 {4 Z) G! F, _! D
    #leakyRelu在tennsorflow中的简单实现2 S; C  k. e$ b1 {
    tf.maximum(leak * x, x),5 a4 f, ^2 z& J& Z" u- A
    $ I5 M5 P& b: `) u1 U' \
    4 S8 W# p3 H5 s8 j( [
    比较高效的写法为:
    ( F$ q" v! J0 ]- o5 K+ q. w
    * w* Y0 ?* X# O1 L% o3 O! dimport tensorflow as tf& g4 F4 O; y: M7 g' K3 F1 [  |& @
    def LeakyReLU(x,leak=0.2,name="LeakyReLU"):$ S4 t2 @* ~6 Y+ Q5 b; p
        with tf.variable_scope(name):% v( _; r# B% F$ |. T! b
            f1 = 0.5*(1 + leak)
    & ]  J, e* Y' J/ E/ e2 |4 M        f2 = 0.5*(1 - leak); M$ Q0 ]- M( N. }6 j4 K
            return f1*x+f2*tf.abs(x)) T/ W% [: c( b8 H

    , A% d! B7 o: F  g(vi)  RReLU【随机ReLU】
    5 |2 u$ w( z! f- M, R7 c2 z
    0 S" o4 [. S: [* E% q1 q在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。* S; N" {1 {& B1 h' E6 e

    / w% d7 u2 x" x# f! u- j! K" d" P: S4 o& y+ c/ _6 J0 ]

    7 z: @" U2 v8 ?% V4 N7 k总结:    激活函数可以分为 两大类
    8 B: I6 L2 O- L! ~. [# e% n( q) |1 Q1 u8 j8 ~
    饱和激活函数: sigmoid、 tanh& c& X. j% x5 f1 @; n
    非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】& P( _+ C) w+ A7 q8 r
    / r4 L: B# H$ Q

    3 `8 O4 [, K5 ?7 d5 K0 R/ @# v; ^) H( }
    相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:
    ) r% p/ b, L7 F$ C& f, o! F. s    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。
    * x; E3 [- V& j$ j6 g, F/ O    2.其次,它能加快收敛速度。
    , s+ h. a0 m/ D7 f6 a  x+ E1 M) O( z' H
    其它激活函数:softplus、softsign8 p$ b1 y. R# v: b: V* t% t
    " {% |: ^: d, Y4 [0 ^2 k
    & s& N3 Z. S* Z9 P! V

    & r/ X2 i8 y. W' j+ P! Q6 x1 ]Matlab 中的激活(传递)函数
    $ S4 _8 `! ], v( C4 x
    % h  g: I  O8 E# G  Z9 I# z9 g% \2 Y) Q) S5 [

    * I' M3 G5 w* J* ^- i4 h3 R# o, G1 x0 x6 ]" U$ g9 e

    8 H7 f1 ~# [' Z  q1.2  网络结构及工作方式
    0 c: q9 c# ^" L  x6 J, R9 w2 [ 除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。0 M' u0 f% q  `8 B

    + Q1 X, J, O! K) W(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
    1 T# z* X4 V  J: e( w- ^. ~2 _( Y* |
    (ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 0 ~! \  ^( h% N' w6 Q

    ; Z5 v: T5 l! H! \; a' `6 l+ r2  蠓虫分类问题与多层前馈网络
    ! \" A! [, f; ~2.1  蠓虫分类问题
    . _' j0 l( D1 _  L& @% d* a1 Z蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
    % w& J  }% O" w0 U' }
    3 p  P: E% K7 k/ \7 Q1 {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).: x) T/ \. i+ ]6 K; E0 e
    & N+ Z% g  _* ?; j: [0 M
    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).
    0 u4 e: B, j# _$ Z3 F; ^. {$ C$ t/ R* N5 D" S
    现在的问题是:
    " e# K# T3 }( k2 H/ x  _+ M5 p/ W; W0 w' p  @# e5 r
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。' j. x# o, K6 c# h

    0 r1 S5 P4 L+ H$ s7 ]8 u9 ^(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。8 m& p  i0 R. c7 `. x0 b; N

    " o; X4 y3 q8 B(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
    9 m- c! b, l6 E0 Q6 c$ w( V( |7 r3 w; @
    如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。 8 m( }$ d% b9 i; G( D
    " @( L% N2 A: c: G5 ]: W. Q, i
    2.2  多层前馈网络
    ' o! d2 k$ v; ]" D6 A' G# _为解决上述问题,考虑一个其结构如下图所示的人工神经网络,
    ' }2 S, j: B7 S6 v1 D0 Z1 t5 i# P" c, A: P/ B' y
    9 u! N1 @1 K" a- q# i. g
    ; L  H% c5 P/ a1 ^0 o1 E. s
    + d* O* z0 D; ^, A
    使用sigmoid 激活函数:7 Z$ B8 x% d. H$ [) q: _  n
    7 V2 O# A, w/ x& p: \# J

    6 H4 K4 @2 v  J, W) l% G& G+ O3 O& l+ ?3 h' q3 @% Q
    图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。
    5 N9 x3 B+ i# @; \( G, l' n) X3 b, ~- y. {, g% D3 v8 J
      u( o. ]  T1 K1 F& x

    2 a$ a% _3 O7 P1 X, g/ w; A- r5 e2 A8 w; {4 o
    + S& x8 T0 [* y* c% L! {. `
    2.3  后向传播算法8 m  z2 X6 t. U$ h! A9 T* J1 o
    对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法
    8 m  e0 K% `+ y7 R7 k4 I5 b7 V- _. ^6 \) d
    下面就来介绍这一算法。【注:梯度法又称最速下降法。】) ?( G8 j+ c$ z- L# H0 P: k  B3 h

    ! T4 Q/ `+ ]3 n
    , d% ?+ b8 }, d/ p0 O
    6 O* o1 s5 Y# ^" H7 y2 ?
    : A- d4 T: V. f$ o0 x7 L! s9 K5 z4 V4 `2 L7 U! Z
    % G. _2 W& k6 z4 G! z1 h) v9 s

    1 [; Q+ U* E8 u6 ]- {, Z6 a2 K+ |6 w" Q/ M, ]$ T. g
    + ~% N1 t6 ]' k
    (iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
    ( n2 D) Y; y+ z- r" [8 M1 r( z, C8 [. H" y
    (iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。
    4 P6 A7 v( S- k6 S* W$ K
    + w# S) L. \7 u' f  Q2.4  蠓虫分类问题的求解 ' y! h% B4 K: ]& q( m/ _. j
    下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:. U3 D, n4 i2 G8 g+ K* |
    + c6 A, Q3 p4 C& F
    clear
    ' B1 K$ @6 q" Q& K8 y; C% Q5 j% np1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;, x7 Q5 e1 I( S8 D  n2 w
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 3 u/ v" o, `9 D: F$ z6 t/ A% ^) I: H
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    % {; _& V# }6 q" J" I) W
        1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p); 5 G- D2 a0 z/ ^' P0 o& n! q
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
    # m1 t2 c1 f2 ]plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
    + b5 x0 ]/ ^/ T9 B4 qnet=newff(pr,[3,2],{'logsig','logsig'});
    ) [- K; x& `! Pnet.trainParam.show = 10;
    ' c3 O7 X) ?& G$ H; wnet.trainParam.lr = 0.05; : F" [2 g0 g! a) b$ p
    net.trainParam.goal = 1e-10;
    ! f9 X" v" [' knet.trainParam.epochs = 50000;
    . f4 s! p8 l7 Snet = train(net,p,goal);
    ; _% F& ^0 U0 Z( f/ F$ {x=[1.24 1.80;1.28 1.84;1.40 2.04]';
    ! E0 s  X* \2 Q& E4 |- P7 Ty0=sim(net,p)
    ( M! B/ A- L# V5 R* X; S% [y=sim(net,x)6 ], r3 I6 P4 C7 y

    ) o" @1 `6 J0 s/ M
    " `" h" T, p' e4 m2 q  L: ^
    ' E# X- S7 `4 S$ R7 D2 M* L3  处理蠓虫分类的另一种网络方法 : t( X) }* i* e* O( T
    3.1 几个有关概念
    ( x, j- R2 }" W" f) i在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。! f# [: ^; Z( g. z0 T$ ~) B

    ' Q' G% h5 {3 T8 Z$ F3.2  简单的无监督有竞争的学习
    # l& t* e% [' z. \; O/ r* S! A+ {- S
    - a0 U% M4 m: z! M本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。 8 s/ ^3 O$ Z6 _

    % I, ^$ m5 N/ a, ~2 w7 {6 J0 O* @2 V# P
    ' f! H# Q, g  B$ w2 j0 Z
    - a0 E, m( Y  i9 y' Y9 c

    2 s+ B/ B3 T0 b. _' f3 ?3 Q# H% Q
    * r+ w! u' w7 L4 g( r3 R9 w% ~0 B8 B1 z& D! D
    为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。
    & g0 b, {- J4 R% w
    / q. V( |9 L3 j- f' F  j/ F! V( s 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。
    $ c' ]; Q3 l% S# j2 O
    6 m" g" O' ]7 ]2 @4 |9 O2 H' N6 k% K# s
    7 q/ o1 Z  b) E" l& s: `

    : I4 ]7 e/ C6 Y! s! P4 X
    1 Y6 v. \9 z% `# R7 a3.3  LVQ 方法 --学习矢量量化7 `' s' j' w) x5 M0 @
    - t! f+ m9 \# b) d4 x; y: H
    上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。- W. L$ D; k. F: C* `) X

    $ u: S" `& x7 F' a6 A' y9 r一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。 + {0 J# e9 J) N% W1 D5 y9 W, r

    ' W2 F( U/ `5 e) i! H9 K' G( c
    " y, v0 z. D. Z! j3 ^% i( f* j, G! t% u/ m, W0 \' ?2 A
    前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: 2 ^6 F1 o# A2 u; L4 d
    clear
    4 R0 Y# K1 n) O6 t6 gp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;' P0 {7 q' x$ A4 R) z& C3 X
        1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 3 ]# K/ }7 S8 R7 B' _4 ^
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
    % T8 y( q4 b( y! B8 e  @) a    1.28,2.00;1.30,1.96];
    % k; Y! S# h4 b, b- fp=[p1;p2]'
    1 s% u& f# V$ Z  cpr=minmax(p) : ?* ~9 x3 u' b( z* ^  `" o/ J$ c
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)] 0 z6 l; t/ J2 k5 @! X
    net = newlvq(pr,4,[0.6,0.4]) ) I$ s4 D* A% ^6 L: j# {' O- u
    net = train(net,p,goal) & n7 h+ w" X+ n0 K0 B
    Y = sim(net,p) . }) F7 V+ p; l  n' g. L
    x=[1.24 1.80;1.28 1.84;1.40 2.04]'
    # @+ m$ c  ?/ D7 ]8 k; _  K0 Dsim(net,x)
    9 T) `" X4 z# r' U% l. S6 w- [2 e4 }
    习 题 / s& |7 T+ e/ d- t! I, D2 V* p
    1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题
    3 ~9 b* A1 A3 V: V" m
    " {! q3 F9 d. \- s" {5 c' b" k5 N8 D0 }8 p

    / K7 U' S$ O0 t. t0 P+ C对每一函数要完成如下工作:* w# k; \" {0 B& F- O: \! E

    . f# U  q- C, \* ]8 L& b7 _① 获取两组数据,一组作为训练集,一组作为测试集;
    ; t& {" H% ]' p/ F3 C  Z( g/ o
    ② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。
    " I2 N4 V; C$ i  R+ s& k  e4 \7 U. X; N& f0 `- H; w1 z3 O2 j
    2. 给定待拟合的曲线形式为
    # a6 t! U4 T5 `  {, u: j
    ( g  w# E, h2 g0 e
    " I2 e+ @' V$ G. Q4 p5 `' e/ C9 I8 l
    在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。6 P$ h( L; V! f: S
    , v% [% g0 s" h% _+ l, _
    . j" c* W. h  P: F" P8 j8 k

    ' N3 v: ~* ]4 Z3 a- T" [4 S: x
    9 X) c* K  S, @9 L* U4 @% s) t$ R. a4 a7 L  W$ ?, _$ {; J

    - W6 Q" z2 k( v. c! y4 c————————————————
    ( ?  l- s5 p  N1 {版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 \" N0 r% w4 |4 x4 I5 ]原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279& t: I% O4 \6 h6 V# C2 Z

    ) x8 n+ S  s7 l0 Q& g7 L* \9 f( `6 z' E6 _. w. p6 e
    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-6-15 18:22 , Processed in 0.569766 second(s), 50 queries .

    回顶部