深度学习笔记(梯度下降、反向传播、了解激活函数、了解参数初始化)

学习参考来源:https://www.bilibili.com/video/BV1oY411N7Xz/?spm_id_from=333.788&vd_source=e3119ad0490e9417e487c2ba62c84750
本blog为学习笔记,若看不明白建议直接看视频。

1.梯度下降算法

  • 梯度下降算法(Gradient Descent,GD),深度学习核心之一
    (1)损失函数
    以一元二次方程为例,如下图。通过让损失函数最小,使得函数更加拟合样本点。
    在这里插入图片描述
    在这里插入图片描述
    展开,以优化参数b为例,可以看成一个关于b的一元二次方程。
    在这里插入图片描述

    接下来是一步步优化参数,先给b任意取一个值,然后计算该点的梯度dL/db,再乘以学习率,最后更新b参数。一直重复这个过程直到达到最低点,如下图所示:
    在这里插入图片描述
    在一般情况下,函数会是非线性且有很多样本点,如下图所示,参数为θ。
    在这里插入图片描述
    对损失函数中的θ求偏导,如下图,并按上述方法一步步优化参数θ。
    在这里插入图片描述

  • 随机梯度下降算法(Stochastic Gradient Descent, SGD)
    由于大多数情况样本点会很多,使用GD的话会导致内存开销问题且收敛速度很慢,因此可是使用少部分的样本点来更新参数,每次通过随机取不同的样本点的方法称为随机梯度下降算法。
    在这里插入图片描述

  • 动量(Momcnt)
    为了防止参数优化在山谷之间来回跳动,如下图:
    在这里插入图片描述
    因此引入动量的概念,在计算梯度的时候还要保留一部分历史梯度,使得优化参数更加平缓,如下图:
    在这里插入图片描述
    参数更新的数学公式如下:
    在这里插入图片描述

  • 自适应学习AdaGrad和RMSProp 算法
    为了快速找到收敛方向,细致优化防止震荡,需要在开始的时候学习率大,后面学习率小。但是手写调整很难。因此有了自适应学习。
    AdaGrad算法:引入一个新的量r,梯度波动很大的时候学习率就会快速下降。
    在这里插入图片描述
    但是r的变化只和梯度有关,可能会让学习率过早的变小而不好控制。因此有了RMSProp算法,在r更新的公式中加入了可以手动调节的rho来控制优化过程。
    在这里插入图片描述

  • 动量&自适应学习Adam
    将动量与自适应两者兼顾 。
    在这里插入图片描述

  1. 反向传播算法
  • 反向传播算法(Back-Propagation, BP),深度学习核心之一
    反向传播算法就是神经网络中加速计算参数梯度值的方法。如下图,x经过两次线性变化得到L,产生了4个参数(w1,b1,w2,b2),这就是正向传播。之后从后向前计算梯度的方式就是反向传播。黄色表示上一步已经计算过了,后面计算可以直接拿来用。例如,第一步计算dL/dy2梯度,第二步就可以根据链式法将dL/dw2梯度分为dL/dy2梯度(上一步已经计算得到了)乘以dy2/dw2梯度,同理也求b2的梯度。以此往后推再得到w1和b1的梯度。
    在这里插入图片描述
  • 计算图(Computation Graphs)
    计算机中对上面的线性变化表示有所不同,正向传播如下:
    在这里插入图片描述
    反向传播如下,和上述原理相同,最总得到4个参数的梯度,再根据梯度下降的方法去优化参数。
    在这里插入图片描述
  • 代码实现
    在这里插入图片描述
  1. 激活函数
    这里做只做一个简单的了解,详细理解参考blog:https://zhuanlan.zhihu.com/p/364620596
  • 激活函数(Activation Function),为了增加神经元的非线性表达能力
  • 饱和函数:sigmoid, tanh,存在梯度消失问题
    sigmoid存在梯度消失问题,因为sigmoid函数的导数最大值0.25,如下图,这意味着每层神经网络反向传播更新参数的幅度缩小大约1/4,这将导致网络前面几层将不再更新参数,这就是梯度消失问题。
    在这里插入图片描述
    在这里插入图片描述
    虽然说tanh在一定程度上缓解了梯度消失问题,但在极端情况下出现的饱和问题同样会导致梯度消失。
  • 非饱和函数:修正线性单元(Rectified Linear Unit, ReLU),解决了上述问题,但存在神经元熄灭问题。
  • ReLU → Leaky ReLU, Parametric ReLU,…。可以很好的解决上述问题。
  • 虽然sigmod、tanh和ReLU存在一些缺陷,但是不在不同的问题或模型中,这些函数还会被使用。
  1. 参数初始化
  • 参数初始化方法可以减缓梯度爆炸和梯度消失问题
  • tanh一般使用Xavier初始化方法
  • ReLU及其变种一般使用Kaiming初始化方法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值