十八、梯度下降与反向传播
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+by=wx+by=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)
十八、梯度下降与反向传播相关推荐
- 独家 | 数据科学家指南:梯度下降与反向传播算法
作者:Richmond Alake 翻译:陈之炎 校对:zrx本文约3300字,建议阅读5分钟 本文旨在为数据科学家提供一些基础知识,以理解在训练神经网络时所需调用的底层函数和方法. 标签:神经网络, ...
- 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现
梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...
- 【深度学习入门到精通系列】关于梯度下降和反向传播的探索
文章目录 1 简单理解梯度下降 2 梯度下降作用 3 反向传播 4 图示 1 简单理解梯度下降 梯度下降它是一个函数f(x)找它的最小值x0所在的那个点. 2 梯度下降作用 总之一句话概括就是,梯度下 ...
- 深度学习的基础知识(机器学习、损失函数、梯度下降、反向传播、基础模型一网打尽)
1.预备信息 1.1了解技术的发展阶段 技术一般存在几个阶段:1.发展期.2.高峰期.3.冰河期.4.应用期 就是先达到一个高峰,但是在达到高峰之后就会被发现很多问题,然后热度就会不断地下降,到达一个 ...
- 深度学习第三次课-梯度下降与反向传播
梯度下降 损失函数可视化 得分函数 f=W*X 损失函数 c=W*X-y 目标 损失函数最小 最优化过程 可视化 一维 二维 热力图 如果损失函数是一个凸函数,例如SVM. 凸 ...
- 梯度下降与反向传播算法的原理与推导
梯度下降算法是机器学习中最常用的优化算法之一,它可以求得目标函数的最小值,即算法的最优解.而对于复杂的多层神经网络来说,运用梯度下降算法十分复杂,因为其包含求导过程,为此学者将多层神经网络的优化问题简 ...
- 【深度学习】梯度下降和反向传播
声明:本博客只是小白博主自己的记录博客,仅供参考. 导数到底是什么? 引用知乎上的一个回答 那么导数的本质是什么?就是变化率呗,例如小王今年卖了100头猪,去年90头,前年80头,,,也就是说每年增加 ...
- 【人工智能深度学习】人工智能中的梯度下降算法和反向传播教程
[人工智能深度学习]人工智能中的梯度下降算法和反向传播教程 梯度下降优化算法 参数化模型 用方块图表达参数模型的计算图 损失函数 梯度下降 在传统神经网络中随机梯度下降和反向传播算法的优势 随机梯度下 ...
- 梯度下降法与反向传播法
梯度下降法与反向传播法 梯度下降法 参考资料:推荐系统玩家 之 随机梯度下降(Stochastic gradient descent)求解矩阵分解 - 知乎 (zhihu.com) 什么是梯度? 首先 ...
最新文章
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
- 通过串口输入控制指令控制图像在VGA显示器中的显示位置
- ubuntu查看内存或cpu使用情况
- GCC for Win32开发环境介绍
- 果断拿下4000万美元D轮融资,Rancher发力中国本土化与国产化!
- 泊松分酒 java课件_泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...
- Python复制数据
- Django - 日期、时间字段
- Letter Combinations of a Phone Number
- moment.js的方法总结
- python struct pack_Python(12)教程11.标准库简介——第二部分
- 安装软件报:The installer has encountered an unexpected error installing this package....此类错误...
- 密码库LibTomCrypt学习记录——(1.0)分组密码算法——概述
- 这个用JAVA开发的全开源商城系统可免费商用
- Android系统源码下载
- 取汉子拼音首字母的C#方法
- linux学习笔记(十二)
- 书摘---创业36条军规3:创业人七大须知
- vue实现带样式的textarea输入框,contenteditable属性应用
- centos下安装cutycapt
热门文章
- Mysql自增列,并发插入时导致死锁的问题
- tensorflow与numpy的版本兼容性问题(亲测)
- linux php安装memcached扩展
- MySQL配置mycat读写分离:wrapper | Startup failed: Timed out waiting for signal from JVM.
- java中断线程_Java中断线程的方法
- csp 通信网络 java_CSP 通信网络
- java hashcode返回值_Java String hashCode() 使用方法及示例
- 为什么非全站升级HTTPS不可?
- html5子页面无法弹出,弹出子页面,兼容ie
- php 数组压入,PHP 2、array_push和[]