深度学习模型之激活函数(Activation Function)

image.png

(介绍激活函数的文章非常多,但是暂时没看到结合“游乐场”进行试验的,也就写这篇文章的出发点。)

一、激活函数是什么?

激活函数,英文Activation Function,个人理解,激活函数是实现神经元的输入和输出之间非线性化。

二、为什么需要非线性化?

以下通过“游乐场”里的例子看看线性函数的局限性。

对于明显的“一刀切”问题,线性函数还可以解决。


image.png

但是,对于要画曲线的问题就“无能为力”,但是现实世界中能简单“一刀切”的问题毕竟少,更广泛的是下图的非线性问题。


image.png

三、有哪些激活函数(activation function)

重点参考以下网站:https://blog.csdn.net/u011684265/article/details/78039280

  • ReLU
  • Tanh
  • Sigmoid
image.png

1. ReLU

Rectified Linear Unit(ReLU) - 用于隐层神经元输出

公式

image

曲线

image

RELU特点:

输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入

ReLU 的优点:

Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

image.png

结果有点像个“菱形”,毕竟看看ReLU的定义,可以理解。

2. sigmoid

公式:
image

曲线:
image

导数:
image

sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
在特征相差比较复杂或是相差不是特别大时效果比较好。

sigmoid缺点:

  • 激活函数计算量大,反向传播求误差梯度时,求导涉及除法

  • 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练

  • Sigmoids函数饱和且kill掉梯度。

  • Sigmoids函数收敛缓慢。

下面解释为何会出现梯度消失:

反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:

image

sigmoid 原函数及导数图形如下:

image

由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象

image.png

可以较为“圆滑”地解决问题,但是训练次数相对多一些。

3.Tanh

公式

image
image

曲线

image

也称为双切正切函数,取值范围为[-1,1]。
tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好

image.png

能够比较“光滑”地解决问题。

四、更多激活函数

The following table compares the properties of several activation functions that are functions of one fold x from the previous layer or layers:

image.png

image.png

image.png

(真够多的,分三次截图才截完!)

The following table lists activation functions that are not functions of a single fold x from the previous layer or layers:

image.png

图片来源,来自wiki,强大的wiki。

五、code

# 函数add_layer,添加一个神经网络隐藏层
# layoutname,隐藏层的名字
# inputs,隐藏层的输入,也就是前一层
# in_size,输入的纬度,也就是前一层的neurons数目
# out_size,输出的纬度,也就是该隐藏层的neurons数目
# activatuib_funaction,激活函数

def add_layer(layoutname, inputs, in_size, out_size, activatuib_funaction=None):
    with tf.name_scope(layoutname):
        with tf.name_scope('weights'):
            Weights=tf.Variable(tf.random_normal([in_size,out_size], stddev=0.1),name='W')  #stddev=0.1,无意中试过,加这个,效率速度快很多。
            tf.summary.histogram('Weights',Weights)  #histogram_summary用于生成分布图,也可以用scalar_summary记录存数值
            
        with tf.name_scope('biases'):
#             biases=tf.Variable(tf.zeros([1,out_size])+0.1,name='b')
            biases = tf.Variable(tf.constant(0.1, shape=[out_size]), name='b')
            tf.summary.histogram('Biases',biases)
        
        with tf.name_scope('Wx_plus_b'):
            Wx_plus_b=tf.add(tf.matmul(inputs,Weights),biases)
#             Wx_plus_b=tf.matmul(inputs, Weights) + biases

    if activatuib_funaction is None:
        outputs=Wx_plus_b
    else :
        outputs=activatuib_funaction(Wx_plus_b)
    return outputs


num_HiddenNeurons1 = 60  # 中间隐藏层第一层,80个代表特征
num_HiddenNeurons2 = 40  # 隐藏层第二层
num_HiddenNeurons3 = 20  # 隐藏层第三层
    
with tf.name_scope('first_hindden_layer'):
    first_hindden_layer=add_layer("first_hindden_layer",X_input,features,num_HiddenNeurons1,activatuib_funaction=tf.tanh)

with tf.name_scope('second_hindden_layer'):
    second_hindden_layer=add_layer("second_hindden_layer",first_hindden_layer,num_HiddenNeurons1,num_HiddenNeurons2,activatuib_funaction=tf.tanh)

with tf.name_scope('third_hindden_layer'):
    third_hindden_layer=add_layer("third_hindden_layer",second_hindden_layer,num_HiddenNeurons2,num_HiddenNeurons3,activatuib_funaction=tf.tanh)    
    
with tf.name_scope('prediction'):
    y_prediction =add_layer('prediction',third_hindden_layer,num_HiddenNeurons3,numClasses,activatuib_funaction=None)
    

# y_prediction的输出并不是概率分布,没有经过softmax
# [[ 84.97052765  47.09545517]
#  [ 84.97052765  47.09545517]]

y_prediction_softmax = tf.nn.softmax(y_prediction)

with tf.name_scope('Save'):
    saver = tf.train.Saver(max_to_keep=4)  #保留最近四次的模型

如果用图片解释,大概是以下这个:


image.png

六、Tensorflow支持的Activation Function

http://www.tensorfly.cn/tfdoc/api_docs/python/nn.html

Activation Functions

The activation ops provide different types of nonlinearities for use in neural networks. These include smooth nonlinearities (sigmoid, tanh, and softplus), continuous but not everywhere differentiable functions (relu, relu6, and relu_x), and random regularization (dropout).

All activation ops apply componentwise, and produce a tensor of the same shape as the input tensor.

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容