机器学习笔记
第一章 机器学习简介
第二章 感知机
第三章 支持向量机
第四章 朴素贝叶斯分类器
第五章 Logistic回归
第六章 线性回归和岭回归
第七章 多层感知机与反向传播【Python实例】
第八章 主成分分析【PCA降维】
第九章 隐马尔可夫模型
第十章 奇异值分解
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 机器学习笔记
- 一、熵
- 1 定义
- 2 熵函数性质
- 二、交叉熵
- 1 定义
- 2 性质
- 三、 应用:logistics回归
- 1 交叉熵损失函数
- 2 计算实例
- 四、 应用:softmax
- 五、KL散度
- 六、参考资料
一、熵
1 定义
熵是信息论中最基本、最核心的一个概念,它衡量了一个概率分布的随机程度,或者说包含的信息量的大小。首先来看离散型随机变量,考虑随机变量取某一个特定值时包含的信息量的大小:
- 假设随机变量取值为 x,对应的概率为 p(x)。直观来看,取这个值的可能性越小,而它又发生了,则包含的信息量就越大。也就是说,概率越小,信息量越大。例如,一年之内人类登陆火星,包含的信息量显然比广州明天要下雨大,因为前者的概率明显小于后者。
- 因此如果定义一个函数 h(x)来描述随机变量取值为的信息量的大小的话,则h(x)应该是 p ( x )的单调减函数。
满足单调递减要求的函数太多了,该选择哪个函数呢? 接着考虑。假设有两个相互独立的随机变量, 它们的取值分别为x和y, 取该值的概率为
p
(
x
)
p(x)
p(x) 和
p
(
y
)
p(y)
p(y) 。根据随机变量的独立性, 它们的联合概率为:
p
(
x
,
y
)
=
p
(
x
)
p
(
y
)
.
p(x, y)=p(x) p(y).
p(x,y)=p(x)p(y).由于这两个随机变量是相互独立的, 因此它们各自取某一值时包含的信息量应该是两个随机变量分别取这些值的时候包含的信息量之和
h
(
x
,
y
)
=
h
(
x
)
+
h
(
y
)
.
h(x, y)=h(x)+h(y).
h(x,y)=h(x)+h(y).
这要求
h
(
x
)
h(x)
h(x) 能把
p
(
x
)
p(x)
p(x) 的乘法转化为加法, 在数学上, 满足此要求的是对数函数。因此, 可以把信息量定义为:
h ( x ) = − log p ( x ) h(x)=-\log p(x) h(x)=−logp(x)这个对数的底数是多少并没有太大关系, 根据换底公式, 最后计算出来的结果就差了一个倍数, 信息论中通常以 2 为底, 在机器学习中通常以 e e e 为底, 在后面的计算中为了方便起见我们用 10 为底。需要强调的对数函数前面加上了负号, 这是因为对数函数是增函数, 而我们要求 h ( x ) h(x) h(x) 是 p ( x ) p(x) p(x) 的减函 数。另外, 由于 0 ≤ p ( x ) ≤ 1 0 \leq p(x) \leq 1 0≤p(x)≤1, 因此 log p ( x ) < 0 \log p(x)<0 logp(x)<0, 加上负号之后刚好可以保证这个信息量为正。
上面只是考虑了随机变量取某一个值时包含的信息量, 而随机变量的取值是随机的, 有各种可能, 那又怎么计算它取所有各种取值时所包含的信息量呢? 既然随机变量取值有各种情况,而且取每个值有一个概率, 那计算它取各个值时的信息量的均值即数学期望即可, 这个信息量的均值, 就是熵。
对于离散型随机变量, 熵定义为
H ( p ) = E x [ − log p ( x ) ] = − ∑ i p i log p i \begin{aligned} H(p) &=E_{x}[-\log p(x)] \\ &=-\sum_{i} p_{i} \log p_{i} \end{aligned} H(p)=Ex[−logp(x)]=−i∑pilogpi这里约定 p i = p ( x i ) p_i=p\left(x_{i}\right) pi=p(xi) 。
例:
假设 x x x概率分布如下:
它的熵为
H
(
p
)
=
−
0.9
×
log
0.9
−
0.05
×
log
0.05
−
0.02
×
log
0.02
−
0.03
×
log
0.03
=
0.041
+
0.065
+
0.034
+
0.046
=
0.186.
\begin{aligned} H(p) & =-0.9 \times \log 0.9-0.05 \times \log 0.05-0.02 \times \log 0.02-0.03 \times \log 0.03 \\ & =0.041+0.065+0.034+0.046 \\ & =0.186. \end{aligned}
H(p)=−0.9×log0.9−0.05×log0.05−0.02×log0.02−0.03×log0.03=0.041+0.065+0.034+0.046=0.186.
2 熵函数性质
根据熵的定义,把熵看做关于p的函数,有如下性质:
- 熵函数为凹函数
- 随机变量取各个值的概率相等(均匀分布)时有极大值
- 在取某一个值的概率为1,取其他所有值的概率为0时有极小值(此时随机变量退化成某一必然事件或者说确定的变量)。
熵函数求极大极小值,是一个带约束的优化问题,可以用拉格朗日乘子法进行求解。对于离散型随机变量, 熵定义的是如下函数:
H
(
p
)
=
−
∑
i
=
1
n
x
i
log
x
i
H(p)=-\sum_{i=1}^{n} x_{i} \log x_{i}
H(p)=−i=1∑nxilogxi其中
x
i
x_{i}
xi 为随机变量取第
i
i
i 个值的概率。约束条件为:
∑
i
=
1
n
x
i
=
1
x
i
≥
0
\begin{array}{r} \sum_{i=1}^{n} x_{i}=1 \\ x_{i} \geq 0 \end{array}
∑i=1nxi=1xi≥0由于对数函数的定义域是非负的, 因此可以去掉不等式约束。构造拉格朗日乘子函数:
L
(
x
,
λ
)
=
−
∑
i
=
1
n
x
i
log
x
i
+
λ
(
∑
i
=
1
n
x
i
−
1
)
L(x, \lambda)=-\sum_{i=1}^{n} x_{i} \log x_{i}+\lambda\left(\sum_{i=1}^{n} x_{i}-1\right)
L(x,λ)=−i=1∑nxilogxi+λ(i=1∑nxi−1)对
x
i
x_{i}
xi 求偏导数并令其为 0 , 可以得到:
∂
L
∂
x
i
=
−
log
x
i
−
1
+
λ
=
0
⇒
log
x
i
=
λ
−
1
\frac{\partial L}{\partial x_{i}}=-\log x_{i}-1+\lambda=0 \\ \Rightarrow \log x_{i}=\lambda-1
∂xi∂L=−logxi−1+λ=0⇒logxi=λ−1这意味着在极值点处所有的
x
i
x_{i}
xi 必须相等。对
λ
\lambda
λ 求偏导数并令其为 0 , 可以得到:
∑
i
=
1
n
x
i
=
1
\sum_{i=1}^{n} x_{i}=1
i=1∑nxi=1因此当
x
i
=
1
/
n
x_{i}=1 / n
xi=1/n 时函数取得极值。此时熵的值为:
H
(
p
)
=
−
∑
i
=
1
n
1
n
log
1
n
=
log
n
\begin{aligned} H(p) &=-\sum_{i=1}^{n} \frac{1}{n} \log \frac{1}{n} \\ &=\log n \end{aligned}
H(p)=−i=1∑nn1logn1=logn进一步的可以证明该值是极大值。熵的二阶偏导数为:
∂
2
H
∂
x
i
2
=
−
1
/
x
i
∂
2
H
∂
x
i
∂
x
j
=
0
,
j
≠
i
\begin{aligned} \frac{\partial^{2} H}{\partial x_{i}^{2}} &=-1 / x_{i} \\ \frac{\partial^{2} H}{\partial x_{i} \partial x_{j}} &=0, j \neq i \end{aligned}
∂xi2∂2H∂xi∂xj∂2H=−1/xi=0,j=i因此Hessian矩阵
为
[
−
1
/
x
1
⋯
0
⋯
.
⋅
⋯
0
⋯
−
1
/
x
n
]
\left[\begin{array}{ccc} -1 / x_{1} & \cdots & 0 \\ \cdots & . \cdot & \cdots \\ 0 & \cdots & -1 / x_{n} \end{array}\right]
−1/x1⋯0⋯.⋅⋯0⋯−1/xn
由于
x
i
>
0
x_{i}>0
xi>0, 该矩阵负定, 熵是凹函数, 有极大值。因此当
x
i
=
1
/
n
x_{i}=1 / n
xi=1/n 时熵有极大值。如果定义:
0
log
0
=
0
0 \log 0=0
0log0=0显然它与下面的极限是一致的:
lim
x
→
0
x
log
x
=
0
\lim _{x \rightarrow 0} x \log x=0
x→0limxlogx=0则当某一个
x
i
=
1
x_{i}=1
xi=1, 其他
x
j
=
0
,
j
≠
i
x_{j}=0, j \neq i
xj=0,j=i 的时熵有极小值 0
H
=
0
log
0
+
…
+
1
log
1
+
…
+
0
log
0
=
0
\begin{aligned} H &=0 \log 0+\ldots+1 \log 1+\ldots+0 \log 0 \\ &=0 \end{aligned}
H=0log0+…+1log1+…+0log0=0除此情况之外, 只要满足
0
<
x
i
<
1
0<x_{i}<1
0<xi<1, 则
log
x
i
<
0
\log x_{i}<0
logxi<0 , 因此
−
x
i
log
x
i
>
0
-x_{i} \log x_{i}>0
−xilogxi>0上面这些结果说明熵是非负的,当且仅当随机变量取某一值的概率为 1 , 取其他值的概率为 0 时熵有极小值 0 。此时随机变量退化成普通的变量, 取值固定。而当随机变量取所有值的概率相等时即均匀分布时熵有极大值。故熵的范围为:
0
≤
H
(
p
)
≤
log
n
0 \leq H(p) \leq \log n
0≤H(p)≤logn
二、交叉熵
1 定义
交叉熵的定义与熵类似, 不同的是定义在两个概率分布而不是一个概率分布之上。
对于离散型随机变量, 交叉熵定义为:
H ( p , g ) = − ∑ x p ( x ) log q ( x ) H(p, g)=-\sum_{x} p(x) \log q(x) H(p,g)=−x∑p(x)logq(x)其中 x x x 为离散型随机变量, p ( x ) p(x) p(x) 和 q ( x ) q(x) q(x) 是它的两个概率分布。
对于连续型概率分布, 交叉熵定义为:
∫
x
p
(
x
)
log
q
(
x
)
d
x
=
E
p
[
−
log
q
]
\int_{x} p(x) \log q(x) d x=E_{p}[-\log q]
∫xp(x)logq(x)dx=Ep[−logq]如果两个概率分布完全相等, 则交叉熵退化成熵。交叉熵衡量了两个概率分布的差异:
- 其值越大, 两个概率分布相差越大.
- 其值越小,则两个概率分布的差异越小.
2 性质
交叉熵函数有如下性质:
- 交叉熵损失函数是凸函数
- 当两个分布相等的时候, 交叉熵有极小值。
证明同样用拉格朗日乘子法,并验证函数凹凸性即可。
假设第一个概率分布固定即
p
(
x
)
p(x)
p(x) 为常数
a
i
a_i
ai, 此时交叉熵为如下形式的函数:
H
(
x
)
=
−
∑
i
=
1
n
a
i
log
x
i
H(x)=-\sum_{i=1}^{n} a_{i} \log x_{i}
H(x)=−i=1∑nailogxi约束条件为:
−
∑
i
=
1
n
x
i
=
1
-\sum_{i=1}^{n} x_{i}=1
−i=1∑nxi=1构造拉格朗日乘子函数
L
(
x
,
λ
)
=
−
∑
i
=
1
n
a
i
log
x
i
+
λ
(
∑
i
=
1
n
x
i
−
1
)
L(x, \lambda)=-\sum_{i=1}^{n} a_{i} \log x_{i}+\lambda\left(\sum_{i=1}^{n} x_{i}-1\right)
L(x,λ)=−i=1∑nailogxi+λ(i=1∑nxi−1)
对所有变量求偏导数, 并令偏导数为 0 , 有
−
a
i
x
i
+
λ
=
0
∑
i
=
1
n
x
i
=
1
∑
i
=
1
n
a
i
=
1
\begin{gathered} -\frac{a_{i}}{x_{i}}+\lambda=0 \\ \sum_{i=1}^{n} x_{i}=1 \\ \sum_{i=1}^{n} a_{i}=1 \end{gathered}
−xiai+λ=0i=1∑nxi=1i=1∑nai=1最后可以解得
λ
=
1
x
i
=
a
i
\begin{aligned} \lambda &=1 \\ x_{i} &=a_{i} \end{aligned}
λxi=1=ai交叉熵函数的Hessian矩阵为:
[
a
1
/
x
1
2
⋯
0
⋯
⋯
⋯
0
⋯
a
n
/
x
n
2
]
\left[\begin{array}{ccc} a_{1} / x_{1}^{2} & \cdots & 0 \\ \cdots & \cdots & \cdots \\ 0 & \cdots & a_{n} / x_{n}^{2} \end{array}\right]
a1/x12⋯0⋯⋯⋯0⋯an/xn2
该矩阵正定, 因此交叉熵损失函数是凸函数, 上面的极值点是极小值点。
三、 应用:logistics回归
1 交叉熵损失函数
在Logistics回归中,交叉熵损失函数定义为:
Loss
=
−
∑
i
=
1
n
y
i
log
y
i
′
\operatorname{Loss}=-\sum_{i=1}^{n} y_{i} \log y_{i}^{\prime}
Loss=−i=1∑nyilogyi′其中:
y
i
y_i
yi 为标签值概率分布(取值为0或1),
y
i
′
y i^{\prime}
yi′ 为预值测概率分布,所以最小化Loss函数,等价于最小化交叉熵,而交叉熵取得最小时,预测值的概率分布与标签值的概率分布最接近!
事实上可以将 y i ′ = 1 1 + e − W T X y_i'=\frac{1}{1+e^{-W^TX}} yi′=1+e−WTX1,代入Loss函数,通过和上面类似的证明,可以证明:
- Loss函数的Hessian矩阵半正定,目标函数是凸函数。
- logistic回归求解的优化问题是不带约束条件的凸优化问题。
- 可以证明,如果使用欧氏距离作为目标函数则无法保证目标函数是凸函数。
这是使用交叉熵而不使用欧氏距离作为logistic回归的目标函数的主要原因。
2 计算实例
假设有一个3分类问题, 某个样例的正确答案是 ( 1 , 0 , 0 ) (1,0,0) (1,0,0):
- 甲模型经过softmax回归之后的预测答案是 ( 0.5 , 0.2 , 0.3 ) (0.5,0.2,0.3) (0.5,0.2,0.3)
- 乙模型经过softmax回归之后的预测答案是 ( 0.7 , 0.1 , 0.2 ) (0.7,0.1,0.2) (0.7,0.1,0.2)
由交叉熵定义: H ( p , q ) = − ∑ x p ( x ) log q ( x ) 可得: H ( ( 1 , 0 , 0 ) , ( 0.5 , 0.2 , 0.3 ) ) = − log 0.5 ≈ 0.301 H ( ( 1 , 0 , 0 ) , ( 0.7 , 0.1 , 0.2 ) ) = − log 0.7 ≈ 0.155 \begin{aligned} 由交叉熵定义:\\ &\boldsymbol{H}(\boldsymbol{p}, \boldsymbol{q})=-\sum_{\boldsymbol{x}} \boldsymbol{p}(\boldsymbol{x}) \log \boldsymbol{q}(\boldsymbol{x}) \\ 可得:\\ &\boldsymbol{H}((1,0,0),({0 . 5}, {0 . 2}, {0 . 3}))=-\log 0.5 \approx 0.301 \\ &\boldsymbol{H}((1,0,0),(0.7,0.1,0.2))=-\log 0.7 \approx 0.155 \end{aligned} 由交叉熵定义:可得:H(p,q)=−x∑p(x)logq(x)H((1,0,0),(0.5,0.2,0.3))=−log0.5≈0.301H((1,0,0),(0.7,0.1,0.2))=−log0.7≈0.155
四、 应用:softmax
softmax回归经常被用作神经网络的最后一层,完成多分类任务,现在在分类任务训练时采用的损失函数一般为交叉熵,原因如下:
- 在神经网络的早期,更多的使用了欧氏距离损失函数,后来对分类任务交叉熵使用的更多
- 对于分类问题,交叉熵一般比欧氏距离有更好的效果,可以收敛到更好的局部最优解。
假设神经网络的原始输出为
y
1
,
y
2
,
…
.
,
y
n
y_{1}, y_{2}, \ldots . , y_{n}
y1,y2,….,yn, 那么经过Softmax回归处理之后的输出为:
y
′
=
softmax
(
y
i
)
=
e
y
i
∑
j
=
1
n
e
y
j
y^{\prime}=\operatorname{softmax}\left(y_{i}\right)=\frac{e^{y_{i}}}{\sum_{j=1}^{n} e^{y_{j}}}
y′=softmax(yi)=∑j=1neyjeyi
以上可以看出:
∑
y
′
=
1
\sum y^{\prime}=1
∑y′=1。这也是为什么softmax层的每个节点的输出值成为了概率和为1的概率分布。
- 标签是 [ 0 , 0 , 1 , 0 , … . 0 , 0 ] [0,0,1,0, \ldots .0,0] [0,0,1,0,….0,0] 这种形式
- 通过softmax实际的输出是 [ 0.01 , 0.01 , 0.6 , … . 0.02 , 0.01 ] [0.01,0.01,0.6, \ldots .0 .02,0.01] [0.01,0.01,0.6,….0.02,0.01] 这种形式
所以可以用交叉熵作为损失函数,当交叉熵最小时,两个概率分布最相近,实际输出越接近标签!
五、KL散度
有了以上信息论中的相关知识后, 可以进一步引出KL散度。
K L \mathrm{KL} KL 散度又可称为相对熵,描述两个概率分布 P \mathrm{P} P 和 Q \mathrm{Q} Q 的差异或相似性, 用 D K L ( P ∥ Q ) D_{K L}(P \| Q) DKL(P∥Q) 表示: D K L ( P ∥ Q ) = H ( P , Q ) − H ( P ) = ∑ i P ( x i ) log 1 Q ( x i ) − ∑ i P ( x i ) log 1 P ( x i ) = ∑ i P ( x i ) log P ( x i ) Q ( x i ) \begin{aligned} D_{K L}(P \| Q) &=H(P, Q)-H(P) \\ &=\sum_i P\left(x_i\right) \log \frac{1}{Q\left(x_i\right)}-\sum_i P\left(x_i\right) \log \frac{1}{P\left(x_i\right)} \\ &=\sum_i P\left(x_i\right) \log \frac{P\left(x_i\right)}{Q\left(x_i\right)} \end{aligned} DKL(P∥Q)=H(P,Q)−H(P)=i∑P(xi)logQ(xi)1−i∑P(xi)logP(xi)1=i∑P(xi)logQ(xi)P(xi)
很显然, 散度越小, 说明概率 Q Q Q 与概率 P P P 之间越接近, 那么估计的概率分布与真实的概率分布也就越接近。 K L \mathrm{KL} KL 散度的性质:
- 非对称性: D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{K L}(P \| Q) \neq D_{K L}(Q \| P) DKL(P∥Q)=DKL(Q∥P)
- D K L ( P ∥ Q ) ⩾ 0 D_{K L}(P \| Q) \geqslant 0 DKL(P∥Q)⩾0, 仅在 P = Q P=Q P=Q 时等于0
证明性质2:
D
K
L
(
P
∥
Q
)
=
∑
i
P
(
x
i
)
log
P
(
x
i
)
Q
(
x
i
)
=
−
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
D_{K L}(P \| Q)=\sum_i P\left(x_i\right) \log \frac{P\left(x_i\right)}{Q\left(x_i\right)}=-\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)}
DKL(P∥Q)=i∑P(xi)logQ(xi)P(xi)=−i∑P(xi)logP(xi)Q(xi)
由于
log
\log
log 函数是凹的, 由 Jensen 不等式可得:
∑
i
λ
i
f
(
x
i
)
⩽
f
(
∑
i
λ
i
x
i
)
\sum_i \lambda_i f\left(x_i\right) \leqslant f\left(\sum_i \lambda_i x_i\right)
i∑λif(xi)⩽f(i∑λixi)那么:
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
⩽
log
(
∑
i
P
(
x
i
)
Q
(
x
i
)
P
(
x
i
)
)
=
log
(
∑
i
Q
(
x
i
)
)
=
log
1
=
0
\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)} \leqslant \log \left(\sum_i P\left(x_i\right) \frac{Q\left(x_i\right)}{P\left(x_i\right)}\right)=\log \left(\sum_i Q\left(x_i\right)\right)=\log 1=0
i∑P(xi)logP(xi)Q(xi)⩽log(i∑P(xi)P(xi)Q(xi))=log(i∑Q(xi))=log1=0
因此:
D
K
L
(
P
∥
Q
)
=
−
∑
i
P
(
x
i
)
log
Q
(
x
i
)
P
(
x
i
)
⩾
0
D_{K L}(P \| Q)=-\sum_i P\left(x_i\right) \log \frac{Q\left(x_i\right)}{P\left(x_i\right)} \geqslant 0
DKL(P∥Q)=−i∑P(xi)logP(xi)Q(xi)⩾0
六、参考资料
- 理解熵和交叉熵