深度学习 | 您所在的位置:网站首页 › 随机梯度下降推导 › 深度学习 |
深度学习 --- 梯度下降推导--交叉熵误差函数
线性回归复合函数求导偏导数预测函数损失函数 或者 误差函数梯度下降推导概念和公式定义梯度推导对单个样本推导
对单个样本推导对 m 个样本推导
梯度下降的算法调优
线性回归
线性回归的推导可以看我的另一篇博客 深度学习–2.线性回归 线性回归就是在二元分类中找到一条合适的分界线,其中二元分类中其结果只能后两种并且互斥,其线性方程为 y ^ = W T x + b \hat{y} = W^Tx + b y^=WTx+b 但这不是最好的二元分类方程,因为我们想要得到的结果是0–1的概率,但是线性方程的结果定义域一般是实数集(R),所以我们的线性回归的输出变为
y
^
=
σ
(
W
T
x
+
b
)
\hat{y} = \sigma (W^Tx + b)
y^=σ(WTx+b)
z
=
W
T
x
+
b
z = W^Tx + b
z=WTx+b
σ
(
z
)
=
1
1
+
e
−
z
\sigma (z) = \frac{1}{1 + e^{-z}}
σ(z)=1+e−z1
σ
\sigma
σ函数的图像如下图所示,是一个x
∈
\in
∈R,而输出是一个(0,1)的开区间的概率,这就符合我们的二元分类的结果了 假设 函数 μ = φ ( x ) \mu = \varphi(x) μ=φ(x)在 x 0 x_0 x0出有导数 μ ′ = φ ′ ( x 0 ) \mu '= \varphi'(x_0) μ′=φ′(x0)函数 y = f ( μ ) y=f(\mu) y=f(μ)在对应点 μ 0 = φ ( x 0 ) \mu_0 = \varphi(x_0) μ0=φ(x0)也有导数 y μ ′ = f ′ ( μ ) y_{\mu}' = f'(\mu) yμ′=f′(μ),于是符合函数 y = f ( φ ( x ) ) y=f(\varphi(x)) y=f(φ(x))在上述的点 x 0 x_0 x0也有导数,它等于 f ( μ ) f(\mu) f(μ)的导数与 φ \varphi φ的导数的乘积: [ f ( φ ( x 0 ) ) ] ′ = f μ ′ ( φ ( x 0 ) ) . φ ′ ( x 0 ) [f(\varphi(x_0))]' = f_{\mu}'(\varphi(x_0)) . \varphi'(x_0) [f(φ(x0))]′=fμ′(φ(x0)).φ′(x0) 更简洁的表示为 y x ′ = y μ ′ . μ x ′ y_{x}' = y_{\mu}' . \mu_{x}' yx′=yμ′.μx′ 例题 y = l n ( s i n x ) y = ln( sinx) y=ln(sinx),求导数 设 y = l n ( u ) , u = s i n x y = ln(u), u = sinx y=ln(u),u=sinx,根据求导法则 y u ′ = ( l n ( u ) ) ′ = 1 u y'_{u} = (ln(u))' = \frac{1}{u} yu′=(ln(u))′=u1 u ′ = ( s i n ( x ) ) ′ = c o s ( x ) u' = (sin(x))' = cos(x) u′=(sin(x))′=cos(x) y x ′ = 1 s i n ( x ) . ( s i n ( x ) ) ′ = c o s x s i n x = c t g x y_x' = \frac{1}{sin(x)} . (sin(x))' = \frac{cosx}{sinx} = ctgx yx′=sin(x)1.(sin(x))′=sinxcosx=ctgx 偏导数有的函数不止有一个未知数,还可能有多个未知数,这个时候直接求导就有点困难,假设在三维空间里,x轴和y轴的变化共同决定z轴的变化,我先研究x方向的导数,那么函数在x方向的导数叫做这个函数在x轴的偏导数 求导原则是对一个变量求导,其他变量看作常数 例题 求 u = x y u = x^y u=xy(x>0),偏导数 ϑ u ϑ x = y . x y − 1 , ϑ u ϑ y = x y . l n x \frac{\vartheta u}{\vartheta x} = y.x^{y-1}, \frac{\vartheta u}{\vartheta y} = x^y.lnx ϑxϑu=y.xy−1,ϑyϑu=xy.lnx 预测函数可以理解为我们要训练的模型 我们知道在 logistic回归模型中的参数 W(权重) 和 b(偏差) 是很重要的,那我们就需要训练 logistic 回归模型来找到合适的参数 W 和 b,那就需要要给预测函数,我们给出如下定义 y i ^ = σ ( W T x i + b ) \hat{y^i} = \sigma (W^Tx^i + b) yi^=σ(WTxi+b), where σ ( z ) = 1 1 + e − z \sigma (z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1 Given { ( x ( 1 ) , y ( 1 ) ) , . . . . , ( x ( m ) , y ( m ) ) } \{ (x^{(1)}, y^{(1)}), .... , (x^{(m)}, y^{(m)})\} {(x(1),y(1)),....,(x(m),y(m))} , want y ( i ) ^ ≈ y ( i ) \hat{y^{(i)}} \approx y^{(i)} y(i)^≈y(i) 我们来具体说明一下,为了让模型来通过学习调整参数,我们给出一个具有m个样本的训练集,来训练这个训练集的样本来得到预测值接近实际值。对于上面的公式,我们约定,上标i 表示第几个训练样本 损失函数 或者 误差函数你可以定义你的损失函数为预测值和真实值差的平方后的二分之一,我们可以理解为对方差进行求导,公式如下 L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat{y}, y) = \frac{1}{2}(\hat{y} - y)^2 L(y^,y)=21(y^−y)2 但是在 logistic 回归中一般不怎么用,因为当当你学习这些参数的时候,在调优参数是很可能得到的是局部最优解,而不是全局最优解。我们定义损失函数的目的是来衡量预测输出 y ^ \hat{y} y^ 和 y 的实际值有多接近,那么我们定义如下的损失函数,至于为什么这么定义何以参见该目录中 神经网络 中的 交叉熵 的讲解 L ( y ( i ) ^ , y ( i ) ) = − ( y ( i ) ln y ( i ) ^ − ( 1 − y ( i ) ) ln ( 1 − y ( i ) ^ ) ) L(\hat{y^{(i)}}, y^{(i)}) = -(y^{(i)}\ln\hat{y^{(i)}} - (1-y^{(i)})\ln(1-\hat{y^{(i)}})) L(y(i)^,y(i))=−(y(i)lny(i)^−(1−y(i))ln(1−y(i)^)) 需要说明的是:损失函数 是对于一个样本的估计,接下来我们会定义 成本函数 J, 它衡量的是全体训练样本上的表现 当 y = 1 的时候,如果 y ^ \hat{y} y^ 接近1的时候,那么损失L就接近于0 ,如果 y ^ \hat{y} y^ 接近0的时候,那么损失L就很大当 y = 0 的时候,如果 y ^ \hat{y} y^ 接近1的时候,那么损失L就很大 ,如果 y ^ \hat{y} y^ 接近0的时候,那么损失L就接近于0 梯度下降推导 概念和公式定义首先我们有如下公式定义 预测函数: y ( i ) ^ = σ ( W T x ( i ) + b ) \hat{y^{(i)}} = \sigma (W^Tx{(i)} + b) y(i)^=σ(WTx(i)+b) 激活函数:$ \sigma (z) = \frac{1}{1 + e^{-z}}$ 损失函数: L ( y ( i ) ^ , y ( i ) ) = − ( y ( i ) ln y ( i ) ^ + ( 1 − y ( i ) ) ln ( 1 − y ( i ) ^ ) ) L(\hat{y^{(i)}}, y^{(i)}) = -(y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}})) L(y(i)^,y(i))=−(y(i)lny(i)^+(1−y(i))ln(1−y(i)^)) 成本函数: J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) = − 1 m ∑ i = 1 m y ( i ) ln y ( i ) ^ + ( 1 − y ( i ) ) ln ( 1 − y ( i ) ^ ) J(w, b) = \frac{1}{m}\sum_{i=1}^{m}L(\hat{y^{(i)}}, y^{(i)}) = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}}) J(w,b)=m1∑i=1mL(y(i)^,y(i))=−m1∑i=1my(i)lny(i)^+(1−y(i))ln(1−y(i)^) 损失函数衡量单个样本的效果,对每一个样本训练,都会输出一个
y
(
i
)
^
\hat{y^{(i)}}
y(i)^,把他和对应的真标签
y
(
i
)
y^{(i)}
y(i)进行比较。 成本函数衡量W 和 b 在总样本上的效果,要想得到小的衡量成本,那么就要得到合适的W 和 b 。我们看一下梯度下降在三维空间的效果 w : = w − α ϑ J ( w , b ) ϑ w ; b : = b − α ϑ J ( w , b ) ϑ b w := w - \alpha \frac{\vartheta J(w, b)}{\vartheta w} ; b := b- \alpha \frac{\vartheta J(w, b)}{\vartheta b} w:=w−αϑwϑJ(w,b);b:=b−αϑbϑJ(w,b) 其中的$ \alpha $表示学习率,就是步进速度。我们约定dw表示 J 对 w 的导数,db 表示 J 对 b 的导数 那么更新可以写成 w : = w − α d w ; b : = b − α d b w := w - \alpha dw ; b := b- \alpha db w:=w−αdw;b:=b−αdb 我们为了刚能形象的说明梯度下降,我们在二维平面中来说明,途中可以看作w为参数,J(w)为结果的函数,我们要想得到J的最小值,就是dw为0的地方 在上面的曲线中,我们取到线上一点,做切线,可以看到,在曲线左边的切线的斜率是负的,那么改点导数也是负的,我们在这个点更新 w , 根据上面的公式, w : = w − α d w w := w - \alpha dw w:=w−αdw 因为dw为负,效果就是w加上了一个实数,其实我们期望改点对 w 的训练结果解释 w 增加,在曲线右侧也是相同,不过我们这个时候期望 w 减小,因为在右边导数为正 对 b 的分析 和上面对w的分析一样 梯度推导 对单个样本推导 对单个样本推导我们现在只演示单个样本的推导,首先我们有如下公式定义 z = W T + b z = W^T + b z=WT+b $\hat{y} = a = \sigma (z) $ $ \sigma (z) = \frac{1}{1 + e^{-z}}$ $ \sigma ’ (z) = \sigma (z)(1 - \sigma(z))$ L ( y ^ , y ) = − ( y ln y ^ + ( 1 − y ) ln ( 1 − y ^ ) ) L(\hat{y}, y) = -(y\ln\hat{y} + (1-y)\ln(1-\hat{y})) L(y^,y)=−(ylny^+(1−y)ln(1−y^)) 现在我们假设一个样本与两个特征值,(x_1, x_2),那么也有两个权重(w_1, w_2) d a = ϑ L ( a , y ) ϑ a = − y a + 1 − y 1 − a . . . . . . . . . ln ′ x = 1 x da = \frac{\vartheta L(a, y)}{\vartheta a} = -\frac{y}{a} + \frac{1-y}{1-a} ......... \ln 'x = \frac{1}{x} da=ϑaϑL(a,y)=−ay+1−a1−y.........ln′x=x1 然后我们对z求导 d z = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z = a − y . . . . . . . . . σ ′ ( z ) = σ ( z ) ∗ ( 1 − σ ( z ) ) dz = \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z} = a - y ......... \sigma '(z) = \sigma (z)*(1- \sigma (z)) dz=ϑaϑL(a,y)∗ϑzϑa=a−y.........σ′(z)=σ(z)∗(1−σ(z)) 求 L 对 w 和 b 的导数 ,j表示第几个特征值 d w j = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z ∗ ϑ z ϑ w 1 = ( a − y ) x j dw_j= \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z}*\frac{\vartheta z}{\vartheta w_1} = (a - y)x_j dwj=ϑaϑL(a,y)∗ϑzϑa∗ϑw1ϑz=(a−y)xj d b = ϑ L ( a , y ) ϑ a ∗ ϑ a ϑ z ∗ ϑ z ϑ b = ( a − y ) db= \frac{\vartheta L(a,y)}{\vartheta a}* \frac{\vartheta a}{\vartheta z}*\frac{\vartheta z}{\vartheta b} = (a - y) db=ϑaϑL(a,y)∗ϑzϑa∗ϑbϑz=(a−y) 对w 和 b 更新 w 1 : = w 1 − α d w 1 w_1 := w_1 - \alpha dw_1 w1:=w1−αdw1 w 2 : = w 2 − α d w 2 w_2 := w_2 - \alpha dw_2 w2:=w2−αdw2 b : = b − α d b b := b- \alpha db b:=b−αdb 对 m 个样本推导Logistic regression on m examples 先假设有 m 个样本, 一个样本有两个特征值 成本函数: J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ( i ) ) = − 1 m ∑ i = 1 m y ( i ) ln y ( i ) ^ + ( 1 − y ( i ) ) ln ( 1 − y ( i ) ^ ) J(w, b) = \frac{1}{m}\sum_{i=1}^{m}L(\hat{y^{(i)}}, y^{(i)}) = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}}) J(w,b)=m1∑i=1mL(y(i)^,y(i))=−m1∑i=1my(i)lny(i)^+(1−y(i))ln(1−y(i)^) 成本函数就是一个梯度迭代后对每个训练点的误差总和平均数,我们把上面推导单个样本的方法和公式拿来用 ϑ ϑ w 1 J ( w , b ) = 1 m ∑ i = 1 m ϑ ϑ w 1 L ( a ( i ) , y ( i ) ) \frac{\vartheta}{\vartheta w_1} J(w, b) = \frac{1}{m} \sum_{i=1}^{m}\frac{\vartheta }{\vartheta w_1}L(a^{(i)}, y^{(i)}) ϑw1ϑJ(w,b)=m1i=1∑mϑw1ϑL(a(i),y(i)) 我们假设给$ J = 0 ; dw_1 = 0; dw_2 = 0; db=0$ for i = 1 to m 一次循环表示对一个点进行训练 → z ( i ) = w T x ( i ) + b \to z^{(i)} = w^Tx^{(i)} +b →z(i)=wTx(i)+b → a ( i ) = σ ( z ( i ) ) \to a^{(i)} = \sigma (z^{(i)}) →a(i)=σ(z(i)) → J + = − ( y ( i ) ln y ( i ) ^ + ( 1 − y ( i ) ) ln ( 1 − y ( i ) ^ ) ) \to J += -(y^{(i)}\ln\hat{y^{(i)}} + (1-y^{(i)})\ln(1-\hat{y^{(i)}})) →J+=−(y(i)lny(i)^+(1−y(i))ln(1−y(i)^)) → d z ( i ) = a ( i ) − y ( i ) \to dz^{(i)} = a^{(i)} - y^{(i)} →dz(i)=a(i)−y(i) → d w 1 + = x 1 ( i ) ∗ d z ( i ) \to dw_1 += x_1^{(i)} * dz^{(i)} →dw1+=x1(i)∗dz(i) → d w 2 + = x 2 ( i ) ∗ d z ( i ) \to dw_2 += x_2^{(i)} * dz^{(i)} →dw2+=x2(i)∗dz(i) → d b + = d z ( i ) \to db += dz^{(i)} →db+=dz(i) 在对m个样本一个迭代的训练完毕后,对累加过的$ J ; dw_1 ; dw_2 ; db$ 求平均值 $ J /= m ; dw_1 /=m ; dw_2 /=m ; db /= m$ , 我们没有对$ dw_1 ; dw_2 $ 加上标 i 是因为这里我们是把$ dw_1 ; dw_2 $ 当作对样本一个循环的累加器,将一个循环中的每一个样本的w值相加后最后在一个循环完毕后做平均,因为 d w 1 = ϑ J ϑ w 1 dw_1 = \frac{\vartheta J}{\vartheta w_1} dw1=ϑw1ϑJ 对w 和 b 更新 $w_1 := w_1 - \alpha dw_1 $ $w_2 := w_2 - \alpha dw_2 $ $b := b- \alpha db $ 梯度下降的算法调优在使用梯度下降时,需要进行调优。哪些地方需要调优呢? 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。 归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望 x ‾ \overline{x} x 和标准差std(x),然后转化为: x − x ‾ s t d ( x ) \frac{x-\overline{x}}{std(x)} std(x)x−x 这样特征的新期望为0,新方差为1,迭代次数可以大大加快。 |
CopyRight 2018-2019 实验室设备网 版权所有 |