神经网络中信息熵及梯度计算
信息熵
信息熵
- 热力学中的熵:是表示分子状态混乱程度的物理量
- 信息论中的熵:用来描述信息源的不确定性的大小
- 信源信息的不确定性函数f通常满足两个条件:
- 是概率p的单调递减函数
- 两个独立符号额所产生的不确定性应等于各自不确定性之和,即f(p1,p2) = f(p1)+f(p2)
-
对数函数同时满足这两个条件:f§ = log(1/p) = -log§
-
信息熵:要考虑信源所以可能发生情况的平均不确定性。若信源符号有n中取值:U1,…,Ui,…,Un,对应的概率分别为p1,…,pi,…,pn,且各种出现彼此独立。此时信源的平均不确定性应当为单个符号不确定性-log(pi)的统计平均值(E),称为信息熵,即
H ( U ) = E [ − log ( p i ) ] = − ∑ n = 1 n p i log ( p i ) = ∑ n = 1 n p i log ( 1 p i ) H(U) = E[-\log(p_i)] = -\sum_{n=1}^{n}p_i\log(p_i) = \sum_{n=1}^{n}p_i\log(\frac{1}{p_i}) H(U)=E[−log(pi)]=−n=1∑npilog(pi)=n=1∑npilog(pi1)
交叉熵
-
定义:交叉熵是信息论中一个重要的概念,用于表征两个变量概率分布P,Q(假设P表示正式分布,Q为模型预测的分布)的差异性。交叉熵越大,两个变量差异程度越大。
-
交叉熵公式:
H ( P , Q ) = − ∑ x ε X P ( x ) log ( Q ( x ) ) = ∑ x ε X P ( x ) log ( 1 Q ( x ) ) H(P,Q) = -\sum_{x\varepsilon X}P(x)\log(Q(x)) = \sum_{x\varepsilon X}P(x)\log(\frac{1}{Q(x)}) H(P,Q)=−xεX∑P(x)log(Q(x))=xεX∑P(x)log(Q(x)1) -
应用:在深度学习应用比较广泛,一般作为神经网络的组织函数,衡量深度学习模型预测概率分布与真实分布的差异
相对熵
-
也称为KL散度(简称KLD)、信息散度、信息增益
-
定义:是交叉熵与信息熵的差值。表示用分布Q模拟真实分布P,所需的额外信息。若相对熵越小,则表明需要的额外信息越少,P接近Q。
-
计算公式:
D K L ( P ∣ ∣ Q ) = ∑ x ε X P ( x ) log ( 1 Q ( x ) ) − ∑ x ε X P ( x ) log ( 1 P ( x ) ) D_{KL}(P||Q) = \sum_{x\varepsilon X}P(x)\log(\frac{1}{Q(x)}) - \sum_{x\varepsilon X}P(x)\log(\frac{1}{P(x)}) DKL(P∣∣Q)=xεX∑P(x)log(Q(x)1)−xεX∑P(x)log(P(x)1) -
相对熵的性质:
- 具有不对称性:
D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q) \neq D_{KL}(Q||P) DKL(P∣∣Q)=DKL(Q∣∣P)
- 具有不对称性:
- 具有非负性:
D K L ( P ∣ ∣ Q ) ≥ 0 D_{KL}(P||Q) \geq 0 DKL(P∣∣Q)≥0
JS散度
用于两个概率分布的相似度。
-
具有对称性:由于KL散度不具有对称性,因此JS散度在KL散度的基础上进行了改进。
-
计算公式:
J S ( P 1 ∣ ∣ P 2 ) = 1 2 K L ( P 1 ∣ ∣ p 1 + p 2 2 ) + 1 2 K L ( P 2 ∣ ∣ p 1 + p 2 2 ) JS(P_1||P_2) = \frac{1}{2}KL(P_1||\frac{p_1+p_2}{2}) + \frac{1}{2}KL(P_2||\frac{p_1+p_2}{2}) JS(P1∣∣P2)=21KL(P1∣∣2p1+p2)+21KL(P2∣∣2p1+p2)
联合熵(复合熵)
- 用H(X,Y)表示
- 两个随机变量X,Y的联合分布的熵,形成联合熵
条件熵
- 用H(X|Y) 表示在随机变量Y条件下随机变量X的不确定性。
- H(X|Y) = H(X,Y) - H(Y),表示(X,Y)的联合熵减去Y单独发生包含的熵。
互信息
-
定义:可以被看成一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不确定性。
-
具有对称性:
I ( X ; Y ) = I ( Y ; X ) I(X;Y) = I(Y;X) I(X;Y)=I(Y;X) -
计算公式:
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = H ( X ) + H ( Y ) − H ( X , Y ) = ∑ x p ( x ) log 1 p ( x ) + ∑ y p ( y ) log 1 p ( y ) − ∑ x , y p ( x , y ) log 1 p ( x , y ) I(X;Y) = H(X) - H(X|Y) = H(X) + H(Y) - H(X,Y) = \sum_{x}p(x)\log\frac{1}{p(x)} + \sum_{y}p(y)\log\frac{1}{p(y)} - \sum_{x,y}p(x,y)\log\frac{1}{p(x,y)} I(X;Y)=H(X)−H(X∣Y)=H(X)+H(Y)−H(X,Y)=x∑p(x)logp(x)1+y∑p(y)logp(y)1−x,y∑p(x,y)logp(x,y)1
反向传播中的梯度
反向传播(BP)算法的学习过程由正向传播过程和反向传播过程组成。
- 正向传播:输入层–>隐藏层–>输出层,经过逐层处理到达输出层。
- 反向传播:从输出层自顶向下逐层求出损失函数和各个神经元的梯度作为修改权值的依据,当误差达到预期的期望值或者迭代次数达到预定的阈值时,学习结束。
- 反向传播需要通过递归调用链规则计算表达式的梯度。
梯度的简单解释
-
一般形式:
d f ( x ) d x = lim h → 0 = lim h → 0 f ( x + h ) − f ( x ) h \frac{df(x)}{dx} = \lim_{h \to 0} = \lim_{h \to 0}\frac{f(x+h)-f(x)}{h} dxdf(x)=h→0lim=h→0limhf(x+h)−f(x)- 例1:对于函数f(x,y) = xy,
∂
f
∂
x
=
y
,
∂
f
∂
y
=
x
\frac{\partial f}{\partial x} = y,\frac{\partial f}{\partial y} = x
∂x∂f=y,∂y∂f=x ,由于梯度
∇
f
\nabla f
∇f实际上是偏导向量,因此我们有:
∇ f = [ ∂ f ∂ x , ∂ f ∂ y ] \nabla f = [\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}] ∇f=[∂x∂f,∂y∂f]
- 例1:对于函数f(x,y) = xy,
∂
f
∂
x
=
y
,
∂
f
∂
y
=
x
\frac{\partial f}{\partial x} = y,\frac{\partial f}{\partial y} = x
∂x∂f=y,∂y∂f=x ,由于梯度
∇
f
\nabla f
∇f实际上是偏导向量,因此我们有:
链规则对复合表达式计算梯度
例:假设复合表达式为f(u,v,w) = (u + v)w。令q = u + v,则f = qw,则有
∂
f
∂
q
=
w
,
∂
f
∂
w
=
q
,
∂
q
∂
u
=
1
,
∂
q
∂
w
=
1
\frac{\partial f}{\partial q} = w,\frac{\partial f}{\partial w} = q,\frac{\partial q}{\partial u} = 1,\frac{\partial q}{\partial w} = 1
∂q∂f=w,∂w∂f=q,∂u∂q=1,∂w∂q=1,在神经网络中f一般是作为损失函数,输入u,v,w包括输入的数据集和权重。
- 使用链规则,则有 ∂ f ∂ u = ∂ f ∂ q ∗ ∂ q ∂ u = w ∗ 1 , ∂ f ∂ v = ∂ f ∂ q ∗ ∂ q ∂ v = w ∗ 1 , ∂ f ∂ w = q \frac{\partial f}{\partial u} = \frac{\partial f}{\partial q}*\frac{\partial q}{\partial u} = w*1, \frac{\partial f}{\partial v} = \frac{\partial f}{\partial q}*\frac{\partial q}{\partial v} = w*1, \frac{\partial f}{\partial w} = q ∂u∂f=∂q∂f∗∂u∂q=w∗1,∂v∂f=∂q∂f∗∂v∂q=w∗1,∂w∂f=q
- 假设u=1;v=2;w=-3
- 正向传播:q = u + v,f=q*w
- 反向传播: ∂ f ∂ q = w , ∂ f ∂ u = 1 ∗ ∂ f ∂ q , ∂ f ∂ v = 1 ∗ ∂ f ∂ q , ∂ f ∂ w = q \frac{\partial f}{\partial q} = w,\frac{\partial f}{\partial u} = 1 * \frac{\partial f}{\partial q},\frac{\partial f}{\partial v} = 1 * \frac{\partial f}{\partial q},\frac{\partial f}{\partial w} = q ∂q∂f=w,∂u∂f=1∗∂q∂f,∂v∂f=1∗∂q∂f,∂w∂f=q
Sigmoid门的反向传播
- sigmoid函数的作用:对数值做规范化处理
- 函数公式: σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e−z1,则 d σ ( z ) d z = e − z ( 1 + e − z ) 2 = ( 1 + e − z − 1 ) ( 1 + e − z ) ∗ 1 1 + e z = ( 1 − σ ( z ) ) ∗ σ ( z ) \frac{d\sigma(z)}{dz} = \frac{e^{-z}}{(1+e^{-z})^2} = \frac{(1+e^{-z}-1)}{(1+e^{-z})}*\frac{1}{1+e^z} = (1 - \sigma(z)) * \sigma(z) dzdσ(z)=(1+e−z)2e−z=(1+e−z)(1+e−z−1)∗1+ez1=(1−σ(z))∗σ(z)
- 假设有
f
(
w
,
x
)
=
1
1
+
e
−
(
w
0
x
0
+
w
1
x
1
+
w
2
)
f(w,x) = \frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}
f(w,x)=1+e−(w0x0+w1x1+w2)1,则其正、反向传播过程为:
- import math,w = [3,4,5],x = [6,7]
- 正向传播:dot = w[0]*x[0] + w[1]*x[1] + w[2],f = 1.0/(1+math.exp(-dot))
- 反向传播:df/d(dot) = (1-f)*f,df/dx = [w[0] * df/d(dot), w[1] * df/d(dot)], df/dw = [x[0] * df/d(dot), x[1] * df/d(dit), 1 * df/d(dot)]
矩阵-矩阵相乘的梯度
矩阵-矩阵相乘的梯度需要注意维度和转置操作。例如,D = W * X,在深度学习中W一般标识权值矩阵,X表示为样本的特征矩阵。
- 正向传播:W=np.random.randn(5,10),X = np.random.randn(10,2),D = W.dot(X)
- 反向传播:dD = np.random.randn(*D.shape)#随机初始化来模拟D的梯度,dD/dW = dD.dot(X.T),dD/dX = W.T.dot(dD)
感知机
什么是感知机(perceptron)
-
感知机由Rosenblatt提出,是神经网络的基础
-
感知机是两类分类的线性分类模型。假设输入为实例样本的特征向量x,输出为实例样本的类别y。则由输入空间到输出空间的如下函数称之为感知机。
y = g ( ∑ i = 1 n w i x i + b ) y = g(\sum_{i=1}{n}w_ix_i + b) y=g(∑i=1nwixi+b) 或者 y = g(w * x +b),w和b称为感知机模型的参数,w是权值向量,b为偏置,w*x为权值向量和特征向量的内积。
-
g为激励函数,已达到对样本分类的目的。Rosenblatt的感知机使用阶跃函数作为激励函数,其函数公式如下:
g ( x ) = { + 1 , z ≥ 0 − 1 , z < 0 g(x) = \begin{cases} +1,z\geq 0 \\ -1,z<0 \end{cases} g(x)={+1,z≥0−1,z<0 -
激励函数的目的:对输出值进行规范
-
感知机的原理可概括为下图:
感知机模型的损失函数
- 损失函数的选择采用误分类点到超平面的距离(这里采用点到直线的距离): 1 ∣ ∣ w ∣ ∣ ∣ w ∗ x i + b ∣ \frac{1}{||w||}|w*x_i + b| ∣∣w∣∣1∣w∗xi+b∣,其中 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是L2范数
- 对于误分类点 ( x i , y i ) (x_i,y_i) (xi,yi)来说: − y i ( w ∗ x i + b ) > 0 -y_i(w*x_i + b) > 0 −yi(w∗xi+b)>0总是成立。则误分类点到超平面的据类可以写成 − 1 ∣ ∣ w ∣ ∣ y i ∣ w ∗ x i + b ∣ -\frac{1}{||w||}y_i|w*x_i + b| −∣∣w∣∣1yi∣w∗xi+b∣,从而所以误分类点到超平面的总距离为 − 1 ∣ ∣ w ∣ ∣ ∑ x i ε M y i ∣ w ∗ x i + b ∣ -\frac{1}{||w||}\sum_{x_i \varepsilon M } y_i|w*x_i + b| −∣∣w∣∣1∑xiεMyi∣w∗xi+b∣。
- 不考虑 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1,就得到极小化损失函数 L ( w , b ) = − 1 ∣ ∣ w ∣ ∣ ∑ x i ε M y i ∣ w ∗ x i + b ∣ L(w,b) = -\frac{1}{||w||}\sum_{x_i \varepsilon M } y_i|w*x_i + b| L(w,b)=−∣∣w∣∣1∑xiεMyi∣w∗xi+b∣。其中M为误分类点的集合。
感知机模型的优化-随机梯度下降法
-
优化目的:找到使损失函数 L ( θ ) = L ( w , b ) = − 1 ∣ ∣ w ∣ ∣ ∑ x i ε M y i ∣ w ∗ x i + b ∣ L(\theta) = L(w,b) = -\frac{1}{||w||}\sum_{x_i \varepsilon M } y_i|w*x_i + b| L(θ)=L(w,b)=−∣∣w∣∣1∑xiεMyi∣w∗xi+b∣变小的参数 θ \theta θ。
-
模型参数 θ \theta θ,即w和b,的更新公式为 θ : = θ − η ∇ θ L ( θ ) \theta:= \theta - \eta \nabla_\theta L(\theta) θ:=θ−η∇θL(θ)(其中 η \eta η是步长, 0 < η ≤ 1 , ∇ θ L ( θ ) 0 < \eta \leq 1,\nabla_\theta L(\theta) 0<η≤1,∇θL(θ)是梯度),对w和b求的两个偏导分别为:
∂ L ( θ ) ∂ w = − ∑ x i ε M y i x i , ∂ L ( θ ) ∂ b = − ∑ x i ε M y i \frac{\partial L(\theta)}{\partial w} = -\sum_{x_i \varepsilon M}y_ix_i, \frac{\partial L(\theta)}{\partial b} = -\sum_{x_i \varepsilon M}y_i ∂w∂L(θ)=−xiεM∑yixi,∂b∂L(θ)=−xiεM∑yi -
感知机算法的损失函数极小化过程是每次随机选择一个误分类点使其梯度下降。因此,随机选择一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi),对w和b进行更新。即
w : = w + η y i x i , b : = b + η y i w := w + \eta y_ix_i, b := b + \eta y_i w:=w+ηyixi,b:=b+ηyi
感知机学习算法
-
输入训练数据据 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y n ) T = {(x_1,y_1),(x_2,y_2),...,(x_N,y_n)} T=(x1,y1),(x2,y2),...,(xN,yn),其中 x i ε R n , y i ε − 1 , + 1 , i = 1 , 2 , . . . , N . x_i \varepsilon R^n,y_i \varepsilon {-1,+1},i = 1,2,...,N. xiεRn,yiε−1,+1,i=1,2,...,N.学习速率为 η ( 0 < η ≤ 1 ) \eta(0 < \eta \leq 1) η(0<η≤1)。
-
输出:感知机y = g(w * x + b)的参数(w,b)
-
训练学习过程:
-
选取初始值 w 0 , b 0 w_0,b_0 w0,b0
-
在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
-
如果 y i ( w ∗ x i + b ) ≤ 0 y_i(w * x_i + b) \leq 0 yi(w∗xi+b)≤0(误分类了),更新参数
w : = w + η y i x i , b : = b + η y i w := w + \eta y_ix_i, b := b + \eta y_i w:=w+ηyixi,b:=b+ηyi -
转至2,直到训练集中没有误分类点。
-
感知机迭代实例–学习笔记
-
已知:
- 正样本点: x 1 = ( 3 , 3 ) T , x 2 = ( 4 , 3 ) T x1 = (3,3)^T,x2 = (4,3)^T x1=(3,3)T,x2=(4,3)T
- 负样本点: x 3 = ( 1 , 1 ) T x3 = (1,1)^T x3=(1,1)T(正例的输出y为1,负例的输出y为-1)
- 求感知机模型f(x) = g(w * x + b),其中 w = ( w ( 1 ) , w ( 2 ) ) T , x = ( x ( 1 ) , y ( 2 ) ) w = (w^{(1)},w^{(2)})^T, x= (x^{(1)},y^{(2)}) w=(w(1),w(2))T,x=(x(1),y(2)).
-
求解:构建最优化问题 min w , b = − ∑ x i ε M y i ( w ∗ x i + b ) \min\limits_{w,b} = -\sum_{x_i \varepsilon M}y_i(w * x_i + b) w,bmin=−∑xiεMyi(w∗xi+b)。其中M为误分类点的集合。求解w,b, η = 1 \eta = 1 η=1。
-
去初始值 w 0 = ( 0 , 0 ) T , b 0 = 0 w_0 = (0,0)^T,b_0 = 0 w0=(0,0)T,b0=0
-
对取样本点 x 1 = ( 3 , 3 ) T , y 1 ( w 0 ∗ x 1 + b 0 ) = 0 x_1 = (3,3)^T,y_1(w_0 * x_1 + b_0) = 0 x1=(3,3)T,y1(w0∗x1+b0)=0,(小于等于0表示分类错误)未能正确分类,更新w,b,得到线性模型$f1 = w_1 * x + b_1 = 3x^{(1)} + 3x^{(2)} + 1
$
w 1 : = w 0 + η y 1 x 1 = ( 3 , 3 ) T , b 1 : = b 0 + η y 1 = 1 w_1 := w_0 + \eta y_1x_1 = (3,3)^T, b1 := b0 + \eta y_1 = 1 w1:=w0+ηy1x1=(3,3)T,b1:=b0+ηy1=1 -
对样本点x1,x2,显然 y i ( w 0 ∗ x i + b 0 ) > 0 y_i(w_0 * x_i + b_0) > 0 yi(w0∗xi+b0)>0,被正确分类;对样本点 x 3 = ( 1 , 1 ) T , y 3 ( w 0 ∗ x 3 + b 0 ) < 0 x3 = (1,1)^T, y_3(w_0 * x_3 + b_0) < 0 x3=(1,1)T,y3(w0∗x3+b0)<0,被误分类,更新w,b:
w 2 : = w 1 + η y 3 x 3 = ( 2 , 2 ) T , b 2 : = b 1 + η y 3 = 0 w_2 := w_1 + \eta y_3x_3 = (2,2)^T, b2 := b1 + \eta y_3 = 0 w2:=w1+ηy3x3=(2,2)T,b2:=b1+ηy3=0
得到新的线性模型 f 2 = w 2 ∗ x + b 2 = 2 x ( 1 ) + 2 x ( 2 ) + 0 f2 = w_2 * x + b_2 = 2x^{(1)} + 2x^{(2)} + 0 f2=w2∗x+b2=2x(1)+2x(2)+0 -
如此继续下去,直到
w 7 = ( 1 , 1 ) T , b 7 = − 3 w_7 = (1,1)^T,b_7 = -3 w7=(1,1)T,b7=−3,得到线性模型 w 7 ∗ x + b 7 = 1 x ( 1 ) + 1 x ( 2 ) − 3 w_7 * x + b_7 = 1x^{(1)} + 1x^{(2)} - 3 w7∗x+b7=1x(1)+1x(2)−3
对所有数据点 y i ( w 7 ∗ x i + b 7 ) > 0 y_i(w_7 * x_i + b_7) > 0 yi(w7∗xi+b7)>0,没有误分类点,损失函数达到极小。
-