线性模型对于实际问题来说有点过于简单了,我们可以根据和调整位置,但它永远都只是一条直线。因此,需要一些更复杂的模型去拟合我们想要得到的function。
对于下面这一条红色的曲线,我们可以分段考虑,这样便很容易将其拆解为一个常数和一系列折线的组合。
在第一段红色曲线上,我们可以用起点为零,具有相同斜率的折线1去拟合,第二段、第三段类似。由此可见,只要有足够多的折线,便可以拟合出我们想要的function。
即使对于一条曲线,我们也可以对它进行采样,再将各点连起来,变成一条分段函数,然后使用多条折线。得到一个近似拟合的结果。
那么,应该如何表示一条折线呢?
我们可以用一个sigmoid函数来逼近这条折线,即
要组合出一条曲线,就需要各式各样的sigmoid函数,我们可以通过调整sigmoid的参数来制造各种不同形状的sigmoid,用各种不同形状的sigmoid,去逼近我们想要得到的function。
现在,我们再次回到最开始的这条红色曲线,我们可以用一个常数和三个sigmoid来逼近。将他们相加便可得到以下式子:
本来我们是linear model:,它有非常大的限制,只能逼近一条直线,这个限制叫做model bias。为了减少model bias,我们引入了这个式子,只要代入各个不同的,便可以组合出各种不同的function。
上面这种情况只有一个feature,现在对其扩展,当有多个feature时,我们的式子就变成了:
和
其中,代表feature的数目,代表sigmoid的数目。
对于第一个sigmoid,我们有三个feature,,它们对应权重分别为,其第一个下标表示第一个sigmoid,第二个下标分别表示第一、二、三个feature。
对于第二、三个sigmoid同理
为了简化function,我们分别用表示sigmoid中的函数。
为了简化计算,我们可以用矩阵相乘进一步表示上式
至此,可以化简为
接下来,我们令分别通过sigmoid得到。
最后,我们令 分别乘上再加上便得到了function 。
现在来做一个总结,刚刚我们所做的一连串计算就是将输入特征向量乘上矩阵,加上向量得到向量;再由向量 通过sigmoid函数得到向量,再用向量乘上加上标量得到目标函数。
即
有了新的model以后,我们进行Loss的定义。
对于这个模型,它的参数非常多,一个个列出过于麻烦,这里我们把这些参数全部拉直并
放在一个向量中,用表示。
Loss function就变成了。给定一组的值,把一组feature 代进去得到预测值,和真实值做差得到误差,所有的误差相加再求平均就得到了Loss。
找到了Loss function,接下来便是optimization,要做的就是找到一个呢?
首先我们要确定一个初始值,这里我们随机挑选一个,接下来对每一个未知的参数计算微分。即的梯度。
即。
然后便开始更新参数。这与我们更新单个参数的方法是一样的。
整个更新便是不断迭代这个过程,直到满足我们所需要的精度,便得到了。
内容来自 李宏毅2021/2022春机器学习课程