激活函数
本文最后更新于 903 天前,其中的信息可能已经有所发展或是发生改变。

1. 激活函数

下面资料来自于 英文wiki Activation function,我只是 Google 翻译了。

激活函数应有的特性:

  • 非线性 – 当激活函数是非线性的时,则可以证明双层神经网络是通用函数逼近器。恒等激活函数不满足这个属性,当多个层使用恒等激活函数连接时,整个网络就近似于一个单层的模型。
  • 值域 – 当激活函数值域是有限的时,基于梯度的训练方法往往更稳定,因为仅影响有限的权重。当范围无限时,训练通常更有效,因为影响大多数权重。在后一种情况下,通常需要较小的学习率。
  • 处处可导性 – 使用基于梯度的优化算法时必须满足处处可导(ReLU不满足条件,但仍然可以用)。
  • 单调性 – 保证单层模型相关联的误差函数是凸函数。
  • 具有单调导数的平滑函数
  • 近似于原点附近的身份 – 激活函数 $f(0)=0$ ,$f'(0)=1$, $f’$在0处连续。

activation_func-1

figure 1

$H$ 是阶跃函数,
$\alpha$ 是在训练时从均匀分布中采样的随机变量,并且在测试时固定为期望值。
$\sigma$ 是逻辑函数(logistic function)
$\alpha$ > 0

特殊的激活函数:

activation_func-2

figure 2

$$\delta_{ij}={
\begin
{cases}0 & {\text{if }}i \neq j,
\1 & {\text{if }}i=j.
\end{cases}}$$

上面表中 Order of continuity : $C^k$ 表示该函数的 1 到 k 阶导数均存在且连续

2. 常用激活函数的优缺点

2.1 Sigmoid

优点:能够把输入的连续实值“压缩”到 0 和 1 之间。可用于输出层。

缺点:1. 饱和区(也就是两端)会 kill 梯度(也就是梯度非常小,使得网络难以学习)。
2. 输出不是 0 均值
3. 运算复杂

2.2 tanh

优点:输出 0 均值,实际表现好于 Sigmoid.

缺点:同 Sigmoid 的 1, 3 缺点

2.3 ReLU

优点:SGD算法的收敛速度快,运算简单

缺点:训练的时候很”脆弱”,很容易就”die”。

例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.

解决方案是使用较小的学习率。

2.4 Softmax

用于多分类问题的输出层。

3. tensorflow绘制常用激活函数

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import os
%matplotlib inline

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# fake data
x = np.linspace(-10, 10, 200)

# following are popular activation func
y_relu = tf.nn.relu(x)
y_sigmoid = tf.nn.sigmoid(x)
y_tanh = tf.nn.tanh(x)
y_softplus = tf.nn.softplus(x)
y_softmax = tf.nn.softmax(x)
'''softmax is a special kind of
   activation function, it is about probability'''
sess = tf.Session()
y_relu, y_sigmoid, y_tanh, y_softplus, y_softmax = sess.run([y_relu,
                                                             y_sigmoid,
                                                             y_tanh,
                                                             y_softplus,
                                                             y_softmax])

# plt to visualize these activation func
plt.figure(1, figsize=(8, 6))

plt.subplot(221)
plt.plot(x, y_relu, c='r', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')

plt.subplot(222)
plt.plot(x, y_sigmoid, c='g', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x, y_tanh, c='b', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x, y_softplus, c='y', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')

# plt.show()
plt.figure(2)
plt.plot(x, y_softmax, label='softplus')
plt.legend(loc='best')
<matplotlib.legend.Legend at 0x251fdfeda20>

png

png

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇