梯度裁剪、正向传播、反向传播、搭建一个简单的神经网络
1 梯度裁剪
原因: 循环神经?络中较容易出现梯度衰减或梯度爆炸,裁剪的目的就是将梯度限制在一个范围内,避免参数被抛出很远或远离极小值的情况。实现代码
公式: 所有模型参数梯度的元素拼接成?个向量 g,并设裁剪的阈值是 θ,所以模型的 L2 范数不会超过 θ。
文章图片
梯度裁剪公式
def grad_clipping(params, theta, ctx):
norm = nd.array([0], ctx)
for param in params:
norm += (param.grad ** 2).sum()
norm = norm.sqrt().asscalar()
if norm > theta:
for param in params:
param.grad[:] *= theta / norm
2 正向传播
所谓的正向传播就是从输入层开始依次求每个参数的值。简单说就是将值带入模型,依次往下算,把值计算出来。3 反向传播
反向传播依据微积分中的链式法则,沿着从输出层到输?层的顺序,依次计算并存储?标函数有关神经?络各层的中间变量以及参数的梯度。最简单的深度学习模型就只有一层——输出层。
简单说定义一个损失函数,然后对其中的变量求偏微分即可,然后一边求一边存入数据。
文章图片
单层神经网络(来源于《动手学深度学习》)
4 单层神经网络线性模型的训练过程
- 1 获取数据集
- 2 定义模型
- 3 初始化模型参数
- 4 定义损失函数
损失函数:是一个计算过程,求模型预测输出的值与真实值的偏差
常见的有平?损失(square loss):, 是将训练数据 x 带入模型中得到的结果。 - 5 定义优化算法
优化算法:目的就是为了降低损失值,得到一个解析解,即让最终的 w 与 b 使得模型更准确,让模型的预测值更接近真实值。 优化算法里面就有learning rate
,,每次往梯度下降方向走learning rate
这么多步,使得最终[]为模型损失值最小值的最优解。当然这个最优大部分情况下不是最优,只是局部最优,想要结果更好,learning rate
的设置都是至关重要的一步,初始值[]的设置是可以随机设置的
如:小批量随机梯度下降(mini-batch stochastic gradient descent): - 6 训练模型
即是让反复使用优化函数降低 loss, 最终得到精度更高的 w 与 b - 7 模型预测
【梯度裁剪、正向传播、反向传播、搭建一个简单的神经网络】1.《动手学深度学习》视频,文档
2.复旦大学邱锡鹏教授的书《神经网络与深度学习》开源书籍(查看其中的公式理论)
推荐阅读
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- Shell-Bash变量与运算符
- 清明,是追思、是传承、是感恩。
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 七老修复好敏感、角质层薄、红血丝
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 螃蟹和这些食物同吃,轻则腹泻、重则中毒!要小心哦~
- 八、「料理风云」