1 概述
本文适合有一定深度学习和概率基础的读者参考。在学习深度之前,必备的一项数学基础就是概率论,其中绕不开的一个就是贝叶斯定理和极大似然估计,基于贝叶斯定理的贝叶斯估计与极大似然估计在思想上就是没有交集的两种方法,但是在了解了深度学习之后,发现这二者能串联起深度学习中的一些概念,也有着一定的联系,借此文章进行讲述。
首先对两种思想进行介绍,需要知道的两个概念是先验概率 和后验概率 。
先验概率: 在看到任何新证据之前,你基于已有知识对某个事件发生的可能性的初始概率。
后验概率: 在看到新证据之后,你更新了的对某个事件发生的可能性的概率。
1.1 贝叶斯定理
贝叶斯定理的思想则是将先验概率和后验概率联系了起来,先验概率作为我们大脑中的固有观念,而新证据的出现,在多大程度上能改变固有观念?这样说比较抽象,来看一个经典例子:
假设有一种罕见病,人群中的患病率是 1%(这就是先验概率,很低)。 现在医院有一种试纸,准确率高达 99%(如果真的有病,99%能测出来;没病,99%显示阴性)。
情况: 你去体检了,试纸显示阳性(+)。 直觉: 你觉得自己患病的概率是多少? 大多数人会脱口而出:"99%啊!试纸这么准!"
实际上,我们以1万人的范围来看,患病人数100人,测出阳性的人数是99人;健康人群9900人,测出阳性的是99人,如果你是阳性,实际上真正得病的概率只有50%。
贝叶斯定理的公式表达为:
P ( A ∣ B ) = P ( B ∣ A ) × P ( A ) P ( B ) P(A|B) = \frac{P(B|A)\times P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)×P(A)
其中, P ( A ∣ B ) P(A|B) P(A∣B)是条件概率,表示事件B发生时A发生的概率,也就是后验概率,可以理解为发现新证据B后更新的概率; P ( B ∣ A ) P(B|A) P(B∣A)是似然度,这是在事件 A 确实为真的情况下,观察到证据 B 的概率; P ( A ) P(A) P(A)则是先验概率,是我们的固有观念或者已知概率, P ( B ) P(B) P(B)是证据发生的概率,通常是通过全概率公式求得,全概率公式的表达为:
对于事件 A A A和一组互斥且完备的事件 B 1 , B 2 , ... , B n B_1,B_2,\dots ,B_n B1,B2,...,Bn:
P ( A ) = ∑ i = 1 n P ( A ∣ B i ) ⋅ P ( B i ) P(A)=\sum_{i=1}^{n}P(A|B_i) \cdot P(B_i) P(A)=i=1∑nP(A∣Bi)⋅P(Bi)
在上面的例子中就是所有人群中能测出阳性的概率是多少,也就是 P ( 阳性 ∣ 患病 ) ⋅ P ( 患病 ) + P ( 阳性 ∣ 健康 ) ⋅ P ( 健康 ) P(阳性|患病)\cdot P(患病) + P(阳性|健康) \cdot P(健康) P(阳性∣患病)⋅P(患病)+P(阳性∣健康)⋅P(健康),那么得到后验概率观察到阳性时的患病概率:
P ( 患病 ∣ 阳性 ) = 0.99 ⋅ 0.01 0.99 ⋅ 0.01 + 0.01 ⋅ 0.99 = 0.5 P(患病|阳性) = \frac{0.99 \cdot 0.01}{0.99 \cdot 0.01 + 0.01 \cdot 0.99} = 0.5 P(患病∣阳性)=0.99⋅0.01+0.01⋅0.990.99⋅0.01=0.5
进一步的,可以将贝叶斯公式理解为新看法 = = = 证据的力度 × \times × 原看法,当原有的概率很低时,必须要有强有力的证据才能扭转原来的看法,例如,当患病检测的准确率达到99.99%时,此时检查为阳性的患病概率才上升到99%。
2 参数估计方法
在早期的有监督深度学习中,分类任务是根据某个数据集,这个数据集中有包含相同类别的特征,但是特征表现不同的许多个样本进行训练得到一个模型,用来推断某个样本属于哪个特征。训练的过程就是一步步接近使得损失函数最小的各个layer上权重的数值的过程,也是对参数 W W W, b b b进行估计的过程。
上述的深度学习的分类任务思想,就是来源于对参数的估计,所谓的参数就是使得事件发生的概率服从某一种分布的决定性未知量,例如正态分布中的均值和标准差;而在深度学习的分类任务中就是权重 W W W和偏移量 b b b。
举个例子,拿到一枚硬币,我们想知道正面朝上的概率 p p p。
2.1 极大似然估计
所谓极大似然估计,就是已经观测到了一些数据(结果),那么我们应该寻找那个最有可能导致我们观测到这些数据的模型参数(原因)。换句话说,就是寻找让当前观测数据"出现可能性最大"的那个参数值。
在上述例子中,抛掷10次硬币,有8次正面在上,2次反面在上,那么可以得到"观察到抛掷10次硬币,得到8次正面朝上,2次反面朝上现象"的概率函数:
L ( X ∣ p ) = p 8 ( 1 − p ) 2 L(X|p) = p^8 (1-p)^{2} L(X∣p)=p8(1−p)2
这个函数也叫做似然函数,那么我们需要将P最大化,首先对等式两边取对数:
ln L ( X ∣ p ) = ln p 8 ( 1 − p ) 2 = 8 ln p + 2 ln ( 1 − p ) \ln L(X|p) = \ln p^8 (1-p)^{2} = 8\ln p + 2 \ln (1-p) lnL(X∣p)=lnp8(1−p)2=8lnp+2ln(1−p)
求导数:
d ln L ( X ∣ p ) d p = ln P 8 ( 1 − p ) 2 = 8 ln p + 2 ln ( 1 − p ) \frac{d\ln L(X|p)}{dp} = \ln P^8 (1-p)^{2} = 8\ln p + 2 \ln (1-p) dpdlnL(X∣p)=lnP8(1−p)2=8lnp+2ln(1−p)
那么使得导数为0的 p = 0.8 p=0.8 p=0.8,也就是说"观察到抛掷10次硬币,得到8次正面朝上,2次反面朝上现象",参数 p p p,也就是正面朝上的概率最有可能是0.8。
但是缺点是显而易见的,当抛掷次数很少的时候,是有很大偶然性的,根据这个现象的到的P也不准确。
2.2 最大后验估计
最大后验估计与极大似然估计不同就在于使用了先验分布作为估计参数的一部分,其公式为:
θ = arg max P ( θ ∣ D ) \theta= \argmax P(\theta|D) θ=argmaxP(θ∣D)
其中 θ \theta θ是要求取的参数,根据贝叶斯定理:
P ( θ ∣ D ) = P ( D ∣ θ ) ⋅ P ( θ ) P ( D ) P(\theta|D) = \frac{P(D|\theta)\cdot P(\theta)}{P(D)} P(θ∣D)=P(D)P(D∣θ)⋅P(θ)
而 P ( D ) P(D) P(D)本身与 θ \theta θ无关,所以 P ( θ ∣ D ) ∝ P ( D ∣ θ ) ⋅ P ( θ ) P(\theta|D)\propto P(D|\theta)\cdot P(\theta) P(θ∣D)∝P(D∣θ)⋅P(θ),最终得到的公式:
θ ^ M A P = arg max P ( D ∣ θ ) ⋅ P ( θ ) \hat{\theta}_{MAP} = \argmax P(D|\theta)\cdot P(\theta) θ^MAP=argmaxP(D∣θ)⋅P(θ)
针对二项分布的多次实验,通常使用beta分布作为先验分布,本文不介绍beta分布的来历,感兴趣的读者可以参考【统计学进阶知识(一)】深入理解Beta分布:从定义到公式推导。先验分布 P ( θ ) P(\theta) P(θ)在抛硬币的例子中就是 f ( p ) f(p) f(p),参数p的概率密度函数:
f ( p ) = 1 B ( α , β ) p α − 1 ( 1 − p ) β − 1 f(p)=\frac{1}{B(\alpha,\beta)}p^{\alpha - 1}(1-p)^{\beta - 1} f(p)=B(α,β)1pα−1(1−p)β−1
其中, B ( α , β ) B(\alpha,\beta) B(α,β)是与 p p p无关的量,因此针对 p p p的最大后验估计为:
p ^ M A P = arg max p m ( 1 − p ) n ⋅ p α − 1 ( 1 − p ) β − 1 = arg max p m + α − 1 ⋅ ( 1 − p ) n + β − 1 \hat{p}_{MAP} = \argmax p^m (1-p)^{n} \cdot p^{\alpha - 1}(1-p)^{\beta - 1}= \argmax p^{m+\alpha - 1}\cdot (1-p)^{n+\beta -1} p^MAP=argmaxpm(1−p)n⋅pα−1(1−p)β−1=argmaxpm+α−1⋅(1−p)n+β−1
其中, m m m和 n n n表示抛硬币正面为上和反面为上的次数, α \alpha α和 β \beta β的概念稍微复杂一些,可以理解为你认为你的先验信念有多强烈, α \alpha α和 β \beta β取的值越大表明你认为你的先验概率是越准确的,而 α \alpha α和 β \beta β各自的取值这代表你认为的概率 p p p有多大, α \alpha α越大表明你认为正面为上的概率越大,比如选取 B ( 5 , 5 ) B(5,5) B(5,5)作为先验分布,就是你认为这个先验的准确程度相当于抛掷10次硬币,有5次正面朝上,5次反面朝上。
可以发现似然函数与先验分布的乘积依然服从beta分步,并且倒数求得 p p p最大值的方法与极大似然估计一样,都是取对数求导,得到 p p p的最大值为:
p = m + α − 1 m + n + α + β − 2 p = \frac{m+\alpha - 1}{m+n + \alpha +\beta - 2} p=m+n+α+β−2m+α−1
当抛掷10次,8次正面向上,且采用 B ( 5 , 5 ) B(5,5) B(5,5)分布时,带入上式结果为0.6667,比极大似然估计的0.8更接近0.5。可以发现,当抛掷硬币足够次数之后,先验概率的影响会越来越小,越来越接近极大似然估计的结果;当 α \alpha α和 β \beta β越大时,则需要更多的后验结果来改变先验的影响。
3 贝叶斯分类
朴素贝叶斯算法是贝叶斯定理的一个应用,所谓"朴素"是指待分类的特征之间是独立的,例如机器学习的经典案例西瓜分类,瓜的条纹和瓜蒂形状这两个特征是完全独立的(当然实际上可能二者是有关联的,但是探究二者之间的关系并不容易,就当做是独立看待)。其公式表达为:
一个待分类的集群,总共有 y 1 , y 2 , ... , y n y_1,y_2,\dots,y_n y1,y2,...,yn总共n个类别,而特征共有 x 1 , x 2 , ... , x m x_1,x_2,\dots,x_m x1,x2,...,xm共m个且相互独立,特征的集合记为 X X X,在分类的过程中如果 P ( y k ∣ X ) = max P ( y 1 ∣ X ) , P ( y 2 ∣ X ) , ... P ( y n ∣ X ) P(y_k|X) = \max {P(y_1|X), P(y_2|X),\dots P(y_n|X)} P(yk∣X)=maxP(y1∣X),P(y2∣X),...P(yn∣X),则认为当前的样本属于 y k y_k yk类别。还是使用西瓜的例子,假如分类的依据是瓜的颜色深浅、条纹粗细和拍击声音,当拿到一个深颜色、粗条纹拍击声音沉闷的瓜时,如果计算得到 P ( 好瓜 ∣ 深颜色 , 粗条纹拍 , 击声音沉闷 ) > P ( 坏瓜 ∣ 深颜色 , 粗条纹 , 拍击声音沉闷 ) P(好瓜|{深颜色,粗条纹拍,击声音沉闷})> P(坏瓜|{深颜色,粗条纹,拍击声音沉闷}) P(好瓜∣深颜色,粗条纹拍,击声音沉闷)>P(坏瓜∣深颜色,粗条纹,拍击声音沉闷),那么就认为这个瓜是好瓜;根据贝叶斯定理:
P ( y k ∣ X ) = P ( X ∣ y k ) ⋅ P ( y k ) P ( X ) P(y_k|X) = \frac{P(X|y_k) \cdot P(y_k)}{P(X)} P(yk∣X)=P(X)P(X∣yk)⋅P(yk)
代入到瓜的表现:
P ( 好瓜 ∣ 深颜色 , 粗条纹 , 拍击声音沉闷 ) = P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ∣ 好瓜 ) ⋅ P ( 好瓜 ) P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ) P(好瓜|{深颜色,粗条纹,拍击声音沉闷}) = \frac{P({深颜色,粗条纹,拍击声音沉闷}|好瓜)\cdot P(好瓜)}{P({深颜色,粗条纹,拍击声音沉闷})} P(好瓜∣深颜色,粗条纹,拍击声音沉闷)=P(深颜色,粗条纹,拍击声音沉闷)P(深颜色,粗条纹,拍击声音沉闷∣好瓜)⋅P(好瓜)
其中 P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ) P({深颜色,粗条纹,拍击声音沉闷}) P(深颜色,粗条纹,拍击声音沉闷)表示这种瓜出现在数据集中的概率,因为想要判断好瓜还是坏瓜与这个概率没有关系,所以实际上只需要计算分母部分;
在数据集中,可能并没有同时出现{深颜色,粗条纹,拍击声音沉闷}的瓜,那该怎么计算 P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ∣ 好瓜 ) P({深颜色,粗条纹,拍击声音沉闷}|好瓜) P(深颜色,粗条纹,拍击声音沉闷∣好瓜)呢?由于我们认为各个特征之间是独立的,根据独立事件的概率公式,对于 P ( X ∣ y k ) P(X|y_k) P(X∣yk):
P ( X ∣ y k ) = ∏ i = 1 m P ( x i ∣ y k ) P(X|y_k)= \prod_{i=1}^{m}P(x_i|y_k) P(X∣yk)=i=1∏mP(xi∣yk)
也就是说,
P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ∣ 好瓜 ) = P ( 深颜色 ∣ 好瓜 ) ⋅ P ( 粗条纹 ∣ 好瓜 ) ⋅ P ( 拍击声音沉闷 ∣ 好瓜 ) P({深颜色,粗条纹,拍击声音沉闷}|好瓜) = P(深颜色|好瓜)\cdot P(粗条纹|好瓜)\cdot P(拍击声音沉闷|好瓜) P(深颜色,粗条纹,拍击声音沉闷∣好瓜)=P(深颜色∣好瓜)⋅P(粗条纹∣好瓜)⋅P(拍击声音沉闷∣好瓜)
那么我们就可以分别计算整个数据集下好瓜中深颜色、粗条纹,拍击声音沉闷各自的数量除以好瓜的总数,再相乘就是 P ( 深颜色 , 粗条纹 , 拍击声音沉闷 ∣ 好瓜 ) P({深颜色,粗条纹,拍击声音沉闷}|好瓜) P(深颜色,粗条纹,拍击声音沉闷∣好瓜),而 P ( 好瓜 ) P(好瓜) P(好瓜)就是整个数据集中好瓜的数量除以总数,这样就可以分别计算出这个瓜是好瓜和坏瓜的概率,对比二者即可。
更加详细的说明可以参考图解机器学习 | 朴素贝叶斯算法详解和机器学习系列(四):朴素贝叶斯(华强买瓜版),针对贝叶斯算法,前者详细讲述了朴素贝叶斯算法的原理以及不同种类的朴素贝叶斯算法计算方式、连续变量的处理,后者则根据朴素贝叶斯算法实现了西瓜分类这一经典例子。
4 参数估计方法与深度学习
4.1 交叉熵损失函数与极大似然估计
在深度学习的多分类任务中,经常使用的是交叉熵损失函数,交叉熵损失函数的推导过程之一就是通过极大似然估计:
在一个样本数为 N N N的数据集中,共有 K K K个类别, x x x是输入的所有特征, y ∈ { y 1 , y 2 , ... , y K } y\in \{ y_1,y_2,\dots ,y_K\} y∈{y1,y2,...,yK}是样本所属的类别,并且每个样本只属于其中一种类别,预测值 y ^ = f ( x ; θ ) \hat{y}=f(x;\theta) y^=f(x;θ),预测样本为第 k k k个类别的概率表示为 p k = P ( y = k ∣ x , θ ) p_k=P(y=k|x,\theta) pk=P(y=k∣x,θ)。根据极大似然估计的思想,观测到当前所有样本的情况下,寻找使得当前观察现象可能性最大化的那个参数 θ \theta θ,在深度学习的模型中,参数 θ \theta θ实际上就是每一层的权重和偏移。样本的ground truth采用独热编码(one-hot),即标签从第 k k k类转化为一个长度为 K K K的向量,第 k − 1 k-1 k−1索引处的值为1,其他都为0。
可以写出针对单个样本的似然函数:
L ( θ ∣ x , y ) = ∏ k = 1 K P ( y = k ∣ x ; θ ) y k = ∏ k = 1 K p k y k L(\theta | x, y) = \prod_{k=1}^K P(y=k|x;\theta)^{y_k} = \prod_{k=1}^K p_k^{y_k} L(θ∣x,y)=k=1∏KP(y=k∣x;θ)yk=k=1∏Kpkyk
在这里有一个小小的插入,就是为什么似然函数要写成上面这种形式,可以发现上面的式子最终的结果就是 p k p_k pk,因为除了第 k k k个类别的 y k y_k yk是1,独热编码的其他位置都是0,连乘的结果就是 p k p_k pk。可以从二分类的损失函数推导一下,因为是二分类,所以输出只是一个概率值 p p p,那么另一个类别的概率就是 1 − p 1-p 1−p,用 0 , 1 0,1 0,1代表2个类别,可以得到两种类别的概率表达式:
y ^ = { p if y = 1 1 − p if y = 0 \hat{y}= \begin{cases} p & \text{if } y = 1 \\ 1 - p & \text{if } y = 0 \end{cases} y^={p1−pif y=1if y=0
如果将上面的式子写成统一形式:
y ^ = p y ⋅ ( 1 − p ) 1 − y \hat{y}=p^y\cdot (1-p)^{1-y} y^=py⋅(1−p)1−y
将上式中的 p p p替换为 y ^ \hat{y} y^(深度学习的输出 y ^ \hat{y} y^就是概率值)就是二分类任务似然函数的表达形式,取log并对 N N N个样本取平均值再乘以-1将最大化转化为最小化就是二分类任务的交叉熵损失函数:
L = − 1 N ∑ i = 1 N ( y i log y i ^ + ( 1 − y i ) log ( 1 − y i ^ ) ) L = -\frac{1}{N}\sum_{i=1}^{N}(y_i\log \hat{y_i} + (1-y_i) \log (1-\hat{y_i})) L=−N1i=1∑N(yilogyi^+(1−yi)log(1−yi^))
推广到多分类任务,神经网络最后一层都是softmax,即将所有的输出归一化,使得所有类别输出的概率之和为1,其似然函数的写法也是一种将所有类别统一化成一条表达式的写法,这样写的好处是:
-
方便求导,在反向传播中直接使用交叉熵损失函数进行求导;
-
可以向量化,输出的所有类别可以直接参与向量运算而不必单独针对某个类别进行计算;
-
可以适配软标签,软标签表示并不是硬性的类别置为1,而是直接输出概率,例如分类花、鸟、鱼的输出向量为 [ 0.7 , 0.2 , 0.1 ] T [0.7,0.2,0.1]^T [0.7,0.2,0.1]T,表示70%的概率是花,20%的概率是鸟,10%的概率是鱼;这种表达形式可以直接将软标签的输出相乘。
那么针对多分类任务所有样本的似然函数为:
L ( θ ∣ x , y ) = ∏ i = 1 N ∏ k = 1 K P ( y i = k ∣ x i ; θ ) y k i L(\theta | x, y) = \prod_{i=1}^N \prod_{k=1}^K P(y_i=k|x^i;\theta)^{y_k^i} L(θ∣x,y)=i=1∏Nk=1∏KP(yi=k∣xi;θ)yki
同样取对数,对 N N N个样本求平均值再乘以-1得到多分类任务的交叉熵损失函数:
L ( θ ) = − 1 N ∑ i = 1 N ∑ k = 1 K y k i log p k ( x i ; θ ) = − 1 N ∑ i = 1 N ∑ k = 1 K y k i log y ^ i \mathcal{L}(\theta) = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_k^{i} \log p_k(x^{i}; \theta) = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_k^{i} \log \hat{y}^i L(θ)=−N1i=1∑Nk=1∑Kykilogpk(xi;θ)=−N1i=1∑Nk=1∑Kykilogy^i
4.2 引入先验分布的损失函数------权重衰减与正则化
在上一节的极大似然估计中,是没有任何的先验信息的,就如同在2.1节中展示描述的一样,当样本比较少的情况下,得出的参数值可能并不准确,在深度学习的多分类任务中就表现为过拟合,缺乏泛化能力;引入先验分布则有助于矫正只使用后验概率产生的偏差,在深度学习的分类任务中就是正则化方法,用于降低过拟合,也就是本节标题所说的权重衰减。
4.2.1 公式推导
在4.1节,我们从似然函数推导到了交叉熵损失函数,这一节也一样,首先从似然函数开始,极大似然估计的似然函数是:
M L E = arg max P ( θ ∣ X ) MLE = \argmax P(\theta|X) MLE=argmaxP(θ∣X)
通过贝叶斯定理,可以引入后验概率:
M A P = arg max P ( θ ∣ X ) ⋅ P ( θ ) MAP = \argmax P(\theta|X)\cdot P(\theta) MAP=argmaxP(θ∣X)⋅P(θ)
可以发现与极大似然估计只差一项 P ( θ ) P(\theta) P(θ), θ \theta θ是决定最终概率分布的参数,也是我们要求得的量,在深度学习中就是各个层的权重,将先验分布加入到多分类任务的似然函数,针对单个样本:
L M A P = ∏ k = 1 K P ( y = k ∣ x ; θ ) y k ⋅ P ( θ ) L_{MAP} = \prod_{k=1}^K P(y=k|x;\theta)^{y_k} \cdot P(\theta) LMAP=k=1∏KP(y=k∣x;θ)yk⋅P(θ)
将 θ \theta θ替换为权重 W W W后,再将上式取log值并乘以-1再对所有样本取平均得到损失函数:
L ( W ) = − 1 N ∑ i = 1 N log L M A P = − 1 N ∑ i = 1 N ∑ k = 1 K y k i log p k ( x i ; W ) − 1 N ⋅ N ⋅ log P ( W ) = − 1 N ∑ i = 1 N ∑ k = 1 K y k i log y ^ i − log P ( W ) \mathcal{L}(W)=-\frac{1}{N} \sum_{i=1}^{N}\log L_{MAP} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_k^{i} \log p_k(x^{i}; W) - \frac{1}{N} \cdot N \cdot \log P(W) = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_k^{i} \log \hat{y}^i - \log P(W) L(W)=−N1i=1∑NlogLMAP=−N1i=1∑Nk=1∑Kykilogpk(xi;W)−N1⋅N⋅logP(W)=−N1i=1∑Nk=1∑Kykilogy^i−logP(W)
可以发现相比从极大似然估计推导出的损失函数仅仅只多了一项 log P ( W ) \log P(W) logP(W),这一项也是先验分布,通常情况下会选择高斯先验或者拉普拉斯先验,分别对应了L2和L1正则化,详细的推导可以参考L1正则先验是Laplace分布,L2正则先验分布是高斯分布,这里我们仅介绍高斯先验。通常情况下,我们会假设权重服从均值为0的高斯分布,那么:
P ( W ) = ∏ j = 1 M 1 2 π σ 2 exp ( − w i 2 2 σ 2 ) P(W) = \prod_{j=1}^{M} \frac{1}{2\pi \sigma ^ 2}\exp (-\frac{w_i^2}{2\sigma ^ 2}) P(W)=j=1∏M2πσ21exp(−2σ2wi2)
其中 M M M是所有权重的数量。
那么对 P ( W ) P(W) P(W)取对数可以得到:
log P ( W ) = − M 2 log ( 2 π σ 2 ) − 1 2 σ 2 ∑ j = 1 M w i 2 = − M 2 log ( 2 π σ 2 ) − λ 2 ∣ ∣ W ∣ ∣ 2 2 \log P(W) = - \frac{M}{2}\log (2\pi \sigma ^ 2) - \frac{1}{2\sigma ^2} \sum_{j=1}^{M} w_i^2 = - \frac{M}{2}\log (2\pi \sigma ^ 2) - \frac{\lambda}{2} ||W||_2^2 logP(W)=−2Mlog(2πσ2)−2σ21j=1∑Mwi2=−2Mlog(2πσ2)−2λ∣∣W∣∣22
最终 log P ( W ) \log P(W) logP(W)得到的两项,第一项是个常数,第二项则是 1 2 σ 2 \frac{1}{2\sigma ^2} 2σ21 乘以L2范数的平方,这也就是L2正则化的由来。
在梯度更新的时候,可以针对某一层的权重矩阵施加正则化,即
w i t + 1 = w i t − α ∂ L ( W ) ∂ w i = w i t − α ( ∂ L M A P ( W ) ∂ w i + λ w i t ) w_{i}^{t+1} = w_i^t -\alpha \frac{\partial \mathcal{L}(W)}{\partial w_i} = w_i^t -\alpha (\frac{\partial L_{MAP}(W)}{\partial w_i} + \lambda w_i^t) wit+1=wit−α∂wi∂L(W)=wit−α(∂wi∂LMAP(W)+λwit)
其中 w i w_i wi表示权重矩阵的第 i i i个参数。可以看到,在更新权重的时候多减了一个 λ \lambda λ倍的自身数值,那么当权重越大的时候,其梯度更新后衰减的越多,相当于惩罚了大权重,降低过拟合,这也是权重衰减名称的由来。L1和L2正则化详细的效果可以参考L1和L2 详解(范数、损失函数、正则化),本文不过多赘述。
5 示例
来实际看一个例子,kaggle上的一个放贷款的数据,有一个表格总结了申请贷款人的一些个人信息,比如年龄、学历以及工作年限等,数据集的链接是https://www.kaggle.com/datasets/taweilo/loan-approval-classification-data/data,如果不能访问可以通过https://download.csdn.net/download/weixin_43977379/92537449下载:

各个列的含义为:

最后一列的load_status为1表示给申请人发放了贷款,0则表示拒绝。这是一个非常典型的二分类问题,可以用逻辑回归,也就是之前所说的深度学习方法,以及贝叶斯分类的方法来进行分类。
具体的代码可以通过https://download.csdn.net/download/weixin_43977379/92537449下载,loan_bayes.ipynb和loan_logistic_regression分别是贝叶斯分类和逻辑回归分类,可以直接运行并输出准确率,在逻辑回归中,优化器有一个参数weight_decay就表示正则化参数,这里不对代码进行讲解;只提一点数据中的特征大部分是连续型随机变量,例如年龄、贷款金额,是不适用于离散型随机变量的概率计算方法的,可以参考什么是高斯朴素贝叶斯(Gaussian Naive Bayes, GNB)这篇文章,计算方法也并不复杂,就是把每个特征当做独立的并且服从正态分布。
准确率:
未添加正则化的验证集准确率:91.81%
添加了正则化的验证集准确率:91.77%
朴素贝叶斯分类器验证集准确率:88%
实际来看结果差不多,而贝叶斯分类反而效果不如深度学习,分析原因可能有些特征并不独立,例如年龄和工作年限是基本上成正比的,并且有些特征可能不服从正态分布,另外有一些异常数据会影响特征的均值和方差,导致概率密度函数有偏差。