43.3_激活函数和神经网络
43.3 激活函数和神经网络
线性变换指对输入数据进行线性的变换。而神经网络则对线性变换的输出进行非线性的变换。这种非线性变换叫作激活函数,典型的激活函数有ReLU和sigmoid函数。
这里使用sigmoid函数作为激活函数。sigmoid函数的式子如式子43.1所示,其图形如图43-3所示。

图43-3 sigmoid函数的图形
如图43-3所示,sigmoid函数是非线性函数。这种非线性变换应用于张量的每个元素。下面使用DeZero实现sigmoid函数。代码如下所示。
dezero/functions.py
def sigmoid.simple(x):
x = as_variable(x)
y = 1 / (1 + exp(-x))
return y上面的代码直接按照式子进行编码。只要注意使用DeZero的exp函数作为指数函数,其他地方操作起来就没有什么难度了。下面使用这个sigmoidsimple函数来实现神经网络。

前面的sigmoid函数的代码在内存效率方面存在问题。更好的实现方式是实现继承于Function类的Sigmoid类。另外,在使用sigmoid函数的情况下,以类为计算单位可以提高梯度计算的效率。Sigmoid类和sigmoid函数的实现在dezero/functions.py中,感兴趣的读者可以查看。另外,关于sigmoid函数的导数推导过程,请参阅《深度学习入门:基于Python的理论与实现》的5.5.2节。