深度学习模型的通用步骤
数据处理--> 模型设计--> 训练配置--> 训练过程--> 模型保存
正是由于深度学习的建模和训练的过程存在通用性,在构建不同的模型时,只有模型三要素不同,其它步骤基本一致,深度学习框架才有用武之地。
|数据处理
数据处理包含五个部分:数据导入、数据形状变换、数据集划分、数据归一化处理和封装load data函数。数据预处理后,才能被模型调用。
p.s. numpy.ndarray复制需要深拷贝
归一化的常见方法:
-
min-max归一化是对数据进行平移和缩放,使其落入[0,1]区间内:
(x^{'} = frac{x-x_{min}}{x_{max}-x_{min}})
-
z-score归一化是通过计算样本数据的方差和均值来进行归一化,是的归一化后的数据服从均值为0标准差为1的正态分布:
(x^{'}=frac {x- mu}{sigma})
|模型设计
模型设计是深度学习模型关键要素之一,也称为网络结构设计,相当于模型的假设空间,即实现模型“前向计算”(从输入到输出)的过程。
可以将预测输出过程以“类和对象”的方式来描述,成员变量为参数,成员方法为前向计算、计算损失、计算梯度、更新参数、训练等方法。
|训练配置
模型设计完成后,需要通过训练配置寻找模型的最优值,即通过损失函数来衡量模型的好坏。训练配置也是深度学习模型关键要素之一。
回归问题常用均方差作为损失函数:(Loss=(hat y-y)^2);
分类问题常用交叉熵作为损失函数:。
损失函数在设计上要考虑到合理性
,易解性
(损失函数函数处处可微)
|训练过程
训练过程是深度学习模型的关键要素之一,其目标是让定义的损失函数LossLossLoss尽可能的小,也就是说找到一个参数解www和bbb使得损失函数取得极小值。 (更新参数)
解法:
-
正规方程(局限性):由于曲线极值点出斜率为0,即求解出下面的方程找出是的代价最小的参数的:(frac{delta}{delta heta_{j}J( heta_{j})}=0)
-
梯度下降法
这种情况特别类似于一位想从山峰走到坡谷的盲人,他看不见坡谷在哪(无法逆向求解出Loss数为0时的参数值),但可以伸脚探索身边的坡度(当前点的导数值,也称为梯度)。那么,求解Loss函数最小值可以这样实现:从当前的参数取值,一步步的按照下坡的方向下降,直到走到最低点。这种方法笔者称它为“盲人下坡法”。哦不,有个更正式的说法“梯度下降法”。
-
随机梯度下降法( Stochastic Gradient Descent)
在上述程序中,每次损失函数和梯度计算都是基于数据集中的全量数据。对于波士顿房价预测任务数据集而言,样本数比较少,只有404个。但在实际问题中,数据集往往非常大,如果每次都使用全量数据进行计算,效率非常低,通俗地说就是“杀鸡焉用牛刀”。由于参数每次只沿着梯度反方向更新一点点,因此方向并不需要那么精确。一个合理的解决方案是每次从总的数据集中随机抽取出小部分数据来代表整体,基于这部分数据计算梯度和损失来更新参数,这种方法被称作随机梯度下降法(Stochastic Gradient Descent,SGD),核心概念如下:
- mini-batch:每次迭代时抽取出来的一批数据被称为一个mini-batch。
- batch_size:一个mini-batch所包含的样本数目称为batch_size。
- epoch:当程序迭代的时候,按mini-batch逐渐抽取出样本,当把整个数据集都遍历到了的时候,则完成了一轮训练,也叫一个epoch。启动训练时,可以将训练的轮数num_epoches和batch_size作为参数传入。
|总结
本节我们详细介绍了如何使用Numpy实现梯度下降算法,构建并训练了一个简单的线性模型实现波士顿房价预测,可以总结出,使用神经网络建模房价预测有三个要点:
- 构建网络,初始化参数w和b,定义预测和损失函数的计算方法。
- 随机选择初始点,建立梯度的计算方法和参数更新方式。
- 从总的数据集中抽取部分数据作为一个mini_batch,计算梯度并更新参数,不断迭代直到损失函数几乎不再下降。