1.线性运算模型
当我们说模型时,我们实际上在谈论根据输入x预测输出y的算法。比如,x可以是一个人的工作年限,y可以是他的月薪,我们可以用某种算法来根据一个人的工作年限来预测他的收入。比如y:
函数f(x)叫做假设,而w、b是它的参数。我们假设参数w=1000,参数b=200,如果某人的工作年限是5年的话,我们的模型会预测他的月薪为:
公司如果按照这个模型决定薪酬,我目前工作9年,那么我的工资应该为9500元,这个根本难以覆盖我在北京的生活成本。所以很明显这个模型是一个人工智障。
作为一个薪酬模型,我们考虑的因素太少了,仅仅包含了工作年限一个特征。正常影响薪酬的因素有很多,比如所处的城市、行业、公司、职务等等,如果把这些因素都考虑进去,模型就会更加靠谱。我们把工作年限、城市、行业、公司、职务这些信息,称之为特征。对于一个在北京IT行业工作了10年,目前在互联网公司做产品总监的一位员工,我们可以用这样的一个特征向量来表示:
输入x变成了一个具备5个特征的向量,相对应的,仅仅一个参数w就不够用了,我们应该使用5个参数,每个特征对应一个(因为每个特征对薪酬的影响程度不同,所以权重参数不同)。这样,我们的模型就变成:
为了书写和计算方便,偏移量b可以按照如下表示:
这样上面的式子就可以写成
设x向量为: w向量为:;
则上式写成向量的形式为(T:矩阵转置):
以上模型就叫做线性模型,因为输出y就是输入特征向量x的线性组合。
2.目标函数
在监督学习下,对于一个样本,我们知道它的特征 x ,以及标记 y 。同时,我们还可以根据模型f(x)计算得到输出 。注意这里面我们用y表示训练样本里面的标记,也就是实际值;用带上划线的 表示模型计算的出来的预测值。我们当然希望模型计算出来的 和y越接近越好。数学上有很多方法来表示两者的接近程度,比如我们可以用两者的的差的平方的1/2来表示它们的接近程度(乘1/2,是为了后面计算方便)。
我们把E叫做单个样本的误差。
训练数据中会有很多样本,比如N个,我们可以用训练数据中所有样本的误差的和,来表示模型的误差E,也就是
上式的表示第一个样本的误差,表示第二个样本的误差......。
$$ E = e_1+e_2+e_3+...+e_n \
=\sum_{i=1}^{n} e_i \
= \frac{1}{2} \sum_{i=1}^{n} (y_i-\overline{y_i})^2 $$
其中
表示第i个训练样本的特征
表示第个i样本的标记,我们也可以用元组表示第i个训练样本。
则是模型对第i个样本的预测值,通过算法计算得出。
对于模型来说,误差最小越好,也就是E的值越小越好。对于特定的训练数据集来说,的值都是已知的,所以E其实是参数w的函数。
$$
E(w) = \frac{1}{2} \sum_{i=1}^{n} (y_i-\overline{y_i})^2 \ = \frac{1}{2} \sum_{i=1}^{n} (y_i-wTx_i)2
$$
由此可见,模型的训练,实际上就是求取到合适的w,使E取得最小值。这在数学上称作优化问题,而E(w)就是我们优化的目标,称之为目标函数。
3.梯度下降优化算法
求函数的极值或者最小值,是一个很简单的数学概念。函数y=f(x)的极值点,就是它的导数f′(x)=0的那个点。因此我们可以通过解方程f′(x)=0,求得函数的极值点(x0,y0)。
计算机不会解方程。但是它可以凭借强大的计算能力,一步一步的去把函数的极值点『试』出来。如下图所示:
(https://cuijiahua.com)
首先,我们随便选择一个点开始,比如上图的x0点。接下来,每次迭代修改x的为x1,x2,x3,...,经过数次迭代后最终达到函数最小值点。
你可能要问了,为啥每次修改的值,都能往函数最小值那个方向前进呢?这里的奥秘在于,我们每次都是向函数y=f(x)的梯度的相反方向来修改x。什么是梯度呢?翻开大学高数课的课本,我们会发现梯度是一个向量,它指向函数值上升最快的方向。显然,梯度的反方向当然就是函数值下降最快的方向了。我们每次沿着梯度相反方向去修改x的值,当然就能走到函数的最小值附近。之所以是最小值附近而不是最小值那个点,是因为我们每次移动的步长不会那么恰到好处,有可能最后一次迭代走远了越过了最小值那个点。步长的选择是门手艺,如果选择小了,那么就会迭代很多轮才能走到最小值附近;如果选择大了,那可能就会越过最小值很远,收敛不到一个好的点上。
按照上面的讨论,我们就可以写出梯度下降算法的公式
其中,∇是梯度算子,∇f(x)就是指f(x)的梯度。η是步长,也称作学习速率。
梯度下降算法可以写成
如果要求目标函数的最大值,那么我们就应该用梯度上升算法,它的参数修改规则是
有了上面这个式子,我们就可以根据它来写出训练线性单元的代码了。不断优化到最优值附近,把W权重存起来,就是一个训练好的模型。有新的x数据,通过w就能预测比较准的y值。
4.小结
事实上,一个人工智能算法其实只有两部分
模型从输入特征x预测输入y的那个函数f(x)
目标函数 目标函数取最小(最大)值时所对应的参数值,就是模型的参数的最优值。很多时候我们只能获得目标函数的局部最小(最大)值,因此也只能得到模型参数的局部最优值。
因此,如果你想最简洁的介绍一个算法,列出这两个函数就行了。
接下来,你会用优化算法去求取目标函数的最小(最大)值。[随机]梯度{下降|上升}算法就是一个优化算法。针对同一个目标函数,不同的优化算法会推导出不同的训练规则。我们后面还会讲其它的优化算法。
其实在机器学习中,算法往往并不是关键,真正的关键之处在于选取特征。选取特征需要我们人类对问题的深刻理解,经验、以及思考。而神经网络算法的一个优势,就在于它能够自动学习到应该提取什么特征,从而使算法不再那么依赖人类,而这也是神经网络之所以吸引人的一个方面。