Content:
- 为什么需要激活函数;
- 一个神经元在做什么;
- 激活函数
- Sigmoid
- Softmax
4. 交叉熵损失函数
- Binary cross-entropy
- Categorican cross-entropy
为什么需要激活函数:
Ans: 为了引入非线性变换。
如下图所示的红线和蓝线,在这个二维空间中,我们不能用一条线完整的将这两个区域分割开。但如果我们将这个二维空间扭曲变换,那么在高维空间中,就可以用一条线完整的分割出红色和蓝色区域。(这也就是打破线性变换的局限性,通过非线性变换在高维空间解决分类问题,也是神经网络要做的事情)
Fig 1. A neural network can distort the input space to make the classes of data (blue and red regions) linearly separable [1].
Fig.2. The hidden layer learns a representation so that the data is linearly separable [1]
一个基本的神经元在做什么:
y:神经元的输出;
W*x: 就像我之前说的,神经网络目的就是将低维空间映射到高维空间从而实现线性可分。所以这一项的目的就是空间变换(实现升维或者降维, 空间的放大或者缩小, 旋转)的目的;
b: bias, 实现空间平移的目的;
a: 空间的弯曲;
基本神经元各个部分的解释
激活函数:
sigmoid, softmax主要用于神经网络输出层的输出。
总结:激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
1. Sigmoid
Sigmoid 将一个实数映射到 (0,1)
的区间,可以用来做二分类。Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好。Sigmoid不适合用在神经网络的中间层,因为对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况(在 sigmoid 接近饱和区时,变换太缓慢,导数趋于 0,这种情况会造成信息丢失),从而无法完成深层网络的训练。所以Sigmoid主要用于对神经网络输出层的激活。
2. Softmax
可以看作是Sigmoid的一般情况,用于多分类问题。
Softmax函数将K维的实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于 (0,1)
之间。常用于多分类问题。
交叉熵损失函数:
交叉熵可在神经网络(机器学习)中作为损失函数。 如下公式所示:y表示真实标记的分布,a则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量y与a的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
- Binary Cross Entropy
常用于二分类问题,当然也可以用于多分类问题,通常需要在网络的最后一层添加sigmoid进行配合使用,其期望输出值(target)需要进行one hot编码,另外BCELoss还可以用于多分类问题Multi-label classification.
定义:
For brevity, let x = output, z = target. The binary cross entropy loss is
loss(x, z) = - sum_i (x[i] * log(z[i]) + (1 - x[i]) * log(1 - z[i]))
对应的代码为:
def binary_crossentropy(t,o):return -(t*tf.log(o+eps) + (1.0-t)*tf.log(1.0-o+eps))
2. Categorical cross-entropy
p are the predictions, t are the targets, i denotes the data point and j denotes the class.
适用于多分类问题,并使用softmax作为输出层的激活函数的情况。
This is the loss function of choice for multi-class classification problems and softmax output units. For hard targets, i.e., targets that assign all of the probability to a single class per data point, providing a vector of int for the targets is usually slightly more efficient than providing a matrix with a single 1.0 per row.
References:
[1] Neural Networks, Manifolds, and Topology
链接:https://www.zhihu.com/question/36307214/answer/364963552
贴几个不错的链接:
用sigmoid作为激活函数,为什么往往损失函数选用binary_crossentropy 而不用mse
各大损失函数的定义:MSE,MAE,MAPE,hinge,squad_hinge,binary_crossentropy等
【机器学习】 - 关于合适用均方误差(MSE)何时用交叉熵(cross-entropy)
https://www.cnblogs.com/lijie-blog/p/10166002.html
sigmoid和softmax是神经网络输出层使用的激活函数,分别用于两类判别和多类判别。
binary cross-entropy和categorical cross-entropy是相对应的损失函数。
对应的激活函数和损失函数相匹配,可以使得error propagation的时候,每个输出神经元的“误差”(损失函数对输入的导数)恰等于其输出与ground truth之差。
(详见Pattern Recognition and Machine Learning一书5.3章)
链接:https://www.zhihu.com/question/36307214/answer/66899792