总结

本节,我们详细讲解了如何使用Numpy实现梯度下降算法,构建并训练了一个简单的线性模型实现波士顿房价预测,可以总结出,使用神经网络建模房价预测有三个要点:

  • 构建网络,初始化参数w和b,定义预测和损失函数的计算方法。
  • 随机选择初始点,建立梯度的计算方法和参数更新方式。
  • 从总的数据集中抽取部分数据作为一个mini_batch,计算梯度并更新参数,不断迭代直到损失函数几乎不再下降。

作业1-2

  • 样本归一化:预测时的样本数据同样也需要归一化,但使用训练样本的均值和极值计算,这是为什么?

  • 当部分参数的梯度计算为0(接近0)时,可能是什么情况?是否意味着完成训练?

作业 1-3

  • 随机梯度下降的batchsize设置成多少合适?过小有什么问题?过大有什么问题?提示:过大以整个样本集合为例,过小以单个样本为例来思考。
  • 一次训练使用的配置:5个epoch,1000个样本,batchsize=20,最内层循环执行多少轮?

作业1-4

基本知识

1. 求导的链式法则

链式法则是微积分中的求导法则,用于求一个复合函数的导数,是在微积分的求导运算中一种常用的方法。复合函数的导数将是构成复合这有限个函数在相应点的导数的乘积,就像锁链一样一环套一环,故称链式法则。如 图9 所示,如果求最终输出对内层输入(第一层)的梯度,等于外层梯度(第二层)乘以本层函数的梯度。

总结 - 图1

图9:求导的链式法则

2. 计算图的概念

(1)为何是反向计算梯度?即梯度是由网络后端向前端计算。当前层的梯度要依据处于网络中后一层的梯度来计算,所以只有先算后一层的梯度才能计算本层的梯度。

(2)案例:购买苹果产生消费的计算图。假设一家商店9折促销苹果,每个的单价100元。计算一个顾客总消费的结构如 图10 所示。

总结 - 图2

图10:购买苹果所产生的消费计算图

  • 前向计算过程:以黑色箭头表示,顾客购买了2个苹果,再加上九折的折扣,一共消费10020.9=180元。
  • 后向传播过程:以红色箭头表示,根据链式法则,本层的梯度计算 * 后一层传递过来的梯度,所以需从后向前计算。

最后一层的输出对自身的求导为1。导数第二层根据 图11 所示的乘法求导的公式,分别为0.91和2001。同样的,第三层为100 0.9=90,2 0.9=1.8。

总结 - 图3

图11:乘法求导的公式

作业题

  • 根据 图12 所示的乘法和加法的导数公式,完成 图13 购买苹果和橘子的梯度传播的题目。

总结 - 图4

图12:乘法和加法的导数公式

总结 - 图5

图13:购买苹果和橘子产生消费的计算图

  • 挑战题:用代码实现两层的神经网络的梯度传播,中间层的尺寸为13【房价预测案例】(教案当前的版本为一层的神经网络),如 图14 所示。

总结 - 图6

图14:两层的神经网络