IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 《动手学深度学习》之线性神经网络 -> 正文阅读

[人工智能]《动手学深度学习》之线性神经网络

线性回归

回归(regression)是指一类为一个或多个自变量与因变量之间关系建模的方法。在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。

线性模型

当我们的输入包含 d d d个特征时,我们将预测结果 y ^ \hat{y} y^?(通常使用“尖角”符号表示估计值)表示为:

y ^ = w 1 x 1 + . . . + w d x d + b . \hat{y} = w_1 x_1 + ... + w_d x_d + b. y^?=w1?x1?+...+wd?xd?+b.

将所有特征放到向量 x ∈ R d \mathbf{x} \in \mathbb{R}^d xRd中,并将所有权重放到向量 w ∈ R d \mathbf{w} \in \mathbb{R}^d wRd中,我们可以用点积形式来简洁地表达模型:

y ^ = w ? x + b . \hat{y} = \mathbf{w}^\top \mathbf{x} + b. y^?=w?x+b.

向量 x \mathbf{x} x对应于单个数据样本的特征。用符号表示的矩阵 X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} XRn×d可以很方便地引用我们整个数据集的 n n n个样本。其中, X \mathbf{X} X的每一行是一个样本,每一列是一种特征。

对于特征集合 X \mathbf{X} X,预测值 y ^ ∈ R n \hat{\mathbf{y}} \in \mathbb{R}^n y^?Rn可以通过矩阵-向量乘法表示为:

y ^ = X w + b {\hat{\mathbf{y}}} = \mathbf{X} \mathbf{w} + b y^?=Xw+b

损失函数

回归问题中最常用的损失函数是平方误差函数。当样本 i i i的预测值为 y ^ ( i ) \hat{y}^{(i)} y^?(i),其相应的真实标签为 y ( i ) y^{(i)} y(i)时,平方误差可以定义为以下公式:

l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) ? y ( i ) ) 2 . l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2. l(i)(w,b)=21?(y^?(i)?y(i))2.

常数 1 2 \frac{1}{2} 21?不会带来本质的差别,但这样在形式上稍微简单一些,表现为当我们对损失函数求导后常数系数为1。

由于平方误差函数中的二次方项,估计值 y ^ ( i ) \hat{y}^{(i)} y^?(i)和观测值 y ( i ) y^{(i)} y(i)之间较大的差异将贡献更大的损失。为了度量模型在整个数据集上的质量,我们需计算在训练集 n n n个样本上的损失均值(也等价于求和)。

L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w ? x ( i ) + b ? y ( i ) ) 2 . L(\mathbf{w}, b) =\frac{1}{n}\sum_{i=1}^n l^{(i)}(\mathbf{w}, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2. L(w,b)=n1?i=1n?l(i)(w,b)=n1?i=1n?21?(w?x(i)+b?y(i))2.

在训练模型时,我们希望寻找一组参数( w ? , b ? \mathbf{w}^*, b^* w?,b?),这组参数能最小化在所有训练样本上的总损失。如下式:

w ? , b ? = * ? a r g m i n w , b ? L ( w , b ) . \mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b). w?,b?=*argminw,b??L(w,b).

解析解

线性回归的解可以用一个公式简单地表达出来,这类解叫作解析解(analytical solution)。首先,我们将偏置 b b b合并到参数 w \mathbf{w} w中。合并方法是在包含所有参数的矩阵中附加一列。我们的预测问题是最小化 ∥ y ? X w ∥ 2 \|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 y?Xw2。这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失最小值。大体推导过程如下:

在这里插入图片描述

小批量随机梯度下降

梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(在这里也可以称为梯度)。

每一次更新参数之前,须遍历整个数据集。因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本,这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。

在每次迭代中,我们首先随机抽样一个小批量 B \mathcal{B} B,它是由固定数量的训练样本组成的。然后,我们计算小批量的平均损失关于模型参数的导数(也可以称为梯度)。最后,我们将梯度乘以一个预先确定的正数 η \eta η,并从当前参数的值中减掉。

我们用下面的数学公式来表示这一更新过程( ? \partial ?表示偏导数):

( w , b ) ← ( w , b ) ? η ∣ B ∣ ∑ i ∈ B ? ( w , b ) l ( i ) ( w , b ) . (\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b). (w,b)(w,b)?Bη?iB??(w,b)?l(i)(w,b).

总结一下,算法的步骤如下:
(1)初始化模型参数的值,如随机初始化;
(2)从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤。对于平方损失和仿射变换,我们可以明确地写成如下形式:

w ← w ? η ∣ B ∣ ∑ i ∈ B ? w l ( i ) ( w , b ) = w ? η ∣ B ∣ ∑ i ∈ B x ( i ) ( w ? x ( i ) + b ? y ( i ) ) , b ← b ? η ∣ B ∣ ∑ i ∈ B ? b l ( i ) ( w , b ) = b ? η ∣ B ∣ ∑ i ∈ B ( w ? x ( i ) + b ? y ( i ) ) . \begin{aligned} \mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b) = \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_b l^{(i)}(\mathbf{w}, b) = b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right). \end{aligned} wb?w?Bη?iB??w?l(i)(w,b)=w?Bη?iB?x(i)(w?x(i)+b?y(i)),b?Bη?iB??b?l(i)(w,b)=b?Bη?iB?(w?x(i)+b?y(i)).?

w \mathbf{w} w x \mathbf{x} x都是向量。在这里,更优雅的向量表示法比系数表示法(如 w 1 , w 2 , … , w d w_1, w_2, \ldots, w_d w1?,w2?,,wd?)更具可读性。
∣ B ∣ |\mathcal{B}| B表示每个小批量中的样本数,这也称为批量大小(batch size)。 η \eta η表示学习率(learning rate)。批量大小和学习率的值通常是手动预先指定,而不是通过模型训练得到的。这些可以调整但不在训练过程中更新的参数称为超参数(hyperparameter)。
调参(hyperparameter tuning)是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的,而训练迭代结果是在独立的验证数据集(validation dataset)上评估得到的。

事实上,更难做到的是找到一组参数,这组参数能够在我们从未见过的数据上实现较低的损失,这一挑战被称为泛化(generalization)。

softmax回归

网络结构

为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。每个输出对应于它自己的仿射函数。
在我们的例子中,由于我们有4个特征和3个可能的输出类别,我们将需要12个标量来表示权重(带下标的 w w w),3个标量来表示偏置(带下标的 b b b)。
下面我们为每个输入计算三个未归一化的预测(logit): o 1 o_1 o1? o 2 o_2 o2? o 3 o_3 o3?

o 1 = x 1 w 11 + x 2 w 12 + x 3 w 13 + x 4 w 14 + b 1 , o 2 = x 1 w 21 + x 2 w 22 + x 3 w 23 + x 4 w 24 + b 2 , o 3 = x 1 w 31 + x 2 w 32 + x 3 w 33 + x 4 w 34 + b 3 . \begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1,\\ o_2 &= x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2,\\ o_3 &= x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3. \end{aligned} o1?o2?o3??=x1?w11?+x2?w12?+x3?w13?+x4?w14?+b1?,=x1?w21?+x2?w22?+x3?w23?+x4?w24?+b2?,=x1?w31?+x2?w32?+x3?w33?+x4?w34?+b3?.?

与线性回归一样,softmax回归也是一个单层神经网络。由于计算每个输出 o 1 o_1 o1? o 2 o_2 o2? o 3 o_3 o3?取决于所有输入 x 1 x_1 x1? x 2 x_2 x2? x 3 x_3 x3? x 4 x_4 x4?,所以softmax回归的输出层也是全连接层。

softmax运算

在这里要采取的主要方法是将模型的输出视作为概率。我们将优化参数以最大化观测数据的概率。为了得到预测结果,我们将设置一个阈值,如选择具有最大概率的标签。

要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。此外,我们需要一个训练目标,来鼓励模型精准地估计概率。在分类器输出0.5的所有样本中,我们希望这些样本有一半实际上属于预测的类。这个属性叫做校准(calibration)。

为了将未归一化的预测变换为非负并且总和为1,同时要求模型保持可导。我们首先对每个未归一化的预测求幂,这样可以确保输出非负。为了确保最终输出的总和为1,我们再对每个求幂后的结果除以它们的总和。如下式:

y ^ = s o f t m a x ( o ) 其中 y ^ j = exp ? ( o j ) ∑ k exp ? ( o k ) \hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)} y^?=softmax(o)其中y^?j?=k?exp(ok?)exp(oj?)?

容易看出对于所有的 j j j总有 0 ≤ y ^ j ≤ 1 0 \leq \hat{y}_j \leq 1 0y^?j?1。因此, y ^ \hat{\mathbf{y}} y^?可以视为一个正确的概率分布。softmax运算不会改变未归一化的预测 o \mathbf{o} o之间的顺序,只会确定分配给每个类别的概率。因此,在预测过程中,我们仍然可以用下式来选择最有可能的类别。

* ? a r g m a x j y ^ j = * ? a r g m a x j o j . \operatorname*{argmax}_j \hat y_j = \operatorname*{argmax}_j o_j. *argmaxj?y^?j?=*argmaxj?oj?.

尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。因此,softmax回归是一个线性模型。

损失函数

对数似然

softmax函数给出了一个向量 y ^ \hat{\mathbf{y}} y^?,我们可以将其视为给定任意输入 x \mathbf{x} x的每个类的估计条件概率。例如, y ^ 1 \hat{y}_1 y^?1?= P ( y = 猫 ∣ x ) P(y=\text{猫} \mid \mathbf{x}) P(y=x)。假设整个数据集 { X , Y } \{\mathbf{X}, \mathbf{Y}\} {X,Y}具有 n n n个样本,其中索引 i i i的样本由特征向量 x ( i ) \mathbf{x}^{(i)} x(i)和独热标签向量 y ( i ) \mathbf{y}^{(i)} y(i)组成。我们可以将估计值与实际值进行比较:

P ( Y ∣ X ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ) . P(\mathbf{Y} \mid \mathbf{X}) = \prod_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}). P(YX)=i=1n?P(y(i)x(i)).

根据最大似然估计,我们最大化 P ( Y ∣ X ) P(\mathbf{Y} \mid \mathbf{X}) P(YX),相当于最小化负对数似然:

? log ? P ( Y ∣ X ) = ∑ i = 1 n ? log ? P ( y ( i ) ∣ x ( i ) ) = ∑ i = 1 n l ( y ( i ) , y ^ ( i ) ) , -\log P(\mathbf{Y} \mid \mathbf{X}) = \sum_{i=1}^n -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) = \sum_{i=1}^n l(\mathbf{y}^{(i)}, \hat{\mathbf{y}}^{(i)}), ?logP(YX)=i=1n??logP(y(i)x(i))=i=1n?l(y(i),y^?(i)),

其中,对于任何标签 y \mathbf{y} y和模型预测 y ^ \hat{\mathbf{y}} y^?,损失函数为交叉熵损失:

l ( y , y ^ ) = ? ∑ j = 1 q y j log ? y ^ j . l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j. l(y,y^?)=?j=1q?yj?logy^?j?.

softmax及其导数

由于softmax和相关的损失函数很常见,因此值得我们更好地理解它的计算方式。利用softmax的定义,我们得到:

l ( y , y ^ ) = ? ∑ j = 1 q y j log ? exp ? ( o j ) ∑ k = 1 q exp ? ( o k ) = ∑ j = 1 q y j log ? ∑ k = 1 q exp ? ( o k ) ? ∑ j = 1 q y j o j = log ? ∑ k = 1 q exp ? ( o k ) ? ∑ j = 1 q y j o j . \begin{aligned} l(\mathbf{y}, \hat{\mathbf{y}}) &= - \sum_{j=1}^q y_j \log \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} \\ &= \sum_{j=1}^q y_j \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j\\ &= \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j. \end{aligned} l(y,y^?)?=?j=1q?yj?logk=1q?exp(ok?)exp(oj?)?=j=1q?yj?logk=1q?exp(ok?)?j=1q?yj?oj?=logk=1q?exp(ok?)?j=1q?yj?oj?.?

为了更好地理解发生了什么,考虑相对于任何未归一化的预测 o j o_j oj?的导数。我们得到:

? o j l ( y , y ^ ) = exp ? ( o j ) ∑ k = 1 q exp ? ( o k ) ? y j = s o f t m a x ( o ) j ? y j . \partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) = \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j. ?oj??l(y,y^?)=k=1q?exp(ok?)exp(oj?)??yj?=softmax(o)j??yj?.

换句话说,导数是我们模型分配的概率(由softmax得到)与实际发生的情况(由独热标签向量表示)之间的差异。从这个意义上讲,与我们在回归中看到的非常相似,其中梯度是观测值 y y y和估计值 y ^ \hat{y} y^?之间的差异。这不是巧合,在任何指数族分布(参见关于分布的在线附录)模型中,对数似然的梯度正是由这给出的。这使梯度计算在实践中变得容易。

信息论基础

信息论涉及编码、解码、发送以及尽可能简洁地处理信息或数据。

信息论的核心思想是量化数据中的信息内容,在信息论中,该数值被称为分布 P P P(entropy)。可以通过以下方程得到:

H [ P ] = ∑ j ? P ( j ) log ? P ( j ) . H[P] = \sum_j - P(j) \log P(j). H[P]=j??P(j)logP(j).

信息论的基本定理之一指出,为了对从分布 p p p中随机抽取的数据进行编码,我们至少需要 H [ P ] H[P] H[P]“纳特(nat)”对其进行编码。“纳特”相当于位,但是对数底为 e e e而不是2。因此,一个纳特是 1 log ? ( 2 ) ≈ 1.44 \frac{1}{\log(2)} \approx 1.44 log(2)1?1.44位。

交叉熵

交叉熵分类目标:

  • 最大化观测数据的似然;

  • 最小化传达标签所需的惊异。

总结

  • 机器学习模型中的关键要素是训练数据,损失函数,优化算法,还有模型本身。
  • 矢量化使数学表达上更简洁,同时运行的更快。
  • 最小化目标函数和执行最大似然估计等价。
  • 线性回归模型也是神经网络。
  • softmax运算获取一个向量并将其映射为概率。
  • softmax回归适用于分类问题。它使用了softmax运算中输出类别的概率分布。
  • 交叉熵是一个衡量两个概率分布之间差异的很好的度量。它测量给定模型编码数据所需的比特数。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:48:52  更:2021-09-11 18:50:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:43:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码