参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
为什么需要激活函数呢?
用下边这个神经网络分析一下:

对于上图:
我们知道其中
X4×1H5×1O7×1
其中各层之间的计算:
H=W1x+b1O=W2H+b2其矩阵是[H]5×1=[w1]5×4[x]4×1+[b1]5×1其矩阵是[O]3×1=[w2]3×5[H]5×1+[b2]3×1
将上边两个计算公式合并:
O=w2H+b2=w2(w1X+b1)+b2=w2w1X+w2b1+b2
再看看其矩阵运算:
[w2]3×5⋅[w1]5×4=[w]3×4
[w2]2×5⋅[b1]5×1=[b1′]3×1
[b1′]3×1+[b2]3×1=[b]3×1
再把算出来的矩阵带回合并计算的公式里边,就又变成了O=wX+b。这样的话这个多层神经网络就完全没有存在的意义了,既然能合并,那直接写成一层不香吗?香!但是多层模型又有一些单层做不到的事情,那如何保留多层模型使之不能被简单地合并呢?那就用到了激活函数。
ReLU函数(Rectified linear unit)
公式:ReLU(x)=max(x,0)
σ(x)={x0 if x>0 otherwise
ReLU函数通过将相应的激活值设为0来仅保留正元素并丢弃所有负元素。
经过ReLU处理的函数长这样:

Sigmoid函数
然后是我学习接触到的第一个激活函数,当时听的吴恩达的课,他有详细的讲到使用sigmoid的好处,我还记了笔记,可以看这里:逻辑回归 | Logistic Regression - 掘金 (juejin.cn)
公式:sigmoid(x)=1+exp(−x)1
σ(x)={10 if x>0 otherwise
对于一个定义域在R中的输入,sigmoid函数将输入变换为区间(0, 1)上的输出。因此,sigmoid通常称为挤压函数(squashing function):它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值。

tanh函数
公式:tanh(x)=1+exp(−2x)1−exp(−2x)
与sigmoid函数类似,tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。
