DeepLearning基本步骤
我们需要一个可以解决问题的方案(函数)
1.建立含未知参数的函数,函数的形式很重要,函数中参数的取值也很重要。
2.定义变量Loss作为判断参数是否合理的依据(需要已有数据进行参考)。
$$
e=|y-\hat{y}|或(y-\hat{y})^2,y是推测值,\hat{y}是真实值
$$
$$
Loss: L=1/N\sum_{i=1}^{n}e_n
$$
3.最优化参数(梯度下降法)
不断迭代w的值使得Loss最小,或者规定最大迭代次数,得到最优的参数值w
以上三步就是Training(训练)
已知数据明显以七天为周期,将b固定,以第一周的数据为基准设定w1~w7,事实上对于长期的预测没有太大帮助。
遇到复杂的函数怎么办?
按步骤来
1.得到函数的形式
通过已有数据做出函数图像。
对于折线,可将多个简单的”Z型“线性模型进行组合
对于曲线,可通过折线对其进行拟合
而作为图像拟合基础的“Z”型的线性模型是一个特别的函数Sigmoid Function拟合的(S型函数)
通过调整sigmoid function的参数来调整其图像形状从而组合、拟合目标函数
于是,我们可以通过多个sigmoid函数的组合来写出最终的函数方程
简单的拟合函数可以变形成更精确的形式
将函数拆开仔细分析,可以得到矩阵表示
整理所有未知参数
2.定义Loss变量
定义Loss为有关所有参数的函数L
3.最优化参数
先随机选出一组参数值,对它们求导,进行梯度运算,直到得到零向量或者不想再做为止。
实际训练时会将大量的原始数据分成很多较小的batch,对每一个batch,首先根据batch里的数据估计出各个Loss函数的形式,为了参数可以顺利传递,参数的种类个数是不变的,但是参数的存在形式是可以不同的(幂次、组合),对于不同的batch,learningrate也可以进行调整。
分的batch越多,一次epoch所update的次数越大
其实也有真正直线型的”Z型“函数ReLU
它是由两个分段线性函数组合而成的,可以用它代替sigmoid。
两个常见的激活函数ReLU和Sigmoid
为了得到更精确的参数,往往会在激活函数内部嵌套激活函数,层层调用。
因此得名DeepLearning
事实上,层数太多也会有 过拟合现象,在已知数据层可以跑的很好,但在预测未知数据时偏差就会变大,层数如此之多,为何选择不增多激活函数的个数而是选择层层嵌套结构呢,请待下回分解。