机器学习- softmax激活函数

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使得模型能够更好地挖掘相关特征,拟合训练数据。

猜你喜欢

转载自blog.csdn.net/Jiana_Feng/article/details/109441423