数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-4 11:24
标题: 神经网络模型用于数学建模
人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提 出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了 50 多年 曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理 论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。 它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感 知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这 里我们仅讨论基本的网络模型及其学习算法。' z5 x/ s( P+ m2 R+ Y8 s

' S  `- Q1 y+ e/ L6 j) q: e+ f  M1.1  人工神经元结构) E9 U0 {7 w6 Z- @
下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素:   D) K; j3 |. d1 d+ ^6 C0 j& h
' u: t! _0 @2 B9 M
; Q# r' G& Z: q; e5 S* p
9 A; p  B) z( X2 c& i- W" g! Y

& j; d. O% V! S. j* A  w! `- y' D
: @0 F6 J# s/ l1 X0 C' c
8 Z% l* r- p( Y5 Y% Z7 j, C  M3 e

( X' m$ u8 q" N' H& X" `" @% c# ~7 i6 {
激活函数  ϕ(⋅ )
; Q& Q3 v: a1 `# h7 ~可以有以下几种: ) e8 @( H& Q3 i: p
# L8 b. C2 r' ^
(0)Softmax - 用于多分类神经网络输出
3 ~: l" t$ H* K2 E; M5 y/ l# a3 `: A. G4 T. k0 F
  V1 [/ K, C: V9 @9 K

3 N) S: W. R6 M0 v- W) b(1)阈值函数 、阶梯函数) S' Q) C3 k, n* W4 b3 U

  b0 r, P; Q5 i% W6 ~5 y
" R- s$ _2 X5 ?- o# M
! t4 }6 S7 P6 [$ W( p2 V5 K! O相应的输出   为 2 N& p5 a& X; d
& j) @: b* W, ~2 j

  w7 N) K1 f+ H5 r0 R
1 m0 ]0 q; I, V) m: H* V6 f& e5 d8 |(2)分段线性函数 - Y# ^& S8 j% Y+ R8 c1 [
: [# r5 m6 I, z% K0 c6 V

- i. J& H% K7 f* ^# d) M! N7 [9 u/ \2 D% Z. z( v* b0 h% z
它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
$ C: m/ k  ~* W  c% \0 ^8 n. B) ?. s4 U7 v8 V
(3)sigmoid 函数 (以前最常用)
& T) e: Y5 v0 M; u) e1 ?
; Z! T$ A4 Z+ I' z4 N7 L0 B% g
2 h" @0 d) G8 ]2 d3 m( R. e5 a4 Y1 {. I* q( f/ _' m
参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
  E1 F, Y8 V9 [. o
0 b$ D6 @; O0 j7 I* U& B6 w3 ~(4)tanh  (双曲正切函数 ;Hyperbolic tangent function) : O7 J2 y' \. T: M
3 Y/ J8 r! w" v, _4 ^1 o- [
6 o* J! ~, }, j9 Q9 U
8 K6 n# R; E0 d/ ~; W8 K
将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.+ M' E1 X  ]+ g, `2 K

* ]# {7 E" u+ ~4 w+ |  L6 ?$ S1 k7 Z% x* [( s+ p! ?4 \9 h
+ d- ?1 q9 E2 T4 z; I
(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数); i: J) i6 q; D- [5 Y2 w( u
% K- S0 h1 o8 b' B9 v$ v5 A

( m, l/ \: ?, c# ]1 y/ ?. C, p7 X3 W* }7 M. Y6 Z, ~
' t0 {: Q- M' n7 O$ @6 ^4 s# s
# Relu在tensorflow中的实现: 直接调用函数
5 s2 x; N0 C3 f( O) b* J# Ttf.nn.relu( features, name= None )2 E2 m$ }1 Q- Q) o, L1 M
; q+ u  v& W- j8 Q1 f
与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
# A% _, A& T: a5 t7 H; Y( w3 y1 Y9 j8 u$ O
使用梯度下降(GD)法时,收敛速度更快  ( N* F1 @6 Z! R+ ]. \* C6 p7 w8 J8 [
相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  
( B2 [7 Q' F; n( v 缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。
4 v1 {9 [; W# L5 _( [
$ m+ W- y. l% R0 l+ y( @# u 为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。! c8 L, R: h  `# A9 u
1 P, A3 l; a7 h8 z" t
(6)Leaky Relu  (带泄漏单元的relu )
- H6 [& z8 d4 I0 ^3 {) j
7 Q! X+ O' T4 }# @5 ], H           数学表达式: y = max(0, x) + leak*min(0,x)
# G2 H0 k9 A5 B& m- T
" O4 J. Z5 y0 q与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)/ s* s$ ^7 b4 y* a
7 y8 D% e2 }( f( l) @6 }4 e
) Y$ w9 i/ s  ~: u( L
leaky ReLU+ \/ w$ e9 b5 a( C% c% F
  ~- j6 [- t$ {1 A2 D& f" L

6 s; I0 x3 ?+ _' {' l) w
& y, ~5 B+ p' s' N& s3 w# b# J6 r
8 \( V" W; a& H0 ]#leakyRelu在tennsorflow中的简单实现$ B# o9 ?, _4 O. ?+ m
tf.maximum(leak * x, x),
8 M* o5 j- v: T/ K- |( d0 u4 `% O9 m; s* W3 _2 {

+ K9 [- `- Z9 V( v4 {1 r% \ 比较高效的写法为:
* V* S( ]$ L' R, q, T
8 h# j7 N  Q6 s1 Q7 G* {% v4 kimport tensorflow as tf7 e4 k* Y/ \: t/ z0 f
def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
. m5 V( j) f% z- `( X6 G8 `/ ?    with tf.variable_scope(name):" V& Y' p. d4 s& G
        f1 = 0.5*(1 + leak)# @( [( z5 h  Z
        f2 = 0.5*(1 - leak)
* Y! b) C6 J" I. `4 Y        return f1*x+f2*tf.abs(x), _! n1 j8 h. O  j4 s5 x

$ d) ]& s8 b, z( F+ V6 X(vi)  RReLU【随机ReLU】
/ T# K% p) t4 l( w* L% n* o6 w$ l6 A! p+ N9 i3 X  W7 [
在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
  B& r/ T4 K8 G- w$ E* S' W6 d
% d: x, K% H1 n+ z# l- s
) v% Y7 r7 h8 x- K+ x
8 Y  P' ^" u! f5 s/ k5 o总结:    激活函数可以分为 两大类
+ s: j1 u0 e5 d4 o7 y3 O+ Q0 b$ }" ^  ?
6 l' m* |+ }7 c: j饱和激活函数: sigmoid、 tanh0 [1 w% w5 B/ u' ^" V
非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
9 T) p0 q. y& v. R6 [( G3 [2 n4 Y  x8 I7 h

, m7 b) j9 M0 J
# B4 X4 O, q( q1 H! W相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:+ E4 v" L0 O, u$ [
    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。% f# p- F  b/ o8 Q, R2 Q5 G
    2.其次,它能加快收敛速度。 ) j5 n$ b1 j5 ~+ K0 U

1 Y7 R, \& {& c- D9 d( P6 G1 t其它激活函数:softplus、softsign+ X' ], ~. P0 A- j+ _
3 n! H- H0 y, i4 {

' r6 O, O8 R* W7 t& A% Y' f5 H# f
! A: V: T2 j0 A5 g1 i, k* @Matlab 中的激活(传递)函数
: D' x+ @, p  H/ L3 U4 y' f9 a
# z3 ~/ u, R& \, D7 g$ r! Y6 S  |# S  @- C1 ^! y$ \

6 }% S; \4 ?7 d+ l& ?1 `8 f, i4 }" Z' \5 a; N. Y. d

& K: h" |" |+ K, p% @0 o8 C& R/ a; \1.2  网络结构及工作方式 * N; n- ~$ w9 o, Q) F% _5 Y
除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。% y0 X# a  V+ T8 f+ p! f

$ J7 }7 e3 v" z& O" i: t(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
5 N5 I5 o& c1 w: U* ], C% n3 g- q5 r5 K5 R' _. Z
(ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。
6 E0 g# y' b) \1 ]: P0 k
5 `& ?5 J- f1 ~% F. ?3 M6 K2  蠓虫分类问题与多层前馈网络
8 p5 _5 i4 o' S3 C2.1  蠓虫分类问题
( U2 U% V! X5 u4 Z6 x蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:- h; _. Z1 L% @9 @, c. G0 S

1 G4 e# T' Y5 oAf: (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 t0 J/ s2 ~( w
2 N/ S/ R0 p6 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).
! B, f6 D  Z8 }0 V( ?: o
# W8 Y9 ]# b" T) U4 d现在的问题是:
/ w. C; l1 l+ N& u/ u
  L3 y5 u0 Z/ S5 j) u(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
) y0 R  A2 d- o$ k. n+ @
2 M4 o) v+ L/ Y, h(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。
2 t! [8 ]& z3 _2 s
+ s. [! V/ x4 ^8 N+ o; `  o(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
* n# g6 o$ m# `9 B
( u, q" L1 n$ r1 O. j如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。 1 R6 I' ^6 r6 J; O
; v& b: E  i( V$ D, S; J# T
2.2  多层前馈网络
; G  f! ~# ^: ?3 O) R为解决上述问题,考虑一个其结构如下图所示的人工神经网络,
2 K  e) J9 S' \! m! q, ?) o
) T5 q* ?. a. t8 S' K$ u4 H
4 [& G# [) H# B) h& T- h: G/ t" D  d' f8 P- n: m, c5 K: A6 r% {
( ?( T) F# f$ L4 t. C% s
使用sigmoid 激活函数:
5 V- z3 {. q" x6 c' Y% V) y! L& O5 J' E# B

! D( {- a. f  Q: [# X- U
  _! n+ u: C2 B$ ^  P$ }图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。* |  C; q$ H: B! p# Y
8 V6 T9 k- T5 V& x1 S
8 o3 ?' e: `' ?  E. h3 d3 J

* D8 b% e# W0 c$ V2 g' u5 ^$ R
1 J. k2 w+ c- r4 f! }
. q; F! D" \& W2.3  后向传播算法
- ~" f- E) ?; f, E  ?# z对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法
' G  h, z1 V9 C/ r
' G. O8 L' T5 ^. X( s9 f下面就来介绍这一算法。【注:梯度法又称最速下降法。】
/ |( J7 E& W. A
7 Q8 O% k" R2 I1 c# X( }7 J! I7 n9 p$ ^7 B% m. Q, A2 C+ f
8 l1 t) a+ Q% h  ]% l! V& [9 x5 I

) r6 g5 b# E7 V/ W; B
$ X) {( J& n& ~1 l0 N4 z1 v- P9 z3 Q

( E8 z4 [  N9 S3 d6 i& M3 `! a6 _/ J  B0 ?/ K

: A" T; C/ M6 O(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
. Q3 c2 A" ?0 P9 F+ B7 [8 [2 Z) ]7 E) E" U9 n8 w
(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。 8 r. n* ]/ X  G) J; [! z% k

' ]0 \; _( s5 E* a) ^2.4  蠓虫分类问题的求解
1 r0 m9 d- b& @- J下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:
$ i8 s9 C3 ~/ b' S6 g" \2 L) z" J+ d1 V5 p
clear ) q; g: R) f2 o# J0 g1 O
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;8 e+ Z% ^& P' G4 k" t# e, Z4 x
    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 4 z$ f- S1 A' o5 O+ H! N" k6 d
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00    ; `9 _# [& v8 R+ I2 W
    1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p); - P* m5 u; }. n: {; @( o8 e
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
5 C: U# B+ V6 C* `" u% Xplot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') 6 V( ~& C$ ]6 u" S6 t9 U" p; U
net=newff(pr,[3,2],{'logsig','logsig'});
5 x3 Y$ ?8 C# c! Z# ?7 ]net.trainParam.show = 10; 5 {' s4 u  E: q2 `& w% y% c
net.trainParam.lr = 0.05;
5 c- i! ]) W1 }' A# b' d% ynet.trainParam.goal = 1e-10; ) O0 N6 ^' L7 ?9 f: @9 l
net.trainParam.epochs = 50000;
9 N: \; J, d  p" xnet = train(net,p,goal);
: M' h& E4 m6 n4 N7 v1 wx=[1.24 1.80;1.28 1.84;1.40 2.04]';
6 \, a5 y! \; {6 A( |1 C+ |y0=sim(net,p)% M8 O$ b# t  y& o0 R* @1 f
y=sim(net,x)( \0 Z0 b: c6 F' o* V
8 Z/ I' T: i  E$ ]3 L' \9 P% A

+ a0 U4 d6 m/ `; ?. p6 y9 S5 ?* Z# y$ `* k1 ~6 h: J3 H" |
3  处理蠓虫分类的另一种网络方法
. s# R& M8 n) p3 ^! R7 H" h3.1 几个有关概念
) @; R  E1 t2 ?% _8 J: \在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。- _$ H3 X$ k% l- _! ^8 Y

* N" r) m$ A$ j% m0 }0 B+ j3.2  简单的无监督有竞争的学习
3 W6 m$ L( e' Y8 T" t) V+ N1 z. G) `5 h# r
本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。
' ^, f$ z/ K+ X/ s8 u! B" n( r
# P  ^5 ?3 u8 U& a6 Y/ S& X/ U& k6 `) w! `6 P+ H) y2 }0 y

3 }9 e5 q( F0 `2 o0 |4 c" z
! v; W$ o3 r6 ?) |' E2 q; k) J0 T! x" c' ^6 N: X1 ]9 b7 Z

) `: [& C8 i/ S3 z7 B0 w. W7 q/ U
为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。
! m+ k& Q; D' o. {8 `0 L5 Z' T1 u$ l4 G% W) p- S
首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。
2 F3 m2 m% z. E0 D6 x, P- h$ F" p& Y! ?% W3 K5 b+ Y

: ~& b- m& a( N8 h* D& [5 x0 ]$ G8 S% s8 m! ^, g( o* \

2 p% b4 c  n- |3 }) F. c4 X- s( r  t1 i: k. a" P9 ]
3.3  LVQ 方法 --学习矢量量化
& E8 |; s2 A- z/ O# v( F! x$ \: G; T
上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。
( m( @! c' m- A' C: q2 g- Z6 b4 M: S" b  T
一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。
. T, y; X1 @* c, V7 ?
( H7 [7 ]: `" R7 |& e$ W3 u, [; f1 k1 o! w8 R/ I2 c* ^( B; C1 K3 I

$ X" v( T0 D; O5 N  n2 n0 z前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下:
5 p6 f2 N& f7 J* _) P' ^4 Sclear " l* @4 P" r4 x$ G
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
1 f0 i. d1 K5 W3 i: _    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 3 A- X) W/ m0 p4 J8 y
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  1 N7 R$ f/ @! M, H: P9 ]  s7 r; I
    1.28,2.00;1.30,1.96]; % B8 U' h- O7 U
p=[p1;p2]' * P, W1 I  v1 M/ [# i
pr=minmax(p)
. B* ?1 J- l' f+ x6 ugoal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)] - s4 u1 A5 n. ?( Y% y( X  R
net = newlvq(pr,4,[0.6,0.4])
7 m2 C/ H+ c& H) H7 H# ~( Cnet = train(net,p,goal) / W% U2 K* t+ W9 J
Y = sim(net,p)
1 j/ J' h, q; K) m( x: {& }x=[1.24 1.80;1.28 1.84;1.40 2.04]' 7 c1 l: R0 s5 {- @, f8 Y
sim(net,x)
- M% D9 P; J6 r, V% X2 K
% \5 B5 I! X0 G1 k) O* {+ s习 题 ; {0 |3 Q0 l) a8 a8 e
1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题 ' Q7 q* t, ~7 `

* o9 T; P2 T; ]& d: J8 [. ^6 @* i  x
( s+ u  M. k9 `
对每一函数要完成如下工作:" g) L- y8 m+ f
8 g% a+ z0 u: l( N$ G5 y+ T) u
① 获取两组数据,一组作为训练集,一组作为测试集;
& h4 N5 j/ ~9 I+ C, j2 S/ Q/ a% o3 o: b* E. M5 o( |9 m  s
② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。   y7 o5 j4 G: F

) l  ]9 I, @: I3 o0 w4 J2. 给定待拟合的曲线形式为0 Z/ H7 }! T( A/ h& O4 Q: T

% ^5 x5 w' f+ m5 j! n/ N6 A 7 r5 |/ G8 n' R, r. ?

: S* d4 S9 J: n3 {6 U6 ^在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。/ r2 @% G; w/ M& \; _, m0 R

/ _0 m6 T/ o* |8 a3 B6 ^7 R
7 _( R8 S1 z9 l& q4 D# Q# s
6 b/ x9 Y) R  D5 I5 g& B
8 ]) w6 P3 k9 z& v& _+ ]( V, C, T& J! Z

' l+ p6 U; x. |2 F8 D2 p( i————————————————3 ]9 d6 m' t; [: S% q
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
5 m2 x$ E# o  f8 v& b# V  Q原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279) |) |  E& S' k0 h7 C0 X/ J/ B; Z
2 R( P9 N8 Q! x; r# R9 a2 J

( s6 N6 T; [/ i2 Q; I$ j




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