status
type
date
slug
summary
tags
category
password
icon
Total Videos
Link
Video Duration
上文我们介绍了机器学习框架的三个步骤和一些基本概念,现在让我们看一下整个模型训练的过程。
1.设定范围(设定候选函数/模型)
上文我们讲到线性模型(Linear Models),这是机器学习中最简单的模型,但它也有很多缺点,比如只能进行线性拟合(蓝线),不管怎么调整和都不可能产生折线或曲线(红线),这对于我们找到最佳的和是非常不利的,这种来自于模型的限制称为Model Bias。
也就是说线性模型的精密度不够高,我们需要寻找更有弹性的模型。
那么我们要怎么获得红色这条折线呢?一个方法是用常数+蓝色的折线来合成红线(这一段墙裂建议看视频,文字表达太抽象了)
所有的折线都可以用这种方法合成,称为Piecewise Linear Curves——分段线性曲线,如果这种折线的转折点越多,就需要越多的蓝色折线。
那如果我们需要的是一条曲线呢?
如图,我们仍可用常数+分段线性曲线的组合来代替真正的曲线,这就是高数中的微分思想,只要取的分段线性曲线越多,那么我们就能越接近真正的曲线。
那么接下来的问题就是,我们要如何用函数表示这个蓝色的线段呢?
这条我们已经见到了很多次的蓝色的折线我们称它为Hard Sigmoid,它是由下面的蓝色曲线逼近而来,而这条蓝色的曲线就是我们常常见到的Sigmoid函数:
可以看出当,函数值无限趋近于1,反之无限趋近于0。
Sigmoid函数的形状是通过调整和来改变的。
- 控制斜率
- 控制平移距离
- c控制极值
有了上面这些知识,那么我们就可以合成红色线段了:
别忘了在三个Sigmoid函数相加后,在加上一个控制截距的常数,要注意区分这个和Sigmoid函数里面的的区别。
对于要考虑多个情况的线性模型我们有:
同样的对于Sigmoid模型,我们有:
整个模型结构如图,整个模型有三个作为输入,三个和作为Sigmoid函数的参数,我们可以得出三个式子:
运用线性代数的知识可以转为矩阵:
可以简写为:
将自变量分别代入Sigmoid模型,求出最终的y,过程如图所示:
整个模型用矩阵表示就是:
式中:
- :又称feature,是我们人为提供给计算机的输入,是已知量
- :第一个代表截距,是一个标量,也是未知量
- :权重矩阵,是未知量
- :用于控制Sigmoid函数的高度,是一个转置矩阵,也是未知量
- :第二个代表Sigmoid函数的平移值,是一个向量,也是未知量
上面的四个未知量将它们放在一个矩阵里称为,代表所有的未知参数
只要Sigmoid函数越多,就能产生更复杂的分段线性曲线
2.设定标准(定义Loss函数)
在机器学习基本概念上中我们把Loss函数定义为,代表只有和两个未知量,现在由于我们有大量的未知量,我们将Loss函数定义为。与前面提到的一样我们仍然可以用下列公式计算Loss值:
是预测值和实际label之间的差距,有MAE,MSE等算法可选。
3.找出函数(找出最优算法,获得最佳模型)
和前文一样,我们最终的目标也是获得最佳的,也采用Gradient Descent算法:
- 随机选取一个初始的
- 计算梯度(Gradient)
这个矩阵可以简写成:
3.移动。
可简写为:
4.不断重复2,3两部,迭代参数,直到达到指定轮数,或者gradient变为0(理想情况)
但在实际过程中我们通常不会让机器直接算,而是会将数据拆成一批一批的,称为batch,把所有的batch都过一遍称为一个epoch,每一次更新参数,叫做update。
举例来说,假设有10000组数据(N=10000),Batch size设置为10(B=10),所以有10000/10=1000个batch,而每一个epoch都会经历1000次的updates。这个过程中的Batch size参数也是一个hyperparameters,需要人为设定。
Sigmoid→ReLU
前面我们介绍了Sigmoid函数,它用来代替Hard Sigmoid函数,以合成Piecewise Linear curve,那还有没有其他的方法呢?答案是肯定的,修正线性单元Rectified Linear Unit(ReLU)就是其中之一:
同样的对于需要考虑多个的情况,有:
ReLU和Sigmoid都是最常用的两种函数,我们称其为激活函数(Activation Function),常作为神经网络中的隐藏层,而前面提到的线性模型是在机器学习中使用的,深度学习中也有类似的函数叫做线性层(Linear Layer),用于在非线性层间进行线性变换。
值得一提的ReLU,Sigmoid等神经网络层并不是只能通过一次,理论上来说通过的次数越多,Loss就能降低越多。下图中的蓝色圆形就代表这类函数,我们称之为神经元(Neuron),而一排的Neuron就称为隐藏层(hidden layer),整个结构就称为神经网络(Neural Network),有很多这种层就表示是很深度的,因此叫深度学习(Deep Learning)
理论上来说只要我们的ReLU,Sigmoid这种函数够多就能创造出越复杂的Piecewise Linear Curves(即纵向神经元越多),但我们没有选择这种方法而是让通过更多的隐藏层(横向隐藏层更多),这是为什么呢?答案在后面章节
- 作者:铃溪
- 链接:https://lingxi.mozzai.top/article/2597890a-81bc-4aee-981c-318501b10cec
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章