深度学习 您所在的位置:网站首页 随机梯度下降推导 深度学习

深度学习

2024-06-17 16:22| 来源: 网络整理| 查看: 265

深度学习 --- 梯度下降推导--交叉熵误差函数 线性回归复合函数求导偏导数预测函数损失函数 或者 误差函数梯度下降推导概念和公式定义梯度推导对单个样本推导 对单个样本推导对 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=1m​L(y(i)^​,y(i))=−m1​∑i=1m​y(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 和 b 作为实数对待,成本函数 J(w,b) 是在水平轴 w 和 b 上的曲面,曲面的高度代表了 J(w, b)在某一点的值,我们要做的就是找到合适的 w 和 b ,使其对应的成本函数 J 值最小,可以看出这是一个凸函数,就像一个碗一样。 首先,我们用某一个值来初始化 w 和 b ,比如图中的红点,其实,对于logistic 回归而言,几乎是任意的初始化值都有效。梯度下降要做的就是从初始点开始,朝着最陡的下坡方向走一步,在梯度下降一步后,这就完成了一次梯度的迭代。然后在那里停下,看看四周,再选择一个最陡的方向走一步,如此反复,直到走到最低谷。 更新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) 在这里插入图片描述 我们要计算 L(a, y)对于w的偏导数,那么我们就应该从外到里分别结算导数(复合函数求导),首先计算 L 对 a的导数

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=1m​L(y(i)^​,y(i))=−m1​∑i=1m​y(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)=m1​i=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 实验室设备网 版权所有