1. 损失函数和梯度

1.1 损失函数的概念

  • 对于给定的输入xxx,由f(x)f(x)f(x)给出相应的输出,这个实际输出值和原先预期值Y可能不一致,所以需要定义一个损失函数(LossFunction),也有称之为代价函数(CostFunction)来度量这二者之间的“差异”程度。
  • 损失函数是用来度量预测值和实际值之间的差异的。

1.2 常见损失函数:均方误差

  • 均方误差(Meansquare error)损失函数。均方误差是回归问题常用的损失函数,它是预测值与目标值之间差值的平方和,其公式和图像如下所示:
  • 交叉熵:交叉熵是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息,在机器学习中用来作为分类问题的损失函数。假设有两个概率分布,tk与yk ,其交叉熵函数公式及图形如下所示:

1.3 梯度的概念

  • 梯度(gradient)是一个向量(矢量,有方向),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。
  • 损失函数沿梯度相反方向收敛最快(即能最快找到极值点)。

2. 反向传播计算

2.1 反向传播过程

  • 考虑函数$y = f(x) $*, 输出为E,反向传播的计算顺序是,将信号E乘以节点的局部导数(偏导数),传递给前面的节点。

2.2 符合函数的反向传播过程

  • 考虑复合函数:
  • zzz对于x的导数(xxx变化对zzz的影响率)可以表示为:

  • 复合函数zzz的反向传播过程

3. 线性回归实现

步骤一:准备数据y=wx+b​y=wx+b​y=wx+b​

x = torch.rand([50])
y = 3 * x + 0.8w = torch.rand(1, requires_grad=True)
b = torch.rand(1, requires_grad=True)

步骤二:构造损失函数

def loss_fn(y, y_predict):loss = (y_predict - y).pow(2).mean()for i in [w, b]:# 每次反向传播前把梯度置为0if i.grad is not None:i.grad.data.zero_()# [i.grad.data.zero_() for i in [w,b] if i.grad is not None]loss.backward()return loss.data

步骤三: 更新参数

def optimize(learning_rate):# print(w.grad.data,w.data,b.data)w.data -= learning_rate * w.grad.datab.data -= learning_rate * b.grad.data

步骤四:训练参数,计算预测值

for i in range(3000):# 2. 计算预测值y_predict = x * w + b# 3.计算损失,把参数的梯度置为0,进行反向传播loss = loss_fn(y, y_predict)if i % 500 == 0:print(i, loss)# 4. 更新参数w和boptimize(0.01)

步骤五:绘制图形,观察训练结束的预测之和真实值

# 绘制图形,观察训练结束的预测值和真实值
predict = x * w + b  # 使用训练后的w和b计算预测值plt.scatter(x.data.numpy(), y.data.numpy(), c="r")
plt.plot(x.data.numpy(), predict.data.numpy())
plt.show()print("w", w)
print("b", b)

十八、梯度下降与反向传播相关推荐

  1. 独家 | 数据科学家指南:梯度下降与反向传播算法

    作者:Richmond Alake 翻译:陈之炎 校对:zrx本文约3300字,建议阅读5分钟 本文旨在为数据科学家提供一些基础知识,以理解在训练神经网络时所需调用的底层函数和方法. 标签:神经网络, ...

  2. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现

    梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...

  3. 【深度学习入门到精通系列】关于梯度下降和反向传播的探索

    文章目录 1 简单理解梯度下降 2 梯度下降作用 3 反向传播 4 图示 1 简单理解梯度下降 梯度下降它是一个函数f(x)找它的最小值x0所在的那个点. 2 梯度下降作用 总之一句话概括就是,梯度下 ...

  4. 深度学习的基础知识(机器学习、损失函数、梯度下降、反向传播、基础模型一网打尽)

    1.预备信息 1.1了解技术的发展阶段 技术一般存在几个阶段:1.发展期.2.高峰期.3.冰河期.4.应用期 就是先达到一个高峰,但是在达到高峰之后就会被发现很多问题,然后热度就会不断地下降,到达一个 ...

  5. 深度学习第三次课-梯度下降与反向传播

    梯度下降 损失函数可视化 得分函数   f=W*X 损失函数   c=W*X-y 目标    损失函数最小    最优化过程 可视化 一维 二维   热力图 如果损失函数是一个凸函数,例如SVM. 凸 ...

  6. 梯度下降与反向传播算法的原理与推导

    梯度下降算法是机器学习中最常用的优化算法之一,它可以求得目标函数的最小值,即算法的最优解.而对于复杂的多层神经网络来说,运用梯度下降算法十分复杂,因为其包含求导过程,为此学者将多层神经网络的优化问题简 ...

  7. 【深度学习】梯度下降和反向传播

    声明:本博客只是小白博主自己的记录博客,仅供参考. 导数到底是什么? 引用知乎上的一个回答 那么导数的本质是什么?就是变化率呗,例如小王今年卖了100头猪,去年90头,前年80头,,,也就是说每年增加 ...

  8. 【人工智能深度学习】人工智能中的梯度下降算法和反向传播教程

    [人工智能深度学习]人工智能中的梯度下降算法和反向传播教程 梯度下降优化算法 参数化模型 用方块图表达参数模型的计算图 损失函数 梯度下降 在传统神经网络中随机梯度下降和反向传播算法的优势 随机梯度下 ...

  9. 梯度下降法与反向传播法

    梯度下降法与反向传播法 梯度下降法 参考资料:推荐系统玩家 之 随机梯度下降(Stochastic gradient descent)求解矩阵分解 - 知乎 (zhihu.com) 什么是梯度? 首先 ...

最新文章

  1. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
  2. 通过串口输入控制指令控制图像在VGA显示器中的显示位置
  3. ubuntu查看内存或cpu使用情况
  4. GCC for Win32开发环境介绍
  5. 果断拿下4000万美元D轮融资,Rancher发力中国本土化与国产化!
  6. 泊松分酒 java课件_泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. Python复制数据
  8. Django - 日期、时间字段
  9. Letter Combinations of a Phone Number
  10. moment.js的方法总结
  11. python struct pack_Python(12)教程11.标准库简介——第二部分
  12. 安装软件报:The installer has encountered an unexpected error installing this package....此类错误...
  13. 密码库LibTomCrypt学习记录——(1.0)分组密码算法——概述
  14. 这个用JAVA开发的全开源商城系统可免费商用
  15. Android系统源码下载
  16. 取汉子拼音首字母的C#方法
  17. linux学习笔记(十二)
  18. 书摘---创业36条军规3:创业人七大须知
  19. vue实现带样式的textarea输入框,contenteditable属性应用
  20. centos下安装cutycapt

热门文章

  1. Mysql自增列,并发插入时导致死锁的问题
  2. tensorflow与numpy的版本兼容性问题(亲测)
  3. linux php安装memcached扩展
  4. MySQL配置mycat读写分离:wrapper | Startup failed: Timed out waiting for signal from JVM.
  5. java中断线程_Java中断线程的方法
  6. csp 通信网络 java_CSP 通信网络
  7. java hashcode返回值_Java String hashCode() 使用方法及示例
  8. 为什么非全站升级HTTPS不可?
  9. html5子页面无法弹出,弹出子页面,兼容ie
  10. php 数组压入,PHP 2、array_push和[]