> For the complete documentation index, see [llms.txt](https://json007.gitbook.io/deeplearning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://json007.gitbook.io/deeplearning/chapter1/ji_li_han_shu.md).

# 激励函数

[Activation function](https://en.wikipedia.org/wiki/Activation_function)

![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2Fe480fd9819e7f144fbc40f65f25ec9155ef13d1c.png?generation=1589383538365064\&alt=media)

> 插入一个细节，神经网络中，激活函数的输入一般都是一个向量。所以求导时是一种按位运算。这种运算叫做Hadamard积。\
> $$a=f(z) \quad \frac {\partial J}{\partial z} = \frac {\partial J}{\partial a} \odot f^\prime(z)$$

## maxout

据说这个目前效果比较好。\
[深度学习（二十三）Maxout网络学习-ICML 2013](http://blog.csdn.net/hjimce/article/details/50414467)

## sigmoid系

传统神经网络中最常用的两个激活函数：Logistic-Sigmoid、Tanh-Sigmoid。\
![sigmoid](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2F735911c4334171546191a7fd6ddc7a71268307fc.png?generation=1589383539725566\&alt=media)

### sigmoid函数

$$
f(z) = \frac {1}{1 + exp(-z)}
$$

### 双曲正切函数（tanh）

$$
f(z) = tanh(z) = \frac {e^z - e^{-z}}{e^z + e^{-z}}
$$

## 近似生物神经激活函数：Softplus\&ReLu ）

![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2F54eeee00226791a78e30a285290a7d9b553fd781.png?generation=1589383540458060\&alt=media)\
![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2Fa15fafe604fbbc49651860560f204153820f7272.png?generation=1589383541090214\&alt=media)\
这个模型对比Sigmoid系主要变化有三点：

* 单侧抑制&#x20;
* 相对宽阔的兴奋边界
* 稀疏激活性（重点，可以看到红框里前端状态完全没有激活）

### Softplus

$$
f(z) = \log(1+\exp(z))
$$

### ReLU（Rectified Linear Units）

线性。

$$
y = max(W^T x,0)
$$

### Leaky ReLU

$$
f(n) =
\begin{cases}
\alpha x,  & \mbox{if }x \lt 0,\alpha\mbox{  is a small constant} \\
x, & \mbox{if }x \gt 0
\end{cases}
$$

![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2Ff8d455d18d652c653f54aa5bc310d308864fc332.jpg?generation=1589383540773726\&alt=media)

### Randomized ReLU

### SELU

[自归一化神经网络」提出新型激活函数SELU](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650727793\&idx=1\&sn=3a86e5b9ce5bfc1d37c51dc0f09a84bc)

最早的想法是sigmoid函数或者tanh函数，输出有界，很容易充当下一层输入等。后采用ReLU较多\
原因：

* 采用sigmoid等函数，反向传播求误差梯度时，求导计算量很大，而Relu求导非常容易。
* 对于深层网络，sigmoid函数反向传播时，很容易就会出现梯度消失的情况（在sigmoid接近饱和区时，变换太缓慢，导数趋于0），从而无法完成深层网络的训练。经过每一层时，Error都是成倍的衰减，一旦进行递推式的多层的反向传播，梯度就会不停的衰减，消失，使得网络学习变慢。
* Relu会使一部分神经元的输出为0，这样就造成了网络的稀疏性，并且减少了参数的相互依存关系，缓解了过拟合问题的发生(这个符合生物学的解释)。

## 关于稀疏性的观点

Machine Learning中的颠覆性研究是稀疏特征，基于数据的稀疏特征研究上，派生了Deep Learning这一分支。\
总结起来稀疏性大概有以下贡献：

### 信息解离

当前，深度学习一个明确的目标是从数据变量中解离出关键因子。原始数据（以自然数据为主）中通常缠绕着高度密集的特征。\
原因是这些特征向量是相互关联的，一个小小的关键因子可能牵扰着一堆特征，有点像蝴蝶效应，牵一发而动全身。\
基于数学原理的传统机器学习手段在解离这些关联特征方面具有致命弱点。\
然而，如果能够解开特征间缠绕的复杂关系，转换为稀疏特征，那么特征就有了鲁棒性（去掉了无关的噪声）。

### 线性可分性

稀疏特征有更大可能线性可分，或者对非线性映射机制有更小的依赖。因为稀疏特征处于高维的特征空间上（被自动映射了）\
从流形学习观点来看（参见降噪自动编码器），稀疏特征被移到了一个较为纯净的低维流形面上。\
线性可分性亦可参照天然稀疏的文本型数据，即便没有隐层结构，仍然可以被分离的很好。

### 稠密分布但是稀疏

稠密缠绕分布着的特征是信息最富集的特征，从潜在性角度，往往比局部少数点携带的特征成倍的有效。\
而稀疏特征，正是从稠密缠绕区解离出来的，潜在价值巨大。

### 稀疏性激活函数的贡献的作用

不同的输入可能包含着大小不同关键特征，使用大小可变的数据结构去做容器，则更加灵活。\
假如神经元激活具有稀疏性，那么不同激活路径上：不同数量（选择性不激活）、不同功能（分布式激活），\
两种可优化的结构生成的激活路径，可以更好地从有效的数据的维度上，学习到相对稀疏的特征，起到自动化解离效果。

## Batch Normalization

就是将激活函数的输入，修正成均值为0，方差为1的正太分布，这样的输入，激活函数变化剧烈，反向传播的导数也不会太小。

$$\hat{x} = \frac {x-\text{E}\[x]}{\sqrt{\text{Var}\[x]}}$$

但是为了特殊性，再进行$$y = \gamma \hat x + \beta$$ ，然后作为激活函数的输入

### 参考佳文

[神经网络-激活函数-面面观(Activation Function)](http://blog.csdn.net/cyh_24/article/details/50593400)\
[maxout简单理解](http://www.cnblogs.com/tornadomeet/p/3428843.html)\
[Network In Network(精读)](http://blog.csdn.net/sheng_ai/article/details/41313883)

[UFLDL教程](http://deeplearning.stanford.edu/wiki/index.php/UFLDL教程)\
[ReLu(Rectified Linear Units)激活函数](http://blog.sina.com.cn/s/blog_78fd98af0102w5gr.html)\
[DL中的坑](http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html)

[神经网络weight参数怎么初始化](http://blog.csdn.net/xbinworld/article/details/50603552)

[Batch Normalization导读](http://blog.csdn.net/malefactor/article/details/51476961)

\[[https://zhuanlan.zhihu.com/p/24810318\](https://zhuanlan.zhihu.com/p/24810318](https://zhuanlan.zhihu.com/p/24810318]%28https://zhuanlan.zhihu.com/p/24810318) "什么是批标准化 (Batch Normalization)") 什么是批标准化 (Batch Normalization)

![](https://352802547-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7DcNFZmOW8qzXTiAei%2Fsync%2Fc81bf158b590606d4d2240d479db5ea883d007e8.jpg?generation=1589383548642297\&alt=media)
