损失函数
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mae', 'acc'])
定义:在深度学习中,损失函数是用来衡量一组参数的质量的函数,衡量的方式是比较网络输出和真实输出的差异
损失函数并不适用测试数据来衡量网络的性能。
损失函数用来指导训练过程,使得网络的参数向损失降低的方向改变。
训练过程通常使用。
随机梯度下降法Stochastic gradient desceny
- 试图找到一组参数使得损失函数的值越小越好
- 调整参数的大小和方向取决于损失函数相对于参数的编导数
特性
-
最小值:当网络的输出和真实输出一致
-
当输出和真实输出越不一致时值越大
-
理想状态下
-
实际上都是 not convex非凸函数
-需要根据输出的变化而平滑的变化
-需要可导(SGD优化器的优化)
-需要容易求导
常用损失函数
1.回归Regression:网络输出一个连续的数值
例如:预测一个房屋的价值
损失函数:绝对值误差,平方差
2.分类Classification:网络的输出为一个类别,从预定义的一组类别中一个
实例:判断邮件是否是垃圾邮件
损失函数:hinge loss, Cross-entropy loss
绝对误差函数Absolute value,L1-norm
非常质感的损失函数
- 得到的解会比较稀疏sparser
-在高纬任务中表现较好
-预测速度快 - 对outliers(特殊情况下的数据)不敏感
方差函数Square error,Euclidean loss,L2-norm
常用的损失函数
- 比绝对误差函数得到的结果更精准
- 对大的误差输出更敏感
- 对outliers(极端条件下的数据)很敏感
分类
我们期望得到的最终结果是每一个输入对应一个输出类别
- 网络的输出包含了对每一个类别的预测值
- 如果有K个类别,网络的输出值为K个值
那么如何设计损失函数
- 将真实的唯一输出编码为一个向量——>独热编码One-hot encoding
- 非概率的解释——>hinge loss
- 概率解释:将输出转换为概率函数——>Softmax
Softmax
将输出转换为概率
- 概率范围0.0到1.0
- 属于所有类别的概率之和为1.0
独热编码One-hot encoding
将一个类别标签转换为一个向量(每一个元素的值为1或者0)
- 向量的元素个数为总的类别的数量K
- 1对于正确的类别
Cross-entropy loss 交叉熵损失函数
why在分类的时候用Cross-entropy loss而不用Square error loss
一般而言Cross-entropy loss比方差函数Square error loss在分类的情形下要好:
- 方差函数对误差的输出惩罚非常大
- 如果使用Softmax激活函数,加上方差函数作为损失函数,梯度包含y(1-y),当输出接近0.0或者1.1的时候,梯度值非常小,网络的训练会比较慢
Multi-label分类,not Multi-class分类
- 输出属于多个类别中的一个或者多个类
-例如一幅包含猫咪的图像可以同时属于“猫“,“哺乳动物”,”宠物“ - 对每一个输出独立使用Sigmoid激活函数,不使用softmax
正则化Regularization
避免网络过拟合prevent overfitting,一般和loss function一起使用
w是不同网络节点之间连接的权值,入 (栏目他)是自己定义的超参数
实例
由上面两个网络训练出来的结果来看明显第二个网络更好,但如果用分类的准确率Classification accuracy来做判断,显然是不可以的
如何证明Logisitic Regression的损失函数具有全局最优解?
等下期吧,哈哈哈。