算法工程师修仙之路:Keras(九)

本文详细介绍了深度学习的基础,包括神经网络的数学基础,特别是基于梯度的优化原理。讲解了张量运算的导数——梯度,以及随机梯度下降和链式求导的反向传播算法在训练神经网络中的应用。通过实例展示了如何在 Keras 中构建和训练模型,以及损失函数和优化器的作用。
摘要由CSDN通过智能技术生成

深度学习基础

神经网络的数学基础


神经网络的“引擎”:基于梯度的优化

  • 我们的第一个神经网络示例中,每个神经层都用下述方法对输入数据进行变换。

    output = relu(dot(W, input) + b)
    
    • 在这个表达式中,W 和 b 都是张量,均为该层的属性。
    • 它们被称为该层的权重(weight)或可训练参数(trainable parameter),分别对应 kernel 和 bias 属性。
    • 这些权重包含网络从观察训练数据中学到的信息。
    • 一开始,这些权重矩阵取较小的随机值,这一步叫作随机初始化(random initialization)。
    • 下一步则是根据反馈信号逐渐调节这些权重,这个逐渐调节的过程叫作训练,也就是机器学习中的学习。
  • 训练循环(training loop)具体过程如下:

    • 抽取训练样本 x 和对应目标 y 组成的数据批量;
    • 在 x 上运行网络[这一步叫作前向传播(forward pass)],得到预测值 y_pred;
    • 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离;
    • 更新网络的所有权重,使网络在这批数据上的损失略微下降;
    • 最终得到的网络在训练数据上的损失非常小,即预测值 y_pred 和预期目标 y 之间的距离非常小,网络“学会”将输入映射到正确的目标。
  • 考虑网络中某个权重系数,如何知道这个系数应该增大还是减小,以及变化多少:

    • 一种简单的解决方案是,保持网络中其他权重不变,只考虑某个标量系数,让其尝试不同的取值。但这种方法是非常低效的,因为对每个系数(系数很多,通常有上千个,有时甚至多达上百万个)都需要计算两次前向传播(计算代价很大)。
    • 一种更好的方法是利用网络中所有运算都是可微(differentiable)的这一事实,计算损失相对于网络系数的梯度(gradient),然后向梯度的反方向改变系数,从而使损失降低。
张量运算的导数:梯度
  • 导数完全描述了改变 x 后 f(x) 会如何变化。如果你希望减小 f(x) 的值,只需将 x 沿着导数的反方向移动一小步。

  • 梯度(gradient)是张量运算的导数,它是导数这一概念向多元函数导数的推广。多元函数是以张量作为输入的函数。

  • 假设有一个输入向量 x、一个矩阵 W、一个目标 y 和一个损失函数 loss。

    • 你可以用 W 来计算预测值 y_pred,然后计算损失,或者说预测值 y_pred 和目标 y 之间的距离:

      y_pred = dot(W, x)
      loss_value = loss(y_pred, y)
      
    • 如果输入数据 x 和 y 保持不变,那么这可以看作将 W 映射到损失值的函数:
      loss_value = f(W)

    • 假设 W 的当前值为 W 0 W_0 W0 f f f W 0 W_0 W0 点的导数是一个张量 g r a d i e n t ( f ) ( W 0 ) gradient{(f)}(W_0) gradient(f)(W0),其形状与 W 相同,每个系数 g r a d i e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值