损失函数Loss - zs-collab/- GitHub Wiki

Classification(分类)和Regression(回归)

把Classification当成Regression
把目标y hat Class编号,变成数值(class 1/class 2/...)
观察Model输出的数值y,与目标Class的编号的关系
问题:
Class的编号表示会预设其之间的关系
e.g. Class 1和Class 2 关系较近,Class 1和Class 3关系较远
屏幕截图 2025-06-05 142428

Class as one-hot vector

比较常见的作法是把Class 用one-hot vector表示
→N个Class用N个 N * 1 维阵列表示(合并就是N维的单位矩阵)
假设有 3 种动物类别:["狗", "猫", "鸟"],它们的 one-hot 编码如下:
狗 → [1, 0, 0]
猫 → [0, 1, 0]
鸟 → [0, 0, 1]

把output改成3个数值
目标y hat Class是有3个数值的向量,output应该也要有3个数值
怎么把network从1个输出改成输出3个数值?
→把output方法重复3次:
a1 a2 a3 乘上不同的weight,加上不同的bias来输出不同的y1 y2 y3
屏幕截图 2025-06-05 143112

Claassification作法小结

Regression是input x ,output y,y和y hat越接近越好
Claassification也是input x,output y,但y是一个向量,y和y hat越接近越好
但做Claassification时,会把y再通过Function "Softmax" 得出y'当作最终输出

为什么要加上Softmax?
y hat里面的值只有0跟1,但y的值是任意数值
→透过Softmax使y的值变成0和1之间

e.g. 今天要做一个动物分类,分类结果有鸟类、哺乳类、魚类,
將分类结果编号并做one-hot vector→有3个结果,做成3个 3 * 1 维阵列
鸟类 [1 0 0]
哺乳类 [0 1 0] (合并就是3维的单位矩阵)
魚类 [0 0 1] 假设output y1 y2 y3 = [20 0 -3]
通过Softmax→y1' y2' y3' = [0.88 0.12 0]
可发现与鸟类最接近
屏幕截图 2025-06-05 143710

Softmax的运作

Softmax会让大的值和小的值差距更大
屏幕截图 2025-06-05 145119

Loss of Classification

Claassification也是input x,output y,把y丟到Softmax得y',计算y'和y hat的距离(e)
计算距离e有不同的做法:Mean Square Error和Cross-entropy
从Optimization的角度来解释Cross-entropy比Mean Square Error更加适合Classification
pytorch里面Cross-entropy内键Softmax
屏幕截图 2025-06-05 150741

举例证明:

现在要做一个3个Class的分类,input x,output y1 y2 y3,把y丟到Softmax得y'
正解是[1 0 0],要计算y'和y hat的距离e
将y3设为不影响结果的数值,只观察y1 y2变动的结果
e设为Mean Square Error和Cross-entropy的不同
当y1大y2小→接近正解[1 0 0],Loss小
当y1小y2大→Loss大
可发现当Loss很大的时候
Cross-entropy有斜率 Mean Square Error比较平坦→可能会卡住,虽然可以用Learning rate解決,但Traning起步仍是较困难的
Loss function的定义也会影响Training的难易度
屏幕截图 2025-06-05 151226