数学建模社区-数学中国

标题: 神经网络模型用于数学建模 [打印本页]

作者: 浅夏110    时间: 2020-6-4 11:24
标题: 神经网络模型用于数学建模
人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提 出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了 50 多年 曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理 论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。 它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感 知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这 里我们仅讨论基本的网络模型及其学习算法。
4 ?4 k' w( z* S1 V# U7 o! U1 T' ]
4 t# B" I! i) j1 Z( t, p# _9 [1.1  人工神经元结构6 g" x5 b" r& w' T5 K8 h
下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素:
2 m) w9 {, C& w2 T% p
6 O: `" A% Y& B6 |4 D( t- ~7 u, V
, o8 \! T3 \0 n( q1 M7 z7 J3 c* h' c: X- H7 c# ~
7 ?9 S- C1 j/ e, }

( M/ C1 N% P- f' F( q
( s% ^9 H! b6 s! E) S6 k5 |( c% c
6 H% w; z8 S3 `' m: Y3 F! u/ z% e7 ]4 E4 n) a* {. P  \2 u
/ I4 o2 D& M) B- |: `# q2 T5 C- K" Z( M
激活函数  ϕ(⋅ )
+ c2 b7 J( C/ ?$ r) X; s1 u+ n可以有以下几种:
6 v8 [# [* c$ h1 l2 ], X7 N" A
% S4 @' F/ }5 w. X5 ^7 { (0)Softmax - 用于多分类神经网络输出: G( C2 N0 V4 L0 G3 U4 C

9 z" |( F* L  f7 _" o5 ^6 Q8 c6 Z8 h: s3 h) P0 x) d* [9 s. ?, u' K

- {. U( |5 M1 j5 Y(1)阈值函数 、阶梯函数
/ c7 \' R' T1 `' ?, G: i1 Y) |1 p" P/ @
! R' |% T9 P8 U3 Q, x9 P

, K  A5 j+ e: ?1 h+ }相应的输出   为 9 O/ ~8 z% h; E# Q. m3 B; G

( o0 z1 u  k0 [9 p+ w4 t- Q
6 [# P, Z4 U! p! R+ l# V
* W8 I, T; N4 k(2)分段线性函数
2 t  {6 E/ Z- B
* r- o' \7 Q; d  t  z+ ^5 E' A; {- f; ?- H, h

% \/ X# }8 _9 u, y4 Y# c它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
/ ?. A; F* i+ Y4 O. Y2 w5 m7 `- ?' v2 z0 A+ \4 A* [* M3 E5 V
(3)sigmoid 函数 (以前最常用) , h0 s) e$ N  p) L- R
6 }7 C4 w1 T, `/ _. j

9 t. V. ^$ x+ d$ v: k3 E, ?4 A! i$ I: R6 L3 k: ~
参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。; ?7 Z  p5 O$ c/ z( J
7 f4 a) b! j+ w' l" Q' o
(4)tanh  (双曲正切函数 ;Hyperbolic tangent function) ! r$ E* n& `3 g+ w
! [" G: r& _1 F2 [$ Z

! q( P. X- q1 \1 t' ]
1 S% j  A1 s6 Z# Y: ? 将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.
& Q; o4 R$ K3 b6 o1 Z* L# `
" w. ]. ~0 X" g  v" @; x  B* F. H5 ~- R5 K. p. F  D8 ~% R" ^) F9 W* ]

& R: C( ?5 j9 K" d$ G/ K3 w; _(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)5 U' }6 N/ M* q# w  M

9 I. V5 G- X, n# |  S9 u- ^5 m( c% Q2 k9 ^, n( l

3 J" B  u7 x5 {1 J- v$ O& [- k4 u2 ?
# Relu在tensorflow中的实现: 直接调用函数 ( q6 y( b2 ^+ W3 d- c- q6 F/ m
tf.nn.relu( features, name= None )! u+ `; k6 [# z" D) k- g. F

8 b; k3 P! A6 Q% \! r8 a2 m: S与Sigmoid/tanh函数相比,ReLu激活函数的优点是:9 q# v4 V3 Z) a* M

6 H% e, X, E2 F: ^" N3 m, V6 y7 v6 v 使用梯度下降(GD)法时,收敛速度更快  
! |8 V; U& Y! @; Z0 C& p相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  
) R" f! ]' U0 h 缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。5 I/ s! q$ d/ J
$ f: Z! I7 g- A4 c3 m' Z
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
! p6 w5 C2 s2 I! C
5 u) H" ~* r, [8 G (6)Leaky Relu  (带泄漏单元的relu )
, i* ]5 q! |  n. T) M% K+ Z
# P8 Y$ `" y3 \6 y: s4 C: l           数学表达式: y = max(0, x) + leak*min(0,x)
$ ~6 Q9 g. P0 Y" L9 s0 ?) c
) h1 ?% u2 H( y" m/ R/ K与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)3 @9 z; |' P3 w& ?# n

/ D% ]6 `- @& }/ [/ Z
" D/ z6 t+ @# e3 dleaky ReLU6 Y8 {; D, w6 T" b; C& N. s
7 b3 ]2 {9 a$ r( E3 l) ]

" w. B$ n/ e2 O0 ]6 A# z8 |, a

- H# C0 H; t/ h#leakyRelu在tennsorflow中的简单实现
# ?5 S/ g, @* N3 K5 C1 U tf.maximum(leak * x, x),* C: J1 e5 _5 M

+ _9 v& Z5 P: \: \3 X* {( _
+ k: ^6 q: H% X: C5 k8 C0 b 比较高效的写法为:
$ O( a, e( M/ L
, m2 {% J0 i6 g* @' B  [/ {import tensorflow as tf
8 e9 D9 T$ k) M' m, J$ y4 ?1 A2 ]def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
7 \0 G4 |9 ]3 H' \/ H* h0 z    with tf.variable_scope(name):
' a, L" V2 U4 D4 K) g) p        f1 = 0.5*(1 + leak). ?- }% [: i# {
        f2 = 0.5*(1 - leak)  }3 u  |3 l( M- d/ u, l$ U
        return f1*x+f2*tf.abs(x)2 |8 L9 r; O! e8 f

8 G) B: E; s7 K( n(vi)  RReLU【随机ReLU】
% g- e6 _5 }- {' c$ f
7 x/ U/ |$ ^9 ]2 F- ?# G, K6 o在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
- n. k7 S0 T3 ~+ b' d# S# {' B3 T
( {7 i% O. P6 i+ P" r# s
7 D9 g6 N% q6 {" I
总结:    激活函数可以分为 两大类 ) ?$ x& l1 L" I, j4 a3 j

4 k. U3 \1 u; c3 k饱和激活函数: sigmoid、 tanh8 c, y" U' _) |
非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
# a( z0 i1 k4 i% N1 r% J- T: e* T5 E. A( |/ ~; w9 q
  J2 k) h- J/ |- T! m6 W$ |

- L) `+ g2 G3 p% W相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:. U. N. {% n! Q9 n6 ~
    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。
# w' E2 I, K0 P7 {6 ]8 R0 m- B    2.其次,它能加快收敛速度。
4 B4 j0 M# Z- {! p# J; S# ~4 M) f$ V& Z
其它激活函数:softplus、softsign. H  d1 J0 H) n5 M

  P' v  x. J0 T/ W. x- V
3 s- a* [& E8 v9 l# ]! O) N
: S- Z" Y, {& x7 t7 `+ FMatlab 中的激活(传递)函数( u/ O$ R+ f: d

  [5 I$ x4 J: }$ p; g! S
- p# ]# l: ~# r
  j+ `& n( o7 c/ e1 s! Z* Z1 q9 Q4 x8 I0 q6 Y
, n& X( Y: N$ o, N
1.2  网络结构及工作方式
  H: ?0 s" E# q1 i! K; ^ 除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。
% A9 R- j+ `5 x# F
1 G' Z/ Z0 }2 {* F& v(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。- |  U+ {' ~5 _% M: ]) N2 I+ I

! {3 S# Z- I4 O8 a$ f$ D9 T* Y(ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。
% _7 l! P7 x# ~0 s/ T0 {8 _
5 J1 u( H# r! A; K2  蠓虫分类问题与多层前馈网络
; i" U) f/ y' {2.1  蠓虫分类问题 5 e( T# L, D3 @; j; |0 @. f* e
蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:* r/ \( z  |+ ^

2 Q7 [% U% l2 i) H$ O! QAf: (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).
6 g2 d. [/ f6 D% T7 G0 z+ |# g/ W1 o$ C9 s7 S4 |
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).2 S7 ?  l5 |4 _) T
8 r/ O9 @: W/ a- v1 ^4 L
现在的问题是:' f( ?0 V7 i) m: Q( J
. m0 f( M* [" L
(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
7 {2 B$ j7 @6 j2 S, T9 l
. }8 b! c8 z- i8 B5 P. T* u(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。& _: u4 y/ p/ }; D$ c. E: v' s
& w3 S# }: M) p# t) J
(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
1 [9 s; q1 S: I; b3 }8 C
7 o# L' y4 J+ e5 ~3 G& O如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。 7 W0 L/ l  g2 X) H7 r' t

% B9 y/ g& [$ `. @6 j2.2  多层前馈网络 5 K/ b" q7 b# O0 ?9 X, Z+ ]
为解决上述问题,考虑一个其结构如下图所示的人工神经网络,
5 F8 D& _$ e3 M% o7 f- ~0 H6 A# T& G
, {  G- R8 N$ _) I# q! ^) ?5 f+ r
# C1 y; E8 W$ `( z! k' b) |& h
% Q- O- {/ q$ r% s2 V
使用sigmoid 激活函数:3 |( X3 [; t0 _' n+ D5 @

- T9 o7 e/ q2 k3 J+ I
8 G8 O: y- p* ?9 A, U- W; |2 k( _  E$ c5 I8 C5 w$ d% q* _) N6 [5 t
图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。
; y3 h& v" w% w5 M" M8 ^" D# X+ S" H3 E; I: [- B( v
. U) _: M( s/ u% P

6 B* i' z0 U( s& R( |' l+ g! g7 l

% h! D& V" H, F& Q& A3 L2.3  后向传播算法
( I/ w( C  w4 R" F9 x- F0 c+ p对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法  ]+ l) w6 x7 g1 v  b8 D

4 I, k, z& K9 t" i/ J/ w$ S) }  M下面就来介绍这一算法。【注:梯度法又称最速下降法。】/ [/ Y0 @" b2 _' M7 a! Q; h

8 v' R* K( s; T' Z5 I$ }% j' S$ k- N5 \
2 G+ n/ M2 P. {3 t6 l. J+ R
& @1 V7 N, Q/ N% m: B
% g; H$ N' r0 K' b9 h

5 Q- w+ M3 P5 w' Z4 A1 c; b7 O& G4 z) O: c# {8 g, Z
2 Y$ W5 }" n5 J8 k
+ r& d6 W+ B& g
(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。; j1 J2 @9 a5 E+ E, y  @& D# ?

' \% T- r6 d5 o5 O3 E; y(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。
5 l7 N! ^5 b- d9 g
6 V+ B0 N" R! G2.4  蠓虫分类问题的求解
+ j* Y3 H1 I7 ^" h3 H$ {. q下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:
- y. m3 T" J/ Z: J4 o. z
) E9 h7 m$ q5 O0 v2 x5 b  Dclear , y+ o; k3 ?. W
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;! Y4 t2 H/ r4 P# T5 U6 Z) z
    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; , P! `; s% [3 q( o6 Q4 S% c
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    ! ^& X! n! I% T
    1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p);
1 k3 O. z* P! O3 E5 p' G3 ?goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; , {9 l& u! v# |! K( h8 N, V
plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
2 H+ f4 D* z) j/ P" \  Rnet=newff(pr,[3,2],{'logsig','logsig'}); ' u+ v4 `( H. \, R" V! J. j
net.trainParam.show = 10;
# I. A% n2 k6 A+ N) Snet.trainParam.lr = 0.05; " m9 h0 O( z% N9 ]
net.trainParam.goal = 1e-10;
/ l0 K2 @( A  ]/ t, E+ j$ unet.trainParam.epochs = 50000; + s6 m: N  k% n$ b* k8 h% z1 S
net = train(net,p,goal); 8 U( W6 K! w) H6 P4 v" J! E2 ~
x=[1.24 1.80;1.28 1.84;1.40 2.04]'; & `) K6 i, u9 m; o2 \- P
y0=sim(net,p)! x/ V6 ~1 c8 A3 q4 n
y=sim(net,x)
$ ~) e' I4 H) u6 S6 ^- T( S, E4 j5 `' o" J- H

: h7 f. D$ v) x' S  r- D" ]1 N6 ~; g3 u- S# V
3  处理蠓虫分类的另一种网络方法 ; ~# p& u. T4 R
3.1 几个有关概念, T1 t- L; @0 ]+ [3 a1 O
在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。
9 _0 Z' B! q" C6 e  _* n0 j2 N, \. b8 d9 A# n3 N  y! I$ D: x: g1 p
3.2  简单的无监督有竞争的学习% j& C: v& I& q/ L3 @

/ \2 }" t2 ?! a/ J) j% D% N. l本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。 + ~" o, i! V9 r* _! u

5 r& Z( k' b3 L7 q0 v4 W6 Q$ f1 F! K0 S! ~( _

- G+ E3 g$ i. D* J& X# i" }7 [* b& H: g6 `& y# W" D
8 b& K( P# w9 d; v7 I
& N5 V! t+ Q$ N  X+ d3 R

5 v; g/ L: |- [: ]( d# R9 x为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。% p, _" R1 J& Y& ~

! k3 x: M) z3 Q# E  A% m2 S; ] 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。 ) X5 e2 X& g' b+ `7 p0 R' O8 Y6 F$ i
* ~  ]3 p: W  C& ?& n( e- q' T+ }
8 R# T  d0 b) q+ k; Y* T1 `

9 T" ^3 L5 d2 G- w$ S3 g  J$ V- e# `) h" Q/ n3 c3 j
5 T0 X0 H) E9 Z  `3 T7 y9 f8 H
3.3  LVQ 方法 --学习矢量量化" B" I( z2 U4 a' j) j+ g$ N( d5 f

' i. F5 w" _2 X% |. _& x& d上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。% K& _% i$ [5 n+ f% h. d8 y

" }- F# ^' M' C# p7 D7 K一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。
: o) U0 Y3 w9 _3 j' E3 C0 J7 Z" v; ^8 B! i5 Y

) K! q$ A! p8 q4 Y- B
! O! m1 h: y# x; l* D* H6 {$ c前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下:
& a' Z! U" s9 n, Q2 f& Fclear
$ U( g+ z& J  V! ^& `5 p% up1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
5 U1 d. e& S9 R( |% U    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
7 ]! o0 q. b& }& j2 mp2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
7 o9 e7 J5 Y! ]* _    1.28,2.00;1.30,1.96]; 2 ^) f) d& Y& k1 q% v
p=[p1;p2]' 8 b8 ^5 Y7 K3 z$ E; q6 B
pr=minmax(p) 9 U' C( E) F# K' q' p
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
+ f- f1 m% F( j9 H. R  c& fnet = newlvq(pr,4,[0.6,0.4])
% j6 o3 y! p& [2 f* Dnet = train(net,p,goal) ) M0 Y  j( E: o% B3 ~( z  c  f6 ^
Y = sim(net,p) $ E) o, O  m0 ]3 L: o- @0 ~
x=[1.24 1.80;1.28 1.84;1.40 2.04]' 2 N) g" X4 P+ s" k1 j
sim(net,x)
: y9 I& i7 H$ d# `9 B
" I" g! R/ I$ @. ?) @习 题
' I& t; \5 x$ {$ U$ M! ^! J' e1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题 ; C+ d2 P/ T& [$ O# z

+ y7 N9 t  ?% }) \8 }5 n$ j4 w' ^: Y( d/ o
$ h% F2 S3 D8 c, Y5 R  ]0 M4 ?
对每一函数要完成如下工作:
# p7 _( H% `0 w+ x# g5 M" ^) r' ^! p$ ^6 b$ g# P
① 获取两组数据,一组作为训练集,一组作为测试集;
& o% @  C: j' \- w1 Q) @+ a1 a
② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。 * l/ E. L$ T2 C

8 A) {8 d$ z7 b# X2. 给定待拟合的曲线形式为. M9 B- j0 L& D" T8 ^6 v
' j" ]9 }+ {0 e7 s/ v) C$ q( J+ N

: m0 H' Y/ d; h
# i# {" b, `$ P. C6 \在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。) e" F( w4 I6 z  i
& x# {# H1 c7 L( E% a

$ D* m, f+ W( s3 q) |; R  _! D$ p( z

" L. [* G# p2 v3 _' [% b8 C, x" C- E

. \3 h& _' n" B; e/ {————————————————; [& U. D' ]6 d! o, z2 G9 W7 d7 B
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
& O- v- v+ e  c; j! @& x" Z" |原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279; I5 v' C3 x4 ~8 w# E

; g3 i, T: l. ?# Q+ ?7 C% b( ^9 C" u9 Y# S





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5