其他分享
首页 > 其他分享> > 深度学习深度学习(六)实现梯度下降

深度学习深度学习(六)实现梯度下降

作者:互联网

这一章节,我们是把上一章节的理论赋予实际的实现。

让我们先回顾一下,我们为了测量一个方程是否是好的,我们就要建立一个cost function,计算每个方程带入所有样本的总偏差E。然后根据梯度下降,找到E的最小值。

上一章也讲过,查找E的最小值,常用的方法就是梯度下降,而计算梯度下降重点就要把E的导数算出来。我们先来计算一下导数:

上一章讲过,cost function有两个一个使用方差,另外一个用交叉熵,方差是比较简单的,所以我们先假定用方差去计算导数:(注意,下面用到的是高等数学里头的复合函数的导数知识,在往下阅读前,建议先掌握这个知识)

额,我们回忆一下基本的方程,h =w_{1 }x_{1} + w_{2}x_{2} + w_{0}x_{0}。其中让x_{0}=1(设定一个常数)w_{0}就是b,我们把这个方程就可以变形为

深度学习深度学习(六)实现梯度下降

 i 从0 到 2

再加上我们的activation function就变成:

深度学习深度学习(六)实现梯度下降

方差的函数函数如下:

深度学习深度学习(六)实现梯度下降

 

这里要说明一下这个式子,和之前的式子有一个差别,就是之前的式1/2m,m是样本数量。E最后的结果是要除以m的。但不知道是不是因为在一个固定样本数量的同一次训练来说,m是固定的,相当于是一个常量,所以这个可以省去?也期望其他童鞋给我解惑一下。

注意:上述方程中的μ不是指数,而是表示这是第μ个样本的计算值。

于是,我们计算每一个wi的导数为:

深度学习深度学习(六)实现梯度下降

有因为是线性方程:

深度学习深度学习(六)实现梯度下降

 

得出的结果就是:

深度学习深度学习(六)实现梯度下降

 

而我们通常会把-(Y-Ý)f'(h)记为δ所以,公式简化为:dE/dw_{i} = δx_{i}加上梯度下降的步长比例η那么就有: 

w_{i} = w_{i} + ηδx_{i}

从上面推到可以看出,η实际上是cost function复合了activation function后的导数公式。

这里又有一个说明,上面求导的过程显然是把\sum忽略掉了,即只单独某一个样本的求导。

而这点可以从下面给出的伪代码可以看出,伪代码里面是要把求导的结果,重新累加起来的:

η = 0.1

//随机设置w1,w2,b的初始值

w1 = radom();

w2 = radom();

b = radom();

def sigmod = function(x){

  return 1/(1- exp(-x));

}

def sigmod_prim = function(x){

  return sigmod 的导数

}

while (true){

  //每次迭代前,初始化参数变量

  Δw1 = 0;

  Δw2 = 0;

  Δb = 0;

  for (i=0;i<总样本数){

    //计算Ý

    Ý = sigmod(w1*x1[i] + w2*x2[i] + b);

    δ = -(y-Ý) * sigmod_prim(Ý);

    Δw1 += δ * x1[i];

    Δw2 += δ * x2[i];

    Δb += δ * 1;

  }

  w1 = w1 - η * Δw1;

  w2 = w2 - η * Δw2;

  b = b - η * Δw2;

  if(cost 函数 已经足够小 或者迭代到一定次数){

    //退出循环,参数w1,w2,b就是最优的方程参数

  }

}

好了,如果有闲的实在蛋痛的朋友,有兴趣的话,可以自己实现一下这个算法,这个是比较有趣的。

这个,就是完整的一个机器学习的雏形。

我们回忆一下:

1。拟定一个模型,即定义x_{n}以及y。

2。找到样本数据

3。通过梯度下降,找到最优的参数w1,w2...wn,b(学习过程)

4。根据最优的w1,w2.....wn,b就可以开始对新的x进行预测和判断计算出预测的y(应用过程)

 

标签:function,导数,梯度,样本,学习,w2,w1,深度
来源: https://blog.csdn.net/wwwlgy/article/details/121211387