5 f7 o/ P. q4 ~0 u9 d7 X7 A 为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。 v% `3 W$ G4 p: D- v
' T' P+ Z1 S% M# ^9 ~( Z (6)Leaky Relu (带泄漏单元的relu ) " [* _- b& z$ t# P3 r9 C% V" f% H- J# D4 |' W' d9 z
数学表达式: y = max(0, x) + leak*min(0,x) ) @# }6 M5 a* v+ L+ x& x6 {; a/ Q" o( @, N3 z8 J" C
与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率, leak是一个很小的常数 ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失) , j0 [3 ^4 g' C+ C5 x6 U4 r# O' P( F- w; L5 P; E( c
! g7 R3 \' X2 w: S1 a7 F7 S2 O( i
leaky ReLU 9 a8 e" m' g' L7 ~. C6 F, `5 O% v* x' Z4 b/ ~; Y$ M $ R& r+ m( Y3 c1 y2 j! q6 \& V# b) a6 {6 B U6 A: d( r( E
7 j% l/ L/ }3 M! D: x
#leakyRelu在tennsorflow中的简单实现 % r4 B7 X1 u' ]# B( T tf.maximum(leak * x, x),7 l/ x# X$ B' a: F. B
0 G% u$ ?* k! z4 @" h% j" J
, X9 m7 A$ i. h- h
比较高效的写法为: / }8 @1 d: b! L4 [: b: O" R 4 O4 X7 _" K- A; E5 E) Yimport tensorflow as tf8 y. C( S# C& w
def LeakyReLU(x,leak=0.2,name="LeakyReLU"): ( F4 L. f* G* _6 G* a with tf.variable_scope(name): G& c! \( q) E
f1 = 0.5*(1 + leak) 9 h9 w& t, x) f0 W f2 = 0.5*(1 - leak) ( J' w6 L4 J) J9 R) z1 B" P$ X8 g return f1*x+f2*tf.abs(x); M- U4 c7 j/ q/ ~
' ]/ q4 \# V" Q. q- q5 X(vi) RReLU【随机ReLU】/ j8 `2 v$ y, _4 P9 g: N: L
0 U; k% S1 P5 ~+ l5 c; j- B9 v
在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。 , k! X6 i! Q2 a4 H3 N' f- v) f' D- _( B , Q9 o( X6 I; \ C- |- K+ R9 _2 m A8 A4 ?+ |
总结: 激活函数可以分为 两大类 + B, ]. D- B9 X" e3 O8 v* B' Q% I* T$ k
$ J, f1 R2 d0 G, n+ k5 Q饱和激活函数: sigmoid、 tanh/ T) C% e8 Z, V+ H3 `
非饱和激活函数: ReLU 、Leaky Relu 、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】 4 X% g- e! y' {1 z6 i. Z5 t X' e4 ]' ]1 b * [8 k1 H7 m# w4 _9 \! [4 d
5 p, V$ X1 c7 W
相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:3 A, `: c7 P1 I; f4 s
1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。4 |" o8 ]. Y' a9 m: O! T
2.其次,它能加快收敛速度。 + s! [$ t; }, ~9 h* Z/ v 0 s6 h4 L" q3 \9 Y3 S& b1 k! [其它激活函数:softplus、softsign 7 h. a& m* m9 ?2 |/ ^2 i* m# P : Y e$ w3 o3 v, H
! s. o% L' [( T+ `Matlab 中的激活(传递)函数 0 g$ d [; }% d, T# z$ C6 k! S' d+ d7 v5 r' Y 7 v. ?! D4 S' P$ L1 G
% a- P' T* L# I ) @0 q/ V& ^' [8 F2 i
; `1 D' ?4 q4 o* k7 K: Z) Q0 X1.2 网络结构及工作方式 & x4 I! U+ \5 m" M
除单元特性外,网络的拓扑结构也是 NN 的一个重要特性。从连接方式看 NN 主要 有两种。 ! F9 N8 `- d' ?& p% S6 Q' }% N) \& h. c/ g1 K. T* U- X" j* N$ `+ X
(i)前馈型网络 各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入 单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多 个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第 1 −i 层 输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。 . P' k3 o& @: q4 b4 D1 {& n$ ?0 t; @3 C J9 d6 K' H
(ii)反馈型网络 所有结点都是计算单元,同时也可接受输入,并向外界输出。 NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不 变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算 单元状态变化,以达到某种稳定状态。 从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。反馈网络 按对能量函数的极小点的利用来分类有两种:第一类是能量函数的所有极小点都起作 用,这一类主要用作各种联想存储器;第二类只利用全局极小点,它主要用于求解优化问题。 , T$ ]- R) h0 B! F: _
% b0 R" _3 ?# [, t2 蠓虫分类问题与多层前馈网络 3 \; K2 ~. m" ^ {0 L/ c% ?* V
2.1 蠓虫分类问题 ' J1 v- L0 k1 |, r! `) G
蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与 Apf)进行鉴别, 依据的资料是触角和翅膀的长度,已经测得了 9 支 Af 和 6 支 Apf 的数据如下: 6 `7 L% O, ?" f0 I4 d5 i+ m: |* g/ w; S) S. N5 [: [
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).3 G& s2 c, J: F. f1 Q$ _5 e1 M
( ], q! e" N I0 cApf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96)., h3 w3 M3 K. J/ T
; e7 V$ y. V! w+ g* P" E
现在的问题是:) _/ m& S5 q7 y( N
C% |5 M9 P# N, I: A/ ]
(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。7 [, t: c R' z: A: g. y
. z9 ~+ T5 k) z) V/ h习 题 4 A7 {8 p# _' }, V* [
1. 利用 BP 算法及 sigmoid 函数,研究以下各函数的逼近问题 * c- u8 A- M- _$ i& `5 I& ~& Z , H. x! r. ^$ q3 }/ t, a1 R+ Y+ i - _8 m6 a3 V% l" ]3 f0 l3 l7 u ! L) H' q* o7 X& t! f对每一函数要完成如下工作:' z4 x, e3 R0 V7 N! x
9 l& S9 y1 w F! V. U* |- { J! E
① 获取两组数据,一组作为训练集,一组作为测试集;* q( W% g9 w- Z$ y( M
' M7 U+ K/ f' D3 M
② 利用训练集训练一个单隐层的网络;用测试集检验训练结果,改变隐层单元数, 研究它对逼近效果的影响。 1 g# n& {& X5 V. |* K- l5 |# w T
- b& ^: g D: e3 y/ Z- K+ _# N% E5 D2. 给定待拟合的曲线形式为 7 o7 C4 b! C# v* r T& q, Q- _8 |6 Q9 O4 d" F- m
4 ?3 s' }7 H" N在 上等间隔取 11 个点的数据,在此数据的输出值上加均值为 0,均方差 σ = 0.05 的正态分布噪声作为给定训练数据,用多项式拟合此函数,分别取多项式的阶次为 1, 3 和 11 阶,图示出拟合结果,并讨论多项式阶次对拟合结果的影响。( g. |$ D. B r: K