损失函数
在学习梯度下降算法之前,首先要搞明白损失函数,因为梯度下降中求的就是损失函数的梯度。
损失函数表示预测值与真实值之间的不一致程度,神经网络的训练过程就是在不断调整参数使损失函数最小。
有三种设计损失函数的方法:
1. 最小二乘法
min ∑ i = 1 n ( y i − y ^ ) 2 \min\sum_{i=1}^{n}(y_i-\hat{y})^2 mini=1∑n(yi−y^)2
顾名思义,“二乘”是平方,“最小”是取最小值。
最小二乘法作为损失函数进行梯度下降法的时候,会很麻烦,所以不建议选用。
2. 极大似然估计法
极大似然估计本质上就是计算神经网络里面概论模型的似然值,似然值最大的模型就是最接近真实世界的模型,即最大化观测数据发生的概率。
那么何为似然值:真实的情况已经发生,我们假设它有很多模型,在某个概率模型下,发生某种情况的可能性,叫似然值。下面举个例子:
理论上抛10次硬币,正面和反面朝上各占50%,但是我们实验中4次正面朝上,6次反面朝上。我们假设硬币本来的概率模型符合 P ( 正 ) = 0.4 , P ( 反 ) = 0.6 P(正)=0.4, P(反)=0.6 P(正)=0.4,P(反)=0.6 ,记为 θ \theta θ,那么在满足此模型的条件下,1次正面朝上,9次反面朝上的概率为 :
P ( C 1 , C 2 , … , C 10 ∣ θ ) = ∏ i = 1 10 P ( C i ∣ θ ) = 0.4 ∗ 0. 6 9 P(C_1,C_2, \dots ,C_{10}|\theta)=\prod_{i=1}^{10}P(C_i|\theta)=0.4*0.6^{9} P(C1,C2,…,C10∣θ)=i=1∏10P(Ci∣θ)=0.4∗0.69
这样计算得到的值就是似然值。
虽然我们永远无法准确的确定本来的概率模型是什么样子的,但是选似然值最大的,可能性最高,这就是最大似然估计法。
极大似然估计的用处就在于当我们知道了事件的结果(对应于训练中的样本),去反推最有可能(似然值最大)造成这个结果的概率模型。
P ( y 1 , y 2 , … , y n ∣ θ ) = ∏ i = 1 n P ( y i ∣ θ ) = ∏ i = 1 n P ( y i ∣ W , b ) P(y_1,y_2, \dots ,y_{n}|\theta)=\prod_{i=1}^{n}P(y_i|\theta)=\prod_{i=1}^{n}P(y_i|\bf{W,b}) P(y1,y2,…,yn∣θ)=i=1∏nP(yi∣θ)=i=1∏nP(yi∣W,b)
上式中 y i y_i yi 是标签值,预测值 y i ^ \hat{y_i} yi^ 依赖于 W , b \bf{W,b} W,b 。故上式还可写成:
∏ i = 1 n P ( y i ∣ y i ^ ) \prod_{i=1}^{n}P(y_i|\hat{y_i}) i=1∏nP(yi∣yi^)
若 y i ∈ { 0 , 1 } y_i \in \{0,1\} yi∈{0,1},即是二分类问题,将累乘改为累加,上式可写为:
∏ i = 1 n y i ^ y i ( 1 − y i ^ ) ( 1 − y i ) ⇓ log ( ∏ i = 1 n y i ^ y i ( 1 − y i ^ ) ( 1 − y i ) ) ⇓ ∑ i = 1 n [ y i ∗ log y i ^ + ( 1 − y i ) ∗ log ( 1 − y i ^ ) ] \begin{aligned} & \prod_{i=1}^{n}\hat{y_i}^{y_i}(1-\hat{y_i})^{(1-y_i)} \\ & \Downarrow \\ &\log(\prod_{i=1}^{n}\hat{y_i}^{y_i}(1-\hat{y_i})^{(1-y_i)} ) \\ & \Downarrow \\ & \sum_{i=1}^{n}[y_i*\log\hat{y_i}+ (1-y_i)*\log(1-\hat{y_i})] \end{aligned} i=1∏nyi^yi(1−yi^)(1−yi)⇓log(i=1∏nyi^yi(1−yi^)(1−yi))⇓i=1∑n[yi∗logyi^+(1−yi)∗log(1−yi^)]
3. 交叉熵
若两个模型都是高斯分布,那么比较均值和方差即可。但是若一个模型是高斯分布,一个模型是泊松分布,就无法直接比较了,这时把模型换成熵这样一个数值,用这个数值去比较不同模型之间的差异。也就是说熵可以作为不同模型之间的一个共同衡量标准。
3.1 信息量
信息量的理解:一个事件从原来的不确定变得确定,他的难度有多大。信息量大,难度高。下面就来看一下信息量是如何定义的:
f ( x ) : = 信 息 量 f ( 阿 根 廷 夺 冠 ) = f ( 阿 根 廷 进 决 赛 ) + f ( 阿 根 廷 赢 了 决 赛 ) f ( 1 8 ) = f ( 1 4 ) + f ( 1 2 ) \begin{aligned} & f(x):=信息量 \\ \\ & f(阿根廷夺冠)=f(阿根廷进决赛)+f(阿根廷赢了决赛) \\ \\ & f(\frac{1}{8})=f(\frac{1}{4})+f(\frac{1}{2}) \end{aligned} f(x):=信息量f(阿根廷夺冠)=f(阿根廷进决赛)+f(阿根廷赢了决赛)f(81)=f(41)+f(21)
从上面可以看出,信息量的定义式需要满足 f ( x 1 ⋅ x 2 ) = f ( x 1 ) + f ( x 2 ) f(x_1·x_2)=f(x_1)+f(x_2) f(x1⋅x2)=f(x1)+f(x2),所以取 log \log log 。一个事件确实发生了,即该事件从不确定变成了确定,那么原本发生这个事件的概率越小,则信息量就应该越大,所以要加负号。
f ( x ) : = − log x f(x):=-\log x f(x):=−logx
对数的底数有何意义呢?
若底数是2,其实就是用抛硬币来衡量信息量。比如 3 = log 1 8 3=\log \frac{1}{8} 3=log81 ,可以认为是抛三枚硬币都正面朝上的概率。可以想象一个衡量信息量大小的尺子,上面标有刻度 1,2,3 … ,每一个刻度都对应一种抛硬币的概率。
若底数为6,则抛硬币就变成了掷骰子
3.2 熵
熵也类似,反映一个系统的混乱程度,是衡量整个系统里的所有事件,而不是衡量某一个具体的事件。反映一个系统从原来的不确定到确定难度有多大。
从上图可以看出:左边系统的熵为0.5+0.5,右边系统的熵为0.014355+0.066439。
熵就是一个系统中所有事件的信息量的期望,如下:
∑ i = 1 n p i ⋅ f ( p i ) = − ∑ i = 1 n p i ⋅ log ( p i ) \sum_{i=1}^{n}p_i·f(p_i)=-\sum_{i=1}^{n}p_i·\log (p_i) i=1∑npi⋅f(pi)=−i=1∑npi⋅log(pi)
3.3 相对熵(K-L散度)
K-L散度是一种量化两种概率分布 P P P 和 Q Q Q 之间差异的方式,能帮助我们度量使用一个分布来近似另一个分布时所损失的信息量。
百科中的解释为:
设 P ( x ) , Q ( x ) P(x),Q(x) P(x),Q(x) 是随机变量 X X X上的两个概率分布,则在离散随机变量的情形下,相对熵的定义为: K L ( P ∣ ∣ Q ) = ∑ P ( x ) log P ( x ) Q ( x ) KL(P||Q)=\sum P(x) \log \frac{P(x)}{Q(x)} KL(P∣∣Q)=∑P(x)logQ(x)P(x)
在信息理论中,相对熵是用来度量使用基于 Q Q Q 的分布来编码服从 P P P 的样本平均所需的额外的比特个数。一般 P P P 表示数据的真实分布, Q Q Q 表示估计的模型分布、数据的理论分布、或 P P P 的近似分布。
以
P
P
P 分布为基准,
Q
Q
Q 分布近似
P
P
P 分布时,K-L散度可以如下表示:
由吉布斯不等式可知, D K L ( P ∥ Q ) ⩾ 0 {\displaystyle D_{KL}(P\|Q)} \geqslant 0 DKL(P∥Q)⩾0,当且仅当 P = Q {\displaystyle P=Q} P=Q 时 D K L ( P ∥ Q ) {\displaystyle D_{KL}(P\|Q)} DKL(P∥Q) 为零。求K-L散度最小即是求交叉熵最小,也就是说交叉熵单独可以在作为一个损失函数,
3.4 交叉熵
交叉熵的形式在上述相对熵中已给出。
把交叉熵用作损失函数时,
P
P
P 一般对应人脑对数据的判断,即人打的标签
x
i
∈
{
0
,
1
}
x_i \in \{0,1\}
xi∈{0,1} ,0表示不是猫,1表示是猫;
Q
Q
Q 一般对应模型对数据的判断,即模型的输出
y
i
y_i
yi 。
y
i
y_i
yi 反映了输入的图片是猫的概率,当标签是 1 时,
q
i
q_i
qi 取
y
i
y_i
yi ;当标签是 0 时,
q
i
q_i
qi 取
1
−
y
i
1-y_i
1−yi ,反映输入的图片不是猫的概率。