【DeepLearning】6.2.2.2 用于Bernoulli分布的sigmoid单元

需求:具有两个类的分类任务,需要预测二值型变量 y ∈ { 0 , 1 } y\in\{0,1\} y{0,1} 的值。

似然函数:一种关于统计模型中的参数的函数,表示模型中参数中的似然性(likehood),核心是衡量 参数 b b b 的合理性
公式: L ( b ∣ A ) = α P ( A ∣ B = b ) L(b\mid A)=\alpha P(A\mid B=b) L(bA)=αP(AB=b),其中 B B B 表示参数, A A A 表示事件, α \alpha α 是一个与 b b b 无关的正常数。含义为 “在已知观测结果 A A A 的前提下,参数 B B B 取值为 b b b可能性合理性(即, L ( b ∣ A ) L(b\mid A) L(bA))”正比于“事件 B = b B=b B=b发生的前提下,事件 A A A 发生的概率”。
推导:
根据贝叶斯定理:
“事件 A A A 发生的前提下,事件 B = b B=b B=b 发生的概率” = P ( B = b ∣ A ) = P ( A ∣ B = b ) P ( B = b ) P ( A ) =P(B=b\mid A)=\frac{P(A\mid B=b)P(B=b)}{P(A)} =P(B=bA)=P(A)P(AB=b)P(B=b)
因为在似然函数中,我们关注的是 参数 b b b 对观测结果 A A A 的解释能力的合理性,而非事件 B = b B=b B=b A A A 本身。因此,我们忽略 P ( B = b ) P(B=b) P(B=b) P ( A ) {P(A)} P(A) ,仅保留分子部分:
L ( b ∣ A ) ∝ P ( A ∣ B = b ) L(b\mid A)\propto P(A\mid B=b) L(bA)P(AB=b)
即:
L ( b ∣ A ) = α P ( A ∣ B = b ) L(b\mid A)=\alpha P(A\mid B=b) L(bA)=αP(AB=b)
注意:这里并不要求似然函数满足归一性: ∑ b ∈ B α P ( A ∣ B = b ) = 1 \sum_{b\in\mathcal{B}} \alpha P(A\mid B=b) = 1 bBαP(AB=b)=1。这一点表明了 “似然性” 仅表示合理性,和 “概率” 有明确的区分。
举例说明见:似然函数

此时,按照最大似然的方法是定义一个概率分布来拟合 x \boldsymbol{x} x y y y 的映射,然后通过实际样本 ( x , y ) (\boldsymbol{x}, y) (x,y) 调整概率分布的参数
这里,我们选择 Bernoulli 分布。

Bernoulli分布(伯努利分布),又名 0-1 分布,离散型概率分布。
概率质量函数为:
f X ( x ) = p x ( 1 − p ) 1 − x = { p  if  x = 1 , 1 − p  if  x = 0. f_{X}(x)=p^x(1-p)^{1-x}=\left\{\begin{matrix} p &~\text{if} ~x=1,\\ 1-p &~\text{if} ~x=0. \end{matrix}\right. fX(x)=px(1p)1x={p1p if x=1, if x=0.

Bernoulli分布仅需要单个参数来定义。因此,我们只需要拟合 Bernoulli 分布中的 p p p(即, P ( y = 1 ∣ x ) P(y=1\mid \boldsymbol{x}) P(y=1x))即可,且 P ( y = 1 ∣ x ) ∈ [ 0 , 1 ] P(y=1\mid \boldsymbol{x})\in[0,1] P(y=1x)[0,1]

原书中举了一个使用线性单元拟合 P ( y = 1 ∣ x ) P(y=1\mid \boldsymbol{x}) P(y=1x) 的例子,并且说明了其缺点。

较好的实现方法:使用 sigmoid 输出单元。

sigmoid 输出单元定义:
y ^ = σ ( w ⊤ h + b ) , \hat{y}=\sigma(\boldsymbol{w}^\top\boldsymbol{h}+b), y^=σ(wh+b), 其中, σ \sigma σ 是 logistic sigmoid 函数, h = w 0 ⊤ x + b 0 \boldsymbol{h}=\boldsymbol{w}^\top_0\boldsymbol{x}+b_0 h=w0x+b0 表示线性单元对 x \boldsymbol{x} x 的操作。(sigmoid 输出单元 包含 logistic sigmoid 函数 和 可能的多个线性单元,这点对理解后面的概率计算很重要!)

那么,如何证实 sigmoid 输出单元确实能够较好地拟合 P ( y ∣ x ) P(y\mid \boldsymbol{x}) P(yx)呢?

首先,拟合 Bernoulli 分布必须的两个特性:

  1. P ( y ∣ x ) ∈ [ 0 , 1 ] P(y\mid \boldsymbol{x})\in[0,1] P(yx)[0,1]
  2. ∑ y ∈ 0 , 1 P ( y ∣ x ) = 1 \sum_{y\in{0,1}}P(y\mid \boldsymbol{x}) = 1 y0,1P(yx)=1

为了方便表述,我们先使用一个线性层计算 z = w ⊤ h + b z=\boldsymbol{w}^\top\boldsymbol{h}+b z=wh+b,暂时忽略对 x \boldsymbol{x} x 的依赖性,只讨论从 z z z 的值到 y y y 的概率分布(即, P ( y ∣ z ) P(y\mid z) P(yz))。

则需要验证特性变成:(有点啰嗦了)

  1. P ( y ∣ z ) ∈ [ 0 , 1 ] P(y\mid z)\in[0,1] P(yz)[0,1]
  2. ∑ y ∈ 0 , 1 P ( y ∣ z ) = 1 \sum_{y\in{0,1}}P(y\mid z) = 1 y0,1P(yz)=1

根据 “sigmoid 输出单元 包含 logistic sigmoid 函数 和 可能的多个线性单元”,我们可以假定sigmiod输出单元拟合的对数概率对 y y y z z z 是线性的,因此有:
log ⁡ P ~ ( y ∣ z ) = y z . \log \tilde{P}(y\mid z) = yz. logP~(yz)=yz. P ~ ( ⋅ ) \tilde{P}(\cdot) P~() 指这是一个非归一化的概率,后面进行归一化。

至于,为什么取对数概率?为什么构造成 y z yz yz?都有相应的数学解释,这里先不做讨论。

因此,非归一化概率可以写作 P ~ ( y ∣ z ) = exp ⁡ ( y z ) \tilde{P}(y\mid z)=\exp(yz) P~(yz)=exp(yz)

归一化:
P ( y ∣ z ) = P ~ ( y ∣ z ) ∑ y ′ ∈ { 0 , 1 } exp ⁡ ( y ′ z ) = exp ⁡ ( y z ) ∑ y ′ ∈ { 0 , 1 } exp ⁡ ( y ′ z ) = e y z 1 + e z P(y\mid z) = \frac{\tilde{P}(y\mid z)}{\sum_{y'\in\{0,1\}}\exp(y'z)} = \frac{\exp(yz)}{\sum_{y'\in\{0,1\}}\exp(y'z)} =\frac{e^{yz}}{1+e^z} P(yz)=y{0,1}exp(yz)P~(yz)=y{0,1}exp(yz)exp(yz)=1+ezeyz
检验 1:

import numpy as np
import matplotlib.pyplot as plt
def P_z_y0(z):
    return np.exp(0*z) / (1 + np.exp(z))
def P_z_y1(z):
    return np.exp(1*z) / (1 + np.exp(z))
x = np.linspace(-10, 10, 400)
p_y0 = P_z_y0(x)
p_y1 = P_z_y1(x)
plt.figure(figsize=(10, 6))
plt.plot(x, p_y0, label='y=0', color='red')
plt.plot(x, p_y1, label='y=1', color='blue')
plt.title('Plot of P(y | z)')
plt.xlabel('z')
plt.ylabel('P(y |z)')
plt.legend()
plt.grid(True)
plt.show()

Alt

检验 2:
∑ y ∈ { 0 , 1 } P ( y ∣ z ) = e z 1 + e z + 1 1 + e z = 1 \sum_{y\in\{0,1\}}P(y|z)=\frac{e^z}{1+e^z}+\frac{1}{1+e^z}=1 y{0,1}P(yz)=1+ezez+1+ez1=1
验证了 sigmoid 单元可以用来拟合 Bernoulli 分布之后,接下来该如何拟合呢?

这里使用的方法是最大似然学习。
首先给出似然函数。根据前面的定义,我们先求出 y y y 取 0 或 1 的概率:
P ( y = 1 ∣ x , θ ) = e z 1 + e z = 1 1 + e − z = σ ( z ) P(y=1 \mid \boldsymbol{x},\theta)=\frac{e^z}{1+e^z}=\frac{1}{1+e^{-z}}=\sigma(z) P(y=1x,θ)=1+ezez=1+ez1=σ(z) P ( y = 0 ∣ x , θ ) = 1 1 + e z = e − z 1 + e − z = 1 − σ ( z ) P(y=0 \mid \boldsymbol{x},\theta)=\frac{1}{1+e^z}=\frac{e^{-z}}{1+e^{-z}}=1-\sigma(z) P(y=0x,θ)=1+ez1=1+ezez=1σ(z)其中,我们将 z = w ⊤ h + b z=\boldsymbol{w}^\top\boldsymbol{h}+b z=wh+b h = w 0 ⊤ x + b 0 \boldsymbol{h}=\boldsymbol{w}^\top_0\boldsymbol{x}+b_0 h=w0x+b0 中的参数都抽象为 θ \theta θ,即 z = θ ⊤ x z=\theta^\top\boldsymbol{x} z=θx

在给定样本 ( x , y ) (\boldsymbol{x}, y) (x,y) 的情况下,sigmoid 输出单元的参数为 θ \theta θ 的合理性,即似然度,忽略 α \alpha α 可以表示为:
L ( θ ∣ x , y ) = P ( y ∣ x , θ ) = σ ( z ) y ⋅ ( 1 − σ ( z ) ) 1 − y L(\theta \mid \boldsymbol{x}, y) = P(y \mid \boldsymbol{x}, \theta)=\sigma(z)^y\cdot(1-\sigma(z))^{1-y} L(θx,y)=P(yx,θ)=σ(z)y(1σ(z))1y

损失函数(负对数似然)可以表示为:
J ( θ ) = − log ⁡ P ( y ∣ x , θ ) = y ⋅ log ⁡ ( σ ( z ) ) + ( 1 − y ) ⋅ log ⁡ ( 1 − σ ( z ) ) . J(\theta)=-\log P(y \mid \boldsymbol{x}, \theta)=y\cdot\log(\sigma(z)) + (1-y)\cdot\log(1-\sigma(z)). J(θ)=logP(yx,θ)=ylog(σ(z))+(1y)log(1σ(z)).

至此,已经可以通过算法最小化损失函数来拟合。不过,目前的损失函数有些复杂。因此,书中还给出了另一种形式。

参数化与简化:
为了简化表达式,引入参数化技巧 ( 2 y − 1 ) z (2y-1)z (2y1)z

  • y = 1 y=1 y=1 时, ( 2 y − 1 ) z = z (2y-1)z=z (2y1)z=z,此时 σ ( z ) = P ( y = 1 ∣ x , θ ) \sigma(z)=P(y=1 \mid \boldsymbol{x},\theta) σ(z)=P(y=1x,θ)
  • y = 0 y=0 y=0 时, ( 2 y − 1 ) z = − z (2y-1)z=-z (2y1)z=z,此时 σ ( − z ) = P ( y = 0 ∣ x , θ ) \sigma(-z)=P(y=0 \mid \boldsymbol{x},\theta) σ(z)=P(y=0x,θ)

因此, σ ( ( 2 y − 1 ) z ) = P ( y ∣ x , θ ) \sigma((2y-1)z)=P(y \mid \boldsymbol{x},\theta) σ((2y1)z)=P(yx,θ),对数似然可以简化为:
log ⁡ P ( y ∣ x , θ ) = log ⁡ σ ( ( 2 y − 1 ) z ) . \log P(y \mid \boldsymbol{x},\theta)=\log \sigma((2y-1)z). logP(yx,θ)=logσ((2y1)z).损失函数(负对数似然)则为:
J ( θ ) = − log ⁡ P ( y ∣ x , θ ) = − log ⁡ σ ( ( 2 y − 1 ) z ) . J(\theta)=-\log P(y \mid \boldsymbol{x},\theta)=-\log \sigma((2y-1)z). J(θ)=logP(yx,θ)=logσ((2y1)z).

可以说是非常的 Amazing !同时,这一形式避免了直接处理 1 − σ ( z ) 1-\sigma(z) 1σ(z) 带来的数值不稳定问题(如梯度饱和)(这个后面再看)。

书中进一步将损失函数写成了 softplus \text{softplus} softplus 函数
J ( θ ) = ζ ( ( 1 − 2 y ) z ) . J(\theta)=\zeta((1-2y)z). J(θ)=ζ((12y)z).其中, ζ ( x ) = log ⁡ ( 1 + exp ⁡ ( x ) ) \zeta(x)=\log(1+\exp(x)) ζ(x)=log(1+exp(x))

我们可以看到它仅仅在 ( 2 y − 1 ) z (2y-1)z (2y1)z 取绝对值非常大的负值时才会饱和。因此饱和只会出现在模型已经得到正确答案时——当 y = 1 y = 1 y=1 z z z 取非常大的正值时,或者 y = 0 y = 0 y=0 z z z 取非常小的负值时。当 z z z 的符号错误时, softplus \text{softplus} softplus 函数的变量 ( 2 y − 1 ) z (2y-1)z (2y1)z 可以简化为 ∣ z ∣ |z| z。当 ∣ z ∣ |z| z 变得很大并且 z z z 的符号错误时, softplus \text{softplus} softplus 函数渐近地趋向于它 的变量 ∣ z ∣ |z| z。对 z z z 求导则渐近地趋向于 sign ( z ) \text{sign}(z) sign(z),所以,对于极限情况下极度不正确的 z z z softplus \text{softplus} softplus 函数完全不会收缩梯度。这个性质很有用,因为它意味着基于梯度的学习可以很快地改正错误的 z z z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值