机器学习的任务:
寻找一个function,将输入转成输出,比如语音识别函数,将输入的语音识别成文字。
机器学习的类别
- Regression:输出是数值的function
- Classification:输出是多个选项中的某一个
机器寻找function三部曲
1. 写出带有未知参数的函数
先猜测要求的函数大概会长什么样,比如y = b + w*x,其中,b和w就是未知的参数。 这个函数的模样是基于domain knowledege猜测的,不一定是对的。
- y = b + w*x:model,即带有未知参数的function
- x:已知的内容,叫feature
- w:weight
- b:bias
2. 定义Loss
Loss也是一个function,其输入是model中的未知参数,即b和w,其输出的值代表给未知的参数设置不同的值时预估结果好还是不好。
Loss计算方法
Loss的计算方法是从已有的训练数据得到的。Loss计算方法比如:穷举每个w和b的值,代入model中得到预估的值,再与实际值相比得到一个差值或者方差e,然后求所有e的平均值,即为L。 计算预估数据和实际数据之间的差距的常用的方法:
- MAE:mean absolute error,平均值
- MSE:mean square error,方差
- Cross-entropy:如果预估值和实际值都是概率分布,可以用这种评估方法
3. 解最优化的问题
找一个w和b,让Loss的值最小。
方法:Gradient Descent算法(真的有local minima问题?真正的痛点是什么?)
方法过程大致为:
假设只有一个参数w时,先随机选择一个值w0,计算在w=w0时,L(w)函数在w0处的微分,然后通过一个公式迭代出下一个位置w1,重复上面的过程,直到w的值不变化,或者达到指定的迭代次数,求出的wt即为结果。
同理,当有两个参数w、b时,过程同上。
- unknown parameter:机器学习自己计算出来的参数。
- hyperparameter:深度学习中需要自己设定的参数,叫超参数。
以上三步是一个完整的训练过程,然后训练结果预测未来的数据,看下是不是真的准。
实际预测
使用上面得到的model,用未经过训练的数据进行计算,得到结果,然后与数据中的实际结果进行对比,可以求出一个Loss',将这个Loss'与上面训练得到的Loss进行比对,可以看出好还是不好。
根据数据的实际情况,如果数据有明显的规律,可以修改model,比如y = b + w*x是只根据前一天的数据x来推测后一天的数据,如果数据周期是7天,那用前7天的数据对推测后一天的数据会更准确,因此可以将model修改成y = b + sum(wi * xi), i从1到7。然后重复上面的训练过程。
Linear Model
上面的model都是线性的,即y和x是线性的。但是可能实际的数据可能存在复杂的关系,不仅仅是简单的线性关系,这种Linear Model就无法描述,这种模型本身的限制叫Model Bias,那为了打破这个模型本身的限制,需要更复杂的模型。
怎么得到更复杂的模型呢?假设想得到红色的线段,可以用常数项加上一系列蓝色线段来组合起来。
任何一种 Piecewise linear curve都可以由一堆蓝色的线段来组合起来,只不过蓝色的线段不一样。那对于任何曲线来说,可以Piecewise linear curve用逼近任何连续曲线,因此,用一堆蓝色function加在一起,就能逼近任何曲线。
那怎么表示蓝色function呢?sigmoid function
sigmoid function
通过调整b、w、c,就可以得到各种各样的sigmoid function。然后将不同的sigmoid function叠起来后,就可以逼近各种piecewise linear function,然后近似各种不同的continues function。
到此,从最简单的线性的model变成现在的sigmoidfunction如下:
这个公式用图形化和线性代数的表示方法,如下:
其中,矩阵X是feature,把所有的未知参数矩阵W、b、C、b中的所有的参数拉平全放在一个向量中,表示为seita