@[TOC](学习线性回归模型):
线性回归的基本要素(概念)
模型
假设房屋价格只取决于面积和房龄两个因素:即面积/平方米和房龄/年
所谓线性回归模型:即满足线性模型:price=warea⋅area+wage⋅age+b
数据集
为了得出模型,首先要有充分的数据集做基础;收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。 在机器学习术语中:数据集被称为训练集;一栋房屋被称作一个样本。真实结果(售出价格)称作:标签。用来预测真实结果的两个因素称作:特征。 特征即是用来表征样本的特点;
损失函数
在模型数据集训练中,需要衡量真实结果与预测结果之间的差值即误差。通常选择一个非负数作为误差,且数值越小表示误差越小。一个常用的选择是平方函数:
它在评估索引为 i 的样本误差的表达式为:
l(i)(w,b)=1/2(y^(i)−y(i))2,
L(w,b)=1/n∑i=1n(l(i)(w,b))=1n∑i=1/n12(w⊤x(i)+b−y(i))2. 表达公式有错误
优化函数-随机梯度下降
解析解和数值解
当模型和损失函数较为简单时,上面的误差最小化问题的解可以直接用公式直接表达出来。这类解叫做解析解;本节使用的线性回归和平方误差刚好属于这个范畴
大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)
小批量随机梯度下降(在深度学习中被广泛使用)
算法思想:它的算法很简单:先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch) B ,然后求小批量中数据样本的平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的一个正数的乘积作为模型参数在本次迭代的减小量。
公式:(w,b)←(w,b)−η|B|∑i∈B∂(w,b)l(i)(w,b)
学习率:η 代表在每次优化中,能够学习的步长的大小
批量大小: B 是小批量计算中的批量大小batch size
优化函数的两个步骤
- (i)初始化模型参数,一般来说使用随机初始化;
- (ii)我们在数据上迭代多次,通过在负梯度方向移动参数来更新每个参数;
矢量计算
在模型预测时,常常会用到同时处理多个数据样本并用到矢量计算。
两个向量相加的方法
- 向量相加的一种方法是,将这两个向量按元素逐一做标量加法。—for循环
- 向量相加的另一种方法是,将这两个向量直接做矢量加法。 —Pytorch 直接使用矢量相加
线性回归 房价模型 两种方式用来实现:
- Python 用来实现(推荐用来学习):
用来更好理解理论
能够更好的理解模型和神经网络底层的原理 - 使用pytorch的简洁实现
能够更加快速地完善模型的设计与实现
softmax的基本概念
分类概念
一个简单的图像分类问题,输入图像的高和宽均为2像素,色彩为灰度。
图像中的4像素分别记为 x1,x2,x3,x4;
假设真实标签为狗,猫或者鸡,这些标签对应的离散值记为 y1,y2,y3;
权重矢量 预测输出值
o1=x1w11+x2w21+x3w31+x4w41+b1
o2=x1w12+x2w22+x3w32+x4w42+b2
o3=x1w13+x2w23+x3w33+x4w43+b3
神经网络图
下图神经网络图就形象地描绘了上面的计算。softmax回归同线性回归一样,也是一个单层的神经网络。每个预测输出值o1,o2,o3的计算都要依赖于所有的输入 x1,x2,x3,x4,softmax回归的输出层是一个全链接层;
分类问题需要得到离散的预测输出,一个简单的办法是将输出值Oi当作预测类别是i的置信度,并将值最大的输出所对应的类作为预测输出;Eg:如果o1,o2,o3分别为0.1,10,0.5,由于o2最大,那么预测类别为2,其代表猫。
输出问题
直接使用输出层的输出会有两个问题
- 输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。Eg:刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果,那么输出值10却又表示图像类别为猫的概率很低。
- 真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax运算符(softmax operator)解决了以上两个问题 它通过下式将输出值变换成值为正且和为1的概率分布: y1,y2,y^3=softmax(o1,o2,o3)
其中:
y1=exp(o1)∑3i=1exp(oi),y2=exp(o2)∑3i=1exp(oi),y^3=exp(o3)∑3i=1exp(oi).
通过表达式就很容易看出,该三者相加之和为1,且每一项都大于0小于1;因此,这样就可以人为哪一个值Oi最大,就是哪一个类别;
softmax本质上就是来了个加权比;本质上必然不会预测类别的输出;
计算效率
1. 单样本矢量计算表达式
为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上题面的图像分类问题中,假设softmax回归的权重和偏差参数分别为:
设高和宽分别为2个像素的图像样本 i 的特征为
x(i)=[x(i)1x(i)2x(i)3x(i)4]; 是
输出层的输出为:
o(i)=[o(i)1o(i)2o(i)3];
预测为狗、猫或鸡的概率分布为: y^(i)=[y^(i)1y^(i)2y^(i)3]
softmax回归对样本 i 分类的矢量计算表达式为
o(i)y^(i)=x(i)W+b,
y^(i)=softmax(o(i)).
小批量矢量计算表达式
交叉损失函数
past
多层感知机的基本知识
深度学习主要是关注多层模型。 因此,在这里,将以多层感知机为例,介绍多层神经网络的概念
隐藏层
下图即是展示了一个多层感知机的神经网络图,它含有一个隐藏层,该隐藏层含有5个隐藏单元。
表达公式
具体来说,具体来说,给定一个小批量样本 X ,其批量大小为,输入个数为。假设多层感知机只有一个隐藏层,其中隐藏单元个数为。记隐藏层的输出(也称为隐藏层变量或隐藏变量)为,有。因为隐藏层和输出层均是全连接层,可以设隐藏层的权重参数和偏差参数分别为和 ,输出层的权重和偏差参数分别为和。
我们先来看一种含单隐藏层的多层感知机的设计。其输出的计算为
也就是将隐藏层的输出直接作为输出层的输入。如果将以上两个式子联立起来,可以得到
从联立后的式子可以看出,虽然神经网络引入了隐藏层,却依然等价于一个单层神经网络:其中输出层权重参数为,偏差参数为。不难发现,即便再添加更多的隐藏层,以上设计依然只能与仅含输出层的单层神经网络等价。
激活函数
上述问题的根源在于全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换------因为即使中间含有多个隐藏层的话,也是最终可以等价于单输出层。解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数(activation function)。
ReLU函数
ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素 x ,该函数定义为
ReLU(x)=max(x,0).
Sigmoid函数
sigmoid函数可以将元素的值变换到0和1之间:
sigmoid(x)=11+exp(−x).
tanh函数
anh(双曲正切)函数可以将元素的值变换到-1和1之间:
tanh(x)=1−exp(−2x)1+exp(−2x).
关于激活函数的选择
ReLu函数是一个通用的激活函数,目前在大多数情况下使用。但是,ReLU函数只能在隐藏层中使用。
用于分类器时,sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。
在神经网络层数较多的时候,最好使用ReLu函数,ReLu函数比较简单计算量少,而sigmoid和tanh函数计算量大很多。
在选择激活函数的时候可以先选用ReLu函数如果效果不理想可以尝试其他激活函数。
对层感知机
多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:
HO=ϕ(XWh+bh),
O=HWo+bo,
其中ϕ表示激活函数