文章目录
-
- [Machine Learning](#Machine Learning)
- Training
-
- [Step 1.Contract Function with Unknown Parameters](#Step 1.Contract Function with Unknown Parameters)
- [Step 2.Define Loss from Training Data](#Step 2.Define Loss from Training Data)
- [Step 3.Optimization](#Step 3.Optimization)
- [Linear Model](#Linear Model)
-
- [Piecewise Linear Curve](#Piecewise Linear Curve)
- [Beyond Piecewise Liner?](#Beyond Piecewise Liner?)
- [Model Deformation](#Model Deformation)
Machine Learning
机器学习就是让机器具备学习的能力,具体而言,是让机器具备找一个函数的能力,具此能力找到一个函数后,可以将某输入转化成某输出,例如:AlphaGo的输入是一个棋盘的当前状态或图片,输出即为下一步最佳落子位置.
根据要找的函数不同,可以将机器学习分为多种类别:
- 回归(regression):假设要找的函数的输出是一个数值,一个 标量(scalar),这种机器学习的任务称为回归.如房价预测.
- 分类(classification):分类任务要让机器做选择题。 人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的 选项里面选择一个当作输出,该任务称为分类.如垃圾邮件识别.
在机器学习领域里面,除了回归跟分类以外,还有结构化学习(structured learning)。机 器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写 一篇文章。这种叫机器产生有结构的东西的问题称为结构化学习。
Training
Step 1.Contract Function with Unknown Parameters
Model: y=b+w*x (based on domain knowledge)
Feature: y (output) x(input)
Parameters: w(weight) b(bias)
Step 2.Define Loss from Training Data
Loss也是一个函数 -> L(b,w) => how good a set of values is
通过代入实际参数,以及x,获得y,与真实值(label)计算差距e,最后计算累加平均
L = 1 N ∑ e n L=\frac{1}{N}\sum e_n L=N1∑en
其中,N 代表训验数据的个数,计算出一个 L,L 是每一笔训练数据的误差 e 相加以后的结果。L 越大,代表现在这一组参数越不好,L 越 小,代表现在这一组参数越好。
估测的值跟实际的值之间的差距,其实有不同的计算方法,计算绝对值的差距,,称为平均绝对误差(Mean Absolute Error,MAE)。
e = ∣ y ^ − y ∣ e=|\widehat{y}-y| e=∣y −y∣
如果算平方的差距,则称为均方误差(Mean Squared Error,MSE)。
e = ( y ^ − y ) 2 e=(\widehat{y}-y)^2 e=(y −y)2
有一些任务中 y 和 标签 都是概率分布,这个时候可能会选择交叉熵(cross entropy)
根据不同参数所得损失画出的等高线图称为误差表面(error surface)
Step 3.Optimization
找到一个w*,b*= arg min L(w,b)
如何找到? -> 梯度下降法(Gradient Descent)
- 随机选取初始值 w~0~(或b~0~)
- 计算偏导(梯度值)
- 根据梯度值对w更新,使变换后的新梯度下降
- 斜率大小和预设learning rate 决定步进速度(hyperparameter-超参数->预设)
![](https://i-blog.csdnimg.cn/img_convert/2892f0b89b63e20b7ff11a808baa5cdd.png)
缺点 :从本例中可以明显看出,梯度下降法可能只能找到局部最小值,而非全局最小值
但是,局部最小值算得上一个真正的问题吗?
Linear Model
在机器学习中,线性模型和非线性模型指的是模型如何处理输入数据以预测输出。
- 线性模型 线性模型假设输入特征(比如房屋面积、房间数量等)与目标变量(比如房价)之间的关系是线性的。这意味着每个输入特征对目标变量的影响是独立的,并且这种影响是成比例的。简单来说,如果画出这些关系图,它们会形成一条直线或一个平面。例如,预测房价,把房子面积当作一个特征 ,如果是线性关系,可能就是房价等于面积乘以一个价格系数再加上一个固定值,意味着面积每增加一定量,房价就会按照固定幅度增加。
- 非线性模型 非线性模型则认为输入特征和目标变量之间的关系不是简单的直线关系。换句话说,非线性模型能够捕捉到输入特征与目标变量之间更复杂的关系。这些关系不能通过直线或者平面来表示。比如预测一个城市的犯罪率,可能和人口密度、教育水平、经济发展程度等多个特征有关,这些特征和犯罪率之间的关系不是简单的比例关系,可能人口密度达到一定程度后,犯罪率增长的速度会变快,这就是非线性关系。
线性模型对于实际问题可能过于简单,因为x和y之间可能有比较复杂的关系,这种限制被称为Model Bias
![](https://i-blog.csdnimg.cn/img_convert/17d978b6c923254ec8286fe08234d15a.png)
Piecewise Linear Curve
如图所示,线性模型有很大的限制,无法表示红色的情况.而红色线,即分段线性曲线(piecewise linear curve)可以看作是一个常数,再加上一堆蓝色的函数
![](https://i-blog.csdnimg.cn/img_convert/19f69e4470f6e9d37c860040e3c39e65.png)
Beyond Piecewise Liner?
Function
在分段线性曲线上取足够多且位置合适的点,分段线性曲线就可以逼近这一个连续的曲线,就可以逼近有角度的、有弧度的这一条曲线。 所以可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数组合起来。
![](https://i-blog.csdnimg.cn/img_convert/e0b0a20b58716238bd44aefb1b25eb11.png)
如何构造一些蓝色函数,x和y的关系比较复杂时,并不容易直接写出,但是可以用一条曲线来理解它,即用Sigmoid函数逼近Hard Sigmoid,其表达式为:
y = c ∗ 1 1 + e − ( b + w x ) y=c*\frac{1}{1+e^{-(b+wx)}} y=c∗1+e−(b+wx)1
其横轴输入为x~1~,输出为y, c为常数:
![](https://i-blog.csdnimg.cn/img_convert/b0ed634be350ac9bf2e02fe1d9221249.png)
显然,y会收敛于0~c之间,也可以写成y=c*sigmoid(b+wx~1~),这样通过修改参数,构造不同的sigmoid
![](https://i-blog.csdnimg.cn/img_convert/45c8ae6660dc508d458afb81da7f9c9e.png)
组合不同sigmoid函数,就完成了对原始分段线性曲线的逼近了
![](https://i-blog.csdnimg.cn/img_convert/f121185d89ec8fb3e13cb61ec2c9573a.png)
此外,我们可以不只用一个特征x~1~,可以用多个特征代入不同的c, b,w,组合出各种不同的函数,至此完成从线性到非线性,从简单函数 到更有灵活性(flexibility)的函数:
![](https://i-blog.csdnimg.cn/img_convert/918abda3e6365a7d6ad258aa6aa250ed.png)
形象化如下图:
![](https://i-blog.csdnimg.cn/img_convert/0ac63c5759374e4a771ff7e82f98fd57.png)
至此,我们完成了模型构造
Loss
损失函数的参数变更为提取出的未知参数集
![](https://i-blog.csdnimg.cn/img_convert/8bc96fd2cb2232b3ac08aee8672de680.png)
Optimization
在参数比较少的情况下,我们可以直接进行枚举,得到最小损失的参数,然而,由于参数非常多,必须采用一些如梯度下降的优化技巧来更好的降低损失
![](https://i-blog.csdnimg.cn/img_convert/0ec62881775daa0c05c5d91d37ced816.png)
通过此过程计算出梯度为0向量,导致无法再更新参数为止,不过在实现上几乎不太可能梯度为0,通常会停下来就是我们不想做了。
在实际梯度下降过程中,会把数据随机分成多个batch,进行分组计算损失,每个batch计算出损失后,根据其计算梯度,再更新参数.按这种分组方法将全部数据计算过一次后,称为一个epoch
Model Deformation
之前,我们用Sigmoid函数来逼近Hard Sigmoid,事实上,Hard Sigmoid可以看作两个Rectified Linear Unit (ReLU)的合并,其公式为:
c ∗ m a x ( 0 , b + w x ) c*max(0,b+wx) c∗max(0,b+wx)
诸如此类的函数,称之为激活函数,通过增加更多激活函数逼近真实情况,但是效果仍有限,于是对模型进行改进,将一次输出作为输入再次进入新模型优化,这样就产生了一个类似人脑神经元的模型.
![](https://i-blog.csdnimg.cn/img_convert/96ab85b2094ac513eae8ba0fce110359.png)
如上图,Sigmoid 或ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network),人脑中就是有很多神经元,很多神经元串起来就是一个神经网络,将每排神经元看作一层,称为隐藏层(hidden layer),这套技术就称为了深度学习.