激活功能

激活函数也称为传递函数,用于以某种方式将输入节点映射到输出节点。

它们用于赋予神经网络层的输出非线性。

下面给出了一些常用函数及其曲线: StackOverflow 文档

Sigmoid 功能

sigmoid 是一个压扁函数,其输出范围为 [0, 1]

StackOverflow 文档

实现 sigmoid 及其衍生物与 numpy 的代码如下所示:

def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))

def sigmoid_prime(z):
    return sigmoid(z) * (1 - sigmoid(z))

双曲正切函数(tanh)

tanh 和 sigmoid 函数之间的基本区别是 tanh 为 0 居中,将输入压缩到范围[-1,1]并且计算效率更高。

https://i.stack.imgur.com/MpzDY.jpg

你可以轻松使用 np.tanhmath.tanh 函数来计算隐藏层的激活。

ReLU 功能

一个整流的线性单元简单地说明了。它是神经网络单元激活函数最常见的选择之一。

StackOverflow 文档

ReLU 解决了 S 形/双曲正切单元的消失梯度问题 ,从而允许在深度网络中进行有效的梯度传播。

ReLU 这个名字来自 Nair 和 Hinton 的论文, 整流线性单元改进限制玻尔兹曼机器

它有一些变化,例如,泄漏的 ReLU(LReLU) 和指数线性单位(ELU)。

实现 vanilla ReLU 及其衍生产品 numpy 的代码如下所示:

def relU(z):
    return z * (z > 0)

def relU_prime(z):
    return z > 0