数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-4 11:24
标题: 神经网络模型用于数学建模
人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 1943 年美国心理学家 W. McCulloch 和数学家 W. Pitts 提 出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了 50 多年 曲折的发展。特别是 20 世纪 80 年代,人工神经网络的研究取得了重大进展,有关的理 论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。 它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及 专家系统等领域得到广泛的应用,提出了 40 多种神经网络模型,其中比较著名的有感 知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这 里我们仅讨论基本的网络模型及其学习算法。! W1 d4 d& O2 L- t' U: `
, m. J2 `3 B5 W! L9 h" ?
1.1  人工神经元结构
+ m, n. l6 K7 t" C& X, k下图表示出了作为人工神经网络(artificial neural network,以下简称 NN)的基本 单元的神经元模型,它有三个基本要素:
- `3 B6 |+ l. A
# k4 j. _1 C4 k* B2 k# G
+ A6 y7 _. y; z2 s7 \: ]# h( p6 k) `6 B6 |, `$ R6 }  K
6 w: }6 p, X6 u; L
& R* A, Y3 f" C
& c6 b6 V5 P+ T9 S. E, E0 K
' ?8 a! e/ R. W+ F' Q8 N- ^% |

9 A. b% [, @4 f3 `8 J+ J! k6 m
3 C) b4 f  [( Y: l激活函数  ϕ(⋅ )
# E' q7 K2 B  g/ @可以有以下几种: 4 ]- y  h/ n$ E5 X( c1 ]4 g( \

' k) f. a1 q+ ^5 s" R& M3 B (0)Softmax - 用于多分类神经网络输出$ v. e4 I9 ~- ]/ |- N
! G8 N6 ]8 P; D* F1 w6 s
7 C) V" Y5 f6 Z" c# r) c  W
( L: u' z) A! ]3 V- }# ?; o) A
(1)阈值函数 、阶梯函数$ v1 @, z5 ^+ g: g

/ p% F; W4 y6 K
. p4 Q! n) V0 s* F; p1 g1 M# l3 ^3 D) i8 U/ U
相应的输出   为 5 @. K  k& @# R+ Z

! L' m5 O* T& S1 z( J0 b) @: r8 [( \/ N! c$ j1 {0 x* `/ j7 r
  ~% B! r5 M% _" f6 |) o
(2)分段线性函数 " j# b+ y. w0 ~: ^4 o5 y

9 T1 m7 n. C# ~/ j' D3 f, o  p1 q7 h
! ]# A, Y* u# ]( Z" g# ]# b: d; i
它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
/ z' S6 O  R/ l1 l4 U1 J5 _
. y3 \, V, K, Y8 m/ o6 R% E( u- ~(3)sigmoid 函数 (以前最常用)
) ^. w! Z: F# D" J0 a3 ?2 `& N# H% A3 Y; e, `0 ]$ W
& t) T) O5 o$ o4 U5 P& O8 [6 O

, Q# P) i- Y3 R2 Z# Y参数  α  > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
/ W$ J/ s8 E5 @2 C; g; o" C- h2 i, H4 z* C3 t# p& y! x' z
(4)tanh  (双曲正切函数 ;Hyperbolic tangent function) % m3 j' s$ ^4 _4 H' g/ y) e
& u/ e: Z, l; ^1 O& o
) ~8 X: }$ q2 j6 p2 b

0 Z' B4 l! s" G7 U 将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.: s9 R2 i  X& s- L2 F0 v# j! Z

5 Z9 e0 j, f# ]; L
0 B2 r! H6 ~4 a. t9 |$ C9 `) K( W1 ^# T3 V
(5)  relu (Rectified linear unit; 修正线性单元 ; 深度学习目前最常用的激活函数)
! B5 e2 f! U" \
7 z. G# p8 r; ^& M& J* N4 e# y8 r0 {1 }; x( X3 m4 Z
' X; R/ t. ]' ?2 g! z

1 C+ q; S+ w  _" X& ~& A# Relu在tensorflow中的实现: 直接调用函数
( k5 S% N, V; Q# u( G. atf.nn.relu( features, name= None )  v2 m, q$ V) u

' a5 k, O3 [8 {, M与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
! S- ^5 l. m+ G: O' N5 c* X. h( v5 A. b* i  _6 @/ |
使用梯度下降(GD)法时,收敛速度更快  6 w3 \) x. c* T5 f: v3 m. d
相比Relu只需要一个门限值,即可以得到激活值,计算速度更快  
  a3 r" s; E: U, I 缺点是:  Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。& }% Y* b* [0 b! M8 q* e
: H' U% O% K$ `, e
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
* Z5 N' ^: `; ~" R( A* Y: M
/ u; R# P  ]( V* X/ i% ]; C' S (6)Leaky Relu  (带泄漏单元的relu ), ?# c9 a( W3 j4 i( T
# c# d0 @- l! J7 ~3 V/ a. W
           数学表达式: y = max(0, x) + leak*min(0,x)
9 K6 K9 y- i' R6 w+ Y8 e6 M
6 ?9 s7 R" G; z6 ^1 F1 Q与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率,  leak是一个很小的常数  ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)
) Y" p# m+ r) m% P  H$ h
1 M7 m2 s+ K* b$ M% x) m! Y( T$ T, \; d  s. n. C7 u3 f
leaky ReLU
, M1 R% _' u" z; m
6 t, W/ U, F4 D, F7 ^1 `/ x' v# _& c- d2 S
" q$ y! a1 c3 f8 G: x( d: B
% }2 N& X; o9 ^! U
#leakyRelu在tennsorflow中的简单实现9 w2 T! s) C* E) \% P0 \! J
tf.maximum(leak * x, x),
+ ~- y# v; Z1 X% M4 t+ M7 F9 |- Y. ]3 y) Y+ i% S# U- w# R+ B2 U
8 T# E& h0 T; ^7 j! E
比较高效的写法为:
" u* f; X% B4 u* n, o+ q9 V. l) d* W+ Y2 L6 m) L
import tensorflow as tf
" B! x1 y. `  f. A& Z% q, G- p7 Ydef LeakyReLU(x,leak=0.2,name="LeakyReLU"):
7 u" d" H) y8 ]9 c( C    with tf.variable_scope(name):! a6 j& t. |% ^9 p
        f1 = 0.5*(1 + leak)
2 G7 j: ^. H6 E# N. l/ X) R9 i3 C: O        f2 = 0.5*(1 - leak)
5 X1 U" T) f% Y  \        return f1*x+f2*tf.abs(x)  Z9 D4 p# V$ Y% ~3 ~
% d  Z  O; i- V; h
(vi)  RReLU【随机ReLU】  u. b/ K" L; T9 T' a6 T

7 L% {% S* Y" R' a( ]2 ~. n在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
" c9 [. `! Q5 l1 i& n! q$ k: _  C& b! f. |4 V% w) Q* n

* n3 j4 _' v3 |9 B
7 f# X4 [; a$ m% M, }1 K总结:    激活函数可以分为 两大类
8 A7 T! z+ y) s' T
5 @% L$ [4 R! d8 a饱和激活函数: sigmoid、 tanh
( F* h. C; a, J+ B3 O9 B非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
( b/ e2 ]; l+ ~* M0 P3 D0 W4 h8 B* i( t: {- I2 n5 w- D# a( b# q  Y3 |
* j$ G% \! O5 v- f( k

' h, V% w2 s1 `) x5 K$ k; ~" c: W相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:5 D" v/ U$ b+ i7 R& r
    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。! V/ U! g  v6 m
    2.其次,它能加快收敛速度。 - b1 H8 X* h3 o$ H/ g! K+ r! R% a- n

# K1 z) R/ H5 J: F) B! B1 i. i其它激活函数:softplus、softsign/ n+ Y9 m" C2 Q$ Z
3 r7 \! {1 F; u4 M' |( _

7 B6 [/ |9 {! H+ \  h
6 q- _; @3 W, M+ TMatlab 中的激活(传递)函数
! p5 `9 x4 d8 z  W3 w0 C3 B0 C; i! ^- v6 O0 R
1 w" H" C/ |8 P3 [1 u- b$ C  `
5 s0 w- \# N4 p% d8 U- C- L
7 K8 @- i; S  A- Z
1 d" _4 e4 `! Y; Q2 H
1.2  网络结构及工作方式 / O$ E) V. g- J2 L6 N; w
除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。" O6 v5 @; \8 r- q& q7 @! V

* J2 P4 ^* f" D0 P1 ~6 V(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
- ~9 G" u2 ^) i) r; g& C" K8 f* b- J9 ]
(ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 # ^( C+ h! v" O$ w' h  b5 a

+ n" g* ?" K! A9 W7 l2  蠓虫分类问题与多层前馈网络
6 n+ B  f7 T4 `1 s2.1  蠓虫分类问题
* H' w! s& d! S) d% B* H; [: M) r+ r蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下:
  u/ H+ N6 q" I" G
/ p$ a" ]$ ?5 E. w: K& _* rAf: (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).
- k5 X& r7 f6 W
& r4 w  g: ~$ s. e9 h% \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).7 M3 l! ?* o. E$ }
5 `* h; Y; w0 A5 L0 T$ R' W
现在的问题是:7 g7 a# u) R( T

2 |; T5 ~7 U% ]: j- c( F, l& T(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。5 F0 y) O0 A5 u: @, Z+ |9 c

- m- q' m' H% {$ P! m! ^4 @(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的 3 个标本,用所得 到的方法加以识别。
5 K$ j0 {8 `) b& E
: O6 f4 e% M' y: o1 K(iii)设 Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。' r! f6 E4 h4 {4 S
5 P4 r$ k5 E! F8 \" r1 g8 f" Y8 ^
如上的问题是有代表性的,它的特点是要求依据已知资料(9 支 Af 的数据和 6 支 Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或 Apf)。今后,我们将 9 支Af 及 6 支 Apf 的数据集合称之为学习样本。
! I0 ^4 ~$ _. e0 D
# q  o* W% K& N, \1 P2.2  多层前馈网络
, ^$ J* @# I  t# ~) O为解决上述问题,考虑一个其结构如下图所示的人工神经网络,2 i$ \7 p1 H' O* |4 U% Q* X- Y

" W. ]  `' j* a# |* p: c
6 ]+ }9 X) c0 B9 v$ L! j6 E. s4 S' e& A/ h
+ Y0 a4 \4 A& J, g9 B' {, _
使用sigmoid 激活函数:" Q- ^- C; o" R% T" X5 o' w
3 i/ ~% S# ^, r- j5 _1 U: n
, a* z- V; E6 ^7 I! g% r; g
' V7 a4 r2 `- R
图中下面单元,即由   所示的一层称为输入层,用以输入已知测量值。在 我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。 中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献 进行了讨论,但通过试验来决定,或许是好的途径。在我们的例子中,取三个就足够 了。上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入 数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理 后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入 与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络 结构。有些文献将这样的网络称为两层前馈网络,称为两层的理由是,只有中间层及输 出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层 数之内。/ d: T3 T; K1 S, g

; J! f8 k! O5 v5 v; E: I8 [' I4 p$ ?" K: d( m* y! |3 w4 e

; J* `3 h, H8 z9 w: u+ h2 @% t
1 F  `5 h& y) o9 W8 y- f, m" d% }% l! `! _6 F; r5 T2 V9 V
2.3  后向传播算法1 Q8 {2 z  v& x4 ~4 y
对于一个多层网络,如何求得一组恰当的权值,使网络具有特定的功能,在很长一 段时间内,曾经是使研究工作者感到困难的一个问题,直到 1985 年,美国加州大学的 一个研究小组提出了所谓反向传播算法(Back-Propagation),使问题有了重大进展,这 一算法也是促成人工神经网络研究迅猛发展的一个原因。详细了解请看: 一文弄懂神经网络中的BP反向传播算法
2 J. ?" }+ m) K2 ?4 l$ e1 m. `6 J7 r# z8 w8 J  R8 d+ \9 q
下面就来介绍这一算法。【注:梯度法又称最速下降法。】
4 {* M( a' z& `6 L( ~9 b6 T5 f
- S8 x3 p; \/ l3 l( c1 g8 m
/ k) R, e7 i" u( {/ E: T- M' |6 F  B# G) R" W' w- I
, X9 r" t6 @/ C6 b. l  O/ v

' Q. h& M$ I$ }2 A- f& v! h- |' p$ K7 @* ^* [' M& Z

/ ^4 n) m6 d, K8 ^$ I, k+ Y* s9 b* @: a; V

* u4 `  Y6 A9 L4 _, x(iii)在如上的讨论中使用的是速下降法,显然,这也不是唯一的选择,其它的 非线性优化方法,诸如共轭梯度法,拟牛顿法等,都可用于计算。为了加速算法的收敛 速度,还可以考虑各种不同的修正方式。
! H1 r/ B+ t0 h- z7 h2 `/ r8 Y
. b5 t& w% {$ C6 F) Y1 ~) J(iv)BP 算法的出现,虽然对人工神经网络的发展起了重大推动作用,但是这一 算法仍有很多问题.对于一个大的网络系统,BP 算法的工作量仍然是十分可观的,这 主要在于算法的收敛速度很慢。更为严重的是,此处所讨论的是非线性函数的优化,那 么它就无法逃脱该类问题的共同困难:BP 算法所求得的解,只能保证是依赖于初值选 取的局部极小点。为克服这一缺陷,可以考虑改进方法,例如模拟退火算法,或从多个随机选定的初值点出发,进行多次计算,但这些方法都不可避免地加大了工作量。 ; N/ V: S2 ~2 u8 b) ~* k: V
# y& d: u. G; |. q
2.4  蠓虫分类问题的求解
% _! m9 f! t; [下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序 如下:& l' U' }, V3 d4 |- _
) }; T6 w, ^2 ^0 o) _+ O
clear 4 E! q3 I: D9 O/ m0 c- W3 v
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;! P5 m/ g* }9 z+ n. p. G
    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
: @& V5 x  q" @6 H; u3 K' l0 o8 vp2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00   
+ X1 r- K) _6 n2 H3 {    1.28,2.00;1.30,1.96]; p=[p1;p2]'; pr=minmax(p); * H, j4 Z" S4 ^5 z2 t# t8 `
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
7 g) ^: t0 e' ?5 k- p: `8 C) Iplot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o') 1 R( R7 w+ o+ O3 w* J
net=newff(pr,[3,2],{'logsig','logsig'});
5 I8 D8 W  j8 G& a0 L9 C0 }net.trainParam.show = 10;
- H; `& G9 H) C% M6 Q$ L  {net.trainParam.lr = 0.05;
+ m5 {2 Y/ h2 r5 ?0 T; Ynet.trainParam.goal = 1e-10;
: Z8 N& ?+ e: k- e+ Inet.trainParam.epochs = 50000;
  T& c2 x! q9 t$ Onet = train(net,p,goal); % L  L( K; m+ F" W
x=[1.24 1.80;1.28 1.84;1.40 2.04]'; # ^+ `! t" T* y7 C7 s' D% }4 N) ^
y0=sim(net,p). Q$ R( {3 w( @  M' d
y=sim(net,x)
4 @. d+ V5 q$ F8 V7 g' y( N3 b( U" }0 Y  p
3 d, u) Q' E; v- f  J7 q

( Z3 F$ j' ~' q3  处理蠓虫分类的另一种网络方法 6 s0 ]/ z( t3 u  q. U- u6 V0 z
3.1 几个有关概念
) c! a( w/ H* _/ p在介绍本节主要内容之前,首先说明几个不同的概念。在上一节中,我们把利用 BP 算法确定联接强度,即权值的过程称为“学习过程”,这种学习的特点是,对任何一 个输入样品,其类别事先是已知的,理想输出也已事先规定,因而从它所产生的实际输 出与理想输出的异同,我们清楚地知道网络判断正确与否,故此把这一类学习称为有监督学习;与它不同的是,有些情况下学习是无监督的,例如,我们试图把一组样品按其本身特点分类,所要划分的类别是事先未知的,需要网络自身通过学习来决定, 因而,在学习过程中,对每一输入所产生的输出也就无所谓对错,对于这样的情况,显 然 BP 算法是不适用的。 另一个有关概念是所谓有竞争的学习。在上节所讨论的蠓虫分类网络中,尽管我们 所希望的理想输出是 (0,1)或(1,0),但实际输出并不如此,一般而言,两个输出单元均同时不为 0。与此不同,我们完全可以设想另外一种输出模式:对应任何一组输入,所 有输出单元中,只允许有一个处于激发态,即取值为 1,其它输出单元均被抑制,即取 值为 0。一种形象的说法是,对应任何一组输入,要求所有的输出单元彼此竞争,唯一 的胜利者赢得一切,失败者一无所获,形成这样一种输出机制的网络学习过程,称为有 竞争的学习。
; s0 _8 K: D+ N
6 [# ?- v- S" p( }. W3.2  简单的无监督有竞争的学习
- U+ A& E3 J2 x9 o7 m- Y4 c  L2 N; \& E. h, G
本节叙述一种无监督有竞争的网络学习方法,由此产生的网络可用来将一组输入样 品自动划分类别,相似的样品归于同一类别,因而激发同一输出单元,这一分类方式, 是网络自身通过学习,从输入数据的关系中得出的。 蠓虫分类问题对应有监督的网络学习过程,显然不能由如上的方法来解决。但在这 种无监督有竞争的学习阐明之后,很容易从中导出一种适用于有监督情况的网络方法; 此外,本节所介绍的网络,在数据压缩等多种领域,都有其重要应用。
) W  E6 a% b8 B/ l1 _; G
8 Z# q7 Q8 ]) ?7 N9 p& x. p
1 v6 c5 y4 q# o8 F3 H) a0 l! w* l& L) p6 P

8 v) {- b  b/ u9 X5 p- K; G0 D' v" ]  U8 G: L% }

6 N  l1 h3 X1 K; L/ B) E
, K4 q( S2 a5 |1 b" q. D为了更有效地使用如上算法,下面对实际计算时可能产生的问题,作一些简要说明。
# N0 Z2 W# D& y. H1 ^" B8 E! G
& [( l: F6 f7 Q& T: O 首先,如果初始权选择不当,那么可能出现这样的输出单元,它的权远离任何输入 向量,因此,永远不会成为优胜者,相应的权也就永远不会得到修正,这样的单元称之 为死单元。为避免出现死单元,可以有多种方法。一种办法是初始权从学习样本中抽样 选取,这就保证了它们都落在正确范围内;另一种办法是修正上述的学习算法,使得每 一步不仅调整优胜者的权,同时也以一个小得多的 η 值,修正所有其它的权。这样,对 于总是失败的单元,其权逐渐地朝着平均输入方向运动,终也会在某一次竞争中取胜。 此外,还存在有多种处理死单元的方法,感兴趣的读者可从文献中找到更多的方法。
( M% e- i0 k' C" M% Q1 v; W+ V5 h( y; J* }: `4 @
# ~$ V3 H- e" E; T5 h

  M" ]2 F& n/ N8 P: g8 O/ w
4 O# o  j0 V2 ], |7 y8 X( t5 d
( Z3 z7 u/ e* J! ~9 G$ \3.3  LVQ 方法 --学习矢量量化" Z5 y2 i; \- r9 G$ A) I" @' M
& X. U& }- ?# G+ {  l" F8 z( h
上述有竞争学习的一个重要应用是数据压缩中的向量量子化方法(Vector Quantization,又称,学习矢量量化)。它的基本想法是,把一个给定的输入向量集合   分成M 个类别,然后 用类别指标来代表所有属于该类的向量。向量分量通常取连续值,一旦一组适当的类别确定之后,代替传输或存储输入向量本身,可以只传输或存储它的类别指标。所有的类别由M 个所谓“原型向量”来表示,我们可以利用一般的欧氏距离,对每一个输入向量找到靠近的原型向量,作为它的类别。显然,这种分类方法可以通过有竞争的学习直接得到。一旦学习过程结束,所有权向量的集合,便构成了一个“电码本”。
& N7 i7 g* E/ P; k0 y
, L2 Y* ~" u% k7 e+ o, P一般而言,上述无监督有竞争的学习,实际提供了一种聚类分析方法,对如蠓虫分类这种有监督的问题并不适用。1989 年,Kohonen 对向量量子化方法加以修改,提出 了一种适用于有监督情况的学习方法,称为学习向量量子化(Learning Vector Quantization),该方法可用于蠓虫分类问题。在有监督的情况下,学习样品的类别是事 先已知的,与此相应,每个输出单元所对应的类别也事先作了规定,但是,代表同一类 别的输出单元可以不止一个。 * F& n9 _2 r% e" V, S

8 j3 w& T/ j; C, i3 @" H. b3 U& `% v. o  J! a5 Z! W. m) [7 H

5 w5 w2 y$ s; Q8 L- `前一种情况,修正和无监督的学习一致,权朝向样本方向移动一小段距离;后一种 则相反,权向离开样本方向移动,这样就减少了错误分类的机会。 对于上述的蠓虫分类问题,我们编写 Matlab 程序如下: 9 G$ o/ X! \  b% D2 |
clear
, ]7 a6 ]/ y& M4 G/ Tp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
3 F1 H/ X6 }( _& Z' k* w! l7 o    1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
1 Z5 A" U. _) ap2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00  
7 s* X! t) y" ^$ p1 D" l    1.28,2.00;1.30,1.96];
$ z0 W& V6 z0 I! k" z' ~6 ip=[p1;p2]'
! t; H; c2 l6 q! T% ~, Lpr=minmax(p)
9 q) \1 [# F! l4 s5 ^goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
+ {0 J5 y$ f% n: z* I  ?4 @$ Enet = newlvq(pr,4,[0.6,0.4])
" ^% ~! T0 h$ z1 J' @; Jnet = train(net,p,goal)
8 `3 R$ j. k- fY = sim(net,p)
3 E, ?/ P8 {. S3 w$ Tx=[1.24 1.80;1.28 1.84;1.40 2.04]'
- V* I6 I- d4 K, ~+ tsim(net,x)   t. z+ I% N& B2 ^2 c
; a  {% {  e  A1 i7 E
习 题 # Z4 J" u3 ?' t" N1 }  N2 y* y, g" C
1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题
1 n& d% j3 F/ M0 z
* S, u! _/ Z7 l4 A3 q" a+ s0 y3 X! Z6 J
* m# L& |( K9 a" Q
对每一函数要完成如下工作:  _6 }% f6 S( E6 P/ U% v. N

0 L* [4 Q/ H2 K0 |7 o2 H① 获取两组数据,一组作为训练集,一组作为测试集;
- D: U8 S  C0 S* l1 f4 o) |" w/ Y. N" g) y9 v
② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。
2 g+ s$ O1 ~2 X# q" P2 u1 q
9 V3 g3 t9 A. d% H2. 给定待拟合的曲线形式为
1 Z5 T. o+ n: I1 c, R5 m$ h0 w# A- t
, V6 _3 l: N5 O/ p3 M: y
; |8 T( k( e$ H
在  上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差  σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。
' M& J) T5 ^1 x% k# Y6 T' C
! o1 H; h/ _# z4 B- o4 W* m. L/ }! C

" A" r# \6 U6 S9 e3 _( Y" X, p" G8 _0 L7 k: q( F  x3 Y! E
0 t' i" `- ~4 u6 n( U8 J

: `8 }! n6 i2 Z  \$ e- q————————————————5 O  E$ L# g5 E
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; }% f; X9 j% U" N( ]( \' m4 S原文链接:https://blog.csdn.net/qq_29831163/article/details/89509279
4 a" k7 U& `0 j, t( R# q# R$ f
) K; P$ W9 D  l0 K) `0 n: N/ w3 Q& ^& m# R. ^, L1 O





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