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

2019-12-18  本文已影响0人  你的优先级最高

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 单层神经网络线性模型的训练过程

5 参考资料

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

上一篇 下一篇

猜你喜欢

热点阅读