ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-08 17:35:00  阅读:174  来源: 互联网

标签:function 导数 梯度 样本 学习 w2 w1 深度


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

让我们先回顾一下,我们为了测量一个方程是否是好的,我们就要建立一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有