softmax函数
softmax函数,一般用于多分类的问题上,将多个神经元的输入,映射在(0,1)之间。可以当作概率的计算。这一点跟sigmoid函数相似。
softmax的计算公式为:
S
i
=
e
i
∑
j
=
1
n
e
j
S_i = \frac{e^i}{\sum_{j=1}^n e^j}
Si=∑j=1nejei
【值得关注的是:
∑
i
=
1
n
S
i
=
1
\sum_{i=1}^n S_i = 1
∑i=1nSi=1】
相当于每个神经元的exp值 除上 所有神经元的exp值总和。
举个简单的例子。
输入三个神经元的值,分别是 1,2,3,then
e
1
=
2.7
,
e
2
=
7.3
,
e
3
=
20
e^1 = 2.7, e^2 = 7.3, e^3 = 20
e1=2.7,e2=7.3,e3=20
S
1
=
2.7
2.7
+
7.3
+
20
=
0.09
,
S
2
=
7.3
2.7
+
7.3
+
20
=
0.24
,
S
3
=
20
2.7
+
7.3
+
20
=
0.67
S_1 = \frac{2.7}{2.7+7.3+20}= 0.09, S_2 = \frac{7.3}{2.7+7.3+20}= 0.24,S_3 = \frac{20}{2.7+7.3+20}= 0.67
S1=2.7+7.3+202.7=0.09,S2=2.7+7.3+207.3=0.24,S3=2.7+7.3+2020=0.67
S 1 + S 2 + S 3 = 1 S_1 +S_2 + S_3 = 1 S1+S2+S3=1, 所以softmax求出来的值可以当作 概率,记为logit
实际上问题,输入的神经元为每个class的值,然后通过softmax函数的过滤,变成每个class的概率值,因此可应用在分类问题上,即选取概率最大的那个类别便是 predict值
值得关注的另一个问题是:sofrmax经常遇到数值溢出的问题,因为有大量的指数运算,因此当输入值太大,便会出现溢出error。因此一般会对输入值进行处理,比如减去数值中的最大值。
例子如下:
score = np.array([122,232,333])
#减去array中的最大值
score -= np.max(score)
#然后再算每个softMax值
S = np.exp(score)/np.sum(np.exp(score))
ReLU函数 【Rectified Linear Unit修正线性单元】
ReLU函数的公式如下:
f
(
x
)
=
{
0
,
if
x
=< 0
x
,
if
x
>0
f(x) = \begin{cases} 0, & \text{if $x$ =< 0} \\ x, & \text{if $x$ >0} \end{cases}
f(x)={0,x,if x =< 0if x >0
ReLU函数是分段函数,用来把所有的负值变成0,而正值不变。称为单侧抑制。 由于ReLU函数的存在,使得神经网络中的神经元具有了稀疏激活性,运行效率大大地增强。而且ReLU使得模型能够更好地挖掘相关特征,拟合训练数据。