机器学习(1)
1 定义
让计算机找到一个函数(程序员很难自主编写),用于解决人们的问题。
1.1 不同函数类别
- Regression(回归):输出是一个数值的函数
- Classification(分类):给定类别,函数会输出正确的一类。比如侦测邮件是否为垃圾邮件。
- 除了以上常见的两类,还有Structured Learning(产生有结构的输出,比如图像,文本)。
1.2 视频流量预测函数举例
输入参数为前面几天的账号流量信息(如每天视频播放量,点赞人数等),输出明天的流量信息。
步骤:
-
写出带有未知参数的函数(Model)。只是作出一个初步的预测。
b(偏差,bias), w(权重,weight)是未知的参数(从数据中学习得知)
-
定义LOSS。LOSS也是一个函数,输入是Model里面的参数(b, w),输出的值反映这个model是否正确。
比如假设b=0.5k,w=1。则L(0.5k,1), y = 0.5 k + 1 x 1 y=0.5k+1x_1 y=0.5k+1x1
检测的方法就是将历史流量数据传入,比对真正的结果,计算二者的差距。真实的值称为label。
L O S S : L = 1 N ∑ n e n LOSS: L=\frac{1}{N}\sum_{n}e_n LOSS:L=N1∑nen
L与函数质量成反比。如果 e = ∣ y − y ^ ∣ e = \lvert y-\hat{y} \rvert e=∣y−y^∣,则L称为MAE(mean absolute error);如果 e = ( y − y ^ ) 2 e = ( y-\hat{y} )^2 e=(y−y^)2,则L称为MSE(mean square error)
-
最佳化参数。最佳的w, b让L最小
- 随机选一个点 w 0 w^0 w0
- 计算KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲{L}}{\part{w}}|… ,如果导数小于0,则让w变大那么L就会变小。那w跨多大?取决于斜率大小,斜率大就则w更新跨度( η \eta η,超参数)大 一点。KaTeX parse error: Undefined control sequence: \part at position 34: …^0}-\eta \frac{\̲p̲a̲r̲t̲ ̲L}{\part w}|_{w…
- 逐步更新w。更新次数可以自己决定,也是一个超参数(控制参数的参数)
1.3 重新改写模型
这种线性回归模型具有天生的限制,因为实际的数据是会波动的,并不是呈线性的。
折线 = 常数 + 一系列折线集合(把折线根据斜率的不同拆分为各个阶段,每个阶段都有集合中的一个折线加上常数对应表示)。
那曲线(可以通过取样变成折线)各式各样,折线集合也很多种。如何确定合适的折线集合?通过sigmoid函数逼近:
1、2、3就是折线集合,加上常数线0,表示红色的折线。
新的模型为: y = b + ∑ i c i s i g m o i d ( b i + w i x 1 ) y=b+\sum_{i}{c_i}sigmoid(b_i+w_ix_1) y=b+∑icisigmoid(bi+wix1) ,将sigmoid内的前一天替换成前j天的特征: y = b + ∑ i c i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_{i}{c_i}sigmoid(b_i+\sum_{j}w_{ij}x_{j}) y=b+∑icisigmoid(bi+∑jwijxj)
就是把 b i + w i x 1 b_i+w_ix_1 bi+wix1 (这是只参考1天的资料)换成 b i + ∑ j w i j x j b_i+\sum_{j}w_{ij}x_{j} bi+∑jwijxj 参考前j天的资料,不同参考天数的x乘上不同的权重w再相加。
这样就重新建模带有未知参数(b、转置向量c、向量b、矩阵w)的函数。可以将这四个位置参数合成一个向量 θ \theta θ
定义LOSS的方法还是一样,找到一组θ让L最小。对向量θ内每个值求微分,微分集合称为gradient: g = ▽ L ( θ 0 ) g=\triangledown{L(\theta^0)} g=▽L(θ0)
实际上求这种微分集合,是将所有资料(称为N笔资料)分成多个batch,对每个batch算一个loss,比如L1,再根据learning rate,将参数变为Θ1传给下个batch计算L2。所有batch都运行了一遍称为一个epoch,而每次更新参数称为一个update。
一个epoch内的update = N/batch size(每个batch有多少笔资料) = batch counts(多少个batch)。
激活函数
这里的sigmoid被称作激活函数,激活函数有很多种比如ReLU(修正线性单元)。
所以hard sigmoid也可以被ReLU所替换,只不过relu的个数要变化,原本一个sigmoid就可以表示,需要两个ReLU所表示(所以是2i)。
原本的模型可以表示为: y = b + ∑ 2 i c i m a x ( 0 , b i + ∑ j w i j x j ) y=b+\sum_{2i}c_imax(0,b_i+\sum_{j}w_{ij}x_j) y=b+∑2icimax(0,bi+∑jwijxj)
深度学习
a可以作为x再进行一次激活函数运算:
这就是神经网络。每一个neuron,又称作hidden layer,整体又可以称作deep learning。随着层数越叠越多,LOSS越来越小。够多的sigmoid或者ReLU可以逼近任何的曲线。
**过拟合(overfitting):**训练资料的测试结果,和在未看过的资料测试的结果相反。如下图:
那选三层还是四层模型?三层在未看过的资料测试表现较好。