动手学深度学习读书笔记-2

深度学习基础

线性回归

  • 线性回归输出是⼀个连续值,因此适⽤于回归问题。

模型

  • 设房屋的⾯积为x1,房龄为x2,售出价格为y。我们需要建⽴基于输⼊x1和x2来计算输出y的表达 式,也就是模型(model)
  • 线性回归假设输出与各个输⼊之间是线性关系
    y ^ = x 1 w 1 + x 2 w 2 + b \hat{y}=x_{1} w_{1}+x_{2} w_{2}+b y^=x1w1+x2w2+b
  • 其中w1和w2是权重(weight),b是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。模型输出 y ^ \hat{y} y^是线性回归对真实价格y的预测或估计。我们通常允许它们之间有⼀定误差。

模型训练

通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。

训练数据

假设我们采集的样本数为n,索引为i的样本的特征为x(i) 1 和x(i) 2 ,标签为y(i)。对于索引为i的房屋, 线性回归模型的房屋价格预测表达式为
y ^ ( i ) = x 1 ( i ) w 1 + x 2 ( i ) w 2 + b \hat{y}^{(i)}=x_{1}^{(i)} w_{1}+x_{2}^{(i)} w_{2}+b y^(i)=x1(i)w1+x2(i)w2+b

损失函数
  • 在模型训练中,我们需要衡量价格预测值与真实值之间的误差。
  • ⼀个常⽤的选择是平⽅函数。它在评估索引为i的样本误差的表 达式为
    ℓ ( i ) ( w 1 , w 2 , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 \ell^{(i)}\left(w_{1}, w_{2}, b\right)=\frac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2} (i)(w1,w2,b)=21(y^(i)y(i))2
    其中常数1/2使对平⽅项求导后的常数系数为1,这样在形式上稍微简单⼀些。显然,误差越小表 ⽰预测价格与真实价格越相近,且当⼆者相等时误差为0。
  • 将衡量误差的函数称为 损失函数(lossfunction)。这⾥使⽤的平⽅误差函数也称为平⽅损失(squareloss)。
  • 通常,我们⽤训练数据集中所有样本误差的平均来衡量模型预测的质量,即
    ℓ ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n ℓ ( i ) ( w 1 , w 2 , b ) = 1 n ∑ i = 1 n 1 2 ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) 2 \ell\left(w_{1}, w_{2}, b\right)=\frac{1}{n} \sum_{i=1}^{n} \ell^{(i)}\left(w_{1}, w_{2}, b\right)=\frac{1}{n} \sum_{i=1}^{n} \frac{1}{2}\left(x_{1}^{(i)} w_{1}+x_{2}^{(i)} w_{2}+b-y^{(i)}\right)^{2} (w1,w2,b)=n1i=1n(i)(w1,w2,b)=n1i=1n21(x1(i)w1+x2(i)w2+by(i))2
    在模型训练中,我们希望找出⼀组模型参数来使训练样本平均损失最小:
    w 1 ∗ , w 2 ∗ , b ∗ = argmin ⁡ w 1 , w 2 , b ℓ ( w 1 , w 2 , b ) w_{1}^{*}, w_{2}^{*}, b^{*}=\underset{w_{1}, w_{2}, b}{\operatorname{argmin}} \ell\left(w_{1}, w_{2}, b\right) w1,w2,b=w1,w2,bargmin(w1,w2,b)
优化算法
  • 当模型和损失函数形式较为简单时,上⾯的误差最小化问题的解可以直接⽤公式表达出来。这类解叫作解析解(analyticalsolution)。
  • ⼤多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函 数的值。这类解叫作数值解(numericalsolution)。
  • 小批量随机梯度下降(mini-batch stochastic gradient descent)在深 度学习中被⼴泛使⽤。
    具体做法:先选取⼀组模型参数的初始值,如随机选取;接下来对 参数进⾏多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样⼀个由固定数⽬训练数据样本所组成的小批量(mini-batch)B,然后求小批量中数据样本的平均损 失有关模型参数的导数(梯度),最后⽤此结果与预先设定的⼀个正数的乘积作为模型参数在本 次迭代的减小量。
    线性回归模型的过程中,模型的每个参数将作如下迭代:
    w 1 ← w 1 − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 1 = w 1 − η ∣ B ∣ ∑ i ∈ B x 1 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) w 2 ← w 2 − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 2 = w 2 − η ∣ B ∣ ∑ i ∈ B x 2 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) b ← b − η ∣ B ∣ ∑ i ∈ B ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ b = b − η ∣ B ∣ ∑ i ∈ B ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) \begin{array}{l}{w_{1} \leftarrow w_{1}-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_{1}, w_{2}, b\right)}{\partial w_{1}}=w_{1}-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} x_{1}^{(i)}\left(x_{1}^{(i)} w_{1}+x_{2}^{(i)} w_{2}+b-y^{(i)}\right)} \\ {w_{2} \leftarrow w_{2}-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_{1}, w_{2}, b\right)}{\partial w_{2}}=w_{2}-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} x_{2}^{(i)}\left(x_{1}^{(i)} w_{1}+x_{2}^{(i)} w_{2}+b-y^{(i)}\right)} \\ {b \leftarrow b-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \frac{\partial \ell^{(i)}\left(w_{1}, w_{2}, b\right)}{\partial b}=b-\frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}\left(x_{1}^{(i)} w_{1}+x_{2}^{(i)} w_{2}+b-y^{(i)}\right)}\end{array} w1w1BηiBw1(i)(w1,w2,b)=w1BηiBx1(i)(x1(i)w1+x2(i)w2+by(i))w2w2BηiBw2(i)(w1,w2,b)=w2BηiBx2(i)(x1(i)w1+x2(i)w2+by(i))bbBηiBb(i)(w1,w2,b)=bBηiB(x1(i)w1+x2(i)w2+by(i))
模型预测
  • 模型训练完成后,我们将模型参数 w 1 , w 2 , b w_1, w_2, b w1,w2,b在优化算法停止时的值分别记作 w ^ 1 , w ^ 2 , b ^ \hat{w}_1, \hat{w}_2, \hat{b} w^1,w^2,b^
  • 注意,这里我们得到的并不一定是最小化损失函数的最优解 w 1 ∗ , w 2 ∗ , b ∗ w_1^*, w_2^*, b^* w1,w2,b,而是对最优解的一个近似。
  • 然后,我们就可以使用学出的线性回归模型 x 1 w ^ 1 + x 2 w ^ 2 + b ^ x_1 \hat{w}_1 + x_2 \hat{w}_2 + \hat{b} x1w^1+x2w^2+b^来估算训练数据集以外任意一栋面积(平方米)为 x 1 x_1 x1、房龄(年)为 x 2 x_2 x2的房屋的价格了。

线性回归的表示方法

神经网络图

在这里插入图片描述

  • 在图3.1所示的神经网络中,输入分别为 x 1 x_1 x1 x 2 x_2 x2,因此输入层的输入个数为2。输入个数也叫特征数或特征向量维度。
  • 图3.1中网络的输出为 o o o,输出层的输出个数为1。需要注意的是,我们直接将图3.1中神经网络的输出 o o o作为线性回归的输出,即 y ^ = o \hat{y} = o y^=o
  • 由于输入层并不涉及计算,按照惯例,图3.1所示的神经网络的层数为1。所以,线性回归是一个单层神经网络。输出层中负责计算 o o o的单元又叫神经元。在线性回归中, o o o的计算依赖于 x 1 x_1 x1 x 2 x_2 x2。也就是说,输出层中的神经元和输入层中各个输入完全连接。因此,这里的输出层又叫全连接层(fully-connected layer)或稠密层(dense layer)。
矢量计算表达式
  • 当数据样本数为 n n n,特征数为 d d d时,线性回归的矢量计算表达式为
    y ^ = X w + b , \boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b, y^=Xw+b,
    其中模型输出 y ^ ∈ R n × 1 \boldsymbol{\hat{y}} \in \mathbb{R}^{n \times 1} y^Rn×1, 批量数据样本特征 X ∈ R n × d \boldsymbol{X} \in \mathbb{R}^{n \times d} XRn×d,权重 w ∈ R d × 1 \boldsymbol{w} \in \mathbb{R}^{d \times 1} wRd×1, 偏差 b ∈ R b \in \mathbb{R} bR

  • 相应地,批量数据样本标签 y ∈ R n × 1 \boldsymbol{y} \in \mathbb{R}^{n \times 1} yRn×1。设模型参数 θ = [ w 1 , w 2 , b ] ⊤ \boldsymbol{\theta} = [w_1, w_2, b]^\top θ=[w1,w2,b],我们可以重写损失函数为
    ℓ ( θ ) = 1 2 n ( y ^ − y ) ⊤ ( y ^ − y ) . \ell(\boldsymbol{\theta})=\frac{1}{2n}(\boldsymbol{\hat{y}}-\boldsymbol{y})^\top(\boldsymbol{\hat{y}}-\boldsymbol{y}). (θ)=2n1(y^y)(y^y).

  • 小批量随机梯度下降的迭代步骤将相应地改写为
    θ ← θ − η ∣ B ∣ ∑ i ∈ B ∇ θ ℓ ( i ) ( θ ) , \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta}), θθBηiBθ(i)(θ),
    其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量:
    ∇ θ ℓ ( i ) ( θ ) = [ ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 1 ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ w 2 ∂ ℓ ( i ) ( w 1 , w 2 , b ) ∂ b ] = [ x 1 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) x 2 ( i ) ( x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ) x 1 ( i ) w 1 + x 2 ( i ) w 2 + b − y ( i ) ] = [ x 1 ( i ) x 2 ( i ) 1 ] ( y ^ ( i ) − y ( i ) ) . \nabla_{\boldsymbol{\theta}} \ell^{(i)}(\boldsymbol{\theta})= \begin{bmatrix} \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_1} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial w_2} \\ \frac{ \partial \ell^{(i)}(w_1, w_2, b) }{\partial b} \end{bmatrix} =\begin{bmatrix} x_1^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_2^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \\ x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)} \end{bmatrix} =\begin{bmatrix} x_1^{(i)} \\ x_2^{(i)} \\ 1 \end{bmatrix} (\hat{y}^{(i)} - y^{(i)}). θ(i)(θ)=w1(i)(w1,w2,b)w2(i)(w1,w2,b)b(i)(w1,w2,b)=x1(i)(x1(i)w1+x2(i)w2+by(i))x2(i)(x1(i)w1+x2(i)w2+by(i))x1(i)w1+x2(i)w2+by(i)=x1(i)x2(i)1(y^(i)y(i)).

  • 应该尽可能采用矢量计算,以提升计算效率。

实现

书中比较有价值的地方:
在训练模型的时候,我们需要遍历数据集并不断读取小批量数据样本。这里我们定义一个函数:它每次返回batch_size(批量大小)个随机样本的特征和标签。

def data_iter(batch_size, features, labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    random.shuffle(indices)  # 样本的读取顺序是随机的
    for i in range(0, num_examples, batch_size):
        j = nd.array(indices[i: min(i + batch_size, num_examples)])
        yield features.take(j), labels.take(j)  # take函数根据索引返回对应元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值