上一篇我们举了机器学习的经典案例,其中在机器学习的第一步构造函数中我们给出的模型是,但是随着我们对数据分析的逐渐深入,这个模型似乎不够精细,那么,我们怎样进一步改进呢?
线性模型(上)
分段线性模型
首先,形如,由参数乘以权重(weight)后加上偏置(bias)的都是线性模型。若线性模型的特征值有多个,则为,在训练样本充裕的情况下,j的值越大,对于模型预测会越准确。
说回预测人均寿命的例子,在这个例子中我们可以说随年份增长,人均寿命呈直线型变化,但生活中许多例子中的数据往往不会简单呈直线分布。以图中的红色函数为例,红色函数便是一条经典分段线性曲线(piecewise linear curve),一般的处理方式是拆分为多个蓝色函数与常数的和。对于由ABCD四点连成的函数,能看作函数M、函数N、函数O与常数2的组合。
除了分段线性曲线,连续的圆滑的曲线也适用。我们可以在这样的曲线上面,先取一些点,再把这些点连起来,变成一个分段线性曲线。而这个分段线性曲线跟原来的曲线,它会非常接近,如果点取的够多或点取的位置适当,分段线性曲线就可以逼近这一个连续的曲线,就可以逼近有角度的、有弧度的这一条曲线。 所以可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数组合起来。
由此,我们知道了分段线性曲线是重点。这里补充下定义,这类的人工神经网络中负责映射的函数有个统一的名字——激活函数(activation function)。常见有sigmoid函数、双曲正切函数(Tanh函数)、线性整流函数(ReLU函数)等等。我们先介绍sigmoid函数。sigmoid函数其实就是生物学的S型生长曲线函数。c决定S型曲线的最后接近常数大小,w决定S型曲线爬升速率,b决定S型曲线在坐标系的左右。
为了美观,我们省去指数部分,可以将sigmoid改写成下式:
看回图3中折线,每个蓝色函数都用各自的sigmoid函数拟合,注意每个sigmoid函数都是完整的,图中标作虚线的部分仍是函数部分。我们得到了红色函数:
上面是单一特征值与对应的情况,如果特征值数量很多,对于分段线性曲线而言,每一段函数的都会对应所有特征值。为了方便辨认,我们规定,代表在第i个Sigmoid里面,乘给第j个特征的权重,的第一个下标代表是现在在考虑的是第几个sigmoid函数。
模型变形——ReLU函数
除了sigmoid函数,ReLU函数也是激活函数常客,ReLU函数图像看起来是水平线在某一点变成斜线:
max(0, b+wx1) 是指看0跟b+wx1谁比较大,比较大的会被当做输出;如果b+wx1 < 0,输出是0;如果b+wx1>0,输出是 b+wx1。通过w,b,c可以挪动其位置和斜率。把两个ReLU叠起来就可以变成Hard Sigmoid,想要用ReLU,就把Sigmoid的地方,换成max(0, bi+wijxj)。
线性模型(下)
机器学习框架
神经网络不是新的技术,80、90 年代就已经用过了,后来为了要重振神经网络的雄风,所以需要新的名字。每一排称为一层,称为隐藏层(hiddenlayer),很多的隐藏层比较“深”,因此这套技术称为深度学习。要做得更深,首先想到的就是可以增加神经元的数量。我们在图3例子中只叠了三层,现在网络都是叠几百层的,深度学习就要做更深。但是并不是意味着层数越高一定会精确,同样的隐藏层有时在训练数据()和测试数据()上的结果是不一致的,这种情况称为过拟(overfitting)。深度学习的训练会用到反向传播(BackPropagation,BP),其实它就是比较有效率、算梯度的方法。