梯度裁剪、正向传播、反向传播、搭建一个简单的神经网络

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 模型预测
5 参考资料
【梯度裁剪、正向传播、反向传播、搭建一个简单的神经网络】1.《动手学深度学习》视频,文档
2.复旦大学邱锡鹏教授的书《神经网络与深度学习》开源书籍(查看其中的公式理论)

    推荐阅读