一、机器学习介绍
机器学习的定义
机器学习就是让机器具备找一个函数的能力。
机器学习的类型
机器要预测未来的数值,要找的函数输出是一个数值,一个标量(scalar),找这个函数的任务称为回归(regression)。
机器做选择题,要找的函数是从预先准备好的一些选项(类别class)中选择一个当作输出,该任务称为分类(classification)。
机器学习找函数的过程
第一步:写出一共带有未知参数的函数
f
f
f。
y
=
w
x
+
b
y=wx+b
y=wx+b
y是准备要预测的东西。
模型:带有未知参数的函数。
权重w、偏置b:未知的参数。
特征x:函数里面已知的。
第二步:定义损失函数loss
损失函数的输入为一组未知参数w和b,输出的值代表这组参数的好坏,值越大代表参数越不好。
L
(
b
,
w
)
=
1
N
∑
n
e
n
L(b,w)=\frac{1}{N}\sum_n e_n
L(b,w)=N1n∑en
其中,N代表训练数据的个数,
e
e
e表示每笔数据的误差。
预测值与实际值之间的差距(误差),有不同的计算方法:
平均绝对误差MAE :
e
=
∣
y
^
−
y
∣
e=|\hat{y}-y|
e=∣y^−y∣
均方误差MSE:
e
=
(
y
^
−
y
)
2
e=(\hat{y}-y)^2
e=(y^−y)2
二元交叉熵BCE:
e
=
−
y
log
y
^
−
(
1
−
y
)
log
(
1
−
y
^
)
e=-y\log{\hat{y}}-(1-y)\log{(1-\hat y)}
e=−ylogy^−(1−y)log(1−y^)
第三步:解一个最优化的问题
找到一组最优参数w和b使得损失L值最小。
常用的优化方法——梯度下降(gradient descent)
更新参数,总是向着梯度下降最快的地方走。
w
1
←
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
w^1←w^0-\eta\frac{\partial L}{\partial w}|_{w=w^0,b=b^0}
w1←w0−η∂w∂L∣w=w0,b=b0
b 1 ← b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 b^1←b^0-\eta\frac{\partial L}{\partial b}|_{w=w^0,b=b^0} b1←b0−η∂b∂L∣w=w0,b=b0
学习率——
η
\ \eta
η,也叫步长,决定每步迈的大小
通常设置为0.001 [0.003]、0.01 [0.03]、0.1 [0.3]、1…
学习率过大,会跳过最低点,可能不收敛。
学习率过小,参数更新很慢,收敛速度过慢。
二、线性模型(linear model)
把输入的特征x乘上一个权重,再加上一个偏置就得到预测的结果。
y
=
∑
i
=
1
n
w
i
x
i
+
b
y=\sum_{i=1}^{n}w_ix_i+b
y=i=1∑nwixi+b
线性模型存在的问题: 无论如何改变w和b,线性组合还是线性,
x
1
x_1
x1与
y
y
y的关系永远都是一条直线。
模型的偏差:模型有很大的限制。
分段线性曲线
对于图中红色的分段线性曲线,使用线性模型是没有办法拟合的。可以使用不同的蓝色函数(把 0+1+2+3 全部加起来),加上一个常数以后就可以得到完整红色的线。
可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数(Hard Sigmoid)组合起来。
直接使用蓝色曲线Hard Sigmoid不方便,Hard Sigmoid函数可以用平滑的sigmoid(Soft Sigmoid)函数来逼近。
sigmoid函数表达式:
y
=
c
1
1
+
e
−
(
b
+
w
x
1
)
y=c \frac{1}{1+e^{-(b+wx_1)}}
y=c1+e−(b+wx1)1,其中c为常数。
简写为,
y
=
c
σ
(
b
+
w
x
1
)
y=c\sigma(b+wx_1)
y=cσ(b+wx1),
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x)=\frac{1}{1+e^{-x}}
σ(x)=1+e−x1。
拟合分段线性曲线:i取值1,2,3代表下图的3条蓝线。
y
=
b
+
∑
i
c
i
σ
(
b
i
+
w
i
x
1
)
y=b+ \sum_{i} c_i\sigma(b_i+w_ix_1)
y=b+i∑ciσ(bi+wix1)
更灵活通用的函数: y = b + ∑ i c i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_ic_i sigmoid(b_i+\sum_jw_{ij}x_j) y=b+i∑cisigmoid(bi+j∑wijxj)
激活函数
激活函数的作用是引入非线性因素,使得神经网络能够学习和模拟复杂的、非线性的输入输出关系。没有激活函数,神经网络将只能学习到线性关系,这极大地限制了其应用范围和学习能力。
Hard Sigmoid还可以看作是两个修正线性单元(Rectified Linear Unit,ReLU)的组合。
常用的激活函数:ReLU(最常用),Sigmoid。
2个ReLU 才能够合成一个 Hard Sigmoid。要合成 i 个 Hard Sigmoid,
需要 i 个 Sigmoid,如果 ReLU 要做到一样的事情,则需要 2i 个 ReLU,因为 2 个 ReLU 合起来才是一个 Hard Sigmoid。
深度学习的模型结构,包括输入层、隐藏层以及输出层。
三、实践方法论
如何更好的训练模型,模型训练结果不好的原因分析。
1、模型偏差
来自于模型的限制:选用的模型不够灵活,比如模型太简单了。
表现:训练损失较大。
解决方法:①增加特征数 ②换更大的模型。
海底捞针,海里没有针。
2、优化问题
网络灵活性是够的,优化做的不够好。
一般用梯度下降进行优化。
梯度下降存在的问题:卡在局部最小值、无法找到一组真的可以让损失很低的参数。
表现:训练损失较大。
如果深的模型跟浅的模型比起来,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。
解决方法:换其他优化器,梯度下降过程中加入动量等等。下一篇详细介绍。
海底捞针,海里有针,但无法把针捞出来。
3、过拟合
表现:在训练集上表现很好 损失小,但到了测试集上表现较差 损失大。
解决办法:
①增加训练数据(最有效的方法) [做数据增强]
②约束模型:较少的参数、更少的特征、早停 正则化 丢弃法DropOut
4、交叉验证
评估模型好坏,选择模型。
k折交叉验证(k-fold cross validation)
①将数据集D随机划分为k个大小相同且互斥的子集;
②每次随机挑选k-1份作为训练集,剩下一份作为验证集;
③重复进行k次,遍历完所有情况;
④得到k个模型,k个验证误差,对k次误差取平均得到一个交叉验证误差,选择最小误差的模型。
5、不匹配
训练集与测试集数据分布不同,也称协变量偏移。