1 线性回归(linear regression)
线性回归问题可以使用最小二乘法进行拟合,该方法可以求得优化方程的一个全局最优解,但当数据量很大时需要很大计算量。
梯度下降法不对方程进行约束,通过迭代方式对参数进行优化,该优化解可能是一个局部最优解。
虽然梯度下降法可能得到一个局部最优解, 但对于深度学习训练来说,我们可以通过改进初始化参数并观察测试集效果选择一个合理的最优解即可实现目标。
1)样本(sample)
对于一组观测数据集,其中,为输入特征,为对应输入特征下的真实输出值。
2)假设函数(hypothesis function)
对于以上样本数据,首先需要定义一个假设函数,该函数描述了样本输入特征值与输出变量之间的函数关系,只是参数未知,如下:
, 为单个样本的多维特征值,为该假设模型的参数。
3)损失函数(loss function)
基于样本数据和假设函数可以定义一个损失函数 ,当预测结果与真实结果越接近时,该函数的值越接近0。
该函数中的未知量仅有,因此问题转化为求解下的。
4)梯度下降法
要求得损失函数的最小值对应的参数,可以使用梯度下降法求得:
首先对未知量都初始化为0,并设定一个迭代步长,
然后对所有未知量执行一次迭代 ,迭代后会逐渐靠近最优解,
在迭代一定次数后,损失函数不再下降,此时即找到了一个最优解。
以上算法中有一些注意事项如下:
.当存在多个局部最优解时,初始化值的可能需要进行不同的尝试,此处的优化过程其实可以设置任意初始化值,因为这是一个凸函数;
.迭代步长不能过大或者过小,过大会出现损失函数的震荡,过小会导致收敛速度很慢;
.对样本特征值归一化可以避免学习过程收敛速度过慢问题,使用使得归一化后特征值期望为0,方差为1。下图给出了一个直观的解释:
5)应用梯度下降拟合直线
利用以上方案给出一个直线拟合算法,给定平面上的一些点(x,y)构成一个特征集,拟合一条最佳直线,方案如下:
.假设函数为 y = wx + b,损失函数为 ;
.使用梯度下降法更新w和b,,m为样本点数量,为学习率,代码如下:
# b_current, w_current为一次迭代前的参数值,第一次迭代时使用程序给定的初始化值,如0,0等 # points为样本集 # learningRate控制迭代速度,要避免设置过大数值导致迭代过程无法收敛 # 返回值为一次迭代后新的参数值 def step_gradient(b_current, w_current, points, learningRate): b_gradient = 0 w_gradient = 0 N = float(len(points)) for i in range(0, len(points)): x = points[i, 0] y = points[i, 1] b_gradient += -(2/N) * (y - ((w_current * x) + b_current)) w_gradient += -(2/N) * x * (y - ((w_current * x) + b_current)) new_b = b_current - (learningRate * b_gradient) new_w = w_current - (learningRate * w_gradient) return [new_b, new_w]
2 全连接层网络
在第1节线性回归中,使用的线性模型为, 为单个样本的多维特征值,为该假设模型的参数。
为了提升模型的表达能力,可使用更多的连接层以增强表达能力,可表达为:,为矩阵,为行向量,其尺寸与输入输出参数关联。
根据人眼特性(感受自然界图像会忽略掉部分响应较小数据),可在每一层网络中添加一个非线性函数以增强表达能力。
一般情况下,可使用ReLU函数,其图像如下:
以上就构成了一个全连接网络,该网络使得线性回归具有更好的表达能力,其关键代码如下:
# 输入特征维度为784,输出特征维度为1 nn.Linear(784, 200), nn.ReLU(inplace=True), nn.Linear(200, 200), nn.ReLU(inplace=True), nn.Linear(200, 1), nn.ReLU(inplace=True),
3 逻辑回归(logistic regression)
到目前为止,我们实现了线性回归,并应用全连接层使其具有更强的表达能力。
对于分类问题(如10分类),一个可能的方案是将类别定义为1到10的整数,将分类问题转化为线性回归问题。
但以上方案存在一个明显的缺陷,即多个分类之间被人为的赋予了序列关系,这与分类之间的真实相似性并没有关联。
举例来说,对于0到9手写数字识别问题,7可能看起来更像1而不是更像6。
当转化为线性回归问题后,假设程序预测图像分类为6.5,最终计算结果只能为6或者7,这显然与概率常识不一致!
因此,需要使用其他方案改进分类问题,其关键思想是符合概率表达思维。
引入one-hot编码 0:[1,0,...,0],1:[0,1,...,0],2:[0,0,1,...,0],... ,9:[0,...,0,1]
1)该编码使得每个类之间不存在序列关系,
2)通过比较预测值与编码之间的欧式距离来确定最终分类,
3)手写数字7被预测为[0,.5,0,0,0,0,0,.5,0,0]是更加合理的。
通过改进网络可实现10分类目标,如下图:
。。。。。。
。。。。。。
标签:current,函数,迭代,gradient,样本,基础,学习,points,深度 From: https://www.cnblogs.com/luofeiju/p/16963387.html