- 在线时间
- 791 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2017-6-12
- 听众数
- 15
- 收听数
- 0
- 能力
- 120 分
- 体力
- 36354 点
- 威望
- 11 点
- 阅读权限
- 255
- 积分
- 13867
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 616
- 主题
- 542
- 精华
- 12
- 分享
- 0
- 好友
- 225
TA的每日心情 | 开心 2020-11-14 17:15 |
|---|
签到天数: 74 天 [LV.6]常住居民II
 群组: 2019美赛冲刺课程 群组: 站长地区赛培训 群组: 2019考研数学 桃子老师 群组: 2018教师培训(呼伦贝 群组: 2019考研数学 站长系列 |
人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及 功能的一种抽象数学模型。自 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 ~# f 8 ?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 Y 6 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
|