深度学习中的激活函数和损失函数

版权声明:如涉及其他作者内容,会标注;不小心侵权 欢迎告知。 https://blog.csdn.net/u011334375/article/details/88617173

1、激活函数演变史
1)阶梯激活函数非0即1的阈值涉及使得输入的微小变化会引起输出的大幅度跳变,进而引进了较平缓的sigmoid、tanh。
2)sigmoid函数输出在0~1,比较符合概率分布的特点;中央区对信号增益大,两侧对信号增益小,分别对应神经元的兴奋态和抑制态。但是sigmoid 存在梯度消失的情况,网络深的时候就训练慢,甚至不可训练,需要通过无监督的逐层训练初始化权重来解决。
3)Relu(修正线性单元),相比于sigmoid,单侧抑制、相对宽阔的兴奋边界,解决了梯度消失的问题
2、交叉熵损失函数与softmax
softmax是模型的最后一层,交叉熵损失函数是衡量softmax输出(神经网络输出)与groundtruth之间差异的
3、keras 自定义损失函数
1)深度学习中的全局最优和局部最优
局部最优如果能达到比较好的效果,就可以应用于实践;而全局最优往往是过拟合
2)深度学习的优化算法对比
SGD参数较多,调试比较麻烦;而Adagrad、Adam等自适应的优化算法往往能减轻调试参数的负担。
3)自定义损失函数
softmax拟合one-hot编码效果较好;但实际中,我们往往需要定义自己的损失函数。如我们要拟合的编码可能是类似于[0 1 1 0 1 1 ]这样的普通编码方式;再有分类中常用的Triplet Loss函数。具体keras实现如下:
from keras import backend as K
def mycrossentropy(y_true, y_pred,…):
return …
model.compile(loss=my_loss,optimizer=‘SGD’,metrics=[‘accuracy’])

猜你喜欢

转载自blog.csdn.net/u011334375/article/details/88617173