由于本人的工作与深度强化学习相关,想找个机会重新复习下深度强化学习的相关知识,正好手上有这本书,粗略一看感觉知识点挺简洁的,内容也挺全面,也提供了一些学习资料。所以开个坑记录一下这本书的学习过程。这本书的相关资料(PPT,源代码)可以在以下链接获取:https://www.ituring.com.cn/book/2982
首先我们会按照这本书的顺序讲一下机器学习的一些基础理论部分。
线性模型是一类最简单的监督机器学习模型,常用于简单的机器学习任务。可以将线性模型视为单层的神经网络。
线性模型是指通过一系列输入变量(自变量)的线性组合来预测输出变量(因变量)的值。其中,线性组合指的是将各自变量乘上一个权重,然后加上一个常数截距。这个过程可以用以下公式表示:
其中, 是输出变量,到 是自变量,是截距,到 是各自变量的权重。线性组合也可以写成如下形式:
比如在房价问题上,就是房屋的特征(为房屋的面积,为房屋的地段等等),就是房价,它既依赖于房屋的特征,也依赖于参数和。如果为房屋的面积,那么就是房屋面积对房价贡献的大小,越大,说明房价与房屋面积的相关性越强,这就是为什么被称为权重。与房屋的特征无关,只与线性函数简单相加,因此被称作偏移量。可以把偏移量视作市面上房价的均值或者中位数,它与待估价房屋的特征无关。
线性回归就是一种基于线性模型的机器学习算法,旨在寻找最佳拟合直线来预测输出变量的值。具体来说,线性回归通过训练数据集中的样本来确定每个自变量的权重和截距,以便在新数据上进行预测:
最小二乘法是一种常见的数学方法,用于拟合数据和求解线性回归模型。其主要思想是通过最小化预测值与真实值之间的平方误差来确定模型中的未知参数。
具体地说,假设我们有一组数据,并且我们希望找到一个形如 的线性模型来描述这些数据。我们可以用最小二乘法来确定参数和的值,使得所有数据点到直线的距离的平方和最小。
比如在房价问题上,模型对第个房屋价格的预测是,而这个房屋的真实价格是,我们希望与尽量接近,因此平方差越小越好,定义损失函数:
最小二乘法希望找到使得损失函数尽量小,也就是让模型的预测尽量准确的和 。在实践中最常用数值优化算法(比如随机梯度下降法)来迭代更新和。
在模型参数数量较大,而训练数据不够多的情况下,常用正则化缓解过拟合,加上正则项后,上述最小二乘法模型变成:
其中的是损失函数,是正则项,是平衡损失函数和正则项的超参数。常用的正则化项有L1正则化项和L2正则化项:
逻辑斯谛回归(Logistic Regression)是一种用于分类问题的机器学习算法。它通过拟合数据集中的特征和标签之间的关系来预测新数据点的标签。逻辑回归的输出是一个概率值,表示该数据点属于某个类别的概率。
逻辑回归使用的数学函数是sigmoid函数,将输入的值映射到0和1之间的概率值。sigmoid函数的公式为:
在讲解算法之前,先讲一下交叉熵(Cross-entropy),它是一种用于衡量两个概率分布之间差异的指标。在机器学习中,交叉熵通常用于衡量模型预测结果与实际结果之间的差异。使用向量
和
表示两个m维的离散概率分布,向量的元素都非负,且其中所有元素之和为1,它们之间的交叉熵定义为
熵(entropy)是交叉熵的一种特例:
与交叉熵作用类似的是KL散度(Kullback-Leibler divergence),也被称为相对熵(relative entropy),也是一种用来衡量两个概率分布之间差异的方法,对于离散分布,KL散度定义为
这里约定,KL散度问题非负的,而且当且仅当时KL散度的值为0。这意味着当两个概率分布一致时,它们的KL散度达到最小值0。从KL散度和交叉熵的定义不难看出
由于熵是不依赖于的函数,因此一旦固定,KL散度就等于交叉熵加上常数,如果是固定的,那么关于的优化KL散度就等价于优化交叉熵,在实际工作中数据的分布总是固定不变的,而我们需要将模型预测的分布尽量与数据的分布接近,也就是使将KL散度当作最小化优化问题,也就等价于交叉熵最小化优化问题,这就是为什么常将交叉熵作为损失函数。
根据书中的例子,收集n份血检报告和最终诊断作为训练集:,向量表示每i份血检报告中的所有指标,二元标签表示阳性,表示阴性。分类器对第i份血检报告的预测是,而真实情况是,想要用交叉熵衡量预测值和真实值的差别,得把它们表示成向量:
两个向量的第一个元素都对应阳性的概率,第二个元素都对应阴性的概率。因为训练样本的标签是给定的,所以两个向量越接近,它们的交叉熵越小。定义问题的损失函数为交叉熵的均值:
我们希望找到使得损失函数尽量小,也就是让分类器的预测尽量准确的和:
可以看出该公式与回归问题类似,而这类优化问题称为逻辑斯谛回归。通常也是使用随机梯度下降算法来迭代更新参数。
上一节的例子是二分类问题,其中数据只划分为两个类别,阴性和阳性。而本节将介绍一个多分类模型——Softmax分类器,它将输入向量映射到一个概率分布上。在Softmax分类器中,每个类别对应着一个得分,这些得分通过Softmax函数进行归一化,得到每个类别对应的概率值。因此,Softmax分类器可以用来预测一个输入样本属于哪个类别。
在介绍softmax分类器之前,先介绍softmax激活函数,它的输入和输出都是k维向量,设是任意k维实向量,它的元素可正可负,softmax函数定义为:
这个函数的输出是一个k维向量,元素都是非负的,且相加为1。
线性softmax分类器是“线性函数+softmax激活函数”,其定义为
, 其中
其中,是分类器的参数,d是输入向量的维度,k是标签的数量。
书中的例子是有n=60000张的手写数字图片,每张大小为28*28像素,需要把图片变成d=28*28=784维的向量,记作。每张图片有一个标签,它是0到9的整数,共10个,需要对它做one-hot编码,例如0是[1,0,0,0,0,0,0,0,0,0], 1是[0,1,0,0,0,0,0,0,0,0], ... ,9是[0,0,0,0,0,0,0,0,0,1] ,变成k=10维的one-hot向量,记作。
对于第i张图片,分类器做出预测:
它是k=10维的向量,可以反映分类结果。我们希望它尽量接近真实标签,定义损失函数为平均交叉熵:
我们希望找到使得损失函数尽量小,也就是让分类器的预测尽量准确的和:
然后使用随机梯度下降算法来迭代更新参数。
全连接层(Fully Connected Layer)是神经网络中最常用的一种层类型,也称为密集连接层或全连接层。它的作用是将输入层所有的神经元都与输出层的所有神经元相连接,即每个输入神经元都与每个输出神经元都有连接。
在全连接层中,每个神经元的输出是由所有前一层的神经元加权求和得到的,并通过一个激活函数进行非线性变换。这些权重和偏置值是神经网络训练过程中需要学习的参数。因此,全连接层通常是模型中参数最多的一层。
我们可以把全连接层当作基本组件,然后像搭积木一样搭建一个全连接神经网络,也叫多层感知机:
卷积神经网络(Convolutional Neural Network,CNN)是一种常见的深度学习神经网络,用于图像分类、物体识别和计算机视觉等任务。本书没有具体解释CNN的原理,也不会用到这些原理。只需要记住:CNN的输入是矩阵或三阶张量,CNN从该张量中提取特征,并输出提取的特征向量。图片通常是矩阵(灰度图)和三阶张量(彩色图片),可以用CNN从中提取特征,然后用一个或多个全连接层做分类或回归。
线性模型和神经网络的训练都可以描述成一个无约束优化问题:
对于这类优化问题最常使用的算法是梯度下降法和随机梯度下降法。梯度是一个数学概念,对于一元函数,我们用“导数”这个概念。一元函数的导数是标量,对于多元函数,我们用“梯度”和“偏导”的概念,多元函数的梯度是向量,向量的每个元素是函数关于一个变量的偏导。
在机器学习中,既然我们的目标是最小化目标函数,就应该沿着梯度的负方向更新参数,也就是梯度下降法,这样做可以逐渐接近函数的局部最小值。对于给定的目标函数,我们首先计算其关于每个参数()的偏导数,这些偏导数构成了梯度向量。然后,我们将梯度向量与一个称为学习率的正数相乘,并将结果减去当前参数值,得到新的参数值。
重复这个过程直到达到收敛条件或达到预定义的迭代次数。 这样就可以找到目标函数的局部最小值。
需要注意的是,梯度下降法的基本思想是通过计算所有样本的平均梯度来更新模型参数,它无法保证找到全局最小值,因为有多个局部最小值可能存在。而随机梯度下降法每次仅利用单个样本的梯度信息进行参数更新,因此容易跳出局部最小值。
反向传播(backpropagation)是一种训练神经网络的算法。它通过计算损失函数对每个参数的梯度,然后使用梯度下降法来更新参数,从而使神经网络学习到正确的输出。
具体来说,反向传播算法会先通过前向传播计算出神经网络的输出,然后将输出与真实值进行比较,得到损失函数。接着,算法会通过链式法则来计算每个参数对损失函数的梯度,并使用梯度下降法来更新参数。这个过程会一直重复,直到达到预设的停止条件。
本书的第一章主要讲了入门深度强化学习的关于机器学习的一些基本概念,简要介绍线性模型、神经网络、梯度下降和反向传播。如果读者有不错的机器学习基础,可以跳过这一章。总体而言这章的内容讲得比较基础,如果有想要更深入的理解可以参考其它书籍。