机器学习步骤
评估指标:
准确率、召回率、F值
三大要素:数据、算法、算力
Focus:
-
只能解决单一任务
-
归纳法:只关注任务本身,不关注为什么
ML-李宏毅
Kaggle
looking for Function
1. Different types of Functions
-
Regression
-
Classification
-
Structure Learning
2. how to find
Linear model :
-
function with unknow parameters
实际问题可以抽象成带有未知参数的函数:
$$
y=f(questions)
$$
这一步一般根据你对问题的了解或者学习,通过分析、分解问题并得到一些变量之间关系
首先定义一个model:
$$
y = b+wx
$$
其中:y为期望的指标(比如预测播放量、学习成绩等),x是过去数据的feature,w和b是我们自己定义的未知参数,求解要对之后的数据进行‘’学习‘’而来的,并分别被定义为weight和bias
-
define Loss from training data
接下里完善模型,在历史数据集中选择一个x1,然后我们随便选取一组b和W,定义损失函数Loss为b和W的函数:
$$
L(b,W)
$$
将计算的数值和真实数据做运算,包括MAE:
$$
e = |y-\hat y|
$$
还有MSE:
$$
e = (y-\hat y)^2
$$
接着Loss就定义为:
$$
L(b,W) = \frac{1}{N} \sum_{r=1}^n e_n
$$
之后可以在error surface中找到对应的L
-
optimization
优化的方法叫做Gradient descent,选取一组值,求梯度,梯度减小的方向就是L下降的方向,最后找到L的最小值所对应的w和b
还是随便选一组w0和b0,接着定义从初始位置往梯度下降的方向移动的步长:
$$
\left \{ \begin{array}{c} w^1=w^0-\eta \frac{\partial L}{\partial W}|_{W=W^0,b=b^0} \\b^1=b^0-\eta \frac{\partial L}{\partial b}|_{W=W^0,b=b^0} \end{array} \right.
$$
-
eta是定义的一个权值called:学习率,选取类似PID中的参数整定法
(ps:多练习Markdown的公式语法)
iteratively update w and b
直到最后梯度为0(很难),或者做不下去,来得到最优的参数
-
why hyperparameters are negative? :意思是eta前面是减号,因为要使Loss减小,所以沿着坡往下走
-
以下统称Linear Model为LM
Nonlinear model
-
折线的model,操作是Summation,通过类似控制系统画波特图的画法,累加各个环节的函数来拟合真实的折线
-
Summation的办法想用一个式子表示曲线?
所以引入sigmoid Function (three parameters),翻译成S型曲线(形状也似)去拟合曲线:
$$
y=c(\frac{1}{1+e^{-(b+wx)}})=csigmoid(b+wx)
$$
-
参数变化引起输出变化:
有了新的model,就可以做和LM同样的事
-
首先推广LM,来定义一个function with unknown
还是先选取1组data,接着随便选 i 组参数c、b、w,这样就得到:
$$
y=b+\sum_{i}c_i sigmoid(b_i+w_ix_1)
$$
然后推广为 j 组数据:
$$
y=b+\sum_{i}c_i sigmoid(b_i+\sum_j w_{ij}x_j)
$$
-
第一个b理解为整体function的截距或y轴偏移量,而第二个存在于sigmoid中exp的指数项,控制着x轴偏移
-
w_ij 需要好好理解一下,i 是sigmoid的个数,j 是x也就是data features的个数,合在一起就可以理解成第 i 个sigmoid中第 j 个x的权值
-
i 和 j 的选取,i 组sigmoid的选取自己来定,但是要考虑过拟合和欠拟合,之后会讲,j 来自数据量,也是自己决定,推测应该和内存和算力有关
之后假设选取三组数据,并随机选三组sigmoid,可以抽象出sigmoid的参数与data的关系:
-
其中r_i是第 i 组的sigmoid中的整个指数项
把整个式子表示成向量和矩阵的形式:
之后代入整个sigma里面,并求得最后的输出y:
-
代数里向量默认都是列向量,这也解释了c为什么转置
-
Loss
Loss的定义与LM的Loss一样,求一个e
-
Optimization
对于第一步里最后的Output function,把所有参数剥离出来,尤其是W,每一列与其他参数拼在一起,拼成一个长的向量theta,之后就和LM一样的步骤,首先选取一个起点 theta^0,求得此处的梯度:
$$
g=\nabla L(\theta ^0)
$$
之后迭代更新theta,使得L最小,或者求不下去:
$$
\theta ^n= \theta ^{n-1}-\eta g
$$
我们通常的寻优方式是把N个data分成许多份,每一份有B个data,每一份成为一个batch,然后去update每一个batch,所有data样本完成update之后可以定义为epoch
-
开头提到的折线的model也叫Hard sigmoid,我们用如下方法进行拟合
存在一个折线ReLU(Rectified Linear Unit):
$$
y = cmax(0,b+wx_1)
$$
-
形如:__/
想拟合Hard Sigmoid需要将sigmoid model中的sigmoid函数改成max,并且i 要是2倍!!因为两个ReLU才是一个Hard Sigmoid
$$
y=b+\sum_{2i}c_i max(b_i+\sum_j w_{ij}x_i)
$$
推广出来,我们可以把每个sigmoid或ReLU的结果a_i,作为新的x_i,来进行不断的叠加,这个参数定义为Layer,也就是一个新的需要自己决定的HyperParameters,自己决定做几层,并且我们把输入和输出之间的所有层叫做hidden Layer
-
层数上来了,如果测试集的L超过了训练集叫做Overfitting
每一个sigmoid或ReLU,叫做一个Neuron,包含这些Neuron的整个过程就叫做NN(Neural Network),最后做很多很多层,就叫做deep,最后就叫做Deep Learning