深度学习 --- 梯度下降推导--交叉熵误差函数

  • 线性回归
  • 复合函数求导
  • 偏导数
  • 预测函数
  • 损失函数 或者 误差函数
  • 梯度下降推导
  • 概念和公式定义
  • 梯度推导
  • 对单个样本推导
  • 对单个样本推导
  • 对 m 个样本推导
  • 梯度下降的算法调优


线性回归

线性回归的推导可以看我的另一篇博客 深度学习–2.线性回归

线性回归就是在二元分类中找到一条合适的分界线,其中二元分类中其结果只能后两种并且互斥,其线性方程为

线性回归交叉项计算_线性回归交叉项计算

但这不是最好的二元分类方程,因为我们想要得到的结果是0–1的概率,但是线性方程的结果定义域一般是实数集(R),所以我们的线性回归的输出变为

线性回归交叉项计算_梯度下降_02

线性回归交叉项计算_梯度下降_03

线性回归交叉项计算_深度学习_04

线性回归交叉项计算_梯度下降_05函数的图像如下图所示,是一个x线性回归交叉项计算_梯度下降_06R,而输出是一个(0,1)的开区间的概率,这就符合我们的二元分类的结果了

线性回归交叉项计算_线性回归_07

复合函数求导

假设

  1. 函数线性回归交叉项计算_梯度下降_08线性回归交叉项计算_深度学习_09出有导数线性回归交叉项计算_线性回归交叉项计算_10
  2. 函数线性回归交叉项计算_线性回归交叉项计算_11在对应点线性回归交叉项计算_线性回归交叉项计算_12也有导数线性回归交叉项计算_线性回归交叉项计算_13,于是符合函数线性回归交叉项计算_交叉熵_14在上述的点线性回归交叉项计算_深度学习_09也有导数,它等于线性回归交叉项计算_深度学习_16的导数与线性回归交叉项计算_线性回归交叉项计算_17的导数的乘积:
    线性回归交叉项计算_线性回归_18
    更简洁的表示为
    线性回归交叉项计算_梯度下降_19
    例题
    线性回归交叉项计算_梯度下降_20,求导数
    线性回归交叉项计算_线性回归交叉项计算_21,根据求导法则
    线性回归交叉项计算_深度学习_22
    线性回归交叉项计算_线性回归交叉项计算_23
    线性回归交叉项计算_交叉熵_24

偏导数

有的函数不止有一个未知数,还可能有多个未知数,这个时候直接求导就有点困难,假设在三维空间里,x轴和y轴的变化共同决定z轴的变化,我先研究x方向的导数,那么函数在x方向的导数叫做这个函数在x轴的偏导数
求导原则是对一个变量求导,其他变量看作常数
例题
线性回归交叉项计算_线性回归_25(x>0),偏导数
线性回归交叉项计算_深度学习_26

预测函数

可以理解为我们要训练的模型
我们知道在 logistic回归模型中的参数 W(权重) 和 b(偏差) 是很重要的,那我们就需要训练 logistic 回归模型来找到合适的参数 W 和 b,那就需要要给预测函数,我们给出如下定义
线性回归交叉项计算_线性回归交叉项计算_27, where 线性回归交叉项计算_梯度下降_28
Given 线性回归交叉项计算_交叉熵_29 , want 线性回归交叉项计算_线性回归交叉项计算_30

我们来具体说明一下,为了让模型来通过学习调整参数,我们给出一个具有m个样本的训练集,来训练这个训练集的样本来得到预测值接近实际值。对于上面的公式,我们约定,上标i 表示第几个训练样本

损失函数 或者 误差函数

你可以定义你的损失函数为预测值和真实值差的平方后的二分之一,我们可以理解为对方差进行求导,公式如下
线性回归交叉项计算_线性回归_31
但是在 logistic 回归中一般不怎么用,因为当当你学习这些参数的时候,在调优参数是很可能得到的是局部最优解,而不是全局最优解。我们定义损失函数的目的是来衡量预测输出线性回归交叉项计算_交叉熵_32 和 y 的实际值有多接近,那么我们定义如下的损失函数,至于为什么这么定义何以参见该目录中 神经网络 中的 交叉熵 的讲解

线性回归交叉项计算_交叉熵_33

需要说明的是:损失函数 是对于一个样本的估计,接下来我们会定义 成本函数 J, 它衡量的是全体训练样本上的表现

  • 当 y = 1 的时候,如果 线性回归交叉项计算_线性回归交叉项计算_34 接近1的时候,那么损失L就接近于0 ,如果 线性回归交叉项计算_线性回归交叉项计算_34
  • 当 y = 0 的时候,如果 线性回归交叉项计算_线性回归交叉项计算_34 接近1的时候,那么损失L就很大 ,如果 线性回归交叉项计算_线性回归交叉项计算_34

梯度下降推导

概念和公式定义

首先我们有如下公式定义

预测函数:线性回归交叉项计算_梯度下降_38

激活函数:$ \sigma (z) = \frac{1}{1 + e^{-z}}$

损失函数:线性回归交叉项计算_梯度下降_39

成本函数:线性回归交叉项计算_线性回归交叉项计算_40

损失函数衡量单个样本的效果,对每一个样本训练,都会输出一个线性回归交叉项计算_线性回归交叉项计算_41,把他和对应的真标签线性回归交叉项计算_深度学习_42进行比较。

成本函数衡量W 和 b 在总样本上的效果,要想得到小的衡量成本,那么就要得到合适的W 和 b 。我们看一下梯度下降在三维空间的效果

线性回归交叉项计算_线性回归交叉项计算_43


我们分别将 w 和 b 作为实数对待,成本函数 J(w,b) 是在水平轴 w 和 b 上的曲面,曲面的高度代表了 J(w, b)在某一点的值,我们要做的就是找到合适的 w 和 b ,使其对应的成本函数 J 值最小,可以看出这是一个凸函数,就像一个碗一样。

首先,我们用某一个值来初始化 w 和 b ,比如图中的红点,其实,对于logistic 回归而言,几乎是任意的初始化值都有效。梯度下降要做的就是从初始点开始,朝着最陡的下坡方向走一步,在梯度下降一步后,这就完成了一次梯度的迭代。然后在那里停下,看看四周,再选择一个最陡的方向走一步,如此反复,直到走到最低谷。

更新w 和b的方法为

线性回归交叉项计算_线性回归_44

其中的$ \alpha $表示学习率,就是步进速度。我们约定dw表示 J 对 w 的导数,db 表示 J 对 b 的导数 那么更新可以写成

线性回归交叉项计算_线性回归_45

我们为了刚能形象的说明梯度下降,我们在二维平面中来说明,途中可以看作w为参数,J(w)为结果的函数,我们要想得到J的最小值,就是dw为0的地方

线性回归交叉项计算_交叉熵_46

在上面的曲线中,我们取到线上一点,做切线,可以看到,在曲线左边的切线的斜率是负的,那么改点导数也是负的,我们在这个点更新 w , 根据上面的公式,线性回归交叉项计算_深度学习_47

对 b 的分析 和上面对w的分析一样

梯度推导

对单个样本推导

对单个样本推导

我们现在只演示单个样本的推导,首先我们有如下公式定义

线性回归交叉项计算_交叉熵_48

$\hat{y} = a = \sigma (z) $

$ \sigma (z) = \frac{1}{1 + e^{-z}}$

$ \sigma ’ (z) = \sigma (z)(1 - \sigma(z))$

线性回归交叉项计算_线性回归交叉项计算_49

现在我们假设一个样本与两个特征值,(x_1, x_2),那么也有两个权重(w_1, w_2)

线性回归交叉项计算_线性回归_50


我们要计算 L(a, y)对于w的偏导数,那么我们就应该从外到里分别结算导数(复合函数求导),首先计算 L 对 a的导数

线性回归交叉项计算_线性回归交叉项计算_51

然后我们对z求导

线性回归交叉项计算_线性回归_52

求 L 对 w 和 b 的导数 ,j表示第几个特征值

线性回归交叉项计算_交叉熵_53
线性回归交叉项计算_梯度下降_54

对w 和 b 更新

线性回归交叉项计算_梯度下降_55

线性回归交叉项计算_线性回归交叉项计算_56

线性回归交叉项计算_深度学习_57

对 m 个样本推导

Logistic regression on m examples
先假设有 m 个样本, 一个样本有两个特征值
成本函数:线性回归交叉项计算_线性回归交叉项计算_40

成本函数就是一个梯度迭代后对每个训练点的误差总和平均数,我们把上面推导单个样本的方法和公式拿来用
线性回归交叉项计算_线性回归交叉项计算_59

我们假设给$ J = 0 ; dw_1 = 0; dw_2 = 0; db=0$
for i = 1 to m 一次循环表示对一个点进行训练
线性回归交叉项计算_线性回归交叉项计算_60

线性回归交叉项计算_深度学习_61

线性回归交叉项计算_交叉熵_62

线性回归交叉项计算_交叉熵_63

线性回归交叉项计算_交叉熵_64

线性回归交叉项计算_线性回归交叉项计算_65

线性回归交叉项计算_深度学习_66

在对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值相加后最后在一个循环完毕后做平均,因为线性回归交叉项计算_深度学习_67

对w 和 b 更新

$w_1 := w_1 - \alpha dw_1 $

$w_2 := w_2 - \alpha dw_2 $

$b := b- \alpha db $

梯度下降的算法调优

在使用梯度下降时,需要进行调优。哪些地方需要调优呢?

  1. 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
  2. 算法参数的初始值选择。 初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
  3. 归一化。由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望
  4. 线性回归交叉项计算_梯度下降_68

线性回归交叉项计算_深度学习_69

这样特征的新期望为0,新方差为1,迭代次数可以大大加快。