机器学习入入入入门(1)
0.前言
本系列文章是自学李彦宏-机器学习时的学习笔记,为了便于自己以后翻阅复习,同时也为了梳理整个知识框架,以便于其他同学学习、交流。
1. 基本步骤
- 根据经验,猜测面对一个问题,预计应满足一个什么样的函数模型(例如线性模型)
- 定义代价损失函数
Loss Function
,自变量为函数模型的参数;用于评估一组特定的参数对于这个模型&训练数据来讲有多好。MSE:mean square error
均方误差 - 激励Optimization:迭代以更新参数,使得代价损失函数越来越小
以上步骤只是对模型的一个训练,还不能确保在整个问题空间中可以得到最优的结果。
2. 基本概念
2.1 Hyperparameters
在机器学习的过程中,我们实际上在通过不断地训练,自动让模型学习到参数的最优取值;而在学习过程中,需要自己手动设置的参数,则成为超参数(Hyperparameters)
。例如梯度下降中的 学习率(learning rate)
2.2 local minima
在机器学习中(例如 Gradient Descent),理论上会有陷入局部最优解的情况,但这是一个fake program,真正在机器学习中的困难不是局部最优的问题。
3. linear model
3.1 基础概念
将feature进行一个线性组合,再加上一个bias,就组成了一个线性模型。
局限:模型太过简单,无法表示复杂关系,这种由模型的特点而引起的限制就叫做Model Bias
4. piecewise linear curve
4.1 基本概念
分段线性曲线,即可以将该函数曲线分割成不同线性函数的组合
4.2 思想
对于非线性的函数,我们也可以通过取点的方法,将其近似为一个分段线性曲线。
因此,对于任意函数模型,都可以通过用一堆类似于蓝色曲线的函数来组合、表达出来。
4.3 Sigmoid Function
对于上面提到的蓝色曲线,我们可以通过Sigmoid函数来表示
Sigmoid函数的表示:
通过调整为不同的W、b、c,就可以得到不同形状的sigmoid,即得到不同形状的蓝色曲线,用以组合表示不同复杂程度的模型。
下图是改变不同参数引起的sigmoid曲线的变化:
得到的最终的模型:可以表示任意模型
4.4 从Linear Function 到Non-Linear Function
通过将不同的sigmoid函数线性组合,提高模型的表达能力。(也引入了更多的features、parameters)
4.5 神经网络
如果对于一个模型,我们想用3个sigmoid来组合起来表示他,那么
括号里做的事情,就是把对应的特征xi乘以对应的权重wij,然后求和,这其实就是神经网络中hidden layer的某一节点所做的事情。我们在神经网络中干的事,其实就是将多个蓝色曲线组合起来,然后得到结果,其中一个节点对应一个蓝色曲线中的括号,再经过激励层,就得到了一个真正的蓝色曲线。
矩阵表示:
激励:
将每一个阶段得到的结果ri通过sigmoid函数,得到a
计算结果:(聚合所有蓝色曲线)
即将所有蓝色曲线乘对应的ci,最后加上一个b
神经网络的一个完整表示:
4.6 泛化的机器学习步骤
- 设定的模型可以是任意的,通过多个形似sigmoid的蓝色曲线来近似表示他
- 对于新的代价函数
L(theta)
,theta表示模型中的所有参数 - Optimization:与之前相同,对于每个参数都要更新
更新方法:gradient-梯度
4.7 batch gradient descent
数据太多的时候,随机分成不同的batch,按batch对模型进行训练。
依次用每个batch计算出代价,然后更新参数
update:
每次用batch更新一次参数,称为一次update
epoch:
把所有的batch都运行一遍,叫做一次epoch
Hyperparameters: Batch Size
5. Rectified Linear Unit(ReLU)
5.1 基本概念
用ReLU来更精确的拟合蓝色曲线
多个ReLU加起来,就可以更准确的拟合(由于后面一个曲线斜率为正,一个曲线斜率为负,故加起来可以成为一条水平线)
换后:
两条ReLU等于一条sigmoid曲线
6. 更深的神经网络
通过增加层数,增加模型的复杂度,以提高模型的准确度