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

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 反向传播

反向传播依据微积分中的链式法则,沿着从输出层到输⼊层的顺序,依次计算并存储⽬标函数有关神经⽹络各层的中间变量以及参数梯度
简单说定义一个损失函数,然后对其中的变量求偏微分即可,然后一边求一边存入数据。

最简单的深度学习模型就只有一层——输出层

梯度裁剪、正向传播、反向传播、搭建一个简单的神经网络_第1张图片
单层神经网络(来源于《动手学深度学习》)

4 单层神经网络线性模型的训练过程

  • 1 获取数据集
  • 2 定义模型
  • 3 初始化模型参数
  • 4 定义损失函数
    损失函数:是一个计算过程,求模型预测输出的值与真实值的偏差
    常见的有平⽅损失(square loss):, 是将训练数据 x 带入模型中得到的结果。
  • 5 定义优化算法
    优化算法:目的就是为了降低损失值,得到一个解析解,即让最终的 wb 使得模型更准确,让模型的预测值更接近真实值。 优化算法里面就有 learning rate ,,每次往梯度下降方向走learning rate这么多步,使得最终[]为模型损失值最小值的最优解。当然这个最优大部分情况下不是最优,只是局部最优,想要结果更好,learning rate的设置都是至关重要的一步,初始值[]的设置是可以随机设置的
    如:小批量随机梯度下降(mini-batch stochastic gradient descent)
  • 6 训练模型
    即是让反复使用优化函数降低 loss, 最终得到精度更高的 wb
  • 7 模型预测

5 参考资料

1.《动手学深度学习》视频,文档
2.复旦大学邱锡鹏教授的书《神经网络与深度学习》开源书籍(查看其中的公式理论)

你可能感兴趣的