% B* p6 C7 `( Q% j" E 3 B8 q% Y' s, ]! I
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu * \% }# U/ y' e$ m, K$ _! J7 l list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一* W! ~- ^" M. r) U g, y/ ^
个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu * ?7 s2 z# m: n( s" V' S length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当; I5 p/ l( `) }- P
一个有兔子留守的地方优越性太突出,超过了“best 1 U! e; x" w9 K0 V! Z0 f+ H$ }" }
to 1 }$ l& V- i: ]. W5 ^0 }- M
far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration 3 D1 H( g$ D* s criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 ) A- C+ }. }0 C% H! [$ E! `, _ 8 T' D+ @" ~/ M2 \5 L ~, `( H1 K3 E2 k - k+ A9 l2 P( x U1 Y1 `( | 伪码表达:& t! y. g- M! [- \
procedure tabu search; ( c4 ]; b. b) E+ F( V" s, w begin , I5 ~: U+ q+ x, J5 _+ v% c8 L
initialize a string vc at random,clear up the tabu list; " m! X/ m+ y4 [ B: [3 H+ Y cur:=vc; & Z/ Y# z! e* z
repeat ! }/ _; @' k4 _8 Z select a new string vn in the neighborhood of vc; - l! ]2 P5 r+ z' Y7 S if va>best_to_far then {va is a string in the tabu list} " M: y# [2 q* o- \* X. e
begin 0 N5 [& D4 V ~% |& K1 \1 v2 ? cur:=va; ' j2 @$ u- W& s: ?/ |+ p let va take place of the oldest string in the tabu list; 7 t g8 n% G; R5 \$ @. @0 G best_to_far:=va; : I. t3 [' y6 F1 @# A9 i. k
end else 9 r6 Z6 ]5 @, Q9 Z% H2 f) U begin ! |' ~) M+ U. M8 I) _
cur:=vn; / @3 F; f! K1 g let vn take place of the oldest string in the tabu list; ; v+ g7 E* }4 p
end; % S; `3 u M/ Q) f0 {
until (termination-condition); ! r% v( j& I8 H1 t( f
end; $ v" E- U; K) F$ J) }* g- g* q
4 L5 B: Z* e4 Z: `
) J u- ]: _: s {# d% W2 D7 J% R 以上程序中有关键的几点: ?/ V; Z5 a: ]3 U( c, X' B (1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu 8 Z; ~" L O; g* X& G. J
list,也可以把和当然值在同一“等高线”上的都放进tabu " ~6 I: l9 _% E8 o. R" q$ s2 q5 n list。 # d) X, C& I8 E) X# D8 i) @ (2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。' ^0 c) @( m9 z) C! K
( @/ s7 z S# {" z& X' L" q7 F2 ]- q
/ v* V8 ]1 c9 n
(3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的 “死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。 7 P$ U) ?4 ^6 r. G; `$ T ( s' ]! H6 ?" u; z5 d N2 t
: j: d. p* h, k. K# M# @: P' T (4)终止准则:和模拟退火,遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步" K6 D1 M3 R# d7 s
保持不变时,终止搜索; 4 R4 ?5 U0 x3 } 6 B+ V5 {9 N/ E( O
# I% H6 L1 h: x0 \& z- w
禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。 - b- X8 q$ y# l 9 w% j# b& k* v1 @: k
/ F% u ?8 B9 \, G5 ~3 d 人工神经网络(Artificial Neural Network,ANN) 0 a# `1 A( W: `8 {8 L: x ( T; K5 t. `7 d9 j3 l# x+ V
0 @; ` [# w7 ]5 x: J
神经网络从名字就知道是对人脑的模拟。它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。和冯·诺依曼机不同 - @+ x4 j5 C9 Z9 R,神经网络计算非数字,非精确,高度并行,并且有自学习功能。 6 ], z6 O: ]- f7 B6 [- ` ' }4 P3 W" W. m * M8 F( V' I. S5 Q( x- ^. @1 x 生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突,* W* \) q1 b* a! l8 L
是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高 9 H# H+ F, D Z% o出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。- K: p: }7 w& M) M! ]; j; L
( q% M, ^/ P# N! `& F+ X% _
1 H! \) \. r% [( K; n0 m8 w 而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素:(1)形式定义人工神经元;(2)给出人工神经元的连接方式,或者说给出网络结构;(3)给出9 p5 c$ G$ q, t' }0 q' d
人工神经元之间信号强度的定义。" x- |' ^* ?6 V- f6 j/ O
; }; [2 e3 X. A- e' _
3 h' S+ U6 P" V% U- M8 @$ J1 M
历史上第一个人工神经网络模型称作M-P模型,非常简单:/ z$ k* V3 y9 [. Y" X' T
4 }( L: L- M4 p( q2 Y. P5 v $ k2 \% s' `* p# W: m) b% P
其中, 9 w9 m" n! N9 i* `% H) T# S, D6 j' d 表示神经元i在t时刻的状态,为1表示激发态,为0表示抑制态;/ o6 R1 d- y. i
是神经元i和j之间的连接强度; : ~- @+ i! ?6 S7 `; p; T* S 表示神经元i的阈值,超过这个值神经元才能激发。 - v6 p1 h6 E7 }2 Y! a" @# ] 这个模型是最简单的神经元模型。但是功能已经非常强大:此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前数字: Z" U1 E, Y+ w6 e: Z
计算机的任何工作。+ j7 n/ t4 t z2 f6 l( v9 K( o
; v. L; K1 v: V. r/ d; f
- c R5 t( @, S; s* N' \! D/ [! S" y
以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个半平面,却不能够选取特定的一部分。而解决的* f7 Y3 i; y; h# I# `$ @' @# |
办法就是“多层前向网路”。- M6 v: |6 k2 V6 ^ |! l
9 |9 r0 M. ]0 Y
9 B( `* g+ F3 a- E- l; {
图2 - O8 I C' w( i4 r0 j 图2是多层前向网络的示意图。最下面的% Y& V, P& R) V) \" b- u Y
称作输入层,最上面一层称作输出层,任何一个中间层都接受来自前一层的所有输入,加工后传入后一层。每一层的神经元之间没有联系,输入输出层之间也没有直接联系 % ~6 j; o/ [. T7 a- Z,并且仅仅是单向联系,没有反馈。这样的网络被称作“多层前向网络”。数据在输入后,经过每一层的加权,最后输出结果。 $ N' l+ d# N) g6 C3 F+ v . C( c" V( Y( O! e
5 {7 x4 B7 ?8 l: y5 Z) O
图3 3 d; v! r- w. O& B& V
如图3,用可覆盖面来说明多层网络的功能:单层网络只能把平面分成两部分,双层网络就可以分割任意凸域,多层网络则可以分割任意区域。 ( h/ U0 Z7 c ?' h 为了让这种网络有合适的权值,必须给网络一定的激励,让它自己学习,调整。一种方法称作“向后传播算法(Back # k- C* ~. V4 R, Q' | Propagation,BP)”,其基本思想是考察最后输出解和理想解的差异,调整权值,并把这种调整从输出层开始向后推演,经过中间层,达到输入层。1 F$ f5 w0 H' m
8 _- A/ m# `5 c, O' z
1 Y9 j5 C# ~. o 可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有直接联系,这里学习的作用: L* F. w; c9 f" k& u s6 K0 c
是根据神经元之间激励与抑制的关系,改变它们的作用强度。学习样本中的任何样品的信息都包含在网络的每个权值之中。 * F0 y g0 o5 T * C6 Q) ]" X: X4 I3 ` 1 A) A r. t4 i F$ l BP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。这就又包含了前文所说的“最小值”问题。一般的BP算法采用 8 u9 B) ^: m3 `3 ~的是局部搜索,比如最速下降法,牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,遗传算法等。当前向网络采用模拟退火算法作为学习方法的时候,一般成 1 W2 r" N* L! i: H5 ]为“波尔兹曼网络”,属于随机性神经网络。 2 V: J- a! y, D( i% ?9 } 4 x) E+ t$ h0 z3 I) F+ ^' { % j; A- {6 t1 `. l+ P4 ~- j 在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。如果没有了监督,人工神经网络该怎么学习? . _" ]4 |% }1 i4 G 8 E; K$ L8 J5 q N! B & K; H% B, q+ r5 L' Z: | 就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神1 l* P4 B- m# E
经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利;+ r8 X6 X: t0 k" N, P& V6 ?
+ _; G3 n; h& l" W( }3 a; o S' b- g( d) P* t8 B 人工神经网络还有反馈网络如Hopfield网络,它的神经元的信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量函数值不断下 2 |2 `8 x/ ^- E# o* N0 M9 s X降,最后能给出一个能量比较低的解。这个思想和模拟退火差不多。 4 i+ F# _! F! T7 w5 u% T6 U 2 U- r9 H& J; O$ }
) H! \, j3 @- ~
人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。这种思想已经和冯·诺依曼模型很不一样。8 l5 x G% v/ e; j
1 z& x2 {& x0 b5 t$ ~; M9 l ! x7 W8 v/ u+ ^7 ?' n, i 总结 4 g; i$ j5 E6 \* R6 R 模拟退火,遗传算法,禁忌搜索,神经网络在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点:都是模拟了自然过程。模拟退火思路源于物理学中 ) q8 q. G/ {& [( h" F C固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。+ h- e7 i9 ^, x& t
8 B' n E0 U& y- ?
( t% O, w) M1 p3 Y% d, _/ h
" s2 B" h$ d* f9 U" i6 N; b 它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。 / H* ^" L6 S/ X' L9 Z $ \: G) C5 e2 N0 V: k( R 这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计2 v. {% r6 n" R7 N3 @6 s! M7 K
的计算机有着广阔的发展前景4 V3 K* T, }5 j5 c
禁忌搜索算法(Tabu Search,TS) D6 C$ [$ ^* ~
为了找到“全局最优解”,就不应该执着于某一个特定的区域。局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地方寻找。就这样,一大圈后,把找到的几个山峰一比较,珠穆朗玛峰脱颖而出。+ Q* |; U% V0 E, ^. {; Z
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当一个有兔子留守的地方优越性太突出,超过了“best to far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 ) L4 q9 P3 W! h' f$ {8 t; O伪码表达: - G' o3 u' w7 W8 w% Zprocedure tabu search; 9 @* ^& C6 l# G' u1 D9 c$ obegin ) i" {1 k0 X5 q4 R/ Linitialize a string vc at random,clear up the tabu list;4 ^3 ^; _' @. l6 t
cur:=vc; % d2 z4 [8 U1 m8 k8 h% krepeat2 {$ N: K% ]$ G
select a new string vn in the neighborhood of vc; / r# ?" V& b. R# T* z* V
if va>best_to_far then {va is a string in the tabu list} ; }; c, c$ o. V" l# Z4 w3 |begin ]0 {" \5 g: s0 R; T* W0 e! l7 M
cur:=va; 4 ?! E% Q; g' o8 ?5 d8 e( Blet va take place of the oldest string in the tabu list; $ i+ B, C$ {" W8 {& S, }* S6 sbest_to_far:=va; 9 x: A% ]' U2 y. z1 f8 qend else/ H; |' }7 \7 j( O; E1 Y9 }: z
begin& `0 O' k$ H( w) w: U
cur:=vn;8 z1 p& s/ M( R1 b
let vn take place of the oldest string in the tabu list;! X7 i8 ^& C# \3 J
end;/ H' }1 o6 g$ K1 G! o' f
until (termination-condition); ! p: Q+ s! D; i R. o9 pend;' `' j( \ \* y
6 X( n+ O+ S* D1 m) |
以上程序中有关键的几点:: C6 D' _, Y" W, q
(1)禁忌对象:可以选取当前的值(cur)作为禁忌对象放进tabu list,也可以把和当然值在同一“等高线”上的都放进tabu list。! \+ m0 F& f+ X3 R
(2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。 . A( M4 e$ |4 C6 O, ~(3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的“死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。 * z! J. D: m% s, o6 l(4)终止准则:和模拟退火,遗传算法差不多,常用的有:给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步保持不变时,终止搜索; * H" s8 V/ f* s, T& g+ ]禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。7 B* _$ H5 q4 r3 V3 }. I: @
人工神经网络(Artificial Neural Network,ANN)5 L1 K1 B8 N+ i, ~& D( J
神经网络从名字就知道是对人脑的模拟。它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。和冯·诺依曼机不同,神经网络计算非数字,非精确,高度并行,并且有自学习功能。- } W2 x0 q* P1 ]% Z
生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突,是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。 6 v, ^; }+ v" Q9 i而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素:(1)形式定义人工神经元;(2)给出人工神经元的连接方式,或者说给出网络结构;(3)给出人工神经元之间信号强度的定义。5 o9 Y; }6 U* Q4 W/ b
历史上第一个人工神经网络模型称作M-P模型,非常简单: ) K& S! q. l. Y! X+ H- L其中, 表示神经元i在t时刻的状态,为1表示激发态,为0表示抑制态; 是神经元i和j之间的连接强度; 表示神经元i的阈值,超过这个值神经元才能激发。: I# E0 Q- J3 }9 _; |
这个模型是最简单的神经元模型。但是功能已经非常强大:此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前数字计算机的任何工作。3 U/ c0 |8 {' I" u( {$ ^
以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个半平面,却不能够选取特定的一部分。而解决的办法就是“多层前向网路”。! O8 ? S0 d" J7 v5 G/ ^1 h
图2; [. Y1 K) y1 c2 l) D
图2 是多层前向网络的示意图。最下面的称作输入层,最上面一层称作输出层,任何一个中间层都接受来自前一层的所有输入,加工后传入后一层。每一层的神经元之间没有联系,输入输出层之间也没有直接联系,并且仅仅是单向联系,没有反馈。这样的网络被称作“多层前向网络”。数据在输入后,经过每一层的加权,最后输出结果。7 z+ B$ I# s4 k+ y
图3 ' R( U; q8 R+ l! e. Z如图3,用可覆盖面来说明多层网络的功能:单层网络只能把平面分成两部分,双层网络就可以分割任意凸域,多层网络则可以分割任意区域。 ! r2 R. {4 H$ d. J为了让这种网络有合适的权值,必须给网络一定的激励,让它自己学习,调整。一种方法称作“向后传播算法(Back Propagation,BP)”,其基本思想是考察最后输出解和理想解的差异,调整权值,并把这种调整从输出层开始向后推演,经过中间层,达到输入层。 0 ]2 R1 Q1 I( @9 w0 I* B可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有直接联系,这里学习的作用是根据神经元之间激励与抑制的关系,改变它们的作用强度。学习样本中的任何样品的信息都包含在网络的每个权值之中。 3 `- W" @7 o' J K% `' JBP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。这就又包含了前文所说的“最小值”问题。一般的BP算法采用的是局部搜索,比如最速下降法,牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,遗传算法等。当前向网络采用模拟退火算法作为学习方法的时候,一般成为“波尔兹曼网络”,属于随机性神经网络。 0 p" a# e8 X; H5 g9 w在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。如果没有了监督,人工神经网络该怎么学习? 1 P$ g9 y9 L' R就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利; ( R. B3 s' j3 p( u5 ?: S" ~人工神经网络还有反馈网络如Hopfield网络,它的神经元的信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量函数值不断下降,最后能给出一个能量比较低的解。这个思想和模拟退火差不多。( X! F; X0 L# t) S( t+ u* G
人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。这种思想已经和冯·诺依曼模型很不一样。0 `( Q3 a+ w( k3 Q
总结- o! I, A, z0 ]4 L6 m8 u# a
模拟退火,遗传算法,禁忌搜索,神经网络在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点:都是模拟了自然过程。模拟退火思路源于物理学中固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。8 t( F2 @, J7 C+ S$ |
它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。 " }6 n( {4 g$ @& g, s" U这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计的计算机有着广阔的发展前景 % x4 y- R% l# `, D$ o+ D2 j4 X